【发布时间】:2016-03-11 19:41:52
【问题描述】:
互联网上随处可见不同语言的基准和相关问题。但是,我仍然无法弄清楚我是否应该在我的程序中切换到 C。
基本上,我的程序中最耗时的部分涉及大量的矩阵求逆和矩阵乘法。我有几个计划:
- 坚持使用 numpy。
- 将 C 与 LAPACK/BLAS 结合使用。
- 重写我的python程序,把最耗时的部分改成C,然后用python调用C。
我知道 numpy 只是包裹在 LAPACK/BLAS 上的东西。那么 2 或 3 会比 1 快很多(500%)吗?
【问题讨论】:
-
cython其实可以看成是另一种语言。这不是我想要的。 -
您必须向我们展示您在做什么以及如何使用 NumPy。对于线性代数运算,NumPy 只是调用优化的 LAPACK/BLAS 例程(假设它们在你的系统上)——你不可能比那些更快。手写 C 代码可能比调用这些例程慢得多。
-
@ajcr,相应编辑
-
你可以看看 sagemath 。它基于python,包含很多东西。就我而言,我将它用于 GF(2^8) 中的大矩阵乘法。
-
分析您当前的代码 - 如果您几乎将所有时间都花在 BLAS/LAPACK 例程中,那么您将看到选项 2 或 3 基本上没有性能优势。一种罕见的情况可能 如果您在许多小矩阵上多次调用 BLAS/LAPACK 例程,那么用 C 重写代码的某些部分是有意义的。在实践中,您可能应该考虑是否可以提高算法的效率,是否与最快的 BLAS/LAPACK 实现相关联,以及是否可以从使用 GPU 中受益。
标签: python c performance numpy blas