首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何尽可能快地进行矩阵计算

如何尽可能快地进行矩阵计算
EN

Stack Overflow用户
提问于 2019-10-29 22:15:57
回答 2查看 919关注 0票数 2

纯粹出于我对代码和计算机的知识和理解,我试图创建一个具有多个矩阵函数的数组/矩阵类,然后我将在我需要一个矩阵或数组类的任何项目中使用它。最重要的是,我想使用这个矩阵/数组类制作一个神经网络库,因此要求它尽可能快。

我所要求的最快的函数是两个矩阵的矩阵乘积计算,但是,对于较大的矩阵,我几乎没有成功地使这一计算更快。

我目前计算点积的方法是:

注意,这段代码是python的,但是,如果python不是最佳语言,我可以使用任何其他语言。

代码语言:javascript
运行
复制
a = [[1, 2, 3], [4, 5, 6]]
b = [[1], [2], [3]]

def dot(a, b):
    c = [[0 for j in range(len(b[i]))] for i in range(len(a))]

    for i in range(len(c)):
        for j in range(len(c[i])):
            t = 0
            for k in range(len(b)):
                t += a[i][k] * b[k][j]
            c[i][j] = t
    return c

print(dot(a, b))
# [[14], [32]]

我已经研究过Intel MKL (我有一个英特尔核心i7)和其他BLAS实现,比如OpenBLAS,但是我无法获得任何有效的结果,而且谷歌搜索也无法使它们工作,所以我的问题是,计算两个矩阵的点积的最快方法是什么?(目前CPU和内存的使用对我来说并不重要,但是,更有效地使用CPU和内存会更好)

PS:

我试图使用不使用外部库(例如,python中的numpy)来完成所有这些工作。

*更新*

我用的是mac

更新2*

谢谢大家的帮助,然而,我不知道如何实现这些计算点积的方法,因为我的数学技能还不够先进,不足以理解其中的任何一个(我还没有开始我的GCSE),尽管我会记住这些想法,并将进一步尝试这些想法。

再次感谢大家的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-29 23:58:04

如果可能的话,您可以使用库达来使用GPU进行非常快速的计算。

票数 0
EN

Stack Overflow用户

发布于 2019-10-30 08:02:49

  1. 你可以使用GPU 正如AbdelAziz AbdelLatef在他的回答中所暗示的那样。但是,这限制了库的使用范围,仅限于使用GPU的计算机。
  2. 大矩阵的点积并行化
  3. 使用SIMD指令
  4. 使用最先进的算法 对大数据集的一些操作可以用更先进的技术来完成,这些技术对于小矩阵来说太慢了.通常涉及FFTNTT ..。矩阵乘法是一组点乘积,点积是卷积形式,所以FFT方法应该是适用的,但对于矩阵/向量却从来没有这样做过。 对于Strassen算法这样的矩阵,也有一些特殊的算法。 对于幂,你可以通过平方来使用幂,对于sqr,我认为你可以简化更多的乘法。

Python远远不是最优的,因为它的速度慢,我会在C++中做这样的事情,甚至如果需要极快的速度(就像SIMD指令所使用的那样),我甚至会与asm结合。您仍然可以使用C++在python中创建的库(链接为DLL、obj、.)

然而,如果您需要快速神经网络,然后使用专用HW。也有神经网络处理集成电路。

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

https://stackoverflow.com/questions/58616134

复制
相关文章

相似问题

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