我有一组 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,但最慢可能更典型。
答案 0 :(得分:28)
消息"中间结果正在缓存"只是在%timeit报告的固定消息中盲目猜测。它可能是也可能不是,你不应该认为它是正确的。
特别是,第一次运行最慢的最常见原因之一是阵列仅在第一次运行后才在CPU cache。
CPU自动缓存内容;你无法避免这种情况,你并不想避免它。但是,优化算法以便CPU缓存可以最佳地工作,这是高性能计算需要考虑的瓶颈之一。