首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scipy.weave.inline的性能

scipy.weave.inline的性能
EN

Stack Overflow用户
提问于 2011-10-23 03:05:27
回答 1查看 1.8K关注 0票数 2

我是一名Python新手,正在努力学习这种神奇的编程语言。我尝试过使用scipy.weave.inline来加速一些计算。为了学习一点,我试着用scipy.weave.inline实现了一个矩阵乘法。我没有包括任何错误处理-只是为了更好地理解它而尝试它。代码如下:

代码语言:javascript
复制
import scipy.weave
def cmatmul(A,B):
    R = numpy.zeros((A.shape[0],B.shape[1]))
    M = R.shape[0]
    N = R.shape[1]
    K = A.shape[1]

    code = \
    """
    for (int i=0; i<M; i++)
        for (int j=0; j<N; j++)
            for (int k=0; k<K; k++)
                R(i,j) += A(i,k) * B(k,j);
    """
    scipy.weave.inline(code, ['R','A','B','M','N','K'], \
                       type_converters=scipy.weave.converters.blitz, \
                       compiler='gcc')
    return R

当我与numpy.dot进行比较时,我发现weave.inline版本的时间大约是numpy.dot版本的50倍。我知道numpy在可以应用的时候是非常快的。对于大的矩阵,例如大小为1000 x 1000的矩阵,甚至可以看到差异。

我已经检查了numpy.dot和scipy.weave.inline,两者在计算时似乎都使用了100%的内核。与我的笔记本电脑理论上的11.6 GFlops相比,Numpy.dot提供了10.0 GFlops (两倍精度)。在单精度下,我按照预期测量了双倍性能。但scipy.weave.inline远远落后于此。这是scipy.weave.inline性能的1/50倍。

这种差异是意料之中的吗?或者我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2011-10-23 22:13:35

您实现了一个简单的矩阵乘法算法,scipy.weave将其编译成快速的机器码。

但是,也有一些不明显的、更高效的algorithms for matrix multiplication (通常将矩阵分成块并处理这些块),并且可以通过特定于CPU的优化来获得额外的速度。默认情况下,Numpy使用一个优化的BLAS库来执行此操作,如果您已经安装了一个的话。这些库可能会比任何你可以在不做大量研究的情况下自己编写代码的东西更快。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7861930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档