branchless programing는 분기없는 프로그래밍으로,

if else와 같은 구문을 식으로 바꿔서 분기를 줄이는거다


쓸데없이 그런거 왜 하냐 할수도 있는데

CPU에서는 명령어 파이프라인이란걸 사용해 명령어의 처리를 가속하는 과정이 있는데,

파이프라인에서 분기 예측이 실패할 경우에는 파이프라인이 구축되는 시간만큼 시간을 버리게 된다.


그래서 어떻게 하냐... 하면


abs함수를 예로 들자.

분기를 사용해 코드를 짜면

int abs(int a)
{

if (a < 0) return -a;

else return a;

}

대충 이런 모양이 나올것이다.


branchless를 적용하면

int abs(int a)
{

int b = a >> 31;

return (a ^ b) - b;

}

가 된다.


링크가 더 잘 설명해줌 : https://dev.to/jobinrjohnson/branchless-programming-does-it-really-matter-20j4

명령어 파이프라인 : https://ko.wikipedia.org/wiki/%EB%AA%85%EB%A0%B9%EC%96%B4_%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8