Talk on “Parallel Programming Patterns” by Ralph Johnson
via Sutter’s Mill: Ralph Johnson on Parallel Programming Patterns
UIUC의 교수이자, 허브 서터가 언급한 것 처럼 GoF ((Design Patterns의 저자 4명을 Gang of Four 라고 부른다)) 의 한 사람인 Ralph Johnson의 세미나. UIUC의 온라인 세미나로 제공되고 있다.
약 한 시간 짜리 톡인데, 초반에 약간 지루한 부분이 있지만 참고 넘어가니 꽤 들을만 했음. 물론 아쉬움도 한가득.
이 이하는 적당히 요약한 것 + 개인적인 논평 약간.
About Patterns
패턴은 은탄환1 이 아니며, 경험 그 자체를 대체하지도 못한다. 다만 경험을 얻는 속도를 늘려주고, 어느정도 빨리 배우게 해주는 수단이다.
Patterns for Parallel Programming
Talk의 제목이기도 한데, 알고보니 책 제목이었다. 이 책에 대한 R. Johnson의 평가는,
- 기술 독립적이고,
- 도메인 독립적이고 — 즉, 다양한 도메인에 적용 가능한 아이디어 위주
- Pattern language를 제공한다. (프로그래밍 언어얘기가 아님)
제공하는 패턴들은,
- Finding concurrency
- Algorithm Structure
- Supporting Architecture
- Implemenation mechanism — OS 만드는 사람한테나 패턴이지, 그렇지 않은 사람에겐 하부 구조일 뿐이다라고 설명
인데, 여기서 알고리즘 구조 부분을 다시,
- Organize by task — intel TBB 에서 말하는 linear task / recursive task 등의 개념
- Organize by data-decomposition — linear 한 데이터 교환 / recursive 한 작업 분할
- Organize by flow-of-data — 데이터 흐름의 파이프라이닝 등.
정도로 쪼개서 책의 내용을 설명한다. 개략 저기 위의 개념들을 설명하고 짧은 예를 드는 수준임.
그리고 이에 대해 이런 비판을 가한다.
- 더 많은 기술 의존적인 패턴이 필요하다
- 도메인 의존적인 패턴이 필요하다 — 슈퍼컴퓨팅에서의 일곱 난장이2 , 버클리에서 말하는 13개의 모티프 등 자주 쓰이는 특정 도메인에 적응된 계산 패턴이 있다. + 파티클 시스템의 orthogonal하게 병렬화할 수 있는 최적화들을 설명
- 더 작은 수준에 적용 가능한 패턴이 소개 되어야 한다. 책에서 다루는 고 수준 패턴들은 많은 예가 필요하며 배우기 힘들다고 얘기하고 있다. (물론 저수준 패턴들은 배우기 쉽고도 역시 중요하다는 얘기도 한다)
특히 도메인 의존적인 것에서 나타나는 패턴들을 강조하는 몇 가지 예 — Particle System, MPI의 exchange 예 — 를 든다.3
결론적으론,
- 패턴을 발견하고 (만드는게 아니다! 라고 말함)
- 사용하고
- 다른 사람들이 쓸 때 무슨 일이 일어나는지 보고
- 고쳐라
의 시도를 해보라고 말하면서 마무리.
디자인 패턴의 근원 자체가 저런 식으로 발견된 것이긴 한데, 지금 병렬 프로그래밍에 필요한게 과연 “패턴” 뿐인지는 솔직히 의문이다. 패턴 이전에 근본적인 구성요소(building blocks; primitives) 자체가 부족한게 아니냐는 생각도 들고 컴퓨터 공학 수업에서 배우는 것도 뭘 하면 안되느냐에 가깝지, 병렬 프로그래밍의 빌딩 블럭을 구성하거나 하진 않는다는 느낌이라. 뭐 여튼 재밌긴 하지만 아쉬운 톡.
Updated( 2008/9/26 17:36) shurain 의 제보로 잘못 들은 부분 수정: (저수준 패턴 관련)