当前位置:  开发笔记 > 编程语言 > 正文

在多少个时钟脉冲计算窦?

如何解决《在多少个时钟脉冲计算窦?》经验,为你挑选了2个好方法。

Sinus和Cosinus的装配看起来非常简单:

FSin
FCOS

但这是否意味着它们是在一个时钟周期内计算出来的?

它们背后的计算似乎很复杂.



1> Peter Cordes..:

我们应该将其视为过于宽泛吗?异地资源请求也适用,因为直接答案在Agner Fog的指令表中.(12月23日更新了Broadwell和Skylake CPU :)另请参阅x86 wiki.

解释为什么一条指令并不意味着一个周期要复杂得多,但可以说微编码的x87 FPU指令很慢.Intel Haswell fsin:47-106c延迟.71-100微博.

添加/ sub/mul/div和sqrt都具有快速硬件支持.Skylake可以使用4个单精度float元素的sqrt向量,每3个时钟的吞吐量为1,而Haswell每7个时钟.(标量相同:sqrtps并且sqrtss在这些CPU上具有相同的性能.)延迟为11或12个时钟.

对于SSE Sine,找到您最喜欢的软件实现并对其进行基准测试.



2> wallyk..:

看看8087的指令时序,这是1980年推出的原装英特尔浮点单元,它是一个独立的芯片,设计与8088或8086配对,售价为90至300美元!

即使FABS是单指令,它也可能需要10到17个时钟周期才能完成,这是其指令集中最快的指令之一:只有FCLEX(清除异常)在2到8个周期内更快(不想法为什么会有这样的变化 - 这对我来说当然没有意义).

最慢的单个FPU指令是900到1100个周期的FYL2X(Y*log 2 X).标准8086的时钟频率为5 MHz,因此该指令执行时间可能长达0.22毫秒.从那时起,FPU速度大大提高!在8086上,没有指令在2个周期内执行,只有少数是2个(如NOP和CBW).

您可能会注意到,在该指令时序表中,8087和80287中没有FSIN和FCOS.编译器提供了运行时库,它们使用FPU函数的部分超越函数来计算它们.当指令首次在80387中引入时,它们需要122到771个周期才能执行.请注意,与8087/80287相比,387周期要求是"奇数":有些要高一些,有些则要低一些.


也许FCLEX执行时间取决于是否有任何必须实际清除的待处理异常?有趣的历史观点; 我甚至没有考虑过从这个角度回答.这确实使Skylake的每3个时钟周期内的四个单精度sqrt结果令人印象深刻!(或每4-7个时钟一个80bit x87 FSQRT).
推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有