Come ottenere a livello di codice la dimensione della pagina della cache della CPU in C ++?

StackOverflow https://stackoverflow.com/questions/150294

  •  02-07-2019
  •  | 
  •  

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.

È stato utile?

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

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

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

Per x86, l'istruzione CPUID . Una rapida ricerca su Google rivela alcune librerie per win32 e c ++. Ho usato anche CPUID tramite assemblatore in linea.

Altre informazioni:

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top