인텔 스레딩 빌딩 블록을 보던중 pararllel_scan 부분이 이상해서 서베이중..서베이 자료들도..난감함..
암튼 아래와 같음 나중에 기억 안나면 참고.
사용처
개략적으로 계층형 구조 계산이 가능한 경우 처리 가능
ex) 예제는 제작 해야 할 듯 대략 mib 구조의 서머리를 생각 하면 될듯 오라클에서 계층형 데이터 합산쪽.
-. parallel_scan은 병렬 표기를 병렬 처리 한다.
==> id⊕ 를 병렬적으로 처리 함.
-. id⊕ 와 ⊕를 합한 것을 병렬 표기(prefix) 라 한다.
-. 병렬 표기와 x0를 함께 표시 하면 x0와 병렬 표기(id⊕ ⊕) 는 y0 과 동일 하다는
내용임 .
• y0 = id⊕ ⊕ x0
• yi = yi−1 ⊕ xi
시리얼 처리
T temp = id⊕; // 초기값 인덱싱
for( int i=1; i<=n; ++i ) {
temp = temp ⊕ x[i]; // 이부분이 병렬화 될 부분 재귀처리와도 관련이 있을듯 함.
y[i] = temp; // 처리 합
}
병렬 처리시
A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
a b c d
1. A 에서 split 처리 c
2. A 에서 split 처리 b
3-1. parallel - b[pre_scan : 합처리] - 26
3-2. parallel - c[pre_scan : 합처리] - 42
3-3. parallel - a[final_scan : 합처리] - 10
4-1. b[reverse_join] 대상 a 의 합
4-2. c[reverse_join] 대상 b 의 합
5-1. parallel - c->d[final_scan] with last value 'd' - last one quarter
5-2. parallel - b->c[final_scan]
5-3. parallel - a->b[final_scan]
6. delete 5-2 , 5-1 is assigned to 5-3 body and delete
7. result 최종값 5-3 이 가르치던 넘-_-;; 값은 머 그림 참고 함[ reference p39]
end.
이상임
ps. 계산을 두번 한다던지 하는 쓸데 없는 상상은 금물....재귀적 처리와 비슷하게 (?) 걍 내생각임..정확히는 divide and conquer