我有两个长(1,000,000多个条目)向量I
和J
就像这样
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);
结果向量R1
和R2
当然具有长度N
。现在我想对这些向量进行一些重载处理,例如compute
Q = exp(-(R1-R2).^2);
如何将此代码并行化以实现高效的多核处理?我认为R1和R2应该以分布式(或者说是相应的分布式)形式投射?
谢谢!
答案 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倍的加速。