Как работать с предсказанием ветвлений при использовании переключателя в эмуляции процессора

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

В настоящее время у меня есть довольно простой, но полностью функционирующий интерпретатор эмулятора Intel 8080, написанный на C, суть операции - 256-битная таблица переключателей для обработки каждого кода операции. Моя первоначальная мысль заключалась в том, что это, очевидно, самый быстрый метод работы, поскольку кодирование кода операции не согласовано во всем наборе команд 8080, а декодирование добавит много сложностей, несоответствий и разовых случаев. Таблица переключателей, заполненная макросами препроцессора, очень аккуратна и проста в обслуживании.

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

Я уверен, что большинство из вас думают: «О, решение здесь простое, перейдите к динамической перекомпиляции». Да, похоже, что это отключит большую часть корпуса переключателя и значительно увеличит скорость. К сожалению, мой основной интерес - эмуляция старых 8-битных и 16-битных консолей эпохи (Intel 8080 здесь только пример, так как это мой самый простой фрагмент эмулируемого кода), где циклическое и временное соблюдение точной инструкции важно, как видео и звук должен быть обработан на основе этих точных сроков.

При работе с этим уровнем точности производительность становится проблемой даже для старых консолей (посмотрите на bSnes, например). Есть ли какое-то решение или это просто факт при работе с процессорами с длинными конвейерами?

Ответы на вопрос(4)

Ваш ответ на вопрос