c/c++语言开发共享FLOPS真正的FLOP

我来自这个主题: FLOPS英特尔核心并用C(内部产品)测试它

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

我不知道我的方法是否有点理解。 如果没有,我应该关注什么“高度”的视角?

    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位值进行操作,这与指令的大小无关。 不幸的是,由于它是一个CISC架构,x86没有与MIPS类似的指令细分。 x86指令可以包含1到16(!)个字节之间的任何值。

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

    每秒浮点运算。

    您的示例是100个浮点运算(将两个浮点数加在一起是一个浮点运算)。 分配浮点数可能会也可能不会计算。

    这个术语显然不是一个精确的测量,因为很明显双精度浮点运算需要比单精度浮点运算更长的时间,并且乘法和除法比加法和减法需要更长的时间。 正如维基百科的文章certificate的那样,最终有更好的方法来衡量绩效。

    1)因为许多真实世界的应用程序运行很多浮点数,例如所有基于矢量的应用程序(游戏,CAD等)几乎完全依赖于浮点运算。

    2)FLOPS用于浮点运算。

    3)100。流控制使用整数运算

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

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

    英特尔架构从简单的80位浮点指令开始,可以加载或存储到具有舍入的64位存储器位置。 后来他们添加了SSE指令,这些指令使用128位寄存器,并且可以使用单个指令执行多个浮点运算。

    哎呀,简化的MIPS。 通常,这对于入门课程来说很好。 我要承担一本hennesy / patterson书?

    阅读针对Intel方法的Pentium架构(586)的MMX指令。 或者,更一般地,研究SIMD架构,也称为矢量处理器架构。 它们首先被Cray超级计算机推广(尽管我认为有一些先行者)。 对于现代SIMD方法,请参阅NVIDIA生产的CUDA方法或市场上的不同DSP处理器。

    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] 

    除了使用其他提到的答案之外,人们称之为“量子”的人现在使用浮点数学来进行融资。 一个名叫David E. Shaw的家伙于1988年开始将浮点数学运用于华尔街建模,截至2009年9月30日,价值25亿美元,在福布斯400位富豪榜上排名第123位。

    所以值得学习浮点数学!

    1)浮点很重要,因为有时我们想要表示非常大或非常小的数字,而整数并不是那么好。 阅读IEEE-754标准,但尾数就像整数部分,我们交换一些位作为指数,这样就可以表示更大范围的数字。

    2)如果两个向量是整数,则不会测量FLOPS。 如果一个向量是int而另一个是float,那么你将进行大量的int-> float转换,我们应该认为这样的转换是FLOP。

    3/4)英特尔架构上的浮点运算非常具有异国情调。 它实际上是一个基于堆栈的单操作数指令集(通常)。 例如,在您的示例中,您将使用一条带有操作码的指令,该操作码将内存操作数加载到FPU堆栈的顶部,然后您将使用带有操作码的另一条指令,该操作码将内存操作数添加到FPU堆栈的顶部,最后是另一条带有操作码的指令,该操作码将FPU堆栈的顶部弹出到内存操作数。

    这个网站列出了很多操作。

    我确定英特尔会在某处发布实际的操作码,如果你真的那么感兴趣的话。

      以上就是c/c++开发分享FLOPS真正的FLOP相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/544832.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