gcc에 루프를 풀도록 지시합니다.
특정 루프를 풀도록 GCC에 지시하려면 어떻게 해야 하나요?루프를 수동으로 전개할 수 있는 CUDA SDK를 사용하고 있습니다.#pragma unroll
gcc에도 비슷한 기능이 있나요?검색 좀 해봤지만 아무것도 못 찾았어.
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
'programing' 카테고리의 다른 글
Java 스태틱콜은 비 스태틱콜보다 비싼가요, 아니면 저렴한가요? (0) | 2022.09.29 |
---|---|
Python에서 함수를 코멘트하는 적절한 방법은 무엇입니까? (0) | 2022.09.29 |
사용자 'root@localhost'에 대한 액세스가 거부되었습니다(암호 사용:아니요) (0) | 2022.09.25 |
Python의 클래스 메서드 차이: bound, unbound 및 static (0) | 2022.09.25 |
반복하는 동안 HashSet에서 요소 제거 (0) | 2022.09.25 |