rwo*_*ong 6 compiler-construction optimization sse2 visual-studio
我没有任何真正的编译器知识,我曾经为选定的代码段手工编写SSE2函数.我知道如何阅读生成的机器代码,但很大程度上没有意识到编译器可能实现的疯狂优化.我的所有工作都是使用Visual Studio完成的.
有没有办法让Visual Studio告诉我一个函数的SSE2寄存器溢出计数?原因是我们很快就能够批量生成类似SSE2的代码(模板化),并且我们希望将它们中的每一个编译成适当质量的机器代码.我们可能无法手动检查每一个.我希望得到的是一些保证编译的代码是可接受和简洁的.我不需要最后一点果汁.
或者,是否有一个关键字的作用就像__forceinline迫使编译器不溢出任何SSE2寄存器,如"__forcenospill"?(如果必须发生溢出,编译将失败,因此我会发现问题,并尝试重构我的SSE2代码.)
使用现有的矢量库或阻塞器是不可能的,因为有些计算需要高度注册(在"简单操作"中一步操作6个或更多操作数(注1);中间值提升为16位或者32位运行并转换回来等等)用通用向量库来重新表示它将意味着运行时加倍或三倍(在那里,完成了).
商业工具也没关系,鉴于项目的性质,我当然可以负担得起.
如果没有这样的工具,我将采用剖析.您可以关注这篇文章,让我知道这些事情不存在.
谢谢!
(注1)它是一种自适应阈值算法.