Python 带BLAS/ATLAS的预建numpy?

Python 带BLAS/ATLAS的预建numpy?,python,numpy,scipy,Python,Numpy,Scipy,我正在实现一个实时LMS算法,numpy.dot比我的采样时间花费更多的时间,所以我需要numpy更快我的矩阵是1D和100长 我读过关于用ATLAS之类的东西建造numpy的书,但从来没有做过这样的事,我花了一整天的时间试图去做,但没有成功 有人能解释为什么没有包含ATLAS的构建吗?有人能给我一个吗?有没有其他方法可以加快dot产品的速度 我试过numba和scipy.linalg.gemm_dot,但它们似乎都没有加快速度 我的系统是带英特尔处理器的Windows8.1如果您下载官方二进制

我正在实现一个实时LMS算法,numpy.dot比我的采样时间花费更多的时间,所以我需要numpy更快我的矩阵是1D和100长

我读过关于用ATLAS之类的东西建造numpy的书,但从来没有做过这样的事,我花了一整天的时间试图去做,但没有成功

有人能解释为什么没有包含ATLAS的构建吗?有人能给我一个吗?有没有其他方法可以加快dot产品的速度

我试过numba和scipy.linalg.gemm_dot,但它们似乎都没有加快速度


我的系统是带英特尔处理器的Windows8.1

如果您下载官方二进制文件,它们应该与ATLAS链接。如果要确保,请检查np.show\u config的输出。问题是ATLAS自动调整的线性代数系统检查许多不同的组合和算法,并在编译时保持最佳状态。因此,当您运行预编译的ATLAS时,您运行的是针对不同于您的计算机的优化的ATLAS

因此,您可以选择以下方法来改进dot:

自己编辑地图册。在Windows上,这可能有点挑战性,但它是可行的。注意:必须使用与编译Python相同的编译器。也就是说,如果您决定使用MinGW,您需要使用MinGW编译Python,或者自己构建它。 试试克里斯托弗·高尔克的裸体。它与MKL相关联,MKL比ATLAS快得多,并在运行时进行所有优化。 尝试Continuum analytics的Conda,加速也与MKL相连。它需要钱,除非你是个学者。在Linux中,Conda比system python慢,因为出于兼容性目的,他们必须使用旧的编译器;我不知道Windows上是否是这样。 使用Linux。您的Python生活将更加轻松,设置系统来编译东西非常简单。此外,设置Cython也很简单,然后您可以编译整个算法,并可能进一步加快速度。 关于Cython的说明也适用于Windows,只是要让它工作起来更加困难。几年前我使用Windows时尝试过,几天后失败了;我不知道情况是否有所改善

备选方案:

你在做两个向量的点积。那么,np.dot可能不是最有效的方法。我想用简单的Python vec1*vec2.sum解释一下,它对Numba非常有用,它可以优化这个表达式,或者使用numexpr:

ne.evaluate(`sum(vec1 * vec2)`)

Numexpr还将自动并行化表达式。

如果您下载官方二进制文件,它们应该与ATLAS链接。如果要确保,请检查np.show\u config的输出。问题是ATLAS自动调整的线性代数系统检查许多不同的组合和算法,并在编译时保持最佳状态。因此,当您运行预编译的ATLAS时,您运行的是针对不同于您的计算机的优化的ATLAS

因此,您可以选择以下方法来改进dot:

自己编辑地图册。在Windows上,这可能有点挑战性,但它是可行的。注意:必须使用与编译Python相同的编译器。也就是说,如果您决定使用MinGW,您需要使用MinGW编译Python,或者自己构建它。 试试克里斯托弗·高尔克的裸体。它与MKL相关联,MKL比ATLAS快得多,并在运行时进行所有优化。 尝试Continuum analytics的Conda,加速也与MKL相连。它需要钱,除非你是个学者。在Linux中,Conda比system python慢,因为出于兼容性目的,他们必须使用旧的编译器;我不知道Windows上是否是这样。 使用Linux。您的Python生活将更加轻松,设置系统来编译东西非常简单。此外,设置Cython也很简单,然后您可以编译整个算法,并可能进一步加快速度。 关于Cython的说明也适用于Windows,只是要让它工作起来更加困难。几年前我使用Windows时尝试过,几天后失败了;我不知道情况是否有所改善

