Подтвердить что ты не робот

Как можно получить gccgo для создания векторизованного кода?

Я пытаюсь убедить gccgo без успеха в векторизации следующего фрагмента:

package foo

func Sum(v []float32) float32 {
    var sum float32 = 0
    for _, x := range v {
        sum += x
    }
    return sum
} 

Я проверяю сборку, сгенерированную:

$ gccgo -O3 -ffast-math -march=native -S test.go

Версия gccgo:

$ gccgo --version
gccgo (Ubuntu 4.9-20140406-0ubuntu1) 4.9.0 20140405 (experimental) [trunk revision 209157]

Не предполагается ли gccgo векторизовать этот код? эквивалентный код C с теми же параметрами gcc отлично векторизован с помощью инструкций AVX...

UPDATE

здесь у вас есть соответствующий пример C:

#include <stdlib.h>

float sum(float *v, size_t n) {
    size_t i;
    float sum = 0;
    for(i = 0; i < n; i++) {
        sum += v[i];
    }
    return sum;
}

скомпилировать с помощью:

$ gcc -O3 -ffast-math -march=native -S test.c
4b9b3361

Ответ 1

Почему бы не просто создать .so или .a с gcc и вызвать функцию c из go?