每个周期的浮点操作
我一直在寻找相当长的一段时间,似乎无法找到一个官方/结论性的数字,引用英特尔至强四核可完成的单精度浮点运算/时钟周期数。 我有一个Intel Xeon四核E5530 CPU。
我希望用它来计算我的CPU可以达到的最大理论FLOP / s。
MAX FLOPS =(#内核数量)*(时钟频率(周期/秒))*(#FLOPS /周期)
任何指向正确方向的东西都是有用的。 我发现这个FLOPS每个周期的沙桥和haswell SSE2 / AVX / AVX2
英特尔酷睿2和Nehalem:
4个DP FLOP /周期:2个宽SSE2加+ 2个宽SSE2乘法
8 SP FLOPs /周期:4宽SSE加+ 4宽SSE乘法
但我不确定这些数字在哪里找到。 他们是否假设融合乘法加法(FMAD)操作?
编辑:在DP中使用这个,我计算出英特尔引用的正确的DP算术吞吐量为38.4 GFLOP / s(这里引用)。 对于SP,我得到了两倍,即76.8 GFLOP / s。 我很确定4个DP FLOP /周期和8个SP FLOP /周期是正确的,我只是想确认他们如何得到4和8的FLOP /周期值。
Nehalem能够执行4个DP或8个SP FLOP /周期。 这是通过使用SSE完成的,该SSE对打包浮点值进行操作,2 / DP寄存器和SP寄存器中的4 /寄存器。 为了达到4个DP FLOP /周期或8个SP FLOP /周期,核心必须在每个周期执行2个SSE指令。 这是通过每个周期执行MULDP和ADDDP(或MULSP和ADDSP)来完成的。 这是可能的原因是因为Nehalem具有用于SSE乘法和SSE加法的单独执行单元,并且这些单元是流水线式的,因此throughput
是每个周期一个乘法和一个加法。 乘法器流水线中的乘法在SP中有4个周期,在DP中有5个周期。 添加剂在管道中进行3次独立于SP / DP的循环。 管道中的周期数称为latency
。 要计算峰值FLOP /周期,您只需要知道吞吐量。 因此,对于乘法器和加法器(2个执行单元),吞吐量为1 SSE向量指令/周期,DP中有2 x 2 = 4 FLOP /周期,SP中有2 x 4 = 8 FLOP /周期。 要实际维持这个峰值吞吐量,您需要考虑延迟(因此管道中的独立操作数至少与管道深度一样多),并且需要考虑能够足够快地提供数据。 Nehalem拥有一个集成的内存控制器,能够从内存获得非常高的带宽,如果数据预取器能够正确预测数据的访问模式(从内存顺序加载是一种可预期的微不足道的模式),它可以实现这一点。 通常,没有足够的存储器带宽来维持以峰值FLOP /周期为数据提供所有内核,因此为了维持峰值FLOP /周期,必须重新缓存来自缓存的数据量。
有关详细信息,您可以在这里找到有关独立执行单元数量及其吞吐量和周期延迟的信息。
见第105页8.9本文档的执行单元
http://www.agner.org/optimize/microarchitecture.pdf
它对Nehalem说
端口0上的浮点乘法器的单精度延时为4,双精度和长双精度的延时为5。 除了Core2上的长双精度外,浮点乘法器的吞吐量每个时钟周期为1次操作。 浮点加法器连接到端口1.它的延迟为3,并且是完全流水线的。
为了获得8个SP FLOP /周期,您需要4个SP ADD /周期和4个SP MUL /周期。 加法器和乘法器位于不同的执行单元中,并从不同的端口分派,每个可以使用SSE打包(向量)指令(4x32bit = 128bits)同时在4个SP打包操作数上执行。 每个时钟周期都有1个操作的吞吐量。 为了获得吞吐量,您需要考虑延迟......在指令发布后多少个周期才能使用结果..因此您必须发布几条独立的指令来覆盖延迟。 单精度乘法器的延迟为4,加法器为3。
您可以在Intel优化指南表C-15a中找到与Nehalem相同的吞吐量和延迟时间
http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html
链接地址: http://www.djcxy.com/p/85659.html上一篇: floating point operations per cycle
下一篇: Maximum SIMD integer multiplications on Ivy Bridge using SSE/AVX?