| SGI                          
Origin 3000 ¼öÆÛÄÄÇ»Å͸¦ ÀÌ¿ëÇÑ º´·Ä󸮷Π                
(¾Æ·¡ÀÇ ³»¿ëÀ» ÀÐÀº ÈÄ¿¡ À̵¿ÇÏ¿© ÀÐÀ» °ÍÀ» ±ÇÀåÇÔ) º´·Ä󸮶õ?  ÄÄÇ»ÅͰ¡         
°³¹ßµÈ ÀÌ·¡                     
ÄÄÇ»ÅÍÀÇ µÎ³ú¿¡                     
ÇØ´çµÇ´Â ÇÁ·Î¼¼¼´Â                     
´«ºÎ½Å ¹ßÀüÀ»                     
°ÅµìÇÏ¿´Áö¸¸ ó¸®ÇØ¾ß                     
µÇ´Â ÀÛ¾÷ÀÌ                     
Áö¼ÓÀûÀ¸·Î ´ëÇüȵʿ¡                     
µû¶ó ´ÜÀÏ                     
ÇÁ·Î¼¼¼·Î ó¸®ÇÒ                     
¼ö ÀÖ´Â                     
´É·ÂÀÇ ÇѰ迡                     
µµ´ÞÇÏ°Ô µÇ¾ú´Ù.                     
ÀÌ·¯ÇÑ ³°üÀ»                     
±Øº¹Çϱâ À§ÇÏ¿©                     
´ëµÎµÈ ¹æ¹ýÀÌ                     
º´·Ä ó¸®ÀÌ´Ù.                     
º´·Ä 󸮶õ                     
½±°Ô ¸»Çؼ                     
ÇϳªÀÇ ÀÛ¾÷À»                     
ó¸®Çϱâ À§Çؼ                     
µ¿½Ã¿¡ ¿©·¯                     
°³ÀÇ ÇÁ·Î¼¼¼¸¦                     
»ç¿ëÇÏ¿© ÀÛ¾÷ÀÇ                     
ó¸® ¼Óµµ¸¦                     
³ôÀÌ´Â °ÍÀ»                     
¸»ÇÑ´Ù. ÀÌ·¸°Ô                     
´ÙÁßÇÁ·Î¼¼¼¸¦ µ¿½Ã¿¡                     
»ç¿ëÇÏ´Â º´·Ä󸮸¦                     
ÅëÇØ ¾òÀ»                     
¼ö ÀÖ´Â                     
¼º´É Çâ»óÀº                     
´ÙÀ½°ú °°ÀÌ                     
±â¼úµÉ ¼ö                     
ÀÖ´Ù. ÇϳªÀÇ         
ÇÁ·Î¼¼¼¸¦ »ç¿ëÇÏ¿©                     
ÀÛ¾÷À» ¼öÇàÇÏ¿´À»                     
¶§ ¼Ò¿äµÈ                     
½Ã°£À» t¶ó°í                     
ÇÒ¶§ p°³ÀÇ                     
ÇÁ·Î¼¼¼¸¦ »ç¿ëÇÏ¿´À»                     
¶§ ÀÌ»óÀûÀÎ                     
¼Ò¿ä½Ã°£Àº t/pÀÏ                     
°ÍÀÌ´Ù. ÇÏÁö¸¸                     
½ÇÁ¦ º´·Ä                     
󸮿¡¼ ¾òÀ»                     
¼ö ÀÖ´Â                     
¼º´ÉÀº ¾Ë°í¸®µëÀÇ                     
¹®Á¦, ³×Æ®¿öÅ©                     
¹®Á¦ µîÀ¸·Î                     
ÀÎÇÏ¿© À̺¸´Ù                     
¶³¾îÁö°Ô µÇ´Â                     
°ÍÀÌ º¸ÅëÀÌ´Ù.                     
ÀÌ·¯ÇÑ ¼º´É                     
Çâ»óÀ¸·Î ÀÎÇÏ¿©                     
¾òÀ» ¼ö                     
ÀÖ´Â °¡Àå                     
Å« ÀåÁ¡Àº                     
°¢ ºÐ¾ßÀÇ                     
¿¬±¸ÀÚµéÀÌ ÄÄÇ»ÅÍÀÇ                     
ÀÚ¿øºÎÁ·À¸·Î ±×µ¿¾È                     
Ç® ¼ö                     
¾ø¾ú´ø ¹®Á¦µéÀ»                     
º´·Ä󸮸¦ ÅëÇØ                     
Ç® ¼ö                     
ÀÖ°Ô µÇ¾ú´Ù´Â                     
°Í¿¡ ÀÖ´Ù. ÁÖ¾îÁø         
ÇÁ·Î±×·¥¿¡¼ µ¥ÀÌÅ͸¦                     
º´·Ä ó¸®ÇÏ´À³Ä                     
¶Ç´Â ÀÛ¾÷À»                     
ºÐÇÒÇÏ¿© º´·Ä                     
ó¸®ÇÏ´À³Ä¿¡ µû¶ó                     
data parallelism °ú task parallelismÀ¸·Î                     
±¸ºÐµÈ´Ù. Data Parallelism data parallelism¿¡¼´Â                     
µ¿ÀÏÇÑ codeÀÇ                     
segment¸¦ °¢°¢ÀÇ                     
ÇÁ·Î¼¼¼¿¡¼ µ¿½Ã¿¡                     
½ÇÇàÇÏ´Â ¹æ¹ýÀ¸·Î                     
°¢ ÇÁ·Î¼¼¼´Â                     
ó¸®ÇØ¾ß ÇÏ´Â                     
µ¥ÀÌÅÍÀÇ ¿µ¿ªÀ»                     
ºÐÇÒ ÇÒ´ç                     
¹Þ´Â´Ù. ÀÌ                     
¹æ¹ýÀº Fortran¿¡¼                     
»ç¿ëµÇ´Â Do ·çÇÁ                     
°°Àº °÷¿¡                     
Àû¿ëÇÏ¿© »ç¿ëÇÒ                     
¼ö ÀÖ´Ù.                     
Data parallelismÀº °è»êÀÛ¾÷À»                     
¸¹Àº ¼öÀÇ                     
ÀÛÀº subtask·Î                     
ºÐ»êÇÏ´Â ¹æ¹ýÀÌ±â                     
¶§¹®¿¡ fine grain parallelismÀ̶ó°íµµ                     
ºÒ¸®¿î´Ù. ´ÙÀ½°ú         
°°Àº Fortran ÇÁ·Î±×·¥Àº                     
Data parallelismÀÇ ¿¹·Î                     
»ç¿ëµÉ ¼ö                     
ÀÖ´Ù. ¾Æ·¡¿Í                     
°°Àº Çà·Ä¿¬»ê                     
¹®Á¦´Â data parallelism ¿¡                     
°¡Àå ÀûÇÕÇÑ                     
¿¹Á¦ÀÌ´Ù. ´ÙÀ½ÀÇ                     
Fortran code´Â Çà·Ä°£ÀÇ                     
°ö¼À¹®Á¦ÀÌ´Ù. 
  
    | Original Code |  
    |  | DO K=1,N |  
    |  |  | DO J=1,N |  
    |  |  |  | DO I=1,N |  
    |  |  |  |  | C(I,J) = C(I,J) + A(I,K)*B(K,J) |  
    |  |  |  | END DO |  
    |  |  | END DO |  
    |  | END DO |  Original code¿¡                     
