【发布时间】:2013-11-16 06:37:03
【问题描述】:
在 OpenGL 4.3+ 中,Compute Shader 允许用户显式配置每个块中的线程数以及用于处理数据的块数(glDispatchCompute)。但是,在 Vertex Shader 中,我不需要提供任何线程/块配置。 那么对于顶点着色器,是否有一种自动方式在块/进程之间分配工作负载?当我有大量顶点要处理时,我是否可以明确地为顶点着色器提供配置?
【问题讨论】:
-
驱动程序/GPU 本身已经安排了大部分管道以这种方式工作。如果它必须使用单个扭曲/波前(线程调度单元)串行转换顶点,那将是非常低效的。由于顶点/片段着色器无法读取相邻顶点/片段的结果,因此它们很容易并行调度。您在计算着色器中明确考虑的调度已经隐式发生在正常渲染管道中。自统一着色器模型以来,负载平衡一直是 GPU 设计的主要部分;你必须在着色器中做一些异国情调(GL4 时代)的事情才能弄乱它
-
感谢您的 cmets :) 在这种情况下,这是否意味着不同驱动程序之间的工作负载分配机制可能不同?如果我想进行一些数据优化以提高性能,是否可以找出这个分布的任何“模式”? (例如,重新排序顶点以降低缓存未命中率)
-
要找出模式,您可能可以像这段代码一样使用“原子计数器”,它可以找出光栅化模式:geeks3d.com/20120309/…
标签: opengl glsl vertex-shader