提问人:Litherum 提问时间:10/1/2023 更新时间:10/1/2023 访问量:36
使用 AVX-512 乘以“uint64_t”的向量 [复制]
Multiplying vectors of `uint64_t` using AVX-512 [duplicate]
问:
这个问题在这里已经有答案了:
为什么使用 imul 来乘以无符号数字? (2 个答案)
将int64_t数组相乘的最快方法? (2 个答案)
为什么有符号和无符号乘法在x86(-64)上的指令不同? (3 个答案)
为什么有些算术指令有符号/无符号变体,而有些则没有 (1 个答案)
上个月关闭。
是否可以使用 AVX-512 将 2 个向量相乘?根据英特尔的文档,有以下指令将整数向量相乘:uint64_t
PMULDQ
(乘法双字整数),对有符号整数进行操作PMULHRSW
(Packed Multiply High With Round and Scale),对有符号整数进行操作PMULHUW
(Multiply Packed Unsigned Integers and Store High Result),用于存储高结果,而不是低结果PMULHW
(Multiply Packed Signed Integers and Store High Result),用于存储高结果,而不是低结果PMULLD/
PMULLQ
(乘法整数和存储低结果),对有符号整数进行操作PMULLW
(Multiply Packed Signed Integers and Store Low Result),它对有符号整数进行操作PMULUDQ
(Multiply Packed Unsigned Doubleword Integers),它只对双字值进行操作,而不是对四字值进行操作
似乎没有办法在单个 AVX-512 指令中将 2 个向量相乘(并获得低结果),这似乎令人惊讶。真的不可能吗?如果不是,这种遗漏的理由是什么?uint64_t
使用 AVX2 和 AVX-512 性能乘以 64 位整数是关于有符号整数的,因此它没有回答这个问题。将int64_t数组相乘的最快方法?也是关于有符号整数的,所以它也没有回答这个问题。
答: 暂无答案
评论
vpmullq
uint64_t
a[i] *= b[i]
vpmullq
pmullq
vpmullq
vpmullq