본문 바로가기

Programming

(15)
OpenMP 작업 분할(Work Sharing) 지시어 작업 분할(Work Sharing) 지시어 수행해야 할 작업들을 생성된 스레드 팀에 적절하게 배분하여, 병렬 수행하도록 지정하는 지시어를 작업 분할 지시어라고 한다. for 지시어, sections 지시어, single 지시어, task 지시어가 있다. 1. for 지시어for 지시어는 #pragma omp parallel 영역 안에서 사용되며, #pragma omp for 지시어 다음에 오는 for루프 문을 병렬화 한다.for 루프 문을 수행할 때 작업을 배분해주는 양이나 방법을 정하는 규칙을 스케줄(schedule)이라고 한다. for 루프 문의 디폴트 스케줄은 static으로 반복 루프 수행할 총 횟수를 스레드에 개수로 나누어 스레드 별로 동일하게 배분해준다. 문법#pragma omp for [보조..
OpenMP 지시어(Directive) OpenMP 지시어 OpenMP지시어의 사용법을 익히면 생성된 멀티 스레드를 더 자유롭게 제어하고 순차 프로그램보다 훨씬 뛰어난 성능을 얻을 수 있다.OpenMP 지시어는 #pragma omp 구문 이후에 단독으로 지시어를 사용하여 병렬처리에 대한 주된 활용을 지정할 때 사용한다. 스레드의 병렬영역, 작업 분할, 실행 순서, 동기화와 같은 큰 흐름을 정의한다. (1) 병렬처리 제어OpenMP에 의한 병렬 영역을 정의한다. - 병렬영역(Parallel Regions) 지시어#pragma omp parallel 지시어 - 작업분할(Worksharing) 지시어#pragma omp for 지시어 #pragma omp sections 지시어#pragma omp single 지시어#pragma omp task 지..
OpenMP 스레드 메모리 공간 이해하기 스레드 메모리 공간 각각의 객체는 고유한 메모리 영역을 가지게 된다. 클래스, 글로벌, 정적변수, 동적 메모리와 같이 다양한 객체들이 자신들 변수를 소유한다. OpenMP가 지원하는 스레드들도 각각의 고유한 메모리 영역을 가지게 되는데, 이것을 잘 구분해야만 병렬처리를 하면서 작업을 배분하거나 결과를 얻어낼 때 데이터 경쟁 같은 오류를 막을 수 있다. 공유 메모리 영역#pragma omp parallel 지시어 영역 밖에 있는 메모리 변수는 생성된 스레드가 공유할 수 있다. 모든 스레드가 읽고 쓰기를 할 수 있다고 하여 공유 메모리(shared)변수라고 한다. 만일 2개의 스레드가 하나의 변수의 값을 수정하면 어떻게 동작하게 될지 살펴보자. 0으로 초기화 된 공유 메모리 변수 x가 있다. 0번 스레드가 ..
OpenMP (반복루프, 작업, 태스크)의 병렬처리 방법 반복 루프의 병렬처리 반복 루프 작업을 여러 개의 스레드로 나누어 빠르게 처리할 수 있는 방법을 알아본다. OpenMP 지시어는 다음과 같은 의미로 쓰이게 된다. 1. #pragma omp parallel : 지정된 스레드에 맞춰 스레드를 생성해 주세요.2. #pragma omp for : 다음에 나오는 for 루프 작업을 생선된 스레드에 맞춰서 배분해 주세요. // for 루프 작업 분할이 된 병렬프로그램 // forparallel.c #include "stdafx.h" #include #include "math.h" int _tmain(int argc, _TCHAR* argv[]) { const int MAX = 100000000; float* Data; Data = new float[MAX]; in..
OpenMP 병렬 프로그래밍 구현 순서 병렬 프로그래밍 구현 순서 Multi-Thread 프로그래밍의 특징을 보면 다음과 같다. 1. 병렬화할 부분을 찾아낸다. 순차 프로그램의 모든 부븐을 병렬 프로그램으로 변경할 수는 없다. 병렬화 부분이 많으면 많을 수록 프로그램의 성능이 향상되지만, 그만큼 시간과 자원이 많이 들어가게 된다.따라서 해당하는 프로젝트의 환경에 따라 얼마나 많은 부분을 병렬화 할지에 대한 판탄을 해야한다. 시간과 자원이 많이 있고, 프로그램의 성능이 향항이 중요하면 병렬화를 최대한 많이 적용하면 될 것이고, 그렇지 않으면 가장 필수적인 부분을 병렬화하도록 선택해야 한다.병렬화할 부분을 선택하는 기준은 다음과 같다.1) 프로그램을 실행하였을 때 가장 많은 시간이 할당되는 부분을 찾는다. 동작 시간이 가장 많이 대체로 프로그램의..
MPI란 무엇인가? 1. MPI란 무엇인가? MPI는 분산메모리 환경에서 데이터를 주고받는 표준 라이브러리를 의미한다.분산메모리에서는 OPenMP를 사용할수 없고 공유메모리에서 사용 공유메모리조차 많아질경우 네트워크로 연결되어 다른메모리를 같이 쓰는 분산메모리 환경에서 병렬컴퓨팅 전략 1.1 분산메모리에서 컴퓨팅 전략- 네트워크로 연결되어 다른 메모리를 같이 쓰는 메모리- MPI에서 기본적으로 모든 프로세서는 독립적인 메모리를 가지고 있음- 실제 논리적으로 분선데이터, 분리데이터라는 게 기본적인 과정임 1.2 MPI (1) Message Passing Interface (2) 메시지 패싱 병렬 프로그래밍을 위해 표준화된 데이터 통신 라이브러리 (3) 분산메모리에서 프로세스들이 데이터를 서로 공유하기 위해 메시지(데이터)를 ..
CUDA의 데이터 처리 흐름 이해하기 1. CUDA의 데이터 처리 1.1 CUDA의 데이터 흐름 CUDA는 뛰어난 그래픽 카드의 연산 능력을 이용하여 처리하는 방법이다. 기존의 CPU처리 방법에 더 추가해야 하는 과정이 있다. 추가된 과정은 PC의 메모리에 있는 입력 데이터를 그래픽 카드의 메모리로 전달하고 GPU가 처리한 결과를 다시 그래픽 카드의 메모리에서 PC의 메모리로 가져오는 과정이다. CUDA의 데이터 흐름으로 (1) 그래픽 카드 메모리 공간을 할당한다. (2) PC의 입력 데이터를 그래픽 카드의 메모리로 복사한다. (3) 강력한 GPU성능을 이용하여 병렬처리한다. (4) 처리된 결과를 그래픽 카드의 메모리에서 PC의 메모리로 복사한다. 그러면 그래픽 카드에 메모리 공간을 할당하고 데이터를 복사하는 방법을 알아보자. 1.2 그래픽..