CUDA中内核中的线程层次结构设计

时间:2010-07-12 06:16:35

标签: cuda

假设一个块有512个线程的限制,比如我的内核需要超过512个线程来执行,那么应该如何设计线程层次结构以获得最佳性能? (案例1)

第一块 - 512线程 第二块 - 剩余线程

(案例2)在某些块上分配相同数量的线程。

2 个答案:

答案 0 :(得分:1)

我认为这不重要,但更重要的是逻辑分组线程块,以便您能够使用其他CUDA优化(如内存合并)

This link提供了一些洞察CUDA(可能)和组织线程的方法。

摘要引用:

  

总结一下,a的特殊参数   内核启动定义了维度   网格及其块。独特   blockId和threadId中的坐标   变量允许网格的线程   区分他们。它是   程序员有责任使用   这些变量在内核中   函数使线程可以   正确识别部分   要处理的数据。这些变量   迫使程序员组织起来   线程和数据进入   等级和多维的   的组织。

答案 1 :(得分:0)

最好将线程均等地划分为两个块,以便最大化计算/存储器访问重叠。当你在一个块中有例如256个线程时,它们不会同时计算所有线程,在SM上通过32个线程的warp进行调度。当warp正在等待全局内存数据时,将安排另一个warp。如果你有一小块线程,你的全局内存访问就会受到更多惩罚。

此外,在您的示例中,您使用GPU不足。请记住,GPU有几十个多处理器(例如C1060 Tesla的30个),并且一个块映射到多处理器。在您的情况下,您将只使用2个多处理器。