霓虹灯:作为 IP 和 OP 的 64 位乘法和累加

Posted

技术标签:

【中文标题】霓虹灯:作为 IP 和 OP 的 64 位乘法和累加【英文标题】:neon:multiply and accumulate for 64 bit as IP & OP 【发布时间】:2015-05-22 11:47:00 【问题描述】:

有没有办法在 neon 中实现以下逻辑。 因为我没有找到任何 64 位输入和输出值的乘法和累加指令。

int64x2_t result;
int64x2_t num1;
int64x2_t num2;

>> result + = num1*num2  <<

【问题讨论】:

【参考方案1】:

从技术上讲,两个 64 位值可能会导致 128 位结果。这就是为什么有以下int64*int32+int32 函数,但没有一个接受两个 64 位输入值的函数。

int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t);
int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t);

如果这些对您不起作用,那么您需要使用标量 64*64 操作,然后使用 vaddq_s64

注意:Visual Studio 为包括 ARM 在内的所有体系结构实现了 _mul128__umul128_mulh__umulh,以处理完整的 64*64 = 128 位方案。

【讨论】:

以上是关于霓虹灯:作为 IP 和 OP 的 64 位乘法和累加的主要内容,如果未能解决你的问题,请参考以下文章

为啥乘法、加法的霓虹内在函数比运算符慢?

如何在霓虹灯中进行交叉乘法?

64位整数乘法讲解-And-AcWing-90. 64位整数乘法

64位整数乘法讲解-And-AcWing-90. 64位整数乘法-方法二

64位整数乘法讲解-And-AcWing-90. 64位整数乘法-《算法竞赛进阶指南》

64位整数乘法讲解-And-AcWing-90. 64位整数乘法-方法二-《算法竞赛进阶指南》