info:
- 我正在用C/C++进行编码
- 我有一个多线程程序,我想对它进行优化,即减少每个函数消耗的cpu时间(通过指定"clock_THREAD_CPUTIME_ID"的"clock_gettime"计算(
- 我的猜测是,它可能符合我的目的,使用"pthread_setaffinity_np"将每个线程绑定到其特定的CPU,即避免线程迁移带来的成本
- 初步检验表明我的猜测似乎是对的
问题:
- 线程迁移的成本是多少?将线程绑定到CPU真的有用吗
- 有可能知道在进程执行过程中线程迁移发生了多少次吗?如果可能的话,怎么做
线程迁移的成本是多少?
它增加了缓存未命中的可能性;迁移后,它可能会访问另一个缓存,该缓存将不包含其最近使用的数据。这样做的成本取决于它利用缓存的成本。
将线程绑定到CPU真的有用吗?
在某些情况下,它会有所帮助;在另一些情况下,这可能会影响表现。例如,绑定到同一核心的线程必须相互等待,而未绑定的线程可以立即在任何可用的核心上进行调度。如果您真的需要这种级别的性能调整,那么您需要衡量效果。
有可能知道在进程执行过程中线程迁移发生了多少次吗?如果可能的话,怎么做?
它依赖于平台。在Linux上,您可以在/proc/<pid>/sched
中看到许多调度统计信息(包括迁移(