1 votos

¿Qué tamaño tiene el caché L1 de mi MacBook Air 2012? ¿Son más grandes ahora?

Discusión en los comentarios debajo de esta respuesta a la mejora de la velocidad de esta colección basada en la difracción de la calculadora sugieren que la razón por la secuencia de comandos en la respuesta va muy lento para mí, pero rápido para los demás (incluso en las versiones anteriores de NumPy) podría ser que mis finales de 2012 MacBook Air con procesador caché L1 podría ser más pequeños que otros. También podría ser que me estoy quedando peligrosamente poco espacio en disco (yo estaba viendo a 40 MB/s, lee y escribe mientras se ejecuta).

Tengo curiosidad, aunque, ¿cuál es el tamaño del procesador caché L1 para mi a finales de 2012, el MacBook Air, y cómo se compara a los nuevos MacBooks?

MacBook Air:   13-inch, Mid 2012
Processor:     1.8 GHz Intel Core i5
Memory:        4 GB 1600 MHz DDR3
Hard Drive:    251 GB Flash Storage

Yo no soy un desarrollador, pero hice una pequeña prueba. Ejecuta la secuencia de comandos siguiente veo que la multiplicación de dos arrays de NumPy es más rápido (unos pocos nanosegundos por flotador de multiplicar) cuando el tamaño de la matriz es de alrededor de 10^4. Cada uno es de alrededor de 8 bytes, así que yo soy la estimación de que mi caché L1 tamaño es de alrededor de 10^5 Bytes.

Es que cerrar?

nota: debo estimar el tiempo de uso de ambos time.time() y time.process_time(). La ex (azul, línea continua, los valores más bajos) es "el tiempo de la gente", ¿cuánto tiempo tengo que esperar para que algo termine.

enter image description here

import numpy as np
import matplotlib.pyplot as plt
import time

Ns = np.logspace(1, 8, 15).astype(int)

t1, t2 = [], []
for N in Ns:
    x = np.random.random(N)
    t1_start = time.time()
    t2_start = time.process_time()
    n = int(1E+06/N)
    for i in range(n):
        y = x*x
    t1.append((time.time() - t1_start)/(N*n))
    t2.append((time.process_time() - t2_start)/(N*n))

if True:
    plt.figure()
    plt.plot(Ns, t1)
    plt.plot(Ns, t2, '--')
    plt.xscale('log')
    plt.yscale('log')
    plt.title('estimated time (sec) per float multiply vs array size', fontsize=14)
    plt.show()

1voto

Jose Chavez Puntos 645

Su actual MacBook Air tiene una caché L1 de 128 kB. Así que su conjetura de 10^5 bytes no está lejos!

El último MacBook Air tiene la misma cantidad de caché L1, así que en ese sentido es el mismo. Sin embargo, otras partes de la CPU son muy diferentes.

Tenga en cuenta que su puede ver que algunas de estas CPUs están listadas como "Smart Cache", que básicamente significa que algunos cachés son compartidos entre múltiples núcleos. En su caso, la caché L1 nunca es compartida - por lo que siempre es una caché privada de cada núcleo. Esto significa que si el código es de un solo subproceso, entonces la cantidad real de L1 caché utilizado por las que el programa en realidad es de 64 kB y no de 128 kB.

En adición a eso, la caché L1 no es en realidad una única memoria caché como tal. Está dividida en porciones separadas para instrucciones y datos. Esto significa que con el de 64 kB, va a tener en caché de 32 kB de datos y 32 kB de instrucciones (código de programa).

Usted podría preguntarse por qué el nuevo MacBook Air tiene la misma cantidad de caché L1 y creo que no se ha mantenido a la par con el desarrollo de la industria, pero que en realidad no es así. El tamaño de la L1 ha sido bastante constante durante años y años. Hace 20 años que podría haber visto de 32 kB L1 caché por núcleo, el último de muchos años de 64 kB de caché L1 ha sido bastante estándar.

En comparación, la más reciente de Mac Pro (pc de escritorio) con el más caro de la CPU de la opción (la Intel ® Xeon ® W-3265M 24 en el núcleo de la CPU) también tiene una L1 64 kB de caché por core.

Acaba de aumentar el tamaño de la caché L1, realmente no hará ningún bien en términos de aumento de rendimiento general. Caché L1 es el más "caro" tipo de caché en términos de la cantidad de espacio físico en el morir, y en términos de consumo de energía. Además, debido a que es incluso más rápido que TLB búsquedas, el beneficio adicional de un tamaño mayor rapidez disminuye. En esencia, usted obtendrá más beneficios de tener una mayor L2 o L3 de caché de aumentar el tamaño de la caché L1 - y es mucho "más barato" para aumentar los.

En todo esto parece indicar que los diferentes tamaños de caché L1 no es el factor decisivo que determina que su ordenador es lento y otros son rápidos.

Imagino que tal vez la gran diferencia radica en el hecho de que su antiguo procesador no soporte el mismo "compuadora" conjuntos de instrucciones como un nuevo procesador. Este pequeño ejemplo de prueba no muestra realmente, pero a partir de sus vínculos parece que estás realmente haciendo algunos cálculos con vectores. Especializados en las instrucciones de la CPU existe que realmente beneficien a los tipos de cálculos - y sé que numpy puede tomar ventaja de al menos algunos de ellos. Su actual de la CPU sólo admite los mayores conjuntos de instrucciones AVX, mientras que un nuevo MacBook Air admite AVX2 además SSE4.

Usted podría, por comparación amor pruebe a deshabilitar AVX2/SSE4 apoyo en numpy en el rápido de la máquina y vuelva a ejecutar el cálculo para ver si cuentas para la mayoría de la diferencia de tiempo.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by: