programing

gcc에 루프를 풀도록 지시합니다.

copysource 2022. 9. 25. 15:01
반응형

gcc에 루프를 풀도록 지시합니다.

특정 루프를 풀도록 GCC에 지시하려면 어떻게 해야 하나요?루프를 수동으로 전개할 수 있는 CUDA SDK를 사용하고 있습니다.#pragma unrollgcc에도 비슷한 기능이 있나요?검색 좀 해봤지만 아무것도 못 찾았어.

GCC 에는, 다음의 몇개의 다른 대처 방법이 있습니다.

  • 다음과 같은 #pragma 지시어를 사용합니다.#pragma GCC optimize ("string"...)(GCC 매뉴얼 참조).플러그마는 나머지 기능에 대한 최적화를 글로벌하게 만듭니다.사용하시는 경우#pragma push_options그리고.pop_options매크로를 현명하게 정의하면 다음과 같은 한 가지 기능에 대해서만 정의할 수 있습니다.

    #pragma GCC push_options
    #pragma GCC optimize ("unroll-loops")
    
    //add 5 to each element of the int array.
    void add5(int a[20]) {
        int i = 19;
        for(; i > 0; i--) {
            a[i] += 5;
        }
    }
    
    #pragma GCC pop_options
    
  • GCC 속성 구문을 사용하여 개별 함수에 주석을 추가합니다.주제에 대한 자세한 논문은 GCC 함수 속성 문서를 참조하십시오.예:

    //add 5 to each element of the int array.
    __attribute__((optimize("unroll-loops")))
    void add5(int a[20]) {
        int i = 19;
        for(; i > 0; i--) {
            a[i] += 5;
        }
    }
    

주의: GCC가 역반복 루프를 얼마나 잘 풀 수 있는지 모르겠습니다(Markdown이 코드를 잘 다루도록 하기 위해 그렇게 했습니다).그러나 이 예들은 잘 정리되어 있을 것이다.

GCC 8에서는 루프 언롤링 방법을 제어할 수 있는 새로운 플러그마가 도입되었습니다.

#pragma GCC unroll n

매뉴얼 인용:

이 플러그마를 사용하여 루프를 전개하는 횟수를 제어할 수 있습니다.이 명령어는 for, while 또는 do 루프 또는 #pragma GCC ivdep 바로 앞에 배치해야 합니다.이 명령어는 이후의 루프에만 적용됩니다.n은 굴림 요인을 지정하는 정수 상수 표현식입니다.값 0과 1은 루프의 언롤링을 차단합니다.

-funroll-loops도움이 될 수 있습니다(단, 루프 단위가 아닌 글로벌하게 루프 언롤링이 켜집니다).그 안에 어떤 것이 있는지#pragma같은 일을 하기 위해서...

언급URL : https://stackoverflow.com/questions/4071690/tell-gcc-to-specifically-unroll-a-loop

반응형