问题:能否在主机端创建CPU多线程,在每个线程里调用设备端核函数的caller函数,进而实现进一步的并行运行。
例如有5张图片,对于每张图片都有N个GPU线程对其进行像素操作,但是此时是逐一对这5张图片处理的,想在主机端创建5个CPU线程,每个线程里进行 传输到设备端–>设备端GPU多线程处理–>结果返回主机端 这一系列操作,实现五张图片同时处理
此方法能否实现: 不能
只存在一个流时(默认的流),所有调用核函数的指令将被存在一个队列中,依次执行。因此直接使用CPU多线程调用kernel函数不能达到并行的目的,此时即便能运行也与串行运行的效果相同,只有通过使用多流才能进一步加速。
Question:
I have a CUDA kernel that do my hard work, but I also have some hard work that need to be done in the CPU (calculations with two positions of the same array) that I could not write in CUDA (because CUDA threads are not synchronous, I need to perform a hard work on a position X of an array and after do z[x] = y[x

在CUDA环境中,直接使用CPU多线程调用kernel函数无法实现真正的并行处理,因为kernel调用会被放入单一流中依次执行。要实现并发,需要利用CUDA的流(stream)机制,通过为每个线程指定不同的流,使得GPU可以在不同流之间并发执行任务,从而提高效率。这种方法适用于需要同时处理多个独立任务的场景,如批量处理多张图片。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



