关于任意精度算术:AVX-512可以用来在C++中的64位计算机上计算两个256位整数的乘法吗? 在 C++ 编译器中,结果是否存在 512 位的内在整数数据类型,使其成为可能?
如果不可能,可以用汇编语言完成吗?如果是,能否从 C++ 程序中调用该汇编语言例程? 64 位整数数据类型可以在不使用字符串的情况下使用汇编语言例程的 512 位结果吗?
是和不是。
不,AVX-512 没有将两个 256 位操作数相乘以获得 512 位结果的指令。您可以相乘的最大操作数为 64 位,以获得 128 位结果。
因此,要进行 256 位操作数的乘法,您的操作有点像小学乘法。只不过您希望将 256 位数字基本上视为基数为 264 的 4 位数字。所以,你有这样的东西:
D C B A
H G F E
--------------------
ED EC EB EA
FD FC FB FA 0
GD GC GB GA 0 0
HD HC HB HA 0 0 0
--------------------
[其中 DH 表示
D*H
,CD 表示 C*D
,依此类推。]
就像我们在小学时所做的那样,我们将一个的每个数字乘以另一个的每个数字,将每个数字的高位带到下一列,并将所有部分乘积加在一起以获得最终结果。
区别在于,每个数字不是 0 到 9 之间的数字,在本例中,每个数字都是从 0 到 264-1。
但是,是的,由于您必须对多个操作数中的每个操作数执行相同的操作,因此使用向量指令并行执行它们是完全合理的。但这仍然是一堆操作,每个操作需要两个 64 位输入并产生一个 128 位结果,然后我们将其加在一起以获得最终结果。