衡量线程迁移的成本



info:

  1. 我正在用C/C++进行编码
  2. 我有一个多线程程序,我想对它进行优化,即减少每个函数消耗的cpu时间(通过指定"clock_THREAD_CPUTIME_ID"的"clock_gettime"计算(
  3. 我的猜测是,它可能符合我的目的,使用"pthread_setaffinity_np"将每个线程绑定到其特定的CPU,即避免线程迁移带来的成本
  4. 初步检验表明我的猜测似乎是对的

问题:

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

线程迁移的成本是多少?

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

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

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

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

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

最新更新