Программно получите размер строки кэша?

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

168
задан 4 revs, 2 users 56% 23 May 2017 в 12:10
поделиться

5 ответов

В Linux (с относительно новым ядром) вы можете получить эту информацию из / sys:

/sys/devices/system/cpu/cpu0/cache/

Этот каталог имеет подкаталог для каждого уровня кэша. Каждый из этих каталогов содержит следующие файлы:

coherency_line_size
level
number_of_sets
physical_line_partition
shared_cpu_list
shared_cpu_map
size
type
ways_of_associativity

Это дает вам больше информации о кэше, чем вы когда-либо надеялись узнать, включая размер строки кэша ( coherency_line_size ), а также то, какие процессоры совместно используют этот кэш , Это очень полезно, если вы выполняете многопоточное программирование с общими данными (вы получите лучшие результаты, если потоки, совместно использующие данные, также совместно используют кэш).

170
ответ дан 23 November 2019 в 20:53
поделиться

В x86 вы можете использовать инструкцию CPUID с функцией 2 для определения различных свойств кэша и TLB. Анализ выходных данных функции 2 несколько сложен, поэтому я отошлю вас к разделу 3.1.3 Идентификация процессора Intel и Инструкция CPUID (PDF).

Чтобы получить эти данные из C / В коде C ++ вам потребуется использовать встроенную сборку, встроенные функции компилятора или вызвать функцию внешней сборки для выполнения инструкции CPUID.

31
ответ дан 23 November 2019 в 20:53
поделиться

Вы также можете попытаться сделать это программно, измерив некоторое время. Очевидно, что он не всегда будет таким же точным, как cpuid и т.п., но он более переносим. ATLAS делает это на этапе настройки, вы можете посмотреть на него:

http://math-atlas.sourceforge.net/

3
ответ дан 23 November 2019 в 20:53
поделиться

На платформе Windows:

из http://blogs.msdn.com/oldnewthing/archive/2009/12/08/9933836.aspx

GetLogicalProcessorInformation функция даст вам характеристики логических процессоров, используемых система. Вы можете пройтись по SYSTEM_LOGICAL_PROCESSOR_INFORMATION возвращается функцией, ищущей записи типа RelationCache. Каждый такая запись содержит ProcessorMask который сообщает вам, какой процессор (ы) запись применяется к, и в CACHE_DESCRIPTOR, он говорит вам, что описывается тип кеша и насколько велика строка кеша для этого cache.

7
ответ дан 23 November 2019 в 20:53
поделиться

В Linux посмотрите на sysconf(3).

sysconf (_SC_LEVEL1_DCACHE_LINESIZE)

Вы также можете получить его из командной строки, используя getconf:

$ getconf LEVEL1_DCACHE_LINESIZE
64
133
ответ дан 23 November 2019 в 20:53
поделиться
Другие вопросы по тегам:

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