일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 구글 앱 엔진
- 증강현실
- 갤럭시탭S8울트라
- 하이퍼바이저
- Bidirectional Associative Memory
- 인공지능
- BAM
- 신경회로망
- 삼성전자 소프트웨어멤버십 SSM
- 삼성소프트웨어멤버십
- Friendship
- 나르왈프레오
- Neural Network
- 패턴 인식
- 신경망
- hopfield network
- 물걸레자동세척로봇청소기
- 동아리
- Python
- 가상화
- 물걸레로봇청소기추천
- NarwalFreo
- 고려대학교
- 패턴인식
- 삼성
- 빅데이터
- SSM
- Google App Engine
- 멤버십
- 파이썬
- Today
- Total
정보공간_1
[2기 전주 박준형] OpenMP 프로그래밍 개요 본문
OpenMP 프로그래밍??
OpenMP(Open Multi-Processing)는 공유 메모리 다중 처리 프로그래밍 API로 C, C++, 포트란 언어와, 유닉스 및 마이크로소프트 윈도우 플랫폼을 비롯한 여러 플랫폼을 지원합니다..
이는 공유 메로리 병렬화를 이용하고자 수행하던 작업들을 간편화하여 손쉽게 사용할 수 있습니다. 윈도우와 리눅스에서 사용하던 복잡한 부가적인 과정을 개선하고, 기존의 싱글스레드 프로그램에서 3~4개의 지시어만 추가하면 멀티스레도 동작하게 됩니다.
싱글스레드 Hello World를 Windows 병렬 Hello World로 바꿔주었으며, Thread의 갯수를 4개 정하고 이를 생성하기 위해 4개의 핸들을 가진 배열에 할당하였습니다..
CreateThread -> 스레드를 생성하기 위한 Windows API 함수
WaitForMultipleObjects -> 모든 스레드가 작업을 완료할 때까지 메인 함수가 완료 되는 것을 방지
병렬화 코드에서 미리 설정된 스레드 개수에 따라 복수의 스레드가 프로그램의 동작을 실행하게 됩니다.
#paragma omp parallel -> 마스터 클래스가 자신을 포함하여 설정된 개수에 맞게 복수의 스레드
생성(FORK)
num_threads(4) -> 보조 지시어. 스레드 4개로 동작하라!! 마스터 스레드(1) + 슬레이브 스레드(3)
JOIN -> 병렬 영역의 스레드가 지정된 작업을 모두 완료하여 마스터 스레드를 제외한 슬레이브
스레드가 모두 소멸하는 것입니다.
윈도우와 리눅스의 멀티스레드 구현
-
병렬화할 부분을 찾아낸다. ex) printf("Hello world\n")
-
병렬화할 부분을 별도 함수로 분리시킨다. ex) PrintHelloWorld(LPVOID arg)
-
별도의 스레드를 생성하여 작업할 함수를 연결한다. ex) CreateThread( , , PrintHelloWorld, , ,)
-
동기화가 필요하면 동기화 기능을 구현한다.
-
메인 스레드는 별도 생성된 작업 스레드의 작업 완료를 기다린다. ex) WaitForMultipleObjects
OpenMP의 멀티스레드 구현
-
병렬화할 부분을 찾아낸다.
-
동기화가 필요하면 동기화 기능을 구현한다.
-
프로그램의 오류가 발생하면 디버깅을 한다.
-
순차 프로그램과 병렬 프로그램의 성능을 평가한다.
기존의 윈도우나 리눅스에서 멀티스레드 프로그래밍을 위해 구현했던 과정이 줄어든 것을 확인 할 수 있습니다.
생략된 부분은 프로그래머가 구현할 필요가 없이 OpenMP에서 자동으로 지원해줍니다.
OpenMP는 3~4개의 지시어 추가로 멀티스레드 지원을 받을 수 있고, 병렬화할 부분을 별도 함수로 만들거나 스레드를 생성하는 코드를 직접 만들 필요가 없습니다. 메인 스레드도 작업 구문을 함께 수행하며 디폴트로 작업 스레드의 작업 완료를 기다립니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[2기 수원 이동욱] 소리의 이해 (2/2) (0) | 2012.09.26 |
---|---|
[2기 대전 김형순] Boston Dynamics ‘BigDog’ 2 (0) | 2012.09.26 |
[2기 수원 이상웅] 리눅스 시스템 정보 알기 1 (/proc) (0) | 2012.09.25 |
[2기 강북 이도광] Web role의 기초 (0) | 2012.09.25 |
[2기 수원 곽지혜] Data Visualization (1) | 2012.09.25 |