gpt4 book ai didi

multithreading - 体贴的动态CPU负载管理

转载 作者:行者123 更新时间:2023-12-04 08:27:46 27 4
gpt4 key购买 nike

我正在编写一个 CPU 密集型图像处理库。为了充分利用可用的 CPU,我可以检测我机器上的内核总数,并让我的库以该数量的线程运行。当我的库为每个内核分配一个线程时,它会使用 100% 的可用处理器时间以最佳方式执行。

当我的是唯一运行的 CPU 密集型进程时,上述方法工作正常。如果另一个 CPU 密集型进程正在运行,或者甚至是我自己的代码的另一个实例,那么操作系统只会为我们分配可用内核的一小部分,然后我的库就会有太多线程在运行,这既低效又不考虑其他进程。

所以我想找到一种方法来确定在给定特定负载的情况下要运行的“公平份额”线程数。例如,如果我的进程的两个实例在 8 核机器上运行,每个实例将运行 4 个线程。每个人都需要一种方法来根据机器负载的波动动态调整线程数。

那么,我的问题是:

  • 是否有任何操作系统功能或第三方库允许我的进程动态调整线程数以使用其公平份额的 CPU?

我的重点是 Windows,但也对非 Windows 解决方案感兴趣。

编辑:明确地说,这是关于优化的。我正在尝试通过运行适合我公平份额的 CPU 的最佳线程数来实现最高效率。

最佳答案

在我看来,应用程序不应该决定产生多少线程。这是调用者应该知道的信息。在 linux 中,“-j”或“--jobs”参数被广泛使用(默认值:1)。

如何设置处理任务的优先级。因此,如果调用者知道处理是关键任务,他可以增加优先级(知道可能会阻塞(整个)系统)。您的处理库永远不会知道 图像的处理有多重要。如果调用者不关心,则使用默认的低优先级,这不应该影响系统的其余部分。如果是这样,您应该查看到底是什么阻塞了系统(可能将图像文件写入硬盘,减小内存大小以防止交换,...​​)。如果您弄清楚了这一点,您就可以优化这一点。

如果您以 (cpu-cores)*2 从低到正常优先级开始处理,您的系统应该可以使用。没有人会想到,这会杀死系统。

只是我的 2 美分。

关于multithreading - 体贴的动态CPU负载管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7724514/

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