gpt4 book ai didi

c++ - GCC 无法矢量化 64 位乘法。可以在 AVX2 上矢量化 64 位 x 64 位 -> 128 位加宽乘法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:23 28 4
gpt4 key购买 nike

我尝试对使用 64 位加宽乘法的 CBRNG 进行向量化。

static __inline__ uint64_t mulhilo64(uint64_t a, uint64_t b, uint64_t* hip) {
__uint128_t product = ((__uint128_t)a)*((__uint128_t)b);
*hip = product>>64;
return (uint64_t)product;
}

这样的乘法在 AVX2 中是否以 vector 形式存在?

最佳答案

没有。没有 64 x 64 -> 128 位算术作为 vector 指令。也没有 vector mulhi 类型的指令(乘法的高位字结果)。

[V]PMULUDQ 可以做 32 x 32 -> 64 位,只需考虑每隔一个 32 位无符号元素或无符号双字作为源,并将每个 64 位结果扩展为两个结果元素组合为一个无符号四字。

您现在可能希望得到的最好结果是 Haswell 的 MULX 指令,它具有更灵活的寄存器使用,并且不会影响标志寄存器 - 消除了一些停顿。

关于c++ - GCC 无法矢量化 64 位乘法。可以在 AVX2 上矢量化 64 位 x 64 位 -> 128 位加宽乘法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24569654/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com