"缓存中间结果"是什么意思?

use*_*584 31 benchmarking numpy vectorization ipython

我有一组n个向量存储在3 xn矩阵中z.我找到了外用产品np.einsum.当我使用时间计时:

%timeit v=np.einsum('i...,j...->ij...',z,z)
Run Code Online (Sandbox Code Playgroud)

我得到了结果:

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
Run Code Online (Sandbox Code Playgroud)

这里发生了什么,可以避免吗?最好的3是2.9us,但最慢可能更典型.

pv.*_*pv. 30

消息"正在缓存中间结果"只是对%timeit报告的预制消息的盲目猜测.它可能是也可能不是,你不应该认为它是正确的.

特别是,第一次运行最慢的最常见原因之一是阵列仅在第一次运行后才在CPU缓存中.

CPU自动缓存内容; 你不能避免这种情况,你真的不想避免它.但是,优化算法以使CPU缓存可以最佳地工作,这是高性能计算需要考虑的瓶颈之一.