Come ottenere a livello di codice la dimensione della pagina della cache della CPU in C ++?
Domanda
Vorrei che il mio programma leggesse la dimensione della linea della cache della CPU su cui è in esecuzione in C ++.
So che questo non può essere fatto in modo portabile, quindi avrò bisogno di una soluzione per Linux e un'altra per Windows (le soluzioni per altri sistemi potrebbero essere utili ad altri, quindi pubblicale se le conosci).
Per Linux ho potuto leggere il contenuto di / proc / cpuinfo e analizzare la riga che inizia con cache_alignment. Forse esiste un modo migliore per coinvolgere una chiamata a un'API.
Per Windows semplicemente non ne ho idea.
Soluzione
Su 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();
}
Su Linux
Altri suggerimenti
Su Win32, GetLogicalProcessorInformation
sarà restituirti un SYSTEM_LOGICAL_PROCESSOR_INFORMATION
che contiene un CACHE_DESCRIPTOR
, che contiene le informazioni necessarie .
Su Linux prova la libreria proccpuinfo , un'API C indipendente dall'architettura per la lettura / proc / cpuinfo
Sembra almeno SCO unix ( http: // uw714doc.sco.com/en/man/html.3C/sysconf.3C.html ) ha _SC_CACHE_LINE per sysconf. Forse altre piattaforme hanno qualcosa di simile?
Penso che tu abbia bisogno di NtQuerySystemInformation
da ntdll.dll
.