我完全从内存(没有IO)运行算法,但我的CPU使用率低于25%。可能存在的瓶颈是什么?

时间:2012-02-23 07:40:54

标签: java performance profiling yourkit

我一直在运行着名的旅行商问题的单线程蛮力版本,而YourKit正在向我指出CPU的使用率最多为25%。

这个事实背后的原因是什么?我们被告知这些算法是高度CPU密集型的,但在这种情况下似乎有很多浪费的CPU。

我的理论是瓶颈必须是RAM访问。锁定问题似乎是不可能的,因为我运行的算法是单线程的。

我是对的吗?

2 个答案:

答案 0 :(得分:6)

宣传评论以回答。

你说你的程序是单线程的,但你只使用25%的CPU。

这表明你有一台四核机器。 (或者可能是带有超线程的双核)使用单线程,你不能使用超过1个核心。

所以你所看到的是正常的。


作为一个侧面点,锁定和内存访问等瓶颈不会直接降低CPU使用率。一个花费整个时间缓存丢失的单线程程序仍然会显示与运行实际计算的25%相同的使用率(在四核上)。

在多线程应用程序中,如果此类瓶颈阻止其他线程运行或者它们影响负载平衡,则可能会影响CPU使用率。

答案 1 :(得分:4)

  

...... CPU的使用率最多为25%。

你有4个核心(有或没有超线程)?

会发生什么:您的一个进程在四个核心之间跳转。对于一个核心,平均利用率为25%。

  

我的理论是瓶颈必须是RAM访问。锁定问题似乎是不可能的,因为我运行的算法是单线程的。

RAM访问时间不单独计算,它是CPU时间的一部分。