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
분기부터 설명해주세요 스생님
귀찮아 ㅇㅅㅇ
오..
와 존나 멋있다 ㅇㅅㅇ
고딩인데 이정도까지하네 진짜 나중에 크게될듯
쉿!
글애도 2개따리 분기는 애지간하면 예측 성공하지 않늠 ㅇㅅㅇ
그래서 컴파일러가 정해주게 놔두는게 좋음 ㅇㅅㅇ
확률이 비슷하면 의미없지 않나?