0
|
M-Pixel Pierre Fourgeaud · 技术社区 · 7 年前 |
![]() |
1
3
一个好的优化编译器应该为两个版本生成相同的机器代码。只需将向量常量定义为局部变量,或者匿名使用它们以获得最大的可读性;让编译器担心寄存器分配问题,如果发生这种情况,选择最便宜的方法来处理寄存器耗尽的问题。
帮助编译器的最佳方法是尽可能少地使用不同的常量。e、 g.代替
编译器将把常量从循环中提升出来(甚至内联包含常量的助手函数),或者如果只在分支的一侧使用,则将设置带到分支的那一侧。 源代码计算的是完全相同的东西,没有明显的副作用差异,因此“好像”规则允许编译器自由地执行此操作。
不 在L1d缓存中命中的额外负载比在循环中存储(又称溢出)/重新加载变量便宜。因此,编译器将选择从内存加载常量,而不管您将定义放在源代码中的什么位置。 在C++中写作的一部分是你有一个编译器来为你做这个决定。因为允许对两个源执行相同的操作,所以对至少一种情况来说,执行不同的操作可能会错过优化(在任何特定情况下,最好的做法取决于周围的代码,但通常情况下,当编译器运行的regs不足时,使用向量常量作为内存源操作数就可以了。)
|