Можно ли проверить, недействительна ли строка кеша, и/или как вручную перепроверить строку кеша?

(Меня в первую очередь интересуют архитектуры x86, но было бы интересно узнать, есть ли способ сделать это и в других архитектурах)

Есть ли способ программно проверить состояние строки кэша, содержащей определенный адрес памяти? Я не хочу читать содержимое этого адреса и не хочу штрафа за чтение из основной памяти из-за промаха кеша, я просто хочу проверить состояние строки кеша.

И есть ли способ программно перепроверить недопустимую строку кэша без записи в память? (ну, я думаю, с МЭСИ, под «перепроверкой» я имею в виду изменение его состояния на «Изменено»)


person Jimmeh    schedule 16.02.2011    source источник
comment
Какова мотивация для этого? Обычно такие вещи полностью прозрачны для пользовательских программ.   -  person Paul R    schedule 16.02.2011
comment
Я экспериментирую с алгоритмами блокировки в критических по скорости ситуациях.   -  person Jimmeh    schedule 16.02.2011
comment
Некоторые встроенные процессоры PowerPC дают вам контроль над различными аспектами кэш-памяти, но я не знаю ничего подобного в процессорах общего назначения, таких как x86.   -  person Paul R    schedule 17.02.2011


Ответы (2)


Единственное, что я могу придумать, это использовать подсказку по оптимизации PREFETCH. Итак, вместо:

mov eax, (DWORD PTR [esi])

Вы бы сделали:

prefetch [esi]
;
; give processor time to load cacheline...
;
mov eax, (DWORD PTR [esi])

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

person Sparafusile    schedule 23.02.2011

Кэш совершенно невидим для программиста. Программатор работает с виртуальными адресами, а кеш работает с физическими адресами.

person mahmood    schedule 29.08.2011