![](/img/trans.png)
[英]Is it really efficient to use Karatsuba algorithm in 64-bit x 64-bit multiplication?
[英]GCC couldn't vectorize 64-bit multiplication. Can 64-bit x 64-bit -> 128-bit widening multiplication be vectorized on AVX2?
我嘗試對使用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中是否以矢量化形式存在?
沒有。作為矢量指令,沒有64 x 64 - > 128位算術。 也沒有矢量mulhi
類型指令(乘法的高字結果)。
[V] PMULUDQ只能將每秒32位無符號元素或無符號雙字作為源,並將每個64位結果擴展為兩個結果元素組合為無符號四字,從而可以執行32 x 32 - > 64位。
您現在可能希望的最好的是Haswell的MULX指令,它具有更靈活的寄存器使用,並且不會影響標志寄存器 - 消除了一些停頓。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.