나는 다음 명령을 사용하여 내 코드를 컴파일 오전 : 모든 최적화가 활성화되어이와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
을 제거하여 벡터화에서 중지 할 수 없습니다.