现代X86处理器如何实际计算乘法?

时间:2014-10-14 21:03:59

标签: algorithm x86

我正在观看关于算法的一些讲座,教授使用乘法作为如何改进天真算法的一个例子......

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

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

3 个答案:

答案 0 :(得分:5)

Mitch Alsup(曾在Motorola 88K,Ross SPARC,AMD x86等产品上工作过)在comp.arch新闻组中表示:

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

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

(并且(关于AMD / Intel / NVIDIA使用哪种乘法机制的最新参考文献的可用性):

仅在专利局中。

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

有关Dadda tree multipliers的信息,请参阅Wikipedia。

答案 1 :(得分:1)

有一系列可在CPU中使用的乘法过程。例如,大多数计算机体系结构/组织课程中讲授的2补码二进制数的Booth乘数。二进制乘法比十进制表示更简单。计算偏积很简单。被乘数M(如果乘数位为1)或0(如果乘数位为0)。将其与十进制数进行比较,十进制数可以介于0 * M到9 * M之间。每当有人设计定制CPU(例如FPGA上的软核)时,开发人员都可以选择适当的乘法过程。一些常用的是CORDIC乘法器,Radix-2,Radix-4,Radix-8 ...展位乘法器。所有这些乘法器算法都会生成部分乘积(如手动乘法)。所有部分产品都将添加为最终产品。在现代处理器中,有多种方法可以完成此操作,例如使用Dadda乘法器,华莱士树。

简单地说,每个处理器设计人员都可以使用任何乘数算法来生成部分乘积并添加部分乘积以获得最终结果。取决于处理器寄存器内部使用的二进制表示形式(以位为单位的寄存器大小),最佳算法将有所不同。

答案 2 :(得分:0)

现代处理器具有板载数学协处理器。我相信它们包含LUT(查找表)以进行乘法运算。