2015-11-11 34 views
1

是否可以強制MATLAB中的parfor迭代數?例如,如果循環爲i = 1:1000,然後是有可能把它分配以下面的方式:在MATLAB中強制分配parfor

I = 1:250 --->芯1

I = 251: 500 --->芯2

I = 501:750 --->芯3

I = 751:1000 --->芯4

+0

我不這麼認爲,但更重要的是:你爲什麼要這麼做? MATLAB非常擅長分配計算量。我不會感到驚訝的是,如果在迭代計算工作量不同的情況下它使用了不對稱分佈(儘管我從未檢查過文檔以確定這是否確實如此) –

+2

您無法指定特定核心,但如果你想核心處理4個問題的塊,你可以做parfor j = 1:4;對於i =(1 + 250 *(j-1)):(250 * j); .. 。應該工作,但正如安德拉斯所說,我想不出爲什麼這是一個好主意。 – David

+0

這看起來很樸素,但至關重要:是否可以保證在j = 1:4的情況下,所有四種不同的j計算都會轉換爲4個不同的核心? – user5461722

回答

1

你不能用做此parfor,但你可以做一些基本相同的事情與spmdparfeval

parfeval

for fidx = 1:4 
    range = (((fidx - 1)*250)+1):(fidx*250) 
    f(fidx) = parfeval(@bodyFcn, 1, range); 
end 

spmd

spmd 
    for i = drange(1, 1000) 
     ... 
    end 
end 

的文檔有關drangehttp://www.mathworks.com/help/distcomp/using-a-for-loop-over-a-distributed-range-for-drange.html

+0

試過了。但不能強制將4個代碼塊分配給四個單獨的內核。 – user5461722

+0

我不明白 - 上面的代碼將工作分成4份,以便不同的工作人員在身體上進行操作。 (好吧,我想'parfeval'版本並不能保證*不同的工作人員在不同的評估工作,但是'spmd'版本)。當你嘗試時會發生什麼? – Edric