Как программно получить размер страницы кэша процессора на С++?
Я хочу, чтобы моя программа считывала размер строки кэша процессора, на котором он запущен на С++.
Я знаю, что это невозможно сделать портативно, поэтому мне понадобится решение для Linux и другое для Windows (решения для других систем могут быть полезны для других, поэтому публикуйте их, если вы их знаете).
Для Linux я мог прочитать содержимое /proc/cpuinfo и проанализировать строку, начинающуюся с cache_alignment. Возможно, есть лучший способ привлечения вызова к API.
Для Windows я просто понятия не имею.
Ответы
Ответ 1
В 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
Ответ 2
В Win32, GetLogicalProcessorInformation
вернет вам SYSTEM_LOGICAL_PROCESSOR_INFORMATION
, который содержит CACHE_DESCRIPTOR
, который имеет необходимую информацию.
Ответ 3
Для x86, CPUID. Быстрый поиск в Google показывает некоторые библиотеки для win32 и С++. Я также использовал CPUID через встроенный ассемблер.
Дополнительная информация:
Ответ 4
В Linux попробуйте библиотеку proccpuinfo, независимый от архитектуры C API для чтения/proc/cpuinfo
Ответ 5
Похож, по крайней мере, SCO unix (http://uw714doc.sco.com/en/man/html.3C/sysconf.3C.html) имеет _SC_CACHE_LINE для sysconf. Возможно, у других платформ есть что-то подобное?
Ответ 6
Думаю, вам нужно NtQuerySystemInformation
от ntdll.dll
.