Parallel Patterns Library (PPL)은 Visual Studio 2010에 포함될 예정인 Microsoft의 템플릿 기반 멀티프로세스 프로그래밍 라이브러리 입니다. 라이브러리는 MS독자적인 모델로 인텔의 쓰레딩빌딩블록과 유사한 형태를 가지고 있으며 전반적인 인터페이스 모양은 쓰레딩빌딩블록처럼 STL의 모습을 따릅니다.
VS2010의 병렬런타임(Concurrency Runtime)은 협업적 태스크 스케줄링(Cooperative Task Scheduling)과 협업적 블록킹(Cooperative Blocking)에서 강점을 가지고 있습니다. 개념적으로 보자면 협업적 태스크 스케줄링이라는 것은 태스크가 끝난 쓰레드에 자동으로 사용 가능한 다른 태스크를 할당하는 등의 효과적인 스케줄링을 의미하며 협업적 블록킹(Cooperative Blocking)이라는 것은 한 태스크가 다른 태스크를 기다리고 있을 떄 블록킹 태스크 대신에 다른 태스크를 실행시켜 리소스 사용을 극대화 시킨다는 것을 의미합니다.
전반적인 느낌은 인텔의 TBB(Threading Building Block)과 유사하며 아무래도 베타라 그런지 인텔거 만큼 좋을 듯 싶지는 않지만 전반적으로 개념도 비슷하고 MS가 미는 관계로 공부를 해두어야 할 듯 합니다. 참고로 .NET에서도 병렬처리 지원됩니다.
참고로 전반적인 개념을 잘 잡으실려면 MS쪽 글보다는 Intel's Threading Building Block Tutorial쪽이 좋을듯합니다. 같은 개념들을 모두 포함하고 있는데다가 설명이 좀 더 명확합니다. 저는 그 글을 읽은 덕에 MS쪽 PPL은 차이점 정도로 보고 넘어가고 있습니다.
Visual Studio 2010의 병렬런타임은 아래와 같은 아키텍처와 구성을 가지고 있습니다.
Parallel Patterns Library
STL형식을 가지고 있으며 Parallel Algorithms과 Parallel Containers and objects 등의 병렬 라이브러리를 가지고 있습니다.
Asynchronous Agents Library
굵게 쪼개진 데이터플로우와 파이프라인 기반의 태스크 처리를 지원하기 위하여 Actor-based programming model과 Message Passing Interfaces를 지원합니다.
Task Scheduler
태스크와 리소스 관리를 합니다. 병렬앨고리듬은 내부적으로 이 태스크 스케줄러를 사용하며 커스턴 스케줄링을 원할경우 태스크 관련 프로그래밍을 하면 됩니다.
Resource Manager
프로세서와 메모리와 같은 리소스를 관리합니다.
Task Parallelism
자체적인 병렬 앨고리듬을 사용해야 할 때 사용하며 대부분의 경우에는 PPL이 제공하는 병렬 앨고리듬을 사용할 것을 권장합니다. 한 예로 작은 태스크에는 parallel_for을 사용하기를 권장하며 parallel_for는 내부적으로 structured task group을 사용합니다.
task_group (unstructured_task_group)
thread-safe, Reusable
structured_task_group
thread-unsafe, Not Reusable
참조자료는 아래와 같습니다.
(MSDN의 내용은 현재의 베타판의 내용을 담고 있으므로 정식판이 나오면 내용이 변경될 수 있습니다.)
Parallel Patterns Library(PPL)
MSDN에서 PPL을 소개하는 페이지 입니다.
Task Parallelism
태스크 사용에 대해 소개하는 페이지 입니다.
Parallel Containers and Objects
concurrent_vector, concurrent_queue combinable 이 세개의 중요 확장 컨테이너를 소개하는 페이지 입니다.
태스크의 취소에 대한 페이지 입니다.
병렬처리 런타임에 대하여 소개하는 페이지인데 이런 저런 글을 읽고 보는 요약 페이지처럼 설명되어 있습니다.
한국 MS MVP들이 모여서 Visual Studio 2010 관련하여 쓴 내용 중 PPL 관련 부분 링크입니다. 내용은 위의 영문 내용과 동일합니다. 다른 점은 전문가 분들이 나름대로 이해한 것을 한글로 설명한다는 점입니다. 편하게 한글로 읽으실 분들에게 추천합니다.
'개발 라이브러리 & 툴' 카테고리의 다른 글
C/C++ 병렬처리(멀티프로세스) 라이브러리 선택 (0) | 2021.10.03 |
---|---|
비주얼스튜디오(Visual Studio) 시작 중에 비정상 종료될 때(Crash) 해결법 (0) | 2017.03.12 |
ATL/OLE DB관련 라이브러리 ver 1.02 (0) | 2010.02.17 |
[MPP] Visual Studion 2010 Parallel Patterns Library (PPL) 예제 (0) | 2010.01.18 |
[MPP] Introduction to Intel's Threading Building Block (0) | 2009.12.01 |
[MPP] 메모리 일치 모델(Memory Consistency Models) (0) | 2009.11.19 |
[MPP] Introduction To Message Passing Interface(MPI) (0) | 2009.09.17 |
[MPP] Introduction to OpenMP (0) | 2009.09.12 |