假设一个块有512个线程的限制,比如我的内核需要超过512个线程来执行,那么应该如何设计线程层次结构以获得最佳性能? (案例1)
第一块 - 512线程 第二块 - 剩余线程(案例2)在某些块上分配相同数量的线程。
答案 0 :(得分:1)
我认为这不重要,但更重要的是逻辑分组线程块,以便您能够使用其他CUDA优化(如内存合并)
This link提供了一些洞察CUDA(可能)和组织线程的方法。
摘要引用:
总结一下,a的特殊参数 内核启动定义了维度 网格及其块。独特 blockId和threadId中的坐标 变量允许网格的线程 区分他们。它是 程序员有责任使用 这些变量在内核中 函数使线程可以 正确识别部分 要处理的数据。这些变量 迫使程序员组织起来 线程和数据进入 等级和多维的 的组织。
答案 1 :(得分:0)
最好将线程均等地划分为两个块,以便最大化计算/存储器访问重叠。当你在一个块中有例如256个线程时,它们不会同时计算所有线程,在SM上通过32个线程的warp进行调度。当warp正在等待全局内存数据时,将安排另一个warp。如果你有一小块线程,你的全局内存访问就会受到更多惩罚。
此外,在您的示例中,您使用GPU不足。请记住,GPU有几十个多处理器(例如C1060 Tesla的30个),并且一个块映射到多处理器。在您的情况下,您将只使用2个多处理器。