2011-08-03 59 views
0

我看到很多線程詢問經過時間(掛鐘時間)小於用戶+內核時間的情況,並且我瞭解多線程如何導致這種情況。然而,經由定時的一些MPI代碼的執行時:經過時間大大超過用戶+內核時間的原因是什麼?

$時間的mpirun -n 4 ./a.out

我看到的經過時間,從4-5分鐘的範圍內,約40倍用戶秒,內核時間約爲40秒。我認爲進程之間的障礙同步可能是原因的一部分,或者可能只是獲取關於單個MPI進程的信息,但我仍然無法精確確定導致我的讀數的原因。任何人都可以解釋嗎?

非常感謝。

+0

花費的時間不是用戶時間或內核時間的一部分。一個線程可以在磁盤上等待,等待網絡,等待一個管道,等待一個互斥體... – Nemo

回答

3

對於很多進程我希望掛鐘時間大大超過總CPU時間。很少有進程受CPU限制,所以他們會花很多時間等待。幸運的是,等待時間不再被收取。導致等待的原因:

  • 任何類型的I/O(磁盤,網絡,進程間管道等)。
  • 進程之間的資源同步。
  • 分配給其他進程的時間片。
  • 內存交換(這些日子不常見)。
  • 其他類型的中斷很好。

即使重型統計軟件可能會做I/O,這會導致CPU利用率低於掛鐘時間。

一個極端的例子是將大文件從磁盤上的一個分區複製到同一磁盤上的另一個分區。這可能會花費很長的時間和很少的CPU時間。如果您有能力使用ionice,則如果磁盤忙於其他工作,則可以使Wall時間更長。

以下命令可能會顯示比用戶和sys時間組合顯着更高的實時(掛鐘)時間。

time bash -c "read ans" 
1

用戶/內核時間僅在處理器正在使用時遞增。如果你的代碼大部分都在等待磁盤或網絡IO之類的東西,那麼實時時間將比CPU時間大得多。