По-видимому, вы говорите о виртуальной машине, которая интерпретирует байт-код, а не аппаратную виртуализацию ЦП.
Как реализовать? Предсказание ветвлений в процессорах необходимо только потому, что они конвейерные, и для спекулятивного выполнения вне очереди.
Ни одна из этих вещей не имеет смысла для программного обеспечения интерпретатора, если это потребует дополнительной работы для реализации. Программная конвейерная обработка может быть оправдана для циклов по массивам, чтобы скрыть нагрузку и задержку ALU, особенно на старых ЦП, работающих в порядке очереди, но это не увеличивает общее количество инструкций, которые необходимо выполнить. Если вы не знаете наверняка, что делать дальше, оставьте предположение аппаратному обеспечению OoO exe c.
Обратите внимание, что для чистого интерпретатора, не использующего JITing, управляющие зависимости в гостевом коде становятся зависимостями данных в интерпретаторе, в то время как последовательность различных инструкций в гостевой системе создает управляющую зависимость в интерпретаторе (для отправки в функции обработчика). См. Как именно R зависит от предсказания ветвлений?
Возможно, вам нужно позаботиться о предсказании ветвлений в процессоре, который будет запускать ваш код. В последнее время (как Intel после Haswell) процессоры, наконец, неплохо подходят для этого, используя предикторы IT-TAGE: Прогнозирование ветвлений и производительность интерпретаторов - не верьте фольклору .
Вы не 't реализует предсказание ветвлений в программном обеспечении, но для старых процессоров это стоило настройки интерпретаторов с учетом аппаратного предсказания ветвлений. Оптимизация предварительной выборки X86: поточный код "вычисленного перехода" имеет некоторые ссылки, особенно статью Дарека Михоцки , в которой обсуждается, насколько плохо это отстойно для старых процессоров (текущих на момент написания) на иметь одну «большую центральную» ветвь диспетчеризации, например, один switch
, в который возвращается каждая функция-обработчик инструкций. Это означает, что весь шаблон, которому должна следовать инструкция, какая другая инструкция должна быть предсказана для этого единственного перехода. Без чего-то вроде IT-TAGE состояние прогнозирования для одной ветки очень ограничено.
Настройка для старых процессоров может включать отправку следующей инструкции в конце каждой функции-обработчика вместо возврата к одной отправка oop. Но опять же, это не реализация предсказания ветвления, это настройка для него .