0

我在我的系统中的不同 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 上实现它。但是,欢迎任何有助于我提出解决方案的算法。

4

1 回答 1

1

一般来说,如果你有矩阵X(大小为ax b,行在前)和 Y (大小为bx 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 回答