На что способен эмулятор от Intel?

10 Янв 2016

Обзор функциональных возможностей Intel SDE (Software Development Emulator) в свете экспериментов с поддержкой 256-битные векторов

Многообразие и быстрая смена поколений архитектур вычислительных платформ постоянно ставит перед разработчиками программного обеспечения задачу адаптации своих продуктов для новых аппаратных решений. А пока очередная новейшая система еще «не доехала» до тестовой лаборатории, ознакомится с ней помогают эмуляторы.

Представляем исследование «эмулированной версии» 512-битной технологии векторных вычислений AVX512 (Advanced Vector Extension), представленной в процессорах Intel Skylake Xeon. Продукт Intel SDE (Software Development Emulator) позволит экспериментировать на платформе с процессором поколения Sandy Bridge, которое, как известно, поддерживает только 256-битные векторы.

Несколько слов об инструментальной платформе

Перед запуском эмулятора ознакомимся с конфигурацией системы. В отличие от эмулятора AMD SimNow, который работает даже на Intel-платформах, в SDE-симуляторе мы будет пользоваться только «каноническими» платформами:

Запуск утилиты системной информации на хост-платформе. Система с двумя процессорами Intel Xeon на основе ядра Sandy Bridge
Рис.1 Запуск утилиты системной информации на хост-платформе. Система с двумя процессорами Intel Xeon на основе ядра Sandy Bridge

Два 8 ядерных Intel Xeon, использующих технологию Hyper Threading, в общей сложности содержат 32 логических процессора. Наличие ACPI таблицы SRAT (System/Static Resource Affinity Table) идентифицирует NUMA-систему с двумя узлами, параметр Domains=2.

Почему в NUMA-системе с двумя процессорными сокетами три блока памяти (параметр RAMs=3)? Объектом декларирования в таблице ACPI SRAT являются не физические блоки памяти, а диапазоны, отведенные для них в адресном пространстве. Поскольку разработчики платформы, руководствуясь соображениями совместимости,  разместили ресурсы Memory-Mapped IO а также Firmware ROM в пределах нижних 4 гигабайт, блок памяти одного из процессоров фрагментирован и представлен в адресном пространстве в виде двух диапазонов, что в сочетании с одним диапазоном памяти второго процессора дает три.

Результаты бенчмарок на хост-платформе. Чтение 256-битными AVX инструкциями, для блока, размещаемого в кэш-памяти L1
Рис.2 Результаты бенчмарок на хост-платформе. Чтение 256-битными AVX инструкциями, для блока, размещаемого в кэш-памяти L1

Оценим производительность хост-платформы. График показывает зависимость скорости чтения блока от его размера. В этом опыте размер задан в окрестности значения 32 килобайта, соответствующего кэш-памяти данных первого уровня. Вполне ожидаемо, что при выходе за пределы кэш-памяти, скорость падает. Параметр CPI (Clocks Per Instruction) отражает количество тактов, затрачиваемых на чтение одного 256-битного операнда. Программа визуализирует минимальное, максимальное и среднее значение этого параметра, а также соответствующую скорость в мегабайтах в секунду (MBPS). Для Sandy Bridge теоретический минимум равен 1 такту на 256-битное чтение. В нашем примере минимум равен 0.817 тактов. Это объясняется тем, что тест использует счетчик тактов TSC (Time Stamp Counter), поскольку он доступен на «пользовательском» уровне привилегий. Его показания начинают «отставать» от истинной тактовой частоты ядра в случае активности технологии Intel Turbo Boost.

Виртуальная машина

Запускаем отлаживаемое приложение под эмулятором, указав код виртуального процессора, соответствующий Skylake Xeon:

sde - skx -- <имя приложения>

Запуск утилиты системной информации под эмулятором. Система с двумя процессорами Intel Xeon на основе ядра Skylake

Рис.3 Запуск утилиты системной информации под эмулятором. Система с двумя процессорами Intel Xeon на основе ядра Skylake

Операции, использующие 512-битные AVX инструкции, стали доступны. Заметим, что Intel SDE не только реализует выполнение этих инструкций, но и модифицирует возвращаемые битовые поля CPUID features bitmap. Кроме того, установкой соответствующих битов в системном регистре XCR0 виртуального процессора, декларируется поддержка операционной системой 512-битного контекста. Все это позволило нашей информационно-диагностической утилите задействовать технологию AVX512.

Мультипроцессорная и NUMA-топология не изменились по сравнению с хост-платформой. Приложению доступны те же 32 логических процессора, но уже с расширившейся функциональностью.

Обратим внимание и на то, что декларируемый размер кэш-памяти уровней L2 и L3 уменьшился.

Результаты бенчмарок под эмулятором. Чтение 512-битными AVX инструкциями, для блока, размещаемого в кэш-памяти L1

Рис.4 Результаты бенчмарок под эмулятором. Чтение 512-битными AVX инструкциями, для блока, размещаемого в кэш-памяти L1

Очевидно, при эмуляции или программном выполнении машинных инструкций, производительность достаточно низкая, среднее время чтения 512-битного операнда более 150 тактов. На этом фоне уже не видна точка перегиба, характеризующая наличие кэш-памяти L1.

Резюме

Почему производительность под эмулятором так упала в сравнении с «хостовой» системой? Ведь, например, виртуальные машины на основе Oracle Virtual Box обладают значительно лучшим быстродействием?

Причина не только в том, что Oracle VMBox использует аппаратную виртуализацию, а Intel SDE нет. Для виртуальной машины Oracle VMBox, главную низкоуровневую работу, а именно выполнение потока инструкций, выполняет физический процессор, вмешательство гипервизора требуется только тогда, когда «гостевая» задача требует обращения к привилегированным системным ресурсам или выполнила некую недопустимую операцию. А в случае Intel SDE эмулятор должен программно реализовывать выполнение машинных инструкций, отсутствующих в системе команд реального процессора.

Вместе с тем, если не принимать во внимание неизбежное изменение динамических характеристик выполнения машинного кода, эмулятор Intel SDE решил поставленную задачу вполне успешно.

Теги: