关于在cuda组织线程

时间:2016-11-05 12:35:36

标签: c++ cuda

一般问题:线程数必须等于我想要处理的元素的大小?例如:如果我有矩阵M [a] [b]。我必须分配(aXb)线程或我可以分配比我需要的更多的线程(超过ab)?因为专注于元素aXb + 1的线程会把我们抛弃,不是吗?或者解决方案是设置一个条件(仅在范围(ab)中)?

具体问题:设为M [x] [y]矩阵,x行和y列。考虑1000< = x< = 300000并且y< = 100.我如何以这样的方式组织线程,对于x和y的每个输入它将是通用的。我希望每个线程都关注矩阵中的一个元素。 CC = 2.1谢谢!

1 个答案:

答案 0 :(得分:1)

一般答案:这取决于问题。

在大多数情况下,将问题自然地一对一映射到线程网格就可以了,但是你要记住的是:

  1. 实现高入住率。
  2. 最大化GPU资源使用和内存吞吐量。
  3. 使用有效数据。
  4. 有时可能需要使用单个线程来处理许多元素或许多线程来处理单个元素。 例如,您可以想象一系列需要应用于元素数组的独立操作A,B和C.您可以运行三个不同的内核,但可能更好的选择是分配网格以包含比元素多三倍的线程,并通过网格的一个维度(或其他任何内容)区分操作。另一方面 - 您可能有一个问题,可以使用最大化共享内存的使用(例如转换图像) - 您可以使用16个线程的块来处理5x5图像窗口,其中每个线程将计算每个2x2切片的一些统计信息。

    选择是你的 - 最好的建议并不总是与明显的一致。尝试不同的方法,选择最有效的方法。