GCC 无法矢量化 64 位乘法。64 位 x 64 位 -> 128 位加宽乘法可以在 AVX2 上进行矢量化吗?
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中以矢量形式存在吗?
No。没有64 x 64 -> 128位的算术作为矢量指令。也没有矢量mulhi
型指令(乘的高字结果)。
[V]PMULUDQ可以实现32 x 32 -> 64位,只考虑每秒32位无符号元素或无符号双字作为源,并将每个64位结果扩展为两个结果元素组合为一个无符号四字。
您现在可能希望的最好的是Haswell的MULX指令,它具有更灵活的寄存器使用,并且不影响标志寄存器-消除了一些延迟。
相关文章:
- 普通环路未使用gcc 4.8.5自动矢量化
- 阵列火矢量化
- 使用矢量化c++的矩阵乘法
- 循环中标量乘积的自动矢量化
- 如何在clang++中禁用矢量化
- 加权外积的矢量化
- 手动矢量化/SSE 用于 C++ 中的复杂问题
- 包含比较的循环的自动矢量化
- pcl_ros::transformPointCloud的矢量化
- 迭代卡拉苏巴算法在C++中使用OpenACC并行化和矢量化
- (如何)我可以使用openmp矢量化"std::complex<double>"吗?
- C 矩阵乘法自动矢量化
- 矢量化 :乘以_m256i元素
- 是否可以使用 SSE 对此嵌套进行矢量化?
- 为什么内联函数中的循环无法正确自动矢量化
- 是否保证 OpenMP 矢量化
- AVX,SSE总和比gcc自动矢量化慢
- 嵌套矢量化 OpenMP 循环,在最内层循环中具有多行代码
- 模乘法的矢量化
- GCC 无法矢量化 64 位乘法。64 位 x 64 位 -> 128 位加宽乘法可以在 AVX2 上进行矢量化吗?