は、私は、次のコマンドを使用して、私のコードをコンパイルしています:すべての最適化が有効になっている。これによりGCCを使用してベクトル化を無効にする方法はありますか?
gcc -O3 -ftree-vectorizer-verbose=6 -msse4.1 -ffast-math
。
しかし、他の最適化を維持しながらベクトル化を無効にしたいと考えています。
は、私は、次のコマンドを使用して、私のコードをコンパイルしています:すべての最適化が有効になっている。これによりGCCを使用してベクトル化を無効にする方法はありますか?
gcc -O3 -ftree-vectorizer-verbose=6 -msse4.1 -ffast-math
。
しかし、他の最適化を維持しながらベクトル化を無効にしたいと考えています。
ほとんどのGCCスイッチは、動作を無効にするために接頭辞no
とともに使用できます。 -fno-tree-vectorize
(コマンドラインで-O3
の後)を試してください。例えば
またはプラグマ
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];
}
優れているので、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
を除去することにより、ベクトル化から停止することはできません。