2013-04-09 20 views
1

info:衡量線程遷移的成本?

  1. 我在C/C++中編碼;
  2. 我有一個多線程程序,我想優化它,即減少每個函數消耗的cpu時間(通過'clock_gettime'指定'CLOCK_THREAD_CPUTIME_ID'指定);
  3. 我的猜測是,它可能符合我的目的,使用'pthread_setaffinity_np'將每個線程綁定到其特定的CPU,即避免線程遷移導致的成本;
  4. 預測測試顯示我的猜測似乎正確。

問題:

  1. 什麼的線程遷移的成本是多少?綁定線程到CPU真的有幫助?
  2. 是否有可能知道在進程執行期間發生了多少次線程遷移?如果可能的話,該怎麼做?

回答

4

線程遷移的成本是多少?

它增加了緩存未命中的可能性;遷移後,它可能會訪問不同的緩存,該緩存不會包含其最近使用的數據。這個成本多少取決於它會佔用多少緩存。

綁定線程到CPU真的有幫助嗎?

在某些情況下,它可以幫助;在其他情況下,這可能會損害業績。例如,綁定到同一內核的線程必須等待對方,而未綁定的線程可以立即在任何可用的內核上進行調度。如果你真的需要這種性能調整,那麼你需要測量效果。

是否有可能知道在進程執行過程中線程遷移發生了多少次?如果可能的話,該怎麼做?

它取決於平臺。在Linux上,您可以在/proc/<pid>/sched

中看到許多調度統計信息(包括遷移)