我想知道 Linux 内核何时修改以完全支持 AVX2 指令集。
我曾经测试过一些使用 AVX2 指令集的软件,有人声称在 Linux 计算机上运行速度提高了 20%,但我的测试是在支持 avx2 的服务器上进行的,/proc/cpuinfo
使用的内核是:3.10.0-229.1.2.el7.x86_64
内核 3.10.0 是否足够新,可以完全支持 AVX2?
PS:重新表述一条评论:对于使用最新版本的 GCC 编译的二进制文件,哪个内核将完全支持 AVX2,大概哪个内核对 AVX2 支持最好?
答案1
要运行带有 avx2 代码的应用程序,内核必须在任务之间切换时正确处理存储/恢复 CPU 状态,这在 2.6.30 中已经完成(https://kernelnewbies.org/Linux_2_6_30)。软件还必须包含(可能在编译时决定是否包含)avx2 代码并利用它(或者它可以同时包含两者并在运行时决定,但要做到这一点,它必须检测您的 CPU 是否支持 avx2)。avx2 带来多少好处还取决于 CPU(有些 CPU 支持它,但由于各种原因,并没有真正从中受益。英特尔 CPU 通常比 AMD CPU 受益更多,而且每一代新产品受益更多)。
内核本身也可以包含针对加密、散列、压缩等功能以及从中受益的任何其他功能而优化的 avx2 代码(并非所有功能都包含此代码,而且有些理论上可以包含此代码的功能很难使用 avx2 以正确且比标量代码执行相同操作更快的方式进行编码),具体取决于编译时使用的设置。
您可以通过执行 dmesg | grep avx2 之类的操作或读取配置文件(用于编译当前运行的内核的配置有时可以在 /proc/config.gz 找到)并查找 avx2 来检查这一点。