gpt4 book ai didi

cpu - 每个周期的浮点运算 - 英特尔

转载 作者:行者123 更新时间:2023-12-04 11:52:22 41 4
gpt4 key购买 nike

我一直在寻找很长一段时间,似乎无法找到一个官方/结论性的数字来引用英特尔至强四核可以完成的单精度浮点运算/时钟周期的数量。我有一个 Intel Xeon 四核 E5530 CPU。
我希望用它来计算我的 CPU 可以达到的最大理论 FLOP/s。
MAX FLOPS = (# 核心数) * (时钟频率 (周期/秒)) * (# FLOPS/周期)
任何指向我正确方向的东西都会很有用。我找到了这个
FLOPS per cycle for sandy-bridge and haswell SSE2/AVX/AVX2

Intel Core 2 and Nehalem:

4 DP FLOPs/cycle: 2-wide SSE2 addition + 2-wide SSE2 multiplication

8 SP FLOPs/cycle: 4-wide SSE addition + 4-wide SSE multiplication


但我不确定这些数字是在哪里找到的。他们是否假设一个融合乘加(FMAD)操作?
编辑:使用它,在 DP 中,我计算出英特尔引用的正确 DP 算术吞吐量为 38.4 GFLOP/s(引用 here )。对于 SP,我得到了两倍,76.8 GFLOP/s。我很确定 4 DP FLOP/cycle 和 8 SP FLOP/cycle 是正确的,我只想确认他们如何获得 4 和 8 的 FLOPs/cycle 值。

最佳答案

Nehalem 能够执行 4 DP 或 8 SP FLOP/cycle。这是使用 SSE 完成的,它对压缩浮点值、DP 中的 2/寄存器和 SP 中的 4/寄存器进行操作。为了实现 4 DP FLOP/cycle 或 8 SP FLOP/cycle,内核必须在每个周期执行 2 个 SSE 指令。这是通过在每个周期执行一个 MULDP 和一个 ADDDP(或一个 MULSP 和一个 ADDSP)来完成的。这是可能的原因是因为 Nehalem 有单独的执行单元用于 SSE 乘法和 SSE 加法,并且这些单元是流水线的,因此 throughput是每个周期一次乘法和一次加法。乘法器流水线中的乘法器在 SP 中为 4 个周期,在 DP 中为 5 个周期。添加在流水线中持续 3 个周期,与 SP/DP 无关。管道中的周期数称为 latency .要计算峰值 FLOP/cycle,您只需要知道吞吐量。因此,乘法器和加法器(2 个执行单元)的吞吐量均为 1 个 SSE 向量指令/周期,DP 中有 2 x 2 = 4 FLOP/周期,SP 中有 2 x 4 = 8 FLOP/周期。为了实际维持这个峰值吞吐量,您需要考虑延迟(因此您在管道中至少有与管道深度一样多的独立操作)并且您需要考虑能够足够快地提供数据。 Nehalem 有一个集成的内存 Controller ,能够从内存中获得非常高的带宽,如果数据预取器正确地预测数据的访问模式(从内存中顺序加载是它可以预测的一个微不足道的模式),它就可以实现这一目标。通常没有足够的内存带宽来维持以峰值 FLOP/周期向所有内核提供数据,因此需要对缓存中的数据进行一定量的重用以维持峰值 FLOP/周期。

以下是有关在何处可以找到有关独立执行单元数量及其吞吐量和周期延迟的信息的详细信息。

见第 105 页 8.9 执行单元本文件的

http://www.agner.org/optimize/microarchitecture.pdf

它说对于尼哈勒姆

The floating point multiplier on port 0 has a latency of 4 for single precision and 5 for double and long double precision. The throughput of the floating point multiplier is 1 operation per clock cycle, except for long double precision on Core2. The floating point adder is connected to port 1. It has a latency of 3 and is fully pipelined.



为了获得 8 SP FLOP/cycle,您需要 4 SP ADD/cycle 和 4 SP MUL/cycle。加法器和乘法器位于不同的执行单元上,并从不同的端口分派(dispatch),每个都可以使用 SSE 压缩(向量)指令(4x32 位 = 128 位)同时在 4 个 SP 压缩操作数上执行。两者都具有每个时钟周期 1 次操作的吞吐量。为了获得该吞吐量,您需要考虑延迟......指令发出后多少个周期才能使用结果......所以您必须发出几个独立的指令来覆盖延迟。单精度乘法器的延迟为 4,加法器为 3。

您可以在英特尔优化指南的表 C-15a 中找到 Nehalem 的这些相同吞吐量和延迟数字

http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html

关于cpu - 每个周期的浮点运算 - 英特尔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23203710/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com