衡量线程迁移的成本?

1 c++ migration multithreading

信息:

  1. 我正在用 C/C++ 编码;
  2. 我有一个多线程程序,我想对其进行优化,即减少每个函数消耗的 CPU 时间(由指定 'CLOCK_THREAD_CPUTIME_ID' 的 'clock_gettime' 计算);
  3. 我的猜测是,通过使用“pthread_setaffinity_np”将每个线程绑定到其特定的 CPU,这可能符合我的目的,即避免线程迁移导致的成本;
  4. 初步测试表明我的猜测似乎是正确的。

问题:

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

Mik*_*our 5

线程迁移的成本是多少?

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

将线程绑定到 CPU 真的有用吗?

在某些情况下,它会有所帮助;在其他情况下,它会损害性能。例如,绑定到同一内核的线程必须相互等待,而未绑定的线程可以立即在任何可用内核上进行调度。如果您真的需要这种级别的性能调优,那么您需要衡量效果。

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

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