1

要素を持つ配列があり、1xN4 つ以上のワーカー (コア) を使用して、この配列で並行して作業したいと考えています。各ワーカーは、その配列からいくつかの要素を取得して操作します。たとえば、worker13 つの要素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 read array(1:serv1)、 worker 2 read 、 array(serv1+1:serv1+serv2)worker3 read などを必要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 に答える