Производит ли процессор умозрительное выполнение над таблицей указателей на функции?
Если у кого-то есть таблица указателей на функции, а индекс предоставляется как переменная переменная, будет ли сгенерированный код рассматриваться как не имеющий ответвлений, и это позволит избежать спекулятивного выполнения, или процессор все еще будет пытаться спекулировать наиболее вероятной ветвью?
В качестве простого примера рассмотрим:
if (input_value > thresh) {
do_this();
} else {
do_that();
}
Я предсказываю, что процессор с умозрительным исполнением попытается использовать наиболее вероятную ветвь для приведенного выше кода.
Однако, если преобразовать в таблицу переходов:
this_or_that[input > thresh]();
Будет ли приведенный выше код все еще вызывать спекулятивное выполнение?
1 ответ
Исходя из общности сгенерированных компилятором таблиц переходов, я бы сказал, что было бы довольно недальновидно, если бы разработчикам ЦП не удавалось отслеживать ветвление через такие таблицы. Тем не менее, не все процессоры одинаково способны, поэтому ваш пробег может варьироваться.