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 ¼öÆÛÄÄÇ»Å͸¦ ÀÌ¿ëÇÑ º´·Ä󸮷Î
|