20th Anniversary
  ȸ¿ø°¡ÀÔ   ȸ¿øÃ£±â
  ID PW
 
  °øÅë
  Solaris x86
  Solaris
  ÀÌÀü ³ª¸¸ÀÇ ÆÁ
 

   Á¦ ¸ñ : OpenMP
   ÀÛ¼ºÀÚ : Á¶È£¼® ³¯Â¥ : 2008-10-20
   ºÐ·ù : °øÅë Á¶È¸¼ö : 3702

OpenMP

½ã ÄÁÆÛ·±½º °¬´Ù°¡ °¡Àå ±â¾ï¿¡ ³²´Â°Ô À̰Ŷó ¿Ã·Á³õ½À´Ï´Ù.

http://www.solanara.net ¿¡ HTML ¹öÀüÀÌ ¿Ã¶ó¿Ã°Ì´Ï´Ù.

- CPU´Â ¸ÖƼÄÚ¾î/¸ÖƼ¾²·¹µåÀÇ ÇüÅ·ΠÁøÈ­ÇϰԵÊ

- µû¶ó¼­ ¾îÇø®ÄÉÀ̼ǿ¡¼­ ¸ÖƼÄÚ¾î/¸ÖƼ¾²·¹µå¸¦ È¿°úÀûÀ¸·Î »ç¿ëÇØ¾ß ÇÔ

- ¾îÇÿ¡¼­ ¸ÖƼÄÚ¾î/¸ÖƼ¾²·¹µå¸¦ »ç¿ëÇÏ·Á¸é ¾²·¹µå¸¦ »ç¿ëÇØ¾ß Çϴµ¥, À̶§ °³¹ßÈ¿À²ÀÌ ¶³¾îÁü

- ±×·¡¼­ ³ª¿Â °ÍÀÌ OpenMP. ¼Ö¶ó¸®½º 8 ÀÌ»óºÎÅÍ Áö¿øµÈ´Ù. ¾²·¹µå ÇÁ·Î±×·¥À» ÀÌ·¸°Ô ½±°Ô ¸¸µé ¼ö ÀÖ´Ù´Â°Ô ³î¶ø´Ù.

- ÇöÀç C, C++, Fortran ¿¡¼­¸¸ Áö¿øµÊ.

- export OMP_NUM_THREADS=4 ÀÇ ¼ýÀÚ¸¦ ¹Ù²ãº¸¸é¼­ ½ÇÇàÇØº¸½Ã¸é ¼º´É Â÷À̰¡ º¸Àϰ̴ϴÙ. ÄõµåÄÚ¾î¸é 4·Î ¼¼ÆÃÇÏ½Ã¸é µÇ°í, ½Ì±Û ÄÚ¾î´Â ¼º´ÉÂ÷À̰¡ ¾È ³³´Ï´Ù. ^^ ÇØº¸´Ï±ñ HyperThread ÀÌ¿ëÇØºÁµµ Á¦´ë·Î ¾ÈµÇ´Â°Å °°³×¿ä.

// ½ÇÇàÀü¿¡ [export OMP_NUM_THREADS=4] ¸í·ÉÀ» ¹Ì¸® ÁÙ°Í.
// ÄÄÆÄÀÏ ¸í·É¾î: cc -mt -O3 -o matrix -xopenmp=parallel -lmtmalloc matrix.c
windy@wl ~/source_c/openmp $ cat matrix.c
#include <stdio.h>
#include <omp.h>
#include <mtmalloc.h>
const int nrows = 100;
const int ncols = 100000;

int main(int argc, char *argv[]) {
int* array[nrows];

printf("Initializing...\n");
#pragma omp parallel for
for (int i = 0; i < nrows; i++) {
array[i] = (int*) malloc(sizeof(int) * ncols);
}

printf("Start Calc...\n");
#pragma omp parallel for
for (int i = 0; i < nrows; i++) {
printf("Thread #%d, %d Column\n", omp_get_thread_num(), i);
for (int j = 0; j < ncols; j++) {
for (int k = 0; k < nrows; k++) {
array[i][j] = array[i][k] * array[k][j];
}
}
}
}
windy@wl ~/source_c/openmp $ cc -mt -O3 -o matrix -xopenmp=parallel -lmtmalloc matrix.c
windy@wl ~/source_c/openmp $ export OMP_NUM_THREADS=6
windy@wl ~/source_c/openmp $ time ./matrix
Initializing...
Start Calc...
Thread #1, 17 Column
Thread #3, 51 Column
Thread #0, 0 Column
Thread #4, 68 Column
Thread #5, 84 Column
Thread #2, 34 Column
... Áß·« ...
Thread #1, 33 Column
Thread #0, 16 Column

real 0m4.404s
user 0m24.860s
sys 0m0.490s
windy@wl ~/source_c/openmp $ export OMP_NUM_THREADS=1
windy@wl ~/source_c/openmp $ time ./matrix
Initializing...
Start Calc...
Thread #0, 0 Column
Thread #0, 1 Column
Thread #0, 2 Column
Thread #0, 3 Column
... Áß·« ...
Thread #0, 94 Column
Thread #0, 95 Column
Thread #0, 96 Column
Thread #0, 97 Column
Thread #0, 98 Column
Thread #0, 99 Column

real 0m23.373s
user 0m23.220s
sys 0m0.100s
windy@wl ~/source_c/openmp $

- SunStudio¿¡´Â À̿ܿ¡µµ ThreadAnalyzer, PerformanceAnalyzer¶ó´Â ÅøÀ» Á¦°øÇÕ´Ï´Ù. ·¹À̽º ÄÁµð¼ÇÀ̳ª ÄÁÇø¯Æ®¸¦ Àß Àâ¾ÆÁÖ´õ±º¿ä. ÇØº¼¸¸ÇÑ °¡Ä¡´Â ÀÖÀ»µí ÇÕ´Ï´Ù.


[¸ñ·Ïº¸±â]  [Ãâ·Â]  
  »çÀÌÆ® ¼Ò°³  |  ¿¬¶ôó  |  »çÀÌÆ® ¸Ê  |  À̸ÞÀÏÁÖ¼Ò ¹«´Ü ¼öÁý °ÅºÎ Copyright (c) 2021 Solaris School. All rights reserved.