我有一個具有不同輸入參數的程序,它們應該在程序中執行相同的功能。如何使每組輸入參數在網格中的不同處理器上工作?如果你有任何想法,請幫助。會真的幫助很多!程序使用C++在不同的處理器中改變輸入參數
回答
您需要指定您使用的並行範例。 MPI,OpenMP等等。
通常應用的方法是使用一些通信通道,並將參數向量從「主」進程發送到所有其他通道。
當它們相同時廣播參數是最常見的,但主要任務可以迭代一組參數,並通過1對1通信器將每個參數發送給彼此的任務。
有時參數是在一個或一組文件中準備的,每個任務讀取它自己的設置參數。
一切都取決於您的應用程序部署的網站和工作規模。即當你在超級計算機上有一百萬個工作任務時,文件方法可能是一個壞主意。
任務是相同的,但參數不同,需要運行相同的任務。你能不能用更簡單的語言來解釋一下,我是編程初學者! – BLACK 2013-03-04 10:14:03
程序已經與Open MP並行使用,以使用節點中的所有線程。但現在我試圖讓程序本身在不同的節點上運行。所以,如果我沒有錯,我們將分佈式內存和共享內存模型結合起來。 – BLACK 2013-03-04 10:18:06
你用什麼系統將任務發送到網格節點?任務之間有任何溝通嗎?你似乎不知道發生了什麼。你說任務是一樣的,只有不同的參數。那麼,我想他們之間沒有任何溝通,並且介紹這樣做會矯枉過正。另一方面,你說你建議你使用分佈式內存。這是什麼? – luk32 2013-03-04 10:35:17
這取決於您使用的羣集資源管理器。大多數支持所謂的陣列作業,其中運行同一作業的許多實例,並且參數(通常是當前作業的簡單整數索引)通過環境傳遞。這就是我們所說的窮人的並行計算平臺:)
因爲我只廣泛用於的Sun Grid Engine(現Oracle網格引擎,也Open Grid Scheduler和Son of Grid Engine名下的開源叉存在)和平臺LSF(現在IBM LSF,也可以作爲非常類似的開源openlava作業調度程序),我只能寫關於它們(以及關於Torque的某種程度)。
隨着SGE陣列作業可能看起來是這樣的:
#!/usr/bin/env zsh
#$ -cwd
#$ -N jobname
#$ -t 1-100
## Other resource requirements
#$ -l h_rt=0:30:00
#$ -l h_mem=1200M
#$ -pe openmp 12
export OMP_NUM_THREADS=12
density=$((SGE_TASK_ID * 0.06)) # zsh specific
/path/to/executable -d density < input_${SGE_TASK_ID} > output_${SGE_TASK_ID}
這裏-t 1-100
參數qsub
創造了100個任務,編號爲1
到100
陣列作業。 SGE傳遞SGE_TASK_ID
環境變量中的當前任務編號。您可以使用它來選擇適當的輸入文件,或者可以使用它來計算其他輸入參數。 SGE會自動將作業的輸出和錯誤文件與任務ID一起後綴。請注意,在$(())
中使用浮點文字似乎是zsh
特定的。在轉矩
陣列作業準確創建的相同的方式經由-t
參數SGE。扭矩之前的版本2.3 -t
接受一個參數 - 任務的數量,然後從0
這個數減1號任務,扭矩2.3一個開始可以像SGE指定範圍:
#!/usr/bin/env zsh
#PBS -N jobname
#PBS -l nodes=1,walltime=00:30:00
#PBS -t 1-100
cd ${PBS_O_WORKDIR}
export OMP_NUM_THREADS=12
density=$((PBS_ARRAYID * 0.06)) # zsh specific
/path/to/executable -d density < input_${PBS_ARRAYID} > output_${PBS_ARRAYID}
與上海黃金交易所的主要區別是任務ID環境變量名爲PBS_ARRAYID
。請參見扭矩手冊中的Job Submission部分。
隨着LSF陣列作業可能看起來是這樣的:
#!/usr/bin/env zsh
#BSUB -J jobname[1-100]
# Have separate error file for each job
#BSUB -e error_%I
# Other resource requirements, e.g.
#BSUB -W 0:30
#BSUB -M 1200
#BSUB -n 1
#BSUB -x
export OMP_NUM_THREADS=12
density=$((LSF_JOBINDEX * 0.06)) # zsh specific
/path/to/executable -d density < input_${LSF_JOBINDEX} > output_${LSF_JOBINDEX}
下面附加的範圍內規範[1-100]
後的作業名稱創建一個數組的工作。 LSF通過LSF_JOBINDEX
環境變量傳遞任務ID。您可以完全按照與SGE情況相同的方式使用它。
非常感謝您給我們的回覆。 – BLACK 2013-03-19 15:22:21
你是說你在SGE ARRAY JOBS中,每個SGE_TASK_ID都可以在網格的不同節點上工作嗎?或者我應該指定它在某個地方使用不同的節點?以及如何使用不同任務的SGE_TASK_ID來計算程序中的不同輸入參數? – BLACK 2013-03-19 16:18:05
提交和陣列作業就好像有許多具有相同作業文件的作業一樣被提交。由SGE根據可用資源和各個作業實例的要求(在陣列作業中,所有實例具有相同的資源需求)決定在哪裏執行每個實例。 SGE爲你提供工作號碼,你必須把它翻譯成有用的東西。我已經向你展示了一個例子。 – 2013-03-19 19:53:55
- 1. 在不同的控制器中更改可變參數
- 2. 批處理腳本根據輸入改變參數多次運行命令
- 3. 在Powershell函數中處理管道和參數輸入
- 4. 在SQL Server中處理XML輸入參數的最佳實踐
- 5. JQUERY點擊處理器從不同的元素觸發輸入?
- 6. 預處理器標誌爲bool輸入參數嗎?
- 7. Scrapy - 輸入處理器
- 8. 如何處理文件輸入,在Talend改變模式
- 9. 在python中,如何使輸入參數的函數不可變?
- 10. Bash腳本處理不同,然後在終端中輸入?
- 11. 改變輸入的Matlab函數輸入
- 12. 如何爲過濾器/鏈中的不同處理程序解耦輸入參數?
- 13. 使用不同的參數處理多個請求在redux中
- 14. 將輸入作爲Python中的命令行參數處理輸入
- 15. 如何處理函數中不同數量的參數?
- 16. 當輸入參數發生變化時,tf變量不會改變數值
- 17. AJAX處理不當輸入
- 18. 改變數字輸入(機器人)
- 19. 如何處理CNN模型中的不同輸入大小
- 20. 試圖離開輸入參數不變
- 21. 當只有一個輸入參數時,F#會以不同的方式處理參數匹配嗎?
- 22. 在輸入參數改變的情況下運行.exe
- 23. 批處理 - 從用戶輸入中獲取多個參數
- 24. 輸入 - 在LibGdx中的動作處理
- 25. 在WinForm中的輸入處理
- 26. 正確處理輸入更改事件
- 27. 如何在mixin中處理可變數量的參數?
- 28. 比較-對象:PassThru參數改變輸入變量
- 29. 不同數量的處理器以不同的結果結束?
- 30. 在具有可變數量參數的Lua函數中處理參數
你是什麼意思「在網格中的不同處理器上工作」? – Pradheep 2013-03-04 09:58:35
通過不同的處理器,你的意思是像Athlon-64和Intel iCore7,還是你的意思是PowerPC和x86?你想改變什麼,爲什麼? [另一個XY問題,你試圖解決問題X,認爲Y是解決方案,並詢問如何做Y] – 2013-03-04 09:59:32
由不同的處理器我的意思是,在網格環境中的不同節點。我正試圖在各種計算機之間分發這些工作以便快速計算。所以,我想讓每組輸入參數在每個節點上運行。我清楚了嗎? – BLACK 2013-03-04 10:10:01