Существуют ли эмуляторы детерминированной архитектуры? - PullRequest
0 голосов
/ 05 июня 2018

Существует ли такая вещь, как детерминированная (как при каждом запуске) эмулятор архитектуры?Он предназначен для тестирования тестовых компиляторов / интерпретаторов.

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

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

1 Ответ

0 голосов
/ 05 июня 2018

Intel IACA - это инструмент статического анализа. Что такое IACA и как мне его использовать? .Но он работает только для одного цикла и не моделирует эффекты кэша, только конвейер.(И я предполагаю, что он предполагает почти идеальное планирование OoO, поэтому, вероятно, не находит пределов размера ROB, только интерфейсный порт в сравнении с портом исполнения в сравнении с узкими местами латентности зависимостей, переносимых циклами).Кроме того, IACA имеет некоторые ошибки в своей модели затрат (например, его правила неразглашения для микросинтеза индексированных режимов адресации неверны для Haswell ).

AFAIK, нет точного цикла x86 симуляторы общедоступны для любой современной микроархитектуры.У нас есть только эмуляторы, которые даже не пытаются работать с той же скоростью, что и любое другое аппаратное обеспечение, настолько быстро, насколько это возможно, например, BOCHS и qemu.Я уверен, что Intel и AMD имеют внутреннее программное обеспечение для симуляции для проверки конструкций ЦП и моделирования их производительности.

Вы, вероятно, могли бы назначить стоимость цикла для каждой инструкции в эмуляторе интерпретации, таком как BOCHS, и получить детерминистическое число,и, возможно, модель кеша тоже (есть симуляторы кеша).Это было бы то же самое каждый раз, когда вы запускали его, но это не соответствовало бы времени работы на любом реальном оборудовании!

Быть детерминированным далеко не достаточно, чтобы быть интересным для настройки программного обеспечения.Современные процессоры x86 имеют много микроархитектурного состояния для выполнения не по порядку.Мы часто можем предсказать очень близко к тому, как они будут запускать цикл (http://agner.org/optimize/, и другие ссылки на производительность в вики-теге x86 ), но в более широком масштабе есть много вещей, которые толькоизвестные поставщики, поэтому мы не могли написать действительно точный симулятор, даже если бы у нас было время.Такие вещи, как предсказание ветвления, известны в общих чертах, но детали не были полностью переработаны.Но предсказание ветвлений является критически важной частью обеспечения высокой степени конвейерной поддержки ЦП где-то от 3 до 4 мопов (с интерфейсом) слитых доменов за такт в реальном коде.

Все становится еще сложнее, если вы хотите смоделироватьмногоядерный компьютер, и SMT / HT добавляет много сложности между потоками, разделяющими ядро.Это едва детерминировано в реальном оборудовании, потому что небольшие вариации синхронизации могут привести к тому, что разные потоки будут не синхронизированы.

Чтобы быть действительно полезным, вы захотите проверить свой код на Sandybridge, Haswell, SkylakeБульдозер, Райзен и, возможно, Сильвермонт.И, возможно, разные варианты тех, у кого разный объем кеша и сервер по сравнению с десктопом, где задержка L3 / памяти отличается.(У многоядерных серверов значительно большая задержка без ядра и более низкая однопоточная пропускная способность, хотя совокупная пропускная способность выше.)

Таким образом, сама идея детерминированного симулятора для "архитектуры x86" странная.Вы можете сделать это так же просто, как если бы каждая инструкция стоила 1 цикл, но это было бы совершенно нереально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...