gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:21 34 4
gpt4 key购买 nike

在四核 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 运行),结果仍然比将线程均匀地放在所有核心上更好.

关于多核系统上的 C++ 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25804212/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com