我有一個關於並行程序中運行時測量的問題(我使用C++,但我認爲問題更一般)。爲相互依賴的線程測量並行計算時間
一些簡短的解釋:3個線程並行運行(pthread),以不同的方式解決相同的問題。取決於他自己的計算中的狀態/可用信息,每個線程可以將信息傳遞給另一個線程(例如,由一個線程獲得的部分解決方案,但不是另一個線程),以加速其他線程。一旦第一個線程準備就緒,整個過程就會停止。 現在我想要有一個獨特的時間度量來評估從開始到解決問題的運行時間。 (最後,我想確定通過並行計算使用協同效應是否快於在單個線程上計算)。
在我看來,問題在於,(由於操作系統暫停/取消暫停單線程),信息在進程中傳遞的時間點在每個進程的狀態中都不是確定性的。這意味着,在線程1上的xxx單元的CPU時間之後獲取某個信息,但無法控制線程2是否在計算後花費了CPU時間的yyy或zzz單位接收到此信息。假設這些信息在任何情況下都會完成線程2的計算,線程2的運行時間是yyy或zzz,具體取決於操作系統的操作。
如何獲得運行時比較的確定性行爲?我可以命令操作系統運行每個線程「不受干擾」(在多核機器上)嗎?在執行(C++)基礎上有什麼我可以做的嗎?
或者還有其他概念用於評估此類實現的運行時間(時間增益)嗎?
問候 馬丁
您是否通過將每個線程映射到特定內核來檢查設置的性能? – 2012-04-20 08:32:12
不,我沒有意識到這種可能性(現在會試用)。雖然我不確定操作系統是否仍然會在那裏發生干擾,但通過將不同的任務加載到該內核或以非確定性方式在這些內核之間進行通信。 – Martin 2012-04-20 08:58:32
對於正常工作負載,我不懷疑其他線程的上下文切換和映射可能會導致線程出現性能問題。但是,由於操作系統和其他應用程序造成的緩存污染可能會導致性能大幅下降。我不太確定確切的數字。 – 2012-04-20 09:04:31