ÀÌ ¹®¼ÀÇ º¯È¯ Á¤µµ´Â ¾çÈ£ÇÕ´Ï´Ù. µû¶ó¼ HTML ¹®¼¸¸À¸·Îµµ ¿øº» ÆÄÀϰú À¯»çÇÑ Ç°Áú·Î Âü°íÇÒ ¼ö ÀÖ½À´Ï´Ù.
½ÃÁß¿¡¼ ÆÇ¸ÅµÇ°í ÀÖ´Â ¼¼¹Ì³ª ±³Àç¿Í µ¿ÀÏÇÑ Ç°ÁúÀ» Ãâ·ÂÇϰíÀÚ ÇÒ °æ¿ì¿¡´Â PDF À̹ÌÁö¸¦ ´Ù¿î¹ÞÀ¸½Ã±â ¹Ù¶ø´Ï´Ù.
(¾Ë¸²: pdf Æ÷¸Ë¿¡´Â MPI ÇÁ·Î±×·¡¹Ö ¿¹Á¦ ºÎºÐÀÌ Ãß°¡µÇ¾î ÀÖ½À´Ï´Ù.)
¿øº» ÆÄÀÏ ´Ù¿î·Îµå:
NASAÀÇ T. Sterling°ú D. BeckerÀÇ ¼±µµÀûÀÎ ³ë·ÂÀÇ °á°ú·Î, ¸®´ª½º¸¦ »ç¿ëÇÏ´Â »ç¶÷µéÀº °í°¡ÀÇ ½´ÆÛÄÄÇ»ÅÍ¿¡ ÇÊÀûÇÏ´Â ÄÄÇ»ÆÃ ÆÄ¿ö¸¦ »ó´ëÀûÀ¸·Î Àú·ÅÇϸ鼵µ ¼Õ½±°Ô ¾òÀ» ¼ö ÀÖ°Ô µÇ¾ú´Ù (ÀÌ·¯ÇÑ ÀÏ·ÃÀÇ ³ë·ÂÀº Àß ¾Ë·ÁÁø ´ë·Î, Beowulf project¶ó°í ºÒ·ÁÁø´Ù). Áö±ÝÀº Ŭ·¯½ºÅ͸¦ Á÷Á¢ Á¦ÀÛÇÏ´Â °Í ÀÚü°¡ ±×·¸°Ô ¾î·Á¿î ¹®Á¦°¡ ¾Æ´Ï´Ù. ÇöÀç ÁÖ¾îÁø °úÁ¦´Â ``ÀÌ·¸°Ô ¾ò¾îÁø ÄÄÇ»ÆÃ ÆÄ¿ö¸¦ °¡Áö°í ¾ó¸¶³ª À¯¿ëÇÑ ÀÏÀ» ÇÒ ¼ö Àִ°¡?'' ÇÏ´Â °ÍÀ̶ó°í »ý°¢µÈ´Ù.
À¯¿ëÇÔ ?
1. È£±â½É ¸¸Á·
2. in-house·Î ÇØ°áÇØ¾ßÇÏ´Â ¹®Á¦°¡ Àִµ¥ º´·ÄÈÇÏ´Â °ÍÀÌ ÇÊ¿äÇØ¼
3, in-house·Î ¸¹ÀÌ »ç¿ëÇÏ´Â ¼øÂ÷ ÇÁ·Î±×·¥ÀÌ Àִµ¥ º´·ÄÈÇØ¾ßÇÏ´Â °æ¿ì
4. ÀϹÝÀûÀÎ »ç¿ëÀ» ¸ñÀûÀ¸·Î º´·Ä ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °æ¿ì
5. ÀϹÝÀûÀÎ »ç¿ëÀ» ¸ñÀûÀ¸·Î º´·Ä ¶óÀ̺귯¸®¸¦ ÀÛ¼ºÇÏ´Â °æ¿ì
ÀÌ course¿¡¼´Â 2, 3, 4ÀÇ °üÁ¡¿¡¼, ¸Þ½ÃÁö ÆÐ½Ì ÇüÅÂÀÇ º´·Ä ÇÁ·Î±×·¡¹Ö ±â¹ýÀ» ÅëÇÑ ¸®´ª½º Ŭ·¯½ºÅÍÀÇ »ç¿ë¿¡ ´ëÇØ¼ °ÀÇÇϰíÀÚ ÇÑ´Ù. ±¸Ã¼ÀûÀ¸·Î ¸®´ª½º Ŭ·¯½ºÅÍ¿Í °°Àº °¡´É¼ºÀÌ »ý±ä ¹è°æ°ú ¿äÀεî ÀϹÝÀûÀÎ »ç½Ç°ú Ŭ·¯½ºÅÍ ¾ÆÅ°ÅØÃò¾î¿¡ ´ëÇØ¼ »ìÆìº¸°í (°ÀÇ 1), ½ÇÁ¦·Î Ŭ·¯½ºÅ͸¦ ±¸¼ºÇÏ´Â ¹æ¹ý°ú °ü·ÃµÈ °Í (°ÀÇ 2)°ú º´·Ä ÇÁ·Î±×·¡¹Ö ¿¹¸¦ ÅëÇÑ Å¬·¯½ºÅÍ »ç¿ë¹ý (°ÀÇ 3)¿¡ ´ëÇØ¼ »ý°¢ÇØ º»´Ù.
=========================================================
Â÷·Ê
°ÀÇ 1 : ¸®´ª½º Ŭ·¯½ºÅÍ ¾ÆÅ°ÅØÃò¾î¿¡ °üÇÏ¿©
1. º´·Ä ÄÄÇ»ÅÍ ¾ÆÅ°ÅØÃò¾î
2. Ŭ·¯½ºÅÍ ¾ÆÅ°ÅØÃò¾î
3. ¸®´ª½º Ŭ·¯½ºÅÍ
°ÀÇ 2 : ¸®´ª½º Ŭ·¯½ºÅÍÀÇ ½ÇÁ¦ÀûÀÎ ±¸¼º
1. Çϵå¿þ¾î ¼±Åà »çÇ×
2. ³ëµå ³×Æ®¿öÅ© ȯ°æ ±¸¼º
3. º´·Ä ȯ°æ ±¸¼º
°ÀÇ 3 : MPI¸¦ »ç¿ëÇÑ ¸®´ª½º Ŭ·¯½ºÅÍ ÇÁ·Î±×·¡¹Ö
1. º´·Ä ÇÁ·Î±×·¡¹Ö ¹æ¹ý
2. MPI (Message Passing Interface)¿¡ ´ëÇÑ °£´ÜÇÑ ¼Ò°³
3. ±âº»ÀûÀÎ MPI Function
4. º´·Ä ÇÁ·Î±×·¡¹Ö °í·Á »çÇ×
5. MPI ÇÁ·Î±×·¥ ¿¹Á¦
=========================================================
°ÀÇ 1 : ¸®´ª½º Ŭ·¯½ºÅÍ ¾ÆÅ°ÅØÃò¾î¿¡ °üÇÏ¿©
Premise : ¸®´ª½º Ŭ·¯½ºÅÍ´Â ±âº»ÀûÀ¸·Î Ŭ·¯½ºÅÍ ¾ÆÅ°ÅØÃò¾îÀ̰í, Ŭ·¯½ºÅÍ´Â º´·Ä ÄÄÇ»ÅÍ ¾ÆÅ°ÅØÃò¾îÀÇ ÀÏÁ¾ÀÌ´Ù. º´·Ä ÄÄÇ»ÅÍÀÇ ÇÁ·Î±×·¡¹Ö ¸ðµ¨Àº ¿ì¸®°¡ Àͼ÷ÇÑ ¼øÂ÷Àû ÇÁ·Î±×·¡¹Ö ¸ðµ¨°ú ´Ù¸£´Ù. µû¶ó¼ ¸®´ª½º Ŭ·¯½ºÅ͸¦ °¡Áö°í ``ÀǹÌÀÖ´Â ÀÛ¾÷''À» ¼öÇàÇϱâ À§Çؼ´Â º´·Ä ÄÄÇ»ÅÍ ¾ÆÅ°ÅØÃò¾î¿Í º´·Ä ÇÁ·Î±×·¡¹Ö ¸ðµ¨¿¡ ´ëÇÑ ÀÌÇØ°¡ ÇÊ¿äÇÏ´Ù.
1.1 º´·Ä ÄÄÇ»ÅÍ ¾ÆÅ°ÅØÃò¾î
º´·Ä ÄÄÇ»ÅÍ´Â 2°³ ÀÌ»óÀÇ CPU·Î ±¸¼ºµÇ¾î ÀÖÀ¸¸ç, ¿©·¯ °³ÀÇ CPU¸¦ ``µ¿½Ã¿¡'' »ç¿ëÇϸé ÁÖ¾îÁø ÀÏÀ» ``»¡¸®'' ³¡³¾ ¼ö ÀÖ´Ù´Â »ý°¢À¸·Î ±¸¼ºµÇ´Â ¾ÆÅ°ÅØÃò¾îÀÌ´Ù. °¢°¢ÀÇ CPU°¡ µ¶¸³µÈ ¸Þ¸ð¸® ÁÖ¼Ò¿Í ÇÁ·Î±×·¥ counter¸¦ À¯ÁöÇÑ´Ù´Â Á¡¿¡¼ º´·Ä ó¸® ÄÄÇ»ÅÍ (parallel processing computer)´Â ¼øÂ÷ ó¸® ÄÄÇ»ÅÍ (serial processing computer)¿Í ´Ù¸£´Ù. ¿©·¯ ´ëÀÇ ÄÄÇ»ÅͰ¡ »ç¿ëÀÚ¿¡°Ô ¾î¶»°Ô º¸¿©Áö´Â °¡¿¡ µû¶ó¼ º´·Ä ÄÄÇ»ÅÍ ¾ÆÅ°ÅØÃò¾î¸¦ ¿©·¯ ÇüÅ·Π»ý°¢ÇÒ ¼ö ÀÖ´Ù.
- º´·ÄÈ Á¤µµ¿¡ µû¸¥ ºÐ·ù : coarse grained vs. fine grained
- Flynn's ºÐ·ù : SISD, SIMD, MIMD, MISD $\rightarrow$ SPMD
- ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¸¥ ºÐ·ù : distributed memory, shared memory,
distributed-shared memory
- ³ëµå°£ ¹°¸®Àû ¿¬°á ¹æ¹ý¿¡ µû¸¥ ºÐ·ù : switch, hardware supported remote memoery access by direct memory access, router chip(or processor) etc
- ³ëµå°£ ¿¬°áÀÇ ³í¸®Àû ±¸Á¶ ºÐ·ù : hypercube, 2-D mesh, 3-D torus, switch, etc
- single system image vs. multiple system image
Çϵå¿þ¾î ±¸Á¶ÀÇ ºÐ·ù¿Í »ó°ü¾øÀÌ, º´·Ä ÄÄÇ»Å͸¦ º´·Ä·Î »ç¿ëÇÏ·Á¸é º´·Ä ÇÁ·Î±×·¡¹ÖÀ» ÇØ¾ßÇÑ´Ù (¾î¶² ÇÁ·Î±×·¥ÀÌ º´·ÄȰ¡ °¡´ÉÇÑ Áö ¾Æ´Ñ Áö¸¦ ÄÄÆÄÀÏ·¯°¡ ÀÚµ¿À¸·Î °áÁ¤ÇÒ ¼ö ¾ø´Ù).
±âº»ÀûÀÎ ¼øÂ÷ ó¸® ÇÁ·Î±×·¡¹Ö construct (array, control structure, procedure, recursion)À» °¡Áø ¿©·¯ ´ëÀÇ ÄÄÇ»Å͸¦ ´ë»óÀ¸·Î ÇÁ·Î±×·¡¹ÖÇÑ´Ù´Â Á¡¿¡¼ º´·Ä ÇÁ·Î±×·¡¹ÖÀº ¼øÂ÷ ÇÁ·Î±×·¡¹Ö°ú ´Ù¸£´Ù.
A man who has two women loses his soul. But a man who has two houses loses his head.
Leslie Lamport's example (cf. G.F. Pfister, "In search of clusters" 2nd ed., Prentice Hall, original ref. L. Lamport, IEEE Transactions on Computers, C-28(9), 690 (1979))
¸ðµÎ x = y = 0 ¿¡¼ ½ÃÀÛ \\
/* Processor 1 */ \\
x = 1; \\
if (y == 0) print(``1 wins''); \\
/* Processor 2 */ \\
y = 1; \\
if (x == 0) print(``2 wins'');
µû¶ó¼ º´·Ä ÇÁ·Î±×·¥ ÀÛ¼ºÀÚ´Â ÇÁ·Î±×·¥ÇÏ·Á´Â ¹®Á¦ÀÇ ³í¸®Àû ±¸Á¶¿¡
´ëÇØ¼ ÀÌÇØÇϰí ÀÖ¾î¾ß ÇÑ´Ù.
º´·ÄÈ º¸±â (½¬¿î do-loop ±¸Á¶) :
do i = 1, MAX \\
Z(i) = X(i) + Y(i) \\
enddo
- superscalar ¾ÆÅ°ÅØÃò¾î°¡ ¾Æ´Ñ ¼øÂ÷ ÄÄÇ»ÅÍÀÇ °æ¿ì
* ¸Þ¸ð¸®·Î ºÎÅÍ X(i)¿Í Y(i)¸¦ regsiter·Î ÀÐ¾î µéÀδÙ
* X(i)¿Í Y(i)¸¦ ´õÇÑ´Ù
* ´õÇÑ °á°ú°¡ ÀÖ´Â register¿¡¼ Z ¸Þ¸ð¸® À§Ä¡·Î ¾´´Ù
* ÀÌ °úÁ¤À» loopÀÇ ¼ýÀÚ ¸¸Å ¹Ýº¹ÇÑ´Ù
- º´·Ä ÄÄÇ»ÅÍÀÇ °æ¿ì (À§ÀÇ ¿¹Á¦ : embarrasingly parallel °æ¿ì)
* MAX °³ÀÇ X(i)¿Í Y(i)¸¦ N ´ëÀÇ ÄÄÇ»ÅÍ¿¡ °ñ°í·ç ³ª´©¾î(MAX/N) ºÐ¹è
* MAX/N °³ÀÇ X(i)¿Í Y(i)¿¡ ´ëÇÏ¿© ¼øÂ÷ó¸® ÄÄÇ»ÅÍÀÇ °úÁ¤À» N ´ëÀÇ ÄÄÇ»ÅͰ¡
(MAX/N)-¹ø ¼öÇàÇÑ´Ù
* ³ª´©¾î °è»êµÈ Z(i)¸¦ ÇÑ ±ºµ¥ ¸ðÀº´Ù
- Amdahl's law : º´·ÄÈ¿¡ µû¸¥ ÃÖ´ë ¼º´É °³¼± ºñ
ÇÑ ´ëÀÇ ÄÄÇ»ÅÍ »ó¿¡¼ ÄÚµå Áß º´·ÄȰ¡ °¡´ÉÇÑ ºÎºÐÀ» ¼øÂ÷ÀûÀ¸·Î ¼öÇàÇϴµ¥
°É¸®´Â ½Ã°£ = Ip
ÇÑ ´ëÀÇ ÄÄÇ»ÅÍ »ó¿¡¼ ÄÚµå Áß º´·ÄȰ¡ ¾ÈµÇ´Â ºÎºÐÀ» ¼øÂ÷ÀûÀ¸·Î ¼öÇàÇϴµ¥
°É¸®´Â ½Ã°£ = Is
¼º´É ºñ =
¿¹¸¦ µé¾î¼ Ip°¡ 90%, Is°¡ 10%ÀÇ CPU ½Ã°£À» Â÷ÁöÇÑ´Ù¸é, ¼³»ç NÀÌ ¹«ÇÑ´ë¶ó°í ÇÏ´õ¶óµµ ¼º´É Áõ°¡´Â ´ÜÁö (0.9 + 0.1)/(0.9/N + 0.1) = 10 ¹è¿¡ ºÒ°úÇÏ´Ù.
¹°·Ð º´·ÄÈ¿¡ ¼ö¹ÝµÇ´Â Åë½Å¿¡ ÀÇÇÑ system overhead ¶§¹®¿¡, º´·ÄÈ¿¡ ÀÇÇÑ Àüü °è»ê ¼Óµµ´Â Is°¡ 0%ÀÎ °æ¿ì¿¡µµ ³ëµåÀÇ °¹¼ö¿¡ ´Ü¼ø ºñ·ÊÇÏÁö ¾Ê´Â´Ù. µû¶ó¼ °è»êÀ» ¼öÇàÇÔ¿¡ ÀÖ¾î¼ Åë½ÅÀÌ ÇÊ¿äÇÑ ºÎºÐ (surface)°ú ÇÑ ³ëµå°¡ ´ã´çÇÏ´Â ºÎºÐ (volume)°úÀÇ »ó´ëÀûÀÎ ºñÀ²À» ³·Ãß¾î¾ß¸¸ º´·Ä ÄÄÇ»ÅÍÀÇ È¿À²ÀÌ ³ô´Ù
1.2 Ŭ·¯½ºÅÍ ¾ÆÅ°ÅØÃò¾î
º´·Ä ÄÄÇ»ÅÍÀÇ ´ëÇ¥ÀûÀÎ ¾ÆÅ°ÅØÃò¾î´Â MPP (Massively Parallel Processing) ÄÄÇ»ÅÍ¿Í SMP(Symmetric Multi-Processing) ÄÄÇ»ÅÍÀÌ´Ù (CC-NUMAµµ ÀÖÁö¸¸). Ŭ·¯½ºÅÍ ¾ÆÅ°ÅØÃò¾î´Â MPP ¾ÆÅ°ÅØÃò¾î¿¡ °¡±õÁö¸¸, ÀüÅëÀûÀ¸·Î º´·Ä ÄÄÇ»ÅÍÀÇ ±¸¼º ¿ä¼ÒÀÎ ÄÄÇ»ÅÍ ³ëµå°¡ ÇÑ ´ëÀÇ µ¶¸³ÀûÀÎ ÄÄÇ»ÅÍ·Î ÀÛµ¿ÇÒ ¼ö ÀÖ´Â ¼ºÁúÀ» °è¼Ó À¯ÁöÇÏ´Â loosely-coupled º´·Ä ¾ÆÅ°ÅØÃò¾îÀÌ´Ù. µû¶ó¼ ºÐ»ê ÄÄÇ»ÅÍ ¾ÆÅ°ÅØÃò¾î (distributed computer architecture)ÀÇ ¼ºÁúµµ °¡Áø´Ù.
Ŭ·¯½ºÅÍ ¾ÆÅ°ÅØÃò¾î¿¡¼´Â µ¶¸³ÀûÀÎ ¿î¿µ ü°è (OS)¸¦ Áö´Ï´Â ¿©·¯ ´ëÀÇ ÄÄÇ»ÅÍ¿¡ ¿©·¯ °³ÀÇ task¸¦ È¿À²ÀûÀ¸·Î ºÐ¹èÇÏ°í °ü¸®ÇÏ´Â °ÍÀÌ ÁÖµÈ °ü½É»ç¿´´Ù (dynamic load balancing, high availability, etc).
µû¶ó¼ º´·Ä ÄÄÇ»ÅÍ¿Í Å¬·¯½ºÅÍ ÄÄÇ»ÅÍ´Â ÇØ°áÇØ¾ß ÇÏ´Â ¹®Á¦ÀÇ ¼º°ÝÀÌ ¾à°£ ´Þ¶ú´Ù. º´·Ä ÄÄÇ»ÅÍ¿¡¼´Â Åë½Å¿¡ µû¸¥ latency¿Í bandwidth ¹®Á¦µîÀÇ ÇØ°á¿¡ ¸¹Àº ³ë·ÂÀ» ÇØ¿ÔÁö¸¸ Ŭ·¯½ºÅÍ ÄÄÇ»ÅÍ¿¡¼´Â job scheduling°ú resource allocation µî°ú °°Àº ¹®Á¦ÀÇ ÇØ°á¿¡ ÁÖ·ÂÇØ¿Ô´Ù.
ÃÖ±ÙÀÇ °æÇâ
- high performance computing
- high availiability system
- data base server
- web server
- more
1.3 ¸®´ª½º Ŭ·¯½ºÅÍ
¸®´ª½º Ŭ·¯½ºÅʹ Ŭ·¯½ºÅÍÀÇ °¢ ³ëµå ¿î¿µ ü°è·Î ¸®´ª½º¸¦ »ç¿ëÇϴ Ŭ·¯½ºÅÍÀÌ´Ù
Open SourceÀÎ ¸®´ª½º ¿î¿µÃ¼°è´Â »ç¿ëÀÚ°¡ off-the-shelf components¸¦ °¡Áö°í Á÷Á¢ Çʿ信 ¸Â°Ô Ŭ·¯½ºÅ͸¦ Á¦ÀÛÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.
¸®´ª½º Ŭ·¯½ºÅÍ´Â ¸®´ª½º°¡ ´Ù¾çÇÑ CPU¿Í device¸¦ Áö¿øÇϱ⠶§¹®¿¡ Ŭ·¯½ºÅÍ °³³ä ÀÚü¸¦ ½±°Ô ¿©·¯ °¡Áö ÇüÅ·Π±¸ÇöÇÒ ¼ö ÀÖ°í ¸®´ª½ºÀÇ ¹ßÀü¿¡ µû¸¥ È¿°ú¸¦ Áö¼ÓÀûÀ¸·Î Ŭ·¯½ºÅÍ¿¡ Àû¿ëÇÒ ¼ö ÀÖ´Â "ÀϹݼº" (generality)ÀÌ ÀÖ´Ù.
¸®´ª½º Ŭ·¯½ºÅÍ´Â »ç¿ëÀÚ°¡ °¢ÀÚÀÇ Çʿ信 ÀûÇÕÇÑ Å¬·¯½ºÅ͸¦ Á÷Á¢ ±¸¼ºÇϱ⠶§¹®¿¡ ``È¿À²¼º'' (efficiency)ÀÌ ÀÖ´Ù (¸®´ª½ºÀÇ ÀϹݼº ¶§¹®¿¡ È¿À²¼º¿¡ ÇѰ谡 ÀÖ±â´Â ÇÏ´Ù).
´ë·® »ý»êµÇ´Â PC¿Í network Àåºñ·Î ÀÎÇÑ Àú·ÅÇÑ ºñ¿ë
¸®´ª½º Ŭ·¯½ºÅÍ´Â Çϵå¿þ¾î¿¡ »ó°üÇÏ´Â ºÎºÐÀÌ Àû¾î¼ ¾ÆÅ°ÅØÃò¾î ÀÚüÀÇ È£È¯¼º (architecture portability)ÀÌ ÀÖ´Ù. ¸®´ª½º°¡ »ì¾Æ ÀÖ´ÂÇÑ, °è¼Ó ¹ßÀüµÇ´Â Çϵå¿þ¾îÀÇ »ç¾ç (¸®´ª½º°¡ Áö¿øÇÏ´Â »ç¾ç)À» »ç¿ëÇÏ¿© Ŭ·¯½ºÅ͸¦ "¾÷±×·¹À̵å" ÇÒ ¼ö ÀÖ´Ù.
de facto standardÈÇÑ message passing paradigm implementation¿¡ µû¸¥ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ È£È¯¼º (software portability) Áõ°¡ ($\rightarrow$ MPI·Î ÀÛ¼ºÇÑ º´·Ä ÇÁ·Î±×·¥ÀÇ ±ä ¼ö¸í °¡´É¼º)
È®À强 (scalability)ÀÌ ÀÖ´Â ¾ÆÅ°ÅØÃò¾î·Î ¼ö ¹é´ë (AvalonÀÇ °æ¿ì 140 ´ëÀÇ Alpha PC + Fast ethernet)·Î È®ÀåÀÌ °¡´ÉÇÏ´Ù.
Á÷Á¢ Á¦ÀÛÇÏ´Â ¸®´ª½º Ŭ·¯½ºÅÍÀÇ °æ¿ì, ¸®´ª½º´Â system ±¸¼ºÀÚ¿¡°Ô Ư¼ö Çϵå¿þ¾î °³¹ß°ú ÀÌ¿¡ µû¸¥ ¿î¿µÃ¼°è¿Í compiler°³¹ß, hardware driver (network componentÀÇ software Ãø¸é) °³¹ß°ú À¯Áö, º¸¼ö¿¡ °ü·ÃµÈ ºÎ´ãÀ» ´ú¾î ÁÖ°í ÀÀ¿ë ÇÁ·Î±×·¥ °³¹ß¿¡¸¸ Ä¡ÁßÇÒ ¼ö ÀÖ°Ô ÇØ ÁÖ¾ú´Ù.
°ÀÇ 2 : ¸®´ª½º Ŭ·¯½ºÅÍÀÇ ½ÇÁ¦ÀûÀÎ ±¸¼º
Premise : ÇϳªÀÇ º´·Ä ÄÄÇ»ÅÍ ¾ÆÅ°ÅØÃò¾î°¡ ¸ðµç ÇüÅÂÀÇ º´·Ä ¹®Á¦µé¿¡ ÀûÇÕÇÑ °ÍÀº ¾Æ´Ï´Ù. Ŭ·¯½ºÅÍ ¾ÆÅ°ÅØÃò¾îµµ ¿¹¿Ü´Â ¾Æ´Ï¾î¼, ÇѰ¡Áö ÇüÅÂÀÇ Å¬·¯½ºÅͰ¡ ¸ðµç ¹®Á¦¸¦ ÇØ°áÇϴµ¥ È¿À²ÀûÀÎ °ÍÀº ¾Æ´Ï´Ù. ÀÌ·¯ÇÑ Á¡¿¡¼ »ç¿ëÀÚ°¡ ¼Õ½±°Ô Á÷Á¢ Á¦ÀÛÇÒ ¼ö ÀÖ´Â ¸®´ª½º Ŭ·¯½ºÅÍ´Â Open SourceÀÎ ¸®´ª½º°¡ Á¦°øÇÏ´Â ´Ù¾çÇÑ ³ëµå ±¸Á¶¿Í Åë½Å °ü·Ã »çÇ×À» "»ç¿ëÀÚÀÇ ¿©°Ç"¿¡ ¸Â°Ô ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ÀÌ ¸»Àº Á¦ÀÛÇÏ´Â »ç¶÷ÀÌ Á¦ÀÛ ¸ñÀûÀ» Á¤È®È÷ ÀÌÇØÇÏ°í ±× ¸ñÀû¿¡ µû¶ó¼ ¿©·¯ °¡Áö »ç¾ç¿¡ ¼±ÅÃÇÒ ´É·ÂÀÌ ÀÖ¾î¾ß ÇÑ´Ù´Â ¶æÀÌ µÉ ¼öµµ ÀÖ´Ù.
2.1 Çϵå¿þ¾î ¼±Åà »çÇ×
- ³ëµå CPU
* Intel vs. Alpha (or others)
* single CPU vs. SMP
* º´·Ä ÄÄÇ»ÅÍ´Â µ¿±âÈ (synchronization) ¶§¹®¿¡ °¡Àå ´À¸° ³ëµå ÄÄÇ»ÅÍÀÇ ¼Óµµ°¡ Àüü ¼Óµµ¸¦ °áÁ¤ÇÑ´Ù
- ³ëµå°£ ¿¬°á°ú °ü·ÃµÈ Çϵå¿þ¾î »çÇ×
* fast ethernet + 100 Mbps switch
* Myrinet NIC + Myrinet switch
* gigabit ethernet + gigabps switch
* SCI + SCI switch
* ATM card + ATM switch ???
* PLIP ???
- Hard disk system ¼±ÅÃ
* big disk + diskless
* disk on every nodes
* local disk and i/o disk
- Serial console or not
- ¼Òºñ Àü·Â°ú ¿
- ³ëµå°£ ¿¬°áÀÇ ³í¸®Àû ±¸Á¶¿Í °ü·ÃµÈ »çÇ×
* switch ±¸Á¶ÀÇ °æ¿ì ³í¸®Àû ±¸Á¶ ¼±ÅÃÀÌ »ó´ëÀûÀ¸·Î ÀÚÀ¯·Ó´Ù
* multi-level switch, channel bonding ?
* multiple networks ?
- Hard disk systemÀÇ ³í¸®Àû ±¸Á¶ ¼±ÅÃ
* share nothing (distributed file system)
* share something (¿¹ : local partition + NFS partition)
* share everything (¿¹ : diskless + NFS)
2.2 ³ëµå ³×Æ®¿öÅ© ȯ°æ ±¸¼º
- single access point vs. multiple access points
- NIS
- rsh
2.3 º´·Ä ȯ°æ ±¸¼º
±âº»ÀûÀ¸·Î ¸®´ª½º Ŭ·¯½ºÅÍ¿¡¼ ÇöÀç »ç¿ëÇÒ ¼ö ÀÖ´Â º´·Ä ȯ°æÀº ¸Þ½ÃÁö ÆÐ½Ì ¹æ¹ýÀÌ´Ù.
* LAM (Local Area Multi-computer)
* MPICH (MPI-Chameleon)
* PVM (Parallel Virtual Machine)
* KMPI (Kool MPI)
* Setting-up
°ÀÇ 3 : MPI¸¦ »ç¿ëÇÑ ¸®´ª½º Ŭ·¯½ºÅÍ ÇÁ·Î±×·¡¹Ö
Premise : ¸®´ª½º Ŭ·¯½ºÅ͸¦ º´·Ä·Î »ç¿ëÇÏ·Á¸é º´·Ä ÇÁ·Î±×·¥À» »ç¿ëÇØ¾ß ÇÑ´Ù. ÄÄÆÄÀÏ·¯°¡ ¼øÂ÷ ó¸® ÇÁ·Î±×·¥À» ÀÚµ¿ÀûÀ¸·Î º´·ÄÈ ÇØÁÖÁö ¾Ê±â ¶§¹®¿¡, ÀÌ¹Ì º´·Ä·Î ÀÛ¼ºµÈ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¾ø´Ù¸é »ç¿ëÀÚ°¡ Á÷Á¢ º´·Ä ÇÁ·Î±×·¥À» ÀÛ¼ºÇØ¾ß ÇÑ´Ù. º´·Ä ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀº ¼øÂ÷ ó¸® ÇÁ·Î±×·¥ ÀÛ¼ºÇÏ´Â °Í°ú ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¸ðµ¨À» µû¸£±â ¶§¹®¿¡ ¾î·Á¿òÀÌ µû¸¥´Ù. ¸®´ª½º Ŭ·¯½ºÅÍ¿¡¼ ÇöÀç »ç¿ë °¡´ÉÇÑ º´·Ä ÇÁ·Î±×·¡¹Ö ȯ°æÀº message passing ÇüÅÂÀ̹ǷÎ, ÀÌ È¯°æ ÇÏ¿¡¼ º´·Ä ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù.
3.1 º´·Ä ÇÁ·Î±×·¡¹Ö ¹æ¹ý
message passing : Á¤º¸¸¦ local ¸Þ¸ð¸® »ó¿¡ Á¸ÀçÇÏ´Â °æ¿ì¿Í ´Ù¸¥ ÄÄÇ»ÅÍÀÇ ¸Þ¸ð¸® »ó¿¡ Á¸ÀçÇÏ´Â °æ¿ì·Î ±¸ºÐÇϰí, º´·Ä ÇÁ·Î±×·¥ »ó¿¡¼ non-local Á¤º¸°¡ ÇÊ¿äÇÒ ¶§, message¸¦ ÁÖ°í ¹Þ¾Æ¼ ÇØ°áÇÑ´Ù (ºÐ»ê ¸Þ¸ð¸® ÇüÅ¿¡ ÀûÇÕ).
* µÎ °³ÀÇ ³ëµå ¶Ç´Â ´Ù¼öÀÇ ³ëµå°¡ Çù·ÂÇÑ´Ù
* PVM (Parallel Virtual Machine)
* MPI (Message Passing Interface)
* BSP (Bulk Synchronous Parallel)
data parallel : µ¥ÀÌÅÍÀÇ ±¸Á¶¸¦ ¹Ì¸® ºÐ¹èÇÏ´Â ÇüÅ·Π¼±¾ðÇÑ ÈÄ,ÀÌ·¸°Ô ¼±¾ðÇÑ Á¤º¸°¡ local Á¤º¸ÀÎÁö non-local Á¤º¸ÀÎÁö Çʿ信 µû¶ó¼ ÄÄÆÄÀÏ·¯¿Í Çϵå¿þ¾î°¡ ÇØ°á ÇÑ´Ù (°øÀ¯ ¸Þ¸ð¸® ÇüÅ¿¡ ÀûÇÕ).
* ¿¹¸¦ µé¾î¼ ¸Þ¸ð¸®¿¡ ´ëÇØ¼ lock-unlock mechanismÀ» »ç¿ëÇÑ´Ù
* Open\_MP
* HPF
* F90
in-between
* Linda
3.2 MPI (Message Passing Interface)¿¡ ´ëÇÑ °£´ÜÇÑ ¼Ò°³
1994³â MPI forumÀÌ MPI Ç¥ÁØÀ» Á¤Çϱâ Àü¿¡´Â ´Ù¾çÇÑ ¾ÆÅ°ÅØÃò¾î¸¦ °¡Áø ¿©·¯ °¡Áö º´·Ä ÄÄÇ»Å͸¦ À§Çؼ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ°í ¼öÇàÇÏ·Á¸é °¢°¢ ´Ù¸¥ ¹æ¹ý¸¦ »ç¿ëÇØ¾ß Çß´Ù. ÀÌ·¯ÇÑ ¹®Á¦´Â º´·Ä ÄÄÇ»ÅÍ ¾ÆÅ°ÅØÃò¾îÀÇ Àå±âÀûÀÎ ¹ßÀü¿¡ ¸¹Àº ÁöÀåÀ» ÃÊ·¡ÇÑ´Ù°í ¿¹»óµÇ¾î, º´·Ä ÄÄÇ»ÅÍ¿Í °ü·ÃµÈ ¸¹Àº »ç¶÷µéÀÌ forumÀ» °á¼ºÇϰí message passing paradigmÀ» ÀÌ¿ëÇÏ´Â ÄÄÇ»Å͸¦ ÇÁ·Î±×·¥ÇÏ°í »ç¿ëÇϴ ǥÁØÀ» ¸¸µé¾ú´Ù. ÀÌ Ç¥ÁØÀº IEEE°°Àº ÀÎÁõ ±â°üÀÌ ÀÎÁõÇÑ Ç¥ÁØÀº ¾Æ´ÏÁö¸¸, ½´ÆÛÄÄÇ»ÅÍ industryÀÇ de facto Ç¥ÁØÀÇ ¿ªÇÒÀ» Çϰí ÀÖ¾î¼ º´·Ä ÄÄÇ»ÅÍ Çϵå¿þ¾î¿Í µ¶¸³ÀûÀ¸·Î º´·Ä ÇÁ·Î±×·¥À» ÀÛ¼ºÇϰí À¯ÁöÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù.
ÀÌ·¯ÇÑ ½Ãµµ´Â »ó´çÈ÷ ¼º°øÀûÀ̾î¼, °øÀ¯ ¸Þ¸ð¸® ¹æ½ÄÀÇ º´·Ä ÄÄÇ»ÅÍ ¾ÆÅ°ÅØÃò¾î¿¡¼µµ Open\_MP ¶ó´Â ¾÷°è °øµ¿ÀÇ Ç¥ÁØÀ» 1997³â¿¡ ÀÛ¼ºÇÏ´Â °è±â°¡ µÇ¾ú´Ù.
¸ñÀû
- ¸Þ½ÃÁö ÆÐ½Ì ÇüÅÂÀÇ º´·Ä ÇÁ·Î±×·¥ ȣȯ¼º (portability)
- È¿À²¼º (efficiency)Àº °è¼Ó À¯Áö
- ÀÚÀ¯·Î¿î ±â´É¼º (functionality)
Ư¡
- Message passing standard -- portability
- based on previous message passing libraries
- Program interface
- Allow efficient communication
- Allow heterogeneous environment
- C and Fortran 77 binding -- language independent semantics
3.3 ±âº»ÀûÀÎ MPI Function (¸ðµÎ 127 °³ÀÇ ÇÔ¼ö)
Task management (more)
- MPI_Init()
- MPI_Barrier()
- MPI_Wtime(), MPI_Wtick()
- MPI_Finalize()
Communicator (more)
- MPI_Comm_create()
- MPI_Comm_rank()
- MPI_Comm_size()
Topology management (more)
- MPI_Cart_create()
- MPI_Cart_coords()
- MPI_Cart_get()
- MPI_Cart_rank()
Communication (more)
- blocked send-receive : MPI_Send(), MPI_Recv(), MPI_Sendrecv(), etc
- non-blocked send-receive : MPI_Isend(), MPI_Irecv(), MPI_Wait()
- collective communication : MPI_Reduce(), MPI_Allreduce(),
MPI_Bcast(), MPI_Scatter(), MPI_Gather()
Derived Data type (more)
- MPI_Type_commit()
- MPI_Type_size()
- MPI_Type_struct()
Process group
3.4 º´·Ä ÇÁ·Î±×·¡¹Ö °í·Á »çÇ×
- load balance
- surface-to-volume ratio
- deadlock°ú racing condition
3.5 MPI ÇÁ·Î±×·¥ ¿¹Á¦
±âº»ÀûÀÎ point-to-point communication ¿¹ (Appendix 1)
±âº»ÀûÀÎ collective communication°ú operation ¿¹ (Appendix 2)
putting them all together
compile°ú execution
Appendix 1. ±âº»ÀûÀÎ point-to-point communication ¿¹
#comm_mpi.c
#include <stdio.h>
#include </usr/local/lam-CFC/h/mpi.h>
#define MAX 500
main(int argc, char** argv)
{
int i, node, numtask, nextup, nextdn, itag;
float sendbuf[MAX], recvbuf[MAX];
MPI_Status status;
MPI_Request request;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&node);
MPI_Comm_size(MPI_COMM_WORLD,&numtask);
if (node != (numtask-1))
nextup = node + 1;
else
nextup = 0;
if (node != 0)
nextdn = node - 1;
else
nextdn = numtask-1;
for(i = 0; i < MAX;i++) {
sendbuf[i] = node*0.1*(i+1);
recvbuf[i] = 0.0;
}
itag = 22;
MPI_Irecv(&recvbuf,MAX,MPI_FLOAT,nextup,itag,MPI_COMM_WORLD,&request);
MPI_Send(&sendbuf,MAX,MPI_FLOAT,nextdn,itag,MPI_COMM_WORLD);
MPI_Wait(&request, &status);
printf("from %d received %e\n", nextup, recvbuf[0]);
MPI_Finalize();
}
#comm_mpi.f
program comm_mpi
parameter(MAX=500)
include '/usr/local/lam-CFC/h/mpif.h'
integer istatus(MPI_STATUS_SIZE)
real sendbuf(MAX), recvbuf(MAX)
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD,node,ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD,numtask,ierr)
if (node .ne. (numtask-1)) then
nextup = node + 1
else
nextup = 0
endif
if (node .ne. 0) then
nextdn = node - 1
else
nextdn = numtask-1
endif
do 10 i = 1, MAX
sendbuf(i) = node*0.1*i
recvbuf(i) = 0.0
10 continue
itag = 22
call MPI_IRECV(recvbuf,MAX,MPI_REAL,nextup,itag,
# MPI_COMM_WORLD,ireq,ierr)
call MPI_SEND(sendbuf,MAX,MPI_REAL,nextdn,itag,
# MPI_COMM_WORLD,ierr)
call MPI_WAIT(ireq,istatus,ierr2)
write(6,*) 'from ', nextup, ' receive ', recvbuf(1)
call MPI_FINALIZE(ierr)
stop
end
Appendix 2. ±âº»ÀûÀÎ collective communication°ú operation ¿¹
#reduce_mpi.c
#include <stdio.h>
#include </usr/local/lam-CFC/h/mpi.h>
#define N 1000000
main(int argc, char** argv) {
int i, node, numtask, subN, iroot;
float A[N];
double sum, sumt;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&node);
MPI_Comm_size(MPI_COMM_WORLD,&numtask);
subN = N/numtask;
for(i = 0;i < subN;i++) A[i] = (float)(i+1 + node*subN);
sum = 0.0;
sumt = 0.0;
iroot = 0;
for(i = 0;i < subN;i++) sum = sum + A[i];
MPI_Reduce(&sum,&sumt,1,MPI_DOUBLE,MPI_SUM,iroot,MPI_COMM_WORLD);
printf("total sum = %f\n", sumt);
MPI_Finalize();
}
#reduce_mpi.f
program test_reduce
include '/usr/local/lam-CFC/h/mpif.h'
parameter (N=1000000)
real A(N)
double precision sum, sumt
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD,node,ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD,numtask,ierr)
isubloop = N/numtask
do i = 1, isubloop
A(i) = real(i + node*isubloop)
enddo
sum = 0.0
sumt = 0.0
iroot = 0
do i = 1, isubloop
sum = sum + A(i)
enddo
call MPI_REDUCE(sum,sumt,1,MPI_DOUBLE_PRECISION,MPI_SUM,iroot,
& MPI_COMM_WORLD,ierr)
write(6,*) 'total sum = ', sumt
call MPI_FINALIZE(ierr)
stop
end