2013-03-09 50 views
5

当我例如设置我的的OpenCL工作组

  1. 工作组金额为5120和localsize会发生什么1
  2. 工作组于2560和localsize 2个
  3. 工作组,以640和localsize 4

这会如何影响我的工作量和资源访问量?

回答

9
  1. 您将有5120 threads. 5120 groups. 1 thread per group。每个组(1个线程)将带一个处理器。你不能同步它们中的任何一个(在传统意义上)。
  2. 您将拥有2560 threads. 1280 groups. 2 threads in each group。每个组(2个线程)将采用一个处理器。您可以同步这两个线程(按传统意义)。
  3. 您将有640 threads. 160 groups. 4 threads in each group。每个组(4个线程)将采用一个处理器。您可以同步这四个线程(传统意义上的)。

在OpenCL中,您需要根据线程总数表示全局工作大小。底层的OpenCL API将查看全局工作大小并除以本地工作大小来确定您的线程安排。

现在(这是一般建议,有可能是你需要做的情况下,但现在..)

  1. 是一个可怕的想法。显然。通过每次给它1个线程来浪费你的处理器时间。虽然这可能不是CPU的世界末日,但它适用于现代GPU。为什么?因为GPU上的每个处理器都有多个内核。所有准备好行动。在这种情况下,只有其中一个起作用。另外如果需要,你无法同步线程。

  2. 同样的事情。

  3. 同样的事情。

如果我没记错的话,NVIDIA建议组中至少有32个线程来获得最佳性能。