14

次のコマンドを使用してコードをコンパイルしています。

gcc -O3 -ftree-vectorizer-verbose=6 -msse4.1 -ffast-math 

これにより、すべての最適化が有効になります。

しかし、他の最適化を維持しながら、ベクトル化を無効にしたいと考えています。

4

3 に答える 3

17

ほとんどの GCC スイッチは、 noプレフィックスを使用して動作を無効にすることができます。(コマンドラインの-fno-tree-vectorizeafter )で試してください。-O3

于 2011-10-15T13:50:45.097 に答える
9

また、最適化関数の属性またはプラグマを使用して、ベクトル化を選択的に有効または無効にすることもできます

http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

http://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html

例えば

__attribute__((optimize("no-tree-vectorize")))
void f(double * restrict a, double * restrict b)
{
    for (int i = 0; i < 256; i++)
        a[i] += b[i];
}
于 2012-12-11T17:20:02.940 に答える
1

すばらしい。gcc がベクトル化に対してより積極的になった今、例えば

extern "C" __attribute__((optimize("no-tree-vectorize")))
/* Subroutine */
int s111_ (integer * ntimes, integer * ld, integer * n,
           real * ctime, real * dtime,
           real * __restrict a, real * b, real * c__, real * d__,
           real * e, real * aa, real * bb, real * cc)
{
    ....
    for (i__ = 2; i__ <= i__2; i__ += 2)
        a[i__] = a[i__ - 1] + b[i__];
    ....

上記のケースでは、restrict以前は削除を行っていましたが、現在 g++ 6.0 では を削除してもベクトル化を停止できません__restrict

于 2015-11-14T18:44:09.723 に答える