我正在尝试编译一个使用较新的 Intel Haswell 处理器的 AVX2 指令的程序。
我已检查我使用的 Macbook Pro 是否配备了 Crystalwell 处理器,它应该具有这样的 AVX2 扩展:
sysctl -n machdep.cpu.brand_string
Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
我的目的是使用 Ubuntu 15.10 64 位版本 VirtualBox 映像来编译这样的程序,该映像具有最新版本的 gcc:
gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010
当我检查 VirtualBox 机器中的扩展时,没有看到列出 avx2:
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 70
model name : Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
stepping : 1
cpu MHz : 2494.226
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 3
cpu cores : 4
apicid : 3
initial apicid : 3
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm
bugs :
bogomips : 4988.45
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
有任何想法吗?
答案1
我也问过自己同样的问题。不久前,我阅读了 VirtualBox 文档的主要部分,记得 SSE4.1/SSE4.2 是有据可查,但 AVX2 尚未实现,尽管预计自VirtualBox 5.0 Beta 3。
以下是 14.04 主机上 /proc/cpuinfo 的标志:
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl
xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64
monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1
sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c
rdrand lahf_lm abm ida arat pln pts dtherm tpr_shadow vnmi
flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms
invpcid xsaveopt
这里是在 VirtualBox 5.0.14 托管的虚拟机上
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm
constant_tsc rep_good nopl xtopology nonstop_tsc pni pclmulqdq
ssse3 cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx rdrand
hypervisor lahf_lm abm
我搜索了互联网并下载了源代码,这让我找到了这张票在哪里坦率(我猜是 Frank Mehnert)解释了如何禁用 AVX 和这张票更改日志中指出,从 5.0.2 开始暂时禁用 AVX2 直通是出于这个原因。因此禁用它是有原因的,您应该小心。
我运行VBoxManage setextradata "$vm_name" VBoxInternal/CPUM/IsaExts/AVX2 1
并启动了我的虚拟机AVX2 已启用:
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm
constant_tsc rep_good nopl xtopology nonstop_tsc pni pclmulqdq
ssse3 cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx rdrand
hypervisor lahf_lm abm avx2
为了检查我在虚拟机中运行了 x265:
x265 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX AVX2 LZCNT
我四处寻找是否可以启用其他功能,在源代码中确实为搜索词、、和带来grep -r -i "search_term" .
了一些结果,但添加键要么不起作用,要么虚拟机拒绝启动。说到这,要查看您设置的所有额外键,请运行:pIsaExts
pExtFeatureLeaf
pFeatures
pCurLeaf
pCpumCfg
VBoxManage getextradata "$vm_name" enumerate
要删除一个键,只需运行与设置键相同的命令,但不设置值,例如:
VBoxManage setextradata "$vm_name" VBoxInternal/CPUM/IsaExts/AVX2
与其只是浏览源代码,不如阅读并理解项目的源代码组织。