Todas las plataformas son bienvenidas, especifique la plataforma para su respuesta.
Una pregunta similar: ¿Cómo obtener programáticamente el tamaño de página de caché de la CPU en C ++?
c++
c
caching
operating-system
systems-programming
paxos1977
fuente
fuente
SDL_GetCPUCacheLineSize
función de SDL2 , luego eche un vistazo acpuid macro
cuál tiene el código fuente del ensamblaje para cada del modelo de procesador. Puede echar un vistazo a imgur.com/a/KP57m6s o echar un vistazo directamente a la fuente usted mismo.Respuestas:
En Linux (con un núcleo razonablemente reciente), puede obtener esta información de / sys:
Este directorio tiene un subdirectorio para cada nivel de caché. Cada uno de esos directorios contiene los siguientes archivos:
Esto le brinda más información sobre la memoria caché de la que esperaría saber, incluido el tamaño de la línea de memoria caché (
coherency_line_size
) y las CPU que comparten esta memoria caché. Esto es muy útil si está haciendo programación multiproceso con datos compartidos (obtendrá mejores resultados si los hilos que comparten datos también comparten un caché).fuente
cat /sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size
vuelve64
en mi sistema Lo mismo para las carpetas index1,2,3 también.En Linux, mire sysconf (3).
También puede obtenerlo desde la línea de comandos usando getconf:
fuente
He estado trabajando en algunas cosas de línea de caché y necesitaba escribir una función multiplataforma. Lo comprometí con un repositorio de github en https://github.com/NickStrupat/CacheLineSize , o puede usar la fuente a continuación. Siéntase libre de hacer lo que quiera con él.
fuente
En x86, puede usar la instrucción CPUID con la función 2 para determinar varias propiedades de la memoria caché y el TLB. Analizar la salida de la función 2 es algo complicado, así que lo referiré a la sección 3.1.3 de la Identificación del procesador Intel y la Instrucción CPUID (PDF).
Para obtener estos datos del código C / C ++, necesitará usar ensamblado en línea, intrínseco del compilador o llamar a una función de ensamblaje externo para realizar la instrucción CPUID.
fuente
Si está usando SDL2, puede usar esta función:
Que devuelve el tamaño del tamaño de la línea de caché L1, en bytes.
En mi máquina x86_64, ejecutando este fragmento de código:
Produce
CacheLineSize = 64
Sé que llego un poco tarde, pero solo agrego información para futuros visitantes. La documentación de SDL actualmente dice que el número devuelto está en KB, pero en realidad está en bytes.
fuente
En la plataforma de Windows:
de http://blogs.msdn.com/oldnewthing/archive/2009/12/08/9933836.aspx
fuente
ARMv6 y superior tiene
C0
o el registro de tipo de caché. Sin embargo, solo está disponible en modo privilegiado.Por ejemplo, del Manual de referencia técnica Cortex ™ -A8 :
No asuma que el procesador ARM tiene un caché (aparentemente, algunos se pueden configurar sin uno). La forma estándar de determinarlo es a través de
C0
. Desde ARM ARM , página B6-6:fuente
También puede intentar hacerlo mediante programación midiendo algunos tiempos. Obviamente, no siempre será tan preciso como cpuid y similares, pero es más portátil. ATLAS lo hace en su etapa de configuración, es posible que desee verlo:
http://math-atlas.sourceforge.net/
fuente