我已经寻找了很长一段时间,似乎找不到一个官方的/决定性的数字,引用了一个英特尔Xeon四核可以完成的单个精确浮点操作/时钟周期的数量。我有一个英特尔Xeon四核E5530处理器。
我希望用它来计算我的CPU所能达到的最大理论触发器。
最大触发器= (#核数)*(时钟频率(周期/秒))* (#触发器/周期)
任何指向正确方向的东西都是有用的。我找到了这个沙桥和haswell SSE2 2/AVX/AVX 2的每周期滑道
Intel Core 2和Nehalem: 4 DP触发器/周期:2宽SSE2加法+2宽SSE2乘法 8个SP触发器/周期:4宽SSE加法+4宽SSE乘法
但我不知道这些数字是在哪里找到的。他们是否假设一个融合乘法加法(FMAD)操作?
编辑:使用这个,在DP中,我计算出英特尔引用的正确的DP算术吞吐量为38.4GFLOP/s(引用了这里)。对于SP,我得到了两倍,76.8GFLOP/s。我很确定4DP触发器/周期和8个SP触发器/周期是正确的,我只想确认它们是如何得到FLOPs/周期值4和8的。
发布于 2014-04-21 19:18:55
Nehalem能够执行4 DP或8 SP触发器/周期。这是使用SSE实现的,SSE对填充浮点值进行操作,DP中使用2/寄存器,SP中使用4/寄存器。为了实现4个DP触发器/周期或8个SP触发器/周期,核心必须每个周期执行2个SSE指令。这是通过每个周期执行MULDP和ADDDP (或MULSP和ADDSP)来实现的。之所以可以这样做,是因为Nehalem为SSE乘和SSE add有单独的执行单元,并且这些单元是流水线的,因此throughput是一个乘和一个加一个循环。乘法器在SP中有4个循环,在DP中有5个循环。与SP/DP无关,Adds在流水线上运行了3个周期。管道中的循环数称为latency。要计算峰值触发器/周期,您只需要知道吞吐量。因此,对于乘法器和加法器(2个执行单元),吞吐量为1 SSE向量指令/周期时,DP中为2x2=4触发器/周期,SP为2x4=8触发器/周期。要真正维持这个高峰吞吐量,您需要考虑延迟(因此,在管道中至少有与管道深度一样多的独立操作),并且需要考虑是否能够足够快地提供数据。Nehalem有一个集成的存储器控制器,它能够从内存中获得很高的带宽,如果数据预取器正确地预测数据的访问模式(从内存中顺序加载是它可以预测的一个微不足道的模式),它就可以实现这个功能。通常,没有足够的内存带宽来支持以峰值触发器/周期的方式向所有核心提供数据,因此需要对缓存中的数据进行一定量的重用才能维持峰值触发器/周期。
以下是有关独立执行单元的数量及其吞吐量和延迟的详细信息。
见本文档第105页8.9执行单元
http://www.agner.org/optimize/microarchitecture.pdf
上面写着尼哈勒姆
端口0上的浮点乘法器对于单精度和双长双精度的延迟分别为4和5。浮点乘法器的吞吐量除在Core2上长双精度外,每时钟周期为1次运算。浮点加法器连接到端口1,延时为3,完全流水线。
为了得到8个SP触发器/周期,您需要4个SP添加/循环和4个SP MUL/周期。加法器和乘法器在单独的执行单元上,并从不同的端口分配,每个加法器都可以使用SSE打包(向量)指令(4x32位=128位)在4个SP打包操作数上同时执行。两者的吞吐量为每个时钟周期一个操作。为了获得吞吐量,您需要考虑延迟.在使用结果之前,在指令问题发生后有多少周期。因此,您必须发布几个独立的指令来覆盖延迟。单精度乘法器的延时为4,加法器为3。
您可以在Intel优化指南(表C-15a )中找到Nehalem的这些相同的吞吐量和延迟号。
http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html
https://stackoverflow.com/questions/23203710
复制相似问题