Как программно получить размер страницы кэша процессора в C ++? - PullRequest
23 голосов
/ 29 сентября 2008

Я бы хотел, чтобы моя программа считала размер строки кэша процессора, на котором она работает, в C ++.

Я знаю, что это нельзя сделать мобильно, поэтому мне понадобится решение для Linux и другое для Windows (решения для других систем могут быть полезны для других, поэтому публикуйте их, если вы их знаете).

Для Linux я мог прочитать содержимое / proc / cpuinfo и разобрать строку, начинающуюся с cache_alignment. Возможно, есть более эффективный способ вызова API.

Для Windows я просто понятия не имею.

Ответы [ 6 ]

13 голосов
/ 29 сентября 2008

На Win32 GetLogicalProcessorInformation вернет вам SYSTEM_LOGICAL_PROCESSOR_INFORMATION, который содержит CACHE_DESCRIPTOR, который содержит необходимую информацию.

5 голосов
/ 29 сентября 2008

В Linux попробуйте библиотеку proccpuinfo , независимый от архитектуры C API для чтения / proc / cpuinfo

4 голосов
/ 13 сентября 2016

В Windows

#include <Windows.h>
#include <iostream>

using std::cout; using std::endl;

int main()
{
    SYSTEM_INFO systemInfo;
    GetSystemInfo(&systemInfo);
    cout << "Page Size Is: " << systemInfo.dwPageSize;
    getchar();
}

В Linux

http://linux.die.net/man/2/getpagesize

4 голосов
/ 29 сентября 2008

Для x86 инструкция CPUID . Быстрый поиск в Google показывает некоторые библиотеки для win32 и c ++. Я использовал CPUID через встроенный ассемблер.

Дополнительная информация:

2 голосов
/ 29 сентября 2008

Похоже, по крайней мере, SCO Unix (http://uw714doc.sco.com/en/man/html.3C/sysconf.3C.html) имеет _SC_CACHE_LINE для sysconf. Возможно, другие платформы имеют что-то подобное?

0 голосов
/ 29 сентября 2008

Я думаю, вам нужно NtQuerySystemInformation от ntdll.dll.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...