本帖最后由 xfortius 于 2013-9-15 09:54 编辑
有40*40*700*sizeof(float)的数据量,进行处理时可以: 1):取td<<32,32>>,那么需要(40*40*700)/(32*32)=1093.75=1094block,这里可以取<<33,34>>,也可以取bk<<33,1>>循环34次; 2):取td<<16,32>>,那么需要2188个block,这里取bk<<47,47>>,也可以取bk<<47,1>>循环47次; 那么1)、2)的那种情况比较好? 3):我的GPU是GTX 650 Ti,一个有4个MP*192 CUDA core/MP=768 CUDA core,我的理解4个MP就是4个SM,比较有用。因此,每个GPU可以resident的block最多为:4SM*8Block/SM=32block。要使SM的使用率最高,就必须让SM上的warp尽量 多,因此thread取1024是最好的(不考虑share/register的限制),这样可以有32*4=128个warp可以用于切换。但是这样的话每个block就不容易完成,后面的block就不容易补充上去。如果我thread取32,那么一个block上面就有8个warp可以用于切换,但是这样block容易完成,后续的可以容易补充上去,即可以始终保持8个warp的切换量,那么在不考share/register限制的情况下,到底是那种比较好呢? 谢谢斑竹,同时祝周末愉快!
|