문제

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)를 활성화하려면 다음 단계를 수행해야합니다.

  1. 대상 아키텍처에 따라 벡터의 단어 수를 언급하십시오. 이것은 매크로를 정의하여 수행 할 수 있습니다 UNITS_PER_SIMD_WORD.
  2. 가능한 벡터 모드는 일반적으로 별도의 파일로 정의해야합니다. <target>-modes.def. 이 파일은 기계 설명이 포함 된 다른 파일에 상주하는 디렉토리에 있어야합니다. (구성 스크립트에 따라. 스크립트를 변경할 수있는 경우 파일을 원하는 디렉토리에 배치 할 수 있습니다).
  3. 대상 아키텍처에 따라 벡터화를 위해 고려되는 모드. 마찬가지로, 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 */

  4. 포트를 구축하십시오. 명령 줄 옵션을 사용하여 벡터화를 활성화 할 수 있습니다 -O2 -ftree-vectorize.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top