备选方案:

你在做两个向量的点积。那么,np.dot可能不是最有效的方法。我想用简单的Python vec1*vec2.sum解释一下,它对Numba非常有用,它可以优化这个表达式,或者使用numexpr:

ne.evaluate(`sum(vec1 * vec2)`)

如果你想要二进制安装,你可以考虑。https://store.continuum.io/cshop/accelerate/ 英特尔的mkl。此外,您还可以按照ATLAS numpy安装说明进行安装。请查看Cristoph Gohlke的预构建软件包:您的采样时间是多少?@Ophion谢谢,我会查看的!关于说明:这就是我昨天一整天都在尝试的东西,前几步都没能完成,我完全是个书呆子,在壳里写东西:@WarrenWeckesser这就是我正在使用的东西,与matlab相比,numpy.dot慢得要命,我的采样时间约为46毫秒。现在

我已经很好地调整了它,所以在我的笔记本电脑上有最高的性能设置,我可以在那个时间内运行算法,但是我仍然对性能不满意。如果你想要二进制安装,你可以考虑。https://store.continuum.io/cshop/accelerate/ 英特尔的mkl。此外,您还可以按照ATLAS numpy安装说明进行安装。请查看Cristoph Gohlke的预构建软件包:您的采样时间是多少?@Ophion谢谢,我会查看的!关于说明:这就是我昨天一整天都在尝试的东西,前几步都没能完成,我完全是个书呆子,在壳里写东西:@WarrenWeckesser这就是我正在使用的东西,与matlab相比,numpy.dot慢得要命,我的采样时间约为46毫秒。现在我已经对它进行了微调,在笔记本电脑上设置了最高的性能,我可以在这段时间内运行算法,但我仍然对它的性能不满意。谢谢你的回答,我自己编译任何东西都失败了,所以现在这是不可能的。关于Gholke的numpy:我有一个,但我没有MKL,这不是一个问题吗?现在我已经下载了一个MKL,但没有任何变化,不确定numpy是否识别它已重新安装。学习Linux需要一些时间,而我没有atm。奇怪的是,当运行一个简单的测试时,.sum提供了更好的性能,但是在我的代码中实现了它之后,我读到了与np.dot相同的性能。不知道那里发生了什么。哦,numexpr在我的代码中完全无法接近。霍尔克的numpy已经捆绑了MKL。您可以使用numpy.show\u configure进行检查。对于numexpr,您的阵列有点小,请尝试使用ne.set\u num\u threads2。如果你发布你的代码,我们可以看到限制是多少。你分析过它吗?我还没有分析,只是用time.clock测量了一些运行时。下面是我的代码:只需使用python-mcprofile-ooutput.profile program.py运行它,然后使用Runsnake打开它。这将告诉你你的问题到底在哪里,并给你关于如何优化的更好的提示。谢谢你的回答,我自己很难编译任何东西,所以这是不可能的。关于Gholke的numpy:我有一个,但我没有MKL,这不是一个问题吗?现在我已经下载了一个MKL,但没有任何变化,不确定numpy是否识别它已重新安装。学习Linux需要一些时间,而我没有atm。奇怪的是,当运行一个简单的测试时,.sum提供了更好的性能,但是在我的代码中实现了它之后,我读到了与np.dot相同的性能。不知道那里发生了什么。哦,numexpr在我的代码中完全无法接近。霍尔克的numpy已经捆绑了MKL。您可以使用numpy.show\u configure进行检查。对于numexpr,您的阵列有点小,请尝试使用ne.set\u num\u threads2。如果你发布你的代码,我们可以看到限制是多少。你分析过它吗?我还没有分析,只是用time.clock测量了一些运行时。下面是我的代码:只需使用python-mcprofile-ooutput.profile program.py运行它,然后使用Runsnake打开它。这将向您展示问题的真正所在,并为您提供如何优化的更好提示。