我有一个带有1xN
元素的数组,我想在这个数组上并行使用4个或更多个worker(核心)。每个工作者从该数组中获取一些元素并对其进行操作。例如,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)
等等,然后操作它们上的函数
答案 0 :(得分: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