我有一個在羣集的單個核心上運行的腳本。每個串行作業都是獨立的。每次使用qsub時,我用來運行的集羣都會分配一個核心,因此它假定ppn = 1,然後其他所有人都可以使用其他核心。我只是通過循環qsub提交我想運行的串行作業的數量。運行串行作業的HPC羣集
然而,我們使用的另一個羣集會自動爲每個用戶分配一個節點(他們已經設置了節點,使得節點是最小的單元而不是核心)。每個節點有16個核心。如果我然後提交我的腳本,它將被分配所有16個內核,但它只運行一個作業。我很奇怪,因此我如何運行腳本並使其全部使用16個內核?我想到的
一個想法是使用其他腳本循環我現在這樣的腳本運行兼職:在
爲I {} 1..16做 ./[my腳本] & DONE 等待
然後qsub這與nodes = 1,ppn = 16。然後,我認爲這會產生16個進程,但我不知道它實際上是使用全部16個內核還是一個試圖運行全部16個進程的內核。哪個是對的?這樣做的速度也比我以往的做法要慢40%左右(兩種方法都是在舊集羣上測試的)。有沒有更好的方法來做到這一點?
在此先感謝。
對於40%的減速,抱歉,這與在舊羣集上使用ppn = 16發送我的腳本有關,因此它將16個內核分配給工作中的16個內核,然後產生16個進程,所以這就是它應該在新集羣上的方式。我只想測試這兩種方法的速度,但由於我的舊方法在新集羣上無法運行,因此我在舊集羣上使用了這兩種方法。希望這是有道理的。你是正確的,這些工作需要可變的時間,我需要考慮一下如何優化。 – user2709136
好嗎?你是在測量內核*運行時間作爲度量標準嗎?如果是這樣,他們40%可能僅僅是由於上述時間差異,即16核心版本是16 * longest_run vs(總和(運行時間)= 16 * avg_run)。 – tolanj