我在我的系统中的不同 pci 插槽中安装了两个 GPU(2x Nvidia Quadro 410)。为了解决这两个 GPU 上的 Martix 乘法,我如何拆分输入矩阵,以便每个 GPU 处理/计算输出矩阵的一部分,然后将其返回。例如。对于两个矩阵 A, B 每个顺序 10x10 ,然后计算输出矩阵 C= A x B ,这样,在 100 个元素(10 x 10)中,50 个元素应该在第一个 GPU 和另一半上计算,即 50 到b 在第二个 GPU 中计算。我正在尝试在 OpenCL 上实现它。但是,欢迎任何有助于我提出解决方案的算法。
问问题
391 次
1 回答
1
一般来说,如果你有矩阵X
(大小为a
x b
,行在前)和 Y (大小为b
x c
),
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
可以类似地通过使用不同的子区域来实现初始拆分(因为它是沿行拆分的)。
于 2016-05-05T05:07:33.867 回答