最大化 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 进行节流?