四、CUDA性能
CUDA中的block被划分成一个个的warp,在GeForce8800GTX上,一个warp有32个线程。若不够32个线程,则padding相应数目的线程。Warp中的线程ID是连续且递增的。对于二维组织的线程来说,先把threadIdx.y为0的线程按照threadIdx.x从小到大排,然后把threadIdx.y为1的线程按照threadIdx.x从小到大的顺序排列成warp。对于三维组织的线程来说,先排列 threadIdx.z为0的二维线程,再排列threadIdx.z为1的二维线程,以此类推。
任何时刻,硬件都只能一次选择执行一个warp。
下面2个图是执行元素总和的操作,不同的算法实现,其效率不同。第二种方法使得线程没有分支。