SSE vectorização da função matemática 'pow' gcc

Eu estava tentando vetorizar um loop que contenha o uso da função 'pow' na biblioteca de matemática. Estou ciente de que o compilador intel suporta o uso de 'pow' para obter instruções sse - mas não consigo executá-lo com o gcc (acho). Este é o caso com o qual estou trabalhando:

int main(){
        int i=0;
        float a[256],
        b[256];

        float x= 2.3;


        for  (i =0 ; i<256; i++){
                a[i]=1.5;
        }

        for (i=0; i<256; i++){
                b[i]=pow(a[i],x);
        }

        for (i=0; i<256; i++){
                b[i]=a[i]*a[i];
        }
    return 0;

}

Estou compilando com o seguinte:

gcc -O3 -Wall -ftree-vectorize -msse2 -ftree-vectorizer-verbose=5 code.c -o runthis

Este é no OS X 10.5.8 usando o gcc versão 4.2 (eu usei o 4.5 também e não sabia dizer se havia vetorizado alguma coisa - pois não produzia nada). Parece que nenhum dos loops se vetoriza - existe um problema de alinhamento ou algum outro problema que eu não preciso restringir? Se eu escrever um dos loops como uma função, recebo uma saída um pouco mais detalhada (código):

void pow2(float *a, float * b, int n) {
        int i;
        for (i=0; i<n; i++){
                b[i]=a[i]*a[i];
        }
}

output (usando saída detalhada de nível 7):

note: not vectorized: can't determine dependence between *D.2878_13 and *D.2877_8
bad data dependence.

Eu olhei para ogcc auto-vetorização página, mas isso não ajudou muito. Se não for possível usar o pow na versão gcc, onde posso encontrar o recurso para executar uma função equivalente ao pow (estou lidando principalmente com potências inteiras

Edita então eu estava apenas pesquisando em outra fonte - como ela vetorizou isso?!:

void array_op(double * d,int len,double value,void (*f)(double*,double*) ) { 
    for ( int i = 0; i < len; i++ ){
        f(&d[i],&value);
    }
};

A saída relevante do gcc:

note: Profitability threshold is 3 loop iterations.

note: LOOP VECTORIZED.

Bem, agora estou perdida - 'd' e 'value' são modificados por uma função que o gcc não conhece - estranho? Talvez eu precise testar essa parte um pouco mais detalhadamente para garantir que os resultados estejam corretos para a porção vetorizada. Ainda está procurando uma biblioteca de matemática vetorizada - por que não há nenhuma de código aberto?

questionAnswers(2)

yourAnswerToTheQuestion