2008-09-29 11 views
20

Ich möchte, dass mein Programm die Cache-Zeilengröße der CPU liest, auf der es in C++ läuft.Wie programmgesteuert die Cacheseitengröße der CPU in C++ abrufen?

Ich weiß, dass dies nicht portabel gemacht werden kann, also brauche ich eine Lösung für Linux und eine andere für Windows (Lösungen für andere Systeme könnten für andere nützlich sein, also poste sie, wenn du sie kennst).

Für Linux konnte ich den Inhalt von/proc/cpuinfo lesen und die Zeile beginnend mit cache_alignment analysieren. Vielleicht gibt es einen besseren Weg, einen Aufruf an eine API zu führen.

Für Windows habe ich einfach keine Ahnung.

Antwort

2

Auf 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(); 
} 

Auf Linux

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

+1

Nachdem ich darauf zurückgekommen bin, glaube ich nicht, dass ich deine Frage beantwortet habe, die sich auf die Größe der Cachezeile und nicht auf die richtige Größe der Speicherseite bezieht? https://en.wikipedia.org/wiki/Page_(computer_memory) Ich googelte für ein Seitengrößenschnipsel (Arbeiten an einem Projekt mit Speicherzugriff) und kam hier, die Gefahren des Skimming. Bitte entziehe meine Antwort, aber es lohnt sich, sie hier zu lassen, um sie später zu lesen. – Researcher

12

Auf Win32, GetLogicalProcessorInformation wird Ihnen eine SYSTEM_LOGICAL_PROCESSOR_INFORMATION zurückgeben, die eine CACHE_DESCRIPTOR enthält, die die Informationen enthält, die Sie benötigen.

+1

Huch - Decodierung der Anordnung von SYSTEM_LOGICAL_PROCESSOR_INFORMATION Strukturen sieht aus wie es ein Schmerz sein würde. –

+3

Willkommen in der Welt der Systemprogrammierung. ;) –

+0

Es ist nicht so schlimm, Michael. Wie auch immer, wenn Sie sich damit auseinandersetzen müssen, müssen Sie lernen, wie die CPU-Topologie aufgebaut ist, und Sie müssen es vielleicht wissen. –

Verwandte Themen