반응형

MultiProcessProgramming 18

MS 비동기 에이전트 라이브러리 소개: #2 Hello World

비동기 에이전트 라이브러리(Asynchronous Agent Library)를 사용하여 Hello World를 출력하는 아래 예제를 살펴보겠습니다. #include #include #include #include #include using namespace concurrency; using namespace std; class agent_01_a : public agent { public: explicit agent_01_a(ISource& source, ITarget& target) : source_(source), target_(target) { } protected: void run() { send(target_, string("Hello")); string response = receive(sou..

MS 비동기 에이전트 라이브러리 소개: #1 개념

비동기 에이전트 라이브러리(Asynchronous Agent Library)는 아래와 같은 특성을 갖는 병렬처리 라이브러리입니다. MPI와 같이 메시지 기반으로 병렬 처리를 합니다. 참고: [MPP] Introduction To Message Passing Interface(MPI) 액터 기반(Actor-Based) 기반의 프로그래밍 모델을 제공합니다. 액터 기반의 프로그래밍 모델은 각각의 독립된 처리를 하는 액터들이 메세지를 주고 받으며 병렬처리를 하는 프로그래밍 방식입니다. 참고: Actor-based Concurrency 비동기 에이전트 라이브러리는 독립적인 일을 하는 에이전트 들이 존재하며 이들은 데이터 흐름에 기초한 비동기적 통신을 위한 연결을 가지고 있습니다. 위의 참고 자료를 보면 액터 기반..

병렬처리 개념 강좌: #6 설계 관련 팁

병렬 처리를 설계할 때 생각해 보면 좋은 것들은 아래와 같습니다. 병렬적으로 처리될 수 있도록 프로그램을 설계합니다. 프로그램에 따라서 단일 처리를 병렬 처리를 하기 위해서는 단순히 API를 사용하는 것 이상으로 프로그램 디자인 형태가 병렬 처리에 적합해야 하고 때때로 병렬처리를 위하여 수정해야할 수도 있습니다. 처음 디자인시 병렬 처리에 적합하도록 설계하면 좋습니다. 쓰레드를 고려하지 않고 단일 쓰레드 환경에서 작업 태스크 중심으로 설계를 합니다. 병렬처리는 앞에 설명한 대로 크게 2가지의 처리 형태를 가집니다. 멀티 쓰레드 사용 형태 보다는 이 CPU 관련 작업의 성능 향상을 할 수 있는 2가지 형태에 적합하도록 설계하는 것이 좋습니다. 로직의 디버깅을 위하여 병렬처리 뿐만 아니 단일처리에서도 동작하..

강좌 2021.11.09

병렬처리 개념 강좌: #5 설계 관련 3가지 생각 포인트

병렬처리 설계를 할 때 살펴보아야 할 3가지 포인트가 있습니다. 1. 확장성(Scaling) 코어 개수의 변화에 따라 성능이 더욱 좋아지도록 설계를 하여야 합니다. 데이터 병렬처리에서 100개의 데이터를 처리한다고 하였을 때 코어가 2개일 때는 각각 50개씩, 코어가 4개일 때는 각각 25개씩 처리할 수 있게 설계하는 것 같은 것이 좋은 예일 것입니다. 2. 적절성(Correctness) 병렬 처리를 통한 성능 향상에 최적화되도록 설계를 하여야 합니다. 병렬처리 프로그래밍은 멀티 쓰레드가 동시에 한 자원에 접근하였을 때 발생하는 동기화 문제가 발생할 수 있습니다. 또한 데드락 문제도 발생할 수 있습니다. 이는 멀티 쓰레드의 개별 쓰레드처럼 병렬 처리의 각각의 쓰레드도 처리를 위하여 자원을 사용하기 때문입..

강좌 2021.11.08

병렬처리 개념 강좌: #4 2가지 종류의 병렬처리

병렬처리는 사용 개념적으로 보았을 때 크게 데이터 처리 기반 병렬처리와 태스크 처리 기반 병렬처리로 나누어 질 수 있습니다. 데이터 처리 기반 병렬 처리(Data Parallelism) 큰 데이터를 분할하여 여러 개의 프로세스가 처리하는 것을 말합니다. 간단히 4개 코어를 기반으로 100개의 데이터를 처리한다고 하였을 때 1~25, 26~50, 51~75, 76~100 이렇게 데이터를 나누어서 4개의 코어가 각각 처리하는 것을 예로 들 수 있습니다. 이렇게 처리하면 데이터를 처리하는 부분은 이론적으로 N배의 성능 향상을 가져올 수 있습니다. 태스크 처리 기반 병렬 처리(Task Parallelism) 여러 개의 작업을 각각의 프로세스에게 분배하여 다중 처리하는 것을 의미합니다. 3개의 코어가 3개의 함수..

