"an intermediate result is being cached" 是什么意思?

What does "an intermediate result is being cached" mean?

我有一组 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,但最慢的可能更典型。

消息"intermediate result is being cached"只是%timeit 报告的固定消息中的盲目猜测。它可能是真的,也可能不是真的,你不应该认为它是正确的。

特别是,第一个 运行 最慢的最常见原因之一是数组仅在第一个 运行.[=11= 之后才位于 CPU cache 中]

CPUs 自动缓存东西;你无法避免这一点,而且你真的不想避免它。然而,优化算法使CPU缓存能够最佳工作是当今高性能计算需要考虑的瓶颈之一。