问一下cuda核函数调用的详细过程
cuda吧
全部回复
仅看楼主
level 1
神拳小李子
楼主
目前,我知道gpu分配线程块给sm,sm再调度线程束给sp,最后由sp执行指令。但是,我疑惑的是:
1.在调核函数之前,程序是在cpu上运行的,那么CPU是如何将控制权移交给gpu的,而sm给sp分发指令时,指令又是从哪取的?
2.如何核函数里再调核函数,这个过程又是怎么样的?我想不通一个sp执行调用核函数的指令时,是如何再重新分配线程的。
望高手解答一下,谢谢
2018年05月04日 02点05分
1
level 4
BlueWanderer
GPU是外部设备,正常情况下不会影响CPU的控制权。CPU只是把要执行的kernel调用存在一块数据里发送给GPU。执行kernel的时候CPU不会主动等待,所以你需要各种同步函数保证kernel执行完了再使用结果。
kernel的代码存在显存里,最近用过的代码会在指令缓冲里。
kernel里再调kernel就是“简单”地把新的调用加入队列,和在主机端把kernel调用加入队列没有本质区别。
2018年05月10日 11点05分
2
神拳小李子
kernel的代码是一直存在显存,还是调用的时候从内存复制过去?对于数据,是不是需要显式的把内存中的数据复制到显存,然后等GPU计算完后,再复制回内存? 不过仔细想想,代码应该一直在显存里,因为sp无法访问内存,也就没法把内存的指令取过来调用了,对吧?
2018年05月11日 01点05分
BlueWanderer
@神拳小李子
一直存显存。数据不管从内存传显存还是从显存传内存都是你主动进行的,用cudaMemcpy之类。所以重复使用的输入数据是一直扔显存里的(前提是显存放得下),还有运算的中间数据也不需要读回来。GPU是可以直接访问主内存的,只是非常慢而已,一般情况情况下不会那么干。
2018年05月11日 05点05分
1