怎么让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 结束***************************************

}
}
...全文
1386 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
影音转码快车 MediaCoder 是一个免费的通用音频/视频批量转码工具,它将众多来自开源社区的优秀音频视频编解码器和工具整合为一个通用的解决方案,它可以将音频、视频文件在各种格式之间进行转换。 影音转码快车 MediaCoder Premium 中文版影音转码快车 MediaCoder Premium 中文版 MediaCoder 是一个强大的音频/视频批量转码工具,它将众多来自开源社区优秀的音频视频软件整合于一个友好的图形界面。在视频方面,它使用MEncoder作为后端,并支持与运用CUDA技术加速移动设备视频转换,充分发挥了MEncoder所提供的丰富特性;在音频方面,它使用MPlayer和Winamp的输入插件和作为解码器,结合各种不同的编码器,能够在不同的音频格式间进行转换,并自动添加标签(tagging),此外还能够将视频文件的音轨转换成独立的音频文件(如VOB->MP3),并可以使用各种音频过滤器(如resample、normalize等)。 MediaCoder Premium 功能简介 实现各种音频视频格式间的相互转换 整合多种解码器和编码器后端以及混流工具,供用户自由组合使用 极为丰富的可调转码参数 多线程设计,单个任务即可利用多核处理器能力 多任务并行处理,最大化多处理器利用率 良好的可扩展的程序架构,不断增加新的格式的支持 硬件编码加速(nVidia CUDA和Intel Media SDK) MediaCoder Premium 主要特点 基于优秀的众多的开源编解码后台,能够解码和编码的格式多 采用先进的NVIDIA CUDA技术加速H.264编码,加速转码过程中的Filter操作(如:改变分辨率、改变帧率、降噪、反交错等),一定程度上提高了转码效率。 良好的多线程设计,为多核处理器优化,在四核上可达到90%以上的平均CPU使用率 极为丰富的可调整的编码参数 全部编解码器自带,不依赖于系统的编解码器和任何组件 良好的可扩展的程序架构,快速适应新的需求,不断增加新的格式的支持 可用脚本语言扩展界面,支持众多影音设备 MediaCoder Premium 支持格式 支持的源文件格式: 音频格式:MP3, OGG/Vorbis, AAC, MusePack, WMA, RealAudio, FLAC, WavPack, APE, WAV, CUE Sheets, 以及任何Winamp输入插件所支持的格式 视频格式:AVI(Xvid/DivX/H.264), MPEG1/2/4 (MPG/DAT/VOB), QuickTime(MOV), WMV/ASF, MP4, Matroska 支持的目标音频(编码)格式: 有损格式: MP3, Ogg/Vorbis, LC-AAC (iTunes, FAAC), HE-AAC/PS (CT, Helix), MusePack, WMA 无损格式: FLAC, WavPack, Monkey’s Audio (APE), WMA Lossless, WAV 支持的目标视频(编码)格式: H.265, H.264, Xvid, DivX 4/5, MPEG1/2/4, H.263,H263+,Flash video,real video,wmv7/8/9,raw video,theora,dirac video,ms-mpeg4-v2,DV video,motion jpeg,huffyuv,amv,snow等 支持的目标视频(容器)格式: AVI, MPEG, Matroska(Mkv), MP4,flv,RealMedia(rm,rmvb),ASF,3gp,3gp2,mov,ogg,dv,pmp,nut MediaCoder Premium 典型应用 MPG/VOB/AVI/RMVB/MOV/MP4 -> AVI/MKV/MP4 (Xvid/DivX/H.264 + MP3/OGG/AAC) MPG/VOB/AVI/RMVB/MOV/MP4 -> MP3/OGG/AAC/MPC RMVB/MOV -> MPEG 1/2 (VCD/DVD兼容) APE/FLAC/WavPack + CUE sheets -> MP3/OGG/AAC/WMA/MPC CD音轨 -> APE/FLAC/WavPack/MP3/OGG/AAC/WMA/MPC

579

社区成员

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

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