728x90
동기화
- nowait
- ordered, lock, flush
nowait
- 베리어 기능이 있는 명령어 사용시 작업이 끝날떄까지 기다림 => 시간 낭비 발생
- nowait 구문이 있을시 대기하지 않게함.
nowait 사용 예제 1
- 사용 안한경우
-> 2번이 먼저 들어오나 이후 들어오는 작업들을 대기후, 같이 수행하여 늦게 종료됨
#include <stdio.h>
#include <omp.h>
#define N 20
int main()
{
int i, a[N];
omp_set_num_threads(4);
#pragma omp parallel private(i)
{
if( omp_get_thread_num() != 2 )
sleep(5);
#pragma omp for
for(i=0; i<N; i++) {
a[i] = i;
printf("a[%d]=%d tid=%d\n", i, a[i], omp_get_thread_num());
}
printf("end %d thread\n", omp_get_thread_num());
} // pragma omp parallel private(i)
}
- 사용한 경우
2번이 먼저 들어오므로 먼저 마무리하고 나머지 스래드들의 연산 분할
=> 사용안한 경우보다 조금빨리종료
#include <stdio.h>
#include <omp.h>
#define N 20
int main()
{
int i, a[N];
omp_set_num_threads(4);
#pragma omp parallel private(i)
{
if( omp_get_thread_num() != 2 )
sleep(2);
#pragma omp for nowait
for(i=0; i<N; i++) {
a[i] = i;
printf("a[%d]=%d tid=%d\n", i, a[i], omp_get_thread_num());
}
printf("end %d thread\n", omp_get_thread_num());
} // pragma omp parallel private(i)
}
nowait 사용 예제 2 section
- 사용 안한경우
#include <stdio.h>
#include <omp.h>
#define N 4
int main()
{
int i, tid;
omp_set_num_threads(4);
#pragma omp parallel private(i, tid)
{
tid = omp_get_thread_num();
#pragma omp sections
{
#pragma omp section
{
for(i=0; i<N; i++)
printf("L1 tid=%d\n", tid);
}
#pragma omp section
{
for(i=0; i<N; i++)
printf("L2 tid=%d\n", tid);
sleep(2);
}
}
printf("end tid=%d\n", tid);
} // pragma omp parallel
}
- 사용한 경우
#include <stdio.h>
#include <omp.h>
#define N 4
int main()
{
int i, tid;
omp_set_num_threads(4);
#pragma omp parallel private(i, tid)
{
tid = omp_get_thread_num();
#pragma omp sections nowait
{
#pragma omp section
{
for(i=0; i<N; i++)
printf("L1 tid=%d\n", tid);
}
#pragma omp section
{
for(i=0; i<N; i++)
printf("L2 tid=%d\n", tid);
sleep(2);
}
}
printf("end tid=%d\n", tid);
} // pragma omp parallel
}
300x250
'컴퓨터과학 > 기타' 카테고리의 다른 글
openmp - 23. 스캐줄링과 만델브로트 (0) | 2020.07.30 |
---|---|
openmp - 22. ordered, lock (0) | 2020.07.30 |
openmp - 20. 작업 분할 지시어들 (0) | 2020.07.30 |
openmp - 19. 중첩 스레드 (0) | 2020.07.30 |
openmp - 18. 병렬 블록, 포크 조인, 동기화 문제 (0) | 2020.07.30 |