【问题标题】:Performance of different CG/GLSL/HLSL functions不同CG/GLSL/HLSL功能的表现
【发布时间】:2011-12-07 12:21:56
【问题描述】:

有标准的着色器函数库,例如Cg。但是是否有资源可以告诉您每个操作需要多长时间...我的想法类似于您过去能够查看每个 ASM 操作需要多少个周期。

【问题讨论】:

  • 因设备而异
  • 我想,现在更重要的是你可以加载多少个处理器。如果你设置一个带有依赖纹理读取的重型着色器,你会遇到停顿和等待以及其他不愉快的事情。在这种情况下,纯粹的“循环计数”将无济于事。
  • 两者都是正确的 - 但一些想法仍然可以作为一个起点。例如数学/几何函数...除法与 cos 或 cos 与 acos 或 sqrt 与 tan 的比较...
  • @John 我猜它们通常或多或少是相同的周期,但我不能说它们与简单的 MUL 和 ADD 相比的表现如何。但我所知道的是,至少在 NVDIA 的架构中,多处理器用于超越函数(如 sin、sqrt、...)的 ALU 比简单的 MUL/ADD-ALU(可能是 8:1 或 4:1)少,所以它们可以并行执行比 SIN/SQRT 更多的 MUL/ADD。除此之外,您可能需要询问各个 GPU 开发人员。

标签: performance opengl 3d shader direct3d


【解决方案1】:

没有可靠的资源可以告诉您各种标准着色器函数需要多长时间。甚至对于特定的硬件也不行。

原因与指令调度和现代着色器架构的工作方式有关。取一个简单的sin 函数。假设硬件有一个特殊的硬件来计算一个值的正弦值,所以它不是手动使用 Tailor 系列或其他东西。但是,我们也可以说实际计算它需要一系列 4 个操作码。因此,sin 需要“4 个周期”。

然而,所有这些操作码都是标量操作。因此,当它们进行时,您实际上可能有一些 3 向量点积,或者在某些硬件的情况下,4 向量点积同时进行,在同一个处理器上。因此,如果硬件具有标量运算的 4 向量点积,则执行 sin 和矩阵向量乘法所需的周期数......仍然是 4。

那么sin 的运营成本是多少?如果你取出矩阵乘法,没有什么会变得更快。如果你拿出sin,什么都不会变得更快。它要多少钱?你不能说,因为单次手术的成本是无关紧要的;唯一可衡量的量是着色器本身的成本

最终,您所能做的就是尝试合理地构建着色器并查看性能如何。除非您有低级调试工具来处理底层着色器程序集(不,DX 程序集还不够好),否则这确实是您能做的最好的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多