gpt4 book ai didi

c - FLOPS 什么是真正的 FLOP

转载 作者:太空狗 更新时间:2023-10-29 16:00:04 24 4
gpt4 key购买 nike

我来自这个线程:FLOPS Intel core and testing it with C (innerproduct)

当我开始编写简单的测试脚本时,我想到了几个问题。

  1. 为什么是 float ?我们必须考虑的 float 有何重要意义?为什么不是简单的 int?

  2. 如果我想测量 FLOPS,假设我正在计算两个 vector 的内积。这两个 vector 必须是 float[] 吗?如果我使用 int[],测量会有什么不同?

  3. 我不熟悉英特尔架构。假设我有以下操作:

    float a = 3.14159; float b = 3.14158;
    for(int i = 0; i < 100; ++i) {
    a + b;
    }

    这是多少个“浮点运算”?

  4. 我有点困惑,因为我研究了一个简化的 32 位 MIPS 架构。对于每条指令,有 32 位,例如操作数 1 有 5 位,操作数 2 有 5 位等。所以对于英特尔架构(特别是与前一个线程相同的架构),我被告知寄存器可以容纳 128 位。对于单精度 float ,每个 float 32 位,这是否意味着对于提供给处理器的每条指令,它可能需要 4 float 字?难道我们还必须考虑操作数和指令其他部分中涉及的位吗?我们怎么能在没有任何特定意义的情况下将 4 个 float 提供给 cpu?

我不知道我将所有事情都点点滴滴地思考的方法是否有意义。如果不是,我应该看什么“高度”的视角?

最佳答案

1.) 浮点运算仅表示比固定宽度整数更广泛的数学运算。此外,大量数字或科学应用程序(通常是实际测试 CPU 的纯计算能力的应用程序)可能比任何东西都更依赖浮点运算。

2.) 它们都必须是 float 的。 CPU 不会将整数和 float 相加,一个或另一个会隐式转换(整数很可能会转换为 float ),因此它仍然只是浮点运算。

3.) 那将是 100 个浮点运算,以及 100 个整数运算,以及一些(100?)控制流/分支/比较运算。通常也会有加载和存储,但你似乎没有存储值:)

4.) 我不确定如何从这个开始,您似乎对 Material 有一个大致的了解,但您混淆了一些细节。是的,可以将单个指令分成类似于以下部分:

|OP CODE | Operand 1 | Operand 2 | (among many, many others)

但是,操作数 1 和操作数 2 不必包含要相加的实际值。它们可以只包含要添加的寄存器。以这条 SSE 指令为例:

mulps      %%xmm3, %%xmm1

它告诉执行单元将寄存器xmm3 的内容与xmm1 的内容相乘,并将结果存储在xmm3 中。由于寄存器保存 128 位值,我正在对 128 位值执行操作,这与指令的大小无关。不幸的是,x86 没有与 MIPS 类似的指令分解,因为它是 CISC 架构。一条 x86 指令的长度可以在 1 到 16(!) 字节之间。

至于您的问题,我认为了解这些都是非常有趣的东西,它可以帮助您建立对数学密集型程序速度的直觉,并让您了解优化时要达到的上限。不过,我绝不会尝试将其与程序的实际运行时间直接相关联,因为太多其他因素会影响实际的最终性能。

关于c - FLOPS 什么是真正的 FLOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1541725/

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