У меня есть цикл, который работает снова и снова. Логика внутри этого цикла зависит от режима, в котором находится программа. Чтобы повысить производительность, я думал, что массив указателей функций можно инициализировать, functionPtr [], так что просто вызовет функцию FunctionPtrmode, которая будет работать с правильной логикой. Цикл будет оставаться в одном и том же режиме для многих циклов (число неизвестно заранее, но много тысяч). Программа запускается только на платформе Intel x64 и не требует переносимости.предсказание ветви на указателе функции
Я надеялся, что процессор будет использовать предсказание ветвления, но поскольку моя ветка не является условной (на уровне сборки), но расположение ветви зависит от переменной (functionPtr + mode). Будет ли процессор пытаться вычислить режим functionPtr + и начать вытягивать эти инструкции во время выполнения?
Это не имеет никакого отношения к предсказанию ветвления, но должно быть хорошо - не должно быть конвейера, даже для косвенного вызова функции. –
Я вижу, что вы используете C++. Не можете ли вы создать два класса, которые наследуются от одного и того же интерфейса, а затем создать правильный экземпляр в зависимости от режима? – Vincent
Если есть только несколько случаев, вы можете сделать функцию в цикле параметром шаблона.Выберите во время выполнения (например, оператор switch), шаблонную функцию, содержащую цикл. Помните, что это увеличит размер кода. –