Introduction

OpenMP는 하고자 하는 작업을 thread 별로 할당하여 병렬로 계산하는 방법이며, 공유 메모리를 통해 작업을 처리한다. 공유 메모리를 어떻게 사용할 것인가가 중요하다. Master thread외에는 계산하고자 하는 Thread를 임의로 정할 수 없다.

병렬작업을 이야기할 때 forkjoin을 이야기한다. 작업이 병렬화될 때를 fork라고 하며, 병렬작업이 끝날때를 join이라고 한다. 코드에서 !$omp parallel 명령어가 작업을 병렬화해 주는 시점(fork)이 된다. !$omp end parallel은 병렬화가 종료되는 지점(join)이다.

Install

$ sudo pacman -S gcc

Compile

Compile시에는 옵션을 넣어주어야 하며, 제조사별로 옵션명 다르다.

  • GCC -fopenmp

  • Intel -qopenmp

  • PGI -mp

$ gfortran -fopenmp -o a.out file_name.f90

그리고 몇개의 thread로 작업을 할 것인지 실행파일을 실행 전에 정해주어야 한다. 코드내에서도 정할 수 있다.

$ export OMP_NUM_THREADS=4
$ ./a.out

export OMP_NUM_THREADS=4에서 OMP_NUM_THREADS는 대문자로 써야하며 =4는 붙여써야 한다.

Useful site