´ëÇÑ º´·ÄÈ´Â                     
ÇÁ·Î¼¼¼°£¿¡ ÀÛ¾÷À»                     
ºÐÇÒ ¹è´çÇ챉                     
À§ÇØ ÇÊ¿äÇÑ                     
OpenMP µð·ºÆ¼ºê(directives)¸¦                     
»ðÀÔÇÏ´Â ¹æ¹ýÀ¸·Î                     
ÀÌ·ç¾îÁø´Ù. À§ÀÇ                     
code´Â ´ÙÀ½°ú                     
°°ÀÌ °£´ÜÇÑ                     
µð·ºÆ¼ºê¸¦ »ðÀÔÇÏ¿©                     
º´·ÄÈµÈ code·Î                     
º¯°æÇÒ ¼ö                     
ÀÖ´Ù. 
  
    | Parallel 
      Code |  
    | !$OMP PARALLEL DO |  
    |  | DO K=1,N |  
    |  |  | DO J=1,N |  
    |  |  |  | DO I=1,N |  
    |  |  |  |  | C(I,J) = C(I,J) + A(I,K)*B(K,J) |  
    |  |  |  | END DO |  
    |  |  | END DO |  
    |  | END DO |  
    | !$END PARALLEL DO |  OpenMP´Â         
