OpenGL 4.X的顶点着色器如何处理大量顶点

OpenGL 4.X的顶点着色器如何处理大量顶点,opengl,glsl,vertex-shader,Opengl,Glsl,Vertex Shader,在OpenGL 4.3+中,计算着色器允许用户显式配置每个块中的线程数以及用于处理数据的块数(glDispatchCompute)。但是,在顶点着色器中,我不需要提供任何线程/块配置。 那么对于顶点着色器,是否有一种自动的方法来在块/进程之间分配工作负载?当我有大量的顶点要处理时,我是否可以显式地为顶点着色器提供配置 我是否可以显式地为顶点着色器提供配置 没有 那么对于顶点着色器,是否有一种自动的方法来在块/进程之间分配工作负载 对。GPU/驱动程序应该已经在幕后处理了 通过在服务器端内存中使用

在OpenGL 4.3+中,计算着色器允许用户显式配置每个块中的线程数以及用于处理数据的块数(glDispatchCompute)。但是,在顶点着色器中,我不需要提供任何线程/块配置。 那么对于顶点着色器,是否有一种自动的方法来在块/进程之间分配工作负载?当我有大量的顶点要处理时,我是否可以显式地为顶点着色器提供配置

我是否可以显式地为顶点着色器提供配置

没有

那么对于顶点着色器,是否有一种自动的方法来在块/进程之间分配工作负载

对。GPU/驱动程序应该已经在幕后处理了

通过在服务器端内存中使用大批量,您已经告诉OpenGL实现以尽可能快的速度渲染这些内容


OpenGL并不是以某种必须关闭的“慢”模式启动。

驱动程序/GPU本身已经安排了大部分管道以这种方式工作。如果它必须使用单个扭曲/波前(线程调度单元)连续变换顶点,那么效率会非常低。由于顶点/片段着色器无法读取相邻顶点/片段的结果,因此可以轻松地并行调度它们。您在计算着色器中显式考虑的调度已经在正常渲染管道中隐式发生。自从统一着色器模型以来,负载平衡一直是GPU设计的主要部分;你必须在着色器中做一些异国情调(GL4时代)的事情来搞乱它(谢谢你的评论:)在这种情况下,这是否意味着工作负载分配机制在不同的驱动程序中可能会有所不同?如果我想进行一些数据优化以提高性能,是否可以找出此分布的任何“模式”?(例如,重新排列顶点以降低缓存未命中率)要了解模式,您可能可以使用“原子计数器”,就像下面的代码一样,它可以了解光栅化模式:感谢您的快速回复。因此,在这种情况下,驱动程序负责处理器之间的工作负载分配。但是,如果我们想进行数据优化(例如顶点缓存优化)以实现更好的性能,程序员是否可能知道驱动程序/GPU是如何做到的呢
ARB_debug_输出
或者特定于供应商的扩展(如果存在)可能会暴露类似的信息。可以