CPU和GPU的异步并行问题
1、问题描述:
(1)在下面所附的程序中 Part 1 表示在CPU上并行执行的部分;Part 2 表示创建核函数,然后在GPU上执行的部分;
(2) 目前的程序:当在CPU上创建的48个线程执行完后,才会创建核函数,执行GPU端的程序。
(3)想要达到的目的:实现 Part 1 和 Part 2 的并行执行,即CPU和GPU的异步并行,请教怎么实现呢?
HANDLE hThread[48];
int coef_1_48[48 * 4096 * 128];
DWORD WINAPI fun(LPVOID lpParam)
{
//此处省略 N 行语句
memcpy(coef_1_48 + id * 4096 * 128, coef_1, 4096 * 128 * sizeof(int));//当 Part 1 执行完后,需要将coef_1_48传递到GPU端。id的值是通过fun传递过来的参数,取值范围是 0~47。
// int coef_1[4096 * 128];
return 0;
}
main()
{
int i;
int frame;
for(frame=0;frame<576;frame+=48)//一共有576帧图像,每次并行执行48帧的操作,循环 576/48=12 次
{
//*************************Part 1 开始***************************************
for(i=0;i<48;i++)
{
hThread[i] = CreateThread(NULL, 0, fun, ¶[i], 0, NULL);
}
for (i = 0; i < 48; i++)
{
WaitForSingleObject(hThread[i], INFINITE);
}
//*************************Part 1 结束***************************************
//*************************Part 2 开始***************************************
{
cudaMalloc 分配空间
cudaMemcpyHostToDevice 复制数组coef_1_48中的数据到GPU端
kernel<<<block,thread>>>() 调用核函数
cudaMemcpyDeviceToHost 返回结果
}
//*************************Part 2 结束***************************************
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
既然能启动48个线程,那就把你的part1和part2也分到两个线程里吧。