并行Matlab - 创建分布式数组

时间:2014-09-02 07:49:57

标签: parallel-processing distributed-computing

我有两个长(1,000,000多个条目)向量IJ就像这样

N = 1000000;
M = 1000;
I = ceil(M*rand(1,N));
J = ceil(M*rand(1,N));

它们包含一堆索引,用于从小向量中选择元素

R = randn(1,M)

喜欢这样

R1 = R(I);
R2 = R(J);

结果向量R1R2当然具有长度N。现在我想对这些向量进行一些重载处理,例如compute

Q = exp(-(R1-R2).^2);

如何将此代码并行化以实现高效的多核处理?我认为R1和R2应该以分布式(或者说是相应的分布式)形式投射?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您的NVIDIA GPU与CUDA兼容,并且安装了Parallel Computing Toolbox,您可以试试这个:

N = 1000000;
M = 1000;
I = ceil(M*gpuArray.rand(1,N));
J = ceil(M*gpuArray.rand(1,N));
R = gpuArray.randn(1,M);
R1 = R(I);
R2 = R(J);
Q = exp(-(R1-R2).^2);

代码将在引擎盖上并行化,并在GPU上在数千个线程上执行。在我的机器上(CPU Xeon E5-2665,GPU Tesla K20)我在CPU(串行)和GPU之间获得了超过10倍的加速。