怎么让CUDA并行计算与CPU多核多线程并行计算同时执行?

chengfei900203 2017-07-11 11:32:03
如下程序所示,程序中有一个for循环,需要执行 576/48 =12次,每次for循环执行的操作包含两大部分:
(1)Part 1 :在CPU端,创建了48个线程,执行完所有的线程后,需要将一个数组 coef_1_48 中的数据传递到
GPU端
(2)Part 2 : 在GPU端并行执行
问题:当在GPU端执行的时候,CPU会处于闲置等待状态,只有当GPU端的程序执行完后,CPU才会进行下一次循环,怎么才能让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 结束***************************************

}
}
...全文
1385 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

579

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