【问题标题】:How GPU handles vertex-shaders?GPU如何处理顶点着色器?
【发布时间】:2014-06-26 10:40:10
【问题描述】:

大家。

我有几个问题:

  1. 顶点着色器是为每个顶点运行一次,还是每个顶点每个图元运行一次(即图元数量的三倍)?
  2. 这些着色器如何映射到 GPU 的内核:每个内核一个着色器,还是每个内核一个图元(仍然用于顶点着色器)?
  3. 如果每个顶点只有一个着色器调用,映射到一个内核,GPU 如何跟踪顶点/基元依赖关系? (图元可能共享一些顶点;跟踪这些依赖关系——基于每个顶点——真的很昂贵。我不敢相信 GPU 会这样做......)

提前感谢您的回复。

【问题讨论】:

  • 移除 CUDA 标签。顶点着色器与 CUDA 无关,也没有以任何特定方式与 CUDA 内核相关。

标签: shader gpu vertex-shader


【解决方案1】:
  1. 答案视情况而定,显卡接线会根据缓冲和批处理尝试将顶点着色的次数减少到最少。 这一切都在这里解释: http://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/ 有多个顶点缓冲区标记的缓存行(听到从索引缓冲区中提取的索引)。 IA 单元从索引缓冲区中提取顶点并填充缓存,然后当它已满(模基元大小)时,它被发送到卡调度器硬件,该硬件将缓存线分派到一个着色核心块。然后 IA 阶段将继续填充一个新的缓存行,与处理前一个请求的核心单元并行。并且永远不要等到索引缓冲区完全耗尽或核心单元都忙。当结果返回时,他们将着色的顶点数据放入一些内存中,稍后将由图元组件引用。

  2. 有 2 个不同的阶段,输入组装(紧随其后的是顶点着色)和稍后出现的原始组装。图形管道比通用内核更专业,我怀疑所有阶段都实现为通用内核。特别是在稍旧的硬件上,尤其是那些具有专门的着色​​顶点输出内存的硬件上,它们需要特殊的布线。

  3. 查看文章系列,全部解释,不存在完美的 1-1 关系,如果某些顶点在索引缓冲区中太远,则会重新着色。

【讨论】:

  • 有人可能会争辩说,每个基元运行一个内核,并合并顶点和几何着色器代码(在该基元中的每个顶点循环顶点着色器代码)会更有效:你支付扭曲启动开销一次,降低内部总线的压力!
  • 但是,好的。感谢您的回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多