最大化 CPU 使用率

Posted

技术标签:

【中文标题】最大化 CPU 使用率【英文标题】:Maximize CPU Usage 【发布时间】:2009-10-27 21:40:45 【问题描述】:

如何最大化应用程序的 CPU 使用率?我尝试在任务管理器中将其设置为“实时”,但没有明显改善 - 它停留在 50%。

我正在使用 Visual C++ 2005 在 Windows XP 中工作。

【问题讨论】:

除了 Eclipse 的回复:进程/线程优先级不会影响 CPU 负载,它只会影响可用 CPU 如何在等待执行的线程之间分配。如果有单个线程处于空闲优先级,则 ti 将获得单个内核的所有周期。 【参考方案1】:

我假设您在双核计算机上运行。尝试启动另一个线程。

如果您的应用程序中只有一个执行线程,则它一次只能在一个 CPU 内核上运行。解决这个问题的方法是将工作分成两半,让一个 CPU 核心运行一半,另一个核心运行另一半。当然,您可能希望将其概括为与 4 个或更多内核一起使用....

为您的应用程序设置优先级只会将它移到队列中,以便进程首先有机会使用 CPU。如果有一个实时进程在等待 CPU,它总是会在高优先级之前获得它,依此类推。即使您的应用程序的优先级较低,如果它有足够的工作要做,它仍然可以最大限度地使用 CPU 内核,并且没有更高优先级的进程想要使用该内核。

有关多线程的介绍,请查看以下问题:

C++ multithreading tutorial What is easiest way to create multithreaded applications with C/C++? Good multithreading guides?

【讨论】:

谢谢!伙计,我觉得自己像个笨蛋——向 OpenMP 前进!【参考方案2】:

您可能有一个双核处理器并且您的程序可能是单线程的。

【讨论】:

【参考方案3】:

优先级与您的进程使用多少 CPU 几乎没有关系。这是因为如果有什么可用可以运行,操作系统会安排它运行,即使它是低优先级的。只有当有两个或更多的可运行线程可供选择时,优先级才会出现。 (注意:这是一种极端的简化。)

Prime95 等数字运算程序以可能的最低优先级运行,并生成多个线程以使用尽可能多的 CPU。

【讨论】:

【参考方案4】:

实时不一定会占用 CPU 周期。尝试产生一个或两个或三个运行紧密循环的线程,最基本的。如果你想(ab)使用内存,你也可以在你的循环中分配和释放一些任意对象。

【讨论】:

以上是关于最大化 CPU 使用率的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 CPU “最大化”:同步方法异步调用多个工作人员并使用 SemaphoreSlim 进行节流?

如何降低CPU最大频率?

如何通过 Parallel.ForEach 实现最大并行度并利用最大 CPU?

Rails rspec 最大化 CPU 并且没有完成

优化 sql 脚本最大化 CPU

如何在 Matlab 中最大限度地利用多线程 CPU?