【发布时间】:2011-08-06 08:05:24
【问题描述】:
不久前,我在某处读到 SSE 内部函数编译成高效的机器代码,因为编译器对它们的处理与普通函数不同。我在徘徊编译器实际上是如何做的,以及 C 程序员可以做些什么来促进这个过程。有没有关于如何使用内在函数的指导方针,以使编译器更容易生成高效的机器代码。
谢谢。
【问题讨论】:
标签: c++ c optimization sse intrinsics
不久前,我在某处读到 SSE 内部函数编译成高效的机器代码,因为编译器对它们的处理与普通函数不同。我在徘徊编译器实际上是如何做的,以及 C 程序员可以做些什么来促进这个过程。有没有关于如何使用内在函数的指导方针,以使编译器更容易生成高效的机器代码。
谢谢。
【问题讨论】:
标签: c++ c optimization sse intrinsics
与 Necrolis 所写的相反,内在函数可能会或可能不会编译成它们所代表的指令。对于诸如_mm_load_pd 之类的复制或加载指令尤其如此,因为在使用内部函数时编译器仍然负责寄存器分配和赋值。这意味着如果两个位置可以由同一个寄存器表示,则可能根本不需要将值从一个位置复制到另一个位置。在这种情况下,编译器可能会选择删除副本。如果结果从未使用过,它也可以选择删除其他指令。
查看this blog post,在实践中比较了不同编译器的行为。它是从 2009 年开始的,因此详细信息可能不再适用。但是,较新的编译器可能会更多地优化您的代码,而不是更少。
至于实际有效地使用内在函数,答案与所有其他性能优化相同:测量、测量和测量。确保您实际上正在处理一段热门代码,找出它缓慢的原因,然后改进它。您很可能会发现改进内存访问模式比使用内部函数更重要。
【讨论】:
【讨论】: