gpt4 book ai didi

c++ - C++中的最大线程数

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:25 25 4
gpt4 key购买 nike

琐事

通常,当我想用​​ C++ 编写多线程程序时,我会询问硬件有关支持的并发线程数,如下所示:

unsigned int numThreads = std::thread::hardware_concurrency();

这将返回支持的并发总数。因此,如果我们有 2 个 CPU,每个 CPU 可以支持 12 个线程,numThreads 将等于 24。

问题

最近我使用 numactl 强制程序只在一个 CPU 上运行。

numactl -N 1 ./a.out

问题是 std::thread::hardware_concurrency() 返回 24,即使我使用 numactl -N 1 运行它也是如此。然而,在这样的设置下,nproc 的输出是 12。

numactl -N 1 nproc --> output = 12

问题

也许 std::thread::hardware_concurrency() 并不是为了支持这种情况而设计的。那不是我关心的。我的问题是,当我想使用 numactl 运行我的程序时,获得支持的线程数的最佳做法是什么。

更多信息

如果您还没有处理过 numactl,它可以用来运行一个使用 NUMA 策略的进程。例如,您可以使用它强制您的程序仅在一个 CPU 上运行。这种情况的用法如上所示。

最佳答案

您必须使用特定于操作系统的调用来查询它对您的流程施加的限制。

hardware_concurrency可能会返回一个提示(由您的硬件支持),或者可能会返回 0。操作系统可以将您的进程限制为少于此数量的线程(或者可能使用更多),无论是使用 numactl,正常调度,或其他一些方式。某些进程或用户总是有可能更改允许的 CPU 集,这会影响可用的并发性。典型的 C++ 程序不必关心这些细节,特别是因为可用线程数的变化通常是短暂的。

关于c++ - C++中的最大线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57298045/

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