728x90
관련 코드 설명
- #pragma omp parallel {} : {}안에 코드를 각 Thread에서 실행해라
- #pragma omp parallel for + for 문 : for 문을 Thread에 나눠서 실행해라
- #pragma omp parallel sections { #pragma omp section{} } : section 별로 Thread 할당하여 실행해라
관련 함수 설명
- omp_get_max_threads() : 현재 사용가능한 Thread 개수 반환
- omp_get_thread_num() : 현재 사용하고 있는 Thread Number 반환
OpenMP 옵션 켜기
프로젝트 → 프로젝트 속성 → C/C++ → 언어 → OpenMP 지원을 예로 변경
Code (#pragma omp parallel)
#include <stdio.h>
#include <omp.h>
int main()
{
#pragma omp parallel
{
printf("Id : %d\n", omp_get_thread_num());
}
return 0;
}
Result (#pragma omp parallel)
16개의 Thread가 각각 실행된 것을 확인할 수 있습니다.
Code (#pragma omp parallel for)
#include <stdio.h>
#include <omp.h>
int main()
{
#pragma omp parallel for
for (int i = 0; i<32; i++)
{
printf("idx: %2d, ID : %2d\n", i, omp_get_thread_num());
}
return 0;
}
Result (#pragma omp parallel for)
16개의 Thread가 32개의 for문을 2개씩 맡아서 실행한 것을 확인할 수 있습니다.
Code (#pragma omp parallel sections)
#include <stdio.h>
#include <omp.h>
int main()
{
#pragma omp parallel sections
{
#pragma omp section
{
for (int i = 0; i < 8; ++i)
{
printf("A. idx: %2d, ID : %2d\n", i, omp_get_thread_num());
}
}
#pragma omp section
{
for (int i = 0; i < 8; ++i)
{
printf("B. idx: %2d, ID : %2d\n", i, omp_get_thread_num());
}
}
#pragma omp section
{
for (int i = 0; i < 8; ++i)
{
printf("C. idx: %2d, ID : %2d\n", i, omp_get_thread_num());
}
}
}
return 0;
}
Result (#pragma omp parallel sections)
- 각 section에 Thread 할당하여 병렬로 실행된 것을 확인할 수 있습니다.
'프로그래밍 > C, C++' 카테고리의 다른 글
[Visual Studio 2015, C/C++] DLL, exe 파일 버전 가져오기 (GetFileVersionInfoSize) (0) | 2023.08.08 |
---|