1

信息:

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

问题:

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

1 回答 1

6

线程迁移的成本是多少?

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

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

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

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

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

于 2013-04-09T09:29:12.027 回答