GPU 프로그래밍
GPU에서 다수 값의 총합을 구할 때, 트리 형태의 리덕션(이웃끼리 더해 절반으로 줄이는 것을 반복)을 사용하는 이유로 올바른 것은?
- A하나의 스레드가 순서대로 더하는 것보다 덧셈 횟수가 크게 줄기 때문
- B각 단계에서 많은 스레드가 동시에 덧셈을 할 수 있어, n개의 값을 log2 n 단계로 합산할 수 있기 때문
- C부동소수점 오차가 반드시 0이 되기 때문
정답과 해설 보기
정답: B. 각 단계에서 많은 스레드가 동시에 덧셈을 할 수 있어, n개의 값을 log2 n 단계로 합산할 수 있기 때문
하나의 스레드가 순서대로 더하면 n-1 단계가 걸리지만, 트리 형태로 하면 1단계에서 n/2개 스레드가 이웃끼리 더하고, 2단계에서 n/4개가…를 반복하여 log2 n 단계로 끝납니다. 덧셈의 총 횟수는 같지만 단계 수가 적으므로 병렬로 빠르게 계산할 수 있습니다. 블록 안에서는 공유 메모리로 단계를 진행하고, 블록별 결과를 마지막에 모아 합산합니다.