В общем, я не думаю, что это возможно. Он работает для DRAM и файла подкачки, поскольку это управляемый ресурс ОС, кеш управляется самим ЦП.
Операционная система может выполнить жесткий тайминг цикла чтения из памяти и попытаться выяснить, достаточно ли быстро она выполняется для того, чтобы находиться в кеше или выходить в основную память - это будет очень подвержено ошибкам.
В многоядерных / многозадачных системах существует протоколы когерентности кэша , которые используются между процессорами, чтобы определить, когда им нужно аннулировать кэши друг друга. Я полагаю, у вас может быть пользовательское устройство, которое будет отслеживать этот протокол, который будет запрашивать ОС.
Что ты пытаешься сделать? Если вы хотите что-то принудительно вставить в память, существующие процессоры x86 поддерживают предварительную загрузку памяти в кэш неблокирующим способом, например, в Visual C ++ вы можете использовать _mm_prefetch
для извлечения строки в кэш.
EDIT:
Я сам этого не делал, поэтому пользуйтесь на свой страх и риск. Чтобы определить ошибки кэширования для профилирования, вы можете использовать некоторые специфичные для архитектуры регистры. http://download.intel.com/design/processor/manuals/253669.pdf, Приложение A содержит «События настройки производительности». Его нельзя использовать для определения того, находится ли отдельный адрес в кэше или когда он загружен в кэш, но его можно использовать для общей статистики. Я считаю, что именно это использует vTune (феноменальный профилировщик для этого уровня).