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 의 제보로 잘못 들은 부분 수정: (저수준 패턴 관련)


  1. 모든걸 해결해주는 만능장치 같은 것을 비유하는 용어. ↩︎

  2. dense & spare matrices, structured & unstructured meshes, FFT, Particl System, Monte Carlo methods 의 7개. ↩︎

  3. 근데 뭔가 난 이건 설득력이 부족한 것 같은데. 완성되지 않은 패턴 내지는 프레임웍을 쓸 때 나타나는 문제랄까. 물론 프레임웍 자체를 만들어야하거나, 새 것이 필요할 때는 몸에 지니고 있어야하는 능력이긴 하겠지만. ↩︎