有一些标准的着色器函数库,比如Cg。但是是否有资源告诉你每个函数需要多长时间...我想类似于以前可以查看每个汇编操作需要多少周期。
有一些标准的着色器函数库,比如Cg。但是是否有资源告诉你每个函数需要多长时间...我想类似于以前可以查看每个汇编操作需要多少周期。
没有任何可靠的资源可以告诉你各种标准着色器函数需要多长时间才能完成,即使是在特定硬件上也不行。
这是由于指令调度和现代着色器架构的工作方式。以简单的sin
函数为例,假设硬件有一个特殊的硬件来计算值的正弦函数,因此它不会手动使用泰勒级数等方法。但是,我们还可以说,实际计算需要一系列4个操作码。因此,sin
需要“4个周期”才能完成。
然而,所有这些操作码都是标量操作。因此,当它们正在进行时,您实际上可以在同一处理器上同时进行一些3向量点积,或者在某些硬件的情况下,进行一些4向量点积,相同时间内。因此,如果硬件具有带标量运算的4维向量点积,则执行sin
和矩阵-向量乘法所需的周期数仍然是4个。
那么sin
操作的代价是多少呢?如果您将矩阵乘法删除,没有任何变快。如果您拿掉sin
,仍然没有任何变快。它的成本是多少?您无法说出单个操作的成本是多少,因为单个操作的成本是不相关的。唯一可衡量的数量是着色器本身的成本。
最终,您可以尝试合理地构建您的着色器,并查看其性能。除非您拥有低级调试工具来去编译底层着色器程序(不,DX汇编不够好),否则这是您能做的最好的事情。