我有一个小程序试图找到一个非常大的数字的最大素数因子。我用C#编写了这个程序。这是一种蛮力,需要很长时间才能完成。这是故意的,因为我试图了解如何利用CPU。
如何让它充分利用CPU。目前它只使用了大约25%,而大约68%的时间CPU只是闲置:
为什么程序不使用所有可用的CPU周期?
更新
四个核心的CPU历史记录如下所示
为什么这些都没有在顶部?
答案 0 :(得分:2)
如果您的计算机具有多核架构(可能),那么您使用大量线程的唯一方法就是使用多个线程。
例如,如果您的计算机是四核,如果您使用单个线程,则只会使用25%的CPU。
通过使用多个线程(通过显式多线程代码或通过诸如Parallel.For之类的东西),您将得到接近100%的东西,但不完全是 - 总是存在使程序无法实现完全使用的开销。算法的性质(即它的并行性)也有很大的不同。像光线追踪这样的东西令人尴尬地平行,而且开销也很危险。
答案 1 :(得分:1)
我猜你有4个CPU /核心,而且由于你运行的是单线程进程,你只能使用其中一个CPU,因此你的使用率为25%。如果您可以并行化(取决于您的算法),那么您可以调用(比方说)4个线程并且应该分布在您的CPU上(它取决于您的OS调度程序,因此这是您无法完全保证的)
答案 2 :(得分:1)
你有四个CPU核心吗?如果程序在100%的系统的四分之一上运行,它可能会在进程列表中显示为25%..多威胁性能栏会说什么?