我有 4 个 GPU 设备(每个 11GB 内存)。现在,我想添加两个大矩阵 A 和 B(每个 6GB),这样一个设备的内存中就不可能有两个矩阵。我想知道在这种情况下如何执行添加?
例如,有没有办法使用多个 GPU 执行加法运算,一个 GPU 用于矩阵 A,一个用于矩阵 B,第三个用于结果矩阵 C?
我有 4 个 GPU 设备(每个 11GB 内存)。现在,我想添加两个大矩阵 A 和 B(每个 6GB),这样一个设备的内存中就不可能有两个矩阵。我想知道在这种情况下如何执行添加?
例如,有没有办法使用多个 GPU 执行加法运算,一个 GPU 用于矩阵 A,一个用于矩阵 B,第三个用于结果矩阵 C?
您最好的选择是对大型数组进行分区,类似于 MATLAB 的distributed
数组所做的事情。distributed
(不幸的是,您不能组合gpuArray
,因此您必须手动执行操作)。基本思想是做一些像这样的事情:
numRows = 4000;
spmd
myNumCols = 4000 / numlabs; % might need to adjust if doesn't divide evenly
myA = rand(numRows, myNumCols, 'gpuArray');
myB = rand(numRows, myNumCols, 'gpuArray');
myC = myA + myB;
end
在此之后,每个工人都有一部分整体C
存储在myC
.