본문 바로가기
프로그래밍 언어/C, C++의 기본적인 설명

[C 언어] fopenmp - 스레드 하나만 사용하는 경우

by UltraLowTemp-Physics 2021. 1. 30.
728x90

c로 작성한 소스코드를 컴파일을 하고 링크를 하여 실행 프로그램을 만든 후, 해당 프로그램을 실행시키니 코어 하나만 사용을 하는 문제가 발생하였다. 확인을 해보니 컴파일시 -fopenmp를 링크를 걸어주지 않음으로 발생한 문제였다. 다행히 나와같은 문제점을 올린 사람이 있어서 해결방법을 쉽게 찾을 수 있었다 [1]. 

아래는 위 링크의 코드 및 컴파일, 링크의 예시이다.

파일명: main.c

#include <omp.h>
#include <stdio.h>

int main()
{
  #pragma omp parallel
  {
    fprintf(stderr, "thread %d\n", omp_get_thread_num());
  }
  return 0;
}

  (1) 컴파일: $gcc main.c -c -fopenmp
  (2) 링크: $gcc main.o -o example.out -fopenmp 

만약 위의 경우와 달리 링크시에 -fopenmp를 할 경우, 정상적으로 openmp를 사용할 수 없다.
그 이유는 코드 내에서 #pragma omp를 정상적으로 처리하기 위해서, 컴파일 시에도 -fopenmp가 필요하며, 링크 시에는 <omp.h>와 관련된 라이브러리를  링크하기 위해 필요하다. 

 

Reference:
[1] stackoverflow.com/questions/41403823/fopenmp-flag-in-compile-and-link 

728x90

댓글