【发布时间】:2012-04-14 15:54:38
【问题描述】:
我对Open GL Shader Language中sin() 和cos() 的速度信息感兴趣。
GLSL Specification Document 表示:
内置函数基本分为三类:
- ...
- ...
- 它们代表一个操作图形硬件可能会在某个时候加速。三角函数属于这个 类别。
编辑:
正如已经指出的那样,计算 sin() 和 cos() 等单个操作的时钟周期并不能真正说明整个性能故事。
所以为了澄清我的问题,我真正感兴趣的是是否值得优化掉 sin() 和 cos() 对常见情况的调用。
例如,在我的应用程序中,参数为0 是很常见的。那么这样的事情是否有意义:
float sina, cosa;
if ( rotation == 0 )
{
sina = 0;
cosa = 1;
}
else
{
sina = sin( rotation );
cosa = cos( rotation );
}
或者GLSL 编译器或sin() 和cos() 实现会为我处理类似的优化吗?
【问题讨论】:
-
“现代 GPU 为
sin()和cos()提供硬件加速”是什么意思?如果它在 GPU 上运行,则可以说是硬件加速的。无论如何,您最好的选择是尝试并对其进行分析,因为如果没有更多关于您正在做什么的上下文,GPU 上的时钟周期在某种程度上毫无意义。即使在来自同一供应商的不同卡之间,执行单元的数量也可能存在差异,因此循环只能告诉您部分情况。 -
有了这些 GPU,我认为您将拥有这些三角函数的最快执行时间。有趣的问题...
-
@user1118321 好点。我修改了我的问题,试图让它更明确一点。
-
对于上述情况,您可能会发现着色器执行两个分支,然后才决定使用哪个结果。在我看来,您在这里进行的这种优化不值得麻烦,甚至可能导致性能下降,而不是提高。
标签: optimization opengl glsl shader jogl