如何在VirtualBox 5中的Ubuntu guest虚拟机上启用AVX2扩展?

我正在尝试编译一个使用来自相当新的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: 

有任何想法吗?

我问自己同样的问题。 我不久前阅读了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 ,启动了我的VM并启用了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 

要检查我在VM中运行x265:

 x265 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX AVX2 LZCNT 

我正在环顾四周是否可以启用其他东西, grep -r -i "search_term" . 在源代码中确实为搜索条件pIsaExtspExtFeatureLeafpFeaturespCurLeafpCpumCfg带来了一些结果,但添加密钥要么没有效果,要么VM拒绝启动。 说到这一点,要查看您设置的所有额外键:

 VBoxManage getextradata "$vm_name" enumerate 

并删除一个键只需运行您设置键但没有值的相同命令,例如:

 VBoxManage setextradata "$vm_name" VBoxInternal/CPUM/IsaExts/AVX2 

而不是仅仅浏览源代码,最好阅读和理解项目的源代码组织 。