![結合 gnu parallel 和 mpirun:如何處理最大核心數?](https://rvso.com/image/164740/%E7%B5%90%E5%90%88%20gnu%20parallel%20%E5%92%8C%20mpirun%EF%BC%9A%E5%A6%82%E4%BD%95%E8%99%95%E7%90%86%E6%9C%80%E5%A4%A7%E6%A0%B8%E5%BF%83%E6%95%B8%EF%BC%9F.png)
我有一台 32 個核心的機器,我想用可變數量的核心運行一些 mpi 作業(這是因為問題需要這樣做)。有沒有辦法讓 gnu 並行了解 mpi 作業的數量來管理何時啟動每個作業?
範例:假設我必須啟動許多(200)個作業,其中包含以下數量的 mpi 作業:
NMPI=(2 2 2 4 4 4 4 6 7 10 12 24 32)
因此,最初我只想運行數組的前 8 個元素(因為它們的總和小於核心總數 32),然後在每個第一個元素完成後立即依次運行其他作業,不超過32 個並發mpi 作業總數的限制。例如,假設前 8 個進程正在運行,第一個進程剛剛完成(對於第一個 NMPI[0] == 2)。然後並行不應該運行任何新的東西,直到有足夠的空閒處理器,因為下一個作業有 NMPI[8]==7,因此將超過 32 個核心的最大限制。或者有沒有辦法並行改進作業啟動,例如先啟動最後一個 mpi 作業(32 個核心),然後最後一個減一加上前三個,依此類推?
預先感謝您的指導
答案1
翻轉數組的順序,因此首先從最大的作業開始。
也許您可以使用--load 100%
,--delay 10s
因此您確定該作業在開始下一個作業之前使用了所有核心?