Cosa significa “un risultato intermedio viene memorizzato nella cache”?

Ho un set di n vettori memorizzati in 3 xn matrix z . Trovo il prodotto esterno che utilizza np.einsum . Quando l’ho cronometrato usando:

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

Ho ottenuto il risultato:

 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 

Cosa sta succedendo qui e può essere evitato? Il miglior 3 è 2,9us, ma il più lento forse più tipico.

Il messaggio “il risultato intermedio viene memorizzato nella cache” è solo un’ipotesi cieca nel messaggio fisso riportato da% timeit. Potrebbe essere o non essere vero, e non dovresti dare per scontato che sia corretto.

In particolare, uno dei motivi più comuni per cui la prima esecuzione è più lenta è che l’array si trova nella cache della CPU solo dopo la prima esecuzione.

Le CPU nascondono automaticamente le cose; non puoi evitarlo, e non vuoi davvero evitarlo. Tuttavia, l’ottimizzazione degli algoritmi in modo che le cache della CPU possano funzionare in modo ottimale è al giorno d’oggi uno dei colli di bottiglia che l’elaborazione ad alte prestazioni deve tenere in considerazione.