Houkibosi 2013. 10. 2. 19:40

1. worksharing construct의 종류를 나열하시오

- #pragma omp ( for )

- #pragma omp ( sections )

- #pragma omp ( single )


2.속칭 숨겨진 베리어(barrier)를 없애기 위한 clause는 ( nowait ) 이라 한다.

  이는 worksharing construct 의 뒤에 붙는다.


3.다음은 openmp의 동기화 방법들이다. 빈칸을 채우라.

- 상호배제

  : #pragma omp critical

- 배리어

  : #pragma omp barrier

- ( atomic ) 명령

  : #pragma omp barrier

- 기타

  : #pragma omp ordered


4. 다음과 같을때 

#pragma omp parallel for

for(i = 0; i <= 1000; i++)

   #pragma omp critical(loop)

sum = sum + i; ------- (A)

   #pragma omp critical(loops)

sums = sums + i; ------(B)

한쓰레드가 임계구역 A를 실행할 동안 다른 쓰레드가 임계구역 B를 동시에 실행 할수 ( 있다 )


5.다음는 (tip- 데이타 레이스) 로 인하여 부정확한 결과를 출력하게 된다.

  알맞게 고쳐 보라.


int array[32] ={0};

int sum = 0, i;

#pragma omp parallel private(i)

{

i = omp_get_thread_num();

array[i] = i + 1;

#pragma omp critical

{

   sum = sum + array[(i + 1) % omp_get_num_threads()];

}

}   


(   6번 라인 하단에 barrier 지시어가 삽입되어야 한다. #pragma omp barrier    )