从超级计算的角度来看,最好不要以百分比的形式考虑CPU / GPU的负载,而应该确定您的问题需要进行多少次操作,然后将其与系统的最高性能进行比较。
如果您获得100%的CPU利用率,则并不一定意味着您可以从系统中获得所有性能。CPU通常可以同时做多种不同的事情,例如除法和加法。如果您可以尽早开始该部门,则该部门可能会与添加部门重叠。您的台式机CPU很可能具有乱序单元,该单元将对语句重新排序,以从此类重叠中受益。或者,如果您具有以下程序:
if (expr1)
expr2;
else
expr3;
重新排序的CPU将尝试同时计算三个表达式,然后丢弃其中一个的结果。这样总体上更快。如果您的程序中有一些阻止程序,并且您无法重新排序,则您在CPU中使用的通道数较少,但它可能仍显示100%。
然后,在CPU中具有矢量操作的SIMD功能。就像GPGPU-light一样,从某种意义上说,您通常一次只能同时进行四个或八个操作,而GPU却可以同时进行32或64个操作。
错误共享之类的东西可能会导致如此高的同步成本,通常在Linux中会以内核负载的形式显示出来。CPU已被完全使用,但是您的吞吐量没有太大用处。
我已经在IBM Blue Gene / Q机器上完成了一些编程。它具有许多层次结构级别(过时的Blue Gene / L的示意图),因此难以高效编程。您必须使用完整的层次结构直到SIMD和SMT(英特尔将其称为超线程)才能获得性能。
然后网络经常限制您。因此,事实证明,与在网络上进行通信相比,同时在多个CPU上进行计算的时间(挂钟)更快。这将给CPU带来更多负担,并使程序运行得更快。但是实际的程序吞吐量并不如原始数据所示的那样好。
如果您将GPU添加到组合中,那么将很难协调整个过程以产生性能。这将是我几个月后将在我的Lattice QCD硕士论文中开始做的事情之一。
NO-OP
s 的无限循环是很简单的,这将导致两者的负载均为100%。