강좌 2021.11.07

병렬처리 개념 강좌: #3 암달의 법칙

병렬처리를 한다고 무조건 성능 향상이 되는 것은 아닙니다. 병렬처리를 하여 성능이 향상될 수 있는 부분이 존재할 때 성능이 향상될 수 있습니다. 병렬처리를 하여 성능이 향상되는 부분이란 쉽게 이야기 하여 처리를 여러 개의 코어에서 나누어 연산할 수 있는 부분을 의미합니다. 병렬처리를 통한 성능 향상은 전체 처리의 관점에서 보아야 합니다. 부분에서의 몇 백%의 성능 향상을 할지라도 그게 전체 처리에서의 몇 백%의 성능 향상을 의미하지는 않기 때문입니다. 그럼, 병렬처리를 통하여 어느 정도의 성능 향상을 가져올 수 있을까요? 이 문제에 대하여 이론적인 계산을 가능하게 하는 방법이 암달의 법칙입니다. 암달의 법칙은 연산의 P비율만큼만 병렬화가 가능하여 S만큼의 성능 향상이 있을 경우, 최대 속도 향상은 1 /..

강좌 2021.11.06

병렬처리 개념 강좌: #2 병렬처리가 대중화되는 배경

오래 전에는 프로세스에 코어라는 개념으로 이야기한다면 1개의 코어만을 가지고 있었습니다. 또한 여러 개의 프로세스를 가지는 경우는 서버나 워크스테이션 같은 고가의 컴퓨터에만 존재하였습니다. 이 때는 병렬 처리는 대중적이지 않았습니다. 하지만 하나의 프로세스에 N개의 코어를 가지는 컴퓨터가 대중화된 현재 시점에서는 멀티 코어를 활용하여 성능을 올리는 것이 점점 대중화되고 있습니다. 대표적으로 최신 게임 중에서 멀티 코어를 활용하여 성능을 올리는 것을 찾아보는 것은 그리 어렵지 않습니다. 잠시 병렬 처리의 대중화를 만들고 있는 멀티 코어가 CPU 구조에서 대세가 된 배경을 잠시 살펴보면 아래와 같습니다. CPU의 클럭이 발열과 추가적인 전기 소모 문제로 현재 이상의 높은 클럭으로 가기가 쉽지 않습니다. 또한..

강좌 2021.11.05

병렬처리 개념 강좌: #1 병렬처리의 개념

병렬처리 혹 다른 표현으로 멀티프로세스 프로그래밍이란 쉽게 이야기하여 하나의 프로그램을 하나의 프로세스가 아닌 N개의 멀티 프로세스를 이용하여 개발하는 것을 의미합니다. 이렇게 개발하는 이유는 여러 개의 프로세스를 동시에 활용하여 성능을 향상시키기 위함입니다. 참고로 최근에는 쓰레드 별로 프로세스를 할당하여 비슷하여 보이지만 기본적으로 하나의 프로세스에서 N개의 쓰레드를 실행하는 멀티쓰레드 와는 다른 개념입니다. 멀티 쓰레드 프로그래밍은 IO 관련 처리에서 비약적으로 성능을 향상시켜주는 데 비하여 멀티 프로세스 프로그래밍, 병렬 처리는 CPU 관련 처리에서 비약적으로 성능을 향상시켜줍니다.

강좌 2021.11.04

C/C++ 병렬처리(멀티프로세스) 라이브러리 선택

프로그램의 CPU 바운드 작업의 성능을 올리기 위하여 병렬처리 라이브러리를 오랜 만에 살펴보았다. 찾아본 순서와 특징은 아래와 같았다. Intel Threading Building Block(TBB) 인텔에서 만든 것으로 Modern C++ 스타일로 만들어져 있다. AMD도 지원하며 주며 Windows, Linux등 멀티OS를 지원한다. 최근까지도 업데이트 되었다. 오픈소스 버전으로 비상업적인 이용시에는 자유롭지만 상업적인 이용시에는 GPLv2 라이센스로 이용한 코드를 공개해야 한다. 상업적인 이용시에는 상용 버전의 라이브러리 구매가 필요로 하는 듯 보였다. 라이센스 관련 링크 오픈소스 버전은 어떻게 인스톨해야 하는지 찾아보지 않아서, 오픈소스가 아닌 인텔사이트에서 다운받는 것은 다른 팩키지까지 같이 들..

[MPP] Visual Studion 2010 Parallel Patterns Library (PPL) 예제

