일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- kernel
- 함수
- 학복위
- 별지기
- 로고 프로그램
- 숭실대
- Lock
- 별
- 와인
- 태그를 입력해 주세요.
- wine
- 프로세스
- 안드로이드
- Android
- Signal
- 파일io
- 로고
- 리눅스
- 학생복지위원회
- Process
- 컴퓨터시스템개론
- 쓰레드
- 운영체제
- 커널
- 정기철
- logo
- 미디어학부
- Linux
- 컴시
- 우분투
- Today
- Total
두근두근이야기
c 최적화기법 likely, unlikely 본문
분기문 최적화 기법
likely, unlikely. 먼저 코드를 봐보자!
커널소스 < /include/linux/compiler.h >에 정의되어 있다.
리눅스 커널 코드를 보면, likely와 unlikey란 함수를 발견할 수 있다.
이게 무엇이냐 하면 컴파일러와 관련된 함수로서 작성된 코드를 최적화하기 위해 컴파일러에게 정보를 주어 수동 분기예측을 하는 것이다.
if 분기문에서 likely를 주면 컴파일러에게 해당 분기문에서 참인 경우가 더 많을 것이라는 정보를 주고, 반대로 if 분기문 안에 unlikely를 주면 거짓인 경우가 더 많을 것이라는 정보를 준다.
이와 같이 컴파일러에게 정보를 주게 됨으로서 성능을 향상시키는 것이다. 즉, 컴파일러는 작성된 함수와 코드들을 받아 최적화 작업을 하여 성능을 향상시킨다.
이 다음 내용은 아래의 블로그에서 퍼왔습니다.
http://blog.naver.com/PostView.nhn?blogId=ryutuna&logNo=100176137644
likely/unlikely 매크로는 수동 분기예측을 하는 것인데, likely일 것 같은 코드를 분기문의 바로 다음에 위치하도록 해서 CPU의 파이프라이닝이 계속 유효한 상태가 되도록 만들어주어 성능 향상을 도모한다. ( 프로세서는 성능을 높이기 위해서 파이프라인으로 동작하게 되는데 코드의 실행 중 브랜치를 만나게 되면 미리 fetch해온 코드를 flush하기 때문에 파이프 라인이 깨져서 성능이 떨어지게 된다 )
따라서 가능하면 브랜치를 하지 않도록 코드를 작성하는 것이 성능을 높이는데 도움이 된다. 이를 위해서 조건문이 true일 가능성이 높은지 false일 가능성이 높은지를 컴파일러에게 알려주기 위해서 likely, unlikely 와 같은 매크로를 사용하는 것이다.
참고로 c 코드에서 사용하고 싶다면
likeㅣy, unlikely가 아닌
__builtin_expect(!!(x), 1).. 이걸로 사용하면 된다
'IT > IT ::Linux' 카테고리의 다른 글
YAFFS와 MTD (0) | 2013.09.05 |
---|---|
Thread, fork 차이 (0) | 2013.09.05 |
임베디드 시스템 엔지니어를 위한 리눅스 커널 분석 (0) | 2013.09.04 |
우분투 터미널에서 이미지 변경하기 (0) | 2013.09.04 |
fbmem.c (0) | 2013.09.04 |