小编pao*_*osi的帖子

怎样才能让gccgo产生矢量化代码?

我试图说服gccgo没有成功矢量化以下片段:

package foo

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

我正在验证由以下内容生成的程序集:

$ gccgo -O3 -ffast-math -march=native -S test.go
Run Code Online (Sandbox Code Playgroud)

gccgo版本是:

$ gccgo --version
gccgo (Ubuntu 4.9-20140406-0ubuntu1) 4.9.0 20140405 (experimental) [trunk revision 209157]
Run Code Online (Sandbox Code Playgroud)

是不是gccgo应该能够对这段代码进行矢量化?具有相同gcc选项的等效C代码完全使用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;
} …
Run Code Online (Sandbox Code Playgroud)

vectorization go gccgo

20
推荐指数
1
解决办法
442
查看次数

矢量化平方残差与gcc/clang之和无内在函数

我试图说服gcc(4.8.1)或clang(3.4)在常春藤网桥处理器上矢量化以下代码:

#include "stdlib.h"
#include "math.h"

float sumsqr(float *v, float mean, size_t n) {
    float ret = 0;
    for(size_t i = 0; i < n; i++) {
        ret += pow((v[i] - mean), 2);
    }
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

并编译它没有成功

$ gcc -std=c99 -O3 -march=native -mtune=native -ffast-math -S foo.c
Run Code Online (Sandbox Code Playgroud)

有没有办法修改代码而不使用instrinsics或修改gcc调用以获得矢量化代码?

c performance sse avx

1
推荐指数
1
解决办法
244
查看次数

标签 统计

avx ×1

c ×1

gccgo ×1

go ×1

performance ×1

sse ×1

vectorization ×1