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

时间:2015-04-20 22:56:55

标签: numpy ipython benchmarking vectorization

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

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

我得到了结果:

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

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

1 个答案:

答案 0 :(得分:28)

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

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

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