支持最新的Intel SIMD ISA扩展意味着支持以前的SIMD。
AVX2绝对暗含AVX1。
我认为AVX1意味着所有SSE / SSE2 / SSE3 / SSSE3 / SSE4.1 / SSE4.2功能位也必须在CPUID中设置。
请注意,它popcnt具有自己的功能位,因此从理论上讲,您可以拥有带有AVX2和SSE4.2的CPU,但没有popcnt。
从理论上讲,您可以使用AVX制作CPU(或虚拟机),但不接受SSE4.2指令的非VEX编码,例如pcmpistri,但是我认为您违反了AVX功能位所暗示的英特尔保证。不确定是否正式将其记录在手册中,但是大多数软件都会假定这样做。
但AVX1 确实暗示了的VEX编码支持所有 SSE4.2和更早的SIMD指令,例如vpcmpistri或vminss
gcc -mavx2绝对意味着AVX1和以前的扩展,但仅会发出使用VEX编码的代码。但是,它将定义__SSE4_2__宏,依此类推,因此gcc确实将AVX2视为暗示了较早的SSE扩展和popcnt,而不是AES或PCLMUL。这些是单独的功能,即使对于GCC也是如此。
(请注意,MSVC没有太多的SIMD ISA检测宏;它有一个用于AVX,但没有用于所有较早的SSE *扩展。)
请注意,AVX512打破了传统。AVX512F表示支持AVX2及其之前的所有内容,但例如,AVX512DQ不在“ AVX512ER之前”或“之后”。从理论上讲,您可以选择两者都选,也可以都不选。(在实践中,SKYLAKE微架构-X / Cannonlake /等只有一个位与至强披(骑士的降落/骑士的研磨机),超越AVX512F的重叠。 https://en.wikipedia.org/wiki/AVX-512#CPUs_with_AVX- 512
| 归档时间: |
|
| 查看次数: |
1745 次 |
| 最近记录: |