【问题标题】:Parallel Matrix Multiplication using multi GPU使用多 GPU 的并行矩阵乘法
【发布时间】:2016-05-05 04:43:07
【问题描述】:

我在我的系统中的不同 pci 插槽中安装了两个 GPU(2x Nvidia Quadro 410)。为了解决这两个 GPU 上的 Martix 乘法,我如何拆分输入矩阵,以便每个 GPU 处理/计算输出矩阵的一部分,然后将其返回。 例如。对于两个矩阵 A, B 每个顺序 10x10 ,然后计算输出矩阵 C= A x B ,这样,在 100 个元素(10 x 10)中,应在第一个 GPU 上计算 50 个元素,另一半即 50 到b 在第二个 GPU 中计算。 我正在尝试在 OpenCL 上实现它。但是,欢迎任何有助于我提出解决方案的算法。

【问题讨论】:

    标签: matrix opencl matrix-multiplication hpc multi-gpu


    【解决方案1】:

    一般来说,如果您有矩阵 X(大小为 axb,行在前)和 Y(大小为 bxc),

    X * Y = vcat(X[0:a/2,0:b] * Y, X[a/2:a,0:b] * Y)
    

    在这个伪代码中,vcat 是垂直串联(将一个矩阵放在彼此的顶部,例如,一个 4x3 矩阵与 2x3 矩阵连接将产生一个 6x3 矩阵),: 表示范围,[] 是索引。

    vcat 的两个参数都可以在不同的 GPU 上计算,并且可以通过将输出指向输出缓冲区的不同子区域来实现连接(假设我们有 C 有序数组)。 X的初始拆分同样可以通过使用不同的子区域来实现(因为它是沿行拆分的)。

    【讨论】:

    • 谢谢。我将开始对此进行实施,并让您了解进展情况。您还认为这是最有效的方法吗?因为它没有将所有元素除以一半..
    • 我不确定我理解你的意思。这种划分是纯虚拟的,实际上您只需将矩阵乘法例程指向不同 GPU 的数组的不同部分。
    猜你喜欢
    • 2017-11-06
    • 2013-01-11
    • 2018-02-12
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    相关资源
    最近更新 更多