18

是否有最大数量的汇编语言指令要加载到片段程序单元中?我有一个从 cpu 移植到 gpu 的算法,显然它不适合 gpu。

4

2 回答 2

42

有几个硬性和软性限制,其中一些不是很明显:

  • 指令槽:硬件可以在本地内存中容纳的指令总数。
  • 已执行指令:将执行的最大指令数(包括循环运行多次的指令)
  • 一条 GLSL 指令可以映射到十几个或更多指令
  • 几条 GLSL 指令可以映射到一条指令,具体取决于优化器的质量(例如乘加、点、lerp)
  • 有限的临时寄存器(只有 32 个)可能需要比 SM4 之前的硬件更多的指令(​​4096 没有这样的问题)。
  • Swizzling 现在通常不需要额外的指令,但一些较旧的硬件上,并且在某些情况下可能在某些硬件上(尤其是 gl_FragColor 是这样的候选者)
  • 无论实际指令如何,兼容 OpenGL 2.0 的硬件仅限于 8 个依赖纹理提取(不限于可以执行 OpenGL 2.1 或更好的硬件)

你有这些保证最低限度(大多数卡有更多):

  • 512 个指令槽,用于支持 OpenGL 2.x (SM3) 的硬件上的顶点和像素着色器
    • 65536条执行指令
  • 3.x (SM4) 硬件上的 4096 个顶点和 65536 个像素着色器指令槽
    • 65536 条执行的顶点着色器指令,无限的像素着色器指令
  • 在 2.x (SM3) 硬件上可能至少有 24 个动态分支
  • SM4 硬件上的完全动态分支(无限制)
  • SM2.x 上只有条件移动可用,其他一切都必须通过代码复制和循环展开来适应,否则必须失败
于 2011-04-08T23:51:04.390 回答
2

着色器可以拥有的最大指令数量是有限制的。据我所知,它因GPU而异。如果你的着色器太大,编译会产生错误。

于 2010-04-18T19:05:02.307 回答