1. private
private(var1, var2, ...)
특징
고려사항
2. firstprivate & shared
firstprivate(var1, var2, ...)
shared(var2, var2, ...)
1. Example: shared var
C code
#include <stdio.h>
#include <omp.h>
int main()
{
int tid; // shared var
omp_set_num_threads(32); // thread 개수 지정
#pragma omp parallel
{
tid=omp_get_thread_num();
printf("I am %d tid = %d\n", omp_get_thread_num(), tid);
}
}
Result
omp_get_thread_num()
이 불일치하는 상황 발생shared var
2. Example: private var
C code
#include <stdio.h>
#include <omp.h>
int main()
{
int tid;
omp_set_num_threads(4); // thread 개수 지정
#pragma omp parallel private(tid) // private var
{
tid=omp_get_thread_num();
printf("I am %d tid = %d\n", omp_get_thread_num(), tid);
}
}
Result
private var
3. Example: firstprivate var
C code
#include <stdio.h>
#include <omp.h>
int main()
{
int i=10, tid;
omp_set_num_threads(4); // thread 개수 지정
// private var tid, firstprivate var i
#pragma omp parallel private(tid) firstprivate(i)
{
tid=omp_get_thread_num();
printf("tid=%d i=%d\n", tid, i);
i = 20;
}
printf("Tid=%d i=%d\n", tid, i);
}
Result
private var
i=20
이 반영되지 않음!1. 스레드와 프로세스
OpenMP: 스레드 기반
MPI: 프로세스 기반
2. Example
C code
int main()
{
int a,b,c,d;
a=10; b=5; c=2; d=4;
#pragma omp parallel private(c,d) num_threads(2)
{
c= a+10;
d= b+5;
a= a+1;
}
}
Result