我有一套n向量存储在3 x n matrix 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,但最慢的可能更典型。
消息“正在缓存中间结果”只是 %timeit 报告的预设消息中的盲目猜测。它可能是真的,也可能不是,你不应该假设它是正确的。
特别是,第一次运行速度最慢的最常见原因之一是数组位于CPU缓存 https://en.wikipedia.org/wiki/CPU_cache仅在第一次运行后。
CPU 自动缓存数据;你无法避免这一点,而且你也不想真正避免它。然而,优化算法使CPU缓存能够以最佳状态工作是当今高性能计算需要考虑的瓶颈之一。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)