我有一个用C++编写的程序,它每秒运行许多for循环,而不使用任何会使其等待的东西。它始终使用2-10%的CPU。有没有办法迫使它使用更多的CPU和做更多的计算,而不会使程序变得更加复杂?此外,我在Windows计算机上使用C::B进行编译。本质上,我问的是有没有办法通过增加CPU使用率来让我的程序更快,如果有,又是如何做到的。
发布于 2011-06-23 12:40:30
假设您的应用程序有能力(PROCESS_SET_INFORMATION访问权限),您可以使用SetPriorityClass来提升您的优先级(当然,这通常会损害所有其他进程)。
你可以使用ABOVE_NORMAL_PRIORITY_CLASS (先试试这个),HIGH_PRIORITY_CLASS (使用这个要非常小心)或者REALTIME_PRIORITY_CLASS (我强烈建议你不应该尝试这个)。
如果您尝试了较高的优先级,但它仍然很低,那么这可能是因为您不受CPU限制(例如,如果您正在将数据写入输出文件)。如果是这样的话,您可能必须找到一种方法来限制自己的CPU。
请记住,这样做可能没有必要(甚至是可取的)。如果你以比其他线程更高的优先级运行,而你仍然没有占用大量的CPU,这可能是因为Windows已经(很可能是理所当然的)决定你不需要它。
发布于 2011-06-23 13:17:47
这取决于为什么它只使用了10%的CPU。如果是因为您使用的是多CPU机器,而您的程序只使用一个CPU,那么您将不得不在代码中引入并发性,以使用额外的马力。
如果它受到其他因素的限制(例如,将数据复制到磁盘或从磁盘复制数据),那么您不需要关注CPU,您需要关注瓶颈是什么。最有可能的是,限制器将从磁盘读取数据,您可以通过使用更好的缓存机制来改善这一点。
发布于 2011-06-23 12:40:47
从系统中要求额外的资源并不是程序的权利或责任。这是操作系统的工作,作为资源调度器。
如果需要使用比操作系统认为合适的更多的CPU时间,您应该使用与平台相关的API向操作系统请求。在这种情况下,这似乎类似于SetPriorityClass或SetThreadPriority。
https://stackoverflow.com/questions/6449332
复制相似问题