我在不同的pci插槽中安装了两个GPU(2x Nvidia Quadro 410)。为了解决这两个GPU上的Martix乘法,我如何分割输入矩阵,使每个GPU处理/计算输出矩阵的一部分,然后将其返回。 例如。对于两个矩阵A,B各自的阶数为10x10,则计算输出矩阵C = A×B,这样,在100个元素(10×10)中,50个元素应该在第一个GPU和另一半上计算,即50到b在第二GPU中计算。 我试图在OpenCL上实现它。但是,欢迎任何算法,这将有助于我提出解决方案。
答案 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
的初始拆分可以通过使用不同的子区域来实现(因为它沿着一条线分开)。