我試圖並行運行在矩陣中的每一行相同的代碼的算法
(然後後續加工的結果。)在多行處理中會發生一些計算(這種再次發生很難預測)。
因此,目前我調用一個執行這些計算並將結果保存在HashMap中的對象,所以當處理行$ n $需要已經爲行$ m $進行的計算時,他們不需要再次完成。
它不會影響處理行的順序的算法結果。
問題
我不能夠使用HashMap的並行代碼,每個工人都有自己的HashMap結束。
我明白這種行爲背後的哲學。然而在我的例子中,順序並不重要,我想繞過標準的行爲。
最小工作示例
classdef MyPar <handle
properties
map;
end
methods
function obj=MyPar()
obj.map=containers.Map('KeyType','double','ValueType','any');
end
function y=compute(obj,n)
if ~obj.map.isKey(n)
obj.map(n)=sin(n);
fprintf('Did not find key ''%d''\n',n)
else
fprintf('Found key ''%d''\n',n)
end
y=obj.map(n);
end
end
methods(Static)
function R=test()
c=MyPar();
Nworkers=3;
A=ones(Nworkers,2);
spmd(Nworkers)
R=c.compute(A(labindex,1))+c.compute(A(labindex,2));
end
end
end
end
運行MyPar.test()給出
>> MyPar.test();
Lab 1:
Did not find key '1'
Found key '1'
Lab 2:
Did not find key '1'
Found key '1'
Lab 3:
Did not find key '1'
Found key '1'
在這個簡單的例子,我會希望有一個代碼,其中兩個三個工人穿上」 t需要自己完成計算(因爲有史以來唯一的計算是compute(1)
)
感謝您的回答。我確信你的建議在技術上是可行的。我無法找到放棄我的運行代碼的動機,因爲我不知道我想要的是不可能的。你是對的,我甚至不知道插座是什麼,所以做一些預處理將是最簡單的解決方案 – Bananach