Mic*_*ael 4 parallel-processing cuda
我参加了CUDA并行编程课程,我已经看到很多CUDA线程配置的例子,其中通常将所需的线程数量向上舍入为32的最接近的倍数.我理解线程被分组为warp,如果你启动1000个线程,GPU无论如何都会将其四舍五入,那么为什么要明确呢?
建议通常在您可能可以选择各种线程块大小来解决相同问题的情况下给出.
我们以矢量添加为例.假设我的向量长度为100000.我可以选择通过每个启动100个1000个线程的块来执行此操作.在这种情况下,每个块将具有1000个活动线程和24个非活动线程.我对线程资源的平均利用率是1000/1024 = 97.6%.
现在,如果我选择大小为1024的块呢?现在我只需要启动98个块.这些块中的前97个在线程利用率方面得到了充分利用 - 每个线程都在做一些有用的事情.第98个块只有672个(1024个)线程正在做一些有用的事情.由于if (idx < N)内核代码中的线程check()或其他构造,其他显式处于非活动状态.所以我在那个块中有352个非活动线程.但我的整体平均利用率是100000/100352 = 99.6%
所以在上面的场景中,最好选择"完整"的线程块,可以被32整除.
如果你在长度为1000的向量上进行向量加法,并且你打算在一个线程块中做(可能都是坏主意),那么你是否选择1000或1024作为你的线程块大小并不重要.