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

Я работаю с кодом, который содержит встроенную сборку для инструкций предварительной выборки SSE. Константа препроцессора определяет, используются ли инструкции для 32-, 64- или 128-байтовых предварительных выборок. Приложение используется на самых разных платформах, и до сих пор мне приходилось исследовать в каждом случае, что является лучшим вариантом для данного CPU. Я понимаю, что это размер строки кэша. Доступна ли эта информация автоматически? Кажется, это явно не присутствует в/proc/cpuinfo.

Ответы

Ответ 1

Я думаю, что ваш вопрос связан с этим question или этим. Я думаю, что ясно, что - если вы не можете полагаться на ОС или библиотечную функцию - вы захотите использовать инструкцию CPUID, но тогда вопрос станет именно той информацией, которую вы ищете. - И, конечно же, AMD и Intel не должны соглашаться. Эта страница предлагает использовать Cpuid.1.EBX [15: 8] (т.е. BH) для поиска на Intel и функции 80000005h на AMD. Кроме того, на Intel CPUID.2... кажется, содержит соответствующую информацию, но это выглядит как настоящая боль, чтобы разобрать нужную информацию.

Я думаю, что из того, что я прочитал, как AMD, так и Intel CPUID-команды будут поддерживать CPUID.1.EBX [15: 8], который возвращает размер одной строки кэша в QUADWORDs как используемый инструкцией CLFLUSH (которая отсутствует на всех процессорах, поэтому я не знаю, найдёте ли вы что-нибудь там). Итак, после выполнения CPUID.1 вам придется умножить BH на 8, чтобы получить размер строки кэша в байтах. Это зависит от моего неявного предположения (пожалуйста, кто-нибудь может сказать, действительно ли это действительно?), что определение размера одной строки кеша всегда одинаково для команд CLFLUSH и PREFETCHh.

Кроме того, в Intel manuals указано, что PREFETCHh - это только подсказка, но если он преффицирует что-либо, он всегда будет минимум 32 байта.

EDIT1: Еще один полезный ресурс (даже если он напрямую не отвечает на ваш вопрос) для оптимизированного использования PREFETCHh - это руководство по оптимизации Intel здесь.