Conj()和向量化

时间:2019-05-03 14:17:52

标签: c openmp vectorization complex-numbers

我正在矢量化包含以下代码行的程序:

    #pragma omp parallel for simd aligned(g_0:sizeof(complex double))
    for(int i=0;i<vectorSize;i++)
    {
        g_0[i]=conj(g_0[i]);    //block SIMD FAIL
    }

我使用-fopt-info-vec-optimized运行GCC编译器并检查输出,发现这部分代码没有向量化。但是,如果我编写与下面相同的代码

    #pragma omp parallel for simd aligned(g_0:sizeof(complex double))
    for(int i=0;i<vectorSize;i++)
    {
        g_0[i]=creal( g_0[i]) -cimag( g_0[i]);  //block SIMD PASS
    }

然后代码将向量化。我不明白的是,这两个代码都使用相同的标头库中的函数来执行相同的结果,那么为什么一个矢量化而另一个不矢量化呢?我感觉这是由于函数本身引起的,但是,我希望第二个代码也不会矢量化,因为creal()和cimag()也是函数。

0 个答案:

没有答案