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 回答