我一直在运行著名的旅行推销员问题的单线程暴力破解版本,YourKit 指出 CPU 最多使用 25% 的事实。
这个事实背后的原因是什么?我们被告知这类算法是高度 CPU 密集型的,但在这种情况下似乎有很多 CPU 浪费。
我的理论是瓶颈一定是RAM访问。锁定问题似乎没有问题,因为我正在运行的算法是单线程的。
我对吗?
我一直在运行著名的旅行推销员问题的单线程暴力破解版本,YourKit 指出 CPU 最多使用 25% 的事实。
这个事实背后的原因是什么?我们被告知这类算法是高度 CPU 密集型的,但在这种情况下似乎有很多 CPU 浪费。
我的理论是瓶颈一定是RAM访问。锁定问题似乎没有问题,因为我正在运行的算法是单线程的。
我对吗?
促进评论回答。
你说你的程序是单线程的,但你只使用了 25% 的 CPU。
这表明你有一台四核机器。(或者可能是超线程的双核)使用单线程,您不能使用超过 1 个内核。
所以你看到的是正常的。
另外,锁定和内存访问等瓶颈不会直接降低您的 CPU 使用率。一个单线程程序在整个时间内都没有缓存,仍然会显示与运行真实计算的程序相同的 25% 使用率(在四核上)。
在多线程应用程序中,如果此类瓶颈阻止其他线程运行或影响负载平衡,则可能会影响 CPU 使用率。
... CPU 最多使用 25%。
你有 4 个内核(有或没有超线程)吗?
会发生什么:您的一个进程在四个核心之间跳转。对于一个核心,这提供了 25% 的平均利用率。
我的理论是瓶颈一定是RAM访问。锁定问题似乎没有问题,因为我正在运行的算法是单线程的。
RAM 访问时间不是单独计算的,它是 CPU 时间的一部分。