SlideShare a Scribd company logo
1 of 74
Visual Studio 2010을활용한 C++ 병렬 프로그래밍 마이에트 엔터테인먼트  Server Programmer 최흥배 Microsoft Visual C++ MVP Twitter : @jacking75
목차 1. Multi-Core 시대 2. 어려운 병렬 프로그래밍 3. 진화 4. Concurrency Runtime 5. 병렬 패턴 라이브러리 ( PPL )
Multi-Core 시대
Multi-Core 컴퓨터는 이미 일반화
throughput 컴퓨팅 시대 ,[object Object]
 멀티 코어 CPU로 방향을 바꿈.
throughput가 최대 중요 요소가 됨.
 Intel, AMD의 CPU 아키텍처는 Multi-Core를 넘어서 heterogeneous(헤테로지니아스)로 가고 있음.,[object Object]
AMD - Bulldozer 아키텍처 ,[object Object]
 「Bulldozer Module」이라고 부른다.
 2개의 스레드를 병렬로 실행할 수 있는 모듈이 Bulldozer의 기본 단위.  기본은 하나가 아니고 두 개다 !!!
 4 코어의 Bulldozer CPU라면 두 개의 Bulldozer Module을 탑재.
Hyper-Threading이 아니다 !!!,[object Object]
Bulldozer에서는 CPU의 자원 중 정수 연산 파이프는 2개의 스레드가 각각 전용 파이프를 가진다.
 그러나 명령 디코더나 부동 소수점 연산 유닛 등은 2개의 스레드에서 공유한다.
 정수 연산에서는 스레드간의 경합이 없기 때문에  throughput가 높다,,[object Object]
Intel - Larrabee아키텍처 ,[object Object]
 그러나Intel이 CPU에 통합하기 위한 데이터 병렬 중시형 프로세서 코어의 아키텍처를 긴급하게 필요로 하고 있는 점은 변화지 않음.
Larrabee의 목적은 어떻게 하면 유연하고 고효율이면서 프로그램 하기 쉬운 아키텍처로 할 수 있을지를 추구하는 것.
 Intel의 간부들은 Larrabee와 같은 범용 데이터 병렬 코어를 CPU로 통합하는 것을 전망.,[object Object]
 왜냐하면 지금부터 퍼포먼스를 늘리고 싶은 것은 데이터 병렬로 부동 소수점 연산 중심의 작업 부담량이기 때문.
 Amdahl의 법칙은 여전히 살아 있기 때문에 Intel은 대형 슈퍼 스칼라 코어를 버리고 가는 것도 할 수 없다. 필연적으로 헤테로지니아스가 된다. ,[object Object]
어려운 병렬 프로그래밍
병렬 프로그래밍? Multi-Core? 그거 먹는 건가요? 우걱우걱
race condition, dead lock
void SetReUseSocket() {   ………   if( flase == m_bUsed ) {       LOG(“SetReUseSocket() | Failed”);       return;   }   LOG(“SetReUseSocket()”); m_bUsed = true;   ……… }
진화
2002년 2010년
OS – 2001년과 2009년 Windows 7 Windows XP
Visual Studio – 2002년과 2010년 Visual Studio.NET( 2002) Visual Studio 2010
2008년 10월 Microsoft의 최고 연구 전략 책임자를 맡은 Craig Mundie씨 ,[object Object]
 Windows를 보다 뛰어난 병렬/비동기프로세싱 플랫폼화 하기 위한 최초의 씨앗은 2009년부터 뿌려지기 시작.,[object Object]
UMS - Completion List ,[object Object]
 대응하는 유저 모드 스레드는Completion List에 등록되어
 코어에서 실행 중인 스레드가 종료하는 것을 기다린 후 다시 실행한다.,[object Object]
