Reduce
Reduce는 여러 rank의 값을 합산해서 하나의 destination rank에만 결과를 만드는 collective operation이다.
Before Reduce
rank 0
12
rank 1
1020
rank 2
100200
After Reduce
rank 0
111222
sum rank 1
1020
rank 2
100200
Before와 after
Before reduce
rank 0: [1, 2]
rank 1: [10, 20]
rank 2: [100, 200]
After reduce
rank 0: [111, 222]
rank 1: [10, 20]
rank 2: [100, 200]
여기서 rank 0이 destination이다. 같은 위치의 값끼리 더해서 rank 0에만 합산 결과를 만든다.
행렬곱에서 왜 필요한가
행렬곱에서 inner dimension을 여러 rank가 나눠 계산하면 각 rank는 full C가 아니라 partial C를 만든다.
final C = partial C0 + partial C1 + partial C2
최종 C를 한 rank에만 만들면 충분하다면 reduce를 사용할 수 있다.
Reduce partial C to one rank
rank 0
partial C0+partial C1+partial C2
result
final C on rank 0
언제 쓰는가
Reduce는 여러 rank의 partial result를 합치되, 결과가 하나의 rank에만 있으면 충분할 때 쓴다.
partial results on many ranks -> sum on one rank
확인
- Reduce는 값을 모으기만 하는가, 같은 위치끼리 더하는가?
- Reduce 이후 모든 rank가 합산 결과를 갖는가?
- partial
C들을 한 rank에만 합쳐도 되는 상황은 어떤 경우일까?