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.
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()