º´·Ä µð·ºÆ¼ºêÀÇ                     
Ç¥ÁØÀ¸·Î ¸¹Àº                     
Çϵå¿þ¾î ¾÷üµéÀÌ                     
äÅÃÇϰí ÀÖ´Ù.                     
OpenMP µð·ºÆ¼ºê´Âdata parallelism°ú                     
task parallelism¿¡ ¸ðµÎ                     
Àû¿ëµÉ ¼ö                     
ÀÖ´Ù. SGI»ç´Â                     
OpenMPÀÇ Áö¿ø                     
¹× °³¹ßÀ»                     
ÁÖµµÇϰí ÀÖ´Â                     
ȸ»çÀÌ´Ù. OpenMP¿¡                     
´ëÇÑ Á¤º¸¸¦                     
ÀÚ¼¼È÷ ¾Ë°í                     
½ÍÀ¸¸é OpenMP website(http://www.openmp.org)¸¦                     
¹æ¹®ÇÏ¸é µÈ´Ù. OpenMP¿¡¼         
º´·Ä·Î 󸮵Ǵ                     
·çÇÁ´Â µð·ºÆ¼ºê                     
¹Ù·Î ´ÙÀ½¿¡                     
¿À´Â ·çÇÁÀÌ´Ù.                     
À§ÀÇ ¿¹Á¦¿¡¼                     
º´·Ä·Î ½ÇÇàµÇ´Â                     
·çÇÁ´Â K ·çÇÁ                     
(DO K=1,N) ÀÌ´Ù. °¢ ÇÁ·Î¼¼¼´Â                     
¼·Î ´Ù¸¥                     
µ¥ÀÌÅÍ ¾î·¹ÀÌ                     
¿µ¿ªÀ» ÇÒ´ç                     
¹Þ¾î¼ ½ÇÇàÀ»                     
ÇÏ°Ô µÈ´Ù.                     
K ·çÇÁ¿¡¼ NÀÌ                     
20ÀÌ°í »ç¿ëµÈ                     
ÇÁ·Î¼¼¼°¡ 4¶ó°í                     
ÇÒ ¶§                     
°¢ ÇÁ·Î¼¼¼´Â                     
´ÙÀ½°ú °°ÀÌ                     
µ¥ÀÌÅÍ ¿µ¿ªÀ»                     
ÇÒ´ç ¹Þ¾î                     
ó¸®ÇÏ°Ô µÈ´Ù. 
 
  
    | Processor | Iterations of K | Data Elements |  
    | proc0 | K=1:5 | A(I, 1:5) B(1:5 ,J) |  
    | proc1 | K=6:10 | A(I, 6:10) B(6:10 ,J) |  
    | proc2 | K=11:15 | A(I, 11:15) B(11:15 ,J) |  
    | proc3 | K=16:20 | A(I, 16:20) B(16:20 ,J) |  
Data parallelism¿¡¼´Â                     
°¢ ÇÁ·Î¼¼¼°¡                     
µ¿ÀÏÇÑ code segment¸¦                     
½ÇÇàÇÏ°Ô µÇ´Âµ¥                     
À§ÀÇ ¿¹Á¦¿¡¼´Â                     
´ÙÀ½°ú °°Àº                     
segment°¡ °¢                     
ÇÁ·Î¼¼¼¿¡¼ µ¿ÀÏÇÏ°Ô                     
½ÇÇàµÈ´Ù. 
  
    |  | DO J=1,N |  
    |  |  | DO I=1,N |  
    |  |  |  | C(I,J) = C(I,J) + A(I,K)*B(K,J) |  
    |  |  | END DO |  
    |  | END DO |  Data parallelism˼                     
º´·Äȸ¦ Á¡ÁøÀûÀ¸·Î(incrementally)                     
ÇÒ ¼ö                     
ÀÖ´Ù´Â Æí¸®¼ºÀÌ                     
ÀÖ´Ù. Á¡ÁøÀû         
º´·ÄÈÀÇ Àǹ̴                     
ÇÁ·Î±×·¥ Àüü¸¦                     
ÇѲ¨¹ø¿¡ º´·ÄÈ                     
½ÃŰ´Â °ÍÀÌ                     
¾Æ´Ï¶ó °è»ê·®ÀÌ                     
¸¹Àº ·çÇÁºÎÅÍ                     
º´·ÄÈ ½ÃŰ°í ¿øÇÏ´Â                     
º´·ÄÈ¿À²ÀÌ Ä¿Áú                     
¶§±îÁö ´Ù¸¥                     
·çÇÁ¸¦ Á¡ÁøÀûÀ¸·Î                     
º´·ÄÈÇÏ¿© ½ÇÇàÇÒ                     
¼ö ÀÖ´Ù´Â                     
°ÍÀÌ´Ù. Task Parallelism Task parallelismÀº                     
´ÙÁßÀÇ µ¶¸³µÈ                     
code segments¸¦ °¢                     
ÇÁ·Î¼¼¼¿¡ ºÐ»êÇÏ¿©                     
µ¿½Ã¿¡ ½ÇÇàÇÏ´Â                     
¹æ¹ýÀ» ¾²´Â                     
º´·Ä ±â¹ýÀÌ´Ù.                     
ÀÌ ±â¹ýÀº                     
ÁÖ¾îÁø code¸¦                     
¿©·¯ °³ÀÇ                     
ºÎºÐµé·Î ºÐÇÒÇÏ¿©                     
°¢ ÇÁ·Î¼¼¼¿¡¼                     
µ¶¸³ÀûÀ¸·Î µ¿½Ã¿¡                     
½ÇÇàÇÏ´Â °ÍÀÌ                     
°¡´ÉÇÒ ¶§                     
»ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù.                     
Task parallelism Àº °è»ê                     
ÀÛ¾÷À» ÀÛÀº                     
¼öÀÇ subtasks·Î                     
ºÐÇÒÇÏ¿© ½ÇÇàÇ챉                     
¶§¹®¿¡ coarse grain parallelismÀ¸·Î                     
ºÒ¸®¿î´Ù. ÀÌ                     
¹æ¹ýÀº data parallelism º¸´Ù                     
³ôÀº ¼öÁØ¿¡¼                     
º´·Ä±â¹ýÀÌ Àû¿ëµÇ±â                     
¶§¹®¿¡ ÀϹÝÀûÀ¸·Î                     
º´·ÄÈ¿À²ÀÌ ´õ                     
³ôÀº ¹æ¹ýÀÌ´Ù.                     
ÀÌ ¹æ¹ýÀº                     
parallel overhead°¡ ÀÛ°í                     
data parallelism¿¡ ºñÇØ                     
Àû¿ëÀÌ ½±´Ù´Â                     
ÀåÁ¡ÀÌ ÀÖÁö¸¸                     
codeÀÇ Æ¯¼º»ó                     
°¢ ºÎºÐµéÀÌ                     
¹ÐÁ¢ÇÏ°Ô ¿¬°áµÇ¾î                     
µ¥ÀÌÅ͸¦ ÁÖ°í                     
¹Þ¾Æ¾ß µÇ´Â                     
°æ¿ì¿¡´Â Àû¿ëÇ챉                     
°ï¶õÇÑ ¹æ¹ýÀÌ´Ù. ´ÙÀ½°ú         
°°Àº abstract code¸¦                     
º´·ÄÈÇÏ´Â °ÍÀ»                     
¿¹¸¦ µé¸é, 
  
    | Original Code |  
    |  | program main |  
    |  | code segment labelled A |  
    |  | code segment labelled B |  
    |  | code segment labelled C |  
    |  | code segment labelled D |  
    |  | end |  ÀÌ °æ¿ì¿¡µµ                     
´ÙÀ½°ú °°ÀÌ                     
OpenMP µð·ºÆ¼ºê¸¦ »ðÀÔÇÏ¿©                     
task parallelismÀ» ±¸ÇöÇÒ                     
¼ö ÀÖ´Ù. 
  
    | Parallel Code |  
    |  | program main |  
    | !$OMP PARALLEL |  
    | !$OMP SECTIONS |  
    |  | code segment labelled A |  
    | !$OMP 
      SECTION |  
    |  | code segment labelled B |  
    | !$OMP 
      SECTION |  
    |  | code segment labelled C |  
    | !$OMP 
      SECTION |  
    |  | code segment labelled D |  
    | !$OMP SECTIONS |  
    | !$OMP END PARALLEL |  
    |  | end |  OpenMP SECTION µð·ºÆ¼ºê¸¦                     
»ç¿ëÇÏ°Ô µÇ¸é                     
°¢ SECTIONÀº                     
´Ù¸¥ ÇÁ·Î¼¼¼¿¡                     
ÇÒ´çµÇ°Ô µÈ´Ù.                     
À§ÀÇ code¸¦                     
4°³ÀÇ ÇÁ·Î¼¼¼¸¦                     
»ç¿ëÇÏ¿© ó¸®ÇÑ´Ù°í                     
ÇÒ ¶§                     
°¢ ÇÁ·Î¼¼¼´Â                     
´ÙÀ½°ú °°Àº                     
code segments¸¦ ÇÒ´ç¹Þ¾Æ                     
ó¸®ÇÏ°Ô µÈ´Ù. 
  
    | Processor | Code Segment |  
    | proc0 | code segment labelled A |  
    | proc1 | code segment labelled B |  
    | proc2 | code segment labelled C |  
    | proc3 | code segment labelled D |  Amdahl¡¯s Law À§¿Í         
°°Àº º´·Äó¸®                     
±â¹ýÀ» »ç¿ëÇÏ¿©                     
º´·Ä󸮸¦ ÇÒ                     
°æ¿ì ¾òÀ»                     
¼ö ÀÖ´Â                     
¼º´ÉÇâ»óÀº ÀÌ»óÀûÀÎ                     
°æ¿ì¿¡ ÇÁ·Î¼¼¼ÀÇ                     
¼ö°¡ ´Ã¾î³ª´Â                     
°Í¿¡ ºñ·ÊÇÏ¿©                     
¼±ÇüÀûÀ¸·Î ´Ã¾î³ª¾ß                     
ÇÏÁö¸¸ ¿©·¯                     
°¡Áö ¼º´É                     
Á¦ÇÑ ¿ä¼Òµé·Î                     
ÀÎÇÏ¿© ±×·¸Áö                     
¸øÇÑ °æ¿ì°¡                     
´ëºÎºÐÀÌ´Ù. ÀÌ·¯ÇÑ                     
º´·Ä ¼º´ÉÇâ»óÀÇ                     
ÇѰ踦 ±â¼úÇÑ                     
¹ýÄ¢ÀÌ Amdahl's lawÀÌ´Ù.                     
ÀÌ ¹ýÄ¢¿¡                     
ÀÇÇϸé ÁÖ¾îÁø                     
code¿¡¼ º´·Ä·Î                     
½ÇÇàµÇÁö ¾Ê´Â                     
ºÎºÐÀÌ ¼º´ÉÀ»                     
Á¦ÇÑÇÏ¸ç ¼º´ÉÇâ»óÀÇ                     
»óÇѼ±ÀÌ Á¤ÇØÁø´Ù°í                     
ÇÑ´Ù. ÀÌ                     
¹ýÄ¢Àº ´ÙÀ½°ú                     
°°ÀÌ ¼ö½ÄÈ                     
µÉ ¼ö                     
ÀÖ´Ù. ÁÖ¾îÁø                     
code¿¡¼ F % ¸¸Å                     
º´·ÄÈ µÈ´Ù°í                     
ÇÒ ¶§                     
ÇÁ·Î¼¼¼ÀÇ ¼ýÀÚ°¡                     
¹«ÇѰ³·Î ´Ã¾î³ªµµcode´Â                     
100/(100-F) º¸´Ù ºü¸£°Ô                     
½ÇÇàµÉ ¼ö                     
¾ø´Ù. ±×¸®°í                     
ÁÖ¾îÁø ÇÁ·Î¼¼¼ÀÇ                     
¼ö P°³¿¡¼                     
¾òÀ» ¼ö                     
ÀÖ´Â ÃÖ´ë                     
º´·ÄÈ¿À²Àº ´ÙÀ½°ú                     
°°ÀÌ Ç¥½ÃµÈ´Ù. Speed Up Ratio (Sp) = 100/(F/P+100-F)             
F=(0%,¡¦¡¦¡¦¡¦.,100%) ¿©±â¼         
¼º´É Çâ»óºñÀÎ                     
Speed Up Ratio´Â P°³ÀÇ                     
ÇÁ·Î¼¼¼¸¦ »ç¿ëÇßÀ»                     
°æ¿ì ¾òÀº                     
°è»ê ¼Ò¿ä½Ã°£°ú                     
1°³ÀÇ ÇÁ·Î¼¼¼¸¦                     
»ç¿ëÇßÀ» °æ¿ì                     
¾òÀº ¼Ò¿ä½Ã°£À»                     
³ª´©¾î¼ ¾òÀ»                     
¼ö ÀÖ´Â                     
°ªÀÌ´Ù. Speed Up Ratio (Sp) = (Elapsed time with P proc)/(Elapsed             
time with 1 proc) ˤ˂         
µÎ ½ÄÀ»                     
ÀÌ¿ëÇϸé ÁÖ¾îÁø                     
code¿¡¼ÀÇ º´·ÄÈ                     
Á¤µµ¸¦ ³ªÅ¸³»´Â                     
F¸¦ °è»êÇÒ                     
¼ö ÀÖ°í                     
À̸¦ ÀÌ¿ëÇÏ¸é                     
º´·Ä°è»êÀ» ÅëÇØ                     
¾òÀ» ¼ö                     
ÀÖ´Â ÃÖ´ëÀÇ                     
¼º´É Çâ»óºñ¸¦                     
¾Ë ¼ö                     
ÀÖ°Ô µÈ´Ù. º´·Ä ÇÁ·Î±×·¡¹Ö         
Áö¿ø ¶óÀ̺귯¸® C³ª         
Fortran°°Àº ¾ð¾î¸¦                     
ÀÌ¿ëÇÏ¿© º´·Ä                     
ÇÁ·Î±×·¡¹ÖÀ» ±¸ÇöÇ챉                     
À§Çؼ´Â ÇÁ·Î¼¼¼°£ÀÇ                     
Åë½Å µîÀ»                     
Áö¿øÇÏ´Â º´·Ä                     
ÇÁ·Î±×·¡¹Ö Áö¿ø                     
¶óÀ̺귯¸®ÀÇ µµ¿òÀÌ                     
ÇÊ¿äÇÏ´Ù. º´·Ä                     
ÄÄÇ»ÅÍ °³¹ß                     
Ãʱ⿡¼ Çϵå¿þ¾î                     
¾÷üµé¸¶´Ù ¼·Î                     
´Ù¸¥ º´·Ä                     
¶óÀ̺귯¸®¸¦ °³¹ßÇÏ¿©                     
Áö¿øÀ» ÇÏ¿´Áö¸¸                     
º´·Ä ÄÄÇ»ÅͰ¡                     
È®»êµÇ¸é¼ ¼º´É                     
¹®Á¦³ª Æ÷ÆÃ(Porting)                     
¹®Á¦ µîÀ¸·Î                     
ÀÎÇØ ¸¹Àº                     
º´·Ä Áö¿ø                     
¶óÀ̺귯¸®°¡ »ç¶óÁö°í                     
ÇöÀç¿¡´Â °øÀ¯                     
¸Þ¸ð¸®Çü º´·Ä                     
Áö¿ø ¶óÀ̺귯¸®ÀÎ                     
OpenMP¿Í ºÐ»ê                     
¸Þ¸ð¸®Çü º´·Ä                     
Áö¿ø ¶óÀ̺귯¸®ÀÎ                     
MPI(Message Passing Interface)¸¸ÀÌ ±¤¹üÀ§ÇÏ°Ô                     
»ç¿ëµÇ°í ÀÖ´Ù.                     
OpenMP¿Í MPI´Â                     
°¢°¢  http://www.openmp.org                     
¿Í  http://www.mpi-forum.org                     
¶ó´Â ºñ¿µ¸®±â°ü¿¡¼                     
Ç¥ÁØÀ» Á¤Ç졒                     
ÀÖ°í ´ëºÎºÐÀÇ                     
Çϵå¿þ¾î ¾÷üµéÀÌ                     
Áö¿øÀ» Ç졒                     
ÀÖ¾î ÀÌµé                     
¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¿©                     
°³¹ßÀ» ÇÒ                     
°æ¿ì ¿©·¯                     
Çϵå¿þ¾î¿¡¼ ¼öÁ¤                     
¾øÀÌ »ç¿ëÇÒ                     
¼ö ÀÖ´Ù´Â                     
ÀåÁ¡À» °¡Áú                     
¼ö ÀÖ´Ù. OpenMP OpenMPÀÇ         
Ç¥ÁØÀº 1996³â¿¡                     
SGI»ç°¡ °øÀ¯                     
¸Þ¸ð¸®Çü º´·Ä                     
ÄÄÇ»ÅÍ¿¡¼ ¼Ò½º                     
ÄÚµåÀÇ È£È¯¼ºÀ»                     
°®´Â º´·Ä                     
ÇÁ·Î±×·¡¹Ö ÀÎÅÍÆäÀ̽º¸¦                     
¸¸µé±â À§ÇØ                     
½ÃÀ۵Ǿú´Ù. ÀÌ                     
ÇÁ·ÎÁ§Æ®´Â SGI»ç°¡                     
½´ÆÛ ÄÄÇ»ÅÍÀÇ                     
´ë¸í»ç¿´´ø Cray»ç¸¦                     
ÀμöÇÏ¸é¼ º¤ÅÍ                     
ÄÄÇ»ÅÍ¿Í ½ºÄ®¶ó                     
ÄÄÇ»ÅÍ¿¡¼ °øÈ÷                     
»ç¿ëÇÒ ¼ö                     
ÀÖ´Â API(Application Programming                     
Interface)ÀÇ Çʿ伺À¸·Î                     
ÀÎÇØ °³¹ß                     
¼Óµµ°¡ °¡¼ÓÈµÇ¾î                     
1997³â¿¡ Fortran¿¡                     
´ëÇÑ OpenMPÀÇ                     
Ç¥ÁØÀÌ ¹ßÇ¥µÇ°í                     
1998³â¿¡ C/C++¿¡                     
´ëÇÑ Ç¥ÁØÀÌ                     
µÚÀÌ¾î¼ ¹ßÇ¥µÇ¾ú´Ù.                     
2000³â¿¡´Â Fortran 95¿¡                     
´ëÇÑ Ç¥ÁØÀÌ                     
OpenMP V2.0¿¡ Æ÷ÇÔµÇ¾î                     
¹ßÇ¥µÇ¾ú´Ù. OpenMP´Â                     
OpenMP¸¦ Áö¿øÇÏ´Â                     
ÄÄÆÄÀÏ·¯¿¡¼ ÀνÄÇÒ                     
¼ö ÀÖ´Â                     
µð·ºÆ¼ºê(Directives)±â¹ÝÀÇ                     
APIÀÌ´Ù. ÇÁ·Î±×·¥                     
°³¹ßÀÚ´Â ±âÁ¸                     
¿ø½Ã codeÀÇ                     
¼öÁ¤ ¾øÀÌ                     
OpenMP¿¡¼ ÁöÁ¤µÈ                     
ÀûÀýÇÑ µð·ºÆ¼ºê¸¦                     
»ðÀÔÇÔÀ¸·Î½á ¼Õ½±°Ô                     
º´·Ä ÇÁ·Î±×·¥È                     
ÇÒ ¼ö                     
ÀÖ´Ù. OpenMP´Â                     
¾Æ·¡ÀÇ ¿¹¿Í                     
°°ÀÌ Fortran¿¡¼ÀÇ                     
Do ·çÇÁ°°Àº °÷¿¡                     
ÁÖ·Î »ç¿ëµÇ¾î                     
º´·ÄÈ Ç챉                     
¶§¹®¿¡ Á¾Á¾                     
Loop Level ParallelismÀ¸·Î ºÒ¸®±âµµ                     
ÇÑ´Ù. 
  
    | !$omp parallel do 
private(xx,yy,temp) reduction(+:error) |  
    |  | do j = 1,m |  
    |  |  | do i = 1,n |  
    |  |  |  | xx = -1.0d0 + dx * 
dble(i-1) |  
    |  |  |  | yy = -1.0d0 + dy * 
dble(j-1) |  
    |  |  |  | temp = u(i,j) - 
(1.0-xx*xx)*(1.0-yy*yy) |  
    |  |  |  | error = error + 
temp*temp |  
    |  |  | enddo |  
    |  | enddo |  OpenMP´Â         
º´·Ä µð·ºÆ¼ºê¸¦                     
ÇÁ·Î±×·¥ÀÇ ÀϺκп¡¸¸                     
»ðÀÔÇÏ´Â ´Ü°èÀûÀÎ                     
º´·ÄÈ(Incremental Parallelism)ÀÇ                     
Àû¿ëÀÌ °¡´ÉÇ챉                     
¶§¹®¿¡ »ó´ëÀûÀ¸·Î                     
Á¢±ÙÀÌ ¿ëÀÌÇÏ´Ù.                     
¶Ç ±âÁ¸                     
Á÷·Ä ÇÁ·Î±×·¥ÀÇ                     
¼öÁ¤À» ÃÖ¼ÒÈÇÒ                     
¼ö ÀÖ°í                     
µð¹ö±ëÀÌ ½±´Ù´Â                     
ÀåÁ¡À» °¡Áö°í                     
ÀÖ´Ù. OpenMP´Â         
°øÀ¯ ¸Þ¸ð¸®¸¦                     
°®´Â º´·Ä                     
ÄÄÇ»ÅÍ¿¡¼ °øÈ÷                     
»ç¿ëÇÒ ¼ö                     
ÀÖ´Â ¾÷°èÀÇ                     
Ç¥ÁØÀ̱⠶§¹®¿¡                     
À̽ļºÀÌ ¶Ù¾î³                     
APIÀÌ´Ù. MPI(Message Passing Interface) MPI´Â         
°¢ ÇÁ·Î¼¼½º°£¿¡                     
µ¥ÀÌÅÍ ±³È¯À»                     
Áö¿øÇØÁÖ´Â Functions(C ¾ð¾îÀÇ                     
°æ¿ì)°ú                     
Subroutines(Fortran ¾ð¾îÀÇ °æ¿ì)À»                     
¸ðÀº ¶óÀ̺귯¸®¸¦                     
ÁöĪÇÑ´Ù. MPIÀÇ                     
Ç¥ÁØÀÌ Á¦Á¤µÇ±â                     
Àü±îÁö´Â Ãʺ´·Ä                     
ÄÄÇ»ÅÍ(Massively Parallel Processor)¿Í                     
°°Àº ºÐ»ê                     
¸Þ¸ð¸®Çü ÄÄÇ»Å͸¶´Ù                     
¼·Î ´Ù¸¥                     
Message Passing Library¸¦ °¡Áö°í                     
ÀÖ¾î ÇÁ·Î±×·¥                     
°³¹ßÀÚ¿¡°Ô ºÎ´ãÀÌ                     
µÇ¾ú´Ù. ÀÌ·¯ÇÑ                     
¹®Á¦Á¡À» ÇØ°áÇ챉                     
À§ÇØ 40¿©°³ÀÇ                     
±â°üÀ» ´ëÇ¥ÇÏ´Â                     
MPI Forum(http://www.mpi-forum.org)°¡                     
°á¼ºµÇ¾î 2³â¿©ÀÇ                     
³ë·Â ³¡¿¡                     
°³¹ßµÈ °ÍÀÌ                     
MPIÀÌ´Ù. ÃÖÃÊÀÇ                     
MPI Ç¥ÁØÀº 1994³â¿¡                     
Á¦Á¤µÈ MPI-1 Ç¥ÁØÀÌ°í                     
ÇöÀç¿¡´Â ÀϹæÇâ                     
Åë½Å(One-Sided Communication)ÀÌ                     
°¡´ÉÇØÁø MPI-2 Ç¥ÁØÀÌ                     
°³¹ßµÇ¾î ¹ßÇ¥µÇ¾ú´Ù.                     
ÀÌ Ç¥ÁØÀº                     
°¢ ÇÔ¼ö                     
¶Ç´Â ¼ºê·çƾÀÇ                     
À̸§°ú ÇØ´çµÇ´Â                     
Output, calling sequencesµîÀ» ±â¼úÇ졒                     
ÀÖ¾î MPI Ç¥ÁØÀ»                     
Áö¿øÇÏ´Â ¸ðµç                     
Çϵå¿þ¾î¿¡ °³¹ßµÈ                     
ÇÁ·Î±×·¥À» °øÈ÷                     
»ç¿ëÇÒ ¼ö                     
ÀÖ´Â ¶Ù¾î³                     
À̽ļºÀ» º¸ÀåÇÑ´Ù.                     
°¢ Çϵå¿þ¾î                     
Á¦Á¶¾÷ü´Â MPI Ç¥ÁØÀ»                     
Áö¿øÇÏ¸é¼ Á¦Ç°ÀÇ                     
Ư¼º¿¡ ¸Â´Â                     
ÃÖÀûÈµÈ MPI ¹öÀüÀ»                     
žÀçÇϰí ÀÖ´Ù. MPI ÇÁ·Î±×·¥Àº                     
ÀϹÝÀûÀ¸·Î ´ÙÀ½°ú                     
°°Àº ÇüŸ¦                     
°¡Áö°í ÀÖ´Ù. 
  
    | include MPI header file |  
    | variable declarations |  
    | initialize the MPI environment |  
    |  |  
    |  | ...do computation and MPI communication 
calls... |  
    |  |  
    | close MPI communications |  MPI header file·Î                     
C¿¡¼´Â #include <mpi.h>,                     
Fortran¿¡¼´Â INCLUDE 'mpif.h'¸¦                     
»ç¿ëÇÑ´Ù. ÀÌ ÆÄÀÏ¿¡´Â                     
¸ðµç MPI Function°ú                     
Subroutine¿¡ ´ëÇÑ                     
Á¤Àǰ¡ µÇ¾î                     
ÀÖ´Ù. À̸¦                     
Á¤ÀÇÇÑ ÈÄ¿¡                     
MPI¸¦ »ç¿ëÇ챉                     
À§Çؼ´Â ¹Ýµå½Ã                     
MPI ȯ°æÀ» ÃʱâÈ                     
½ÃÄÑÁà¾ß Ç졒                     
ÇÁ·Î±×·¥ ¸¶Áö¸·¿¡´Â                     
MPI¸¦ Á¾·á                     
½ÃÄÑÁà¾ß ÇÑ´Ù.                     
MPIÀÇ ÃʱâÈ¿¡´Â                     
MPI_InitÀ» »ç¿ëÇ졒                     
MPI_Comm_rank, MPI_Comm_size¸¦ »ç¿ëÇÏ¿©                     
MPIÀÇ ½ÇÇàÀ»                     
À§ÇÑ Ã汉                     
ȯ°æÀ» ±¸ÃàÇÑ´Ù.                     
ÀÌÈÄ¿¡ MPI_RECV³ª                     
MPI_SEND°°Àº ¸Þ½ÃÁö                     
Åë½ÅÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿©                     
º´·Ä°è»êÀ» ¼öÇàÇ졒                     
MPI_FINALIZE¸¦ ºÒ·¯                     
MPI ÇÁ·Î±×·¥À» Á¾·á½ÃŲ´Ù. MPI´Â         
´Ü¼øÈ÷ µð·ºÆ¼ºê¸¸À»                     
»ðÀÔÇÏ´Â OpenMP¿Í´Â                     
´Þ¸® °³¹ßÀÚ°¡                     
¸¹Àº °ÍÀ»                     
ÁöÁ¤ÇØÁà¾ß ÇÑ´Ù.                     
MPI´Â ´Ü°èÀû                     
º´·Äȸ¦ ±¸ÇöÇÒ                     
¼ö ¾ø°í                     
±âÁ¸ Á÷·Ä                     
ÇÁ·Î±×·¥ÀÇ ¼öÁ¤ÀÌ                     
¸¹ÀÌ ÇÊ¿äÇØ                     
°³¹ß½Ã°£ÀÌ ¿À·¡                     
°É¸®´Â ´ÜÁ¡ÀÌ                     
ÀÖÁö¸¸ ÀÏ´Ü                     
°³¹ßÀÌ ¿Ï·áµÇ¸é                     
¿©·¯ Çϵå¿þ¾î¿¡¼                     
»ç¿ëÇÒ ¼ö                     
ÀÖ°í º´·Ä                     
¼º´Éµµ ¶Ù¾î³ª´Ù. º´·Ä ÇÁ·Î±×·¡¹Ö¿¡¼ÀÇ         
Issues º´·Ä         
ÇÁ·Î±×·¥¿¡¼ ÁÁÀº                     
º´·Ä È¿À²À»                     
º¸À̱â À§Çؼ´Â                     
°¢ ÇÁ·Î¼¼½º¿¡                     
µ¿ÀÏÇÑ Å©±âÀÇ                     
ÀÏÀ» ¼öÇàÇÒ                     
¼ö ÀÖµµ·Ï                     
ÀÏÀ» ºÐ¹èÇØ¾ß                     
ÇÑ´Ù. ±×·¸Áö                     
¸øÇÏ¸é °¡Àå                     
¸¹Àº ÀÏÀ»                     
ÇÒ´ç ¹ÞÀº                     
ÇÁ·Î¼¼½º°¡ Á¾·á                     
µÉ ¶§±îÁö                     
´Ù¸¥ ÇÁ·Î¼¼½º´Â                     
´ë±â »óÅ¿¡                     
Àֱ⠶§¹®¿¡                     
º´·Ä È¿À²ÀÌ                     
Å©°Ô ¶³¾îÁö°Ô                     
µÈ´Ù. ÀÌ·¯ÇÑ                     
¹®Á¦¸¦ load balancing ¹®Á¦¶ó°í                     
ÇÑ´Ù. ¸¹Àº                     
°è»ê¹®Á¦¿¡¼ ÀÛ¾÷·®À»                     
±ÕµîÇÏ°Ô ºÐ¹èÇÏ´Â                     
°ÍÀº ½¬¿î                     
ÀÏÀº ¾Æ´Ï¸ç                     
°¢ ÀÀ¿ëºÐ¾ß¿¡¼                     
ÀûÀýÇÑ ºÐ¹è¸¦                     
À§ÇÑ ¿©·¯                     
°¡Áö load balancing techniqueÀÌ                     
°³¹ßµÇ¾î »ç¿ëµÇ°í                     
ÀÖ´Ù º´·Ä         
½´ÆÛ ÄÄÇ»ÅÍÀÇ                     
¼º´ÉÀ» Á¦´ë·Î                     
Ȱ¿ëÇϱâ À§Çؼ´Â                     
Ç®°íÀÚ ÇÏ´Â                     
¹®Á¦ÀÇ Å©±â°¡                     
ÀûÀýÇØ¾ß ÇÑ´Ù.                     
´ÜÀÏ ÇÁ·Î¼¼¼·Îµµ                     
ÃæºÐÇÑ ¹®Á¦¸¦                     
º´·Ä·Î ó¸®ÇÒ                     
°æ¿ì °è»ê½Ã°£                     
´ëºñ¿¡¼ ÇÁ·Î¼¼½º°£ÀÇ                     
Åë½Å¿¡ ¼Ò¿äµÇ´Â                     
½Ã°£ÀÌ ´õ                     
Ä¿Áö°Ô µÇ±â                     
¶§¹®¿¡ ±â´ëÇÏ´Â                     
¸¸ÅÀÇ ¼º´ÉÀÌ                     
³ª¿ÀÁö ¾ÊÀ»                     
°ÍÀÌ´Ù. º´·Ä         
½´ÆÛ ÄÄÇ»ÅÍ                     
»ç¿ëÀڵ鿡 Áß¿äÇÑ                     
ºÎºÐ ÁßÀÇ                     
Çϳª´Â ÁÁÀº                     
software toolsÀ̶ó°í ÇÒ                     
¼ö ÀÖ´Ù.                     
ÀÌ·¯ÇÑ µµ±¸µé                     
Áß¿¡ ÁÖ·Î                     
»ç¿ëµÇ´Â °Í¿¡´Â                     
´ÙÀ½°ú °°Àº                     
°ÍµéÀÌ ÀÖ´Ù. -  º´·Ä                     
ÄÄÆÄÀÏ·¯(parallel compilers)- º´·Ä                     
µð¹ö°Å(parallel debuggers) [ PDF 
]
 - ¼º´ÉÇØ¼®µµ±¸(performance                     
analysis tools) [ PDF ]
 -  º´·Ä                     
 °è»ê ¼ÒÇÁÆ®¿þ¾î ¶óÀ̺귯¸®(parallel                     
math software library)
 Âü°í 1: For performance analysis:  
                              http://techpubs.sgi.com 
                              > search speedshop (enter) ÇÏ¿© ã¾Æ¼  
                              °¡Á®¿Â Book :  32% SpeedShop          
User's Guide (Áï, À§ÀÇ ¼º´ÉÇØ¼®µµ±¸¶õÀÇ PDF ÆÄÀÏ)¸¦ Ŭ¸¯ÇÏ¿© SpeedShop  
                              °ü·Ã ¸í·É¾îµéÀÇ »ç¿ë¹ýÀ» ÀÐÀº ÈÄ, ¿¹¸¦ µé¾î,  º» ¼¹öÀÇ /usr/demos/SpeedShop/generic  
                              µð·ºÅ丮¿¡ ÀÖ´Â generic.c ÆÄÀÏÀ»  
                              º»ÀÎÀÇ HOME directory ·Î copy ÇØ ¿Â  
                              ÈÄ,
 % cc generic.c (enter)      
                              ÇÏ¿© ÄÄÆÄÀÏÇÑ ÈÄ¿¡,
 % ssrun -pcsampx a.out (enter)        
                              ÇÏ¿© ssrun(SpeedShopRun)À» ½ÇÇàÇÑ ÈÄ,
 % ls -la a.out.* (enter)       
                              ÇÏ¿© »õ·Î »ý¼ºµÈ ÆÄÀÏÀ̳ª »ç¶÷ÀÌ  
                              ÀÐÀ» ¼ö ¾ø´Â ¸Å¿ì ±ä À̸§ÀÇ
 "a.out.?¼ýÀÚ" ÆÄÀÏÀ» È®ÀÎÇÑ ÈÄ,
 % prof a.out.?¼ýÀÚ (enter)   Çϸé,  
                              a.out ½ÇÇàÆÄÀÏÀÇ ¼º´ÉÀ» ASCII ÆÄÀÏ  
                              ÇüÅ·Πº¼ ¼ö ÀÖ´Ù.
 Âü°í 2: For parallel debuggers: http://trinitas.mju.ac.kr/infosearch          
> search workshop (enter), and refer to % /usr/demos/WorkShop directory.
 Âü°í 3: For parallel math software library: SCSL(Scientific Computing Software          
library) ¼Ò°³ ¹× http://trinitas.mju.ac.kr/infosearch          
> search scsl (enter).
 Âü°í 4: For parallel compilers: SGI                   
Origin 3000 ¼öÆÛÄÄÇ»Å͸¦ ÀÌ¿ëÇÑ º´·Ä󸮷Î
 |