衡量线程迁移的成本?

时间:2013-04-09 09:08:15

标签: c++ multithreading migration

信息:

  1. 我用C / C ++编写代码;
  2. 我有一个多线程程序,我想优化它,即减少每个函数消耗的cpu时间(由'clock_gettime'计算,指定'CLOCK_THREAD_CPUTIME_ID');
  3. 我的猜测是,它可能符合我的目的,使用'pthread_setaffinity_np'将每个线程绑定到其特定的CPU,即避免线程迁移导致的成本;
  4. 前期测试显示我的猜测似乎是正确的。
  5. 的问题:

    1. 线程迁移的成本是多少?是绑定线程到CPU真的有用吗?
    2. 是否可以知道在进程执行期间发生了多少次线程迁移?如果可能的话,怎么做?

1 个答案:

答案 0 :(得分:4)

  

线程迁移的成本是多少?

它增加了缓存未命中的可能性;迁移后,它可能会访问不同的缓存,该缓存不包含其最近使用的数据。这笔费用多少取决于它可以利用缓存的程度。

  

绑定线程到CPU真有帮助吗?

在某些情况下,它可以提供帮助;在其他方面,它可能会损害性能。例如,绑定到同一核心的线程必须彼此等待,而未绑定的线程可以立即在任何可用核心上进行调度。如果你真的需要这种级别的性能调整,那么你需要测量效果。

  

是否可以知道在流程执行期间发生了多少次线程迁移?如果可能的话,怎么做?

它取决于平台。在Linux上,您可以在/proc/<pid>/sched

中看到许多调度统计信息(包括迁移)