Производит ли процессор умозрительное выполнение над таблицей указателей на функции?

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

В качестве простого примера рассмотрим:

if (input_value > thresh) {
    do_this();
} else {
    do_that();
}

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

Однако, если преобразовать в таблицу переходов:

this_or_that[input > thresh]();

Будет ли приведенный выше код все еще вызывать спекулятивное выполнение?

1 ответ

Исходя из общности сгенерированных компилятором таблиц переходов, я бы сказал, что было бы довольно недальновидно, если бы разработчикам ЦП не удавалось отслеживать ветвление через такие таблицы. Тем не менее, не все процессоры одинаково способны, поэтому ваш пробег может варьироваться.

Другие вопросы по тегам