2008-09-29 8 views
20

Me gustaría que mi programa lea el tamaño de la línea de caché de la CPU en la que se está ejecutando en C++.¿Cómo obtener programáticamente el tamaño de página de caché de CPU en C++?

Sé que esto no se puede hacer de forma portátil, por lo que necesitaré una solución para Linux y otra para Windows (las soluciones para otros sistemas podrían ser útiles para otros, así que publíquelas si las conoce).

Para Linux pude leer el contenido de/proc/cpuinfo y analizar la línea que comienza con cache_alignment. Tal vez haya una forma mejor de invocar una API.

Para Windows simplemente no tengo ni idea.

Respuesta

2

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

En Linux

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

+1

Después de volver a esto, no creo que haya respondido a su pregunta, que era sobre el tamaño de la línea de caché en lugar del tamaño correcto de la página de memoria. https://en.wikipedia.org/wiki/Page_(computer_memory) Estaba buscando en Google un fragmento de tamaño de página (trabajando en un proyecto que implica acceso a la memoria) y vine aquí, los peligros del descremado. Desmarque mi respuesta, pero probablemente valga la pena dejarla aquí para referencia futura. – Researcher

12

En Win32, GetLogicalProcessorInformation le devolverá un SYSTEM_LOGICAL_PROCESSOR_INFORMATION que contiene un CACHE_DESCRIPTOR, que tiene la información que necesita.

+1

Huy - decodificar la matriz de estructuras SYSTEM_LOGICAL_PROCESSOR_INFORMATION parece que sería un dolor. –

+3

Bienvenido al mundo de la programación de sistemas. ;) –

+0

No está mal, Michael. De todos modos, familiarizarse con esto te obliga a aprender cómo se organiza la topología de la CPU, y es posible que necesites saberlo. –

Cuestiones relacionadas