Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 失败什么是真正的失败_C_Flops - Fatal编程技术网

C 失败什么是真正的失败

C 失败什么是真正的失败,c,flops,C,Flops,我来自这条线: 当我开始编写简单的测试脚本时,我想到了几个问题 为什么是浮点?我们需要考虑的浮点有什么意义?为什么不是一个简单的int 如果我想测量FLOPS,假设我在做两个向量的内积。这两个向量必须是float[]吗?如果使用int[],测量结果会有什么不同 我不熟悉英特尔体系结构。假设我有以下操作: float a = 3.14159; float b = 3.14158; for(int i = 0; i < 100; ++i) { a + b; } float a=3.1

我来自这条线:

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

  • 为什么是浮点?我们需要考虑的浮点有什么意义?为什么不是一个简单的int

  • 如果我想测量FLOPS,假设我在做两个向量的内积。这两个向量必须是float[]吗?如果使用int[],测量结果会有什么不同

  • 我不熟悉英特尔体系结构。假设我有以下操作:

    float a = 3.14159; float b = 3.14158;
    for(int i = 0; i < 100; ++i) {
        a + b;
    }
    
    float a=3.14159;浮动b=3.14158;
    对于(int i=0;i<100;++i){
    a+b;
    }
    
    这是多少个“浮点运算”

  • 我有点困惑,因为我研究了一个简化的32位MIPS体系结构。对于每条指令,都有32位,比如操作数1为5位,操作数2为5位等等。因此对于英特尔体系结构(特别是上一个线程中的相同体系结构),我被告知寄存器可以容纳128位。对于单精度浮点,每个浮点数32位,这是否意味着对于每个馈送到处理器的指令,可能需要4位 浮点数?难道我们不需要考虑操作数和指令的其他部分所涉及的位吗?我们怎么能把4个浮点数输入到一个cpu而没有任何特定的意义呢


  • 我不知道我把每件事都零零碎碎地考虑的方法是否有意义。如果不是,我应该看多高的透视图?

    每秒浮点运算

    您的示例是100个浮点操作(将两个浮点数相加就是一个浮点操作)。分配浮点数可能算数,也可能不算数

    这个术语显然不是一个精确的度量,因为很明显,双精度浮点运算要比单精度浮点运算花费更长的时间,乘法和除法要比加法和减法花费更长的时间。正如本文所证明的,最终有更好的方法来衡量性能。

    1)因为许多真实世界的应用程序运行时都会处理大量的浮点数,例如,所有基于向量的应用程序(游戏、CAD等)几乎完全依赖于浮点数操作

    2) 触发器用于浮点操作

    3) 一百。流控件使用整数操作


    4) 这种架构最适合ALU。浮点表示可以使用96-128位。

    浮点运算是某些计算问题的限制因素。如果你的问题不是其中之一,你可以放心地忽略失败评级

    英特尔体系结构从简单的80位浮点指令开始,它可以通过舍入加载或存储到64位内存位置。后来他们添加了指令,这些指令使用128位寄存器,可以用一条指令执行多个浮点运算

  • 浮点运算速度对科学计算和计算机图形学至关重要
  • 根据定义,不是。此时您正在测试integer性能
  • 302,见下文
  • x86和x64与MIPS非常不同。MIPS是一种RISC(精简指令集计算机)体系结构,与Intel和AMD提供的CISC(复杂指令集计算机)体系结构相比,其指令量非常少。对于指令解码,x86使用可变宽度指令,因此指令长度在1到16字节之间(包括前缀,可能更大)
  • 128位是关于处理器中浮点的内部表示。它在内部使用真位浮点来尝试避免舍入错误,然后在将数字放回内存时将其截断

    fld  A      //st=[A]
    fld  B      //st=[B, A]
    Loop:
    fld st(1)   //st=[A, B, A]
    fadd st(1)  //st=[A + B, B, A]
    fstp memory //st=[B, A]
    

    哎呀,简化的MIPS。一般来说,这对于入门课程来说是很好的。我要假设一本hennesy/patterson的书

    阅读奔腾体系结构(586)的MMX指令,了解英特尔方法。或者,更一般地说,研究SIMD体系结构,也称为向量处理器体系结构。它们首先由克雷超级计算机普及(尽管我认为有一些先行者)。有关现代SIMD方法,请参阅NVIDIA或市场上不同DSP处理器生产的CUDA方法。

    1。)浮点运算仅代表比固定宽度整数更广泛的数学范围。此外,大量数字或科学应用程序(通常是真正测试CPU纯计算能力的应用程序)可能更依赖于浮点运算

    2.)它们都必须是浮动的。CPU不会添加一个整数和一个浮点,其中一个会被隐式转换(很可能整数会被转换为浮点),所以它仍然只是浮点操作

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

    4.)我不知道如何从这一点开始,你似乎对材料有一个总体的看法,但你混淆了一些细节。是的,单个指令可划分为类似于以下内容的部分:

    |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(!)之间的任意值