GCC로 벡터화하는 방법은 무엇입니까?
-
03-07-2019 - |
문제
V4 시리즈의 gcc
컴파일러는 그것을 사용하여 루프를 자동으로 벡터화 할 수 있습니다 심 AMD Athlon 또는 Intel Pentium/Core Chips와 같은 일부 최신 CPU의 프로세서. 이게 어떻게 끝났어?
해결책
원래 페이지는 GCC가 몇 가지 예를 포함하여 루프를 자동으로 벡터화하도록하는 것에 대한 세부 정보를 제공합니다.
http://gcc.gnu.org/projects/tree-ssa/vectorization.html
예제는 훌륭하지만 최신 GCC로 해당 옵션을 호출하기위한 구문이 밝혀졌습니다. 지금 참조하십시오.
요약하면, 다음 옵션은 SSE2와 함께 X86 칩에 작동하여 벡터화 된 루프 로그를 제공합니다.
gcc -O2 -ftree-vectorize -msse2 -ftree-vectorizer-verbose=5
-msse도 가능하지만 두 배나 INT가 아닌 플로트를 사용하여 루프 만 벡터화합니다.
다른 팁
Gimple (GCC의 중간 표현) 패스가 있습니다. pass_vectorize
. 이 패스는 자극 수준에서 자동 벡터화를 가능하게합니다.
자동 변호사 (GCC v4.4.0)를 활성화하려면 다음 단계를 수행해야합니다.
- 대상 아키텍처에 따라 벡터의 단어 수를 언급하십시오. 이것은 매크로를 정의하여 수행 할 수 있습니다
UNITS_PER_SIMD_WORD
. - 가능한 벡터 모드는 일반적으로 별도의 파일로 정의해야합니다.
<target>-modes.def
. 이 파일은 기계 설명이 포함 된 다른 파일에 상주하는 디렉토리에 있어야합니다. (구성 스크립트에 따라. 스크립트를 변경할 수있는 경우 파일을 원하는 디렉토리에 배치 할 수 있습니다). 대상 아키텍처에 따라 벡터화를 위해 고려되는 모드. 마찬가지로, 4 단어는 벡터를 구성하거나 8 개의 반 단어는 벡터를 구성하거나 두 개의 이중 단어가 벡터를 구성합니다. 이것의 세부 사항은
<target>-modes.def
파일. 예를 들어:VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI /
vector_modes (int, 16); / V16QI V8HI V4SI V2DI /
vector_modes (float, 8); / V4HF V2SF */포트를 구축하십시오. 명령 줄 옵션을 사용하여 벡터화를 활성화 할 수 있습니다
-O2 -ftree-vectorize
.
제휴하지 않습니다 StackOverflow