6

我没有任何真正的编译器知识,我曾经为选定的代码片段手动编写 SSE2 函数。我知道如何阅读生成的机器代码,但很大程度上不知道编译器可能进行的疯狂优化。我所有的工作都是使用 Visual Studio 完成的。

Visual Studio 有没有办法告诉我一个函数的 SSE2 寄存器溢出计数?原因是我们很快就能批量生产类似 SSE2 的代码(模板化),并且我们希望将它们中的每一个都编译成质量不错的机器代码。我们可能无法手动检查它们中的每一个。我希望得到的是某种保证,即编译后的代码是可接受且简洁的。我不需要得到最后一点果汁。

或者,是否有一个关键字可以__forceinline强制编译器不溢出任何 SSE2 寄存器,例如 "__forcenospill" ?(如果必须发生溢出,编译将失败,因此我会意识到问题并尝试重构我的 SSE2 代码。)

使用现有的向量库或 blitter 是没有问题的,因为某些计算需要高度注册(“简单操作”中的一步中的 6 个或更多操作数(注 #1);中间值提升为 16 位或 32 位即时和转换回来等)用通用矢量库重新表述它意味着运行时间增加一倍或三倍(在那里,做到了)。

商业工具也可以,考虑到项目的性质,我当然可以负担得起。

如果没有这样的工具,我将求助于分析。你可以对这篇文章投反对票,让我知道这样的事情不存在。

谢谢!

(注#1)它是一种自适应阈值算法。

4

0 回答 0