20

次のスニペットをベクトル化することに成功せずに 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 はこのコードをベクトル化できるはずではありませんか? 同じ gcc オプションを持つ同等の C コードは、AVX 命令で完全にベクトル化されます...

アップデート

ここに、対応する 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
4

1 に答える 1

1

gcc で .so または .a をビルドし、go から c 関数を呼び出さないのはなぜですか?

于 2014-11-22T19:56:59.660 に答える