Concurrency Runtime Tools Native Libraries Intel ® TBB Parallel Pattern Library Asynchronous AgentsLibrary Intel®OpenMP Visual Studio 2010 Parallel Debugger Profiler Concurrency Analysis Data Structures Intel Parallel Studio Parallel Composer Task Scheduler Parallel Inspector Resource Manager Parallel Amplifier Native Concurrency Runtime Operating System Threads UMS Threads 그림 출처 : PDC 09
Concurrency Runtime(ConcRT)
Parallel Patterns Library Asynchronus Agents Library Synchronization Data Structures Task Scheduler Resource Manager OS
Parallel Patterns Library(PPL) ,[object Object]
 Imperative parallelism – parallel_for, parallel_for_each등
 Task parallelisn – task_group, structured_task_group,[object Object]
 AAL은 다른 컴포넌트의 데이터를 기다리면서 작업을 처리 할 수 있다.
 AAL은 복수의 엔티티가 서로간에 비동기로 통신을 할 때 사용한다.,[object Object]
class GameLogic : public agent  { .....    void run()    {       // Send the request.       ......       send(_target, wstring(L"request"));       // Read the response. int response = receive(_source);    } private:    ISource<int>& _source; ITarget<wstring>& _target; }; class GameAI : public agent  { .....    void run()    {       // Send the request.       ......       send(_target, wstring(L"request"));       // Read the response. int response = receive(_source);    } private:    ISource<int>& _source; ITarget<wstring>& _target; };
Synchronization Data Structures ,[object Object]
동기 오브젝트는 크리티컬 섹션과 같이 다른 스레드로부터 공유 데이터를 사용할 수 있을 때까지 기다린다.
critical_section, reader_writer_lock, event,[object Object]
 cooperative 스케쥴링과 work-stealing 알고리즘을 사용하여 최대한 효율이 좋게 리소스를 처리하도록 한다.
 Concurrency Runtime은 기본적인 스케쥴러를 제공하므로 직접 관리할 필요는 없다.
 다만 우리가 만든 애플리케이션에 최적화 시켜 더 높은 성능을 얻고 싶을 때는 스케줄러의 정책을 변경하거나 특별한 task, 특별한 스케줄러와 제휴할 수 있다.,[object Object]
 실행 시에 작업 부하에 변경이 일어나면 가장 효율이 좋게 처리할 수 있도록 리소스를 할당.
 컴퓨팅 리소스를 추상화하여 Task Scheduler와 주로 대화.
 더 높은 성능을 얻기 위해서 Resource Manager를 세밀하게 조정할 수 있다.
 다른 병렬 라이브러리의 병행 런타임과 컴퓨팅 리소스 관리를 통합 할 수 있다.,[object Object]
ConcRT의 Cooperative Demo
코어 증가와 Resource Management ,[object Object],[object Object]
이유는 Task Scheduler와 Resource Manage가 파괴되기 전에 프로그램이 종료 되기 때문.,[object Object]
병렬 패턴 라이브러리 ( PPL )
PPL의 세 가지 features ,[object Object]
 Parallel algorithms
 Parallel containers and objects ,[object Object]
Task Parallelism 실제적인 task의 실행은 task_group에서 한다. unstructured_task_group(task_group) 와 structured_task_group로나누어진다. task_group  : 스레드 세이프structured_task_group  : 스레드 세이프 하지 않음.
Main Thread Main Thread task_group1.run( task1) structured_task_group1.run( task1) Thread A task_group1.run( task2) Thread B task_group1.run( task3) Thread A structured_task_group1.run( task2)
초 간단!!!  task 사용 방법 ppl.h파일을 포함합니다.#include <ppl.h> Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency; 태스크 그룹을 정의합니다.structured_task_groupstructured_tasks; 태스크를 정의합니다.auto structured_task1 = make_task([&] { Plus(arraynum1, true); } ); 태스크를 태스크 그룹에 추가한 후 실행합니다.  structured_tasks.run( structured_task1 ); 태스크 그룹에 있는 태스크가 완료될 때까지 기다립니다.structured_tasks.wait();
ConcRT의 Task Demo
for( i = 0; i < 1000000; ++i ) {  …………  ………… }
Parallel Algorithms 데이터컬렉션을 대상으로 쉽게 병렬 작업을 할 수 있게 해주는 알고리즘들. STL에서 제공하는 알고리즘과 비슷한 모양과 사용법. paeallel_for, parallel_for_each, parallel_invoke가 구현되어 있음.parallel_accumulate, parallel_partial_sum는 다음 버전?
parallel_for for 문을 병렬화. for 문과 사용 방법이 흡사하여 쉽게 변환. step 값을 지정하는 버전과 지정하지 않는 버전 두 개가 있음(지정하지 않으면 1). index 조사는 ‘<‘만 지원.
초 간단!!! parallel_for사용 법 ppl.h파일을 포함합니다.#include <ppl.h> Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency; parallel_for에서 호출할 함수 정의 parallel_for에서 사용할 data set 정의. parallel_for사용.
parallel_for_each STL의 for_each알고리즘을 병렬화. for_each와 사용 방법이 같음.
초 간단!!! parallel_for_each사용 법 ppl.h파일을 포함합니다.#include <ppl.h> Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency; parallel_for_each에서 호출할 함수 정의 parallel_for_each에서 사용할 data set 정의. parallel_for_each사용.

More Related Content

What's hot

[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술NAVER D2
 
Spring one참석기 ksug
Spring one참석기 ksugSpring one참석기 ksug
Spring one참석기 ksugSanghyuk Jung
 
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스Seunghwa Song
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요? 내훈 정
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine LearningJEEHYUN PAIK
 
자바8 나머지 공개
자바8 나머지 공개자바8 나머지 공개
자바8 나머지 공개Sungchul Park
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11hungrok
 
Java_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4UJava_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4Usys4u
 
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기NAVER D2
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기zupet
 
Pgday bdr 천정대
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대PgDay.Seoul
 
[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱
[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱
[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱정석 양
 
스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기Sungchul Park
 

What's hot (17)

[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
 
Spring one참석기 ksug
Spring one참석기 ksugSpring one참석기 ksug
Spring one참석기 ksug
 
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine Learning
 
자바8 나머지 공개
자바8 나머지 공개자바8 나머지 공개
자바8 나머지 공개
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
 
What is spark
What is sparkWhat is spark
What is spark
 
Java_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4UJava_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4U
 
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
 
Openface
OpenfaceOpenface
Openface
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
 
Pgday bdr 천정대
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대
 
Storm 훑어보기
Storm 훑어보기Storm 훑어보기
Storm 훑어보기
 
[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱
[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱
[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱
 
스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기
 

Similar to Visual C++10을 활용한 병렬 프로그래밍

About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임codenavy
 
CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018Shengzhe Li
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)내훈 정
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화sung ki choi
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)Ubuntu Korea Community
 
맛만 보자 액터 모델이란
맛만 보자 액터 모델이란 맛만 보자 액터 모델이란
맛만 보자 액터 모델이란 jbugkorea
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇Seungyong Lee
 
몽고디비교육1일차
몽고디비교육1일차몽고디비교육1일차
몽고디비교육1일차seung-hyun Park
 
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable FunctionsJongin Lee
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기KwangSeob Jeong
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)정명훈 Jerry Jeong
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발cho hyun jong
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Gruter
 

Similar to Visual C++10을 활용한 병렬 프로그래밍 (20)

7 8 1
7 8 17 8 1
7 8 1
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 
CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
 
Gpg1
Gpg1Gpg1
Gpg1
 
맛만 보자 액터 모델이란
맛만 보자 액터 모델이란 맛만 보자 액터 모델이란
맛만 보자 액터 모델이란
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
몽고디비교육1일차
몽고디비교육1일차몽고디비교육1일차
몽고디비교육1일차
 
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013
 
04 프로세스
04 프로세스04 프로세스
04 프로세스
 

More from 흥배 최

Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용흥배 최
 
Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]흥배 최
 
Bash on Ubuntu on Windows
Bash on Ubuntu on WindowsBash on Ubuntu on Windows
Bash on Ubuntu on Windows흥배 최
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback흥배 최
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기흥배 최
 
Wtl 개요와 설치
Wtl 개요와 설치Wtl 개요와 설치
Wtl 개요와 설치흥배 최
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발흥배 최
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
닷넷 Apache avro
닷넷 Apache avro닷넷 Apache avro
닷넷 Apache avro흥배 최
 
Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개흥배 최
 
Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리흥배 최
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트흥배 최
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션흥배 최
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임흥배 최
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기흥배 최
 
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서흥배 최
 
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템흥배 최
 
MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용흥배 최
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability흥배 최
 

More from 흥배 최 (20)

Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용
 
Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]
 
Bash on Ubuntu on Windows
Bash on Ubuntu on WindowsBash on Ubuntu on Windows
Bash on Ubuntu on Windows
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
 
Wtl 개요와 설치
Wtl 개요와 설치Wtl 개요와 설치
Wtl 개요와 설치
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
NLog 소개
NLog 소개NLog 소개
NLog 소개
 
닷넷 Apache avro
닷넷 Apache avro닷넷 Apache avro
닷넷 Apache avro
 
Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개
 
Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기
 
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
 
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
 
MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability
 

Visual C++10을 활용한 병렬 프로그래밍

  • 1. Visual Studio 2010을활용한 C++ 병렬 프로그래밍 마이에트 엔터테인먼트 Server Programmer 최흥배 Microsoft Visual C++ MVP Twitter : @jacking75
  • 2. 목차 1. Multi-Core 시대 2. 어려운 병렬 프로그래밍 3. 진화 4. Concurrency Runtime 5. 병렬 패턴 라이브러리 ( PPL )
  • 5.
  • 6. 멀티 코어 CPU로 방향을 바꿈.
  • 8.
  • 9.
  • 11. 2개의 스레드를 병렬로 실행할 수 있는 모듈이 Bulldozer의 기본 단위. 기본은 하나가 아니고 두 개다 !!!
  • 12. 4 코어의 Bulldozer CPU라면 두 개의 Bulldozer Module을 탑재.
  • 13.
  • 14. Bulldozer에서는 CPU의 자원 중 정수 연산 파이프는 2개의 스레드가 각각 전용 파이프를 가진다.
  • 15. 그러나 명령 디코더나 부동 소수점 연산 유닛 등은 2개의 스레드에서 공유한다.
  • 16.
  • 17.
  • 18.
  • 19. 그러나Intel이 CPU에 통합하기 위한 데이터 병렬 중시형 프로세서 코어의 아키텍처를 긴급하게 필요로 하고 있는 점은 변화지 않음.
  • 20. Larrabee의 목적은 어떻게 하면 유연하고 고효율이면서 프로그램 하기 쉬운 아키텍처로 할 수 있을지를 추구하는 것.
  • 21.
  • 22. 왜냐하면 지금부터 퍼포먼스를 늘리고 싶은 것은 데이터 병렬로 부동 소수점 연산 중심의 작업 부담량이기 때문.
  • 23.
  • 25. 병렬 프로그래밍? Multi-Core? 그거 먹는 건가요? 우걱우걱
  • 27. void SetReUseSocket() { ……… if( flase == m_bUsed ) { LOG(“SetReUseSocket() | Failed”); return; } LOG(“SetReUseSocket()”); m_bUsed = true; ……… }
  • 28.
  • 31. OS – 2001년과 2009년 Windows 7 Windows XP
  • 32. Visual Studio – 2002년과 2010년 Visual Studio.NET( 2002) Visual Studio 2010
  • 33.
  • 34.
  • 35.
  • 36. 대응하는 유저 모드 스레드는Completion List에 등록되어
  • 37.
  • 38. Concurrency Runtime Tools Native Libraries Intel ® TBB Parallel Pattern Library Asynchronous AgentsLibrary Intel®OpenMP Visual Studio 2010 Parallel Debugger Profiler Concurrency Analysis Data Structures Intel Parallel Studio Parallel Composer Task Scheduler Parallel Inspector Resource Manager Parallel Amplifier Native Concurrency Runtime Operating System Threads UMS Threads 그림 출처 : PDC 09
  • 40. Parallel Patterns Library Asynchronus Agents Library Synchronization Data Structures Task Scheduler Resource Manager OS
  • 41.
  • 42. Imperative parallelism – parallel_for, parallel_for_each등
  • 43.
  • 44. AAL은 다른 컴포넌트의 데이터를 기다리면서 작업을 처리 할 수 있다.
  • 45.
  • 46. class GameLogic : public agent { ..... void run() { // Send the request. ...... send(_target, wstring(L"request")); // Read the response. int response = receive(_source); } private: ISource<int>& _source; ITarget<wstring>& _target; }; class GameAI : public agent { ..... void run() { // Send the request. ...... send(_target, wstring(L"request")); // Read the response. int response = receive(_source); } private: ISource<int>& _source; ITarget<wstring>& _target; };
  • 47.
  • 48. 동기 오브젝트는 크리티컬 섹션과 같이 다른 스레드로부터 공유 데이터를 사용할 수 있을 때까지 기다린다.
  • 49.
  • 50. cooperative 스케쥴링과 work-stealing 알고리즘을 사용하여 최대한 효율이 좋게 리소스를 처리하도록 한다.
  • 51. Concurrency Runtime은 기본적인 스케쥴러를 제공하므로 직접 관리할 필요는 없다.
  • 52.
  • 53. 실행 시에 작업 부하에 변경이 일어나면 가장 효율이 좋게 처리할 수 있도록 리소스를 할당.
  • 54. 컴퓨팅 리소스를 추상화하여 Task Scheduler와 주로 대화.
  • 55. 더 높은 성능을 얻기 위해서 Resource Manager를 세밀하게 조정할 수 있다.
  • 56.
  • 58.
  • 59.
  • 61.
  • 63.
  • 64. Task Parallelism 실제적인 task의 실행은 task_group에서 한다. unstructured_task_group(task_group) 와 structured_task_group로나누어진다. task_group : 스레드 세이프structured_task_group : 스레드 세이프 하지 않음.
  • 65. Main Thread Main Thread task_group1.run( task1) structured_task_group1.run( task1) Thread A task_group1.run( task2) Thread B task_group1.run( task3) Thread A structured_task_group1.run( task2)
  • 66. 초 간단!!! task 사용 방법 ppl.h파일을 포함합니다.#include <ppl.h> Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency; 태스크 그룹을 정의합니다.structured_task_groupstructured_tasks; 태스크를 정의합니다.auto structured_task1 = make_task([&] { Plus(arraynum1, true); } ); 태스크를 태스크 그룹에 추가한 후 실행합니다.  structured_tasks.run( structured_task1 ); 태스크 그룹에 있는 태스크가 완료될 때까지 기다립니다.structured_tasks.wait();
  • 68.
  • 69. for( i = 0; i < 1000000; ++i ) { ………… ………… }
  • 70. Parallel Algorithms 데이터컬렉션을 대상으로 쉽게 병렬 작업을 할 수 있게 해주는 알고리즘들. STL에서 제공하는 알고리즘과 비슷한 모양과 사용법. paeallel_for, parallel_for_each, parallel_invoke가 구현되어 있음.parallel_accumulate, parallel_partial_sum는 다음 버전?
  • 71. parallel_for for 문을 병렬화. for 문과 사용 방법이 흡사하여 쉽게 변환. step 값을 지정하는 버전과 지정하지 않는 버전 두 개가 있음(지정하지 않으면 1). index 조사는 ‘<‘만 지원.
  • 72. 초 간단!!! parallel_for사용 법 ppl.h파일을 포함합니다.#include <ppl.h> Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency; parallel_for에서 호출할 함수 정의 parallel_for에서 사용할 data set 정의. parallel_for사용.
  • 73. parallel_for_each STL의 for_each알고리즘을 병렬화. for_each와 사용 방법이 같음.
  • 74. 초 간단!!! parallel_for_each사용 법 ppl.h파일을 포함합니다.#include <ppl.h> Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency; parallel_for_each에서 호출할 함수 정의 parallel_for_each에서 사용할 data set 정의. parallel_for_each사용.
  • 75.
  • 76.
  • 77. parallel_invoke 병렬로 일련의 태스크 실행. 동시 실행할 복수의 독립된 태스크를 실행할 때 좋음. task_group과 비슷하나 사용방법은 더 쉬움그러나 최대 10개의 태스크만 병렬 작업이 가능하다.
  • 78. 초 간단!!! parallel_invoke사용 법 ppl.h파일을 포함합니다.#include <ppl.h> Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency; 태스크 정의 parallel_invoke사용.
  • 79.
  • 80. parallel objects - combinable 스레드세이프한 오브젝트. 계산 실행 후 최종 결과에 그 계산 결과를 통합하는 재 사용 가능한 로컬 스트리지 제공. 복수의 스레드 또는 태스크 간에 공유 리소스가 있는 경우 편리. lock-free thread-local sub-computations during parallel algorithms combinable 클래스에 사용할 데이터는 기본 생성자와 복사 생성자를 가지고 있어야 한다. Win32 API의 thread local storage와 비슷. combine, combinable_each제공
  • 81.
  • 82.
  • 83. concurrent containers 병렬 환경에서 스레드 세이프하게 데이터를 저장. concurrent_queue, concurrent_vector,. concurrent_hash_map은다음 버전?
  • 84.
  • 85. 전체적인 인터페이스는 vector와 비슷하나 제한이 있슴.
  • 86. 기존 요소의 값을 변경할 때는 스레드 세이프하지 않음. 기존 요소의 값을 변경할 때는 동기화 객체를 사용하여 lock을 걸어야 합니다.
  • 87.
  • 88.
  • 90. 반복자를 지원하지만 스레드 세이프 하지 않다.
  • 91. front와 pop 함수를 지원하지 않음. 대신에 try_pop함수를 대신해서 사용.
  • 92. back 함수를 지원하지 않는다. 그러므로 마지막 요소를 참조하는 것은 불가능하다.
  • 93. size 메소드 대신 unsafe_size함수를 지원한다. unsafe_size는 이름 그대로 스레드 세이프 하지 않다.
  • 94.
  • 97.
  • 100.
  • 101.
  • 102. 참고
  • 103. AMD가 차기 아키텍쳐 「Bulldozer」와「Bobcat」의 개요를 공표 원문 : http://pc.watch.impress.co.jp/docs/column/kaigai/20091112_328392.html 번역 : http://jacking.tistory.com/487 http://jacking.tistory.com/488 http://jacking.tistory.com/489 2011년에 등장하는 AMD의 8코어 데스크탑 CPU 「Zambezi」 원문 http://pc.watch.impress.co.jp/docs/column/kaigai/20091126_331235.html 번역 http://jacking.tistory.com/514 http://jacking.tistory.com/515 http://jacking.tistory.com/516 Core i5/i7 원문 http://www.atmarkit.co.jp/fwin2k/words/011corei5/corei5.html 번역 http://jacking.tistory.com/510 http://jacking.tistory.com/511
  • 104. 계획이 바뀐 Larrabee무엇이 문제였는가? http://jacking.tistory.com/517 http://jacking.tistory.com/518 마이크로소프트 Windows 7에서도 병렬처리 향상을 목표로 http://jacking.tistory.com/355 [PDC09] Developing Applications for Scale-Up Servers Running Windows Server 2008 R2 http://microsoftpdc.com/Sessions/SVR18 [PDC09] Lighting up Windows Server 2008 R2 Using the ConcRT on UMS http://microsoftpdc.com/Sessions/SVR10 양보할 줄 아는 Concurrency Runtime의 event http://vsts2010.tistory.com/109 Cross Process Resource Management - do we need it now? http://blogs.msdn.com/nativeconcurrency/archive/2010/04/07/cross-process-resource-management-do-we-need-it-now.aspx
  • 105. Concurrency::task_group leaks memory http://social.msdn.microsoft.com/Forums/en/parallelcppnative/thread/15799a79-cca0-4c51-85e3-64ea1e26981d MSDN – Concurrency Runtime http://msdn.microsoft.com/en-us/library/dd504870(VS.100).aspx VSTS 2010 스터디블로그 http://vsts2010.net Parallel Programming in Native Code http://blogs.msdn.com/nativeconcurrency/default.aspx 본인 블로그 http://jacking.tistory.com/