2009-09-04 3 views
3

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

ответ

3

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

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

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

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

Смежные вопросы