pic*_*c11 8 c c++ optimization sse intrinsics
不久之前,我在某处读到SSE内部函数编译成高效的机器代码,因为编译器将它们与普通函数区别对待.我正在徘徊实际上编译器是如何做到的,以及C程序员可以做些什么来促进这个过程.是否有任何关于如何使用内部函数的指导方针,使编译器能够更轻松地生成高效的机器代码.
谢谢.
内在函数编译成表示的指令,这是否有效取决于它们的使用方式.
此外,每个编译器对内在函数的处理方式略有不同(也就是其特定的实现),但GCC是开源的,因此您可以看到它们如何处理SSE,Open Watcom*,LCC,PCC和TCC*都是开源C编译器,虽然我们没有SSE内在函数,但它们仍然应该有内在函数,你可以看到它们如何处理它们.
我认为你所读的内容与代码的自动矢量化有关,GCC(见本)和ICC非常擅长,但它们不如手动优化代码,至少还没有
*可能已经更新了对SSE的支持,最近没有检查过......
与Necrolis所写的相反,内部函数可能会编译也可能不会编译为它们表示的指令。对于诸如的复制或加载指令,尤其如此_mm_load_pd
,因为使用内在函数时,编译器仍负责寄存器的分配和分配。这意味着,如果两个位置可以由同一寄存器表示,则根本不需要将值从一个位置复制到另一位置。在这种情况下,编译器可以选择删除副本。如果从不使用结果,它也可以选择删除其他指令。
请查看此博客文章,其中在实践中比较了不同编译器的行为。是从2009年开始的,因此详细信息可能不再适用。但是,较新的编译器可能会更多而不是更少地优化代码。
对于有效地有效使用内在函数,答案与所有其他性能优化相同:度量,度量和度量。确保您实际上正在处理一段热门代码,找出其速度较慢的原因,然后加以改进。您很可能会发现,改善内存访问模式比使用内部函数更为重要。