D-3. ¸®´ª½º Ŭ·¯½ºÅ͸µ

°­»ç: ±è¼¼¿ë <skim@kunja.sejong.ac.kr>


ÀÌ ¹®¼­ÀÇ º¯È¯ Á¤µµ´Â ¾çÈ£ÇÕ´Ï´Ù. µû¶ó¼­ 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 + Is } over { { Ip} over {N } + 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


[ Á¦4ȸ ¸®´ª½º °øµ¿Ã¼ ¼¼¹Ì³ª ±³Àç ¸ñ·ÏÀ¸·Î µ¹¾Æ°©´Ï´Ù. ]