병렬기법
홈 > CUDA > 병렬기법 > OpenMP 병렬화

OpenMP 병렬화

CUDA 병렬화를 익히기 위해서는 MultiCore 방식의 OpenMP 병렬화를 익히는 것도 매우 유익합니다.

 

윈도우즈에서는 Visual Studio 2003 이상에서 기본적으로 OpenMP기능이 내장되어 있습니다.  솔루션의 C/C++ 옵션창에서 OpenMP support를 넣어주면 OpenMP가 활성화 됩니다. 또한, Windows 환경변수에 Processor 갯수를 자신의 PC에 맞게 설정해줘야 합니다.

 

 

다음의 코드는 간단하게 MultiCore 시스템에서 병렬화 하는 기법을 보여주고 있습니다.

#include

#include

#include

 

int main (int argc, char *argv[])

{

int nthreads, tid;

 

/* Fork a team of threads giving them their own copies of variables */

#pragma omp parallel private(nthreads, tid)

  {

 

  /* Obtain thread number */

  tid = omp_get_thread_num();

  printf("Hello World from thread = %d\n", tid);

 

  /* Only master thread does this */

  if (tid == 0)

    {

    nthreads = omp_get_num_threads();

    printf("Number of threads = %d\n", nthreads);

    }

 

  }  /* All threads join master thread and disband */

 

}

 

 

다음은 reduction예를 표현하고 있습니다.

 

#include

#include

#include

 

int main (int argc, char *argv[])

{

int   i, n;

float a[100], b[100], sum;

 

/* Some initializations */

n = 100;

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

  a[i] = b[i] = i * 1.0;

sum = 0.0;

 

#pragma omp parallel for reduction(+:sum)

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

    sum = sum + (a[i] * b[i]);

 

printf("   Sum = %f\n",sum);

 

}

 

 

#pragma omp parallel 명령을 통해 FOR 루프가 자동 병렬화 됩니다.

특히, reduction 명령을 내장하고 있어 쉽게 reduction 구현이 가능합니다.