Matlab中的并行处理
我创建了两个函数:生成数据和处理数据。数据处理非常耗时,所以我想在并行线程中处理它们。但是我和他们有一些问题。首先,这是我的程序:Matlab中的并行处理,matlab,parallel-processing,distributed,Matlab,Parallel Processing,Distributed,我创建了两个函数:生成数据和处理数据。数据处理非常耗时,所以我想在并行线程中处理它们。但是我和他们有一些问题。首先,这是我的程序: result = zeros(1, 10); matlabpool open local 2 spmd for a = 1:5 data = generate_data(); display(sprintf('Received data on CPU%d: %d', labindex, data)); res
result = zeros(1, 10);
matlabpool open local 2
spmd
for a = 1:5
data = generate_data();
display(sprintf('Received data on CPU%d: %d', labindex, data));
result(end + 1) = process_data(data);
end
display(sprintf('All done on CPU%d', labindex));
end
matlabpool close
以及它返回的内容的日志:
Starting matlabpool using the 'local' profile ... connected to 2 workers.
Lab 1:
Received data on CPU1: 100
Lab 2:
Received data on CPU2: 100
Lab 1:
Received data on CPU1: 101
Received data on CPU1: 102
Received data on CPU1: 103
Received data on CPU1: 104
All done on CPU1
Lab 2:
Received data on CPU2: 101
Received data on CPU2: 102
Received data on CPU2: 103
Received data on CPU2: 104
All done on CPU2
Sending a stop signal to all the workers ... stopped.
有一个问题,我有:
Starting matlabpool using the 'local' profile ... connected to 2 workers.
Received data on CPU1: 100
Received data on CPU2: 101
Received data on CPU1: 102
Received data on CPU1: 103
Received data on CPU1: 104
Received data on CPU1: 105
Received data on CPU2: 106
Received data on CPU1: 107
Received data on CPU1: 108
Received data on CPU2: 109
All done on CPU1
All done on CPU2
Sending a stop signal to all the workers ... stopped.
为什么不使用更简单的
parfor
?目前,您正在每个worker上运行循环,我假设您希望并行运行循环的迭代
nIter = 10;
result = zeros(1, nIter);
matlabpool open local 2
parfor a = 1:nIter
data = generate_data();
fprintf('%s: processing set %i/%i\n',datestr(now),a,nIter)
result(a) = process_data(data);
end
end
matlabpool close
spmd。。端结构意味着在多个线程上并行运行一个块。在他的代码中,for循环不是运行了两次吗?Parfor只是打破了for循环,对吗?