Я говорил с кем-то из Apple, который сказал мне, что, хотя документация больше не обновляется, это все еще правильный способ сделать то, что мне нужно. Однако они изменили то, как это представлено в Xcode. Теперь вместо создания новой цели вы просто создаете новый файл, а в разделе «Ресурс» есть тип файла «Настройки системы»:
Если вы выберете его, он добавит пакет в ваш проект следующим образом:
В целом я не думаю, что это возможно. Это работает на DRAM и файл подкачки, так как это - управляемый ресурс ОС, кэшем управляет сам ЦП.
ОС могла сделать трудный цикл синхронизации чтения памяти и попытаться видеть, завершается ли она достаточно быстро, чтобы быть в кэше или если бы она должна была выйти в оперативную память - это было бы очень подвержено ошибкам.
В multi-core/multi-proc системах существуют протоколы когерентности кэш-памяти, которые используются между процессорами для определения, когда они должны делать недействительным кэши друг друга, я предполагаю, что у Вас могло быть отдельное устройство, которое отследит этот протокол, который запросила бы ОС.
Что Вы пытаетесь сделать? Если Вы хотите вызвать что-то в память, текущую x86 память упреждающей выборки поддержки процессоров в кэш не блокирующимся способом, например, с Visual C++ Вы могли использовать _mm_prefetch
выбирать строку в кэш.
Править: Я не сделал этого сам, таким образом используйте на Ваш собственный риск. Для определения неудачных обращений в кэш для профилирования Вы можете использовать некоторые архитектурно-зависимые регистры. http://download.intel.com/design/processor/manuals/253669.pdf, Приложение A дает "Настраивающие События Производительности". Это не может использоваться, чтобы определить, находится ли отдельный адрес в кэше или когда он загружается в кэше, но может использоваться для полной статистики. Я полагаю, что это - то, что использует vTune (феноменальный профилировщик для этого уровня).
При попытке определить это сами затем, самое действие запущения Вашей программы могло бы делать недействительным соответствующие строки кэша, следовательно представляя Ваши бесполезные измерения.
Это - один из тех случаев, который зеркально отражает научный принцип, что Вы не можете измерить что-то, не влияя на то, что Вы измеряете.
X86 не знаю, как определить, находится ли адрес в кеше НО здесь показано, как определить, следует ли определять порог адреса WAS в кеше
rdtsc
save timestamp
mov eax,address
rdtsc read timestamp counter
calculate timestamp difference
if < threshold then was in cache
из документации или эмпирически
, на некоторых машинах есть счетчики попаданий / промахов в кеше, которые одинаково хорошо служили бы