我听说GCC提供的128位整数数据类型(如__int128_t
)是模拟的,因此很慢。但是,我了解各种SSE指令集(SSE,SSE2,...,AVX)至少引入了一些128位寄存器的指令。我对SSE或汇编/机器码不是很了解,所以我想知道是否有人可以向我解释__int128_t
的算术是否使用现代版本的GCC进行了仿真。
我之所以这样问,是因为我想知道,根据所使用的SSE指令,期望不同版本的GCC之间的__int128_t
性能有很大的不同是否有意义。
那么,__int128_t
算法的哪些部分由GCC仿真,哪些部分由SSE指令(如果有)实现?
最佳答案
我在提问中混淆了两件事。
首先,正如PaulR在评论中解释的那样:“在SSE或AVX中没有128位算术运算(除按位运算之外)”。考虑到这一点,必须在基于x86-64的现代处理器(例如AMD Family 10或Intel Core体系结构)上模拟128位算术。这与GCC无关。
问题的第二部分是GCC中的128位算术仿真是否受益于SSE/AVX指令或寄存器。正如PaulR的评论所暗示的那样,SSE/AVX中没有太多功能可以让您更轻松地执行128位算术运算。 x86-64指令最有可能用于此目的。我感兴趣的代码无法使用-mno-sse
编译,但是可以使用-mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-avx -mno-avx2
很好地编译,并且性能不受影响。因此,我的代码无法从现代SSE指令中受益。
关于c - 即使使用SSE,__ int128_t算术也可以由GCC仿真吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16566437/