¿Qué significa “un resultado intermedio está siendo almacenado en caché”?

Tengo un conjunto de n vectores almacenados en la matriz de 3 xn z . Encuentro el producto externo usando np.einsum . Cuando lo cronometré usando:

 %timeit v=np.einsum('i...,j...->ij...',z,z) 

Obtuve el resultado:

 The slowest run took 7.23 times longer than the fastest. This could mean that an intermediate result is being cached 100000 loops, best of 3: 2.9 µs per loop 

¿Qué está pasando aquí y puede evitarse? El mejor 3 es 2.9us, pero el más lento quizás sea más típico.

El mensaje “el resultado intermedio se almacena en caché” es solo una suposición ciega en el mensaje enlatado informado por% timeit. Puede o no ser cierto, y no debes asumir que es correcto.

En particular, una de las razones más comunes para que la primera ejecución sea más lenta es que la matriz está en la memoria caché de la CPU solo después de la primera ejecución.

Las CPU guardan cosas en caché automáticamente; no puedes evitar esto, y realmente no quieres evitarlo. Sin embargo, optimizar los algoritmos para que las cachés de CPU puedan funcionar de manera óptima es hoy en día uno de los cuellos de botella que la computación de alto rendimiento debe tener en cuenta.