
보통 절대값을 구하는 함수는 위의 함수처럼 구하지만
Branchless 프로그래밍에선 아래처럼 한다.
간단히 코드 설명을 하자면
int mask = x >>31; 은 int (32bit) 의 모든 비트를 오른쪽으로 옮기니
if x >= 0 then mask = 0
if x < 0 then mask = -1
이 된다.
여기서 x 와 XOR 연산으로 mask 를 묶어주면
if x >=0 then x ^ mask = x ( mask = 0)
if x < 0 then x ^ mask = ~x ( mask = -1) 비트 반전이 된다.
결국 return value 는 (x ^ mask) - mask 이니
if x >=0 then (x ^ mask) - mask = x - 0 = x;
if x < 0 then (x ^ mask) - mask = ~x + 1 = -x; (2의 보수값이 된다.)
자 그럼 속도 테스트를 해보자.

위와 같이 branched abs function 과 branchless abs function 두개를 만들어서 clock 함수로 시간측정을 해보겠다.

결과를 보게되면 평균 200us 의 속도 차이를 보이게 된다. (Test 결과는 Second 단위이다.)
Low latency 환경에서 200us 차이는 엄청나게 크므로 확실히 유의미한 차이라고 볼 수 있다.
'개인공부 > Branchless Programming' 카테고리의 다른 글
| (Branchless Programming) 홀수 짝수 구하기 (0) | 2025.04.16 |
|---|---|
| (Branchless Programming) 큰 값, 작은 값 고르기 (0) | 2025.04.10 |
| Branchless Programming 이란 (0) | 2025.04.10 |