2012-04-25 8 views
2

我剛買了一臺新的機器來運行大規模建模的python腳本。它有兩個CPU,每個4個核心(Xeon,2.8GhZ)。每個核心都具有超線程功能,可啓用4個邏輯cpu核心。完全相同的Python過程運行時間的巨大變化

現在的問題:當我在8個獨立的終端運行相同的python進程時,top命令顯示每個進程都佔用了cpu的100%。但是,終端1中的進程比終端8中的進程慢大約4倍。這對我來說似乎很奇怪...

我不知道它是否與進程如何安排在各種邏輯?)內核?有沒有人有一個想法,我如何能以相同的速度運行?

編輯(回覆larsmans):好點。該腳本是一個運行約10,000次的ginat循環。每個循環讀入一個文本文件(500行)並對讀入的數量進行一些基本的計算。當循環運行時,它使用大約0.2%的內存。循環期間沒有寫入磁盤。我可以理解,讀取訪問可能是一個限制因素,但我對這樣的事實感到困惑,即如果是這樣的話,這將是最慢的第一個過程。我本以爲它會變慢,因爲我開始更多的進程...

我使用終端中的time命令對進程進行了多次計時。編輯2:我發現有時單個內核被指定爲處理所有的讀寫操作 - 所以多個進程(即使它們運行在不同的內核上)將爲所有I/O使用一個內核。但這隻會影響其中一個內核,並不會導致所有內核都具有各種處理速度......

+6

如果不知道腳本在做什麼,這是不可能的。對於初學者來說,它是否在做任何磁盤I/O?你有沒有執行過一次或者你重複過嗎? – 2012-04-25 15:04:44

回答

3

其中一個原因可能是使用超線程。 HT邏輯CPU作爲單獨的CPU出現在操作系統上,但實際上並非如此。因此,如果兩個線程在單獨的邏輯(HT)CPU中運行在相同的核心上,性能將比在獨立核心上運行的性能要小。

最簡單的解決方案可能是禁用超線程。如果這不是一個選項,請使用處理器關聯將每個Python進程固定到其單獨的CPU。

相關問題