2017-01-18 17 views
2

Я рассматриваю возможность векторизации вызовов floor() с использованием sse2 intrinsics, а затем измерение коэффициента усиления производительности. Но в конечном счете двоичный файл будет запущен на виртуальной машине, к которой у меня нет доступа.sse2 векторизация и виртуальные машины

Я действительно не знаю, как работает виртуальная машина. Является ли бинарный файл полностью выполненным на программном эмулированном виртуальном процессоре?

Если нет, если VM запускается на процессоре с SSE2, может ли VM использовать его инструкцию SSE2 процессора при выполнении инструкции SSE2 из моего двоичного файла?

Могла ли моя векторизация быть полезной на ВМ?

ответ

4

Я действительно не знаю, как работает виртуальная машина. Является ли бинарный файл полностью выполненным на программном эмулированном виртуальном процессоре?

Для серьезных целей нет, потому что это слишком медленно. (Но, например, Bochs, он может быть полезен, например, для отладки ядра)

Бинарный файл выполняется как можно больше «нормально». Обычно это означает, что любой код, который не пытается взаимодействовать с ОС, будет выполняться напрямую. Например, системные вызовы, вероятно, потребуют участия в реализации VM.

Если нет, если VM запускается на процессоре с SSE2, может ли VM использовать его инструкцию SSE2 процессора при выполнении инструкции SSE2 из моего двоичного кода?

Да.

Могла ли моя векторизация быть полезной на ВМ?

Да.

3

Зависит от технологии VM и возможностей процессора. Первые виртуальные машины x86 (например, VMWare на 32-битных машинах) использовали перекомпиляцию. Они рассмотрели двоичный код виртуальных машин, чтобы искать вредные инструкции (например, доступ к необработанной памяти или специальные регистры), чтобы заменить их гиперзвонами.

Поскольку инструкции SSE2 не являются вредными, они просто останутся как есть, и в VM не добавляется штраф за производительность. Более того, современные процессоры x86 используют «аппаратную виртуализацию», что позволяет избежать перекомпиляции. Вредные инструкции улавливаются процессором и генерируют прерывание, но снова SSE2 instrs не должны запускать его.

Есть, конечно, полнофункциональные эмуляторы процессора, такие как QEMU (не QEMU-KVM) или Bochs, но это совсем другая история. Процессор с эмулированным Bochs, например, примерно в 1000 раз медленнее центрального процессора.

+0

Что вы пробовали и что заметили? Вместо того, чтобы угадывать, вам нужно просто застрять в этом в практическом смысле. Я с удивлением обнаружил, что на моих виртуальных машинах производительность на самом деле очень хорошая. Это включает в себя векторизацию. Вы можете написать здесь о том, что вы делаете. – Holmz