4

我正在看一些关于算法的讲座,教授用乘法作为如何改进朴素算法的例子......

它让我意识到乘法并不是那么明显,虽然当我编码时我只是认为它是一个简单的原子操作,乘法需要一个算法来运行,它不像求和数字那样工作。

所以我想知道,现代桌面处理器实际使用什么算法?我猜他们不依赖对数表,也不用数千和循环......

4

3 回答 3

6

Mitch Alsup(曾参与摩托罗拉 88K、Ross SPARC、AMD x86 等)在 comp.arch 新闻组中表示:

所有现代乘法器设计者都使用 Dadda 方法来构建树。

消息 ID:<c45d9d2e-039d-4085-a617-d90f7a3b1f93@googlegroups.com> — 2018 年 12 月 14 日)

和(关于 AMD/Intel/NVIDIA 使用哪些乘法机制的最新参考资料):

只有在专利局。

消息 ID:<d92d1961-a3e4-441e-8b3d-b9ce6bd24b58@googlegroups.com> — 2020 年 1 月 14 日)

有关达达树乘数的信息,请参阅 Wikipedia 。

于 2020-05-31T14:10:58.370 回答
1

在 CPU 中可以使用一系列乘法程序。例如,大多数计算机体系结构/组织课程中教授的 2 的补码二进制数的 Booth 乘数。二进制乘法比十进制乘法更简单。计算部分产品很简单。被乘数,M,(如果乘数位为 1)或 0(如果乘数位为 0)。将其与十进制比较,它可以是(0*M 到 9*M)之间的任何值。每当有人设计定制 CPU(如 FPGA 上的软核)时,开发人员都可以选择适当的乘法程序。一些常用的是CORDIC乘法器、Radix-2、Radix-4、Radix-8...展台乘法器。所有这些乘法器算法都会生成部分乘积(如手动乘法)。添加所有部分产品以获得最终产品。

简而言之,每个处理器设计人员都可以使用任何乘法器算法来生成部分乘积并将部分乘积相加得到最终结果。根据处理器寄存器内部使用的二进制表示、寄存器大小(以位为单位),最佳算法会有所不同。

于 2020-06-06T06:33:00.520 回答
0

现代处理器具有板载数学协处理器。我相信它们包含用于乘法的 LUT(查找表)。

于 2014-10-14T21:23:21.997 回答