VC10에서 병렬 프로그래밍 라이브러리인 Concurrency Runtime 이라는 것이 추가되었습니다.

Concurrency RuntimeOS의 스레드 관리 보다 좀 더 지능적으로 관리를 하며, Concurrency Runtime Windows 7에서 새로 추가된 UMS(User Mode Scheduler)를 사용하고 있습니다.

 

Windows7 이상의 OS에서 64비트 프로그래밍을 한다면 UMS를 사용하는 것이 좋습니다. 그런데 UMS를 사용하는 방법에 대해서 잘 나온 것이 없습니다. 그래서 UMS를 알아도 활용할 방법이 애매한데 이 문제를 해결하는 방법은 Concurrency Runtime의 스케쥴러에서 스레드를 만드는 것입니다. 기존의 스레드를 만드는 방법과 거의 비슷해서 손 쉽게 이전 코드에서 수정도 가능합니다.

 

 

사용하는 방법은 MSDN의 예제를 참고하면 됩니다.

http://msdn.microsoft.com/en-us/library/vstudio/ee624185.aspx

 

제가 간단하게 설명하자면....

아래의 헤더 파일을 포함합니다

#include <concrt.h>

 

네임스페이스를 선언합니다.

using namespace Concurrency;

 

스레드에서 호출할 함수를 정의합니다.

void __cdecl MyThreadFunction(LPVOID param);

 

스레드에 넘겨줄 데이터를 정의합니다.

typedef struct MyData {

    int val1;

    int val2;

    event signal;

} MYDATA, *PMYDATA;

 

 

Concurrency Runtime의 스케쥴러에서 스레드를 생성합니다.

CurrentScheduler::ScheduleTask(MyThreadFunction, pData);

 

 

위의 MyData 구조체에서 event signal 이 사용되는 경우는 만약 메인 스레드에서 생성한 워커 스레드가 종료 될 때까지 대기하고 싶을 때 사용하면 좋습니다.

메인 스레드에서 아래와 같이 하면 워커 스레드가 종료될 때까지 대기 합니다.

pData->signal.wait();

 

워커 스레드는 스레드가 종료될 때 아래와 같이 해서 이벤트를 발생하여 메인 스레드의 대기를 풀어줍니다.

pData->signal.set();

 

 

저작자 표시
신고
by 흥배 2013.03.04 08:00
TBB
TBB의 스케줄러는 협조적 멀티태스크를 행하기 때문에 태스크 안에서 장기간 블럭되는 처리를 호출하면 안된다.
다른 태스크를 스케줄 할 수가 없게되고, CPU 리소스의 재 이용률이 악화한다


PPL
PPL/ConcRT에서는 유저모드 스케줄러(UMS) 스레드를 이용하므로 태스크 안에서 블럭킹 API를 호출하여도 CPU 이용률이 저하되지 않는다.
ConcRT에서는 협조 블럭킹 기능을 제공하기 때문에 블럭 중 다른 태스크가 스케줄링 된다.
단 UMS는 Windows Server 2008 R2 또는 Windows 7(64비트) 이후의 64비트판에서만 지원한다.
그 이외의 Windows OS 상에서는 일반적인 스레드로 이용된다.





출처 : MSDN
저작자 표시
신고
by 흥배 2012.03.07 09:00
4월15일에 있었던 세미나에서 강연했던 문서입니다.


Vs2010을 활용한 cpp_병렬_프로그래밍
View more presentations from jacking.

저작자 표시
신고
by 흥배 2010.08.22 15:27
https://msevents.microsoft.com/cui/EventDetail.aspx?culture=ko-KR&EventID=1032447922&IO=jgXfPOVLFvgCqIHn3by1Uw==


저는 병렬 프로그래밍에 대해서 강연을 합니다.
반 정도는 병렬 프로그래밍 이론에 대해서, 반은 VC++ 10의 Concurrency Runtime에 대해서 설명할 예정입니다.



개발자, 세상의 중심이 되다 : C++ 개발자/게임개발자를 위한 VS2010 세미나

◎ 일시 : 4월 15일 (목) 09:30 -17:00                                                        
◎ 장소 : 양재동 L 타워 그레이스홀(6F)



C++ 개발자, 게임 개발자 여러분 안녕하십니까? 
2010 년 4월 12일 전세계적으로 Visual Studio 2010 이 출시되었습니다.
지난 2년간 전세계의 개발자 여러분들의 의견들을 반영하여 개발자 여러분들을 위한 완전히 새롭고 강력한 개발 플랫폼으로 태어난 Visual Studio 2010 을 처음 만나보실 수 있는 자리를 마련하였습니다.

본 세미나에서는 마이크로소프트 본사의 Visual Studio C++ 전문가인 Boris Jabes 와 각계의 최고 개발자 여러분들의 목소리를 통해 이러한 광범위한 C++ 개발자 여러분들에게 VS2010 이 전해드리는 가치 및 게임개발자 여러분들에게 VS2010을 활용한 Direct 11 이 제공하는 가치들과 TFS2010 을 활용한 게임개발에서의 Scrum 개발 방법론, 그리고 Sketch Flow 를 이용한 혁신적인 게임기획 방법을 알려드릴 예정입니다.

바쁘시겠지만, C++ 개발자 여러분들과 게임개발자 여러분들께 Visual Studio2010 을 처음소개해 드리는 자리에 꼭 참석하시여 세상의 중심이 우뚝서실 개발자가 되시는데 조금이나마 도움이 되셨으면 합니다.

2010년 4월 15일 Visual Studio 와의 첫만남, 여러분들을 초대합니다.

Agenda        
시간 세션 발표자
10:00 - 10:30 등록  
10:30 - 10:40 인사말  
10:40 - 12:30 KeyNote : Boris Jabes
What’s New in Visual Studio C++ 2010 : C++ 개발자를 세상의 중심으로!!! 
12:30 - 13:30 Lunch
 

C++ 개발자트랙

게임개발자 트랙

13:30 - 14:10  C++0x 를 활용한 혁신적인 프로그래밍 

강성재

Visual Studio Team Foundation Server 2010 을 활용한 Scrum 개발방법론

김병진

14:20 - 15:20 Visual Studio 2010 을 활용한 C++ 병렬프로그래밍

최흥배

DirectX11 소개

조진현

15:30 - 16:30 MFC를 이용한 쉽고 빠른 Windows 7 기능 활용

최성기

Expression Blend Sketch Flow 를 이용한 게임 및 애플리케이션 기획

이원준

16:40 - 17:00 경품 추첨

저작자 표시
신고
by 흥배 2010.04.02 20:06

병렬 프로그래밍의 하나의 스타일로 간단하면서 범용적이므로 널리 사용되고 있다. SPMD Single Program Multiple Data의 약어이다. 이것의 의미는 복수의 프로세서 상에서 각각의 데이터를 이동하고 그것을 처리하는 프로그램은 동일하다 이다.

 

SPMD 언어로는 OpenMP, Co-array Fortran, UPC, Titanium 이 있다.

저작자 표시
신고
by 흥배 2009.12.23 00:18
| 1 |