如何在GCC中使用SSE2? 我想使用double值。用于GCC双重计算的SSE2
我搜索s.th.像这样: http://vrm-vrm.blogspot.com/2009/10/gcc-intrinsics.html 只适用于双值。
如何在GCC中使用SSE2? 我想使用double值。用于GCC双重计算的SSE2
我搜索s.th.像这样: http://vrm-vrm.blogspot.com/2009/10/gcc-intrinsics.html 只适用于双值。
如果要使用SSE2 double
insns,则必须使用gcc -mfpmath=sse -msse2
进行编译。
单独的选项-msse2
将允许您使用SSE2内部函数,-mfpmath=sse
将导致GCC为所有FP操作发出SSE2 insns。
另请注意,矢量化启用-O3
。
矢量SSE2-4 insn的优点是显而易见的,Sandy Bridge处理器可以执行多达三个256位操作每个周期(例如4次乘法,4个增加和在它上面的一些洗牌)
但是,英特尔优化手册推荐使用SSE甚至用于标量操作,原因包括平面注册模式和更短的延迟,与传统x87 insns相比。
编辑:
忘了提,对于32位代码,您也可以增加-msseregparm
,这将导致FP参数和返回通过SSE寄存器传递值。默认情况下,它们分别在内存和%st0
上传递。当然,这会改变ABI,因此所有交互模块都必须使用此选项进行编译。
你可以用'-msse'等编译,或用'-march = native'编译... –
这就是全部?我听说它会很复杂,必须使用内在函数。 –
如果要使用显式构造,则必须使用内在函数。使用编译器标志,您只需告诉编译器,在可用时使用硬件即可,并且优化器确定这是一个不错的选择。与某个“-O”级别结合使用。没有保证,但试试看并比较组件。 –