Answers:
理论峰值FLOP / s由下式给出: 的操作内核数很容易。从理论上讲,平均频率应考虑一定数量的Turbo Boost(Intel)或Turbo Core(AMD),但工作频率是一个很好的下限。每个周期的操作取决于体系结构,可能很难找到(SandyBridge和IvyBridge为8,请参见幻灯片26)。这是此堆栈溢出问题的主题,其中包括一堆现代体系结构的数字。
您将需要了解机器中CPU的型号和供应商。了解这些信息后,您可以在供应商的网站(或维基百科)上查询时钟频率,芯片/插槽数,每个芯片的核数,每个周期的浮点运算数以及这些运算的向量宽度。然后,您只需相乘。
以我工作的Stampede中的Intel Xeon E5-2680“ Sandy Bridge”处理器为例。规格是:
将它们相乘得出系统未加速部分的速度为345.6 GF /节点或2.2 PF。
我们通常以双精度(64位)运算的方式来考虑,因为这是绝大多数用户所需的精度,但是您可以根据需要以单精度的方式重做计算。通常这只会更改最后一个因素,例如8个SP触发器/指令,而不是4个DP触发器/指令,但它可能与之大不相同。例如,较旧的GPU只能以SP的1/8的速度进行DP。如果您曾经为系统引用一个数字,那么如果它不是双精度的,则应该明确指出使用的是哪个数字,否则人们会认为它是双精度的。
另外,如果您的芯片支持融合乘法加法(FMA)指令,并且可以全速执行,那么大多数人都将其视为2个浮点运算,尽管硬件性能计数器可能会将其仅视为一条指令。
最后,您还可以对系统中可能存在的任何加速器(例如GPU或至强融核)执行此操作,并将该性能添加到CPU性能中以获得理论上的总和。
我知道您要求的是理论值,但是由于任何实际代码(甚至是LINPACK)都几乎无法访问此理论值,因此您可能只想针对非常大的矩阵运行(优化)DGEMM。我之所以喜欢这种方法,是因为它暴露了某些处理器的某些缺点,这些缺点使它们无法达到理论峰值触发器值。
例如,NVIDIA GPU当前在同一管道上执行整数和浮点运算。这意味着,如果不执行任何整数计算,则只能达到理论峰值s / s 。由于数组索引和任何其他形式的数据访问都需要在某个地方进行整数运算,因此没有代码可以在NVIDIA GPU上达到理论上的峰值触发器。在大多数情况下,人们会将〜80%作为上限。对于同时发布整数和浮点运算的CPU,这不是问题。
在类似GPU的多核处理器(如Intel Knights Corner和Blue Gene / Q)上,要达到类似类似管线问题的峰值flop / s难度要比传统CPU更高(尽管在大型DGEMM中,两者都至少可以达到约90%的峰值)。 )。