Я векторизовал программу, которая содержит следующие строки кода:
#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
}
Я запускаю компилятор GCC с -fopt-info-vec-optimized
, проверяю вывод и обнаруживаю, что этот раздел кода не векторизован. Однако, если я напишу тот же код, что и следующий
#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 () также являются функциями.