计算着色器对调用(线程)和工作组的最佳数据划分

时间:2016-04-02 14:44:03

标签: opengl graphics directx compute-shader

据我从OpenGL文档中了解计算着色器计算空间,我可以将数据空间划分为本地调用(线程),这些调用将并行执行,并且在工作组中将包含一些本地调用,并且它们将不会被执行以随机顺序并行(?),我是否正确理解。主要问题是什么是划分数据的最佳策略,如果我总是尝试最大化本地调用大小并最小化工作组数量以获得更好的并行执行或任何其他策略将更好(例如我在数据缓冲区中有10000个元素( x方向上的速度可能)并且任何元素都可以独立计算,如何确定最佳调用次数(线程)和工作组?

1 个答案:

答案 0 :(得分:2)

https://www.opengl.org/registry/doc/glspec45.core.pdf

第19章:

  

工作组是执行该操作的着色器调用的集​​合   相同的代码,可能是并行的。

     

虽然是个人着色器   工作组中的调用作为一个单元,工作组执行   完全独立地以非特定的顺序执行。

在阅读了这几节之后,我发现“最佳”解决方案是最大化本地调用大小并最小化工作组数量,因为然后告诉驱动程序省略调用集独立的要求。当平台将您的意图解析为执行时,更少的需求意味着平台的规则更少,从而普遍产生更好(或相同)的结果。

  

工作组内的调用可能与其他成员共享数据   通过共享变量实现相同的工作组(参见第4.3.8节(“共享”)   OpenGL着色语言规范的变量“)和问题   记忆和控制障碍与其他成员同步   同一工作组

在编译着色器代码时,平台可以派生调用之间的独立性。