我不能在下面的短腳本中找出問題,它應該比較單個CPU計算和有關計算時間的並行化。在MATLAB中並行化的問題
鏈接到完整的圖像:LINK
的代碼是:
n = 700;
ranksSingle = zeros(1,n);
tic
for ind = 1:n
ranksSingle(ind) = rank(magic(ind));
end
toc
matlabpool local 4
tic
ranks = zeros(1,n);
parfor (ind = 1:n)
ranks(ind) = rank(magic(ind));
end
toc
isequal(ranksSingle, ranks)
matlabpool close
我也matlabpool 2
試了一下。從流程窗口中可以清楚地看到,運行並行計算(標記爲紅色)時,所有內核都忙到100%。
當運行單CPU計算(標記爲藍色)時,4核心比以前更加忙碌。我預計只有一個核心會上升。我搜索了互聯網,看看magic()
或rank
函數是否內置並行化,但是您可以從這裏閱讀:http://www.walkingrandomly.com/?p=1894事實並非如此。所以這4個內核並不是很忙,但我仍然想知道爲什麼所有的內核都升級了。其次,我真的不知道並行版本的計算時間。我知道通過將作業分配給單核心可能會帶來一些開銷,但這應該不會太高以至於最終沒有任何好處:(
也許任何人都可以告訴我關於它的一些事情:(我因爲我想加速一些for循環,第二個問題是,如果有任何命令總是將worker大小設置爲我的計算機中的物理內核數量(並且還使用Hyper當你想運行一個並行工作線程,如果這是一個額外的好處?)
非常感謝!
正確。例如,'rank'使用'svd',它是多線程的。 –
好吧,謝謝,所以我會在明天嘗試一些更昂貴的操作:) – tim
@Jonas:'matlabpool open'給我:「使用'local'配置啓動matlabpool ...連接到2個實驗室。從上面的屏幕截圖中可以清楚地看到,我有4個內核,因此這顯然不是預期的結果!?編輯:不知何故,我無法啓動'matlabpool(4)',我得到:您請求最少4名工作人員,但調度程序的ClusterSize屬性目前設置爲允許最多2名工人。要爲比此更多的工作者運行並行作業,請使用配置管理器[...]增加「本地」配置中的ClusterSize屬性設置。 – tim