2012-05-14 44 views
1

的運行時間。該程序有大約400個並行函數調用。這些函數有一些printf函數來打印一些調試信息。我觀察到,通過刪除這些printf函數,程序的運行時間從1.2秒增加到1.6秒。我一直在觀察這些現象。這怎麼可能?編寫大量的printf函數降低我已經寫在C使用OpenMP多線程程序的程序

+1

如果以單線程模式運行程序,程序更快嗎?> –

+0

@DavidHeffernan,在單線程模式下,程序需要大約25秒,因此沒有任何可觀察到的差異。 – quartz

+0

發佈代碼。答案可能與你正在做的事情有關。 –

回答

2

執行並行函數調用以任何方式彼此依賴?由於您不可能在400個內核上運行此操作,因此會在各種線程進行調度時在上下文切換中出現一些開銷。可能的是,在得到的CPU(雖然它寫到stdout)中的printf的結果,和通過的機會,這是一個很好的地方,得到CPU(即,它不是在該點阻斷任何其他線程)。

我在多進程應用程序的工作,偶爾做同步寫入到磁盤上。我看到的一件事是擺脫所有的同步寫入增加了這個過程的速度,但是以整個系統運行不平穩爲代價。相反,我們只是確保在持有任何信號量鎖的同時避免寫入。

如果進程始終暫停等​​待同步寫入完成,如果沒有其他任何東西阻擋,一切都將有機會以極低的延遲運行,整個系統是一個相當快一點。