1

我有一个包含1xN元素的数组,我想使用 4 个或更多工作人员(核心)在这个数组上并行工作。每个工作人员从该数组中获取一些元素并对其进行操作。例如,worker1将采用 3 个元素,worker2将采用接下来的 2 个,依此类推。这些工人将并行工作。

这些工人如何才能同步良好地工作?这似乎需要多个 CPU 之间的共享内存。

我需要每个工作人员同时从该数组中读取不同大小的数据:例如:


arr=1:100; % the common array 
serv1 = 3; % random numbers 
serv2 = 2; % random numbers 
serv3 = 1; % random numbers 
serv4 = 1; % random numbers 
我需要同时 worker1 读取array(1:serv1),worker 2 读取array(serv1+1:serv1+serv2),worker3 读取array(serv1+serv2+1:serv1+serv2+serv3)等等,然后对它们进行操作

4

1 回答 1

0

如果我的问题正确,我会提出这样的建议

n = numel(array); % this would be the common array
nw = 5; % number of workers, assuming you have at least that many workers up and running
start_i = floor(linspace(1,n,nw+1)); % each worker will start working from start_i 
start_i( end ) = [];
end_i = [start_i(2:end)+1 n]; % each worker will work till end_i
parfor ( ii = 1:nw, nw )
     processArray( array( start_i(ii):end_i(ii) ) ); % do your magic here
end
于 2012-12-17T21:03:45.353 回答