Four Ways to Use the Concurrency Runtime in Your C++ Projects 2009년 10월의 msdn매거진에 나온 병렬 런타임을 사용하는 예제입니다. User Interface의 반응성을 높이기 위하여 배경쓰레드를 사용하는 전통적인 방법을 PPL의 agent를 활용하였을 떄 얼마나 코딩이 더 쉬워지고, 더 굳건해지는 지를 보여주고 있습니다. 참고로 Agent는 병렬처리 엔진에 의한 별도의 쓰레드에서 작동하며 메시지로 데이터를 주고 받습니다. 병렬처리용인 관계로 CPU 개수나 코어 개수에 따라 물리적으로는 별도의 CPU에서 작동할 것입니다. 다른 말로 바꾸면 싱글CPU에서는 오히려 오버헤드가 걸린다는 이야기가 됩니다. 개인적인 지식과 경험으로 보았을 때는 IOCP같은 ..

[MPP] Visual Studion 2010 Parallel Patterns Library (PPL) ver 1.01

Parallel Patterns Library (PPL)은 Visual Studio 2010에 포함될 예정인 Microsoft의 템플릿 기반 멀티프로세스 프로그래밍 라이브러리 입니다. 라이브러리는 MS독자적인 모델로 인텔의 쓰레딩빌딩블록과 유사한 형태를 가지고 있으며 전반적인 인터페이스 모양은 쓰레딩빌딩블록처럼 STL의 모습을 따릅니다. VS2010의 병렬런타임(Concurrency Runtime)은 협업적 태스크 스케줄링(Cooperative Task Scheduling)과 협업적 블록킹(Cooperative Blocking)에서 강점을 가지고 있습니다. 개념적으로 보자면 협업적 태스크 스케줄링이라는 것은 태스크가 끝난 쓰레드에 자동으로 사용 가능한 다른 태스크를 할당하는 등의 효과적인 스케줄링을 의미..

[MPP] Introduction to Intel's Threading Building Block

Intel's Threading Building Block은 멀티프로세서 프로그래밍을 지원하는 인텔의 C++ 템플릿 라이브러리로 멀티플랫폼을 지원합니다. 이 라이브러리는 Epic Games Unreal Engine3 에 포함되어 있습니다. 자세한 것은 정식 홈페이지를 참고하여 주세요. MPP에 대한 대부분의 것이 그러하듯 라이브러리 사용법은 그리 어렵지 않으나 배경지식으로 요구하는 것이 꽤 있고 난이도가 좀 있습니다. 뭐랄까 개인적으로는 멀티쓰레드 프로그래밍이 OS에 대한 개념을 많이 요구하는데 비하여 멀티프로세서 프로그래밍은 CPU, Cache, Memory와 같은 H/W 동작 앨고리듬에 대한 지식과 병렬처리에 대한 개념을 요구합니다. 제가 읽은 것은 Tutorial로 집중력과 끈기를 요하며 시간이 좀..

[MPP] 메모리 일치 모델(Memory Consistency Models)

이틀에 걸쳐 읽은 글은 Memory Consistency Models 라는 글입니다. 멀티프로세서 관련 프로그래밍을 요새 주의 깊게 보고 있는데 정말로 배경으로 요구하는 지식이 64bit 프로그래밍과는 수준을 달리하는 것 같습니다. 이 글은 배경지식이 되는 글로 메모리의 동기화 모델에 대하여 나와 있습니다. 멀티CPU에서의 동기화는 싱글CPU와는 다른 캐쉬간의 동기화 문제가 발생하는 관계로 이런 글은 참고로 읽어둘 필요가 있습니다. 참고로 이 글은 분산처리에서의 공유메모리에 대해서도 언급하고 있습니다. 간단히 요약하면 아래와 같으며 흥미를 느끼신다면 원문을 찾아 읽으시길 바랍니다. 원문에는 Shared Memory Consistency Models: A Tutorial을 읽어볼 것을 추천하고 있습니다. ..

[MPP] Introduction To Message Passing Interface(MPI)

Message Passing Interface(MPI)란? OpenMP와 함께 병렬처리 프로그래밍의 표준의 한축을 담당하고 있는 Message Passing Interface는 슈퍼컴퓨터에서 나온 개념 입니다. CPU가 공유메모리가 아닌 직접적인 통신을 할 때 사용하는 메시지 기반 API로 90년대 초반 벤더별 API가 개발되기 시작하여, 표준API 초안이 1994년 12월에 나왔습니다. OpenMP가 병렬 태스크 범위와 범위에 따른 처리 CPU 개수들을 지정하는데 비하여 MPI는 개별 CPU를 제어합니다. MPI API의 주요 목적은 공유메모리가 아닌 CPU간 직접 메시지 통신이지만 이 통신을 통하여 Master-Slave구조가 이루어져 Master CPU에서 보낸 메시지에 따라 Slave CPU들이 ..

반응형