小编thn*_*ghh的帖子

使用 AVX512 或 AVX2 计算所有打包 32 位整数总和的最快方法

我正在寻找一种最佳方法来计算 a __m256ior中所有打包的 32 位整数的总和__m512i。为了计算n 个元素的总和,我经常使用log2(n) vpadddvpermd函数,然后提取最终结果。但是,这不是我认为的最佳选择。

编辑:在速度/周期减少方面最佳/最佳。

c intrinsics avx avx2 avx512

5
推荐指数
1
解决办法
1772
查看次数

有没有一种方法可以声明一个不包含<complex.h>的复数?

我想使用该<complex.h>库来加速某些计算,其中可能包括多达20个复杂元素和运算(+-* /)。但是,我的同事声明了一个结构:

struct complex {
    double a;
    double b;
};
Run Code Online (Sandbox Code Playgroud)

因此,complex由于与上述结构冲突,无法使用来自库的宏。

事实是,由于对当前项目的巨大影响,我无法更改结构的名称。我尝试使用_Complex宏来代替,并取出#include <complex.h>头,它的工作,但_Imaginary_I_Complex_I还是I不起作用。

#include <stdio.h>      /* Standard Library of Input and Output */
// #include <complex.h>    /* I want to remove this */    

int main() {
    struct complex
    {
        double a;
        double b;
    };
    double _Complex z1 = 1.0;// + 3.0 * _Complex_I;
    double _Complex z2 = 1.0;// - 4.0 * _Complex_I;    

    // none of these …
Run Code Online (Sandbox Code Playgroud)

c c99 standard-library header-files complex-numbers

0
推荐指数
1
解决办法
84
查看次数

使用 AVX512 将压缩的 64 位整数转换为带符号饱和的压缩 8 位整数

我正在寻找将压缩的 64 位整数饱和为 8 位整数的解决方案。看着_mm256_cvtepi64_epi8但不是饱和,它截断了导致不需要的输出。

我的程序如下:

int main()
{
    __m256i a, b, c;
    __m128i d;

    a = _mm256_set1_epi64x(127);
    b = _mm256_set1_epi64x(1);
    c = _mm256_add_epi64x(a, b);
    d = _mm256_cvtepi64_epi8(c);
}
Run Code Online (Sandbox Code Playgroud)

我希望输出 (d) 包含四个127(饱和),但是程序产生四个-128元素(从 截断128)。

c intrinsics avx avx512

0
推荐指数
1
解决办法
422
查看次数