簡體   English   中英

GCC無法對64位乘法進行矢量化。 可以在AVX2上對64位x 64位 - > 128位加寬乘法進行矢量化嗎?

[英]GCC couldn't vectorize 64-bit multiplication. Can 64-bit x 64-bit -> 128-bit widening multiplication be vectorized on AVX2?

我嘗試對使用64位加寬乘法的CBR​​NG進行矢量化。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM