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

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

1 ответ

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

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

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

РЕДАКТИРОВАТЬ1: Еще один полезный ресурс (даже если он не отвечает непосредственно на ваш вопрос) для оптимизированного использования PREFETCHh - это руководство по оптимизации Intel.

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