小编ajz*_*z34的帖子

如何避免单线程NumPy转置的巨大开销?

由于 NumPy 的转置函数,我目前遇到了巨大的开销。我发现这个函数实际上总是在单线程中运行,无论转置矩阵/数组有多大。我可能需要避免这种巨大的时间成本。

\n

据我了解,np.dot如果 numpy 数组足够大,其他函数(例如向量增量)将并行运行。一些按元素操作似乎在 numexpr 包中可以更好地并行化,但 numexpr 可能无法处理转置。

\n

我想了解解决问题的更好方法。为了详细说明这个问题,

\n
    \n
  • 有时,NumPy 运行转置速度超快(如B = A.T),因为转置后的张量不用于计算或转储,并且在此阶段不需要真正转置数据。调用时B[:] = A.T,确实会转置数据。
  • \n
  • 我认为并行转置函数应该是一个解决方案。问题是如何实施。
  • \n
  • 希望该解决方案不需要 NumPy 以外的软件包。ctype 绑定是可以接受的。希望代码不会太难使用,也不会太复杂。
  • \n
  • 张量转置是一个优点。虽然转置矩阵的技术也可以用于特定的张量转置问题,但我认为为张量转置编写通用 API 可能很困难。我实际上还需要处理张量转置,但是处理张量可能会使这个 stackoverflow 问题复杂化。
  • \n
  • 未来是否有可能实现并行转置,或者是否有计划?那么就不需要自己实现转置了;)
  • \n
\n

在此先感谢您的任何建议!

\n
\n

当前的解决方法

\n

在我的 Linux 个人计算机上处​​理模型转置问题(大小约为A763MB),可用 4 核(总共 400% CPU)。

\n
A = np.random.random((9999, 10001))\nB = np.random.random((10001, 9999))\nD = np.random.random((9999, 10001))\n
Run Code Online (Sandbox Code Playgroud)\n

当前的解决方法似乎不够有效。一般来说,如果在 4 核 CPU 上完全并行化,它应该会看到大约 3 倍~4 倍的加速,但我编写的代码只获得了大约 1.5 倍。 …

python parallel-processing multithreading transpose numpy

5
推荐指数
1
解决办法
965
查看次数