【问题标题】:What does "an intermediate result is being cached" mean?“正在缓存中间结果”是什么意思?
【发布时间】:2015-06-27 21:16:51
【问题描述】:

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

【问题讨论】:

  • 出于测试目的,尝试增加n 的大小,这将减少存储在CPU 缓存中的z 的比例,并且消息会在某个时候消失
  • 报告说有 100000 个循环。缓存可以从第一个循环到其余循环吗?如果是这样,那么我们只需要第一个循环的时间。

标签: numpy ipython benchmarking vectorization


【解决方案1】:

“正在缓存中间结果”的消息只是%timeit报告的罐头消息中的盲目猜测。它可能是真的,也可能不是,你不应该假设它是正确的。

特别是,第一次运行最慢的最常见原因之一是数组在第一次运行后才在CPU cache 中。

CPU 自动缓存事物;你无法避免这种情况,而且你也不想避免这种情况。然而,优化算法以使 CPU 缓存能够优化工作是当今高性能计算需要考虑的瓶颈之一。

【讨论】:

    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2015-01-17
    • 1970-01-01
    • 2012-09-18
    • 2023-03-25
    相关资源
    最近更新 更多