使用多GPU的并行矩阵乘法

时间:2016-05-05 04:43:08

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

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

1 个答案:

答案 0 :(得分: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是垂直连接(将一个矩阵放在彼此的顶部,例如,与2x3矩阵连接的4x3矩阵将产生6x3矩阵),:表示范围和{{ 1}}是索引。

[]的两个参数都可以在不同的GPU上计算,并且只需将输出指向输出缓冲区的不同子区域(假设我们有C排序的数组)就可以实现连接。 vcat的初始拆分可以通过使用不同的子区域来实现(因为它沿着一条线分开)。