我有一个用C++编写的程序,每秒运行多个for循环而不使用任何会使它等待的东西。它一直使用2-10%的CPU。有没有办法强制它使用更多的CPU,并进行更多的计算,而不使程序变得更加复杂?另外,我在Windows电脑上使用C::B进行编译。本质上,我想知道是否有一种方法可以通过增加CPU使用率来使我的程序更快,如果有,该如何实现。
我有一个用C++编写的程序,每秒运行多个for循环而不使用任何会使它等待的东西。它一直使用2-10%的CPU。有没有办法强制它使用更多的CPU,并进行更多的计算,而不使程序变得更加复杂?另外,我在Windows电脑上使用C::B进行编译。本质上,我想知道是否有一种方法可以通过增加CPU使用率来使我的程序更快,如果有,该如何实现。
PROCESS_SET_INFORMATION
访问权限),您可以使用SetPriorityClass
来提高您的优先级(当然,这通常会对所有其他进程产生不利影响)。ABOVE_NORMAL_PRIORITY_CLASS
(首先尝试此选项),HIGH_PRIORITY_CLASS
(使用此选项时要非常小心)或REALTIME_PRIORITY_CLASS
(我强烈建议您可能不应该尝试此选项)。程序没有权利或责任要求系统提供额外的资源。这是操作系统作为资源调度器的工作。
如果需要使用比操作系统认为合适的更多CPU时间,应使用特定于平台的API向操作系统请求。在这种情况下,似乎是类似于SetPriorityClass
或SetThreadPriority
的东西。
一些性能分析工具可以很好地指示代码瓶颈所在。例如,CodeAnalyst(仅适用于AMD芯片)具有每个周期的指令比率。我相信英特尔的性能分析工具也是类似的。
正如Billy O'Neal所说,如果你在8核上运行,被卡在10%的CPU使用率是正常的。如果这是你的问题,那么Windows msvc ++有一个并行模式({{link1:parallel patterns library}})用于标准算法。如果您已按照C ++方式编写了循环,则可以免费进行并行化(仍然需要确保循环是线程安全的)。我没有使用过msvc版本,但gnu::__parallel_for_each
等工具非常好用。