[问题] CUDA CPU和GPU执行同步问题

楼主: LOXAERIC   2014-05-23 18:44:58
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux , 显卡 cuda compute capability: 1.3, CUDA 2.3版
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
CUDA
问题(Question):
最近因为要处理矩阵运算,所以开始研究CUDA,有看过一些精华区的教学文章了,
不过有些地方还不是很清楚,因此想请问版友下面的一些情况,
CPU和GPU的执行顺序以及效能影响各会是如何?
Case 1. :
kernel_A<<<GridSize,BlockSize>>>(d_result1,d_arg1);
...CPU function1...
cudaThreadSynchronize();
kernel_B<<<GridSize,BlockSize>>>(d_result2,d_data1);
kernel_C<<<GridSize,BlockSize>>>(d_result2,d_data1);
...CPU function2...
Case 2. :
kernel_A<<<GridSize,BlockSize>>>(d_result1,d_arg1);
//复制kernel_A的结果(d_resut1)回CPU(result1)
cudaMemcpy(result1, d_result1, size, cudaMemcpyDeviceToHost);
...CPU function1(result1)...
预期的正确结果(Expected Output):
这是我自己的想法,不晓得正不正确
Case 1. : CPU呼叫kernel_A后,自己不等GPU执行完kernel_A,
CPU直接继续执行function1,直到cudaThreadSynchronize(),
确保kernel_A被执行完,接下来CPU连续呼叫kernel B和C,
一样不等GPU是否执行完这两个kernel,继续直接执行function2,
而kernel B和C因为会使用相同的d_data1,可能因为同时执行而
互抢著向memory access data1,造成效能下降,且因为都会写
data到d_result2,所以会有race condition。
Case 2. : CPU呼叫kernel_A后,自己不等GPU执行完kernel_A,
CPU直接继续执行cudaMemcpy,但是因为cudaMemcpy的是kernel_A的结果,
所以CPU会等到kernel_A被执行完才复制结果回CPU端,
接下来CPU就执行function1。
综合以上,我目前的想法是,CPU呼叫完kernel后,不会等kernel是否执行完,
除非 1.使用cudaThreadSynchronize() 2.使用cudaEventSynchronize
3.使用cudaMemcpy,且复制的资料需要是前面kernel所用的参数
这几种情形才会强制让CPU和GPU端同步,不晓得这样理解是否正确@@?
补充说明(Supplement):
作者: k387259 (台湾李宏感)   2014-05-24 07:44:00
GPU跟CPU的同步现在都是使用cudaDeviceSynchronizeThreadSynchronize似乎是比较旧的版本http://ppt.cc/5M1V然后kernelB和C会顺序执行 除非你是用stream 但CPU依然跑下一个functionstream部分可以参考官方PDF http://ppt.cc/i2oe然后你说的除非3 cudaMemcpy我的理解应该是 你不是用Async的话,应该都是算是cpu的指令最近我也在用CUDA写程式,不足的地方还请版友补充
作者: Lepton (轻子)   2014-05-24 12:36:00
<<<a,b>>>的呼叫法都是异步的,不等做完就往下走GPU有自己的queue就是stream的意思,不写都是默认的每个queue都会保证依序执行,所以kerenlBC是顺序的做memcpy会保证queue执行完后才作复制的动作且CPU也会stall学CUDA建议直接看官方的说明书,CUDA的东西变化很快
楼主: LOXAERIC   2014-05-24 13:25:00
了解,非常感谢Lepton版友解释!!
作者: k387259 (台湾李宏感)   2014-05-24 15:42:00
你可以写只测试程式cuda kernel内可以printfkernel让他跑个<<1,1>>然后里面一个大循环在printf
楼主: LOXAERIC   2014-05-24 15:52:00
喔喔,看了一下我的平台好像只能用cuPrintf,不过我会试看看,感谢!

Links booklink

Contact Us: admin [ a t ] ucptt.com