예, 가능합니다. 전체 모듈 또는 individual 기능에 대해 비활성화 할 수 있습니다. You can't however do this for particular loops.
개별 기능을 사용하려면 __attribute__((optimize("no-tree-vectorize")))
을 사용하십시오.
전체 모듈의 경우 -O3
-ftree-vectorize
이 자동으로 활성화됩니다. 일단 사용하도록 설정 한 후에는 비활성화하는 방법을 모르겠지만 대신 -O2
을 사용할 수 있습니다. 당신이 -ftree-vectorize
제외 -O3
을 모두 사용하고자하는 경우 다음이
gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | grep enabled
그리고이 -ftree-vectorize
을 제외한 모든 옵션을 포함 할.
편집 : 설명서 페이지에 -fno-tree-vectorize
이 표시되지 않지만 어쨌든 작동하므로 -O3 -fno-tree-vectorize
을 사용할 수 있습니다.
편집 : OP는 특정 기능 또는 전체 모듈에 대해 실제로 벡터화를 사용하려고합니다. 이 경우 개별 기능을 위해 __attribute__((optimize("tree-vectorize")))
을 사용할 수 있으며 전체 모듈의 경우 -O2 -ftree-vectorize
. (안토니오)
편집 :은 이론적으로
#pragma GCC optimize("tree-vectorize")
을 따라 나무 벡터화 모든 기능을 가능하게하는 프라 그마 지침이 그러나 어쩌면 때문에의 내 g ++ 컴파일러와 함께 작동하지 않을 것 여기에 언급 된 버그 : How to enable optimization in G++ with #pragma. 반면에 함수 특성은 작동합니다.
일반적으로 벡터화는 ** 적용 속도가 빨라야 **합니다 **. 그거 확실하니? 코드가 느려지는 것을 어떻게 알았습니까? – edmz
@black 우리는 커다란 프로젝트에 대해 말하고 있습니다. -O3은 어떤 경우에는 느린 코드를 생성 할 수있는 약간의 오버 헤드를 발생시킵니다. http://stackoverflow.com/a/19985801/2436175. 우리의 타이밍 벤치마킹의 경우였습니다. 전 세계적으로 트리 벡터 라이 제이션을 켜는 것은 동일한 위험을 감수해야합니다. 필자는 코드의 어느 부분이 벡터 라이 제이션을 위해 컴파일러에게 요청할 가치가 있는지를 잘 추측 할 수있는 상황에 처해 있습니다. – Antonio