我正在矢量化包含以下代码行的程序:
#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()也是函数。