Определите, является ли ячейка памяти в кэше ЦП

Я говорил с кем-то из Apple, который сказал мне, что, хотя документация больше не обновляется, это все еще правильный способ сделать то, что мне нужно. Однако они изменили то, как это представлено в Xcode. Теперь вместо создания новой цели вы просто создаете новый файл, а в разделе «Ресурс» есть тип файла «Настройки системы»:

The "New File" sheet in Xcode showing the tvOS tab with the Resource file type "System Settings" selected. [ 115]

Если вы выберете его, он добавит пакет в ваш проект следующим образом:

The project navigator showing a bundle and its contained files newly added by Xcode

8
задан Mike A 25 March 2009 в 19:13
поделиться

3 ответа

В целом я не думаю, что это возможно. Это работает на DRAM и файл подкачки, так как это - управляемый ресурс ОС, кэшем управляет сам ЦП.

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

В multi-core/multi-proc системах существуют протоколы когерентности кэш-памяти, которые используются между процессорами для определения, когда они должны делать недействительным кэши друг друга, я предполагаю, что у Вас могло быть отдельное устройство, которое отследит этот протокол, который запросила бы ОС.

Что Вы пытаетесь сделать? Если Вы хотите вызвать что-то в память, текущую x86 память упреждающей выборки поддержки процессоров в кэш не блокирующимся способом, например, с Visual C++ Вы могли использовать _mm_prefetch выбирать строку в кэш.

Править: Я не сделал этого сам, таким образом используйте на Ваш собственный риск. Для определения неудачных обращений в кэш для профилирования Вы можете использовать некоторые архитектурно-зависимые регистры. http://download.intel.com/design/processor/manuals/253669.pdf, Приложение A дает "Настраивающие События Производительности". Это не может использоваться, чтобы определить, находится ли отдельный адрес в кэше или когда он загружается в кэше, но может использоваться для полной статистики. Я полагаю, что это - то, что использует vTune (феноменальный профилировщик для этого уровня).

7
ответ дан 5 December 2019 в 11:27
поделиться

При попытке определить это сами затем, самое действие запущения Вашей программы могло бы делать недействительным соответствующие строки кэша, следовательно представляя Ваши бесполезные измерения.

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

6
ответ дан 5 December 2019 в 11:27
поделиться

X86 не знаю, как определить, находится ли адрес в кеше НО здесь показано, как определить, следует ли определять порог адреса WAS в кеше

rdtsc
save timestamp
mov eax,address
rdtsc read timestamp counter
calculate timestamp difference
if < threshold then was in cache

из документации или эмпирически

, на некоторых машинах есть счетчики попаданий / промахов в кеше, которые одинаково хорошо служили бы

2
ответ дан 5 December 2019 в 11:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: