VSTS 2010의 VC++ 10의 큰 핵심 feature 두 가지를 뽑으라고 하면 저는 C++0x와 Concurrency Runtime
두 가지를 뽑고 싶습니다.
VC++ 10은 시대의 변화에 맞추어 새로운 C++ 표준과 병렬 프로그래밍을 받아들였습니다.
현재도 Win32 API에 있는 Thread
관련 API를 사용하여 병렬 프로그래밍을 할수 있습니다. 하지만 이것만으로 병렬 프로그래밍을 하기에는
너무 불편합니다.
그래서 VC++ 10에는 Concurrency
Runtime 이라는 것이 생겼습니다.
Concurrency와 Parallel의 차이
Concurrency는 병행, Parallel은 병렬이라고 합니다.
Concurrency는 독립된 요구를 동시에 처리하고, Parallel은 하나의 task를 가능한 Concurrency로 실행할 수 있도록 분해하여 처리합니다.
< 그림 출처 : http://blogs.msdn.com/photos/hiroyuk/picture9341188.aspx >
이를테면 프로그래밍 때에 분해하여 런타팀에 넘기면(이것이 병렬화), 런타임은 그것을 Parallel로 실행합니다. Concurrency Runtime은 Parallel 런타임으로 이해하면 될 것 같습니다.
Concurrency Runtime
< 그림 출처 : http://blogs.msdn.com/photos/hiroyuk/picture9341189.aspx >
Cuncurrency Runtime은 C++ 병행 프로그래밍 프레임워크입니다. Cuncurrency Runtime은 복잡한 parallel code 작성을 줄여주고, 간단하게 강력하고, 확장성 있고 응답성 좋은 parallel 애플리케이션을 만듭니다. 또한 공통 작업 스케줄러를 제공하며 이것은 work-stealing 알고리즘을 사용하여 프로세싱 리소스를 증가시켜 애플리케이션의 확장성을 높여줍니다.
Cuncurrency Runtime에 의해 다음의 이점을 얻을 수 있습니다.
1. data parallelism 향상 : Parallel algorithms은 컬럭션이나 데이터 모음을 복수의 프로세서를 사용하여 배분하여 처리합니다.
Cuncurrency Runtime 컴포넌트는 네 가지로 나누어집니다.
1. Parallel Patterns Library (PPL)
2. Asynchronous Agents Library (AAL)
3. work scheduler
4. resource manager
이 컴포넌트는 OS와 애플리케이션 사이에 위치합니다.
< 그림 출처 : MSDN >
Cuncurrency Runtime의 각 컴포넌트는 아래의 네 개의 헤더 파일과 관련 되어집니다.
컴포넌트 |
헤더 파일 |
Parallel Patterns Library (PPL) |
ppl.h |
Asynchronous Agents Library (AAL) |
agents.h |
Concurrency Runtime work scheduler |
concrt.h |
Concurrency Runtime resource manager |
concrtrm.h |
Concurrency Runtime을 사용하기 위해서는 namespace Concurrency를 선업합니다.
Concurrency Runtime은 C Runtime Library (CRT)를 제공합니다.
Concurrency Runtime의 대부분의 type와 알고리즘은 C++의 템플릿으로 만들어졌습니다. 또한 이 프레임워크에는 C++0x의 새로운 기능이 많이 사용되었습니다.
처음 들어보는 단어를 처음부터 막 나오기 시작해서 잘 이해가 안가는 분들이 있지 않을까 걱정이 되네요. 그래서 핵심만 한번 더 추려 보겠습니다.^^
1. Concurrency는 병행, Parallel은 병렬.
2. VSTS 2010에서는 Concurrency는 런타임 용어로 Paralell은 프로그래밍 모델 용어.
3. 프로그래밍 때에 분해하여 런타팀에 넘기면(이것이 병렬화), 런타임은 그것을 Parallel로 실행.
4. Cuncurrency Runtime은 C++ 병행 프로그래밍 프레임워크로 복잡한 parallel code 작성을 줄여주고, 간단하게 강력하고, 확장성 있고 응답성 좋은 parallel 애플리케이션을 만들수 있으며 공통 작업 스케줄러를 제공하며 이것은 work-stealing 알고리즘을 사용하여 프로세싱 리소스를 증가시켜 애플리케이션의 확장성을 높여준다.
5. Cuncurrency Runtime 컴포넌트는 네 가지로 나누어진다.
1. Parallel Patterns Library (PPL)
2. Asynchronous Agents Library (AAL)
3. work scheduler
4. resource manager
그럼 다음에는 Parallel Patterns Library(PPL)에 대해서 이야기 하겠습니다.^^
'VC++ 10 Concurrency Runtime' 카테고리의 다른 글
양보할 줄 아는 Concurrency Runtime의 event (1) | 2009.08.07 |
---|---|
Parallel Patterns Library (PPL) (1) | 2009.08.06 |
PPL task를 이용한 피보나치 수 계산 (3) | 2009.07.17 |
C++ 개발자를 위한 병렬 프로그래밍 동영상 [6/7] 완결! (4) | 2009.07.03 |
C++ 개발자를 위한 병렬 프로그래밍 동영상 [5] (2) | 2009.06.12 |