본문 바로가기
멀티코어 프로그래밍/OpenMP

OpenMP

by 기리의 개발로그 2022. 4. 8.

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

댓글