티스토리 뷰

개발/Linux

likely, unlikely

Jaeyeon Baek 2011. 12. 27. 08:47



피할수 없는 if 문의 분기라면, 하지만 그 결과가 항상(거의) 참 혹은 거짓이라면..? 이때 사용할 수 있는게 likely, unlikely 명령어 입니다.

아래와 같이 내부적으로 gcc의 builtin 함수로 define되어 있습니다.

#define likely(x)       __builtin_expect(!!(x), 1)
#define unlikely(x)     __builtin_expect(!!(x), 0)
사용 예를 보면,
void* p = malloc(128);
if (p==NULL)
   here();

보통 위와 같은 코딩을 하지만, 사실 p가 NULL인 경우는 극히 드문데요, 이러한 경우 cpu에게 p가 대부분 false일 것이라고 알려주는 unlikely로 대체할 수 있는데 아래와 같습니다.

void* p = malloc(128);
if (unlikely(p==NULL))
   here();
혹은 builtin 함수 그대로 사용도 가능합니다.
void* p = malloc(128);
if (__builtin_expect(p==NULL,0))
   here();

편한 함수를 사용하도록 합시다, 성능 개선에 좋다니까, (성능적인 측면에서 좋은것은, CPU는 명령어 수십개를 병렬로 처리하고, 분기에 대해 임의로 선택하여 수행됩니다. 그리고 그 선택이 옳지 못한 경우 다시 분기로 돌아오게 되는데, 이러한 잘못된 수행을 회피할 수 있다는 점입니다.)


댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday