OpenCl工作组

Oli*_*s_j 5 opencl

例如,当我设定我的金额时会发生什么

  1. 工作组到5120和本地化1
  2. 工作组到2560和本地化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个线程来获得最佳性能.