OpenMP
- Open Multi-processing
- 공유 메모리 병렬 프로그래밍 모델
- C, C++, Fortran 지원
- 컴파일러 지시어(directive) + API 함수로 구성
- 명시적으로 thread를 다루지 않음
- pthread_t 등의 변수를 사용하지 않음
- 컴파일 시 컴파일러 옵션을 주어야 함(-fopenmp)
- ex) gcc -o test test.c -fopenmp
- 컴파일러 지시어를 통해 코드 내 특정 영역을 여러 개의 스레드가 실행
OpenMP 기본 API
#pragma omp parallel
뒤에 이어 오는 코드 블록(중괄호로 묶인 영역)을 멀티 스레드로 실행
기본 값으로 OS가 인식하는 코어 개수만큼 스레드를 생성
int omp_set_num_threads(int thread_num)
Parallel하게 실행되는 영역에서 몇 개의 스레드를 사용할 것인지 설정
기본 값은 OS가 인지하는 코어 개수
int omp_get_thread_num()
- Thread id를 반환
- N개의 스레드를 생성했다면, Thread id는 0 ~ N-1 중 하나
- ex1) Hellow world 출력
- tid에 Thread id를 저장한 후 thread 별로 "Hello, world!"를 출력한다.
- 실행결과 각 thread 별로 "Hello, world!"가 출력되었음을 알 수 있다.
- 코드에서 thread 개수를 정해주지 않았기 때문에 OS가 기본으로 인식하는 코어 수가 24개 임을 알 수 있다.
반응형
'멀티코어 프로그래밍 > OpenMP' 카테고리의 다른 글
OpenMP Directives (3) | 2022.04.09 |
---|---|
OpenMP 프로그래밍 (0) | 2015.07.17 |
댓글