Как бы вы обычно определяли ассоциативность строк кэша из кода пользовательского режима?

собираю небольшой патч дляинструмент cachegrind / callgrind в valgrind который будет автоматически обнаруживать, используя полностью общий код, инструкцию процессора и конфигурацию кэша (сейчас только x86 / x64 автоматически настраиваются, а другие архитектуры не• предоставить конфигурацию типа CPUID для непривилегированного кода). Этот код должен будет выполняться полностью в непривилегированном контексте, то есть в чистом коде режима пользователя. Он также должен быть переносимым между очень разными реализациями POSIX, поэтому grokking / proc / cpuinfo победил 'не как одна из наших систем назначениятакого не бывает.

Определение частоты ЦП, количества кешей, их размеров и даже размера строки кеша может быть выполнено с использованием 100% общего кода POSIX, который не имеет специфических для ЦП кодов операций (всего лишь много разумных предположений, таких как добавление два числа вместе, если без памяти или регистров зависания зависимостей, вероятно, будут выполняться за один цикл). Эта часть довольно проста.

Что не такЭто так просто, и почему я спрашиваю StackOverflow, как определить ассоциативность строк кэша для данного кэша? Ассоциативность - это количество мест в кеше, которые могут содержать данную строку кеша из основной памяти. Я вижу, что ассоциативность L1 кеша может быть обнаружена, но кеш L2? Конечно, ассоциативность L1 мешает?

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

Спасибо,

Найл

Ответы на вопрос(3)

Ваш ответ на вопрос