Я делаю некоторые разработки в Linux, работающие в VirtualBox. Компьютер - Core i5 под управлением Windows 7 (32-разрядная версия). Согласно записи в Википедии, процессор должен поддерживать SSE4.2, но только виртуальная машина SSE3 работает в виртуальной машине. Если я скомпилирую с флагом -msse4 в gcc, результирующий двоичный файл завершится с ошибкой недопустимой инструкции.
2 ответа
Это известная проблема и уже в их багтрекер:
[запрос функции] Разрешить гостевой ОС использовать наборы инструкций SSE4.1, 4.2 и POPCNT https://www.virtualbox.org/ticket/8651
VirtualBox или KVM или любая другая такая технология виртуализации предоставляет гостю некоторые функции хост-процессора.
Почему бы не экспортировать все функции центрального процессора? Представьте, что вы хотите перенести свою виртуальную машину с одного хоста на другой без прерывания (или путем сохранения состояния). Но второй хост не имеет SSE 4. Если ваша виртуальная машина выставила SSE 4 на хосте 1, и вы успешно скомпилировали и выполнили программу с использованием этого набора инструкций, то при переносе на хост 2 она сломается.
Вот почему - ИМХО - не стоит выставлять каждый поддерживаемый набор инструкций центрального процессора по умолчанию, и я не удивлен, что это имеет место с VirtualBox. Однако он должен (и я надеюсь, что это будет реализованное решение для заявки), что позволит пользователю переопределить выбранные функции по умолчанию. И AFAIK такой опции еще не существует. Так что вам придется набраться терпения.
Обратите внимание, что KVM позволяет вам устанавливать наборы инструкций, которые вы хотите предоставить посетителям для каждого гостя.