FP部门和SQRT的延迟与输入数据有何不同,还是仅键入? 我最近一直在研究CPU指令的延迟和吞吐量,甚至为实验编写了一些基准。 但是,我正在努力了解如何正确基准测试

问题描述 投票:0回答:1
fsqrt

)正确基准测试指令。我正在使用ARM工作,但也使用

divsd

等在X86上尝试了相同的操作。如何确定最小化或最大化延迟的特定输入值?

因此,到目前为止,我唯一能够达到潜伏期范围的极端的唯一途径(例如,
fdiv
-最小:7个周期,最大:10个周期)是更改数据类型(从双重到浮点到__FP16)。在大会中,我可以看到
fdiv
仅与寄存器的下半部分成较低精确的情况。
这意味着数据类型是影响潜伏期的唯一因素?或者在给定数据类型中是否存在特定的输入值,以使划分更快或较慢?
    

tl-dr;数据可能会影响周期,但不太可能。 您需要阅读技术文档才能知道。

division和SQRT都可以通过复发关系和/或表实现。您可以通过tabled table
来制作任何一个时钟。表太大了,对于128位数据类型,需要复发。 Stam表是通过位运行的有趣插值。 STAM也可以用作复发的初始较低精度猜测,例如
 -Goldschmidt
。复发关系可以固定或运行直至终止条件。这将定义其是否取决于输入。即,如果所有输入,则避免了步骤3,这是在n轮之后进行的。 n轮可以在硬件中扩展。表(低精度)始终是恒定的时间。

对于每种设计,您需要阅读手册/文档以了解有效的模式。回合可以在内部运行,并且比CPU时钟更快。因此,复发结构的回合并不总是转化为CPU延迟。

Goldschmidtsqrt()

。当然还有其他复发方法(但是Goldschmidt的方法很容易理解其工作原理,但更难看到原因)。
assembly x86 arm cpu cpu-architecture
1个回答
0
投票
的单一目标,否则它将不惜一切代价避免。

runs,例如0x5555 ...和0xaaaa ...通常对于乘数/划分很费力。 (尝试:

Multiplicationradix 2 radix4
)。另外,有两个问题。 IE。吞吐量和延迟(多重分区操作率可能高于时钟以获得结果)。平方根也一样。数据大小对性能最有影响。 只有两个功率的数字可能是最快的(如果指令取决于数据)。 newtons方法是更常见的复发关系。 它将在许多本科课程中进行研究。 Newtons方法更容易理解它的作用。 您需要将内部位与操作损失精确限制,以使OpCode对数据类型宽度的位置准确。 这是修复重复实现的指令巡回赛的另一个原因[Opcode提供正确的结果的分析更容易]。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.