[英]How compilers treat SSE (or any) intrinsic functions?
不久之前,我在某处读到SSE内部函数编译成高效的机器代码,因为编译器将它们与普通函数区别对待。 我正在徘徊实际上编译器是如何做到的,以及C程序员可以做些什么来促进这个过程。 是否有任何关于如何使用内部函数的指导方针,使编译器能够更轻松地生成高效的机器代码。
谢谢。
与Necrolis所写的相反,内在函数可能会也可能不会编译成它们所代表的指令。 对于复制或加载指令(例如_mm_load_pd
)尤其如此,因为编译器在使用内在函数时仍负责寄存器分配和赋值。 这意味着如果两个位置可以由相同的寄存器表示,则根本不需要将值从一个位置复制到另一个位置。 在这种情况下,编译器可以选择删除副本。 如果从未使用过结果,它也可以选择删除其他指令。
查看此博客文章 ,其中比较了不同编译器在实践中的行为。 它是从2009年开始的,因此细节可能不再适用。 但是,较新的编译器可能会更多地优化您的代码,而不是更少。
至于实际使用内在函数,答案与所有其他性能优化相同:测量,测量和测量。 确保你实际上正在处理一段热门代码,找出它为什么慢,然后改进它。 您很可能会发现改进内存访问模式比使用内在函数更重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.