?? 以多任務分布matlab的計算.txt
字號:
以多任務分布Matlab的計算(3)-劃分一個參數序列到多任務中
Example: Dividing a Parameter Sweep into Tasks
9/21/2008 11:40:32 AM
文章介紹如何劃分參數型的多任務序列。
Matlab并行計算工具箱? ,使我們能夠在集群電腦上執行我們的MATLAB ?程序。在本演示中,我們看看如何劃分一個擁有大量操作的MATLAB集合成較小的工作單位,我們稱這些工作單位為任務,其中每個任務可以在在我們的群集計算機中執行。我們將使用pctdemo_helper_split_scalar和pctdemo_helper_split_vector函數來實現這些功能。
內容目錄
1. 獲得配置
2. 開始順序代碼
3. 分析順序問題
4. 示例:劃分一個仿真到多任務中
5. 示例:劃分一個參數序列到多任務中
6. 更多的參數序列
7. 劃分Matlab操作到多任務中:最佳實踐
這一部分,將講解第5-6節。1-3節見,上一篇文章以多任務分布Matlab的計算(1)-順序代碼,第4節見以多任務分布Matlab的計算(2)-并行循環拆分 。
5. 示例:劃分一個參數序列到多任務中
這節,我們將使用sin函數,做簡單的例子。首先,讓x作為一個長度10的矩陣:
x = 0.1:0.1:1;
現在,我們希望把sin(x)劃分到4個計算機的集群中。我們希望4個機器分別同時執行sin(x(1:3)), sin(x(4:6)), sin(x(7:8))和sin(x(9:10))。因為,這種劃分參數序列到多個任務的情況非常常見,所以,我們也做了一個函數:
numTasks = 4;
[split, numTasks] = pctdemo_helper_split_vector(x, numTasks);
celldisp(split);
split{1} =
0.1000 0.2000 0.3000
split{2} =
0.4000 0.5000 0.6000
split{3} =
0.7000 0.8000
split{4} =
0.9000 1.0000
現在,無論使用dfeval,還是createJob和createTask,都很容易執行計算了。
y = dfeval(@sin, split, 'Configuration', configName);
cat(2, y{:}) % Concatenate all the cells in y into one column vector.
ans =
Columns 1 through 9
0.0998 0.1987 0.2955 0.3894 0.4794 0.5646 0.6442 0.7174 0.7833
Column 10
0.8415
亦或,
job = createJob(sched);
for i = 1:numTasks
createTask(job, @sin, 1, {split{i}});
end
submit(job);
waitForState(job, 'finished');
y = getAllOutputArguments(job);
destroy(job);
cat(2, y{:}) % Concatenate all the cells in y into one column vector.
ans =
Columns 1 through 9
0.0998 0.1987 0.2955 0.3894 0.4794 0.5646 0.6442 0.7174 0.7833
Column 10
0.8415
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -