相关疑难解决方法(0)

快速硬件整数除法

整数除法的硬件指令历来非常慢。例如,对于 64 位输入,Skylake 上的 DIVQ 延迟为 42-95 个周期 [1](吞吐量倒数为 24-90)。

然而,有更新的处理器,其性能要好得多:Goldmont 具有 14-43 延迟,Ryzen 具有 14-47 延迟 [1],M1 显然具有“每分频 2 个时钟周期的吞吐量”[2],甚至 Raspberry Pico 也具有“8 -循环有符号/无符号除法/模电路,每个核心”(尽管这似乎适用于 32 位输入)[3]。

我的问题是,发生了什么变化?是否发明了新的算法?无论如何,新处理器采用什么算法进行除法?

[1] https://www.agner.org/optimize/#manuals
[2] https://ridiculousfish.com/blog/posts/benchmarking-libdivide-m1-avx512.html
[3] https://raspberrypi。 github.io/pico-sdk-doxygen/group__hardware__divider.html#details

performance x86 arm cpu-architecture integer-division

9
推荐指数
1
解决办法
3612
查看次数

7
推荐指数
1
解决办法
2043
查看次数

整数除法主要用于什么?

https://ridiculousfish.com/blog/posts/benchmarking-libdivide-m1-avx512.html的分析发现,新的 Apple CPU 花费了大量资源使整数除法速度大大加快。

这是一件令人惊讶的事情。根据我的经验,整数除法并没有真正使用,除非在除以编译时间常数的情况下,可以用移位或乘法代替。

更令人惊讶的是在https://news.ycombinator.com/item?id=27133804的讨论中有人说

当我一直在对性能关键代码进行微优化时,整数除法经常作为一个热点出现。

现在我真的很好奇:人们在做什么,使整数除法成为瓶颈?我正在考虑可以在哪里使用它。我见过的案例:

  • 浮点模拟。但是现在,唯一没有硬件浮点的 CPU 是微型微控制器,无论如何也不会有硬件整数除法。

  • 带有桶数的哈希表是素数,以获得一点额外的随机性。但是人们早就知道这不是最好的做事方式。如果您不相信您的散列函数提供足够的随机性,请获得更好的散列函数。

  • 使用固定点坐标的早期 3D,如 PlayStation 1。但是现在每个人都在做浮点 3D。

那么所有这些整数除法究竟是用来做什么的呢?

performance cpu-architecture division integer-division instructions

7
推荐指数
0
解决办法
90
查看次数

GCC的sqrt()如何在编译后工作?使用哪种root方法?牛顿迭代?

sqrt()关于GCC的math.h 标准的好奇心.我sqrt()使用Newton-Raphson 编写了自己的代码!

c math assembly function sqrt

5
推荐指数
2
解决办法
239
查看次数