不同CG/GLSL/HLSL功能的表现

标签 performance opengl 3d shader direct3d

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

最佳答案

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

其原因与指令调度和现代着色器架构的工作方式有关。举个简单的sin功能。假设硬件有一个特殊的硬件来计算一个值的正弦,所以它不是手动使用 Tailor 系列之类的。然而,我们也假设它需要 4 个操作码的序列来实际计算它。因此,sin将需要“4 个周期”。

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

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

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

关于不同CG/GLSL/HLSL功能的表现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8415251/

相关文章:

c++ - 加载 OBJ 文件,如何使用法线 (#vertices < #normals)

c++ - 有人使用 kinect-v2 的 openNI 获取了深度图像吗?

c++ - 在 C++ 中获取广泛的类型错误

jquery - bxslider-4 添加图像时速度加快

linux - 为什么 MongoDB 在 Debian 上比在 Windows 上慢..?

performance - Licode Erizo.Stream 视频帧质量

opengl - 后处理和生成的纹理

c++ - 从 3D 转换为 2D 坐标问题

OpenGl 框全屏

sql - 使用存储过程进行元编程?