Приводят ли указатели функций к очистке конвейера команд?

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

Иногда данные, загруженные в конвейер, становятся недействительными, и конвейер необходимо очистить и перезагрузить новыми данными. Время, необходимое для пополнения конвейера, может быть значительным и вызвать снижение производительности.

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

Я работаю на C, но полагаю, что это еще более важно в C++, где многие вызовы функций осуществляются через v-таблицы.


редактировать @JensGustedt пишет:

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

К сожалению, это может быть ловушка, в которую я попал.

Я написал целевую функцию маленькой и быстрой из соображений производительности.

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

Итак, у меня есть очень короткая, не встроенная функция.

23
задан BeeOnRope 27 May 2018 в 21:45
поделиться