多核系统上的C ++多线程

在四核CPU上运行以下代码时,是否可以确保这四个线程将在四个不同的核上运行?

或者,操作系统可以根据系统的工作负载在单个内核上放置多个线程。在这种情况下,由于上下文切换和其他线程开销,运行多线程甚至可能会给您带来性能损失。

我想没有办法编写应用程序代码,这迫使线程在不同的内核上运行吗?

int main()
{
    std::vector<std::thread> threads(3);

    for (size_t i = 0; i < 3; i++)
    {
        threads[i] = std::thread(DoSomethingLengthy);
    }

    DoSomethingLengthy();

    for (auto& thread : threads)
    { 
        thread.join(); 
    }
}
不可屏蔽中断

难道,除非你知道自己在做什么,有亲和力面具玩。

在现代系统上,调度是一个复杂的逻辑,涉及热节流,高速缓存局部性,NUMA距离和许多因素。对于您当前的计算机状态,系统要比您(或否则您甚至无权访问任何信息)能更好地做出决策。

暂时,调度程序可能会决定将多个线程放在同一个内核上(以4GHz运行),只是让另一个内核冷却下来(以500MHz运行),其结果仍然比在所有内核上均匀地放置线程要好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章