三维图像像素在CUDA里怎么分配线程复杂度比较低

2025-04-24 11:40:05
推荐回答(1个)
回答1:

并行度是很复杂、很难估计的,它和很多因素有关,不能单从SP的数量来判断。一个SM最多有48个SP可以同时运行,它们执行同样的指令或者休眠,但是并不是说它们每一个负责一个block或者thread的运算。实际上,threads是按warp为单位执行的,一个warp有32个threads。一个SM可以最多有48个warp是active的,但是由于一个GPU时钟时间内可以执行的指令非常有限,所以这些warp不是全部并行执行的,而是随着GPU时钟来回切换执行,这个机制很复杂,是由GPU自己来部署的。所以,比较这种并行度是很难的,一般不这样比也不这样去考虑并行运算。
如果是单一的GPU优化问题,那就是比程序的吞吐量(throughput)和GPU最大吞吐量之间 (peak throughput)的差值,看一下优化的程度是不是好,越靠近最大吞吐量的优化就越好。如果只是做了一个加速的可能性,那么就比较加速比就可以了。
在实际编程中,你其实只需要考虑CUDA编程指南上面提到的那些优化方法就行了,比如增大occupancy,instruction level parallelism(指令级并行)等等就足够了。