Ядро Linux: скорее всего () против маловероятного ()

Эти два метода, кажется, широко используются внутри кода ядра Linux. Я знаю основы прогнозирования ветвлений, но мне хотелось бы знать, как эти две функции влияют на работу операторов if(). Также они работают на уровне конвейера команд процессора? или это на гораздо более высоком уровне абстракции на уровне кода ядра?

Будучи новичком в ядре Linux, я был бы глубоко заинтересован в знании внутренней работы этих двух методов. Спасибо!

1 ответ

На некоторых (микро) архитектурах есть подсказки ветвления, которые компилятор может закодировать в инструкцию, чтобы сообщить блоку предсказания ветвления ЦП, будет ли ветвление выполнено.

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

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

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