2012-01-28 49 views
3

我想使用並行計算工具箱來加速一組不依賴於彼此的函數調用。爲了提高效率,我想使用定時器函數/回調函數在我的函數執行完一個函數後繼續執行更多的函數。我不知道提前哪些將會更快,所以我不能將我的功能劃分成幾個池,並將它們並行設置。使用並行工具箱創建具有有限工作量(ThreadPool)的任務/作業池

換句話說,我想要一些平行執行從一個函數池中拉出來。

我現在設置的唯一方法是使用str2fun這個字符串的單元數組,有沒有更好的方法來做到這一點?

歡迎提問。

回答

5

沒有必要自己來寫這樣的代碼。 Matlab並行工具箱可以創建一個scheduler with multiple jobs。 您可以多次撥打createJob,調度程序會執行此操作。

foos = [@foo1,@foo2,@foo3,@foo4] 
for i=1:numel(foos) 
    obj = createJob(); 
    createTask(obj, foos(i), 1, {'your input'}); 
    submit(obj); 
end 

enter image description here

+0

這工作得很好,感謝 – 2012-01-28 15:57:13

+0

函數處理單元陣列的工作比普通數組更好 - 避免索引之間的混淆到陣列中,並評估功能手柄。事實上,在R2011b中,你不能連接功能手柄。 – Edric 2012-01-30 07:16:12

+0

謝謝,@Edric。調用'eval'而不是應用函數句柄是否有開銷? – 2012-01-30 07:38:46

0

爲什麼不這樣做簡單的東西,如:

matlabpool 3 

parfor t=1:3 
    if t==1 
    a1=f1(); 
    end 
    if t==2 
    a2=f2(); 
    end 
    if t==3 
    a3=f3(); 
    end 
end