繁体   English   中英

衡量线程迁移的成本?

[英]measure cost of thread migration?

信息:

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

问题:

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

线程迁移的成本是多少?

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

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

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

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

它取决于平台。 在Linux上,您可以在/proc/<pid>/sched看到许多调度统计信息(包括迁移)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM