Есть ли такие процессоры, у которых есть инструкции обходить кеш?

Существуют ли такие процессоры, которые имеют инструкции обходить кеш для конкретных данных? У этого вопроса также есть ответ, который предполагает, что инструкции SSE4.2 обходят кеш. Может ли кто-нибудь просветить меня по этому поводу?

В целом политика кэширования контролируется модулем управления памятью (MMU). Для каждого диапазона адресов определяется политика кэширования. Эти таблицы управляются ОС и доступны в системном пространстве. Как ответ боковой панели на вопрос, который вы, возможно, намеревались спросить, для архитектур, имеющих кэш, обычно доступны команды процессора для синхронизации / недействительности / очистки кэша. Однако, как и таблицы MMU, эти команды также доступны только в системном пространстве.

Архитектура Altera Nios II имеет 2 конкретных инструкции ldio и stio для загрузок / хранилищ, которые обходят кеш. Они используются для ввода IO с памятью.

http://www.csun.edu/~glaw/ee525/Lecture03Nios.pdf

Nios II – это мягкий процессор, обычно используемый для плат FPGA Altera, и хотя он также может быть лицензирован для жестких ASIC-устройств, но я не знаю коммерческих процессоров на основе этой архитектуры

Да, в зависимости от вашего определения конкретных данных. Процессоры обычно имеют регистры / таблицы управления кэшем, которые используются для определения того, какие области памяти могут быть кэшированы, и которые не должны кэшироваться. Как правило, код, выполняющийся в пользовательском пространстве, не имеет доступа к этим таблицам.

Существуют ли такие процессоры, которые имеют инструкции обходить кеш для конкретных данных?

Семейство SuperH (или, по крайней мере, SuperH-2) имеет как неявное, так и явное обход его кеш-памяти. Это делается с использованием различных областей адресного пространства памяти, а не с помощью специальных инструкций.
Установив верхние 3 бита адреса на 001 вы получите доступ к кеш- зеркалу с тем же адресом, который будет удален из трех верхних бит. И некоторые области (например, регистры ввода-вывода с отображением памяти) никогда не кэшируются.

Инструкции хранилища кэша SSE должны избегать загрязнения кэша при записи в регион, который в ближайшее время не будет затронут. например, вы не хотите выселять данные, которые будут использоваться снова.

Кроме того, реализации x86 обычно читаются в целой строке кэша при записи в любую часть строки кэша. Если предыдущее содержимое строки кэша не используется, это пустая трата памяти. (например, dest arg memcpy или memset .) Я нашел несколько старых обсуждений этого эффекта обратной записи (по умолчанию) против write-combining ( movntq / movntdq ) для реализации memcpy . Будьте осторожны с этим, если что-то еще прочитает вывод memcpy сразу.

Потоковые нагрузки работают только для чтения из регионов USWC , так как нормальный memcpy выполняет ужасно в этом случае. Потоковые нагрузки от нормального (WB (обратная связь)) в настоящее время не являются особенными и работают как обычные нагрузки movdqa . (т. е. подсказка NT игнорируется). Руководство по оптимизации Intel говорит, что вы можете использовать prefetchnta для снижения уровня загрязнения.


IDK, если можно записать в кеш (вместо обхода с movnt ) без запуска чтения. Возможно, AVX512 решит эту проблему для memcpy , потому что регистр ZMM 512b имеет 64 байта, то есть полную строку кеша. 64-байтовое выровненное хранилище из регистра ZMM в память, которое еще не было кэшировано, может быть реализовано таким образом, чтобы не считывать RAM сначала, и все же сделал магазин видимым сразу на других ядрах ЦП в системе.

( AVX-512 будет находиться в Skylake Xeon (а не в других процессорах Skylake ). Также в Knight’s Landing широкомасштабная высокопроизводительная ускоритель Xeon Phi для ускорения вычислений).