2013-08-22 110 views
0

我有一個在羣集的單個核心上運行的腳本。每個串行作業都是獨立的。每次使用qsub時,我用來運行的集羣都會分配一個核心,因此它假定ppn = 1,然後其他所有人都可以使用其他核心。我只是通過循環qsub提交我想運行的串行作業的數量。運行串行作業的HPC羣集

然而,我們使用的另一個羣集會自動爲每個用戶分配一個節點(他們已經設置了節點,使得節點是最小的單元而不是核心)。每個節點有16個核心。如果我然後提交我的腳本,它將被分配所有16個內核,但它只運行一個作業。我很奇怪,因此我如何運行腳本並使其全部使用16個內核?我想到的

一個想法是使用其他腳本循環我現在這樣的腳本運行兼職:在

爲I {} 1..16做 ./[my腳本] & DONE 等待

然後qsub這與nodes = 1,ppn = 16。然後,我認爲這會產生16個進程,但我不知道它實際上是使用全部16個內核還是一個試圖運行全部16個進程的內核。哪個是對的?這樣做的速度也比我以往的做法要慢40%左右(兩種方法都是在舊集羣上測試的)。有沒有更好的方法來做到這一點?

在此先感謝。

回答

0

當你說'16 copies'方法運行速度慢40%時,你正在討論從舊集羣取得的時間,即在一個內核上運行16個副本。它並不直接暗示在16個內核上運行16個副本會更慢。

你建議該腳本看起來不錯,並應該利用過程的所有16個內核,如果你的工作是可變的運行時間(即16的15可能在5分鐘但1次小時完成運行),那麼你的仍然會有大量未使用的週期。如果這可能會影響你,你需要更復雜,並有更多的循環和產卵過程,直到更大的工作集完成。或者你可以啓動全部你想從1個腳本中獲得的進程(所以你可能有60個或者16個處理器上同時運行的任何批處理)並且讓它們調度它們,這會減慢速度,也許不是很多,你的數字以上從1核心16只提供了40%的減速建議這仍然會讓你60%+利用率高達256個工作。

無論您做什麼,都可以確保您使用集羣監控軟件確保實際達到的cpu利用率與您的預期一致。

+0

對於40%的減速,抱歉,這與在舊羣集上使用ppn = 16發送我的腳本有關,因此它將16個內核分配給工作中的16個內核,然後產生16個進程,所以這就是它應該在新集羣上的方式。我只想測試這兩種方法的速度,但由於我的舊方法在新集羣上無法運行,因此我在舊集羣上使用了這兩種方法。希望這是有道理的。你是正確的,這些工作需要可變的時間,我需要考慮一下如何優化。 – user2709136

+0

好嗎?你是在測量內核*運行時間作爲度量標準嗎?如果是這樣,他們40%可能僅僅是由於上述時間差異,即16核心版本是16 * longest_run vs(總和(運行時間)= 16 * avg_run)。 – tolanj

相關問題