gccでコンパイルされるCコードのコンパイラオプションを指定したいと思います。私は、コードの展開方法のためにコード内からこれを行う必要があります。これは現在、最適化フラグを正しく指定しているように見えるコードです。gccでプラグマを使用して-march = nativeを指定する方法
#pragma GCC optimize ("-O3,-ffast-math")
typedef float v4sf __attribute__ ((vector_size (16)));
typedef union {
v4sf v;
float e[4];
} float4;
typedef struct {
float4 x;
float4 y;
} complex4;
static complex4 complex4_mul(complex4 a, complex4 b) {
return (complex4){a.x.v*b.x.v -a.y.v*b.y.v, a.y.v*b.x.v + a.x.v*b.y.v};
}
complex4 f4(complex4 x[], int n) {
v4sf one = {1,1,1,1};
complex4 p = {one,one};
for (int i = 0; i < n; i++) p = complex4_mul(p, x[i]);
return p;
}
は、しかし、私はまた
-march=native
を指定したいと思います。これはコード内から何とか が可能ですか?
私は試しました#pragma GCC optimize ("-O3,-ffast-math, -march=native")
しかし、-march=native
の部分は無視されているようです。 https://godbolt.org/g/FjbRcVを参照してください。
は無視されていない、間違っているのです。何をアーカイブしたいですか? '-march'はクロスコンパイル時に実際に使用されます。 Nativeはマシンコンパイラのアーチが実行されることを意味します。 –
@ PeterJ_01 gccが 'gcc -O3 -ffast-math -march = native'を実行したのと同じコードを生成します。 – eleanora