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
'프로그래밍 언어 > C, C++의 기본적인 설명' 카테고리의 다른 글
[C/C++] 디버그, 신텍스 에러, 세만틱 에러 (0) | 2022.02.19 |
---|---|
[C/C++] 문자/문자열 입출력 (0) | 2021.08.25 |
[C/C++] 힙(Heap), 스택(Stack) (0) | 2021.08.17 |
[C/C++] C언어 - 구조체 (0) | 2021.06.28 |
[C 언어] 헤더파일 및 분할 컴파일 정리 (0) | 2021.02.05 |
댓글