Linux Parallel Processing HOWTO <author>Hank Dietz, <tt><htmlurl url="mailto:pplinux@ecn.purdue.edu" name="pplinux@ecn.purdue.edu"></tt> <date>v980105, 5 January 1998 <trans>1Àå-2Àå ÀÌÈ£, <tt><htmlurl url="mailto:i@flyduck.com" name="(i@flyduck.com)"></tt>, 3Àå ÀÌÈÄ ¼±Á¤ÇÊ, <tt><htmlurl url="mailto:simje@maninet.com" name="(simje@maninet.com)"></tt> <tdate> 1999³â 12¿ù 3ÀÏ, ÃÖÁ¾ ¾÷µ¥ÀÌÆ®: 2000³â 4¿ù 18ÀÏ <abstract> <bf>º´·Äó¸®(Parallel Processing)</bf>´Â ÇÁ·Î±×·¥À» µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ÀÖ´Â ¿©·¯ Á¶°¢À¸·Î ³ª´©¾î °¢ÀÚ ÀÚ½ÅÀÇ ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàÇÔÀ¸·Î½á ÇÁ·Î±×·¥ ¼öÇà ¼Óµµ¸¦ ºü¸£°Ô ÇÑ´Ù´Â °³³äÀÌ´Ù. ÇÁ·Î±×·¥À» <em>N</em>°³ÀÇ ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàÇϸé ÇϳªÀÇ ÇÁ·Î¼¼¼­ ½ÇÇàÇÏ´Â °Íº¸´Ù <em>N</em>¹è±îÁö »¡¶óÁú ¼ö ÀÖ´Ù. ÀÌ ¹®¼­´Â ¸®´ª½º »ç¿ëÀÚµéÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â ³×°¡Áö º´·Ä 󸮿¡ ´ëÇÑ Á¢±Ù¹ýÀ» ´Ù·é´Ù. SMP ¸®´ª½º ½Ã½ºÅÛ, ³×Æ®¿÷À¸·Î ¿¬°áµÈ ¸®´ª½º ½Ã½ºÅÛÀÇ Å¬·¯½ºÅÍ, ¸ÖƼ¹Ìµð¾î ¸í·É¾î(MMX°°Àº)¸¦ ÀÌ¿ëÇÑ º´·Ä ¼öÇà, ÇϳªÀÇ ¸®´ª½º ½Ã½ºÅÛÀÌ È£½ºÆ®ÇÏ´Â ºÎ¼Ó (º´·Ä) ÇÁ·Î¼¼¼­(attached processor)°¡ À̵éÀÌ´Ù. </abstract> <toc> <!-- 1Àå --> <!--***************************************************************--> <sect>¼Ò°³ <!--***************************************************************--> <p> <bf>º´·Äó¸®(Parallel Processing)</bf>´Â ÇÁ·Î±×·¥À» µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ÀÖ´Â ¿©·¯ Á¶°¢À¸·Î ³ª´©¾î °¢ÀÚ ÀÚ½ÅÀÇ ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàÇÔÀ¸·Î½á ÇÁ·Î±×·¥ ¼öÇà ¼Óµµ¸¦ ºü¸£°Ô ÇÑ´Ù´Â °³³äÀÌ´Ù. ÇÁ·Î±×·¥À» N°³ÀÇ ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàÇϸé ÇϳªÀÇ ÇÁ·Î¼¼¼­ ½ÇÇàÇÏ´Â °Íº¸´Ù N¹è±îÁö »¡¶óÁú ¼ö ÀÖ´Ù. ¿À·§µ¿¾È Ưº°È÷ µðÀÚÀÎÇÑ "º´·Ä ÄÄÇ»ÅÍ(parellel computer)"¿¡¼­ ¿©·¯°³ÀÇ ÇÁ·Î¼¼¼­¸¦ »ç¿ëÇÒ ¼ö ÀÖ¾ú´Ù. ÀÌ·± °æÇâ¿¡ µû¶ó ¸®´ª½º´Â ÇöÀç ÇϳªÀÇ ÄÄÇ»ÅÍ ³»¿¡¼­ ¿©·¯°³ÀÇ ÇÁ·Î¼¼¼­°¡ °°Àº ¸Þ¸ð¸®¿Í ¹ö½º ÀÎÅÍÆäÀ̽º¸¦ °øÀ¯ÇÏ´Â <bf>SMP</bf> ½Ã½ºÅÛ(Á¾Á¾ "¼­¹ö"·Î Æȸ®´Â)À» Áö¿øÇÑ´Ù. ÀÌ ¿Ü¿¡µµ ¿©·¯´ëÀÇ ÄÄÇ»Å͸¦ ±×·ìÀ» Áö¾î (¿¹¸¦ µé¾î °¢°¢ ¸®´ª½º¸¦ ½ÇÇàÇÏ°í ÀÖ´Â PCµéÀÇ ±×·ì) ³×Æ®¿÷À¸·Î ¼­·Î ¿¬°áÇÏ¿© º´·Äó¸® <bf>Ŭ·¯½ºÅÍ</bf>(parellel-processing cluster)¸¦ ¸¸µé ¼ö ÀÖ´Ù. ¸®´ª½º¸¦ ÀÌ¿ëÇÑ º´·Ä ÄÄÇ»ÆÃÀÇ ¼¼¹ø° ¹æ¹ýÀº <bf>¸ÖƼ¹Ìµð¾î È®Àå ¸í·É¾î</bf>(multimedia instruction extensions, MMX)¸¦ »ç¿ëÇÏ¿© ¼ýÀÚ µ¥ÀÌÅÍ º¤Å͸¦ º´·Ä·Î ó¸®ÇÏ´Â °ÍÀÌ´Ù. ¸¶Áö¸·À¸·Î ¸®´ª½º ½Ã½ºÅÛÀ» Àü¿ëÀ¸·Î <bf>ºÎ¼Ó</bf> º´·Äó¸® ¿£Áø(attached parellel processing compute engine)ÀÇ "È£½ºÆ®"·Î »ç¿ëÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. ÀÌ ¹®¼­¿¡¼­´Â ÀÌ ¸ðµç Á¢±Ù¹æ¹ýµéÀ» ÀÚ¼¼È÷ ´Ù·çµµ·Ï ÇÏ°Ú´Ù. <!-- ------------------------------------------------------------- --> <sect1>º´·Ä󸮰¡ ³»°¡ ¹Ù¶ó´ø °ÍÀΰ¡? <!-- ------------------------------------------------------------- --> <p> ¿©·¯°³ÀÇ ÇÁ·Î¼¼¼­¸¦ »ç¿ëÇÏ´Â °ÍÀº ¸¹Àº ¿¬»êÀÇ Ã³¸®ÇÏ´Â ¼Óµµ¸¦ ºü¸£°Ô ÇÒ ¼ö ÀÖÁö¸¸, ´ëºÎºÐÀÇ ÀÀ¿ëÇÁ·Î±×·¥µéÀº º´·Ä󸮶ó°í Çؼ­ ¾ÆÁ÷ ³ª¾ÆÁö´Â°Ô ¾ø´Ù. ±âº»ÀûÀ¸·Î º´·Ä󸮴 ´ÙÀ½ °æ¿ì¿¡ ÇØ´çÇÒ ¶§ Àû´çÇÏ´Ù : <itemize> <item> ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¿©·¯°³ÀÇ ÇÁ·Î¼¼¼­¸¦ È¿°úÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï º´Ç༺À» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. ¾î´ÀÁ¤µµ ÀÌ´Â ÇÁ·Î±×·¥ Áß¿¡¼­ °¢±â ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­ µ¶¸³ÀûÀ¸·Î µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ÀÖ´Â ºÎºÐµéÀ» ÆľÇÇÏ´Â ¹®Á¦ÀÌ´Ù. ƯÁ¤ ½Ã½ºÅÛÀ» »ç¿ëÇÏ¿© º´·Ä·Î ½ÇÇàÇÏ´Â °æ¿ì, ¾î¶² °ÍµéÀº º´·Ä·Î ½ÇÇàÇÏ´Â°Ô ½ÇÁ¦·Î ´õ ´À¸° °æ¿ì°¡ ÀÖÀ» ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ÇϳªÀÇ ÄÄÇ»ÅÍ¿¡¼­ 4ÃÊ°¡ °É¸®´Â ÇÁ·Î±×·¥ÀÌ ³× ´ëÀÇ ÄÄÇ»ÅÍ¿¡¼­ °¢°¢ 1Ãʸ¸¿¡ ½ÇÇàÀ» ³¡³½´Ù ÇÏ´õ¶óµµ, À̵é ÄÄÇ»ÅÍ°¡ ¼­·ÎÀÇ µ¿ÀÛÀ» ÅëÇÕÇϴµ¥ 3Ãʳª ±× ÀÌ»óÀÇ ½Ã°£ÀÌ °É¸°´Ù¸é ¾Æ¹«·± ¼Óµµ°³¼±ÀÌ ÀÌ·ç¾îÁöÁö ¾Ê´Â´Ù. <item> °ü½ÉÀ» °¡Áö°í Àִ ƯÁ¤ ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ÀÌ¹Ì º´·ÄÈ­(º´·Äó¸®ÀÇ ÀÌÁ¡À» È°¿ëÇÏ¿© ´Ù½Ã ÀÛ¼ºµÈ) µÇ¾ú°Å³ª, º´·Äó¸®ÀÇ ÀÌÁ¡À» È°¿ëÇÏ´Â ÃÖ¼ÒÇÑÀÇ »õ·Î¿î ÄÚµùÀ» ÇÏ·Á°í ÇØ¾ß ÇÑ´Ù. <item> ¿¬±¸ºÐ¾ß¿¡ °ü½ÉÀְųª ¾î´ÀÁ¤µµ Àͼ÷ÇÑ »ç¶÷ÀÌ º´·Ä󸮸¦ Æ÷ÇÔÇϵµ·Ï ³ª¼­¾ß ÇÑ´Ù. ¸®´ª½º ½Ã½ºÅÛÀ» ÀÌ¿ëÇÑ º´·Ä󸮰¡ ¹Ýµå½Ã ¾î·Á¿î °ÍÀº ¾ÊÁö¸¸, ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ »ç¿ëÀÚ¿¡°Õ Ä£¼÷ÇÏÁö ¾Ê°í, "¾Æ¹«°Íµµ ¸ð¸£´Â »ç¶÷µéÀ» À§ÇÑ º´·Äó¸®"°°Àº Ã¥µµ ¾ÆÁ÷ ¾ø´Â »óȲÀÌ´Ù. ÀÌ HOWTO ¹®¼­°¡ ¾Ë¾Æ¾ß ÇÒ ¸ðµç°ÍÀº °¡Áö°í ÀÖÁø ¾Ê´õ¶óµµ ÁÁÀº Ãâ¹ßÁ¡ÀÌ µÉ °ÍÀÌ´Ù. </itemize> ÁÁÀº ¼Ò½ÄÀº À§ÀÇ ³»¿ëÀÌ ¸ðµÎ ÇØ´çÇÑ´Ù¸é, º¹ÀâÇÑ °è»êÀ» ¼öÇàÇϰųª ¹æ´ëÇÑ µ¥ÀÌÅ͸¦ ó¸®ÇÏ´Â ÇÁ·Î±×·¥ÀÇ °æ¿ì, ¸®´ª½º¸¦ ÀÌ¿ëÇÑ º´·Ä󸮰¡ ½´ÆÛÄÄÇ»ÅͱÞÀÇ ¼º´ÉÀ» ¹ßÈÖÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ´õ±º´Ù³ª ±×°Íµµ ´ç½ÅÀÌ ÀÌ¹Ì °¡Áö°í ÀÖÀ» °ª½Ñ Çϵå¿þ¾î¸¦ »ç¿ëÇÏ¿© ÇÒ ¼ö ÀÖ´Ù. º¸³Ê½º·Î º´·Ä ¸®´ª½º ½Ã½ºÅÛÀÌ ¹Ù»Ú°Ô º´·Ä ÀÛ¾÷À» ¼öÇàÇÏ°í ÀÖÁö ¾ÊÀ» ¶§´Â ´Ù¸¥ ¿ëµµ·Î ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. º´·Ä󸮰¡ ´ç½ÅÀÌ ¹Ù¶ó´ø °ÍÀÌ ¾Æ´Ï´õ¶óµµ ¾î´ÀÁ¤µµ ¼Ò¼ÒÇÑ ¼º´ÉÇâ»óÀ» ¹Ù¶õ´Ù¸é, ¿©ÀüÈ÷ ÇÒ ¼ö ÀÖ´Â ÀÏÀÌ ¸î°¡Áö ÀÖ´Ù. ¿¹¸¦ µé¾î, ¼øÂ÷󸮸¦ ÇÏ´Â ÇÁ·Î±×·¥µéÀº ºü¸¥ ÇÁ·Î¼¼¼­¸¦ »ç¿ëÇÏ°í, ¸Þ¸ð¸®¸¦ Ãß°¡ÇÏ°í, IDE µð½ºÅ©¸¦ ºü¸¥ ¿ÍÀ̵å SCSI µð½ºÅ©·Î ¹Ù²Ù´Â µîÀÇ ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ç½ÅÀÌ °ü½ÉÀ» °¡Áö´Â °ÍÀÌ À̰Ŷó¸é ¹Ù·Î <ref id="sec_PerformanceIssues" name="¼º´É ¹®Á¦">ÀåÀ¸·Î ³Ñ¾î°¡°í, ±×·¸Áö ¾ÊÀ¸¸é °è¼Ó ÀоîÁֱ⠹ٶõ´Ù. º´·Ä 󸮰¡ ¿©·¯ºÐÀÌ ¿øÇÏ´Â °ÍÀÌ ¾Æ´Ï´õ¶óµµ ¿©·¯ºÐÀÌ Àû¾îµµ °¡Àå ¿Â°ÇÇÑ ¼º´É °³¼±À» ÇÏ°íÀÚ ÇÑ´Ù¸é ¿©·¯ºÐÀÌ ÇÒ ¼ö ÀÖ´Â °ÍµéÀÌ ¾ÆÁ÷ ³²¾Æ ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ ¿©·¯ºÐÀº Á» ´õ ºü¸¥ ÇÁ·Î¼¼¼­, ¸Þ¸ð¸® Ãß°¡, IDE µð½ºÅ©¸¦ ºü¸¥ ¿ÍÀ̵å SCSI·Î ¹Ù²Ù´Â µîÀÇ ÀÏÀ» ÇÔÀ¸·Î½á ½ÃÄö¼È ÇÁ·Î±×·¥µéÀÇ ¼º´ÉÀ» °³¼±ÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀÌ ¿©·¯ºÐÀÌ °ü½ÉÀÌ ÀÖ´Â ¸ðµç °ÍÀ̶ó¸é ¼½¼Ç <ref id="sec_PerformanceIssues" name="¼º´É¿¡ ´ëÇÑ ³í¶õ">·Î Á¡ÇÁÇ϶ó; ±×·¸Áö ¾Ê´Ù¸é °è¼Ó Àб⠹ٶõ´Ù. <!-- ------------------------------------------------------------- --> <sect1>¿ë¾î <!-- ------------------------------------------------------------- --> <p> ¿©·¯ ÇØ µ¿¾È ¸¹Àº ½Ã½ºÅÛ¿¡¼­ º´·Ä󸮸¦ »ç¿ëÇØ¿ÔÁö¸¸, ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ »ç¿ëÀÚµéÀº ¿©ÀüÈ÷ Á» ³¸¼³ °ÍÀÌ´Ù. µû¶ó¼­ º´·Äó¸®ÀÇ ¿©·¯ ¹æ¹ýµéÀ» »ìÆ캸±â Àü¿¡, ¸î°¡Áö ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â ¿ë¾îµé¿¡ Àͼ÷ÇØÁö´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù. <descrip> <tag>SIMD (Single Instruction stream, Multiple Data stream, ´ÜÀÏ ¸í·É¾î, ´ÙÁß µ¥ÀÌÅÍ ½ºÆ®¸²) :</tag> SIMD´Â ¸ðµç ÇÁ·Î¼¼¼­°¡ ¶È°°Àº ¿¬»êÀ» µ¿½Ã¿¡ ½ÇÇàÇÏÁö¸¸, °¢ ÇÁ·Î¼¼¼­°¡ ÀڽŸ¸ÀÇ µ¥ÀÌÅÍ¿¡ ´ëÇØ ¿¬»êÀ» ¼öÇàÇÒ ¼ö ÀÖ´Â º´·Ä ½ÇÇà ¸ðµ¨À» °¡¸®Å²´Ù. ÀÌ ¸ðµ¨Àº ¹è¿­ÀÇ ¸ðµç ¿ø¼Ò¿¡ ´ëÇؼ­ ¶È°°Àº ¿¬»êÀ» ¼öÇàÇÏ´Â °³³ä¿¡ ÀÚ¿¬È÷ µé¾î¸ÂÀ¸¸ç, µû¶ó¼­ Á¾Á¾ º¤Åͳª ¹è¿­ ó¸®¿Í °ü·ÃµÈ´Ù. ¸ðµç ¿¬»êÀÌ º»·¡ µ¿±âÈ­µÇ¾îÀÖÀ¸¹Ç·Î, SIMD ÇÁ·Î¼¼¼­°£ÀÇ »óÈ£ÀÛ¿ëÀº ´ëü·Î ½±°í È¿°úÀûÀ¸·Î ±¸ÇöÇÒ ¼ö ÀÖ´Ù. <p> <tag>MIMD (Multiple Instruction stream, Multiple Data stream, ´ÙÁß ¸í·É¾î, ´ÙÁß µ¥ÀÌÅÍ ½ºÆ®¸²) :</tag> MIMD´Â °¢ ÇÁ·Î¼¼¼­°¡ ±Ùº»ÀûÀ¸·Î µ¶¸³ÀûÀ¸·Î µ¿ÀÛÇÏ´Â º´·Ä ½ÇÇà ¸ðµ¨À» °¡¸®Å²´Ù. ÀÌ ¸ðµ¨Àº ÇÁ·Î±×·¥À» ±â´ÉÀûÀÎ Åä´ë¿¡ ¹ÙÅÁÇÏ¿© º´·Ä ½ÇÇàÇÒ ¼ö ÀÖ´Â °ÍÀ¸·Î ÂÉ°³´Â °³³ä¿¡ ´ëºÎºÐ ÀÚ¿¬½º·´°Ô µé¾î¸Â´Â´Ù. ¿¹¸¦ µé¾î, ÇÑ ÇÁ·Î¼¼¼­´Â »õ·Î¿î ¿£Æ®¸®¸¦ ±×·¡ÇÈ È­¸éÀ¸·Î ¸¸µé°í ÀÖÀ» ¶§, ´Ù¸¥ ÇÁ·Î¼¼¼­´Â µ¥ÀÌÅͺ£À̽º ÆÄÀÏÀ» °»½ÅÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â SIMD º¸´Ù´Â ´õ À¯¿¬ÇÑ ¸ðµ¨ÀÌÁö¸¸, ÇÑ ÇÁ·Î¼¼¼­ÀÇ ¿¬»ê°ú ´Ù¸¥ ÇÁ·Î¼¼¼­ÀÇ ¿¬»êÀÇ »ó´ë¼øÀ§°¡ ¹Ù²î´Â ½Ã°£ º¯È­·Î ÀÎÇÏ¿© ÇÁ·Î±×·¥ÀÌ ½ÇÆÐÇÒ ¼ö ÀÖ´Â °æÁÖ »óȲ(race conditions)¶ó´Â ¾Ç¸ùÀÇ µð¹ö±ëÀ» °¨¼öÇØ¾ß ÇÑ´Ù. <p> <tag>SPMD (Single Program, Multiple Data, ´ÜÀÏ ÇÁ·Î±×·¥, ´ÙÁß µ¥ÀÌÅÍ) :</tag> SPMD´Â MIMDÀÇ Á¦ÇÑµÈ ¹öÀüÀ¸·Î ¸ðµç ÇÁ·Î¼¼¼­°¡ °°Àº ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â °ÍÀÌ´Ù. SIMD¿Í´Â ´Þ¸®, SPMD Äڵ带 ½ÇÇàÇÏ´Â °¢ ÇÁ·Î¼¼¼­´Â ÇÁ·Î±×·¥À» ½ÇÇà °úÁ¤¿¡¼­ ´Ù¸¥ Á¦¾î È帧 °úÁ¤À» µû¸¦ ¼ö ÀÖ´Ù. <p> <tag>Åë½Å ´ë¿ªÆø (Communication Bandwidth) :</tag> Åë½Å ½Ã½ºÅÛÀÇ ´ë¿ªÆøÀº µ¥ÀÌÅÍ Àü¼ÛÀ» ½ÃÀÛÇÑ ¶§ºÎÅÍ ¾î¶² ´ÜÀ§ÀÇ ½Ã°£µ¿¾È Àü¼ÛÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ ÃÖ´ëÅ©±âÀÌ´Ù. Á÷·Ä ¿¬°á¿¡¼­´Â ´ë¿ªÆøÀ» ´ë°³ baud ¶Ç´Â ºñÆ®/ÃÊ (b/s)·Î Ç¥½ÃÇϴµ¥, ÀϹÝÀûÀ¸·Î ÀÌ°ÍÀÇ 1/10¿¡¼­ 1/8ÀÌ ¹ÙÀÌÆ®/ÃÊ (B/s)¿¡ ÇØ´çÇÑ´Ù. ¿¹¸¦ µé¾î, 1200 baud ¸ðµ©Àº ¾à 120 B/sÀÇ ¼Óµµ·Î Àü¼ÛÀ» ÇÏ°í, ¹Ý¸é¿¡ 155 Mb/s ATM ³×Æ®¿÷ ¿¬°áÀº À̺¸´Ù 130000¹è °¡·® ºü¸¥, ¾à 17 MB/sÀÇ ¼Óµµ·Î Àü¼ÛÀ» ÇÑ´Ù. Å« ´ë¿ªÆøÀº ÇÁ·Î¼¼¼­ »çÀÌ¿¡ Å« µ¥ÀÌÅÍ ºí·°À» È¿À²ÀûÀ¸·Î Àü¼ÛÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. <p> <tag>Åë½Å Áöü (Communication Latency) :</tag> Åë½Å ½Ã½ºÅÛÀÇ Áöü(latency)´Â º¸³»°í ¹Þ´Â ¼ÒÇÁÆ®¿þ¾îÀÇ ¿À¹öÇìµå¸¦ Æ÷ÇÔÇÏ¿©, ÇÑ °´Ã¼¸¦ Àü¼ÛÇϴµ¥ °É¸®´Â ÃÖ¼ÒÇÑÀÇ ½Ã°£À» ¸»ÇÑ´Ù. Áöü´Â º´·Ä󸮿¡¼­ ¸Å¿ì Áß¿äÇѵ¥, º´·Ä ½ÇÇàÀ¸·Î ¼Óµµ¸¦ Çâ»ó½Ãų ¼ö ÀÖ´Â ÄÚµå Á¶°¢ÀÇ ÃÖ¼Ò ½ÇÇà ½Ã°£ÀÎ, ÃÖ¼Ò À¯¿ë ¾Ë°»ÀÌ Å©±â(minimum useful grain size)¸¦ °áÁ¤Çϱ⠶§¹®ÀÌ´Ù. ±âº»ÀûÀ¸·Î ÄÚµå Á¶°¢À» ½ÇÇàÇÏ´Â ½Ã°£ÀÌ °á°ú°ªÀ» Àü¼ÛÇÏ´Â ½Ã°£(Áï, Áöü)º¸´Ù ªÀ» ¶§, ±× ÄÚµå Á¶°¢À» °á°ú°ªÀ» ÇÊ¿ä·Î ÇÏ´Â ÇÁ·Î¼¼¼­¿¡¼­ Á÷·Ä·Î ½ÇÇàÇÏ´Â °ÍÀÌ º´·Ä·Î ½ÇÇàÇÏ´Â °Íº¸´Ù ´õ ºü¸£´Ù. Á÷·Ä·Î ½ÇÇàÇÏ´Â °ÍÀº Åë½Å ¿À¹öÇìµå°¡ ¾ø±â ¶§¹®ÀÌ´Ù. <p> <tag>¸Þ½ÃÁö Àü´Þ (Message Passing) :</tag> ¸Þ½ÃÁö Àü´ÞÀº º´·Ä ½Ã½ºÅÛ ³»ºÎ¿¡¼­ ÇÁ·Î¼¼¼­°£ÀÇ »óÈ£ÀÛ¿ëÀ» À§ÇÑ ¸ðµ¨ÀÌ´Ù. ÀϹÝÀûÀ¸·Î, ¸Þ½ÃÁö´Â ÇÑ ÇÁ·Î¼¼¼­¿¡ ÀÖ´Â ¼ÒÇÁÆ®¿þ¾î¿¡¼­ ¸¸µé¾îÁö°í, »óÈ£¿¬°á ³×Æ®¿÷À» ÅëÇÏ¿© ´Ù¸¥ ÇÁ·Î¼¼¼­·Î Àü´ÞµÇ¾î, ¿©±â¼­ À̸¦ ¹Þ¾Æ ¸Þ½ÃÁö ³»¿ë¿¡ µû¶ó µ¿ÀÛÇÏ°Ô µÈ´Ù. °¢ ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â ¿À¹öÇìµå(Áöü)°¡ Ŭ ¼ö ÀÖÁö¸¸, ´ë°³ °¢ ¸Þ½ÃÁö°¡ ¾î´À Á¤µµ Å©±âÀÇ Á¤º¸¸¦ °¡Áú ¼ö ÀÖ´ÂÁö¿¡´Â °ÅÀÇ Á¦ÇÑÀ» µÎÁö ¾Ê´Â´Ù. ±×·¡¼­ ¸Þ½ÃÁö Àü´ÞÀº Å« ´ë¿ªÆøÀ» ÃÊ·¡Çϱ⵵ Çϸç, ÇÑ ÇÁ·Î¼¼¼­¿¡¼­ ´Ù¸¥ ÇÁ·Î¼¼¼­·Î Å« µ¥ÀÌÅÍ ºí·°À» Àü´ÞÇÏ´Â °ÍÀ» ¸Å¿ì È¿À²ÀûÀÎ ¹æ¹ýÀ¸·Î 󸮵µ·Ï µÇ¾î ÀÖ´Ù. ±×·¸Áö¸¸, °ªºñ½Ñ ¸Þ½ÃÁö Àü´Þ ¿¬»êÀÇ Çʿ並 ÃÖ¼ÒÈ­ÇÒ ¼ö ÀÖµµ·Ï, º´·Ä ÇÁ·Î±×·¥¿¡ ÀÖ´Â ÀڷᱸÁ¶´Â ÇÁ·Î¼¼¼­ °£¿¡ ³Î¸® ÆÛÁ® À־ °¢ ÇÁ·Î¼¼¼­°¡ ÂüÁ¶ÇÏ´Â ´ëºÎºÐÀÇ µ¥ÀÌÅÍ´Â ÀÚ½ÅÀÇ Áö¿ª ¸Þ¸ð¸® »ó¿¡ ÀÖµµ·Ï ÇØ¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ ÀÛ¾÷À» µ¥ÀÌÅÍ ¹èÄ¡(data layout)¶ó°í ÇÑ´Ù. <p> <tag>°øÀ¯ ¸Þ¸ð¸® (Shared Memory) :</tag> °øÀ¯ ¸Þ¸ð¸®´Â º´·Ä ½Ã½ºÅÛ ³»ºÎ¿¡¼­ ÇÁ·Î¼¼¼­°£ÀÇ »óÈ£ÀÛ¿ëÀ» À§ÇÑ ¸ðµ¨ÀÌ´Ù. ¸®´ª½º¸¦ ½ÇÇàÇÏ°í ÀÖ´Â ¸ÖƼÇÁ·Î¼¼¼­ ÆæƼ¾ö ÄÄÇ»ÅÍ°°Àº ½Ã½ºÅÛÀº ¹°¸®ÀûÀ¸·Î ÇÁ·Î¼¼¼­°£¿¡ ÇϳªÀÇ ´ÜÀÏ ¸Þ¸ð¸®¸¦ °øÀ¯ÇÑ´Ù. µû¶ó¼­ ÇÑ ÇÁ·Î¼¼¼­°¡ °øÀ¯ ¸Þ¸ð¸®¿¡ °ªÀ» ±â·ÏÇϸé, ´Ù¸¥ ¾î¶² ÇÁ·Î¼¼¼­µçÁö ÀÌ °ªÀ» Á÷Á¢ ÀÐÀ» ¼ö ÀÖ´Ù. ÀÌ¿Í ´Þ¸® ³í¸®ÀûÀÎ °øÀ¯ ¸Þ¸ð¸®´Â °¢ ÇÁ·Î¼¼¼­°¡ ÀڽŸ¸ÀÇ ¸Þ¸ð¸®¸¦ °¡Áö¸ç, Áö¿ª ¸Þ¸ð¸®¿¡ ¾ø´Â ¸Þ¸ð¸®¸¦ ÂüÁ¶Çϸé À̸¦ ÇØ´çÇÏ´Â ÇÁ·Î¼¼¼­°£ Åë½ÅÀ¸·Î º¯È¯ÇØÁÜÀ¸·Î½á ±¸ÇöÇÑ´Ù. ÀÌµé °¢°¢ÀÇ °øÀ¯ ¸Þ¸ð¸® ±¸ÇöÀº ÀϹÝÀûÀ¸·Î ¸Þ½ÃÁö Àü´Þº¸´Ù »ç¿ëÇϱ⠽±°Ô µÇ¾î ÀÖ´Ù. ¹°¸®ÀûÀÎ ¸Þ¸ð¸® °øÀ¯´Â Å« ´ë¿ªÆøÀ» °¡Áö¸ç Áöü°¡ ÀûÁö¸¸, ÀÌ´Â ´ÜÁö ¿©·¯ ÇÁ·Î¼¼¼­°¡ µ¿½Ã¿¡ ¹ö½º¿¡ Á¢±ÙÇÏ·ÁÇÏÁö ¾ÊÀ» ¶§¸¸ÀÌ´Ù. µû¶ó¼­ µ¥ÀÌÅÍ ¹èÄ¡(data layout)´Â ¿©ÀüÈ÷ ¼º´É¿¡ Å« ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖÀ¸¸ç, ij½Ã È¿°ú µîÀº ¾î¶»°Ô ¹èÄ¡ÇÏ´Â °ÍÀÌ °¡Àå ÁÁÀº °ÍÀÎÁö °áÁ¤Çϱâ Èûµé°Ô ¸¸µç´Ù. <p> <tag>ÁýÇÕ ÇÔ¼ö (Aggregate Functions) :</tag> ¸Þ½ÃÁö Àü´Þ°ú °øÀ¯ ¸Þ¸ð¸® ¸ðµ¨¿¡¼­ Åë½ÅÀº ¸ðµÎ ÇϳªÀÇ ´ÜÀÏ ÇÁ·Î¼¼¼­¿¡¼­ ½ÃÀÛÇÑ´Ù. ÀÌ¿Í ¹Ý´ë·Î ÁýÇÕ ÇÔ¼ö Åë½ÅÀº º»·¡ ¸ðµç ÇÁ·Î¼¼¼­ ±×·ìÀÌ ¼­·Î ÀÛ¿ëÇÒ ¼ö ÀÖ´Â º´·Ä Åë½Å ¸ðµ¨ÀÌ´Ù. ÀÌ·± ÀÛ¿ëÀÇ °¡Àå °£´ÜÇÑ °ÍÀº À庮 µ¿±âÈ­(barrier synchronization)·Î, °³º° ÇÁ·Î¼¼¼­µéÀÌ ±×·ì¿¡ ÀÖ´Â ¸ðµç ÇÁ·Î¼¼¼­°¡ À庮¿¡ µµ´ÞÇÏ±æ ±â´Ù¸®´Â °ÍÀÌ´Ù. °³º° ÇÁ·Î¼¼¼­°¡ À庮¿¡ µµÂøÇϸ鼭 ºÎ¼öÈ¿°ú(side effect)·Î µ¥ÀÌÅ͸¦ Ãâ·ÂÇϸé, Åë½Å Çϵå¿þ¾î´Â ¸ðµç ÇÁ·Î¼¼¼­¿¡¼­ ¼öÁýÇÑ °ªµé¿¡ ÀÓÀÇÀÇ ÇÔ¼ö¸¦ Àû¿ëÇÑ °á°ú°ªÀ» °¢ ÇÁ·Î¼¼¼­¿¡°Ô Àü´ÞÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ±× °á°ú°ªÀº "¾î¶² ÇÁ·Î¼¼¼­°¡ Çظ¦ ã¾Ò´À³Ä"´Â Áú¹®ÀÇ ´ë´äÀÏ ¼öµµ, °¢ ÇÁ·Î¼¼¼­¿¡¼­ ¿Â °ªµéÀÇ ÇÕÀÏ ¼öµµ ÀÖ´Ù. Áöü(latency)´Â ¸Å¿ì Àû°ÚÁö¸¸, ÇϳªÀÇ ÇÁ·Î¼¼¼­°¡ Â÷ÁöÇÏ´Â ´ë¿ªÆø ¿ª½Ã ÀûÀº °æÇâÀÌ ÀÖ´Ù. ÀüÅëÀûÀ¸·Î ÀÌ ¸ðµ¨Àº µ¥ÀÌÅÍ °ªÀ» ºÐ»êÇϱ⺸´Ù´Â º´·Ä ½ÇÇàÀ» Á¦¾îÇϴµ¥ ÁÖ·Î »ç¿ëµÈ´Ù. <p> <tag>ÃÑ°ý Åë½Å (Collective Communication) :</tag> ÀÌ´Â ÁýÇÕ ÇÔ¼ö(aggregate function)ÀÇ ´Ù¸¥ À̸§À¸¸£, ´ëºÎºÐ ´ÙÁß ¸Þ½ÃÁö Àü´Þ ¿¬»êÀ» ÀÌ¿ëÇÏ¿© ±¸ÃàµÈ ÁýÇÕ ÇÔ¼ö¸¦ °¡¸®Å°´Âµ¥ »ç¿ëµÈ´Ù. <p> <tag>SMP (Symmetric Multi-Processor, ´ëĪÇü ¸ÖƼÇÁ·Î¼¼¼­)</tag> SMP´Â ÀÏ·ÃÀÇ ÇÁ·Î¼¼¼­µéÀÌ ¼­·Î ´ëµîÇÏ°Ô ÇÔ²² µ¿ÀÛÇÏ¿©, ¾î¶² ÀÛ¾÷ Á¶°¢À̵çÁö ¾î¶² ÇÁ·Î¼¼¼­¿¡¼­µç ¶È°°ÀÌ ½ÇÇàµÉ ¼ö ÀÖ´Â ¿î¿µÃ¼Á¦ °³³äÀ» ¸»ÇÑ´Ù. ´ëü·Î SMP´Â MIMD¿Í °øÀ¯¸Þ¸ð¸®¸¦ °áÇÕÇÑ °ÍÀÌ´Ù. IA32 °è¿­¿¡¼­ SMP´Â ÀϹÝÀûÀ¸·Î MPS(Intel Multi-Processor Specification, ÀÎÅÚ ¸ÖƼÇÁ·Î¼¼¼­ ±Ô¾à)¿Í ȣȯµÈ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¾ÕÀ¸·Î´Â ÀÌ°ÍÀº "Slot 2"¸¦ ÀǹÌÇÏ°Ô µÉ °ÍÀÌ´Ù... <p> <tag>SWAR (SIMD Within A Register, ·¹Áö½ºÅÍ¿¡¼­ÀÇ SIMD) :</tag> SWAR´Â ÇϳªÀÇ ·¹Áö½ºÅ͸¦ ¿©·¯°³ÀÇ Á¤¼ö Ç׸ñÀ¸·Î ÂÉ°³°í ·¹Áö½ºÅÍ ³ÊºñÀÇ ¿¬»êÀ» »ç¿ëÇÏ¿© À̵é Ç׸ñµé¿¡ SIMD º´·Ä °è»êÀ» ¼öÇàÇÑ´Ù´Â °³³äÀ» °¡¸®Å°´Â ÀϹÝÀûÀÎ ¿ë¾îÀÌ´Ù. k-bit ·¹Áö½ºÅÍ¿Í µ¥ÀÌÅÍ Åë·Î, ÇÔ¼ö ´ÜÀ§¸¦ °®´Â ±â°è°¡ ÀÖÀ» ¶§, ¿À·¡ÀüºÎÅÍ º¸ÅëÀÇ ·¹Áö½ºÅÍ ¿¬»êÀ» »ç¿ëÇÏ¿© n°³ÀÇ k/n ºñÆ® Ç׸ñ °ª¿¡ SIMD º´·Ä ¿¬»êÀ» ÇÒ ¼ö ÀÖ´Ù°í ¾Ë·ÁÁ®¿Ô´Ù. ÀÌ·± ¹æ½ÄÀÇ º´·Ä¼ºÀº º¸ÅëÀÇ Á¤¼ö ·¹Áö½ºÅ͸¦ »ç¿ëÇÏ¿© ±¸ÇöÇÒ ¼ö ÀÖÁö¸¸, ¸¹Àº °í¼º´É ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­µéÀº ¸ÖƼ¹Ìµð¾î À§ÁÖ ÀÛ¾÷¿¡ ÀÌ ±â¹ýÀÇ ¼º´ÉÀ» ³ôÀ̱â À§ÇØ Ãֱ٠Ưº° ¸í·É¾îµéÀ» Ãß°¡Çß´Ù. ÀÎÅÚ/AMD/CyrixÀÇ MMX(MultiMedia eXtension)¸¦ ºñ·ÔÇÏ¿©, µðÁöÅÐ(Digital) AlphaÀÇ MAX(MultimediA eXtensions), ÈÞ·¿- ÆÑÄ¿µå(Hewlett-Packard) PA-RISCÀÇ MAX(Multimedia Acceleration eXtensions), MIPSÀÇ MDMX(Digital Media eXtension, "Mad Max"¶ó°í ¹ßÀ½ÇÑ´Ù), ¼±(Sun) SPARCÀÇ V9 VIS(Visual Instruction Set) µîÀÌ ÀÖ´Ù. MMX¿¡ µ¿ÀÇÇÑ ¼¼ ȸ»ç¸¦ Á¦¿ÜÇÏ°í, À̵é È®Àå ¸í·É¾îµéÀº ´ëÃæÀº ºñ½ÁÇÏÁö¸¸, ¼­·Î ȣȯµÇÁö´Â ¾Ê´Â´Ù. <p> <tag>ºÎ¼Ó ÇÁ·Î¼¼¼­ (Attached Processors) :</tag> ºÎ¼Ó ÇÁ·Î¼¼¼­´Â º»ÁúÀûÀ¸·Î Ưº°ÇÑ À¯ÇüÀÇ °è»ê ¼Óµµ¸¦ °¡¼ÓÇϱâ À§ÇÑ È£½ºÆ® ½Ã½ºÅÛ¿¡ ¿¬°áµÈ Ưº°ÇÑ ¸ñÀûÀ» °¡Áø ÄÄÇ»ÅÍÀÌ´Ù. ¿¹¸¦ µé¾î, PC¿¡ ÀÖ´Â ¸¹Àº ºñµð¿À¿Í ¿Àµð¿À Ä«µå´Â Á¦°¢±â ÀÏ¹Ý ±×·¡ÇÈ ¿¬»ê°ú ¿Àµð¿À DSP(Digital Signal Processing, µðÁöÅÐ ½ÅÈ£ ó¸®) ¼Óµµ¸¦ ³ôÀ̵µ·Ï µðÀÚÀÎµÈ ºÎ¼Ó ÇÁ·Î¼¼¼­¸¦ °¡Áö°í ÀÖ´Ù. ¶ÇÇÑ ¹è¿­¿¡ ´ëÇÑ »ê¼ú ¿¬»ê ¼Óµµ¸¦ ºü¸£°Ô Çϱâ À§ÇÑ, ³ÐÀº ¹üÀ§ÀÇ ºÎ¼Ó ¹è¿­ ÇÁ·Î¼¼¼­(attached array processor)µéÀÌ ÀÖ´Ù. ¸¹Àº »ó¾÷¿ë ½´ÆÛÄÄÇ»Å͵éÀº ½ÇÁ¦·Î ¿öµå½ºÅ×ÀÌ¼Ç È£½ºÆ®¿Í ºÎ¼Ó ÇÁ·Î¼¼¼­·Î µÇ¾î ÀÖ´Ù. <p> <tag>RAID (Redundant Array of Inexpensive Disk, ¿©ºÐÀÇ °ª½Ñ µð½ºÅ© ¹è¿­) :</tag> RAID´Â µð½ºÅ© I/OÀÇ ½Å·Ú¼º°ú ´ë¿ªÆøÀ» ´Ã¸®´Â °£´ÜÇÑ ±â¼úÀÌ´Ù. ¿©±â¿¡´Â ¿©·¯°¡Áö ¼­·Î ´Ù¸¥ º¯ÇüÀÌ ÀÖÁö¸¸, ¸ðµÎ µÎ°¡Áö ÇÙ½É °³³äÀ» °øÀ¯ÇÏ°í ÀÖ´Ù. ¸ÕÀú, °¢ µ¥ÀÌÅÍ ºí·°Àº n+k µð½ºÅ© µå¶óÀÌºê ±×·ìÀ¸·Î ÁÙÀ» Áö¾î, °¢ µå¶óÀ̺ê´Â ´ÜÁö µ¥ÀÌÅÍÀÇ 1/n ¸¸Å­ ÀÐ°í ¾²±â¸¸ ÇÏÁö¸¸, °¢ µå¶óÀÌºê ´ë¿ªÆøÀÇ n¹èÀÇ ´ë¿ªÆøÀ» °¡Áö°Ô µÈ´Ù. µÎ¹ø°·Î, ¿©ºÐÀ¸·Î µ¥ÀÌÅ͸¦ ±â·ÏÇÏ¿©, ÇÑ µð½ºÅ© µå¶óÀ̺갡 ½ÇÆÐÇÏ´õ¶óµµ µ¥ÀÌÅ͸¦ º¹±¸ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ÀÌ°ÍÀº ¸Å¿ì Áß¿äÇѵ¥, ±×·¸Áö ÇÏÁö ¾ÊÀ¸¸é n+k µå¶óÀ̺ê Áß Çϳª°¡ ½ÇÆÐÇÑ °æ¿ì Àüü ÆÄÀÏ ½Ã½ºÅÛÀÌ ³¯¶ó°¥ ¼ö Àֱ⠶§¹®ÀÌ´Ù. <htmlurl url="http://www.dpt.com/uraiddoc.html" name="http://www.dpt.com/uraiddoc.html">¿¡ °¡¸é RAID Àü¹Ý¿¡ °üÇÑ ÁÁÀº °³¿ä°¡ ÀÖ´Ù. ¸®´ª½º ½Ã½ºÅÛ¿¡¼­ÀÇ RAID ¿É¼Ç¿¡ ´ëÇÑ Á¤º¸´Â <htmlurl url="http://linas.org/linux/raid.html" name="http://linas.org/linux/raid.html">¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. Àü¹® RAID Çϵå¿þ¾î Áö¿ø°ú´Â º°µµ·Î, ¸®´ª½º´Â ÇϳªÀÇ ¸®´ª½º ½Ã½ºÅÛÀÌ ¿©·¯°³ÀÇ µð½ºÅ©¸¦ È£½ºÆ®ÇÏ´Â ¼ÒÇÁÆ®¿þ¾î RAID 0, 1, 4, 5µµ Áö¿øÇÑ´Ù. ÀÚ¼¼ÇÑ °ÍÀº ¼ÒÇÁÆ®¿þ¾î RAID mini-HOWTO¿Í ´ÙÁß µð½ºÅ© Æ©´×(Multi-Disk Tuning) mini-HOWTO¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù. Ŭ·¯½ºÅÍ¿¡ ÀÖ´Â ¿©·¯ ±â°è¿¡ ÀÖ´Â µð½ºÅ© µå¶óÀ̺êµéÀÇ RAID´Â Á÷Á¢ÀûÀ¸·Î Áö¿øµÇÁö ¾Ê´Â´Ù. <p> <tag>IA32 (Intel Architecture, 32-bit, ÀÎÅÚ 32ºñÆ® ¾ÆÅ°ÅØÃÄ) :</tag> IA32´Â ½ÇÁ¦·Î º´·Äó¸®ÇÏ°í´Â °ü·ÃÀÌ ¾ø°í, ´ÜÁö ÀϹÝÀûÀ¸·Î ÀÎÅÚ 386 ÇÁ·Î¼¼¼­¿Í ȣȯµÈ´Â ¸í·É¾î ÁýÇÕÀ» °¡Áö´Â ÇÁ·Î¼¼¼­µéÀÇ ºÎ·ù¸¦ °¡¸®Å²´Ù. ±âº»ÀûÀ¸·Î, 286 ´ÙÀ½¿¡ ³ª¿Â ¸ðµç ÀÎÅÚ x86 ÇÁ·Î¼¼¼­´Â IA32ÀÇ Æ¯Â¡ÀÎ 32ºñÆ® Ç÷§ ¸Þ¸ð¸® ¸ðµ¨(flat memory model)°ú ȣȯµÈ´Ù. AMD¿Í Cyrix ¿ª½Ã ¼ö¸¹Àº IA32 ȣȯ ÇÁ·Î¼¼¼­¸¦ ¸¸µç´Ù. ¸®´ª½º°¡ ÁÖ·Î IA32 ÇÁ·Î¼¼¼­¿¡¼­ ¹ßÀüÇØ¿ÔÀ¸¸ç, IA32°¡ »óÇ°½ÃÀåÀÇ Á߽ɿ¡ Àֱ⠶§¹®¿¡, PowerPC³ª Alpha, PA-RISC, MIPS, SPARC µîÀÇ ´Ù¸¥ ÇÁ·Î¼¼¼­¿Í ±¸º°ÇÏ¿© IA32¶ó´Â ¿ë¾î¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Æí¸®ÇÏ´Ù. °ð Ãâ½ÃµÉ IA64(EPIC, Explicitly Parallel Instruction Computing, ¸í½ÃµÈ º´·Ä ¸í·É °è»êÀ» Áö¿øÇÏ´Â 64ºñÆ® ÇÁ·Î¼¼¼­)´Â ¾Æ¸¶µµ º¹ÀâÇÑ ¹®Á¦°¡ µÇ°ÚÁö¸¸, óÀ½ ³ª¿À°Ô µÉ IA64 ÇÁ·Î¼¼¼­ÀÎ ¸Ó¼¼µå(Merced)´Â 1999³â±îÁö´Â Á¦Ç°ÀÌ ³ª¿ÀÁø ¾ÊÀ» ¿¹Á¤ÀÌ´Ù. <p> <tag>COTS (Commercial Off-The-Shelf, »ó¾÷¿ë ±â¼ºÇ°)</tag> ¸¹Àº º´·Ä ½´ÆÛÄÄÇ»ÅÍ È¸»çµéÀÌ »ç¶óÁö¸é¼­, COTS´Â º´·Ä °è»ê ½Ã½ºÅÛÀÇ ÇÊ¿äÁ¶°ÇÀ¸·Î ÀϹÝÀûÀ¸·Î ´Ù·ç¾îÁö°Ô µÇ¾ú´Ù. ¾ÆÁÖ ÀÌ·ÐÀûÀ¸·Î Çϸé, PC¸¦ »ç¿ëÇÏ´Â À¯ÀÏÇÑ COTS º´·Äó¸® ±â¹ýÀº SMP Windows NT ¼­¹ö¿Í ¿©·¯ MMX Windows ÀÀ¿ëÇÁ·Î±×·¥°°Àº °É·Î ¸¸µé¾îÁø °ÍÀÌ´Ù. COTS °³³äÀÇ ±â¹ÝÀº »ç½Ç»ó °³¹ß ½Ã°£°ú ºñ¿ëÀÇ ÃÖ¼ÒÈ­ÀÌ´Ù. µû¶ó¼­ ´õ À¯¿ëÇÏ°í, ´õ ÀϹÝÀûÀÎ, COTSÀÇ Àǹ̴ Àû¾îµµ ´ëºÎºÐÀÇ ¼­ºê½Ã½ºÅÛÀº ±â¼º Á¦Ç° ½ÃÀå¿¡¼­ À̵æÀ» ¾ò¾î¾ß ÇÏÁö¸¸, ´Ù¸¥ ±â¼úµéÀº È¿À²ÀûÀ¸·Î »ç¿ëµÉ ¼ö ÀÖ´Â °÷¿¡ »ç¿ëÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ´ëºÎºÐÀÇ °æ¿ì, COTS º´·Ä󸮴 ³ëµå´Â ±â¼º PCÀÌÁö¸¸ ³×Æ®¿÷ ÀÎÅÍÆäÀ̽º¿Í ¼ÒÇÁÆ®¿þ¾î´Â ¾î´ÀÁ¤µµ ¸ÂÃãÀ¸·Î ¸¸µç Ŭ·¯½ºÅ͸¦ °¡¸®Å²´Ù. ´ë°³ ½ÇÇàÇÒ ¸®´ª½º¿Í ÀÀ¿ëÇÁ·Î±×·¥ ÄÚµå´Â ÀÚÀ¯·Ó°Ô ±¸ÇÒ ¼ö ÀÖÁö¸¸ (copyleftÀ̰ųª public domainÀÎ), ¹®ÀÚ ±×´ë·Î COTS´Â ¾Æ´Ï´Ù.<p> </descrip> <!-- ------------------------------------------------------------- --> <sect1>¿¹Á¦ ¾Ë°í¸®Áò <label id="sec_ExampleAlgorithm"> <!-- ------------------------------------------------------------- --> <p> ÀÌ HOWTO¿¡¼­ ¾ð±ÞÇÏ°í ÀÖ´Â ¿©·¯°¡Áö º´·Ä ÇÁ·Î±×·¡¹Ö Á¢±Ù ¹æ¹ýµéÀÇ »ç¿ë¹ýÀ» Á» ´õ Àß ÀÌÇØÇÒ ¼ö ÀÖµµ·Ï, ¿¹Á¦ ¹®Á¦¸¦ Çϳª ´Ù·ç¾îº¸µµ·Ï ÇÏÀÚ. ºñ·Ï °£´ÜÇÑ º´·Ä ¾Ë°í¸®ÁòÀÌÁö¸¸, ¿©·¯ ´Ù¸¥ º´·Ä ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛÀ» ½Ã¿¬Çϴµ¥ »ç¿ëÇØ¿Ô´ø ¾Ë°í¸®ÁòÀ» ¼±ÅÃÇÔÀ¸·Î½á, °¢ Á¢±Ù¹æ¹ýÀ» ºñ±³ÇÏ°í ´ëÁ¶ÇÏ´Â °ÍÀÌ Á¶±Ý ´õ ½¬¿ï °ÍÀÌ´Ù. M.J.QuinnÀÇ Ã¥ (Parallel Computing Theory And Prictice (º´·Ä °è»ê À̷аú ½Ç½À)); 2ÆÇ, McGraw Hill, New York, 1994¿¡¼­´Â, ´Ù¾çÇÑ ¼­·Î ´Ù¸¥ º´·Ä ½´ÆÛÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹Ö ȯ°æ(¿¹¸¦ µé¾î, nCUBE ¸Þ½ÃÁö Àü´Þ, ¼øÂ÷ °øÀ¯ ¸Þ¸ð¸®(sequent shared memory))À» ½Ã¿¬Çϱâ À§ÇØ, Pi °ªÀ» °è»êÇÏ´Â º´·Ä ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ°í ÀÖ´Ù. ÀÌ HOWTO¿¡¼­, ¿ì¸®µµ ¶È°°Àº ±âº» ¾Ë°í¸®ÁòÀ» »ç¿ëÇϵµ·Ï ÇÏÀÚ. ÀÌ ¾Ë°í¸®ÁòÀº xÀÇ Á¤»ç°¢Çü ¾Æ·¡¿¡ ÀÖ´Â ¿µ¿ªÀ» ÇÕÇÏ¿© PiÀÇ ±Ù»ç°ªÀ» °è»êÇÑ´Ù. ¼ø¼öÇÑ ¼øÂ÷ C ÇÁ·Î±×·¥À¸·Î ¸¸µç´Ù¸é ¾Ë°í¸®ÁòÀº ´ÙÀ½°ú ºñ½ÁÇÒ °ÍÀÌ´Ù. <code> #include <stdlib.h>; #include <stdio.h>; main(int argc, char **argv) { register double width, sum; register int intervals, i; /* get the number of intervals */ intervals = atoi(argv[1]); width = 1.0 / intervals; /* do the computation */ sum = 0; for (i=0; i<intervals; ++i) { register double x = (i + 0.5) * width; sum += 4.0 / (1.0 + x * x); } sum *= width; printf("Estimation of pi is %f\n", sum); return(0); } </code> ±×·¸Áö¸¸ ÀÌ ¼øÂ÷ ¾Ë°í¸®ÁòÀº ½±°Ô "°ï¶õÇÑ º´·Ä(embarrassingly parallel)" ±¸ÇöÀÌ µÈ´Ù. ÀÌ ¿µ¿ªµéÀº °£°Ý(intarval)º°·Î ÂÉ°³°í, ÇÁ·Î¼¼¼­°¡ ¸î°³¶óµµ ÇÁ·Î¼¼¼­°£¿¡ »óÈ£ÀÛ¿ëÇÒ ÇÊ¿ä ¾øÀÌ, Àڱ⿡°Ô ÇÒ´çµÈ °£°ÝÀ» µ¶¸³ÀûÀ¸·Î ÇÕÇÒ ¼ö ÀÖ´Ù. ÀÏ´Ü Áö¿ªº°·Î ÇÕÀÌ °è»êµÇ¾ú´Ù¸é, ÀüüÇÕÀ» ¸¸µé±â À§ÇØ ¼­·Î ´õÇØ¾ß ÇÑ´Ù. ÀÌ °úÁ¤Àº ÇÁ·Î¼¼¼­°£¿¡ ¾î´ÀÁ¤µµ ·¹º§ÀÇ Á¶Á¤°ú Åë½ÅÀ» ÇÊ¿ä·Î ÇÑ´Ù. ¸¶Áö¸·À¸·Î Àüü ÇÕÀº Pi°ªÀÇ ±Ù»çÄ¡°¡ µÇ¾î ÇÑ ÇÁ·Î¼¼¼­¿¡¼­ À̸¦ Ãâ·ÂÇÏ°Ô µÈ´Ù. ÀÌ HOWTO¿¡¼­´Â, ÀÌ ¾Ë°í¸®ÁòÀÇ ¿©·¯°¡Áö º´·Ä ±¸ÇöÀÌ ³ª¿À¸ç, °¢°¢Àº ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¹æ¹ýÀ» »ç¿ëÇÑ´Ù. <!-- ------------------------------------------------------------- --> <sect1>ÀÌ ¹®¼­ÀÇ ±¸¼º <!-- ------------------------------------------------------------- --> <p> ÀÌ ¹®¼­ÀÇ ³ª¸ÓÁö´Â ´Ù¼¸°³ ºÎºÐÀ¸·Î ³ª´µ¾îÁ® ÀÖ´Ù. 2, 3, 4, 5ÀåÀº ¸®´ª½º¸¦ ÀÌ¿ëÇÑ º´·Ä󸮸¦ Áö¿øÇÏ´Â ¼¼°¡Áö ´Ù¸¥ À¯ÇüÀÇ Çϵå¿þ¾î ±¸¼ºÀ» ´Ù·ç°í ÀÖ´Ù. <itemize> <item> 2ÀåÀº SMP ¸®´ª½º ½Ã½ºÅÛÀ» ´Ù·é´Ù. ÀÌ´Â °øÀ¯ ¸Þ¸ð¸®¸¦ ÀÌ¿ëÇÑ MIMD ½ÇÇàÀ» Á÷Á¢ÀûÀ¸·Î Áö¿øÇϸç, ¸Þ½ÃÁö Àü´Þ ¿ª½Ã ½±°Ô ±¸ÇöµÈ´Ù. ¸®´ª½º´Â 16°³ÀÇ ÇÁ·Î¼¼¼­¸¦ °®´Â SMP ±¸¼º±îÁö Áö¿øÇÏÁö¸¸, ´ëºÎºÐÀÇ SMP PC ½Ã½ºÅÛÀº µÎ°³³ª ³×°³ÀÇ ¶È°°Àº ÇÁ·Î¼¼¼­¸¦ °¡Áö°í ¸¸µé¾îÁø´Ù. <item> 3ÀåÀº °¢°¢ ¸®´ª½º¸¦ ½ÇÇàÇÏ°í ÀÖ´Â ±â°èµéÀ» ³×Æ®¿÷À¸·Î ¿¬°áÇÑ Å¬·¯½ºÅ͸¦ ´Ù·é´Ù. Ŭ·¯½ºÅÍ´Â MIMD ½ÇÇà°ú ¸Þ½ÃÁö Àü´Þ, ±×¸®°í ´ë°³ ³í¸®Àû °øÀ¯ ¸Þ¸ð¸®¸¦ Á÷Á¢ Áö¿øÇÏ´Â º´·Äó¸® ½Ã½ºÅÛÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. »ç¿ëÇÑ ³×Æ®¿÷ ¹æ¹ý¿¡ µû¶ó SMP ½ÇÇàÀ» Èä³»³»°í, ÁýÇÕ ÇÔ¼ö(aggregate function) Åë½Åµµ Áö¿øÇÒ ¼ö ÀÖ´Ù. Ŭ·¯½ºÅÍ·Î ¿¬°áµÈ ÇÁ·Î¼¼¼­ÀÇ ¼ýÀÚ´Â µÎ°³¿¡¼­ ¼öõ°³±îÁö µÉ ¼ö Àִµ¥, ÀÌ ¼ýÀÚ´Â ÁÖ·Î ³×Æ®¿÷À» ±¸¼ºÇÏ´Â ¹°¸®ÀûÀÎ ¹è¼±¿¡ ÀÇÇØ Á¦ÇÑÀ» ¹Þ´Â´Ù. ¾î¶² °æ¿ì, Ŭ·¯½ºÅÍ¿¡ ¼­·Î ´Ù¸¥ À¯ÇüÀÇ ±â°èµéÀ» È¥ÇÕÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î, DEC Alpha¿Í ÆæƼ¾ö ¸®´ª½º ½Ã½ºÅÛÀ» °áÇÕÇÒ ¼ö Àִµ¥, ÀÌ·± °ÍÀ» °¡¸®ÄÑ <bf>ÀÌÁú Ŭ·¯½ºÅÍ</bf>(heterogeneous cluster)¶ó°í ÇÑ´Ù. <item> 4Àå¿¡¼­´Â SWAR, Áï ·¹Áö½ºÅÍ¿¡¼­ÀÇ SIMD(SIMD Within A Register)¸¦ ´Ù·é´Ù. ÀÌ°ÍÀº ¸Å¿ì Á¦ÇÑÀûÀÎ À¯ÇüÀÇ º´·Ä ½ÇÇà ¸ðµ¨ÀÌÁö¸¸, ¹Ý¸é¿¡ ÀϹÝÀûÀÎ ÇÁ·Î¼¼¼­¿¡ ÀÌ¹Ì ±¸ÇöµÇ¾î ÀÖ´Â ±â´ÉÀ̱⵵ ÇÏ´Ù. ÃÖ±Ù¿¡ ±Ù·¡ÀÇ ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­¿¡ MMX (±×¸®°í ´Ù¸¥ °Íµéµµ) È®Àå ¸í·É¾îµéÀÌ Ãß°¡µÇ¸é¼­ ÀÌ·± Á¢±Ù¹æ¹ýÀÌ ´õ È¿À²ÀûÀÌ µÇ¾ú´Ù. <item> 5Àå¿¡¼­´Â ¸®´ª½º PC¸¦ °£´ÜÇÑ º´·Äó¸® ½Ã½ºÅÛÀÇ È£½ºÆ®·Î »ç¿ëÇÏ´Â °ÍÀ» ´Ù·é´Ù. ²Å´Â Ä«µå³ª ¿ÜºÎÀÇ ¹Ú½º ÇüÅ·Î, ºÎ¼Ó ÇÁ·Î¼¼¼­´Â ¸®´ª½º ½Ã½ºÅÛ¿¡°Ô ƯÁ¤ Á¾·ùÀÇ ÀÀ¿ëÇÁ·Î±×·¥¿¡ ´ëÇÑ ¾öû³­ ó¸® ´É·ÂÀ» ÁÙ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ¿©·¯°³ÀÇ DSP ÇÁ·Î¼¼¼­¸¦ Á¦°øÇÏ´Â °ª½Ñ ISAÄ«µå¸¦ ÀÌ¿ëÇÏ¿©, °æ°è°è»ê ¹®Á¦(compute-bound problem)¸¦ À§ÇÑ ¼ö¹é MFLOPSÀÇ Ã³¸® ´É·ÂÀ» °¡Áú ¼ö ÀÖ´Ù. ±×·¸Áö¸¸ À̵é Ãß°¡µÇ´Â º¸µåµéÀº ´ÜÁö ÇÁ·Î¼¼¼­ÀÏ »ÓÀÌ´Ù. À̵éÀº ÀϹÝÀûÀ¸·Î OS¸¦ ½ÇÇàÇϰųª µð½ºÅ©³ª ÄÜ¼Ö I/O ´É·Â µîÀ» °¡Áö°í ÀÖÁö ¾Ê´Ù. ÀÌ·± ½Ã½ºÅÛÀ» À¯¿ëÇÏ°Ô »ç¿ëÇϱâ À§ÇØ ¸®´ª½º "È£½ºÆ®"°¡ ÀÌµé ±â´ÉµéÀ» Á¦°øÇØ¾ß ÇÑ´Ù. </itemize> ÀÌ ¹®¼­ÀÇ ¸¶Áö¸· ÀåÀº À§¿¡¼­ ´Ù·é Á¢±Ù ¹æ¹ýµé¿¡ ¼ÓÇÏÁö ¾Ê´Â, ¸®´ª½º¸¦ ÀÌ¿ëÇÑ º´·Ä󸮿¡¼­ ÀϹÝÀûÀ¸·Î °¡Áö°í ÀÖ´Â °ü½ÉµéÀ» ´Ù·é´Ù. ÀÌ ¹®¼­¸¦ ÀÐÀ» ¶§ ¾ÆÁ÷ ¿ì¸®°¡ ¸ðµç °ÍµéÀ» ´Ù Å×½ºÆ®Çغ¸Áø ¸øÇß´Ù´Â °Í°ú ¿©±â¼­ ´Ù·ç´Â ³»¿ëÀÇ ¸¹Àº ºÎºÐÀº "¾ÆÁ÷ ¿¬±¸ÁßÀΠƯ¼º"("»ý°¢Çß´ø °Íó·³ Àß µ¿ÀÛÇÏÁö ¾Ê´Â´Ù"´Â °ÍÀ» ´õ ÁÁ°Ô Ç¥ÇöÇÑ ¸»ÀÌ´Ù :-)À̶ó´Â °ÍÀ» ¸í½ÉÇϱ⠹ٶõ´Ù. ±×·¸Áö¸¸ ¸®´ª½º¸¦ ÀÌ¿ëÇÑ º´·Ä󸮴 ÇöÀç À¯¿ëÇϸç, Á¡Á¡ ´õ ¸¹Àº ±×·ìµéÀÌ À̸¦ ´õ Àß »ç¿ëÇϱâ À§ÇØ ÀÛ¾÷À» ÁøÇàÁßÀÌ´Ù. ÀÌ HOWTO ¹®¼­¸¦ ÀÛ¼ºÇÑ »ç¶÷Àº Hank Dietz ¹Ú»ç·Î ÇöÀç´Â West Lafayette 47907-1285¿¡ ÀÖ´Â Purdue ´ëÇÐÀÇ Àü±â ¹× ÄÄÇ»ÅÍ °øÇÐ(Electrical and Computer Engineering)ÀÇ ºÎ±³¼ö(Associate Professor)ÀÌ´Ù. Dietz´Â ¸®´ª½º ¹®¼­È­ ÇÁ·ÎÁ§Æ®(Linux Documentation Project, LDP)ÀÇ Áöħ¿¡ µû¶ó ÀÌ ¹®¼­¿¡ ´ëÇÑ ±ÇÇÑÀ» °®´Â´Ù. ÀÌ ¹®¾ÈÀ» Á¤È®ÇÏ°í °øÁ¤ÇÏ°Ô ¸¸µé±â À§Çؼ­ ¸¹Àº ³ë·ÂÀ» ÇßÁö¸¸, Dietz³ª Purdue ´ëÇÐ ¸ðµÎ ¾î¶°ÇÑ ¹®Á¦³ª ¿¡·¯¿¡ ´ëÇÑ Ã¥ÀÓÀÌ ¾øÀ¸¸ç, Purdue ´ëÇÐÀº ¿©±â¼­ ´Ù·é ¾î¶°ÇÑ ÀÛ¾÷À̳ª °á°ú¹°µµ º¸ÁõÇÏÁö ¾Ê´Â´Ù. <!-- 2Àå --> <!--***************************************************************--> <sect> SMP ¸®´ª½º <!--***************************************************************--> <p> ÀÌ ¹®¼­´Â º´·Ä󸮸¦ À§ÇØ <url url="http://www.uk.linux.org/SMP/title.html" name="SMP ¸®´ª½º"> ½Ã½ºÅÛÀ» ¾î¶»°Ô »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö¿¡ °üÇØ °£´ÜÇÏ°Ô °³¿ä¸¦ Á¦½ÃÇÑ´Ù. SMP ¸®´ª½º¿¡ ´ëÇÑ °¡Àå ÃÖ±Ù Á¤º¸´Â ¾Æ¸¶µµ SMP ¸®´ª½º ÇÁ·ÎÁ§Æ®ÀÇ ¸ÞÀϸµ ¸®½ºÆ®¿¡¼­ ¾òÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ¸®½ºÆ®¿¡ °¡ÀÔÇÏ·Á¸é ÆíÁö º»¹®¿¡ <tt>subscribe linux-smp</tt> ¶ó°í Àû¾î <htmlurl url="mailto:majordomo@vger.rutgers.edu" name="majordomo@vger.rutgers.edu">·Î ÆíÁö¸¦ º¸³»¸é µÈ´Ù. SMP ¸®´ª½º°¡ Á¤¸» Á¦´ë·Î µ¿ÀÛÇϴ°¡? 1996³â 6¿ù, ³ª´Â »õ·Î¿î »óÇ¥ÀÇ (»ç½ÇÀº Çѹ° °£ Ç°Á¾À̾úÁö¸¸ »õ »óÇ¥¿´´Ù ;-) µÎ°³ÀÇ 100MHz ÆæƼ¾ö ÇÁ·Î¼¼¼­¸¦ °¡Áö´Â ½Ã½ºÅÛÀ» ±¸ÀÔÇß´Ù. Á¶¸³À» ¸¶Ä£ ½Ã½ºÅÛÀº µÎ°³ÀÇ ÇÁ·Î¼¼¼­¿Í Asus ¸¶´õº¸´õ(motherboard), 256K ij½Ã, 32M RAM, 1.66G Çϵåµð½ºÅ©, 6¹è¼Ó CDROM, Stealth 64 ±×·¡ÇÈ Ä«µå¿Í 15ÀÎÄ¡ ¸ð´ÏÅÍ·Î, À̸¦ ¸¶·ÃÇϴµ¥ ¸ðµÎ 1800$°¡ µé¾ú´Ù. ÀÌ °¡°ÝÀº ÀÌ¿Í ºñ½ÁÇÑ »ç¾çÀÇ ÇÁ·Î¼¼¼­ ÇϳªÀÎ ½Ã½ºÅÛº¸´Ù ´ÜÁö ¸î¹é ´Þ·¯Á¤µµ ºñ½Ñ °Å¿´´Ù. Á¦´ë·Î µ¿ÀÛÇÏ´Â SMP ¸®´ª½º¸¦ ±¸ÇÒ·Á¸é, ±×Àú º¸ÅëÀÇ ´ÜÀÏ ÇÁ·Î¼¼¼­ ¸®´ª½º¸¦ ¼³Ä¡ÇÏ°í, makefile¿¡¼­ <tt>SMP=1</tt>À» ¸·°í ÀÖ´Â ÁÖ¼®À» ÇØÁ¦ÇÏ¿© (ºñ·Ï <tt>SMP</tt>¸¦ <tt>1</tt>·Î ¼³Á¤ÇÏ´Â °ÍÀÌ Á¶±ÝÀº ¹Ý¾îÀûÀ̶ó´Â °ÍÀ» ¾ËÁö¸¸) Ä¿³ÎÀ» ´Ù½Ã ÄÄÆÄÀÏÇÏ°í, <tt>lilo</tt>¿¡°Ô »õ·Î¿î Ä¿³ÎÀ» ¾Ë·ÁÁֱ⸸ ÇÏ¸é µÈ´Ù. ÀÌ ½Ã½ºÅÛÀº ¸Å¿ì Àß µ¿ÀÛÇÏ¿´°í, ¾ÈÁ¤ÀûÀ̱⵵ ÇÏ¿©, Áö±Ý±îÁö »ç¿ëÇØ¿Â ³ªÀÇ ÁÖ ¿öÅ©½ºÅ×À̼ÇÀÇ ¿ªÇÒÀ» ¼öÇàÇϱ⿡ ÃæºÐÇß´Ù. ¿ä¾àÇϸé, SMP ¸®´ª½º´Â Á¤¸»·Î Á¦´ë·Î µ¿ÀÛÇÑ´Ù. ´ÙÀ½ Áú¹®Àº SMP ¸®´ª½º°¡ °øÀ¯ ¸Þ¸ð¸®¸¦ »ç¿ëÇÏ´Â º´·Ä ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ°í ½ÇÇàÇÏ´Â µ¥ ÀÖ¾î ¾ó¸¸Å­À̳ª °í¼öÁØÀ¸·Î Áö¿øÀ» ÇØÁÖ´À³ÄÀÌ´Ù. 1996³â ÃÊ¿¡´Â ÀÌ·± °ÍÀº º°·Î ¸¹Áö ¾Ê¾Ò´Ù. ±×·¯³ª ÀÌÁ¦ ¸¹Àº °ÍÀÌ º¯Çß´Ù. ¿¹¸¦ µé¾î, ÀÌÁ¦´Â ¸Å¿ì ¿Ïº®ÇÑ POSIX ¾²·¹µå(thread) ¶óÀ̺귯¸®°¡ ÀÖ´Ù. °øÀ¯ ¸Þ¸ð¸® ¹æ½ÄÀ» »ç¿ëÇÏ´Â °Íº¸´Ù´Â ¼º´ÉÀÌ ¶³¾îÁú ¼öµµ ÀÖÁö¸¸, SMP ¸®´ª½º ½Ã½ºÅÛ¿¡¼­´Â ¿ø·¡ ¼ÒÄÏ Åë½ÅÀ» »ç¿ëÇÏ´Â ¿öÅ©½ºÅ×ÀÌ¼Ç Å¬·¯½ºÅÍ(cluster)¿¡¼­ µ¿ÀÛÇϵµ·Ï °³¹ßµÈ ´ëºÎºÐÀÇ º´·Ä ó¸® ¼ÒÇÁÆ®¿þ¾îµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¼ÒÄÏ(3.3 ÀåÀ» º¸¶ó) ¹æ½ÄÀº SMP ¸®´ª½º ½Ã½ºÅÛ »Ó¸¸ ¾Æ´Ï¶ó, ¿©·¯°³ÀÇ SMP ½Ã½ºÅÛÀ» ³×Æ®¿÷À¸·Î ¿¬°áÇÑ Å¬·¯½ºÅÍ¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö¸¸ ¼ÒÄÏÀº SMP¿¡¼­´Â »ó´çÇÑ ¾çÀÇ ºÒÇÊ¿äÇÑ ¿À¹öÇìµå(overhead)¸¦ °¡Áö°Ô µÈ´Ù. ÀÌ·± ¿À¹öÇìµåÀÇ ´ëºÎºÐÀº Ä¿³Î Áï ÀÎÅÍ·´Æ® Çڵ鷯¿¡¼­ ÀϾ´Ù. SMP ¸®´ª½º¿¡¼­´Â º¸Åë µ¿½Ã¿¡ ÇϳªÀÇ ÇÁ·Î¼¼¼­¸¸ÀÌ Ä¿³Î ¸ðµå¿¡ ÀÖÀ» ¼ö ÀÖ°í, ºÎÆ® ÇÁ·Î¼¼¼­¸¸ÀÌ ÀÎÅÍ·´Æ®¸¦ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÀÎÅÍ·´Æ® ÄÁÆ®·Ñ·¯°¡ ¼³Á¤µÇ¾î Àֱ⠶§¹®¿¡ ¹®Á¦´Â ´õ ½É°¢ÇØÁø´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í, ÀüÇüÀûÀÎ SMP Åë½Å Çϵå¿þ¾î°¡ Ŭ·¯½ºÅÍ ³×Æ®¿÷º¸´Ù´Â ÈξÀ ÁÁ±â ¶§¹®¿¡, ¿ø·¡ Ŭ·¯½ºÅÍ¿¡¼­ »ç¿ëÇÏ·Á°í ¸¸µç Ŭ·¯½ºÅÍ¿ë ¼ÒÇÁÆ®¿þ¾îµµ SMP¿¡¼­ ´õ ÁÁÀº ¼º´ÉÀ» º¸ÀδÙ. ÀÌ ÀåÀÇ ³ª¸ÓÁö¿¡¼­´Â SMP Çϵå¿þ¾î¿¡ ´ëÇؼ­ À̾߱âÇÏ°í, º´·Ä ÇÁ·Î±×·¥ ÇÁ·Î¼¼½º »çÀÌ¿¡¼­ ¸Þ¸ð¸®¸¦ °øÀ¯ÇÏ´Â ±âº»ÀûÀÎ ¸®´ª½º ¸ÞÄ¿´ÏÁòÀ» »ìÆ캸°í, ¿øÀÚ¼º(atomicity), Èֹ߼º(volatility), ¶ô(lock), ij½Ã ¶óÀÎ(cache line)¿¡ ´ëÇؼ­ ¾ÆÁÖ °£´ÜÇÏ°Ô ¾Ë¾Æº¸°í, ¸¶Áö¸·À¸·Î ¿©·¯°¡Áö °øÀ¯ ¸Þ¸ð¸® º´·Ä ó¸® ¶óÀ̺귯¸®µé¿¡ ´ëÇØ ¾à°£ÀÇ Á¶¾ðÀ» Çϵµ·Ï ÇÑ´Ù. <!-- ------------------------------------------------------------- --> <sect1>SMP Çϵå¿þ¾î(Hardware) <!-- ------------------------------------------------------------- --> <p> SMP ½Ã½ºÅÛµéÀº ¿©·¯ÇØ ÀüºÎÅÍ »ç¿ëµÇ¾î ¿ÔÁö¸¸, ¾ó¸¶Àü±îÁö¸¸Çصµ ±â°è¸¶´Ù ±âº»ÀûÀÎ ±â´ÉµéÀ» ¼­·Î ´Ù¸£°Ô ±¸ÇöÇÏ´Â °æÇâÀÌ À־, ¿î¿µÃ¼Á¦¿¡¼­ SMP¸¦ Áö¿øÇÏ´Â °ÍÀÌ È£È¯¼ºÀÌ ¾ø¾ú´Ù. ÀÌ·± ¹®Á¦¸¦ Á¾½Ä½ÃŲ °ÍÀº ÀÎÅÚ¿¡¼­ ¹ßÇ¥ÇÑ ´ÙÁßÇÁ·Î¼¼¼­ ±Ô¾à(Multiprocessor Specification, °£´ÜÈ÷ ÁÙ¿©¼­ <bf>MPS</bf>¶ó°í ÇÑ´Ù)ÀÌ´Ù. MPS 1.4 ±Ô¾àÀº <url url="http://www.intel.com/design/pro/datashts/242016.htm">¿¡¼­ PDF ÆÄÀÏ Çü½ÄÀ¸·Î µÈ ¹®¼­·Î ±¸ÇÒ ¼ö ÀÖÀ¸¸ç, <url url="http://support.intel.com/oem_developer/ial/support/9300.HTM">¿¡¼­ MPS 1.1 ±Ô¾à¿¡ ´ëÇÑ °³¿ä¸¦ º¼ ¼ö ÀÖÁö¸¸, ÀÎÅÚÀÌ ÀÚ½ÅÀÇ WWW »çÀÌÆ®¸¦ Á¾Á¾ °³ÆíÀ» Çϱ⠶§¹®¿¡ ÀÌ ÁÖ¼Ò´Â ¹Ù²î¾úÀ» ¼öµµ ÀÖ´Ù. ¸¹Àº <url url="http://www.uruk.org/~erich/mps-hw.html" name="Á¦ÀÛµé">Àº 4°³ÀÇ ÇÁ·Î¼¼¼­±îÁö Áö¿øÇÏ´Â MPS ȣȯ ½Ã½ºÅÛµéÀ» ¸¸µé°í ÀÖÁö¸¸, ÀÌ·ÐÀûÀ¸·Î MPS´Â ´õ ¸¹Àº ÇÁ·Î¼¼¼­µéÀ» Áö¿øÇÒ ¼ö ÀÖ´Ù. MPS°¡ ¾Æ´Ï¸é¼­ IA32(ÀÎÅÚ 32ºñÆ® CPU)°¡ ¾Æ´Ñ ½Ã½ºÅÛ Áß¿¡¼­ SMP ¸®´ª½º°¡ Áö¿øÇÏ´Â ½Ã½ºÅÛÀ¸·Î´Â Sun4m ´ÙÁßÇÁ·Î¼¼¼­ SPARC ½Ã½ºÅÛÀÌ À¯ÀÏÇÏ´Ù. SMP ¸®´ª½º´Â ÀÎÅÚ MPS 1.1°ú 1.4 ȣȯ ½Ã½ºÅÛÀ» ´ëºÎºÐ Áö¿øÇϸç, 16°³±îÁöÀÇ 486DX, Pentium, Pentium MMX, Pentium Pro, Pentium II ÇÁ·Î¼¼¼­¸¦ Áö¿øÇÑ´Ù. Áö¿øÇÏÁö ¾Ê´Â IA32 ÇÁ·Î¼¼¼­·Î´Â ÀÎÅÚ 386, 486SX/SLC ÇÁ·Î¼¼¼­¿Í (ºÎµ¿ ¼Ò¼ýÁ¡ ¿¬»ê Çϵå¿þ¾î°¡ ¾øÀ¸¸é SMP ±â°è¿¡ ¸ÂÁö ¾Ê´Â´Ù), AMD¿Í CyrixÀÇ ÇÁ·Î¼¼¼­µéÀÌ´Ù (À̵é ÇÁ·Î¼¼¼­´Â ´Ù¸¥ SMP Áö¿ø ĨµéÀ» ÇÊ¿ä·Î Çϴµ¥, ÀÌ ±ÛÀ» ¾²°í ÀÖÀ» ¶§ ¾ÆÁ÷ À̵é ĨµéÀº ³ª¿ÍÀÖÁö ¾Ê¾Ò´Ù). MPS ȣȯ ½Ã½ºÅÛµéÀÇ ¼º´ÉÀº õÂ÷¸¸º°·Î ´Þ¶óÁú ¼ö ÀÖ´Ù´Â Á¡Àº ²À ÀÌÇØÇÏ°í ³Ñ¾î°¡¾ß ÇÑ´Ù. ÀϹÝÀûÀÎ ¿¹»ó´ë·Î ¼º´ÉÀÇ Â÷À̸¦ ³ªÅ¸³»´Â ¿äÀÎ ÁßÀÇ Çϳª´Â ÇÁ·Î¼¼¼­ ¼ÓµµÀÌ´Ù. ´ëü·Î Á» ´õ ºü¸¥ Ŭ·°ÀÇ ÇÁ·Î¼¼¼­À» »ç¿ëÇÏ¸é ´õ ºü¸¥ ½Ã½ºÅÛÀÌ µÇ¸ç, Pentium Pro ÇÁ·Î¼¼¼­¸¦ »ç¿ëÇÑ ½Ã½ºÅÛÀÌ Pentium ÇÁ·Î¼¼¼­¸¦ ÀÌ¿ëÇÏ´Â ½Ã½ºÅÛº¸´Ù ºü¸¥ °æÇâÀÌ ÀÖ´Ù. ±×·¸Áö¸¸ MPS¿¡¼­´Â °øÀ¯ ¸Þ¸ð¸®(shared memory)¸¦ Çϵå¿þ¾îÀûÀ¸·Î ¾î¶»°Ô ±¸ÇöÇØ¾ß ÇÏ´ÂÁö´Â ¸í½ÃÇÏÁö ¾Ê°í ÀÖ´Ù. ´ÜÁö ¼ÒÇÁÆ®¿þ¾îÀûÀÎ °üÁ¡¿¡¼­ °øÀ¯ ¸Þ¸ð¸®°¡ ¾î¶»°Ô µ¿ÀÛÇØ¾ß ÇÏ´ÂÁö¸¸ ¸í½ÃÇÏ°í ÀÖÀ» »ÓÀÌ´Ù. ±×·¡¼­ ±¸ÇöÇÏ°í ÀÖ´Â °øÀ¯ ¸Þ¸ð¸® ¹æ½ÄÀÌ SMP ¸®´ª½ºÀÇ Æ¯Â¡°ú ƯÁ¤ ÇÁ·Î±×·¥ÀÇ Æ¯Â¡¿¡ ¾î¶»°Ô ¸Â¾Æµé¾î°¡´À³Ä¿¡ µû¶ó¼­ ¼º´ÉÀÌ ´Þ¶óÁú ¼ö ÀÖ´Ù. MPS ȣȯ ½Ã½ºÅÛµéÀÇ Â÷ÀÌ´Â ¿ì¼± ¹°¸®ÀûÀ¸·Î °øÀ¯ ¸Þ¸ð¸®¿¡ Á¢±ÙÇÏ´Â °ÍÀ» ¾î¶»°Ô ±¸ÇöÇÏ´À³Ä¿¡¼­ ³ªÅ¸³­´Ù. <sect2>°¢ ÇÁ·Î¼¼¼­°¡ µ¶ÀÚÀûÀÎ L2 ij½Ã¸¦ °¡Áö´Â°¡?(Does each processor have its own L2 cache?) <p> ÀϺΠMPS Pentium ½Ã½ºÅÛ°ú, ¸ðµç MPS Pentium Pro¿Í Pentium II ½Ã½ºÅÛÀº µ¶ÀÚÀûÀÎ L2 ij½Ã¸¦ °¡Áö°í ÀÖ´Ù. (L2 ij½Ã´Â Pentium Pro³ª Pentium II ¸ðµâ¿¡ µé¾îÀÖ´Ù) ÀϹÝÀûÀ¸·Î µ¶ÀÚÀûÀÎ L2 ij½Ã¸¦ »ç¿ëÇϸé ó¸® ¼Óµµ¸¦ ÃÖ´ëÈ­ÇÒ ¼ö ÀÖ´Ù°í ¾Ë·ÁÁ® ÀÖÁö¸¸, ¸®´ª½º¿¡¼­´Â ¸í¹éÇÏ°Ô ±×·± °ÍÀº ¾Æ´Ï´Ù. À̸¦ È¥¶õÇÏ°Ô ÇÏ´Â ÁÖµÈ ÀÌÀ¯´Â, ÇöÀçÀÇ ¸®´ª½º ½ºÄÉÁÙ·¯°¡ °¢ ÇÁ·Î¼¼½º¸¦ ¶È°°Àº ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàµÇ°Ô ÇÏ´Â <bf>ÇÁ·Î¼¼¼­ ģȭ·Â(processor infinity)</bf>ÀÇ °³³äÀ» µû¸£Áö´Â ¾Ê±â ¶§¹®ÀÌ´Ù. ÇÁ·Î¼¼½º°¡ ½ÇÇàµÇ´Â ÇÁ·Î¼¼¼­´Â ±Ý¹æ ¹Ù²ð¼ö ÀÖ´Ù. ÀÌ ¹®Á¦´Â ÃÖ±Ù¿¡ "ÇÁ·Î¼¼¼­ °áÇÕ(processor binding)"À̶ó´Â Á¦¸ñÀ¸·Î SMP ¸®´ª½º °³¹ß °øµ¿Ã¼¿¡¼­ Åä·ÐµÈ ÀûÀÌ ÀÖ´Ù. ÇÁ·Î¼¼¼­ ģȭ·Â ¾øÀÌ º°µµÀÇ L2 ij½Ã¸¦ °®°ÔµÇ¸é, ¾î¶² ÇÁ·Î¼¼½º°¡ ÀÌÀü¿¡ ½ÇÇàµÇ´ø ÇÁ·Î¼¼¼­°¡ ¾Æ´Ñ ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­ ½Ã°£À» ÇÒ´ç¹Þ¾Æ ½ÇÇàµÇ´Â °æ¿ì »ó´çÇÑ ¿À¹öÇìµå¸¦ ÃÊ·¡ÇÒ ¼ö ÀÖ´Ù. »ó´ëÀûÀ¸·Î °ªÀÌ ½Ñ »ó´ç¼öÀÇ ½Ã½ºÅÛµéÀº µÎ°³ÀÇ Pentium ÇÁ·Î¼¼¼­°¡ ÇϳªÀÇ L2 ij½Ã¸¦ °øÀ¯Çϵµ·Ï ¸¸µé¾îÁ® ÀÖ´Ù. ÀÌ ¹æ½ÄÀÇ ¾ÈÁÁÀº Á¡Àº µÎ°³ÀÇ ÇÁ·Î¼¼¼­°¡ ¼­·Î ij½Ã¸¦ »çÀÌ¿¡ µÎ°í °æÀïÀ» ÇؾßÇÑ´Ù´Â °ÍÀ¸·Î, ƯÈ÷ ¿©·¯°³ÀÇ ¼­·Î µ¶¸³ÀûÀÎ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â °æ¿ì ¼º´ÉÀÌ ÇöÀúÇÏ°Ô ¶³¾îÁø´Ù´Â °ÍÀÌ´Ù. ÁÁÀº Á¡Àº ¸¹Àº º´·Ä ÇÁ·Î±×·¥µé¿¡°Ô À־ µÎ °³ÀÇ ÇÁ·Î¼¼¼­°¡ °øÀ¯ ¸Þ¸ð¸®ÀÇ ¶È°°Àº ¶óÀο¡ Á¢±ÙÇÏ´Â °æ¿ì Çϳª¸¸ÀÌ À̸¦ ij½Ã¿¡ °¡Á®¿À¸é µÇ¾î, ¹ö½º¸¦ µÑ·¯½Ñ °æÀïÀ» ÇÇÇÒ ¼ö À־ ij½Ã¸¦ °øÀ¯ÇÏ´Â°Ô ½ÇÁúÀûÀ¸·Î µµ¿òÀÌ µÈ´Ù´Â °ÍÀÌ´Ù. ¶ÇÇÑ ÇÁ·Î¼¼¼­ ģȭ·ÂÀ» Àû¿ëÇÏÁö ¾Ê´Â °æ¿ì L2 ij½Ã¸¦ °øÀ¯ÇÏ´Â °ÍÀÌ ÇÇÇØ°¡ ´õ Àû´Ù. µû¶ó¼­ º´·Ä ÇÁ·Î±×·¥ÀÇ °æ¿ì L2 ij½Ã¸¦ °øÀ¯ÇÏ´Â °ÍÀÌ ÀϹÝÀûÀ¸·Î »ý°¢ÇÏ´Â °Í¸¸Å­ ³ª»ÚÁö´Â ¾Ê´Ù. µÎ°³ÀÇ Pentium ÇÁ·Î¼¼¼­°¡ 256K ij½Ã¸¦ °øÀ¯ÇÏ´Â ½Ã½ºÅÛÀ» »ç¿ëÇغ» °æÇè¿¡ µû¸£¸é, ÇÊ¿äÇÑ Ä¿³Î ÀÛ¾÷ÀÇ Á¤µµ¿¡ µû¶ó¼­ ½Ã½ºÅÛÀÇ ¼º´ÉÀÌ »ó´çÈ÷ Å©°Ô ´Þ¶óÁ³´Ù. ÃÖ¾ÇÀÇ °æ¿ì ¼Óµµ°¡ 1.2¹è Á¤µµ¹Û¿¡ »¡¶óÁöÁö ¾Ê¾ÒÁö¸¸, "µ¥ÀÌÅ͸¦ °¡Á®¿À´Â °ÍÀº °øÀ¯ÇÏ´Â(shared fetch)" È¿°ú¸¦ Á¦´ë·Î ÀÌ¿ëÇÏ´Â °è»ê Áß½ÉÀûÀÎ SPMD ½ºÅ¸ÀÏÀÇ Äڵ带 »ç¿ëÇÏ¿´À» ¶§ 2.1 ¹è±îÁö »¡¶óÁö´Â °ÍÀ» º¸±âµµ ÇÏ¿´´Ù. <sect2>¹ö½º ¼³Á¤(Bus configuration)? <p> ¸ÕÀú À̾߱âÇÒ °ÍÀº ¿äÁò¿¡ ³ª¿À´Â ´ëºÎºÐÀÇ ½Ã½ºÅÛµéÀº, ÇÁ·Î¼¼¼­¿¡ Çϳª ÀÌ»óÀÇ PCI ¹ö½º°¡ ¿¬°áµÇ¾î ÀÖ°í, ÀÌ´Â ¶Ç´Ù½Ã ºê¸´Áö(bridge)¸¦ ÅëÇÏ¿© Çϳª ÀÌ»óÀÇ ISA/EISA ¹ö½º¿¡ ¿¬°áµÇ¾î ÀÖ´Ù´Â °ÍÀÌ´Ù. ºê¸´Áö¸¦ ÅëÇÏ´Â °æ¿ì ´ë±â½Ã°£(latency)ÀÌ ´Ã¾î³ª°Ô µÇ°í, EISA³ª ISA´Â ÀϹÝÀûÀ¸·Î PCI¿¡ ºñÇؼ­ ³·Àº ´ë¿ªÆøÀ» Á¦°øÇϱ⠶§¹®¿¡ (ISA°¡ Á¦ÀÏ ³·´Ù), µð½ºÅ© µå¶óÀ̺곪, ºñµð¿À Ä«µå, ´Ù¸¥ °í¼º´É ÀåÄ¡µéÀº PCI ¹ö½º ÀÎÅÍÆäÀ̽º¸¦ ÅëÇÏ¿© ¿¬°áµÇ¾î¾ß ÇÑ´Ù. PCI ¹ö½º°¡ Çϳª¹Û¿¡ ¾ø´õ¶óµµ °è»ê Áß½ÉÀûÀÎ º´·Ä ÇÁ·Î±×·¥ÀÇ °æ¿ì MPS ½Ã½ºÅÛÀº ±¦ÂúÀº ¼º´É°³¼± È¿°ú¸¦ º¸¿©ÁØ´Ù. ÇÏÁö¸¸ I/O 󸮼ӵµ´Â ÇϳªÀÇ ÇÁ·Î¼¼¼­¸¦ »ç¿ëÇÒ ¶§º¸´Ù ´õ ³ª¾ÆÁöÁö ¾ÊÀ¸¸ç, ÇÁ·Î¼¼¼­µéÀÌ ¹ö½º¸¦ »çÀÌ¿¡ µÎ°í °æÀïÀ» Çϱ⠶§¹®¿¡ ¾Æ¸¶µµ ¼º´ÉÀÌ Á¶±Ý ¶³¾îÁö°Ô µÉ °ÍÀÌ´Ù. µû¶ó¼­ I/O ¼Óµµ¸¦ ³ôÀÌ°í ½Í´Ù¸é ¿©·¯°³ÀÇ µ¶ÀÚÀûÀÎ PCI ¹ö½º¿Í I/O ÄÜÆ®·Ñ·¯(¿¹¸¦ µé¾î ¿©·¯°³ÀÇ SCSI üÀεé)¸¦ °¡Áö´Â MPS ½Ã½ºÅÛÀ» ±¸ÀÔÇÏ´Â °ÍÀÌ ÁÁ´Ù. ÀÌ ¶§ SMP ¸®´ª½º¿¡¼­ ÀÌµé ½Ã½ºÅÛÀ» Áö¿øÇÏ´ÂÁö Á¶½É½º·´°Ô »ìÆ캸¾Æ¾ß ÇÑ´Ù. ¶ÇÇÑ ÇöÀçÀÇ SMP ¸®´ª½º¿¡¼­´Â ¾î´À ¼ø°£À̵ç ÇϳªÀÇ ÇÁ·Î¼¼¼­¸¸ÀÌ Ä¿³Î¸ðµå¿¡ ÀÖÀ» ¼ö Àֱ⠶§¹®¿¡, I/O 󸮸¦ ÇÒ ¶§ Ä¿³Î¿¡¼­ ¼Ò¿äÇÏ´Â ½Ã°£ÀÌ ÀûÀº I/O ÄÜÆ®·Ñ·¯¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù´Â Á¡À» ¸í½ÉÇØ¾ß ÇÑ´Ù. Á¤¸» °í¼º´ÉÀ» ¿øÇÑ´Ù¸é ½Ã½ºÅÛ ÄÝ(system call)À» ÅëÇÏÁö ¾Ê°í, »ç¿ëÀÚ ÇÁ·Î¼¼½º°¡ Á÷Á¢ ÀåÄ¡·Î I/O¸¦ ÇÏ´Â °Íµµ °í·ÁÇØ º¼ ÇÊ¿ä°¡ ÀÖ´Ù. ÀÌ´Â »ý°¢¸¸Å­ ¾î·ÆÁöµµ ¾Ê°í, ¾ÈÁ¤¼ºÀ» ÇØÄ¡Áöµµ ¾Ê´Â´Ù (3.3 Àå¿¡¼­ ±âº» ±â¼ú¿¡ ´ëÇؼ­ ¼³¸íÇÏ°í ÀÖ´Ù). ¹ö½º ¼Óµµ¿Í ÇÁ·Î¼¼¼­ Ŭ·° ¼ÓµµÀÇ °ü°è¸¦ »ìÆ캸´Â °Íµµ ¸Å¿ì Áß¿äÇÏ´Ù. Áö³­ ¸îÇص¿¾È ÀÌµé »çÀÌÀÇ °ü°è´Â ºÒ¸íÈ®ÇÏ°Ô ÀÌÇØµÇ¾î ¿Ô´Ù. ´ëºÎºÐÀÇ ½Ã½ºÅÛÀÌ Áö±ÝÀº ¶È°°Àº PCI Ŭ·° ¼Óµµ¸¦ »ç¿ëÇÏ°í ÀÖÁö¸¸, ´õ ºü¸¥ Ŭ·° ¼ÓµµÀÇ ÇÁ·Î¼¼¼­°¡ ´õ ´À¸° ¹ö½º Ŭ·°°ú ½ÖÀ» ÀÌ·ç´Â °ÍÀº µå¹® ÀÏÀÌ ¾Æ´Ï´Ù. ÀÌÀÇ °íÀüÀûÀÎ ¿¹·Î, ÀϹÝÀûÀ¸·Î Pentium 133Àº Pentium 150º¸´Ù ´õ ºü¸¥ ¹ö½º¸¦ »ç¿ëÇÏ¿´°í, ´Ù¾çÇÑ º¥Ä¡¸¶Å©¿¡¼­ ƯÀÌÇÑ °á°ú¸¦ ³ªÅ¸³Â´Ù. ÀÌ·± È¿°ú´Â SMP ½Ã½ºÅÛ¿¡¼­ ´õ¿í ÁõÆøµÈ´Ù. ÀÌ´Â ¹ö½º Ŭ·° ¼Óµµ¸¦ ºü¸£°Ô ÇÏ´Â °Íº¸´Ùµµ ´õ Áß¿äÇÑ ¹®Á¦ÀÌ´Ù. <sect2>¸Þ¸ð¸® Áßø°ú DRAM ±â¼ú(Memory interleaving and DRAM technologies)? <p> ¸Þ¸ð¸® ÁßøÀº ½ÇÁ¦·Î MPS¿Í´Â ¾Æ¹«·± Àϵµ °°ÀÌ ÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª MPS ½Ã½ºÅÛ¿¡¼­ ÀÌ°ÍÀÌ Á¾Á¾ ¾ð±ÞµÇ´Â °ÍÀ» º¼ ¼ö Àִµ¥, ÀÌ´Â ÀÌµé ½Ã½ºÅÛÀÌ ´ëü·Î ¸Þ¸ð¸® ´ë¿ªÆøÀ» ´õ ¸¹ÀÌ ÇÊ¿ä·Î Çϱ⠶§¹®ÀÌ´Ù. ±âº»ÀûÀ¸·Î 2-way³ª 4-way ÁßøÀº RAM¿¡ ºí·° Á¢±ÙÀ» ÇÒ ¶§, ÀÌ°ÍÀÌ Çϳª°¡ ¾Æ´Ï¶ó ¿©·¯°³ÀÇ RAM ¹ðÅ©(bank)¸¦ »ç¿ëÇÏ¿© ÀÌ·ç¾îÁöµµ·Ï RAMÀ» Á¶Á÷È­ÇÑ´Ù. ÀÌ´Â ´õ ³ôÀº ¸Þ¸ð¸® Á¢±Ù ´ë¿ªÆøÀ» Á¦°øÇÏ°Ô µÇ´Âµ¥, ƯÈ÷ ij½Ã ¶óÀÎ(cache line) Àб⳪ ¾²±â¿¡ À־ ´õ¿í ±×·¯ÇÏ´Ù. ÀÌ°ÍÀÇ È¿°ú¿¡ ´ëÇؼ­´Â ±×´ÙÁö ¸íÄèÇÏÁö ¾ÊÀºµ¥, EDO DRAMÀ̳ª ¿©·¯°¡Áö ´Ù¸¥ ¸Þ¸ð¸® ±â¼úµéÀº ÀÌ¿Í ºñ½ÁÇÑ Á¾·ùÀÇ ¿¬»ê ¼Óµµ¸¦ Çâ»ó½ÃÅ°±â ¶§¹®ÀÌ´Ù. <url url="http://www.pcguide.com/ref/ram/tech.htm">¿¡¼­ DRAM ±â¼ú¿¡ ´ëÇØ ¹«Ã´ Àß Á¤¸®µÇ¾îÀÖ´Â °³¿ä¸¦ º¼ ¼ö ÀÖ´Ù. ±×·¸´Ù¸é, ¿¹¸¦ µé¾î 2-wayÀÇ ÁßøµÇ´Â EDO DRAMÀ» ¾²´Â °ÍÀÌ ÁßøÀ» »ç¿ëÇÏÁö ¾Ê´Â SDRAMÀ» ¾²´Â °Íº¸´Ù ´õ ÁÁÀº°¡? ÀÌ°ÍÀº ¸Å¿ì ÈǸ¢ÇÑ Áú¹®À̸ç, ±× ´ë´äÀº °£´ÜÇÏÁö ¾Ê´Ù. ¿Ö³ÄÇϸé Áßø±â¼úÀ̳ª ´Ù¸¥ Èï¹ÌÀÖ´Â ±â¼úµéÀº ´ëü·Î ºñ½Î±â ¶§¹®ÀÌ´Ù. ¿©±â¿¡ µé¾î°¡´Â ¶È°°Àº µ·À» º¸Åë ¸Þ¸ð¸®¿¡ ÅõÀÚÇÑ´Ù¸é ÈξÀ ¸¹Àº ¾çÀÇ ¸ÞÀÎ ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. °¡Àå ´À¸° DRAMÀ» »ç¿ëÇÑ´Ù ÇÏ´õ¶óµµ µð½ºÅ©¸¦ ÀÌ¿ëÇÑ °¡»ó ¸Þ¸ð¸®º¸´Ù´Â ÈξÀ ºü¸£´Ù. <!-- ------------------------------------------------------------- --> <sect1>°øÀ¯ ¸Þ¸ð¸® ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ¼Ò°³<label id="sec_IntroductionToSharedMemoryProgramming"> <!-- ------------------------------------------------------------- --> <p> SMP¿¡¼­ º´·Ä󸮸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÃæºÐÈ÷ ÇÒ¸¸ÇÑ °ÍÀ̶ó°í °áÁ¤À» ³»·È´Ù¸é, ÀÌÁ¦ ¾îµð¼­ºÎÅÍ ½ÃÀÛÇÏ´Â°Ô ÁÁÀ»±î? ±×·³, °øÀ¯ ¸Þ¸ð¸® Åë½ÅÀÌ ½ÇÁ¦·Î µ¿ÀÛÇÏ´Â ¹æ½Ä¿¡ ´ëÇؼ­ Á¶±Ý ´õ ¹è¿ì´Â °ÍÀ¸·Î ±× ù¹ßÀ» ³»µó¾îº¸µµ·Ï ÇÏÀÚ. ¾óÇÍ »ý°¢ÇÏ¸é °øÀ¯ ¸Þ¸ð¸® Åë½ÅÀ̶õ ÇϳªÀÇ ÇÁ·Î¼¼¼­°¡ ¸Þ¸ð¸®¿¡ °ªÀ» ÀúÀåÇϸé, ´Ù¸¥ ÇÁ·Î¼¼¼­°¡ À̸¦ ÀоîµéÀÌ´Â °ÍÀ̶ó°í »ý°¢ÇÒ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ ºÒÇàÈ÷µµ ±×·¸°Ô °£´ÜÇÏÁö¸¸Àº ¾Ê´Ù. ¿¹¸¦ µé¾î, ÇÁ·Î¼¼½º¿Í ÇÁ·Î¼¼¼­ »çÀÌÀÇ °ü°è°¡ ¹«Ã´ º¹ÀâÇÏ°Ô ¾ôÇô µÇ¾îÀÖ´Ù°í ÇÏÀÚ. ÇÁ·Î¼¼¼­ÀÇ °¹¼öº¸´Ù ÇöÀç µ¿ÀÛÇÏ´Â ÇÁ·Î¼¼½ºÀÇ ¼ö°¡ Àû´Ù°í ÇÏ´õ¶óµµ ±×·¸°í, ±× ¹Ý´ëÀÇ °æ¿ìµµ ¸¶Âù°¡Áö´Ù. ÀÌ ÀåÀÇ ³²Àº ºÎºÐ¿¡¼­´Â Ưº°È÷ ½Å°æ¾²Áö ¾ÊÀ¸¸é ½É°¢ÇÑ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â Áß¿äÇÑ ³íÁ¡µé - ¹«¾ùÀ» °øÀ¯ÇÒ °ÍÀÎÁö ÆÇ´ÜÇϴµ¥ »ç¿ëÇÏ´Â µÎ°¡Áö ¼­·Î ´Ù¸¥ ¸ðµ¨°ú, ¿øÀÚ¼º(atomicity) ³íÁ¡, Èֹ߼º(volatility) °³³ä°ú Çϵå¿þ¾î ¶ô(lock) ¸í·É, ij½Ã ¶óÀÎ(cache line) È¿°ú, ±×¸®°í ¸®´ª½º ½ºÄÉÁÙ·¯ ³íÁ¡ - À» °£´ÜÈ÷ ¿ä¾àÇϵµ·Ï ÇÏ°Ú´Ù. <sect2>¸ðµÎ °øÀ¯Çϱ⠴ë ÀϺθ¦ °øÀ¯Çϱâ(Shared Everything Vs. Shared Something) <p> °øÀ¯ ¸Þ¸ð¸® ÇÁ·Î±×·¡¹Ö¿¡¼­´Â ÀϹÝÀûÀ¸·Î <bf>¸ðµÎ °øÀ¯Çϱâ</bf>¿Í <bf>ÀϺθ¦ °øÀ¯Çϱâ</bf>¶ó´Â µÎ°¡ÁöÀÇ ±Ùº»ÀûÀ¸·Î ¼­·Î ´Ù¸¥ ¸ðµ¨À» »ç¿ëÇÑ´Ù . ÀÌ µÎ°¡Áö ¸ðµ¨Àº ¸ðµÎ ÇÁ·Î¼¼¼­µéÀÌ °øÀ¯¸Þ¸ð¸®·Î µ¥ÀÌÅ͸¦ ¾²°í, °øÀ¯¸Þ¸ð¸®¿¡¼­ µ¥ÀÌÅ͸¦ ÀоîµéÀÓÀ¸·Î½á Åë½ÅÀ» ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. µÎ ¸ðµ¨ÀÇ ´Ù¸¥Á¡Àº, ¸ðµÎ °øÀ¯ÇÏ´Â ¸ðµ¨¿¡¼­´Â ¸ðµç ÀڷᱸÁ¶¸¦ °øÀ¯¸Þ¸ð¸®¿¡ µÎ´Â ¹Ý¸é¿¡, ÀϺθ¦ °øÀ¯ÇÏ´Â ¸ðµ¨¿¡¼­´Â »ç¿ëÀÚ°¡ °øÀ¯ÇÒ ÀڷᱸÁ¶¿Í ÇϳªÀÇ ÇÁ·Î¼¼¼­¿¡ <bf>±¹ÇѵǴÂ</bf> ÀڷᱸÁ¶¸¦ ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇÑ´Ù´Â °ÍÀÌ´Ù. ¾î¶² °øÀ¯¸Þ¸ð¸® ¸ðµ¨À» »ç¿ëÇÒ °ÍÀΰ¡? ÀÌ´Â Á¾±³¿¡ ´ëÇÑ Áú¹®°ú ºñ½ÁÇÏ´Ù. ¸¹Àº »ç¶÷µéÀº ÀڷᱸÁ¶¸¦ ¼±¾ðÇÒ ¶§ ÀÌ°ÍÀ» °øÀ¯ÇÒ °ÍÀÎÁö µû·Î ±¸º°ÇÒ ÇÊ¿ä°¡ ¾ø±â ¶§¹®¿¡, ¸ðµÎ °øÀ¯ÇÏ´Â ¸ðµ¨À» ÁÁ¾ÆÇÑ´Ù. ÀÌ ¶§´Â µ¿½Ã¿¡ ÇϳªÀÇ ÇÁ·Î¼¼½º(ÇÁ·Î¼¼¼­)¸¸ÀÌ ÀÚ·á¿¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï, Ãæµ¹À» ÀÏÀ¸Å³ ¼ö ÀÖ´Â °øÀ¯ÇÏ´Â ÀÚ·á¿¡ Á¢±ÙÇÏ´Â ÄÚµå ÁÖÀ§¿¡ ¶ô(lock)À» °É±â¸¸ ÇÏ¸é µÈ´Ù. ±×·¸Áö¸¸ ÀÌ°Í ¿ª½Ã ¸»Ã³·³ °£´ÜÇÏÁø ¾Ê´Ù. ±×·¡¼­ ¸¹Àº »ç¶÷µéÀº ÀϺθ¸À» °øÀ¯ÇÏ´Â ¸ðµ¨ÀÌ °¡Á®´ÙÁÖ´Â »ó´ëÀûÀÎ ¾ÈÀü¼ºÀ» ´õ ¼±È£Çϱ⵵ ÇÑ´Ù. <sect3>¸ðµÎ °øÀ¯Çϱâ(Shared Everything) <p> ¸ðµÎ °øÀ¯ÇÏ´Â ¹æ½ÄÀÇ ÀåÁ¡Àº ÀÌ¹Ì ¸¸µé¾îÁ® ÀÖ´Â ¼øÂ÷ÀûÀÎ ÇÁ·Î±×·¥À» ¼±ÅÃÇÏ¿© ½±°Ô ¸ðµÎ °øÀ¯ÇÏ´Â º´·Ä ÇÁ·Î±×·¥À¸·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¿©±â¼­´Â ¾î¶² ÀÚ·á°¡ ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­ Á¢±ÙÇÒ ¼ö ÀÖ´Â °ÍÀÎÁö ¸ÕÀú ÆÇ´ÜÇØ¾ß ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. °£´ÜÇÏ°Ô »ìÆ캸¸é, ¸ðµç°É °øÀ¯ÇÏ´Â ¹æ½ÄÀÇ °¡Àå Å« ¹®Á¦Á¡Àº ÇϳªÀÇ ÇÁ·Î¼¼¼­°¡ ÃëÇÑ ÇൿÀÌ ´Ù¸¥ ÇÁ·Î¼¼¼­µé¿¡°Ô ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀÌ ¹®Á¦´Â µÎ°¡Áö ¹æÇâÀ¸·Î ³ªÅ¸³­´Ù : <itemize> <item> ¸¹Àº ¶óÀ̺귯¸®µéÀº °øÀ¯ÇÒ ¼ö ¾ø´Â ÀڷᱸÁ¶µéÀ» »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, UNIX¿¡¼­ ´ëºÎºÐÀÇ ÇÔ¼öµéÀº <tt>errno</tt>¶ó´Â º¯¼ö¿¡´Ù°¡ ¿¡·¯Äڵ带 ´ã¾Æ µ¹·ÁÁØ´Ù. ¸¸¾à ¸ðµÎ °øÀ¯ÇÏ´Â µÎ °³ÀÇ ÇÁ·Î¼¼½º°¡ ¿©·¯°¡Áö ÇÔ¼ö¸¦ ºÎ¸¥´Ù¸é, À̵éÀº ¶È°°Àº <tt>errno</tt> º¯¼ö¸¦ °øÀ¯Çϱ⠶§¹®¿¡ ¼­·Î °£¼·À» ÀÏÀ¸Å°°Ô µÉ °ÍÀÌ´Ù. ºñ·Ï Áö±ÝÀº <tt>errno</tt> ¹®Á¦¸¦ ÇØ°áÇÑ ¶óÀ̺귯¸®°¡ ÀÖ±ä ÇÏÁö¸¸, ÀÌ¿Í ºñ½ÁÇÑ ¹®Á¦´Â ´ëºÎºÐÀÇ ¶óÀ̺귯¸®¿¡ ¿©ÀüÈ÷ ³²¾Æ ÀÖ´Ù. ¿¹¸¦ µé¾î, ¹Ì¸® Ưº°ÇÑ ÁÖÀǸ¦ ±â¿ïÀÌÁö ¾Ê°í, ¸ðµÎ °øÀ¯ÇÏ´Â ¿©·¯°³ÀÇ ÇÁ·Î¼¼½ºµéÀÌ X ¶óÀ̺귯¸®ÀÇ ÇÔ¼öµéÀ» È£ÃâÇÑ´Ù¸é, X ¶óÀ̺귯¸®´Â Á¦´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. <item> ÀϹÝÀûÀ¸·Î Æ÷ÀÎÅ͸¦ À߸ø »ç¿ëÇϰųª, ¹è¿­¿¡¼­ À妽º¸¦ À߸ø ÁöÁ¤ÇÑ °æ¿ì, ÃÖ¾ÇÀÇ °á°ú·Î ÀÌ Äڵ带 ¼öÇàÇÏ´ø ÇÁ·Î¼¼½º°¡ Áױ⵵ ÇÑ´Ù. À̶§ core ÆÄÀÏÀ» ¸¸µé¾î ¹«½¼ ÀÏÀÌ ÀϾ´ÂÁö ´Ü¼­¸¦ Á¦°øÇØÁֱ⵵ ÇÑ´Ù. ¸ðµÎ °øÀ¯ÇÏ´Â º´·Ä󸮿¡¼­´Â ÀÌ·± À߸øµÈ Á¢±ÙÀÌ ¹ß»ýÇϸé <em>´Ù¸¥ ÇÁ·Î¼¼½º±îÁöµµ Á×°Ô ÇÒ</em> °¡´É¼ºÀÌ Ä¿¼­, Áö¿ªÈ­(localize)¸¦ Çϰųª ¿¡·¯¸¦ °íÄ¡´Â °ÍÀ» °ÅÀÇ ºÒ°¡´ÉÇÏ°Ô ¸¸µç´Ù. </itemize> ÀÌ·± Á¾·ùÀÇ ¹®Á¦´Â ÀϺθ¦ °øÀ¯ÇÏ´Â ¹æ½Ä¿¡¼­´Â ÈçÈ÷ ÀϾÁø ¾Ê´Â´Ù. ¿Ö³ÄÇÏ¸é ¸í¹éÇÏ°Ô ÁöÁ¤ÇÑ ÀڷᱸÁ¶¸¸ÀÌ °øÀ¯µÇ±â ¶§¹®ÀÌ´Ù. ±×¸®°í, ¸ðµÎ °øÀ¯ÇÏ´Â ¹æ½ÄÀº ¸ðµç ÇÁ·Î¼¼¼­°¡ ¿ÏÀüÈ÷ ¶È°°Àº ¸Þ¸ð¸® À̹ÌÁö¸¦ ½ÇÇàÇÏ´Â °æ¿ì¿¡¸¸ µ¿ÀÛÇÑ´Ù´Â °ÍÀº ´ç¿¬ÇÑ ÀÏÀÌ´Ù. Áï, ¿©·¯°³ÀÇ ¼­·Î ´Ù¸¥ ÄÚµå À̹ÌÁöµé »çÀÌ¿¡¼­´Â ¸ðµÎ °øÀ¯ÇÏ´Â ¹æ½ÄÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù (´Ù¸£°Ô ¸»Çϸé, SPMD¸¸À» »ç¿ëÇÒ ¼ö ÀÖÁö, ÀϹÝÀûÀÎ MIMD´Â »ç¿ëÇÒ ¼ö ¾ø´Ù). ¸ðµÎ °øÀ¯ÇÏ´Â ¹æ½ÄÀ» Áö¿øÇÏ´Â °¡Àå ÀϹÝÀûÀÎ À¯ÇüÀº <bf>¾²·¹µå ¶óÀ̺귯¸®(threads library)</bf>ÀÌ´Ù. <url url="http://liinwww.ira.uka.de/bibliography/Os/threads.html" name="¾²·¹µå">´Â º»·¡, ´ëü·Î ÀϹÝÀûÀÎ UNIX ÇÁ·Î¼¼½º¿Í´Â ´Ù¸£°Ô ½ºÄÉÁÙÀÌ ÀÌ·ç¾îÁö°í, °¡Àå Áß¿äÇÑ Á¡À¸·Î µ¿ÀÏÇÑ ¸Þ¸ð¸® ¸Ê¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â "°¡º­¿î" ÇÁ·Î¼¼½ºÀÌ´Ù. POSIX <url url="http://www.mit.edu:8001/people/proven/pthreads.html" name="Pthreads">ÆÐÅ°Áö´Â ¿©·¯ Æ÷Æà ÇÁ·ÎÁ§Æ®¿¡¼­ ÃÐÁ¡À» ¹Þ¾Æ ¿Ô¾ú´Ù. ¿©±â¼­ Áß¿äÇÑ Áú¹®Àº, À̵é Æ÷ÆÃÁßÀÇ ¾î¶² °ÍµéÀÌ ½ÇÁ¦·Î ÇÁ·Î±×·¥¿¡ ÀÖ´Â ¾²·¹µåµéÀ» SMP ¸®´ª½º¿¡¼­ º´·Ä·Î ½ÇÇàÇÒ ¼ö ÀÖ´À³ÄÀÌ´Ù (ÀÌ»óÀûÀ¸·Î, °¢ ¾²·¹µå¸¶´Ù ÇϳªÀÇ ÇÁ·Î¼¼¼­¸¦). POSIX API´Â À̸¦ ¿ä±¸ÇÏÁö ¾ÊÀ¸¸ç, <url url="http://www.aa.net/~mtp/PCthreads.html">°°Àº ¹öÀü¿¡¼­´Â ºÐ¸íÇÏ°Ô º´·Ä ¾²·¹½º ½ÇÇàÀ» ±¸ÇöÇÏÁö ¾Ê°í ÀÖ´Ù - ÇÁ·Î±×·¥ÀÇ ¸ðµç ¾²·¹µåµéÀº ÇϳªÀÇ ¸®´ª½º ÇÁ·Î¼¼½º ¾È¿¡ µé¾îÀÖ´Ù. SMP ¸®´ª½º¿¡¼­ÀÇ º´·Ä󸮸¦ Áö¿øÇÑ Ã¹¹ø° ¾²·¹µå ¶óÀ̺귯¸®´Â Áö±ÝÀº Çѹ°°£ bb_threads ¶óÀ̺귯¸®·Î, <url url="ftp://caliban.physics.utoronto.ca/pub/linux/">¿¡¼­ ±¸ÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ¸®´ª½ºÀÇ <tt>clone()</tt>ÇÔ¼ö¸¦ »ç¿ëÇÏ¿©, µ¶ÀÚÀûÀ¸·Î ½ºÄÉÁٵǸç, ÇϳªÀÇ ÁÖ¼Ò°ø°£À» °øÀ¯ÇÏ´Â, »õ·Î¿î ¸®´ª½º ÇÁ·Î¼¼½º¸¦ »ý¼º(fork)ÇÏ´Â ¸Å¿ì ÀÛÀº ¶óÀ̺귯ÀÌ´Ù. SMP ¸®´ª½º ±â°è´Â °¢ "¾²·¹µåµé"ÀÌ ¿ÏÀüÇÑ ¸®´ª½º ÇÁ·Î¼¼½ºÀ̱⠶§¹®¿¡ ¿©·¯°³ÀÇ À̵é "¾²·¹µåµé"À» º´·Ä·Î ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ´ë½Å ÀÌÀÇ ´ñ°¡·Î ´Ù¸¥ ¿î¿µÃ¼Á¦ÀÇ ÀϺΠ¾²·¹µå ¶óÀ̺귯¸®µéÀÌ Á¦°øÇÏ´Â °Í°ú °°Àº "°¡º­¿î" ½ºÄÉÁÙ¸µ Á¦¾î¸¦ ÇÒ ¼ö ¾ø´Ù. ÀÌ ¶óÀ̺귯¸®´Â »õ·Î¿î ¸Þ¸ð¸® Á¶°¢À» °¢ ¾²·¹µåÀÇ ½ºÅÃÀ¸·Î ÇÒ´çÇÏ°í, ¶ô(lock)ÀÇ ¹è¿­(mutex °³Ã¼µé)µéÀ» ¿øÀÚÀûÀ¸·Î Á¢±ÙÇÒ ¼ö ÀÖ´Â ÇÔ¼ö¸¦, C·Î Æ÷ÀåµÈ ¾î¼Àºí¸® Äڵ带 Á¶±Ý »ç¿ëÇÏ¿© Á¦°øÇÏ°í ÀÖ´Ù. ¹®¼­´Â <tt>README</tt>¿Í °£´ÜÇÑ ¿¹Á¦ ÇÁ·Î±×·¥À¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù. Á»´õ ÃÖ±Ù¿¡ clone()À» »ç¿ëÇÏ´Â POSIX ¾²·¹µå ¹öÀüÀÌ °³¹ßµÇ¾ú´Ù. ÀÌ ¶óÀ̺귯¸®´Â <url url="http://pauillac.inria.fr/~xleroy/linuxthreads/" name="LinuxThreads">·Î, SMP ¸®´ª½º¿¡¼­ »ç¶÷µéÀÌ °¡Àå ¼±È£ÇÏ´Â ¸ðµÎ °øÀ¯ÇÏ´Â ¶óÀ̺귯¸®ÀÌ´Ù. POSIX ¾²·¹µåµéµµ ¹®¼­È­°¡ ÀߵǾîÀÖ°í, <url url="http://pauillac.inria.fr/~xleroy/linuxthreads/README" name="LinuxThreads README">¿Í <url url="http://pauillac.inria.fr/~xleroy/linuxthreads/faq.html" name="LinuxThreads FAQ"> ¿ª½Ã ¸Å¿ì ÀߵǾî ÀÖ´Ù. Áö±ÝÀÇ ÁÖ¿äÇÑ ¹®Á¦´Â POSIX ¾²·¹µå¸¦ Á¦´ë·Î ÇÏ·Á¸é À̸¦ ÀÚ¼¼ÇÏ°Ô ¾Ë¾Æ¾ßÇÑ´Ù´Â °ÍÀÌ°í, LinuxThreads´Â ¾ÆÁ÷Àº °è¼ÓÇؼ­ ÀÛ¾÷ÁßÀ̶ó´Â °ÍÀÌ´Ù. ¶ÇÇÑ POSIX ¾²·¹µå Ç¥ÁØÀÌ Ç¥ÁØÈ­ °úÁ¤¿¡¼­ °è¼Ó ¹ßÀüµÇ°í ÀÖ¾î, ÀÌ¹Ì ¹Ù²ï ¿¹Àü ¹öÀüÀÇ Ç¥ÁØ¿¡ ¸ÂÃç ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏÁö ¾Êµµ·Ï ÁÖÀǸ¦ ±â¿ï¿©¾ß ÇÑ´Ù´Â °Í ¿ª½Ã ¹®Á¦ÀÌ´Ù. <sect3>ÀϺθ¦ °øÀ¯Çϱâ(Shared Something) <p> ÀϺθ¦ °øÀ¯ÇÏ´Â °ÍÀº Á¤¸»·Î "°øÀ¯ÇÒ ÇÊ¿ä°¡ ÀÖ´Â °Í¸¸À» °øÀ¯ÇÏ´Â" °ÍÀÌ´Ù. ÀÌ Á¢±Ù¹ýÀº °¢ ÇÁ·Î¼¼¼­ÀÇ ¸Þ¸ð¸® ¸ÊÀÇ ¶È°°Àº À§Ä¡¿¡ °øÀ¯µ¥ÀÌÅÍ°¡ ÇÒ´çµÇ°Ô ÇÏ´Â °Í¿¡ À¯ÀÇÇÑ´Ù¸é ÀϹÝÀûÀÎ MIMD(SPMD°¡ ¾Æ´Ï¶ó) ¿ëÀ¸·Î µ¿ÀÛÇÏ°Ô µÈ´Ù. ´õ Áß¿äÇÑ Æ¯Â¡Àº, ÀϺθ¦ °øÀ¯ÇÏ´Â ¹æ½ÄÀº ¼º´ÉÀ» ¿¹ÃøÇÏ°í Á¶À²Çϸç, Äڵ带 µð¹ö±ëÇÏ´Â °Í µîÀ» ½±°Ô ¸¸µé¾îÁشٴ °ÍÀÌ´Ù. À¯ÀÏÇÑ ¹®Á¦·Î´Â : <itemize> <item>»çÀü¿¡ ¹«¾ùÀÌ Á¤¸»·Î °øÀ¯ÇÒ ÇÊ¿ä°¡ ÀÖ´ÂÁö ¾Æ´Â°Ô Èûµé´Ù. <item>°øÀ¯ ¸Þ¸ð¸®¿¡ °´Ã¼¸¦ ½ÇÁ¦·Î ÇÒ´çÇÏ´Â °ÍÀº °ñÄ¡¾ÆÇ ÀÛ¾÷ÀÌ´Ù. ƯÈ÷ ½ºÅÿ¡ ÇÒ´çµÇ´ø °´Ã¼ÀÎ °æ¿ì ´õ¿í ±×·¸´Ù. ¿¹¸¦ µé¾î, °øÀ¯ µ¥ÀÌÅ͸¦ º°µµÀÇ ¸Þ¸ð¸® ¿µ¿ª¿¡ ÇÒ´çÀ» ÇؾßÇÒ ÇÊ¿ä°¡ ÀÖ´Â °æ¿ì°¡ Àִµ¥, ÀÌ ¶§´Â º°µµÀÇ ¸Þ¸ð¸® ÇÒ´ç ÇÔ¼ö¸¦ »ç¿ëÇÏ°í, °¢ ÇÁ·Î¼¼½º°¡ À̸¦ ÂüÁ¶ÇÒ ¶§ ¶Ç´Ù¸¥ Æ÷ÀÎÅ͸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. </itemize> ÇöÀç ¸®´ª½º ÇÁ·Î¼¼½º ±×·ìµéÀÌ µ¶ÀÚÀûÀÎ ¸Þ¸ð¸® °ø°£À» °¡Áö¸é¼­, »ó´ëÀûÀ¸·Î ÀÛÀº ¸Þ¸ð¸® ¿µ¿ª¸¸À» ÇÔ²² °øÀ¯ÇÏ°Ô Çϴµ¥¿¡´Â µÎ°³ÀÇ À¯»çÇÑ ¹æ½ÄÀ» »ç¿ëÇÑ´Ù. ¸®´ª½º ½Ã½ºÅÛÀ» ¼³Á¤ÇÒ ¶§ ¹Ùº¸°°ÀÌ "System V IPC"¸¦ »©¹ö¸®Áö ¾Ê¾Ò´Ù¸é, ¸®´ª½º´Â "System V °øÀ¯ ¸Þ¸ð¸®"¶ó´Â ´Ù¸¥ ½Ã½ºÅÛ »çÀÌ¿¡¼­µµ ȣȯ¼ºÀÌ ÀÖ´Â ¹æ½ÄÀ» Á¦°øÇÑ´Ù. ´Ù¸¥ ¹æ½ÄÀº <tt>mmap()</tt> ½Ã½ºÅÛ ÄÝÀ» ÅëÇÏ¿© ¸Þ¸ð¸® ¸ÅÇÎ(memory mapping) ±â´ÉÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â ±¸Çö¹æ½ÄÀÌ UNIX ½Ã½ºÅÛ¸¶´Ù Å©°Ô Â÷ÀÌ°¡ ³­´Ù. À̵é È£Ãâ¿¡ ´ëÇؼ­´Â ¸Å´º¾ó ÆäÀÌÁöµé¿¡¼­ ¹è¿ï ¼ö ÀÖ´Ù. ±×¸®°í 2.5Àå°ú 2.6Àå¿¡ ³ª¿À´Â °³°ýÀº À̸¦ óÀ½ ½ÃÀÛÇÒ ¶§ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. <sect2>¿øÀÚ¼º°ú ¼ø¼­(Atomicity And Ordering) <p> À§ÀÇ µÎ°¡Áö ¸ðµ¨ Áß ¾î¶² °ÍÀ» »ç¿ëÇÏ´õ¶óµµ °á°ú´Â ¸Å¿ì ºñ½ÁÇÏ´Ù. ¿©·¯ºÐÀº ÀÚ½ÅÀÌ ¸¸µç º´·Ä ÇÁ·Î±×·¥¿¡ µé¾î ÀÖ´Â ¸ðµç ÇÁ·Î¼¼½ºµéÀÌ Á¢±ÙÇÏ¿© ÀÐ°í ¾µ¼ö ÀÖ´Â ¸Þ¸ð¸® Á¶°¢¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¾ò°Ô µÈ´Ù. ÀÌ ¸»Àº ³»°¡ ¸¸µç º´·Ä ÇÁ·Î±×·¥ÀÌ °øÀ¯ ¸Þ¸ð¸® °´Ã¼µéÀ» ¸¶Ä¡ º¸ÅëÀÇ Áö¿ª ¸Þ¸ð¸®¿¡ ÀÖ´Â °Íó·³ Á¢±ÙÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÏÁö´Â ¾Ê´Â´Ù. <bf>¿øÀÚ¼º</bf>À̶õ ÇÑ °´Ã¼¿¡ ´ëÇÑ ÀÛ¾÷ÀÌ ÂÉ°³ÁöÁö ¾Ê°í, Áß´ÜµÉ ¼ö ¾ø´Â ÀÏ·ÃÀÇ °úÁ¤À¸·Î ÀÌ·ç¾îÁö´Â °ÍÀ» °¡¸®Å°´Â °³³äÀÌ´Ù. ºÒÇàÈ÷µµ, °øÀ¯ ¸Þ¸ð¸®¿¡ ´ëÇÑ Á¢±ÙÀº °øÀ¯ ¸Þ¸ð¸®¿¡ ÀÖ´Â ÀÚ·á¿¡ ´ëÇÑ ¸ðµç ÀÛ¾÷ÀÌ ¿øÀÚÀûÀ¸·Î ÀÌ·ç¾îÁø´Ù´Â °ÍÀ» ³»Æ÷ÇÏÁø ¾Ê´Â´Ù. ¹Ì¸® Ưº°ÇÑ ÁÖÀǸ¦ ±â¿ïÁöÁö ¾Ê´Â´Ù¸é, ¹ö½º(bus)¿¡¼­ ´Ü Çѹø¸¸¿¡ 󸮰¡ ÀÌ·ç¾îÁö´Â °£´ÜÇÑ Àбâ/¾²±â ¿¬»ê¸¸ÀÌ (Áï, Á¤·ÄÀÌ µÈ 8, 16, 32 ºñÆ® ¿¬»êÀÌÁö, Á¤·ÄÀÌ ¾ÈµÇ¾î Àְųª 64 ºñÆ® ¿¬»êÀº ¾Æ´Ï´Ù) ¿øÀÚ¼ºÀ» °¡Áø´Ù. ´õ¿í ³ª»Û °ÍÀº, GCC°°ÀÌ "¶È¶ÈÇÑ" ÄÄÆÄÀÏ·¯´Â ÃÖÀûÈ­¸¦ ÅëÇØ ¸Þ¸ð¸® ÀÛ¾÷À» Á¦°ÅÇÏ¿©, ÇÑ ÇÁ·Î¼¼¼­°¡ ÇÑ ÀÏÀ» ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­ º¼ ¼ö ¾ø°Ô ¸¸µé¾î¹ö¸®±âµµ ÇÑ´Ù. ´ÙÇàÈ÷µµ, ÀÌµé ¹®Á¦µéÀº ¸ðµÎ °íÄ¥ ¼ö ÀÖ´Ù... Á¢±Ù È¿À²¼º(access efficiency)°ú ij½Ã¶óÀÎ Å©±â(cache line size) »çÀÌÀÇ °ü°è¸¸ °ÆÁ¤°Å¸®·Î ³²°ÜµÎ°í¼­ ¸»ÀÌ´Ù. ±×·¸Áö¸¸ ÀÌµé ³íÁ¡¿¡ ´ëÇؼ­ Åä·ÐÇϱâ Àü¿¡, À̵éÀº ¸ðµÎ °¢ ÇÁ·Î¼¼¼­¿¡¼­ÀÇ ¸Þ¸ð¸® ÂüÁ¶°¡ ÄÚµùÇÑ ¼ø¼­´ë·Î ÀÌ·ç¾îÁö°í ÀÖ´Ù°í °¡Á¤ÇÏ°í ÀÖ´Ù´Â °ÍÀ» ÁöÀûÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. PentiumÀº ±×·¸°Ô ÇÏ°í ÀÖÁö¸¸, ¾ÕÀ¸·Î ³ª¿Ã ÀÎÅÚÀÇ ÇÁ·Î¼¼¼­µéÀº ±×·¸Áö ¾ÊÀ» ¼öµµ ÀÖ´Ù´Â °Íµµ ±â¾ïÇϱ⠹ٶõ´Ù. µû¶ó¼­, ¾ÕÀ¸·Î ³ª¿Ã ÇÁ·Î¼¼¼­¿¡ ´ëºñÇÏ¿©, °øÀ¯ ¸Þ¸ð¸®¿¡ Á¢±ÙÇÏ´Â ÄÚµå ÁÖÀ§¸¦, ¸ðµç ¹Ì°áµÈ ¸Þ¸ð¸® Á¢±ÙÀ» ¿Ï·áÇÏ¿© ¸Þ¸ð¸® Á¢±ÙÀÌ Â÷·Ê´ë·Î ÀÌ·ç¾îÁöµµ·Ï ÇÏ´Â ¸í·É¾î·Î µÑ·¯½Î¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù´Â °ÍÀ» ±íÀÌ »õ±â±æ ¹Ù¶õ´Ù. <tt>CPUID</tt> ¸í·É¾î´Â ÀÌ·± ºÎ¼öÈ¿°ú(side-effect)¸¦ À§ÇØ ¿¹¾àµÇ¾î ÀÖ´Â °ÍÀÌ´Ù. <sect2>Èֹ߼º(Volatility) <p> GCC ¿ÉƼ¸¶ÀÌÀú(optimizer)°¡ °øÀ¯ ¸Þ¸ð¸® °´Ã¼ÀÇ °ªÀ» ·¹Áö½ºÅÍ¿¡ ¹öÆÛ¸µÇÏ´Â °ÍÀ» ¸·À¸·Á¸é, °øÀ¯ ¸Þ¸ð¸®¿¡ ÀÖ´Â ¸ðµç °´Ã¼µéÀ» <tt>volatile</tt> ¼Ó¼ºÀ» °¡Áöµµ·Ï ¼±¾ðÇØ¾ß ÇÑ´Ù. ÀÌ·¸°Ô Çϸé, ÇѹøÀÇ Á¢±Ù¸¸À¸·Î ÀÌ·ç¾îÁö´Â ¸ðµç °øÀ¯ °´Ã¼ÀÇ Àбâ/¾²±â´Â ¿øÀÚÀûÀ¸·Î ÀϾ°Ô µÈ´Ù. ¿¹¸¦ µé¾î, <em>p</em>°¡ Á¤¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÌ°í, ÀÌ°ÍÀÌ °¡¸®Å°°í ÀÖ´Â Á¤¼ö°¡ °øÀ¯ ¸Þ¸ð¸®¿¡ ÀÖ´Ù°í ÇÏÀÚ. ANSI C¿¡¼­´Â À̸¦ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. <code> volatile int * volatile p; </code> ÀÌ Äڵ忡¼­, ù¹ø° <tt>volatile</tt>´Â <tt>p</tt>°¡ °¡¸®Å°´Â <tt>int</tt> °ªÀ» ¸»Çϸç, µÎ¹ø° <tt>volatile</tt>´Â Æ÷ÀÎÅÍ ±× ÀÚü¸¦ ¸»ÇÑ´Ù. ¹°·Ð ÀÌ´Â ±ÍÂúÀº ÀÛ¾÷ÀÌÁö¸¸, GCC°¡ ¸Å¿ì °­·ÂÇÑ ÃÖÀûÈ­¸¦ ¼öÇàÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§Çؼ­ Ä¡·¯¾ß ÇÏ´Â °ÍÀÌ´Ù. Àû¾îµµ ÀÌ·ÐÀûÀ¸·Î´Â, GCC¿¡ <tt>-traditional</tt> ¿É¼ÇÀ» ÁÖ´Â °ÍÀ¸·Îµµ, ¸î°¡Áö ÃÖÀûÈ­¸¦ Èñ»ýÇÏ´Â ´ë½Å ¿Ã¹Ù¸¥ Äڵ带 ¸¸µé¾î³»´Âµ¥¿¡´Â ÃæºÐÇÏ´Ù. ¿Ö³ÄÇϸé ANSI K&R C ÀÌÀü¿¡´Â ¸ðµç º¯¼ö´Â µû·Î <tt>register</tt>¶ó°í ÁöÁ¤ÇÏÁö ¾ÊÀº ÀÌ»ó ¸ðµÎ volatileÀ̾ú±â ¶§¹®ÀÌ´Ù. ¿©ÀüÈ÷ GCC·Î <tt>cc -O6</tt>¿Í °°ÀÌ ÄÄÆÄÀÏÀ» ÇÏ°í, ÇÊ¿äÇÑ °Í¿¡¸¸ volatileÀ̶ó°í ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. ¸ðµç ÇÁ·Î¼¼¼­ÀÇ ·¹Áö½ºÅ͸¦ ¼öÁ¤ÇÏ´Â °ÍÀ¸·Î Ç¥½ÃµÇ¾î ÀÖ´Â ¾î¼Àºí¸®¾î ¶ô(lock)À» »ç¿ëÇϸé, GCC°¡ ¸ðµç º¯¼öµéÀ» ´Ù ³»º¸³»¼­(flush), <tt>volatile</tt>À̶ó°í ¼±¾ðÇÔÀ¸·Î½á ¹ß»ýÇÏ´Â "ºñÈ¿À²ÀûÀÎ" ÄÚµåµéÀ» ÇÇÇÒ ¼ö ÀÖ°Ô ÇÏ´Â È¿°ú°¡ ÀÖ´Ù´Â ¼Ò¹®ÀÌ ÀÖ¾î¿Ô´Ù. ÀÌ·± ¹æ¹ýÀº GCC 2.7.0À» »ç¿ëÇÏ´Â °æ¿ì, Á¤ÀûÀ¸·Î ÇÒ´çµÇ´Â Àü¿ªº¯¼ö¿¡ ´ëÇؼ­´Â Á¦´ë·Î µ¿ÀÛÇÏ´Â °Íó·³ º¸ÀδÙ... ±×·¸Áö¸¸, ÀÌ·± ÇൿÀº ANSI C Ç¥ÁØ¿¡¼­´Â ÇÊ¿äÇÏÁö ¾Ê´Ù. ´õ ³ª»Û °ÍÀº Àбâ Á¢±Ù¸¸À» ÇÏ´Â ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀº º¯¼ö °ªÀ» ¿µ¿øÈ÷ ·¹Áö½ºÅÍ¿¡ ¹öÆÛ¸µÀ» ÇÒ ¼ö À־, °øÀ¯ ¸Þ¸ð¸®ÀÇ °ªÀÌ ½ÇÁ¦·Î º¯ÇÏ´Â °ÍÀ» Àý´ë·Î ¾Ë¾ÆÂ÷¸®Áö ¸øÇÒ ¼öµµ ÀÖ´Ù. ¿ä¾àÇϸé, ÇÏ°í ½ÍÀº´ë·Î Çصµ ÁÁÁö¸¸, <tt>volatile</tt>¶ó°í ÁöÁ¤ÇÑ º¯¼ö¸¸ÀÌ Á¦´ë·Î µ¿ÀÛÇÑ´Ù´Â °ÍÀ» <em>º¸ÀåÇÒ ¼ö ÀÖ´Ù</em>. ÀÏ¹Ý º¯¼ö¿¡µµ <tt>volatile</tt> ¼Ó¼ºÀ» ¾Ï½ÃÇÏ´Â Çüº¯È¯(type cast)À» »ç¿ëÇÏ¿© volatile Á¢±ÙÀ» ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, º¸ÅëÀÇ <tt>int i;</tt>´Â <tt>*((volatile int *) &i);</tt>°°ÀÌ ¼±¾ðÇÏ¿© volatile·Î Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô Çϸé Èֹ߼º(volatility)ÀÌ ÇÊ¿äÇÑ °æ¿ì¿¡¸¸, ÀÌ·± ¿À¹öÇìµå¸¦ »ç¿ëÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. <sect2>¶ô(Locks) <p> <tt>++i;</tt>´Â Ç×»ó °øÀ¯ ¸Þ¸ð¸®¿¡ ÀÖ´Â º¯¼ö <tt>i</tt>¿¡ 1À» ´õÇÑ´Ù°í »ý°¢ÇØ¿Ô´Ù¸é, ´ÙÀ½ À̾߱â´Â Á¶±ÝÀº ³î¶ø°í ´çȲ½º·¯¿ïÁöµµ ¸ð¸£°Ú´Ù. ÇϳªÀÇ ¸í·ÉÀ¸·Î ÄÚµùÀ» Çß´Ù°í ÇÏ´õ¶óµµ, °ªÀ» ÀÐ°í °á°ú¸¦ ¾²´Â °ÍÀº º°µµÀÇ ¸Þ¸ð¸® ó¸®(transaction)À» ÅëÇؼ­ ÀÌ·ç¾îÁö¸ç, ÀÌ µÎ ó¸® »çÀÌ¿¡ ´Ù¸¥ ÇÁ·Î¼¼¼­°¡ <tt>i</tt>¿¡ Á¢±ÙÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î, µÎ°³ÀÇ ÇÁ·Î¼¼¼­°¡ ¸ðµÎ <tt>++i;</tt> ¸í·ÉÀ» ¼öÇàÇÏ¿´´Âµ¥, 2°¡ Áõ°¡ÇÏ´Â°Ô ¾Æ´Ï¶ó 1ÀÌ Áõ°¡ÇÒ ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀÎÅÚ PentiumÀÇ "±¸Á¶(Architecture)¿Í ÇÁ·Î±×·¡¹Ö ¸Å´º¾ó"¿¡ µû¸£¸é, <tt>LOCK</tt> Á¢µÎ¾î´Â ´ÙÀ½¿¡ ³ª¿À´Â ¸í·É¾î°¡ ±×°ÍÀÌ Á¢±ÙÇÏ´Â ¸Þ¸ð¸® À§Ä¡¿¡ ´ëÇØ ¿øÀÚÀûÀ¸·Î ÀÌ·ç¾îÁö´Â °ÍÀ» º¸ÀåÇϱâ À§ÇØ »ç¿ëµÈ´Ù. <code> BTS, BTR, BTC mem, reg/imm XCHG reg, mem XCHG mem, reg ADD, OR, ADC, SBB, AND, SUB, XOR mem, reg/imm NOT, NEG, INC, DEC mem CMPXCHG, XADD </code> ±×·¸Áö¸¸, ÀÌµé ¿¬»êÀ» ¸ðµÎ »ç¿ëÇÏ´Â °ÍÀº ±×´ÙÁö ÁÁÀº »ý°¢Àº ¾Æ´Ñ °Í °°´Ù. ¿¹¸¦ µé¾î, <tt>XADD</tt>´Â 386¿¡¼­´Â Á¸ÀçÇÏÁöµµ ¾Ê°í, µû¶ó¼­ À̸¦ »ç¿ëÇÏ´Â °ÍÀº ȣȯ¼ºÀÇ ¹®Á¦¸¦ ¹ß»ý½Ãų ¼ö ÀÖ´Ù. <tt>XCHG</tt> ¸í·É¾î´Â <tt>LOCK</tt> Á¢µÎ¾î°¡ ¾ø´õ¶óµµ Ç×»ó ¶ôÀ» »ç¿ëÇÑ´Ù. µû¶ó¼­ ÀÌ ¸í·É¾î´Â ¼¼¸¶Æ÷¾î(semaphore)³ª °øÀ¯ Å¥(shared queue)°°Àº °í¼öÁØÀÇ ¿øÀÚÀûÀÎ ±¸¼ºÃ¼¸¦ ¸¸µå´Â °æ¿ì¿¡ ÁÁÀº ¿øÀÚÀûÀÎ ¿¬»êÀÌ´Ù. ´ç¿¬È÷ C ÄÚµå·Î GCC°¡ ÀÌ ¸í·É¾î¸¦ ¸¸µé¾î³»µµ·Ï ÇÒ ¼ö´Â ¾ø´Ù. ´ë½Å ÀζóÀÎ(in-line) ¾î¼Àºí¸® Äڵ带 Á¶±Ý »ç¿ëÇØ¾ß ÇÑ´Ù. ¿öµå(word) Å©±âÀÇ volatile °´Ã¼ÀÎ <em>obj</em>¿Í ¿öµå Å©±âÀÇ ·¹Áö½ºÅÍ °ªÀÎ <em>reg</em>°¡ ÀÖ´Ù¸é, GCC ÀζóÀÎ ¾î¼Àºí¸® ÄÚµå´Â ´ÙÀ½°ú °°´Ù : <code> __asm__ __volatile__ ("xchgl %1,%0" :"=r" (reg), "=m" (obj) :"r" (reg), "m" (obj)); </code> ¶ô(lock)À» Çϴµ¥ ºñÆ®(bit) ¿¬»êÀ» »ç¿ëÇÏ´Â GCC ÀζóÀÎ ¾î¼Àºí¸® ÄÚµåÀÇ ¿¹Á¦°¡ <url url="ftp://caliban.physics.utoronto.ca/pub/linux/" name="bb_threads library">¶óÀ̺귯¸®ÀÇ ¼Ò½º Äڵ忡 ÀÖ´Ù. ¸Þ¸ð¸® ó¸®(transaction)¸¦ ¿øÀÚÀûÀ¸·Î ¸¸µå´Â °Í¿¡µµ ÀÌ¿¡ µû¸£´Â ºñ¿ëÀÌ ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. º¸ÅëÀÇ ÂüÁ¶´Â Áö¿ª ij½Ã¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â »ç½Ç¿¡ ºñÃ߾¸é, ¶ô(lock)À» ÇÏ´Â ¿¬»êÀº ¾à°£ÀÇ ¿À¹öÇìµå¸¦ ¼ö¹ÝÇÏ°í, ´Ù¸¥ ÇÁ·Î¼¼¼­ÀÇ ¸Þ¸ð¸® È°µ¿À» Áö¿¬½Ãų ¼ö ÀÖ´Ù. ¶ô(lock) ¿¬»êÀ» »ç¿ëÇÏ´Â °æ¿ì °¡Àå ÁÁÀº ¼º´ÉÀ» ³»°í ½Í´Ù¸é °¡´ÉÇÑ À̸¦ Àû°Ô »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ´õ ³ª¾Æ°¡ À̵é IA32 ¿øÀÚÀûÀÎ ¸í·É¾îµéÀº ´Ù¸¥ ½Ã½ºÅÛ°úÀÇ È£È¯¼ºÀÌ ¾ø´Ù. ¾î¶² ¼ø°£ÀÌµç ¸¹¾Æµµ ÇϳªÀÇ ÇÁ·Î¼¼¼­¸¸ÀÌ ÁÖ¾îÁø °øÀ¯ °´Ã¼¸¦ °»½ÅÇÏ´Â °ÍÀ» º¸ÀåÇÏ´Â ¿©·¯°¡Áö µ¿±âÈ­(synchronization) - <bf>»óÈ£ ¹èÁ¦(mutual exclusion)¸¦ Æ÷ÇÔÇÏ¿©</bf> - ¸¦ ±¸ÇöÇϴµ¥ º¸ÅëÀÇ ¸í·É¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ¿©·¯°¡Áö ´Ù¸¥ Á¢±Ù¹æ¹ýÀÌ ÀÖ´Ù. ´ëºÎºÐÀÇ OS ±³Àç¿¡¼­´Â ÀÌµé ±â¹ýÀ» Àû¾îµµ Çϳª ÀÌ»ó¾¿Àº ´Ù·ç°í ÀÖ´Ù. Abraham Silberschatz¿Í Peter B GalvinÀÌ ÁöÀº <em>¿î¿µÃ¼Á¦ °³³ä(Operating System Concepts)</em> 4ÆÇ(ISBN 0-201-50480-4)¿¡¼­ À̸¦ ¾ÆÁÖ Àß ´Ù·ç°í ÀÖ´Ù. <sect2>ij½Ã¶óÀÎ Å©±â(Cache Line Size) <p> ¿øÀÚ¼º¿¡ °ü·ÃµÈ ±âº»ÀûÀÎ °ÍÀ¸·Î¼­ SMP ¼º´É¿¡ Å« ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖ´Â °ÍÀ¸·Î ij½Ã¶óÀÎ Å©±â°¡ ÀÖ´Ù. MPS Ç¥ÁØ¿¡´Â ¾î¶² ij½Ã°¡ »ç¿ëµÇµçÁö °£¿¡ ÂüÁ¶´Â ÀÏ°üÀûÀ̾î¾ß ÇÑ´Ù°í ÇÏ°í ÀÖÁö¸¸, »ç½ÇÀº ÇϳªÀÇ ÇÁ·Î¼¼¼­°¡ ¸Þ¸ð¸®ÀÇ Æ¯Á¤ ¶óÀο¡ ±â·ÏÀ» ÇÒ ¶§, ÀÌÀü ¶óÀÎÀÇ Ä³½ÃµÈ º¹»çº»ÀÌ ¸ðµÎ ¹«È¿È­(invalidate)µÇ°Å³ª °»½Å(update)µÇ¾î¾ß ÇÑ´Ù. ÀÌ ¸»Àº µÎ °³³ª ±× ÀÌ»óÀÇ ÇÁ·Î¼¼¼­°¡ µ¿½Ã¿¡ °°Àº ¶óÀÎÀÇ ´Ù¸¥ ºÎºÐ¿¡ µ¥ÀÌÅ͸¦ ±â·ÏÇÏ·Á°í Çϸé, »ó´ç·®ÀÇ Ä³½Ã¿Í ¹ö½º ÅëÇà(traffic)ÀÌ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¸ç, ½ÇÁúÀûÀ¸·Î ij½Ã¿¡¼­ ij½Ã·Î ¶óÀÎÀ» Àü´ÞÇÏ°Ô µÈ´Ù. ÀÌ ¹®Á¦´Â <bf>À߸øµÈ °øÀ¯(false sharing)</bf>¶ó°í ÇÑ´Ù. ±× ÇØ°áÃ¥Àº <em>º´·Ä·Î Á¢±ÙµÇ´Â µ¥ÀÌÅÍ°¡ µÇµµ·ÏÀÌ¸é °¢ ÇÁ·Î¼¼¼­¸¶´Ù ´Ù¸¥ ij½Ã ¶óÀο¡¼­ ¿Ã ¼ö ÀÖµµ·Ï µ¥ÀÌÅ͸¦ Á¶Á÷È­Çϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù.</em> À߸øµÈ °øÀ¯´Â L2 ij½Ã¸¦ »ç¿ëÇÏ´Â ½Ã½ºÅÛ¿¡¼­´Â ¹®Á¦°¡ ¾ÈµÉ°Å¶ó°í »ý°¢ÇÒ ¼öµµ ÀÖ°ÚÁö¸¸, ¿©ÀüÈ÷ º°µµÀÇ L1 ij½Ã°¡ ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ. ij½ÃÀÇ Á¶Á÷°ú ±¸º°µÈ º°µµÀÇ ·¹º§ÀÇ °¹¼ö´Â ¸ðµÎ º¯ÇÒ ¼ö ÀÖÁö¸¸, Pentium L1 ij½Ã¶óÀÎ Å©±â´Â 32 ¹ÙÀÌÆ®ÀÌ°í, ÀüÇüÀûÀÎ ¿ÜÀåÇü ij½Ã¶óÀÎ Å©±â´Â 256 ¹ÙÀÌÆ® °¡·®ÀÌ´Ù. µÎ Ç׸ñÀÇ ÁÖ¼Ò°¡ (¹°¸®Àû ÁÖ¼ÒÀ̵ç, °¡»ó ÁÖ¼ÒÀ̵ç) <em>a</em>¿Í <em>b</em>ÀÌ°í, °¡Àå Å« ÇÁ·Î¼¼¼­´ç ij½Ã¶óÀÎ Å©±â°¡ <em>c</em>ÀÌ°í, À̵éÀº ¸ðµÎ 2ÀÇ ¸î Á¦°ö½ÂÀ̶ó°í ÇÏÀÚ. ¸Å¿ì ¾ö¹ÐÇÏ°Ô Çϸé, <tt>((int) <em>a</em>) & ~(<em>c</em> - 1)</tt>¿Í <tt>((int) <em>b</em>) & ~(<em>c</em> - 1)</tt>ÀÌ °°À» ¶§, µÎ°³ÀÇ ÂüÁ¶°¡ ¶È°°Àº ij½Ã¶óÀο¡ Á¸ÀçÇÏ°Ô µÈ´Ù. ´õ ±ÔÄ¢À» °£´ÜÈ­ÇÏ¸é º´·Ä·Î ÂüÁ¶µÇ´Â °øÀ¯ °´Ã¼°¡ Àû¾îµµ <em>c</em> ¹ÙÀÌÆ®°¡ ¶³¾îÁ® ÀÖ´Ù¸é, À̵éÀº ´Ù¸¥ ij½Ã ¶óÀÎÀ¸·Î ¸ÅÇÎÀÌ µÈ´Ù´Â °ÍÀÌ´Ù. <sect2>¸®´ª½º ½ºÄÉÁÙ·¯ ³íÁ¡(Linux Scheduler Issues) <p> º´·Ä󸮿¡¼­ °øÀ¯ ¸Þ¸ð¸®¸¦ »ç¿ëÇÏ´Â ÀüÀûÀÎ ÀÌÀ¯´Â OSÀÇ ¿À¹öÇìµå¸¦ ÇÇÇÏÀÚ´Â °ÍÀÌÁö¸¸, OS ¿À¹öÇìµå´Â Åë½Å ±× ÀÚü ¿ÜÀÇ °Í¿¡¼­ ¹ß»ýÇϱ⵵ ÇÑ´Ù. ¿ì¸®´Â ÀÌ¹Ì ¸¸µé¾î¾ß ÇÒ ÇÁ·Î¼¼½ºÀÇ °¹¼ö°¡ ±â°è¿¡ ÀÖ´Â ÇÁ·Î¼¼¼­ÀÇ °¹¼öº¸´Ù °°°Å³ª À۾ƾßÇÑ´Ù°í ¸»Çß¾ú´Ù. ±×·¯³ª Á¤È®È÷ ¾ó¸¶³ª ¸¹Àº ÇÁ·Î¼¼½º¸¦ ¸¸µé¾î¾ß ÇÒ Áö ¾î¶»°Ô °áÁ¤ÇÒ ¼ö ÀÖÀ»±î? ÃÖ°íÀÇ ¼º´ÉÀ» ³»·Á¸é, <em>¿©·¯ºÐÀÌ ÀÛ¼ºÇÑ º´·Ä ÇÁ·Î±×·¥¿¡ ÀÖ´Â ÇÁ·Î¼¼½ºÀÇ °¹¼ö´Â, ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­ °è¼ÓÇؼ­ ½ÇÇàµÉ ¼ö ÀÖ´Â ÇÁ·Î¼¼½ºÀÇ °¹¼öÇÏ°í °°¾Æ¾ß ÇÑ´Ù</em>. ¿¹¸¦ µé¾î, ³×°³ÀÇ ÇÁ·Î¼¼¼­°¡ ÀÖ´Â SMP ½Ã½ºÅÛ¿¡¼­ ÇϳªÀÇ ÇÁ·Î¼¼½º°¡ ´Ù¸¥ ¸ñÀûÀ¸·Î (¿¹¸¦ µé¾î WWW ¼­¹ö) µ¿ÀÛÇÏ°í ÀÖ´Ù¸é, ¿©·¯ºÐÀÌ ¸¸µç º´·Ä ÇÁ·Î±×·¥Àº ¼¼°³ÀÇ ÇÁ·Î¼¼½º¸¸À» »ç¿ëÇØ¾ß ÇÑ´Ù. ½Ã½ºÅÛ¿¡ ¸î °³ÀÇ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ ÀÖ´ÂÁö´Â <tt>uptime</tt> ¸í·É¿¡¼­ µ¹·ÁÁÖ´Â "Æò±Õ ºÎÇÏ(load average)"¸¦ ÂüÁ¶ÇÏ¿© ´ë°­Àº ¾Ë ¼ö ÀÖ´Ù. ´Ù¸¥ ¹æ¹ýÀ¸·Î <tt>renice</tt> ¸í·ÉÀ̳ª <tt>nice()</tt> ½Ã½ºÅÛ ÄÝ °°Àº °ÍÀ» ÀÌ¿ëÇÏ¿© º´·Ä ÇÁ·Î±×·¥¿¡ ÀÖ´Â ÇÁ·Î¼¼½ºÀÇ ¿ì¼±¼øÀ§(priority)¸¦ ³ôÀÏ ¼öµµ ÀÖ´Ù. ¿ì¼±¼øÀ§¸¦ ³ôÀÌ·Á¸é ±ÇÇÑÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ »ý°¢Àº ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ ÇÁ·Î¼¼¼­¿¡¼­ 쫒¾Æ³»¼­ ÀÚ½ÅÀÌ ¸¸µç ÇÁ·Î±×·¥ÀÌ ¸ðµç ÇÁ·Î¼¼¼­¿¡¼­ °è¼ÓÇؼ­ ½ÇÇàµÉ ¼ö ÀÖ°Ô ÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀº <url url="http://luz.cs.nmt.edu/~rtlinux/"> ¿¡ ÀÖ´Â ½Ç½Ã°£(real-time) ½ºÄÉÁÙ·¯¸¦ Á¦°øÇÏ´Â SMP ¸®´ª½ºÀÇ ÇÁ·ÎÅäŸÀÔ(prototype) ¹öÀüÀ» »ç¿ëÇϸé Á»´õ È®½ÇÇÏ°Ô ´Þ¼ºÇÒ ¼ö ÀÖ´Ù ¿©·¯ºÐÀÌ SMP ½Ã½ºÅÛÀ» º´·Ä ±â°è·Î »ç¿ëÇÏ´Â À¯ÀÏÇÑ »ç¿ëÀÚ°¡ ¾Æ´Ï¶ó¸é, °è¼Ó ½ÇÇàÇÏ·Á°í ÇÏ´Â µÎ °³ ÀÌ»óÀÇ º´·Ä ÇÁ·Î±×·¥ »çÀÌ¿¡ Ãæµ¹ÀÌ ºú¾îÁú ¼öµµ ÀÖ´Ù. ÀÌÀÇ Ç¥ÁØ ÇØ°á¹æ¹ýÀº <bf>Á¶´ÜÀ§(gang) ½ºÄÉÁÙ¸µ</bf> - Áï µ¿½Ã¿¡ ÇϳªÀÇ º´·Ä ÇÁ·Î±×·¥¿¡ ¼ÓÇÏ´Â ÇÁ·Î¼¼½ºµé¸¸ÀÌ ½ÇÇàµÉ ¼ö ÀÖµµ·Ï ½ºÄÉÁÙ¸µ ¿ì¼±¼øÀ§¸¦ ´Ù·ç´Â °ÍÀÌ´Ù. ±×·¸Áö¸¸ Çϳª ÀÌ»óÀ» º´·Äó¸®ÇÏ¸é °á°ú°¡ ´Ê°Ô µ¹¾Æ¿À°í, ½ºÄÉÁÙ·¯ÀÇ È°µ¿ÀÌ ¿À¹öÇìµå¸¦ ´õÇÏ°Ô µÈ´Ù´Â °ÍÀ» »ó±âÇϱ⠹ٶõ´Ù. µû¶ó¼­, ¿¹¸¦ µé¾î ³× °³ÀÇ ÇÁ·Î¼¼¼­¸¦ °¡Áø ½Ã½ºÅÛ¿¡ µÎ °³ÀÇ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù¸é, µÎ °³ÀÇ ÇÁ·Î¼¼½º¸¦ °¢°¢ ½ÇÇàÇÏ´Â °ÍÀÌ, µÎ °³ÀÇ ÇÁ·Î±×·¥ÀÌ ³×°³ÀÇ ÇÁ·Î¼¼½º¸¦ °¢°¢ »ç¿ëÇϸ鼭 Á¶´ÜÀ§ ½ºÄÉÁÙ¸µÀ» ÇÏ´Â °Íº¸´Ù ´õ ³´´Ù. ÀÌ·± ¹®Á¦¸¦ ´õ ²¿ÀÌ°Ô ÇÏ´Â °ÍÀÌ Çϳª ´õ ÀÖ´Ù. ¿©·¯ºÐÀÌ ³·¿¡´Â Á¾ÀÏ °úÁßÇÏ°Ô »ç¿ëµÇ°í ÀÖÁö¸¸, ¹ã¿¡´Â ¿ÏÀüÈ÷ º´·Ä󸮿ëÀ¸·Î¸¸ »ç¿ë°¡´ÉÇÑ ±â°è¿¡¼­ ÇÁ·Î±×·¥À» °³¹ßÇÏ°í ÀÖ´Ù°í ÇÏÀÚ. ¿©·¯ºÐÀº ³·¿¡ Å×½ºÆ®¸¦ Çϴ°ÍÀÌ ´À¸®´Ù´Â °ÍÀ» ¾Ë´õ¶óµµ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ°í ÀÛ¼ºÇÑ Äڵ带 Å×½ºÆ®ÇÏ°í ¼öÁ¤Çϱâ À§ÇØ ¸ðµç °¹¼öÀÇ ÇÁ·Î¼¼½º¸¦ ¸¸µé¾î »ç¿ëÇÒ °ÍÀÌ´Ù. ±×·±µ¥, ÇÁ·Î¼¼½ºµéÀÌ ÇöÀç ½ÇÇàµÇ°í ÀÖÁö ¾Ê´Â (´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­) ´Ù¸¥ ÇÁ·Î¼¼½º¿Í °øÀ¯ ¸Þ¸ð¸®·Î °ªÀ» Àü´ÞÇϱ⸸À» ¾Æ¹«°Íµµ ÇÏÁö ¾Ê°í ±â´Ù¸®°í ÀÖ´Ù¸é, À̵é ÀÛ¾÷Àº ¸Å¿ì ´À·ÁÁú °ÍÀÌ´Ù. ÀÌ¿Í ¶È°°Àº ¹®Á¦´Â Äڵ带 ÇϳªÀÇ ÇÁ·Î¼¼¼­¹Û¿¡ ¾ø´Â ½Ã½ºÅÛ¿¡¼­ °³¹ßÇÏ°í Å×½ºÆ®ÇÏ´Â °æ¿ì¿¡µµ ¹ß»ýÇÑ´Ù. ÇØ°áÃ¥Àº Äڵ忡¼­ ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­ ÀϾ´Â µ¿ÀÛÀ» ÇÏ¿°¾øÀÌ ±â´Ù·Á¾ß ÇÏ´Â ºÎºÐ¿¡, ¸®´ª½º°¡ ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Â ±âȸ¸¦ ÁÖµµ·Ï ÇÔ¼ö È£ÃâÀ» Áý¾î³Ö´Â °ÍÀÌ´Ù. ³ª´Â C ¸ÅÅ©·Î¸¦ »ç¿ëÇϴµ¥ À̸¦ ÇÏ´Â ¸ÅÅ©·Î¸¦ <tt>IDLE_ME</tt>¶ó°í ºÎ¸£°í ÀÖ´Ù. ÇÁ·Î±×·¥À» Å×½ºÆ®Çϱâ À§Çؼ­ ÄÄÆÄÀÏÀ» ÇÒ¶§´Â <tt>cc -DIDLE_ME=usleep(1)</tt> °°ÀÌ ÇÏ°í, "Á¦Ç°"À¸·Î ½ÇÇàÇÒ ¶§¿¡´Â <tt>cc -DIDLE_ME={}</tt>°°ÀÌ ÄÄÆÄÀÏÀ» ÇÑ´Ù. <tt>usleep(1)</tt>Àº 1/1000 Ãʵ¿¾È ÇÁ·Î¼¼½º°¡ Àáµé°Ô ÇÏ¿©, ¸®´ª½º ½ºÄÉÁÙ·¯°¡ ±× ÇÁ·Î¼¼¼­¿¡¼­ ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇϵµ·Ï ¼±ÅÃÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. ÇÁ·Î¼¼½ºÀÇ °¹¼ö°¡ »ç¿ë°¡´ÉÇÑ ÇÁ·Î¼¼¼­ÀÇ °¹¼öº¸´Ù µÎ¹èÀÌ»ó ¸¹´Ù¸é, <tt>usleep(1)</tt>¸¦ »ç¿ëÇÏ´Â Äڵ尡 À̸¦ »ç¿ëÇÏÁö ¾Ê´Â Äڵ庸´Ù ¿­¹èÀÌ»ó ºü¸£°Ô ½ÇÇàµÇ´Â °ÍÀº ±×¸® ÀÌ»óÇÑ ÀÏÀÌ ¾Æ´Ï´Ù. <!-- ------------------------------------------------------------- --> <sect1>bb_threads <!-- ------------------------------------------------------------- --> <p> bb_threads("Bare Bones(»À¸¸³²Àº)" threads) ¶óÀ̺귯¸®(<url url="ftp://caliban.physics.utoronto.ca/pub/linux/">)´Â ¸®´ª½º <tt>clone()</tt> È£ÃâÀÇ »ç¿ë¹ýÀ» º¸¿©ÁÖ´Â ¾ÆÁÖ °£´ÜÇÑ ¶óÀ̺귯¸®ÀÌ´Ù. tar ÆÄÀÏÀ» gzipÀ¸·Î ¾ÐÃàÇÏ¸é °Ü¿ì 7K ¹ÙÀÌÆ®¹Û¿¡ µÇÁö ¾Ê´Â´Ù! ÀÌ ¶óÀ̺귯¸®´Â 2.4Àå¿¡¼­ ¼³¸íÇÏ´Â LinuxThreads ¶óÀ̺귯¸® ¶§¹®¿¡ ÀÌÁ¦ Çѹ°°£ °ÍÀÌ µÇ¾úÁö¸¸, ¿©ÀüÈ÷ ¾µ¸¸ÇÏ°í, ÀÛ°í °£´ÜÇÏ¿© ¸®´ª½º¿¡¼­ Áö¿øÇÏ´Â ¾²·¹µåÀÇ »ç¿ë¹ýÀ» ¼Ò°³Çϴµ¥¿¡µµ ¾Ë¸Â´Ù. ºÐ¸íÈ÷ LinuxThreads¿ë ¼Ò½ºÄڵ带 º¸´Â °Íº¸´Ù ÀÌ Äڵ带 º¸´Â °ÍÀÌ ÈξÀ ´ú ±âÁ×À» °ÍÀÌ´Ù. ¿ä¾àÇϸé bb_threads ¶óÀ̺귯¸®´Â ½ÃÀÛÇϱâ ÁÁÀº ÁöÁ¡ÀÌÁö¸¸, Å« ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé¶§¿¡´Â Àû´çÇÏÁø ¾Ê´Ù. bb_threads ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÇ ±âº»ÀûÀÎ ±¸Á¶´Â ´ÙÀ½°ú °°´Ù : <enum> <item>ÇϳªÀÇ ÇÁ·Î¼¼½º·Î ÇÁ·Î±×·¥À» ½ÃÀÛÇÑ´Ù. <item> ÀÌÁ¦ °¢°¢ÀÇ ¾²·¹µå°¡ ÇÊ¿ä·Î ÇÏ´Â ÃÖ´ë ½ºÅÃÀÇ Å©±â¸¦ °è»êÇØ¾ß ÇÑ´Ù. À̸¦ Å©°Ô Àâ´õ¶óµµ ±×´ÙÁö ÇØ°¡ µÇÁö ¾Ê´Â´Ù (ÀÌ°ÍÀº °¡»ó ¸Þ¸ð¸®°¡ Á¸ÀçÇÏ´Â ÀÌÀ¯ÁßÀÇ ÇϳªÀÌ´Ù). ±×·¯³ª ¸ðµç ½ºÅÃÀº ÇϳªÀÇ °¡»ó ÁÖ¼Ò °ø°£¿¡¼­ ³ª¿À±â ¶§¹®¿¡, ³Ê¹« Å©°Ô Àâ´Â °Íµµ ÁÁÀº»ý°¢ÀÌ ¾Æ´Ï´Ù. ¿¹Á¦¿¡¼­´Â 64K¸¦ »ç¿ëÇÏ°í ÀÖ´Ù. ÀÌ Å©±â¸¦ <em>b</em> ¹ÙÀÌÆ®·Î ¼³Á¤ÇÏ·Á¸é <tt>bb_threads_stacksize(<em>b</em>)</tt>¸¦ È£ÃâÇÑ´Ù. <item> ´ÙÀ½ ´Ü°è´Â ÇÊ¿äÇÑ ¶ô(lock)µéÀ» ¸ðµÎ ÃʱâÈ­ÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¶óÀ̺귯¸®¿¡¼­ ±¸ÇöµÈ ¶ô ¸ÞÄ¿´ÏÁòÀº ¶ô¿¡ 0ºÎÅÍ <tt>MAX_MUTEXES</tt>±îÁö ¼ýÀÚ¸¦ ºÙÀÌ´Â °ÍÀÌ´Ù. ¶ô <em>i</em>¸¦ ÃʱâÈ­ÇÏ·Á¸é <tt>bb_threads_mutexcreate(<em>i</em>)</tt>¸¦ È£ÃâÇÑ´Ù. <item> ¶óÀ̺귯¸® ·çƾÀ» È£ÃâÇÏ¿© »õ·Î¿î ¾²·¹µå¸¦ ¸¸µç´Ù. ¿©±â¿¡ ÀÎÀÚ·Î »õ·Î¿î ¾²·¹µå°¡ ½ÇÇàÇÒ ÇÔ¼ö¿Í, ¿©±â¿¡ Àü´ÞÇÒ ÀÎÀÚµéÀ» ³Ñ°ÜÁØ´Ù. ÀÎÀÚ·Î <em>arg</em> Çϳª¸¸ ¹Þ°í, ¾Æ¹«°Íµµ µ¹·ÁÁÖÁö ¾Ê´Â ÇÔ¼ö <em>f</em>¸¦ ½ÇÇàÇÏ´Â ¾²·¹µå¸¦ »õ·Î ¸¸µç´Ù¸é, ÇÔ¼ö <em>f</em>>¸¦ <tt>void <em>f</em>(void *arg, size_t dummy)</tt> ó·³ ¼±¾ðÀ» ÇÏ°í <tt>bb_threads_newthread(<em>f</em>, &arg)</tt>ÇÔ¼ö¸¦ ºÎ¸£¸é µÈ´Ù. Çϳª ÀÌ»óÀÇ ÀÎÀÚ¸¦ Àü´ÞÇؾßÇÏ´Â °æ¿ì ÀÎÀÚ °ªµéÀ» °¡Áö°í ÀÖ´Â ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ³Ñ°ÜÁÖ¸é µÈ´Ù. <item> º´·Ä Äڵ带 ½ÇÇàÇÑ´Ù. ¶ôÀ» »ç¿ëÇÏ´Â <tt>bb_threads_lock(<em>n</em>)</tt>¿Í <tt>bb_threads_unlock(<em>n</em>)</tt> ÇÔ¼ö¸¦ »ç¿ëÇÒ ¶§ ÁÖÀǸ¦ ±â¿ïÀδ٠(¿©±â¼­ <em>n</em>Àº »ç¿ëÇÒ ¶ôÀ» ÁöÁ¤ÇÑ´Ù). ÀÌ ¶óÀ̺귯¸®¿¡ ÀÖ´Â ¶ôÀ» °É°í ¶ôÀ» ÇØÁ¦ÇÏ´Â ¿¬»êÀº ¿øÀÚÀûÀÎ ¹ö½º-¶ô(bus-lock) ¸í·É¾î¸¦ »ç¿ëÇÏ´Â ¸Å¿ì ±âº»ÀûÀÎ ½ºÇɶô(spin lock)ÀÌ´Ù. ±×·¡¼­ °úµµÇÑ ¸Þ¸ð¸® Á¢±Ù Ãæµ¹À» ÀÏÀ¸Å³ ¼ö ÀÖÀ¸¸ç, ¾î¶² Á¢±Ùµµ °øÁ¤ÇÏ´Ù´Â °ÍÀ» º¸ÁõÇÒ ¼ö ¾ø´Ù. bb_threads¿¡ ÇÔ²² µþ·Á¿À´Â ¿¹Á¦ ÇÁ·Î±×·¥¿¡¼­ º¸¸é ÇÔ¼ö <tt>fnn</tt>°ú <tt>main</tt>¿¡¼­ µ¿½Ã¿¡ <tt>printf()</tt>¸¦ ½ÇÇàÇÏ´Â °ÍÀ» ¸·´Âµ¥¿¡ ¶ôÀ» ¿Ç¹Ù¸£°Ô »ç¿ëÇÏÁö ¾Ê°í ÀÖ´Ù. ÀÌ°Í ¶§¹®¿¡ ¿¹Á¦´Â Ç×»ó µ¿ÀÛÇÏÁö´Â ¾Ê´Â´Ù. ³»°¡ ÀÌ ¸»À»ÇÏ´Â °ÍÀº ¿¹Á¦ ÇÁ·Î±×·¥¿¡ Æ®ÁýÀ» Àâ±â À§Çؼ­°¡ ¾Æ´Ï¶ó, ÀÌ°ÍÀÌ <em>¸Å¿ì ´Ù·ç±â ¾î·Æ´Ù</em>´Â °Í°ú LinuxThreads¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Á¶±Ý ½±´Ù´Â °É °­Á¶Çϱâ À§Çؼ­ÀÌ´Ù. <item> ¾²·¹µå°¡ <tt>return</tt> ¸í·ÉÀ» ½ÇÇàÇϸé, ÀÌ´Â ½ÇÁ¦ÀûÀ¸·Î ÇÁ·Î¼¼½º¸¦ Á×ÀÌ°Ô µÈ´Ù. ±×·¯³ª Áö¿ª ½ºÅà ¸Þ¸ð¸®´Â ÀÚµ¿À¸·Î ÇÒ´çÀÌ ÇØÁ¦µÇÁö ¾Ê´Â´Ù. ¾ö¹ÐÇÏ°Ô ¸»ÇÏ¸é ¸®´ª½º´Â ÇÒ´ç ÇØÁ¦¸¦ Áö¿øÇÏÁö ¾ÊÀ¸¸ç, ¸Þ¸ð¸® °ø°£Àº ÀÚµ¿À¸·Î <tt>malloc()</tt>ÀÇ »ç¿ëÇÏÁö ¾Ê´Â ¸Þ¸ð¸® ¸ñ·Ï(free list)À¸·Î µÇµ¹¾Æ°¡ Ãß°¡µÇÁö ¾Ê´Â´Ù. µû¶ó¼­ ºÎ¸ð ÇÁ·Î¼¼½º´Â Á×Àº ÀÚ½Ä ÇÁ·Î¼¼½º¸¶´Ù <tt>bb_threads_cleanup(wait(NULL))</tt>¸¦ ºÒ·¯¼­ ÀÌ °ø°£À» ¹Ý³³ÇØ¾ß ÇÑ´Ù. </enum> <p> ´ÙÀ½ C ÇÁ·Î±×·¥Àº 1.3Àå¿¡¼­ ¼³¸íÇÑ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿©, µÎ°³ÀÇ bb_threads ¾²·¹µå¸¦ ÀÌ¿ëÇؼ­ ÆÄÀÌ(pi)ÀÇ ±Ù»çÄ¡¸¦ °è»êÇÑ´Ù. <code> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include "bb_threads.h" volatile double pi = 0.0; volatile int intervals; volatile int pids[2]; /* Unix PIDs of threads */ void do_pi(void *data, size_t len) { register double width, localsum; register int i; register int iproc = (getpid() != pids[0]); /* set width */ width = 1.0 / intervals; /* do the local computations */ localsum = 0; for (i=iproc; i<intervals; i+=2) { register double x = (i + 0.5) * width; localsum += 4.0 / (1.0 + x * x); } localsum *= width; /* get permission, update pi, and unlock */ bb_threads_lock(0); pi += localsum; bb_threads_unlock(0); } int main(int argc, char **argv) { /* get the number of intervals */ intervals = atoi(argv[1]); /* set stack size and create lock... */ bb_threads_stacksize(65536); bb_threads_mutexcreate(0); /* make two threads... */ pids[0] = bb_threads_newthread(do_pi, NULL); pids[1] = bb_threads_newthread(do_pi, NULL); /* cleanup after two threads (really a barrier sync) */ bb_threads_cleanup(wait(NULL)); bb_threads_cleanup(wait(NULL)); /* print the result */ printf("Estimation of pi is %f\n", pi); /* check-out */ exit(0); } </code> <!-- ------------------------------------------------------------- --> <sect1>LinuxThreads <!-- ------------------------------------------------------------- --> <p> LinuxThreads <url url="http://pauillac.inria.fr/~xleroy/linuxthreads/"> ´Â POSIX 1003.1c ¾²·¹µå Ç¥ÁØ¿¡ µû¶ó "¸ðµÎ °øÀ¯ÇÏ´Â" ¹æ½ÄÀ» ¿ÏÀüÇÏ°í Æ°Æ°ÇÏ°Ô ±¸ÇöÇÑ °ÍÀÌ´Ù. ´Ù¸¥ POSIX ¾²·¹µå¸¦ Æ÷ÆÃÇÑ °Í°ú´Â ´Þ¸®, LinuxThreads´Â bb_threads¿¡¼­ »ç¿ëÇÑ °Í°ú ¶È°°Àº ¸®´ª½º Ä¿³ÎÀÇ ¾²·¹µå(<tt>clone()</tt>)¸¦ »ç¿ëÇÑ´Ù. POSIX¿Í ȣȯµÈ´Ù´Â °ÍÀº ´Ù¸¥ ½Ã½ºÅÛ¿¡¼­ ¸¸µç »ó´ç¼öÀÇ ¾²·¹µå ÇÁ·Î±×·¥µéÀ» »ó´ëÀûÀ¸·Î ½±°Ô Æ÷ÆÃÇÒ ¼ö ÀÖÀ¸¸ç, Âü°íÇÒ ¼ö ÀÖ´Â ´Ù¾çÇÑ ¿¹Á¦°¡ ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. °£´ÜÈ÷ ¸»ÇØ, LinuxThreads´Â ¸®´ª½º¿¡¼­ ¹æ´ëÇÑ ±Ô¸ðÀÇ ¾²·¹µå ÇÁ·Î±×·¥À» °³¹ßÇÒ ¶§ »ç¿ëÇÒ ¼ö ÀÖ´Â È®½ÇÇÑ ¾²·¹µå ÆÐÅ°ÁöÀÌ´Ù. LinuxThreads ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â ±âº» ÇÁ·Î±×·¥ ±¸Á¶´Â ´ÙÀ½°ú °°´Ù : <enum> <item> ÇϳªÀÇ ÇÁ·Î¼¼½º·Î ÇÁ·Î±×·¥À» ½ÃÀÛÇÑ´Ù. <item> ´ÙÀ½ ´Ü°è´Â ÇÊ¿äÇÑ ¶ô(lock)µéÀ» ¸ðµÎ ÃʱâÈ­ÇÏ´Â °ÍÀÌ´Ù. ¼ýÀÚ·Î ±¸º°µÇ´Â bb_threads ¶ô°ú´Â ´Þ¸® POSIX ¶ôµéÀº <tt>pthread_mutex_t</tt>ŸÀÔ(type)ÀÇ º¯¼ö·Î ¼±¾ðµÈ´Ù. <tt>pthread_mutex_init(&lock,val)</tt>ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ÇÊ¿äÇÑ °¢°¢ÀÇ ¶ôµéÀ» ÃʱâÈ­ÇÑ´Ù. <item> bb_threads¿¡¼­Ã³·³ »õ·Î¿î ¾²·¹µå¸¦ ¸¸µé·Á¸é ¶óÀ̺귯¸® ·çƾÀ» È£ÃâÇØ¾ß ÇÑ´Ù. ¿©±â¼­ ÀÎÀÚ´Â »õ·Î¿î ¾²·¹µå°¡ ½ÇÇàÇÒ ÇÔ¼ö¿Í, ¿©±â¿¡ Àü´ÞÇÒ ÀÎÀÚµéÀÌ´Ù. ±×·¸Áö¸¸ POSIX¿¡¼­´Â »ç¿ëÀÚ°¡ °¢ ¾²·¹µå¸¦ ±¸º°ÇÒ ¼ö ÀÖµµ·Ï <tt>pthread_t</tt> ŸÀÔÀÇ º¯¼ö¸¦ Á¤ÀÇÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù. <tt>f()</tt> ÇÔ¼ö¸¦ ½ÇÇàÇÏ´Â <tt>pthread_t</tt> ¾²·¹µå¸¦ »ý¼ºÇÏ·Á¸é <tt>pthread_create(&thread,NULL,f,&arg)</tt>¸¦ È£ÃâÇÑ´Ù. <item> º´·Ä Äڵ带 ½ÇÇàÇÑ´Ù. ÇÊ¿äÇÑ °æ¿ì¿¡ <tt>pthread_mutex_lock(&lock)</tt>¿Í <tt>pthread_mutex_unlock(&lock)</tt>¸¦ È£ÃâÇϵµ·Ï ÁÖÀÇÇÑ´Ù. <item> <tt>pthread_join(thread,&retval)</tt> ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© °¢ ¾²·¹µå°¡ ³¡³­ÈÄ¿¡ ¸¶¹«¸®¸¦ ÇÑ´Ù. <item>C Äڵ带 ÄÄÆÄÀÏÇÒ ¶§ <tt>-D_REENTRANT</tt> ¿É¼ÇÀ» Ãß°¡ÇÑ´Ù. </enum> ´ÙÀ½Àº LinuxThreads¸¦»ç¿ëÇÏ¿© ÆÄÀÌ(pi)¸¦ °è»êÇÏ´Â º´·ÄÇÁ·Î±×·¥ÀÇ ¿¹ÀÌ´Ù. 1.3Àå¿¡¼­ »ç¿ëÇÑ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿´°í, bb_threads ¿¹Á¦¿¡¼­Ã³·³ µÎ°³ÀÇ ¾²·¹µå°¡ º´·Ä·Î ½ÇÇàµÈ´Ù. <code> #include <stdio.h> #include <stdlib.h> #include "pthread.h" volatile double pi = 0.0; /* Approximation to pi (shared) */ pthread_mutex_t pi_lock; /* Lock for above */ volatile double intervals; /* How many intervals? */ void * process(void *arg) { register double width, localsum; register int i; register int iproc = (*((char *) arg) - '0'); /* Set width */ width = 1.0 / intervals; /* Do the local computations */ localsum = 0; for (i=iproc; i<intervals; i+=2) { register double x = (i + 0.5) * width; localsum += 4.0 / (1.0 + x * x); } localsum *= width; /* Lock pi for update, update it, and unlock */ pthread_mutex_lock(&ero;pi_lock); pi += localsum; pthread_mutex_unlock(&ero;pi_lock); return(NULL); } int main(int argc, char **argv) { pthread_t thread0, thread1; void * retval; /* Get the number of intervals */ intervals = atoi(argv[1]); /* Initialize the lock on pi */ pthread_mutex_init(&ero;pi_lock, NULL); /* Make the two threads */ if (pthread_create(&ero;thread0, NULL, process, "0") || pthread_create(&ero;thread1, NULL, process, "1")) { fprintf(stderr, "%s: cannot make thread\n", argv[0]); exit(1); } /* Join (collapse) the two threads */ if (pthread_join(thread0, &ero;retval) || pthread_join(thread1, &ero;retval)) { fprintf(stderr, "%s: thread join failed\n", argv[0]); exit(1); } /* Print the result */ printf("Estimation of pi is %f\n", pi); /* Check-out */ exit(0); } </code> <!-- ------------------------------------------------------------- --> <sect1>System V °øÀ¯ ¸Þ¸ð¸® <!-- ------------------------------------------------------------- --> <p> ½Ã½ºÅÛ V IPC(Inter-Process Communication, ÇÁ·Î¼¼½º°£ Åë½Å)´Â ¸Þ½ÃÁö Å¥(message queue)¿Í ¼¼¸¶Æ÷¾î(semaphore), °øÀ¯ ¸Þ¸ð¸®(shared memory) ¸ÞÄ¿´ÏÁòÀ» Á¦°øÇÏ´Â ¿©·¯°¡Áö ½Ã½ºÅÛ ÄÝÀ» Áö¿øÇÑ´Ù. ¹°·Ð ÀÌµé ¸ÞÄ¿´ÏÁòÀº ¿ø·¡ ÇϳªÀÇ ÇÁ·Î¼¼¼­¸¦ »ç¿ëÇÏ´Â ½Ã½ºÅÛ¿¡¼­ ¿©·¯°³ÀÇ ÇÁ·Î¼¼½ºµéÀÌ Åë½ÅÀ» Çϴµ¥ »ç¿ëÇϱâ À§Çؼ­ ¸¸µé¾îÁ³´Ù. ±×·¸Áö¸¸, ÀÌ ¸»Àº SMP ¸®´ª½º¿¡¼­ ÇÁ·Î¼¼½º°¡ ¾î¶² ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàµÇ°í ÀÖµçÁö °£¿¡ ÇÁ·Î¼¼½º°£ Åë½Å¿¡¼­µµ Á¦´ë·Î µ¿ÀÛÇØ¾ß ÇÑ´Ù´Â Àǹ̸¦ ³»Æ÷ÇÏ°í ÀÖ´Ù. ÀÌµé ½Ã½ºÅÛ ÄÝÀÌ ¾î¶»°Ô »ç¿ëµÇ´ÂÁö »ìÆ캸±â Àü¿¡, ½Ã½ºÅÛ V IPC È£ÃâÀÌ ¼¼¸¶Æ÷¾î³ª ¸Þ½ÃÁö Àü´Þ°°Àº ÀÏÀ» À§ÇØ Á¸ÀçÇϱä ÇÏÁö¸¸, À̸¦ »ç¿ëÇؼ± ¾ÈµÈ´Ù´Â °ÍÀ» ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù. ¿Ö ¾ÈµÇ´À³Ä? À̵é ÇÔ¼öµéÀº ÀϹÝÀûÀ¸·Î ´À¸®°í SMP ¸®´ª½º¿¡¼­´Â Á÷·ÄÈ­(serialize)µÇ¾î ÀÖ´Ù. ÀÌÁ¤µµ¸é ÃæºÐÇÏ°Ú´Ù. °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ¸·ÎÀÇ Á¢±ÙÀ» °øÀ¯ÇÏ´Â ÇÁ·Î¼¼½º ±×·ìÀ» ¸¸µå´Â ±âº»ÀûÀÎ °úÁ¤Àº ´ÙÀ½°ú °°´Ù : <enum> <item>ÇϳªÀÇ ÇÁ·Î¼¼½º·Î ÇÁ·Î±×·¥À» ½ÃÀÛÇÑ´Ù. <item> ´ëü·Î ¿©·¯ºÐÀº ½ÇÇàµÇ´Â °¢°¢ÀÇ º´·Ä ÇÁ·Î±×·¥ÀÌ ÀڽŸ¸ÀÇ °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» °¡Áö±â¸¦ ¹Ù¶ö °ÍÀÌ´Ù. µû¶ó¼­ <tt>shmget()</tt> ÇÔ¼ö¸¦ ºÒ·¯ ¿øÇÏ´Â Å©±â¸¸Å­ÀÇ »õ·Î¿î ¿µ¿ªÀ» ¸¸µé¾î¾ß ÇÑ´Ù. ÀÌ È£ÃâÀº ÀÌ¹Ì Á¸ÀçÇÏ´Â °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀÇ ID¸¦ ¾ò´Âµ¥¿¡µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¾î¶² °æ¿ìÀ̵ç, µ¹¾Æ¿À´Â °ªÀº °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀÇ IDÀ̰ųª ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì -1ÀÌ´Ù. ¿¹¸¦ µé¾î, <em>b</em> ¹ÙÀÌÆ® Å©±âÀÇ °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» ¸¸µç´Ù¸é, <tt>shmid = shmget(IPC_PRIVATE, <em>b</em>, (IPC_CREAT | 0666))</tt> °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. <item> ´ÙÀ½ ´Ü°è´Â ÀÌ °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» ÀÌ ÇÁ·Î¼¼½º¿¡ ¿¬°áÇÏ´Â(attach) °ÍÀÌ´Ù. ¸» ±×´ë·Î ÀÌ ¸Þ¸ð¸®¸¦ ÀÌ ÇÁ·Î¼¼½ºÀÇ °¡»ó ¸Þ¸ð¸® ¸Ê¿¡ Ãß°¡ÇÏ´Â °ÍÀÌ´Ù. ÇÁ·Î±×·¡¸Ó´Â <tt>shamt()</tt> ÇÔ¼ö È£Ãâ¿¡¼­ ¸Þ¸ð¸® ¿µ¿ªÀÌ ³ªÅ¸³¯ °¡»ó ÁÖ¼Ò¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖÁö¸¸, ¼±ÅÃÇÑ ÁÖ¼Ò´Â ÆäÀÌÁö °æ°è(boundary)¿¡ µû¶ó Á¤·Ä(align)ÀÌ µÇ¾î ÀÖ¾î¾ß Çϸç (Áï, <tt>getpagesize()</tt>¿¡¼­ µ¹·ÁÁÖ´Â ÆäÀÌÁö Å©±â - º¸ÅëÀº 4096 ¹ÙÀÌÆ®ÀÌ´Ù - ÀÇ ¹è¼ö¿©¾ß ÇÑ´Ù), ÀÌ´Â ÀÌ ÁÖ¼Ò¿¡ ÀÌ¹Ì Á¸ÀçÇÏ´ø ¾î¶² ¸Þ¸ð¸®À̵çÁö°£¿¡ ¸ÅÇÎÀ» µ¤¾î½á¹ö¸°´Ù. µû¶ó¼­, À̺¸´Ù´Â ½Ã½ºÅÛÀÌ ÁÖ¼Ò¸¦ °í¸¦ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ ´õ ¼±È£µÈ´Ù. ¾î¶² °æ¿ìÀ̵ç, µ¹¾Æ¿À´Â °ªÀº ¸ÅÇÎÀÌ µÈ ¼¼±×¸ÕÆ®°¡ ½ÃÀÛÇÏ´Â °¡»óÁÖ¼Ò¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÌ´Ù. ÄÚµå´Â <tt>shmptr = shmat(shmid, 0, 0)</tt>°ú °°Àº ÇüÅÂÀÌ´Ù. ¸ðµç °øÀ¯ º¯¼öµéÀ» ±¸Á¶Ã¼ÀÇ ¸â¹ö·Î ¼±¾ðÇÏ°í <em>shmptr</em>À» ÀÌ ±¸Á¶Ã¼¿¡ ´ëÇÑ Æ÷ÀÎÅÍ·Î ¼±¾ðÇÔÀ¸·Î½á °£´ÜÇÏ°Ô ¸ðµç Á¤Àû º¯¼ö¸¦ °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ¸·Î ÇÒ´çÇÒ ¼ö ÀÖ´Ù. ÀÌ ±â¹ýÀ» ÀÌ¿ëÇÏ¿©, °øÀ¯ º¯¼ö <em>x</em>´Â <em>shmptr</em><tt>-></tt><em>x</em>·Î Á¢±ÙÇÒ ¼ö ÀÖ´Ù. <item> °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» »ç¿ëÇÏ´Â ¸¶Áö¸· ÇÁ·Î¼¼½º°¡ Á¾·áÇϰųª ÀÌ ¿µ¿ª¿¡¼­ ¶³¾îÁ®³ª¿À¸é(detach) ÀÌ °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» ¾ø¾Ö¾ßÇÑ´Ù. ÀÌ ±âº» ÇൿÀ» ¼³Á¤ÇÏ·Á¸é <tt>shmctl()</tt> ÇÔ¼ö¸¦ ºÎ¸¦ ÇÊ¿ä°¡ ÀÖ´Ù. ÄÚµå´Â <tt>shmctl(shmid, IPC_RMID, 0)</tt>°ú °°Àº ÇüÅ·ΠÀÛ¼ºÇÑ´Ù. <item> ¿øÇÏ´Â °¹¼ö·Î ÇÁ·Î¼¼½ºµéÀ» ¸¸µé·Á¸é Ç¥ÁØ ¸®´ª½ºÀÇ <tt>fork()</tt> ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. °¢°¢ÀÇ ÇÁ·Î¼¼½º´Â °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» »ó¼Ó¹Þ°ÔµÈ´Ù. <item> ÇÁ·Î¼¼½º°¡ °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» »ç¿ëÇÏ´Â ÀÛ¾÷À» ³¡¸¶Ä¡¸é, ÀÌ °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ¸·ÎºÎÅÍ ºÐ¸®(detach)ÇØ¾ß ÇÑ´Ù. ÀÌ´Â <tt>shmdt(shmptr)</tt>À» ºÒ·¯¼­ ÇÑ´Ù. </enum> <p> À§¿¡ ¼³¸íÇÑ °úÁ¤¿¡¼­´Â ¸î°³ ¾ÈµÇ´Â ½Ã½ºÅÛ È£Ã⸸À» »ç¿ëÇÏÁö¸¸, ÀÏ´Ü °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀÌ ¸¸µé¾îÁö¸é, ÇϳªÀÇ ÇÁ·Î¼¼½º°¡ ¸Þ¸ð¸®»óÀÇ °ªÀ» ¹Ù²Û °æ¿ì ÀÚµ¿À¸·Î ¸ðµç ÇÁ·Î¼¼½º¿¡ º¸ÀÌ°Ô µÈ´Ù. °¡Àå Áß¿äÇÑ Á¡Àº °¢ Åë½Å ÀÛ¾÷ÀÌ ½Ã½ºÅÛ ÄÝÀ» ÇÏ´Â ¿À¹öÇìµå¾øÀÌ ÀÌ·ç¾îÁø´Ù´Â °ÍÀÌ´Ù. ´ÙÀ½Àº ½Ã½ºÅÛ V °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» »ç¿ëÇÏ´Â C ÇÁ·Î±×·¥ÀÇ ¿¹ÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ÆÄÀÌ(pi)¸¦ °è»êÇÏ´Â °ÍÀ¸·Î 1.3Àå¿¡¼­ ³ª¿Â °Í°ú ¶È°°Àº ¾Ë°í¸®ÁòÀ» »ç¿ëÇÑ´Ù. <code> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/ipc.h> #include <sys/shm.h> volatile struct shared { double pi; int lock; } *shared; inline extern int xchg(register int reg, volatile int * volatile obj) { /* Atomic exchange instruction */ __asm__ __volatile__ ("xchgl %1,%0" :"=r" (reg), "=m" (*obj) :"r" (reg), "m" (*obj)); return(reg); } main(int argc, char **argv) { register double width, localsum; register int intervals, i; register int shmid; register int iproc = 0;; /* Allocate System V shared memory */ shmid = shmget(IPC_PRIVATE, sizeof(struct shared), (IPC_CREAT | 0600)); shared = ((volatile struct shared *) shmat(shmid, 0, 0)); shmctl(shmid, IPC_RMID, 0); /* Initialize... */ shared->pi = 0.0; shared->lock = 0; /* Fork a child */ if (!fork()) ++iproc; /* get the number of intervals */ intervals = atoi(argv[1]); width = 1.0 / intervals; /* do the local computations */ localsum = 0; for (i=iproc; i<intervals; i+=2) { register double x = (i + 0.5) * width; localsum += 4.0 / (1.0 + x * x); } localsum *= width; /* Atomic spin lock, add, unlock... */ while (xchg((iproc + 1), &ero;(shared->lock))) ; shared->pi += localsum; shared->lock = 0; /* Terminate child (barrier sync) */ if (iproc == 0) { wait(NULL); printf("Estimation of pi is %f\n", shared->pi); } /* Check out */ return(0); } </code> ³ª´Â ÀÌ ¿¹Á¦¿¡¼­ ¶ô(lock)À» ±¸ÇöÇϱâ À§ÇØ IA32ÀÇ ¿øÀÚÀûÀÎ(atomic) ±³È¯(exchange) ¸í·É¾î¸¦ »ç¿ëÇÏ¿´´Ù. ´õ ³ªÀº ¼º´É°ú ȣȯ¼ºÀ» ¹Ù¶õ´Ù¸é, ¿øÀÚÀûÀÎ ¹ö½º-¶ô(bus-lock) ¸í·É¾î¸¦ »ç¿ëÇÏÁö ¾Ê´Â µ¿±âÈ­ ±â¹ýÀ¸·Î ´ëüÇϱ⠹ٶõ´Ù. ÇöÀç »ç¿ëÇÏ°í ÀÖ´Â ½Ã½ºÅÛ V IPC ±â´ÉµéÀÇ »óŸ¦ º¸¿©ÁÖ´Â <tt>ipcs</tt>À» ±â¾ïÇÏ°í ÀÖ´Ù¸é, ¿©·¯ºÐÀÌ ¸¸µç Äڵ带 µð¹ö±ëÇÒ ¶§ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. <!-- ------------------------------------------------------------- --> <sect1>¸Þ¸ð¸® ¸Ê È£Ãâ<label id="sec_MemoryMapCall"> <!-- ------------------------------------------------------------- --> <p> ÆÄÀÏ I/O ½Ã½ºÅÛ ÄÝÀ» »ç¿ëÇÏ´Â ºñ¿ëÀº ¸Å¿ì Ŭ ¼ö ÀÖ´Ù. »ç½Ç, ÀÌ°ÍÀÌ »ç¿ëÀÚ ¹öÆÛ¸¦ »ç¿ëÇÏ´Â ÆÄÀÏ I/O ¶óÀ̺귯¸®°¡ ÀÖ´Â ÀÌÀ¯ÀÌ´Ù (<tt>getchar()</tt>, <tt>fwrite()</tt> µî). ±×·¯³ª »ç¿ëÀÚ ¹öÆÛ´Â ¿©·¯°³ÀÇ ÇÁ·Î¼¼½º°¡ ¶È°°Àº ¾²±â °¡´ÉÇÑ ÆÄÀÏ¿¡ Á¢±ÙÇÏ°í ÀÖ´Ù¸é »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç, »ç¿ëÀÚ ¹öÆÛ¸¦ °ü¸®ÇÏ´Â ¿À¹öÇìµåµµ ²Ï Å©´Ù. BSD UNIX¿¡¼­´Â ÆÄÀÏÀÇ ÀϺθ¦ »ç¿ëÀÚ ¸Þ¸ð¸®·Î ¸ÅÇÎÇÏ¿© º»ÁúÀûÀ¸·Î °¡»ó ¸Þ¸ð¸® ÆäÀÌ¡ ¸ÞÄ¿´ÏÁòÀ» ÅëÇØ °»½ÅÀ» Çϵµ·Ï ÇÒ ¼ö ÀÖ´Â ½Ã½ºÅÛ ÄÝÀ» Ãß°¡ÇÏ¿© À̸¦ ÇØ°áÇÑ´Ù. ÀÌ¿Í ¶È°°Àº ¸ÞÄ¿´ÏÁòÀÌ ¸î³âÀü Sequent¿¡¼­ ¸¸µç ½Ã½ºÅÛ¿¡¼­ °øÀ¯ ¸Þ¸ð¸® º´·Äó¸® Áö¿øÀÇ ±â¹ÝÀ¸·Î »ç¿ëµÇ¾ú´Ù. (¾ÆÁÖ ¿À·¡µÈ) man ÆäÀÌÁö¿¡ ¸î°¡Áö ¸Å¿ì ºÎÁ¤ÀûÀÎ ÀÇ°ßÀÌ ÀÖÀ½¿¡µµ ºÒ±¸ÇÏ°í, ¸®´ª½º´Â ±âº»ÀûÀÎ ÇÔ¼öµé Áß Àû¾îµµ ¸î°¡Áö´Â Á¦´ë·Î ¼öÇàÇϴµíÀÌ º¸À̸ç, ÀÌ ½Ã½ºÅÛ ÄÝÀ» ¿©·¯°³ÀÇ ÇÁ·Î¼¼½º°¡ °øÀ¯ÇÒ ¼ö ÀÖ´Â ¹«¸íÀÇ(anonymous) ¸Þ¸ð¸® ¿µ¿ªÀ¸·ÎÀÇ ¸ÅÇο¡ »ç¿ëÇÏ´Â °ÍÀ» Áö¿øÇÑ´Ù. º»ÁúÀûÀ¸·Î ¸®´ª½º¿¡¼­ÀÇ <tt>mmap()</tt> ±¸ÇöÀº 2.5Àå¿¡¼­ ¼³¸íÇÑ 2, 3, 4¹ø° ´Ü°è¸¦ Çϳª·Î ´ëüÇÑ °ÍÀÌ´Ù. ¹«¸íÀÇ °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» ¸¸µé·Á¸é : <code> shmptr = mmap(0, /* system assigns address */ b, /* size of shared memory segment */ (PROT_READ | PROT_WRITE), /* access rights, can be rwx */ (MAP_ANON | MAP_SHARED), /* anonymous, shared */ 0, /* file descriptor (not used) */ 0); /* file offset (not used) */ </code> ½Ã½ºÅÛ V °øÀ¯¸Þ¸ð¸®ÀÇ <tt>shmdt()</tt> ÇÔ¼ö¿Í ¶È°°Àº ÀÏÀ» ÇÏ´Â ÇÔ¼ö´Â <tt>munmap()</tt>ÀÌ´Ù : <code> munmap(shmptr, b); </code> ³» »ý°¢¿¡´Â ½Ã½ºÅÛ V °øÀ¯ ¸Þ¸ð¸® Áö¿ø ´ë½Å <tt>mmap()</tt>À» »ç¿ëÇÏ´Â °ÍÀÌ ½ÇÁ¦·Î ´õ ³´Áö´Â ¾Ê´Ù. <!-- 3Àå --> <!--***************************************************************--> <sect>¸®´ª½º ½Ã½ºÅÛÀÇ Å¬·¯½ºÅÍ(Clusters Of Linux Systems) <!--***************************************************************--> <p> ÀÌ ¼½¼ÇÀº ¸®´ª½º¸¦ »ç¿ëÇÑ Å¬·¯½ºÅÍ º´·Ä ó¸®ÀÇ °³°üÀ» Á¦°øÇÏ·Á°í ½ÃµµÇÒ °ÍÀÌ´Ù. Ŭ·¯½ºÅÍ´Â ÇöÀç °¡Àå ÀαâÀÖ´Â °ÍÀÌÀÚ °¡Àå ´Ù¾çÇÏ´Ù. ÀÌ°ÍÀº ÀüÅëÀûÀÎ ¿öÅ©½ºÅ×À̼ǵéÀ» ¿©·¯´ë ¹­Àº ³×Æ®¿÷(<bf>NOW</bf>; network of workstations)¿¡¼­ ÀÌÁ¦ ¸· ÇÁ·Î¼¼¼­ ³ëµå·Î½á ¸®´ª½º ÇǾ¾µé·Î »ç¿ëÇϱ⠽ÃÀÛÇÑ Ä¿½ºÅÒ º´·Ä ±â°è±îÁö ÀÖ´Ù. ¶ÇÇÑ ¸®´ª½º ±â°èµéÀÇ Å¬·¯½ºÅ͸¦ »ç¿ëÇÏ´Â º´·Ä 󸮸¦ À§ÇÑ ¸¹Àº ¼ÒÇÁÆ®¿þ¾î Áö¿øµéÀÌ ÀÖ´Ù. <!-- ------------------------------------------------------------- --> <sect1>¿Ö Ŭ·¯½ºÅÍÀΰ¡(Why A Cluster)? <!-- ------------------------------------------------------------- --> <p> Ŭ·¯½ºÅÍ º´·Ä 󸮴 ´ÙÀ½°ú °°Àº Áß¿äÇÑ ÀåÁ¡µéÀ» Á¦°øÇÑ´Ù: <itemize> <item> Ŭ·¯½ºÅÍ¿¡ ÀÖ´Â °¢ ±â°èµéÀº ³ÐÀº ¹üÀ§ÀÇ ´Ù¸¥ ÄÄÇ»Æà ¾îÇÃÀ» »ç¿ëÇÒ ¼ö ÀÖ´Â ¿ÏÀüÇÑ ½Ã½ºÅÛÀÌ µÉ ¼ö ÀÖ´Ù. ±×·¡¼­ ¸¹Àº »ç¶÷µéÀÌ Å¬·¯½ºÅÍ º´·Ä ÄÄÇ»ÆÃÀº »ç¶÷µéÀÇ Ã¥»ó À§¿¡¼­ ÇÒ ÀϾøÀÌ ³î°í ÀÖ´Â ¿öÅ©½ºÅ×À̼ǵéÀÇ "¹ö·ÁÁö´Â ½Ã°£µé(wasted cycles)" ¸ðµÎ¸¦ °¡Á®´Ù ¾´´Ù°í Á¦¾ÈÇÏ°Ô µÇ¾ú´Ù. ÀÌ·± ½Ã°£µéÀ» ±¸ÇÏ´Â °ÍÀº ½ÇÁ¦ ±×·¸°Ô ½¬¿î °ÍÀÌ ¾Æ´Ï´Ù. ±×¸®°í ÀÌ°ÍÀº µ¿·áÀÇ ½ºÅ©¸° ¼¼À̹ö¸¦ ´À¸®°Ô ÇÒ °ÍÀÌ´Ù. ±×·¯³ª ÀÌ°ÍÀ» ±×·¸°Ô µÉ ¼ö ÀÖ´Ù. <item> ³×Æ®¿÷ ½Ã½ºÅÛµéÀÌ ÃÖ±Ù ±ÞÁõÇÏ´Â °ÍÀº Ŭ·¯½ºÅ͸¦ ¸¸µé±â À§ÇÑ Çϵå¿þ¾î ´ëºÎºÐÀÌ ´ë¿ë·®À¸·Î, ÀÌ¿¡ ´ëÀÀÇؼ­ °á°úÀûÀ¸·Î ³·Àº "»óÇ°" °¡°ÝÀ¸·Î, Æȸ®°í ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. Ŭ·¯½ºÅÍ Çϳª¿¡ ÇÑ°³ÀÇ ºñµð¿À Ä«µå, ¸ð´ÏÅÍ, Å°º¸µå°¡ ÇÊ¿äÇÏ´Â »ç½ÇÀÌ Á» ´õ ºñ¿ëÀ» ¾Æ³¥ ¼ö ÀÖµµ·Ï ÇÑ´Ù(ºñ·Ï Ãʱ⠸®´ª½º ¼³Ä¡¸¦ ¼öÇàÇÒ ¶§ Ŭ·¯½ºÅÍÀÇ °¢ ±â°èµé¿¡ À̵éÀ» ¿Å°Ü °¡¸ç ½á¾ß ÇÏÁö¸¸, ÀÏ´Ü ½ÇÇàµÇ¸é ÀüÇüÀûÀÎ ¸®´ª½º ÇǾ¾´Â "ÄܼÖ"À» ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â´Ù). ÀÌ¿Í ºñ±³Çؼ­ SMP¿Í ºÎ¼Ó ÇÁ·Î¼¼¼­´Â ÈξÀ ´õ ÀÛÀº ½ÃÀå¿¡¼­ ´ÜÀ§ ¼öÇà ¼º´É¿¡ ´ëÇÑ ´õ ³ôÀº °¡°ÝÀ» Çü¼ºÇØ°¡°í ÀÖ´Ù. <item> Ŭ·¯½ºÅÍ ÄÄÇ»ÆÃÀº <em>¾ÆÁÖ Ä¿´Ù¶õ ½Ã½ºÅÛ</em>±îÁö Ä¿Áú ¼ö ÀÖ´Ù. ÇöÀç±îÁö 4°³ ÀÌ»óÀÇ ÇÁ·Î¼¼¼­µéÀ» °¡Áö´Â ¸®´ª½º-ȣȯ SMP¸¦ ã´Â °ÍÀÌ ¾î·Á¿î ¹Ý¸é¿¡ ÀϹÝÀûÀ¸·Î »ç¿ë °¡´ÉÇÑ ³×Æ®¿÷ Çϵå¿þ¾î´Â 16°³ ±â°èµé±îÁö Ŭ·¯½ºÅÍ·Î ½±°Ô ¹­À» ¼ö ÀÖ´Ù. Á¶±Ý¸¸ ÀÛ¾÷ÇÏ¸é ¼ö¹é°³ ¶Ç´Â ½ÉÁö¾î ¼öõ°³ ±â°èµéÀ» ³×Æ®¿÷À¸·Î ¹­À» ¼ö ÀÖ´Ù. »ç½Ç Àüü ÀÎÅͳÝÀÌ ÇϳªÀÇ Ä¿´Ù¶õ Ŭ·¯½ºÅÍ·Î º¼ ¼ö ÀÖ´Ù. <item> Ŭ·¯½ºÅÍ ¾È¿¡¼­ "°íÀå³­ ±â°è"¸¦ ±³Ã¼ÇÏ´Â °ÍÀÌ Æз¯Æ¼°¡ À߸øµÈ SMP¸¦ °íÄ¡´Â °Í¿¡ ºñÇؼ­ ´õ ´Ü¼øÇÏ´Ù´Â »ç½ÇÀº Á¶½É½º·´°Ô µðÀÚÀÎµÈ Å¬·¯½ºÅÍ ¼³Á¤¿¡ Á» ´õ ³ôÀº °¡¿ë¼ºÀ» Á¦°øÇÑ´Ù. ÀÌ°ÍÀº(³ôÀº °¡¿ë¼ºÀº) Áß¿äÇÑ ¼­ºñ½º Áß´ÜÀ» °ßµô ¼ö ¾ø´Â Ưº°ÇÑ ¾îÇø®ÄÉÀ̼ǵ鿡 ´ëÇؼ­ Áß¿äÇÒ »Ó¸¸ÀÌ ¾Æ´Ï°í, ´ÜÀÏ-±â°è °íÀåÀÌ ÀÚÁÖ ÀϾ´Â ÃæºÐÇÑ ÇÁ·Î¼¼½ºµéÀ» °¡Áø ½Ã½ºÅÛµéÀÇ ÀϹÝÀûÀÎ »ç¿ë¿¡µµ Áß¿äÇÏ´Ù. (¿¹¸¦ µé¾î¼­ PC °íÀåÀÇ Æò±Õ ½Ã°£ÀÌ 2³âÀÏÁö¶óµµ 32°³ ±â°è¸¦ °®´Â Ŭ·¯½ºÅÍ¿¡¼­ Àû¾îµµ ÇÑ ±â°è°¡ 6°³¿ù À̳»¿¡ °íÀ峯 È®·üÀº ²Ï ³ô´Ù.) </itemize> <p> ÁÁ´Ù. Ŭ·¯½ºÅÍ´Â ÇÁ¸®À̰ųª ½Î°í ¾ÆÁÖ Ä¿Áú ¼ö ÀÖÀ¸¸ç °¡¿ë¼ºÀÌ ³ô´Ù... ±×·¸´Ù¸é ¿Ö ¸ðµç »ç¶÷µéÀÌ Å¬·¯½ºÅ͸¦ »ç¿ëÇÏÁö ¾Ê´Â°¡? ±Û½ê °Å±â¿¡´Â ´ÙÀ½°ú °°Àº ¹®Á¦µéÀÌ Á¸ÀçÇÑ´Ù: <itemize> <item> ¾ÆÁÖ ÀÛÀº ¿¹¿ÜµéÀ» Á¦¿ÜÇÏ°í ³×Æ®¿÷ Çϵå¿þ¾î´Â º´·Ä 󸮸¦ À§Çؼ­ °í¾ÈµÈ °ÍÀÌ ¾Æ´Ï´Ù. ÀüÇüÀûÀ¸·Î SMP¿Í ºÎ¼Ó ÇÁ·Î¼¼¼­¿¡ ºñÇؼ­ Áöü´Â ¾ÆÁÖ ³ô°í ´ë¿ªÆøÀº »ó´ëÀûÀ¸·Î ³·´Ù. ¿¹¸¦ µé¾î¼­ SMP Áöü´Â ÀϹÝÀûÀ¸·Î ¸î ¸¶ÀÌÅ©·ÎÃÊ(¿ªÀÚÁÖ: 100¸¸ºÐÀÇ 1ÃÊ)¸¦ ³ÑÁö ¾ÊÁö¸¸ Ŭ·¯½ºÅÍÀÇ °æ¿ì ÀϹÝÀûÀ¸·Î ¼ö¹é ³»Áö ¼öõ ¸¶ÀÌÅ©·Î ÃÊ°¡ °É¸°´Ù. SMP Åë½Å ´ë¿ªÆøÀº ´ë°³ 100MBytes/secÀÌ ³Ñ´Â´Ù; ºñ·Ï °¡Àå ºü¸¥ ³×Æ®¿÷ Çϵå¿þ¾î(¿¹, "±â°¡ºñÆ® ÀÌ´õ³Ý")°¡ ÀÌ¿¡ ÇÊÀûÇÒ ¼Óµµ¸¦ Á¦°øÇϱä ÇÏÁö¸¸ °¡Àå ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â ³×Æ®¿÷Àº À̺¸´Ù 10¿¡¼­ 1000¹è Á¤µµ ´õ ´À¸®´Ù. ³×Æ®¿÷ Çϵå¿þ¾îÀÇ ¼º´ÉÀº <em>°í¸³µÈ Ŭ·¯½ºÅÍ ³×Æ®¿÷</em>¿¡ ÃæºÐÇÒ ¸¸Å­ ³·´Ù(The performance of network hardware is poor enough as an isolated cluster network). ³×Æ®¿÷ÀÌ ´Ù¸¥ Æ®·¡ÇÈÀ¸·ÎºÎÅÍ °í¸³µÇ¾î ÀÖÁö ¾Ê´Ù¸é, Ŭ·¯½ºÅÍ·Î µðÀÚÀÎµÈ ½Ã½ºÅÛº¸´Ù "³×Æ®¿÷À¸·Î ¹­Àº ±â°èµé"À» »ç¿ëÇÑ °æ¿ì°¡ ´õ ¸¹±â ¶§¹®¿¡ ¼º´ÉÀº ¾ÆÁÖ ¾ÇÈ­µÉ ¼ö ÀÖ´Ù. <item> Ŭ·¯½ºÅ͸¦ ´ÜÀÏ ½Ã½ºÅÛÀ¸·Î Ãë±ÞÇÏ´Â ¼ÒÇÁÆ®¿þ¾î Áö¿øÀº °ÅÀÇ ¾ø´Ù. ¿¹¸¦ µé¾î¼­ <tt>ps</tt> ¸í·ÉÀº ´ÜÀÏ ¸®´ª½º ½Ã½ºÅÛ¿¡ ½ÇÇà ÁßÀÎ ÇÁ·Î¼¼½ºµé¿¡ ´ëÇؼ­¸¸ º¸°íÇÒ »Ó ¸®´ª½º ½Ã½ºÅÛµé·Î ¸¸µé¾îÁø Ŭ·¯½ºÅÍ Àüü¿¡¼­ ½ÇÇà ÁßÀÎ ¸ðµç ÇÁ·Î¼¼½ºµé¿¡ ´ëÇؼ­ º¸°íÇÏÁö ¾Ê´Â´Ù. </itemize> <p> ±×·¡¼­, Ŭ·¯½ºÅÍ´Â ±²ÀåÇÑ ÀáÀç·ÂÀ» Á¦°øÇÏÁö¸¸ ÀÌ ÀáÀç·ÂÀÌ ´ëºÎºÐÀÇ ¾îÇø®ÄÉÀ̼ǵ鿡 ´ëÇؼ­ ȹµæµÇ±â¿¡´Â ¾ÆÁÖ ¾î·Á¿ï ¼ö ÀÖ´Ù. ÀÌ·± ȯ°æ¿¡ ÀûÇÕÇÑ ÇÁ·Î±×·¥µé¿¡ ´ëÇؼ­ ÁÁÀº ¼º´ÉÀ» ȹµæÇϵµ·Ï ÇÏ´Â ¸¹Àº ¼ÒÇÁÆ®¿þ¾î Áö¿øÀÌ ÀÖ´Ù´Â °Í°ú ÁÁÀº ¼º´ÉÀ» ȹµæÇÒ ¼ö ÀÖ´Â ÇÁ·Î±×·¥µéÀÇ ¹üÀ§¸¦ ³ÐÈú ¼ö ÀÖµµ·Ï Ưº°È÷ ¼³°èµÈ ³×Æ®¿÷µéµµ ÀÖ´Ù´Â °ÍÀº ÁÁÀº ¼Ò½ÄÀÌ´Ù. <!-- ------------------------------------------------------------- --> <sect1>³×Æ®¿÷ Çϵå¿þ¾î(Network Hardware)<label id="sec_NetworkHardware"> <!-- ------------------------------------------------------------- --> <p> ÄÄÇ»ÅÍ ³×Æ®¿öÅ·Àº ±ÞÁõÇÏ°í ÀÖ´Ù... ÀÌ¹Ì ÀÌ°ÍÀ» ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ³×Æ®¿öÅ· ±â¼ú°ú Á¦Ç°µéÀÇ °è¼Ó-Áõ°¡ÇÏ´Â ¿µ¿ªÀº °³¹ßÀÌ ÁøÇà Áß¿¡ ÀÖ°í ´ëºÎºÐÀº ±â°èµé(¿¹, °¢°¢ ¸®´ª½º¸¦ µ¹¸®´Â ÇǾ¾µé)ÀÇ ±×·ì¿¡ º´·Ä-ó¸® Ŭ·¯½ºÅ͸¦ ¸¸µå´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Â ÇüÅ·Π»ç¿ë °¡´ÉÇÏ´Ù. ºÒÇàÇÏ°Ôµµ ¾î¶² ³×Æ®¿÷ ±â¼úµµ ¸ðµç ¹®Á¦µéÀ» ÈǸ¢ÇÏ°Ô Ç®Áö ¸øÇÑ´Ù; »ç½Ç Á¢±Ù, ºñ¿ë, ¼º´ÉÀÇ ¹üÀ§´Â ¾ó¸¥ ºÁ¼­ ¹Ï±â Èûµé´Ù. ¿¹¸¦ µé¾î¼­ Ç¥ÁØ »ó¾÷ÀûÀ¸·Î-°¡´ÉÇÑ Çϵå¿þ¾î¸¦ »ç¿ëÇؼ­ ³×Æ®¿÷À¸·Î ±â°èµéÀ» ¹­´Â µ¥ µå´Â ºñ¿ëÀº ±â°è ´ç Àû°Ô´Â 5´Þ·¯¿¡¼­ ¸¹°Ô´Â 4000´Þ·¯±îÁö À̸¥´Ù. Á¦Á¶ÀÚ°¡ ¸»ÇÏ´Â ´ë¿ªÆø(delivered bandwidth)¿Í Áöü ½Ã°£ °¢°¢Àº Å©±âÀÇ ³×°¡Áö µî±Þ(four orders of magnitude)¿¡ µû¶ó º¯ÇÑ´Ù. ƯÁ¤ ³×Æ®¿÷¿¡ ´ëÇؼ­ ¹è¿ì·Á°í Çϱâ ÀÌÀü¿¡ ÀÌ·± °ÍµéÀº ¹Ù¶÷ó·³ ½±°Ô º¯ÇÑ´Ù´Â °ÍÀ» ÀνÄÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù(¸®´ª½º ³×Æ®¿öÅ· ´º½ºµé¿¡ ´ëÇؼ­´Â <url url="http://www.uk.linux.org/NetNews.html">À» ÂüÁ¶). ±×¸®°í ¾î¶² ³×Æ®¿÷µé¿¡ ´ëÇÏ Á¤È®ÇÑ µ¥ÀÌÅ͸¦ ¾ò´Â °ÍÀº ¾ÆÁÖ ¾î·Æ´Ù. Ưº°È÷ È®½ÇÇÏÁö ¾Ê´Â °÷¿¡ ÀúÀÚ´Â ¹°À½Ç¥(<em>?</em>)¸¦ ³õ¾Ò´Ù. ÀÌ ÁÖÁ¦¸¦ ¿¬±¸ÇÏ´Â µ¥ ¸¹Àº ½Ã°£À» ½èÁö¸¸ ³ª´Â ³» ¿ä¾à(ÀÌ ¹®¼­)ÀÌ À߸ø Åõ¼ºÀÌ°í ¸¹Àº Áß¿äÇÑ °ÍµéÀ» »©¸Ô¾ú´Ù´Â °ÍÀ» È®½ÅÇÑ´Ù. ±³Á¤À̳ª Ãß°¡ÇØ¾ß ÇÏ´Â °ÍÀ» °®°í ÀÖ´Ù¸é <htmlurl url="mailto:pplinux@ecn.purdue.edu" name="pplinux@ecn.purdue.edu">·Î À̸ÞÀÏÀ» º¸³»Áֱ⠹ٶõ´Ù. <url url="http://web.syr.edu/~jmwobus/comfaqs/lan-technology.html">¿¡ ÀÖ´Â LAN Technology Scorecard¿Í °°Àº ¿ä¾àµéÀº ¸¹Àº ¼­·Î ´Ù¸¥ ŸÀÔµéÀÇ ³×Æ®¿÷°ú LAN Ç¥Áص鿡 ´ëÇÑ Æ¯¼ºµéÀ» º¸¿©ÁØ´Ù. ±×·¯³ª ÀÌ ÇÏ¿ìÅõ¿¡ ÀÖ´Â ¿ä¾àÀº ´ëºÎºÐ ¸®´ª½º Ŭ·¯½ºÅ͸¦ ¸¸µå´Â µ¥ °ü·ÃÀÌ ÀÖ´Â ³×Æ®¿÷ Ư¼ºµé¿¡ ´ëÇؼ­ ÃÐÁ¡À» ¸ÂÃè´Ù. °¢ ³×Æ®¿÷À» ³íÀÇÇÏ´Â ¼½¼ÇÀº ªÀº Ư¼º ¸®½ºÆ®·Î ½ÃÀÛÇÑ´Ù. ´ÙÀ½Àº ÀÌ·± ¿£Æ®¸®µéÀÌ ÀǹÌÇÏ´Â ¹Ù¸¦ Á¤ÀÇÇÑ´Ù. <descrip> <tag>¸®´ª½º Áö¿ø(Linux support):</tag> (ÀÌ°Í¿¡ ´ëÇÑ) ´äº¯ÀÌ <em>no</em>¶ó¸é, ±× Àǹ̴ ºÐ¸íÇÏ´Ù. ´Ù¸¥ ´ë´äµéÀº ³×Æ®¿÷À» ¾ï¼¼½ºÇÏ´Â µ¥ »ç¿ëµÇ´Â ±âº» ÇÁ·Î±×·¥ ÀÎÅÍÆäÀ̽º¸¦ ¼³¸íÇÏ·Á°í ÇÒ °ÍÀÌ´Ù. ´ëºÎºÐÀÇ ³×Æ®¿÷ Çϵå¿þ¾î´Â, ÀüÇüÀûÀ¸·Î TCP/UDP Åë½ÅÀ» Áö¿øÇÏ´Â, Ä¿³Î µå¶óÀ̹ö¸¦ ÅëÇؼ­ ÀÎÅÍÆäÀ̽ºµÈ´Ù. ¾î¶² ´Ù¸¥ ³×Æ®¿÷µéÀº Ä¿³ÎÀ» °ÅÄ¡Áö ¾Ê°í¼­ Áöü ½Ã°£À» Á» ´õ ÁÙÀ̱â À§Çؼ­ Á» ´õ Á÷Á¢ÀûÀÎ ÀÎÅÍÆäÀ̽ºµé(¿¹, ¶óÀ̺귯¸®)À» »ç¿ëÇϱ⵵ ÇÑ´Ù. <p> ¸î³âÀü OS È£ÃâÀ» ÅëÇؼ­ ºÎµ¿ ¼Ò¼ýÁ¡ À¯´ÏÆ®¸¦ ¾ï¼¼½º ÇÏ´Â °ÍÀÌ ¿ÏÀüÈ÷ ÈǸ¢ÇÑ °ÍÀ¸·Î »ý°¢µÇ¾îÁ³´Ù. ±×·¯³ª ÀÌÁ¦ ±×°ÍÀº ºÐ¸í ¿ì½º¿î °ÍÀÌ´Ù; ³» ÀÇ°ßÀ¸·Î´Â º´·Ä ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â ÇÁ·Î¼¼¼­µé °£ °¢ Åë½ÅÀÌ OS È£ÃâÀ» ¿ä±¸ÇÑ´Ù´Â °ÍÀº ¾î»öÇÑ °ÍÀÌ´Ù. ¹®Á¦´Â ÄÄÇ»Å͵éÀÌ ¾ÆÁ÷µµ ÀÌ·± Åë½Å ¸ÞÄ«´ÏÁòµéÀ» ÅëÇÕÇÏÁö ¸øÇß´Ù´Â °ÍÀÌ´Ù. ±×·¡¼­ ºñ-Ä¿³Î Á¢±ÙÀº À̽ļº ¹®Á¦µéÀ» °¡Áö´Â °æÇâÀÌ ÀÖ´Ù. ¿©·¯ºÐÀº °¡±î¿î ¹Ì·¡¿¡ ÀÌ·± °Í¿¡ ´ëÇؼ­ Á» ´õ ¸¹Àº °ÍÀ» µè°Ô µÉ °ÍÀÌ´Ù. ´ë°³ »õ·Î¿î <bf>Virtual Interface (VI) Architecture</bf><url url="http://www.viarch.org/">ÀÇ ÇüÅ·Πµè°Ô µÉ °ÍÀÎ µ¥ ÀÌ°ÍÀº ÀϹÝÀûÀÎ OS È£Ãâ °èÃþÀ» ÇÇÇÏ´Â ´ëºÎºÐÀÇ ³×Æ®¿÷ ÀÎÅÍÆäÀ̽º ÀÛ¾÷µé¿¡ ´ëÇÑ Ç¥ÁØÈ­µÈ ¹æ¹ýÀÌ´Ù. VI Ç¥ÁØÀº Compaq, Intel, ±×¸®°í Microsoft¿¡ ÀÇÇؼ­ Áö¿ø¹Þ°í ÀÖÀ¸¸ç ´ÙÀ½ ¸î ³â ¾È¿¡ SAN(½Ã½ºÅÛ ¿µ¿ª ³×Æ®¿÷) µðÀÚÀο¡ ´ëÇÑ °­ÇÑ Ãæ°ÝÀÌ µÉ °ÍÀÓ¿¡ Ʋ¸²¾ø´Ù. <tag>ÃÖ´ë ´ë¿ªÆø(Maximum bandwidth):</tag> ÀÌ°ÍÀº ¸ðµç »ç¶÷ÀÌ ½Å°æ¾²´Â ¼ýÀÚÀÌ´Ù. ³ª´Â ÀϹÝÀûÀ¸·Î ÀÌ·ÐÀûÀ¸·Î ÃÖ¼±ÀÎ °æ¿ìÀÇ ¼öÄ¡¸¦ »ç¿ëÇß´Ù; ¿©·¯ºÐÀÇ ¸¶Àϸ®Áö´Â º¯<em>ÇÒ °ÍÀÌ´Ù</em>. <tag>ÃÖ¼Ò Áöü(Minimum latency):</tag> ³» ÀÇ°ßÀ¸·Î´Â, ÀÌ°ÍÀº ¸ðµç »ç¶÷µéÀÌ ´ë¿ªÆøº¸´Ù ´õ ½Å°æ½á¾ß ÇÒ ¼öÄ¡ÀÌ´Ù. ´Ù½Ã ³ª´Â ºñÇö½ÇÀûÀÎ ÃÖ¼±ÀÎ °æ¿ì(base-case) ¼öÄ¡¸¦ »ç¿ëÇßÁö¸¸ Àû¾îµµ ÀÌ ¼öÄ¡µéÀº Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î ¸ðµÎ¸¦ Æ÷ÇÔÇÏ´Â <em>¸ðµç</em> Áöü ¼Ò½ºµéÀ» Æ÷ÇÔÇÑ´Ù. ´ëºÎºÐÀÇ °æ¿ì ³×Æ®¿÷ Áöü´Â ¸î ¸¶ÀÌÅ©·ÎÃÊÀÌ´Ù; ¼öÄ¡°¡ Å©¸é Ŭ¼ö·Ï Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽ºµéÀÇ °èÃþµéÀÌ ºñÈ¿À²ÀûÀÌ´Ù´Â °ÍÀ» ¹Ý¿µÇÑ´Ù. <tag>±¸ÀÔ ¹æ¹ý(Available as):</tag> ´Ü¼øÇÏ°Ô ¸»Çؼ­, ÀÌ°ÍÀº ÀÌ Å¸ÀÔÀÇ ³×Æ®¿÷ Çϵå¿þ¾î¸¦ °®Ãâ ¼ö ÀÖ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù. »óÇ°µéÀº ÁÖ¿ä ±¸ºÐ ÀÎÀÚ·Î °¡°ÝÀ» °¡Áö¸é¼­, ¸¹Àº º¥´õµé¿¡ ÀÇÇؼ­ »ì ¼ö ÀÖ´Ù. ´Ù¼ö-º¥´õ¿¡ ÀÇÇÑ °ÍµéÀº ÇϳªÀÇ °æÀïÀûÀÎ º¥´õº¸´Ù Á» ´õ »ç±â ½±Áö¸¸ À̵éÀº Áß¿äÇÑ Â÷ÀÌ¿Í ÀáÀçÀûÀΠȣȯ¼º(interoperability) ¹®Á¦µéÀÌ ÀÖ´Ù. ´ÜÀÏ-º¥´õ ³×Æ®¿÷Àº °ø±ÞÀÚÀÇ ¼Õ¿¡ ¿ÏÀüÈ÷ Á¾¼ÓµÈ´Ù(±×·¯³ª ±×µéÀº ģöÇÒ ¼öµµ ÀÖ´Ù). ÆÛºí¸¯ µµ¸ÞÀÎ µðÀÚÀÎÀ̶õ ±×°ÍÀ» ¿©·¯ºÐ¿¡°Ô ÆÈ »ç¶÷À» ãÁö ¸øÇÏ´õ¶óµµ ºÎÇ°µéÀ» »ç¼­ ±×°ÍÀ» ¸¸µé ¼ö ÀÖ´Ù´Â °ÍÀ» ¸»ÇÑ´Ù. ¿¬±¸ ÇÁ·ÎÅäŸÀÔµéÀº ¸» ±×´ë·ÎÀÌ´Ù; ±×µéÀº ÀϹÝÀûÀ¸·Î ÀϹÝÀûÀ¸·Î ¿ÜºÎ »ç¿ëÀڵ鿡°Ô ÁغñµÈ °ÍÀÌ ¾Æ´Ï°Å³ª ±×µéÀÌ »ì ¼ö ÀÖ´Â °ÍÀÌ ¾Æ´Ï´Ù. <tag>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º(Interface port/bus used):</tag> ÀÌ ³×Æ®¿÷À» ¾î¶»°Ô Á¢¼Ó(hook-up)ÇÒ °ÍÀΰ¡? ÇöÀç °¡Àå ³ôÀº ¼º´É°ú °¡Àå ÀϹÝÀûÀÎ °ÍÀº PCI ¹ö½º ÀÎÅÍÆäÀ̽º Ä«µåÀÌ´Ù. EISA, VESA ·ÎÄà ¹ö½º(VL ¹ö½º), ±×¸®°í ISA ¹ö½º Ä«µåµéµµ ÀÖ´Ù. ISA´Â ¸ÇóÀ½¿¡ ³ª¿Â °ÍÀÌ°í ¾ÆÁ÷µµ ³·Àº-¼º´ÉÀÇ Ä«µåµé¿¡ ´ëÇؼ­ ¸¹ÀÌ »ç¿ëµÇ´Â °ÍÀÌ´Ù. EISA´Â ¸¹Àº PCI ±â°èµé¿¡¼­ µÎ¹ø° ¹ö½º·Î »ç¿ëµÇ°í À־ ¸î°¡Áö Ä«µåµéÀÌ ÀÖ´Ù. ¿À´Ã³¯ VL ¹°°ÇµéÀ» ¸¹ÀÌ º¼ ¼ö ¾øÀ» °ÍÀÌ´Ù(ºñ·Ï <url url="http://www.vesa.org/">°¡ ÀÇ°ßÀ» ´Þ¸®ÇÏÁö¸¸ ¸»ÀÌ´Ù). <p> ¹°·Ð ¿©·¯ºÐÀÇ ÇǾ¾ÀÇ ÄÉÀ̽º¸¦ Çѹøµµ ¿­¾îº¸Áö ¾Ê°í »ç¿ëÇÒ ¼ö ÀÖ´Â ¾î¶² ÀÎÅÍÆäÀ̽º´Â ÀÛÀº ¸Å·Â ÀÌ»ó °¡Áø´Ù. IrDA¿Í USB ÀÎÅÍÆäÀ̽ºµéÀº °è¼Ó ºó¹øÇÏ°Ô ³ªÅ¸³ª°í ÀÖ´Ù. Ç¥ÁØ Æз¯·² Æ÷Æ®(SPP)´Â ÇÁ¸°Å͸¦ ºÙÀÌ´Â µ¥ »ç¿ëµÇÁö¸¸ ISA ¹ö½ºÀÇ ¿ÜºÎ È®ÀåÀ¸·Î½á ¸¹ÀÌ »ç¿ëµÇ¾î ¿Ô´Ù; ÀÌ »õ·Î¿î ±â´ÉÀº EPP¿Í ECP °³¼±À» ±ÔÁ¤ÇÑ IEEE 1284 Ç¥ÁØ¿¡ ÀÇÇؼ­ ÁõÁøµÇ¾ú´Ù. ¶ÇÇÑ ¿À·¡µÇ°í ½Å·Ú¼º ÀÖÁö¸¸ ´À¸° RS232 ½Ã¸®¾ó Æ÷Æ®°¡ ÀÖ´Ù. ³ª´Â VGA ºñµð¿À Ä¿³ØÅÍ, Å°º¸µå, ¸¶¿ì½º, ¶Ç´Â °ÔÀÓ Æ÷Æ®µéÀ» »ç¿ëÇؼ­ ±â°èµéÀ» ¿¬°áÇÏ´Â °ÍÀ» ¾ËÁö ¸øÇÑ´Ù... ±×·¡¼­ ¿©±â¿¡ ¾ø´Ù. <tag>³×Æ®¿÷ ±¸Á¶(Network structure):</tag> ¹ö½º´Â ±¸¸® ¼±À̰ųª ±¸¸® ¼±µéÀÇ ¸ðÀÓÀ̰ųª ±¤¼¶À¯ÀÌ´Ù. Çãºê´Â ¿©±â¿¡ ²ÅÇô ÀÖ´Â ¼­·Î ´Ù¸¥ ±¸¸®¼±/±¤¼¶À¯µéÀ» ¿¬°áÇÏ´Â ¹æ¹ýÀ» ¾Ë°í ÀÖ´Â ÀÛÀº ¹Ú½ºÀÌ´Ù; ½ºÀ§Äª Çãºê(switched hub)´Â ´Ù¼ö Ä¿³Ø¼ÇµéÀÌ µ¿½Ã¿¡ µ¥ÀÌÅ͸¦ Àü¼ÛÇϵµ·Ï ÇÏ´Â ÇãºêÀÌ´Ù. <tag>±â°è´ç ºñ¿ë(Cost per machine connected):</tag> ¿©±â¼­ ÀÌ·± ¼öÄ¡µéÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¸»ÇÑ´Ù. ³×Æ®¿÷ Ä¿³Ø¼ÇÀ» ¼¼Áö ¾Ê°í¼­ Ŭ·¯½ºÅÍÀÇ ÇÑ ³ëµå¿¡ ¾µ·Á°í ÇǾ¾¸¦ »ç´Â µ¥ 2000´Þ·¯°¡ µé¾ú´Ù°í °¡Á¤Çغ¸ÀÚ. ÆнºÆ® ÀÌ´õ³Ý(Fast Ethernet)À» ´õÇÏ´Â °ÍÀº ³ëµå´ç ¾à 2400´Þ·¯°¡ µç´Ù; MyrinetÀ» ´ë½Å ´õÇÏ´Â µ¥¿¡´Â ¾à 3800´Þ·¯°¡ µç´Ù. 2¸¸´Þ·¯°¡ ÀÖ´Ù¸é Fast Ethernet¿¡ ¿¬°áµÈ 8°³ÀÇ ±â°è³ª Myrinet¿¡ ¿¬°áµ· 5°³ÀÇ ±â°è¸¦ °¡Áú ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¸ÖƼ ³×Æ®¿÷À» °¡Áö´Â °Íµµ ¾ÆÁÖ ÀǹÌÀÖÀ» ¼ö ÀÖ´Ù; ¿¹, $20,000·Î ÆнºÆ® ÀÌ´õ³Ý°ú TTL_PAPERS µÑ ´Ù °¡Áö´Â 8°³ ±â°èµéÀ» ±¸¸ÅÇÒ ¼ö ÀÖ´Ù. ¾îÇø®ÄÉÀ̼ÇÀ» °¡Àå »¡¸® ½ÇÇàÇÒ Å¬·¯½ºÅ͸¦ ¸¸µé °¡´É¼ºÀÌ °¡Àå ³ôÀº ³×Æ®¿÷À̳ª ³×Æ®¿÷ ÁýÇÕÀ» ¼±ÅÃÇÏÀÚ. <p> ÀÌ°ÍÀ» Àд ÇöÀç ÀÌ·± ¼öÄ¡µéÀº Ʋ¸± ¼öµµ ÀÖ´Ù... Á¦±â·² ±×µéÀº ¾Æ¸¶µµ ÀÌ¹Ì Æ²·ÈÀ» °ÍÀÌ´Ù. ¶ÇÇÑ ¾çÀÌ ÁÙ¾îµé°Å³ª Ưº° ÆǸÅ(special deal)µîÀÌ ÀÖÀ» ¼ö ÀÖ´Ù. ±×·¯³ª ¿©±â¼­ ¾ð±ÞµÈ °¡°Ýµé¶§¹®¿¡ ¿©·¯ºÐÀÌ ¾ÆÁÖ ºÎÀûÀýÇÑ ¼±ÅÃÀ» ÇÏ°Ô²û Çϱ⿡ ÃæºÐÇÑ À߸øµÈ °ÍÀÏ °¡´É¼ºÀÌ Àû´Ù. ¿©·¯ºÐÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ ³×Æ®¿÷ÀÇ Æ¯º°ÇÑ ¼Ó¼ºÀ» ¿ä±¸Çϰųª Ŭ·¯½ºÅ͸µµÈ ÇǾ¾µéÀÌ »ó´ëÀûÀ¸·Î ºñ½Ñ °ÍÀÏ ¶§¿¡¸¸ ºñ½Ñ ³×Æ®¿÷ÀÌ Àǹ̰¡ ÀÖ´Ù´Â °ÍÀ» ¾Æ´Â µ¥´Â ¹Ú»ç ÇÐÀ§(ºñ·Ï ³ª´Â Çϳª °¡Áö°í ÀÖÁö¸¸ ;-)°¡ ÇÊ¿ä ¾ø´Ù. </descrip> <em> ³» ÀÇ°ßÀ» µé¾úÀ¸¹Ç·Î ¼î¿Í ÇÔ²² ´ÙÀ½¿¡....(Now that you have the disclaimers, on with the show....)</em> <sect2>¾ÆÅ©³Ý(ArcNet) <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>2.5 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>1,000 microseconds?</em> <item>±¸ÀÔ ¹æ¹ý: <em>¸ÖƼ-º¥ÅÍ Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>ISA</em> <item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡µÇÁö ¾Ê´Â(unswitched) Çãºê³ª ¹ö½º(³í¸®ÀûÀÎ ¸µ)</em> <item>±â°è´ç ºñ¿ë: <em>$200</em> </itemize> ARCNETÀº ÁÖ·Î ³»Àå ½Ç½Ã°£ Á¦¾î ½Ã½ºÅ۵鿡¼­ »ç¿ëµÇ±â À§Çؼ­ °í¾ÈµÈ Áö¿ª ³×Æ®¿÷(LAN)ÀÌ´Ù. ÀÌ´õ³Ý°ú ºñ½ÁÇÏ°Ô ³×Æ®¿÷Àº ¹°¸®ÀûÀ¸·Î ¹ö½º¿¡ ºÙÀÎ ÅÇÀ̳ª Çϳª ÀÌ»óÀÇ Çãºêµé·Î Á¶Á÷µÈ´Ù. ±×·¯³ª ÀÌ´õ³Ý°ú ´Ù¸£°Ô ÀÌ°ÍÀº ³×Æ®¿÷À» ³í¸®ÀûÀ¸·Î ¸µÀ¸·Î ±¸ÃàÇÏ´Â ÅäÅ«-±â¹Ý ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÑ´Ù. ÆÐŶ Çì´õ´Â ÀÛ´Ù(3 ¶Ç´Â 4¹ÙÀÌÆ®). ±×¸®°í ¸Þ½ÃÁöµéÀº ´ÜÀÏ ¹ÙÀÌÆ® µ¥ÀÌÅ͸¸Å­ ÀÛ°Ô Àü´ÞµÉ ¼ö ÀÖ´Ù. ±×·¡¼­, ARCNETÀº Á¦ÇÑµÈ Áö¿¬ µîÀ» °¡Áö¸é¼­, ÀÌ´õ³Ýº¸´Ù Á» ´õ ÀÏ°üµÈ ¼º´ÉÀ» °¡Áø´Ù. ºÒÇàÇÏ°Ôµµ ÀÌ°ÍÀº ÀÌ´õ³Ýº¸´Ù ´õ ´À¸®°í ´ú À¯¸íÇÏ´Ù. ±×·¯¸é¼­µµ ´õ ºñ½Î´Ù. <url url="http://www.arcnet.com/">¿¡ ÀÖ´Â ARCNET Trade Association·ÎºÎÅÍ ´õ ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù. <sect2>ATM <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö, AAL* ¶óÀ̺귯¸®.</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>155 Mb/s</em> (°ð, <em>1,200 Mb/s</em>) <item>ÃÖ¼Ò Áöü: <em>120 microseconds</em> <item>±¸¸Å ¹æ¹ý: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI</em> <item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡ Çãºê</em> <item>±â°è ´ç ºñ¿ë: <em>$3,000</em> </itemize> Áö³­ ¸î³â µ¿¾È È¥¼ö »óÅ¿¡ ÀÖÁö ¾Ê¾Ò´Ù¸é ¾Æ¸¶ ATM(ºñµ¿±â Àü¼Û ¸ðµå)°¡ ¾î¶»°Ô ¹Ì·¡°¡.. ±Û½ê, ÀÏÁ¾ÀÇ ¹Ì·¡°¡ µÉ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇؼ­ ¸¹ÀÌ µé¾úÀ» °ÍÀÌ´Ù. ATMÀº HiPPIº¸´Ù ´õ ½Î°í ÆнºÆ® ÀÌ´õ³Ýº¸´Ù ´õ ºü¸£¸ç ÀüÈ­ ȸ»çµéÀÌ Á¦°øÇÏ´Â °Å¸®¸¸Å­ ±ä °Å¸®¿¡µµ »ç¿ëµÉ ¼ö ÀÖ´Ù. ATM ³×Æ®¿÷ ÇÁ·ÎÅäÄÝÀº ¶ÇÇÑ ´õ ³·Àº-¿À¹öÇìµå ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇϵµ·Ï, ±×¸®°í ÀÛÀº ¸Þ½ÃÁöµé°ú ½Ç½Ã°£ Åë½Å(¿¹, µðÁöÅÐ ¿Àµð¿À¿Í ºñµð¿À)À» Á» ´õ È¿°úÀûÀ¸·Î °ü¸®Çϵµ·Ï °í¾ÈµÇ¾ú´Ù. ÀÌ°ÍÀº ¶ÇÇÑ ¸®´ª½º°¡ ÇöÀç Áö¿øÇÏ´Â °¡Àå-³ôÀº ´ë¿ªÆø ³×Æ®¿÷µé ÁßÀÇ ÇϳªÀÌ´Ù. ³ª»Û ¼Ò½ÄÀº ATMÀº ½ÎÁö ¾Ê°í º¥´õµé °£¿¡ ȣȯ¼º ¹®Á¦°¡ ¾ÆÁ÷ ÀÖ´Ù´Â °ÍÀÌ´Ù. ¸®´ª½º ATM °³¹ß¿¡ ´ëÇÑ °³°üÀº <url url="http://lrcwww.epfl.ch/linux-atm/">¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. <sect2> CAPERS <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>AFAPI ¶óÀ̺귯¸®</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>1.2 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>3 microseconds</em> <item>±¸¸Å ¹æ¹ý: <em>»óÇ° Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>SPP</em> <item>³×Æ®¿÷ ±¸Á¶: <em>2°³ÀÇ ±â°èµé °£ ÄÉÀ̺í</em> <item>±â°è´ç ºñ¿ë: <em>$2</em> </itemize> CAPERS(º´·Ä ½ÇÇà°ú ºü¸¥ µ¿±â¸¦ À§ÇÑ ÄÉÀÌºí ¾î´ðÅÍ; Cable Adapter for Parallel Execution and Rapid Synchronization)´Â, Àü±â ÄÄÇ»ÅÍ ¿£Áö´Ï¾î¸µÀÇ ÆÛµà ´ëÇÐ Çб³(Purdue University School of Electrical and Computer Engineering)¿¡¼­ÀÇ PAPERS ÇÁ·ÎÁ§Æ® <url url="http://garage.ecn.purdue.edu/~papers/">ÀÇ ºÎ»ê¹°ÀÌ´Ù. ±âº»ÀûÀ¸·Î ÀÌ°ÍÀº µÎ ¸®´ª½º ÇǾ¾µé¿¡ ´ëÇÑ PAPERS ¶óÀ̺귯¸®¸¦ ±¸ÇöÇϱâ À§Çؼ­, ÀÏ¹Ý "LapLink" SPP-to-SPP ÄÉÀ̺íÀ» »ç¿ëÇϱâ À§Çؼ­ ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÅäÄÝÀ» Á¤ÀÇÇÑ´Ù. ¾ÆÀ̵ð¾î´Â ±ïÀÌÁö ¾ÊÁö¸¸ °¡°ÝÀ» ´õ ³·Ãâ ¼ö´Â ¾ø´Ù(¿ªÀÚÁÖ: ±×¸¸Å­ ½Î´Ù?). ½Ã½ºÅÛ º¸¾ÈÀ» °³¼±Çϱâ À§Çؼ­ TTL_PAPERS¿Í ¸¶Âù°¡Áö·Î ±Ç°íµÇ´Â ¸¶ÀÌ³Ê Ä¿³Î ÆÐÄ¡°¡ ÀÖ´Ù. ±×·¯³ª ¹Ýµå½Ã ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ù: <url url="http://garage.ecn.purdue.edu/~papers/giveioperm.html">. <sect2>ÀÌ´õ³Ý(Ethernet) <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>10 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>100 ¸¶ÀÌÅ©·ÎÃÊ</em> <item>±¸¸Å ¹æ¹ý: <em>»óÇ° Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI</em> <item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡ ¶Ç´Â ½ºÀ§Ä¡ ¾ø´Â Çãºê, ¶Ç´Â Çãºê ¾ø´Â ¹ö½º</em> <item>±â°è´ç ºñ¿ë: <em>$100</em>(Çãºê ¾ø´Â °æ¿ì <em>$50</em>) </itemize> ¸î³âµ¿¾È 10 Mbits/s ÀÌ´õ³ÝÀº Ç¥ÁØ ³×Æ®¿÷ ±â¼úÀÌ µÇ¾ú´Ù. ÁÁÀº ÀÌ´õ³Ý ÀÎÅÍÆäÀ̽º Ä«µåµéÀº $50 ÀÌÇÏ·Î »ì ¼ö ÀÖ´Ù. ²Ï ¸¹Àº ÇǾ¾µéÀÌ ÀÌÁ¦´Â ¸¶´õº¸µå¿¡ ÀÌ´õ³Ý ÄÁÆ®·Ñ·¯¸¦ °¡Áö°í ÀÖ´Ù. °¡º±°Ô-»ç¿ëµÇ´Â ³×Æ®¿÷¿¡ ´ëÇؼ­ ÀÌ´õ³Ý ¿¬°áÀº Çãºê ¾ø´Â ¸ÖƼ-ÅÇ ¹ö½º·Î Á¶Á÷µÉ ¼ö ÀÖ´Ù; ±×·± ¼³Á¤Àº ÃÖ¼ÒÀÇ ºñ¿ëÀ¸·Î 200°³±îÁöÀÇ ±â°èµéÀ» ¹­À» ¼ö ÀÖ´Ù. ±×·¯³ª º´·Ä 󸮿¡´Â ÀûÀýÇÏÁö ¾Ê´Ù. ´õºñ Çãºê(unswitched hub)¸¦ ´õÇÏ´Â °ÍÀº ½ÇÁ¦ ¼º´É Çâ»ó¿¡ µµ¿òÀÌ µÇÁö ¾Ê´Â´Ù. ±×·¯³ª µ¿½Ã ¿¬°áµé¿¡ ´ëÇؼ­ Àüü ´ë¿ªÆøÀ» Á¦°øÇÒ ¼ö ÀÖ´Â ½ºÀ§Ä¡ Çãºê(switched hub)µéÀº Æ÷Æ®´ç ´ÜÁö ¾à $100¸¸ µç´Ù. ¸®´ª½º´Â ³î¶ó¿ï Á¤µµ·Î ¸¹Àº ÀÌ´õ³Ý ÀÎÅÍÆäÀ̽ºµéÀ» Áö¿øÇÏÁö¸¸ ÀÎÅÍÆäÀ̽º Çϵå¿þ¾îÀÇ º¯Á¾µéÀº ½É°¢ÇÑ ¼º´É Â÷À̸¦ ºÎ¸¦ ¼ö ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù. ¾î¶² °ÍµéÀÌ Áö¿øµÇ´ÂÁö¿Í ±×µéÀÌ Àß ÀÛµ¿ÇÏ´ÂÁö¿¡ ´ëÇؼ­ Çϵå¿þ¾î ȣȯ¼º ÇÏ¿ìÅõ(Hardware Compatibility HOWTO)¸¦ º¸¶ó; ±×¸®°í ´ÙÀ½À» º¸ÀÚ <url url="http://cesdis1.gsfc.nasa.gov/linux/drivers/">. ¼º´ÉÀ» Çâ»óÇÏ´Â Èï¹Ì·Î¿î ¹æ¹ýÀº NASA CESDIS¿¡¼­ ¼öÇàµÈ ºñ¿À¿ïÇÁ(Beowulf) ÇÁ·ÎÁ§Æ® <url url="http://cesdis.gsfc.nasa.gov/linux/beowulf/beowulf.html">¿¡¼­ ¼öÇàµÈ 16-±â°è ¸®´ª½º Ŭ·¯½ºÅÍ¿¡ ÀÇÇؼ­ Á¦¾ÈµÇ¾ú´Ù. ¸¹Àº ÀÌ´õ³Ý Ä«µå µå¶óÀ̹öÀÇ ÀúÀÚÀÎ Donald Becker´Â °¢ÀÚ ´Ù¸¥ °ÍÀ» shadowÇÏ´Â(Áï, µ¿ÀÏÇÑ ³×Æ®¿÷ ÁÖ¼ÒµéÀ» °øÀ¯ÇÏ´Â) ´Ù¼öÀÇ ÀÌ´õ³Ý ³×Æ®¿÷À» ÅëÇؼ­ ·Îµå °øÀ¯(load sharing)ÇÏ´Â Áö¿øÀ» °³¹ßÇÏ¿´´Ù. ÀÌ ·Îµå °øÀ¯´Â Ç¥ÁØ ¸®´ª½º ¹èÆ÷ÆÇ¿¡ ³»ÀåµÇ°Ô µÇ¾ú°í ¼ÒÄÏ ÀÛ¾÷ ·¹º§ ¾Æ·¡¿¡ º¸ÀÌÁö ¾Ê°Ô ³»ÀåµÇ°Ô µÇ¾ú´Ù. Çãºê ºñ¿ëÀÌ Áß¿äÇϱ⠶§¹®¿¡ °¢ ±â°è°¡ Çãºê ¾ø´Â ¶Ç´Â ´õ¹Ì Çãºê¸¦ °¡Áø µÎ °³ ÀÌ»óÀÇ ÀÌ´õ³Ý ³×Æ®¿÷ (¿ªÀÚÁÖ: Ä«µå)¿¡ ¿¬°áÇÏ´Â °ÍÀº ¼º´ÉÀ» °³¼±Çϱâ À§ÇÑ ºñ¿ë-È¿°úÀûÀÎ ¹æ¹ýÀÌ µÉ ¼ö ÀÖ´Ù. »ç½Ç ÇÑ ±â°è°¡ ³×Æ®¿÷ ¼º´É º´¸ñ¿¡ °É¸° »óȲ¿¡¼­ shadow ³×Æ®¿÷À» »ç¿ëÇÏ´Â ·Îµå °øÀ¯´Â ´ÜÀÏ ½ºÀ§Ä¡ Çãºê ³×Æ®¿÷À» »ç¿ëÇÏ´Â °Íº¸´Ù ÈξÀ ´õ ÁÁ´Ù. <sect2> ÀÌ´õ³Ý(ÆнºÆ® ÀÌ´õ³Ý, Fast Ethernet) <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö.</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>100 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>80 ¸¶ÀÌÅ©·Î ÃÊ</em> <item>±¸¸Å ¹æ¹ý: <em>»óÇ° Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI</em> <item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡ ¶Ç´Â ´õ¹Ì Çãºê</em> <item>±â°è´ç ºñ¿ë: <em>$400?</em> </itemize> ºñ·Ï ±×µéÀ» "ÆнºÆ® ÀÌ´õ³Ý"À¸·Î ºÎ¸£´Â ¸î°¡Áö ´Ù¸¥ ±â¼úµéÀÌ ½ÇÁ¦ Á¸ÀçÇÏÁö¸¸ ÀÌ ¿ë¾î´Â ´ë°³ ¿¾³¯ "10 BaseT" 100 Mbits/s Àåºñ¿Í ÄÉÀ̺íµé°ú ´Ù¼Ò ȣȯµÇ´Â Çãºê-±â¹Ý 100Mbits/s ÀÌ´õ³ÝÀ» °¡¸®Å²´Ù. ±â´ëÇÏ´Â °Íó·³ ÀÌ´õ³ÝÀ¸·Î ºÒ¸®´Â °ÍµéÀº ¾î¶² °ÍÀ̳ª ÀϹÝÀûÀ¸·Î ¿ë·®À¸·Î °¡°ÝÀÌ ¸Å°ÜÁö°í ÀÌ·± ÀÎÅÍÆäÀ̽ºµéÀº ÀϹÝÀûÀ¸·Î 155 Mbits/s ATM Ä«µåµéÀÇ °¡°Ý¿¡ Àڱ׸¶ÇÑ Á¶°¢¿¡ Áö³ªÁö ¾Ê´Â´Ù. ÀÏ´ÜÀÇ ±â°èµéÀÌ ´ÜÀÏ 100 Mbits/s "¹ö½º" (´õ¹Ì Çãºê¸¦ »ç¿ëÇؼ­)ÀÇ ´ë¿ªÆøÀ» ³ª´² ¾²µµ·Ï ÇÏ´Â °ÍÀº °¢ ±â°èÀÇ ¿¬°á¿¡ Ç®·Î 10 Mbits/s¸¦ Á¦°øÇÒ ¼ö ÀÖ´Â ½ºÀ§Ä¡ Çãºê¸¦ °¡Áö°í 10 Mbits/s ÀÌ´õ³ÝÀ» »ç¿ëÇÏ´Â °Íº¸´Ù ÁÁÁö ¾ÊÀ» ¼ö ÀÖ´Ù´Â ÇÔÁ¤(´ÜÁ¡)ÀÌ ÀÖ´Ù. °¢ ±â°è¿¡°Ô µ¿½Ã¿¡ 100 Mbits/s¸¦ Á¦°øÇÒ ¼ö ÀÖ´Â ½ºÀ§Ä¡ Çãºê´Â ºñ½ÎÁö¸¸ °¡°ÝÀÌ ¸ÅÀÏ ¶³¾îÁö°í ÀÖ°í ÀÌ·± ½ºÀ§Ä¡µéÀº ´õ¹Ì Çãºêº¸´Ù ÈξÀ ´õ ³ôÀº Àüü ³×Æ®¿÷ ´ë¿ªÆøÀ» ¸¸µç´Ù. ATM ½ºÀ§Ä¡µéÀ» ºñ½Î°Ô ¸¸µå´Â ¿äÀÎÀº ±×µéÀÌ °¢ ATM ¼¿(»ó´ëÀûÀ¸·Î ÀÛÀº)µé¿¡ ´ëÇؼ­ ¹Ýµå½Ã ½ºÀ§Ä¡ÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù; ¾î¶² ÆнºÆ® ÀÌ´õ³Ý ½ºÀ§Ä¡µéÀº ½ºÀ§Ä¡¸¦ Áö³¯ ¶§ ÀÛÀº Áöü¸¦ °¡Áú ¼ö ÀÖ´Â ±â¼úµéÀ» »ç¿ëÇÔÀ¸·Î½á ±â´ëµÇ´Â ´õ ³·Àº ½ºÀ§Äª ÁÖ±âÀÇ ÀÌÁ¡À» ÀÌ¿ëÇÑ´Ù. ±×·¯³ª ½ºÀ§Ä¡ Æнº¸¦ º¯°æÇÏ´Â µ¥ ¸î ¹Ð¸®ÃÊ(¿ªÀÚÁÖ: ¸¶ÀÌÅ©·Î ÃÊ°¡ ¾Æ´Ï´Ù)°¡ °É¸°´Ù... ±×·¡¼­ ¶ó¿ìÆà ÆÐÅÏÀÌ ÀÚÁÖ º¯ÇÑ´Ù¸é ÀÌ·± ½ºÀ§Ä¡´Â ÇÇÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¿©·¯ Ä«µåµé°ú µå¶óÀ̹öµé¿¡ ´ëÇؼ­´Â <url url="http://cesdis1.gsfc.nasa.gov/linux/drivers/">¸¦ º¸¶ó. ¶ÇÇÑ ÀÌ´õ³Ý¿¡¼­ ¼³¸íÇÑ °Íó·³ NASA¿¡¼­ ÀÌ·ïÁø Beowulf ÇÁ·ÎÁ§Æ® <url url="http://cesdis.gsfc.nasa.gov/linux/beowulf/beowulf.html">°¡ ¸ÖƼ ÆнºÆ® ÀÌ´õ³ÝÀ» ÅëÇؼ­ ·Îµå °øÀ¯ÇÔÀ¸·Î½á ¼º´ÉÀ» °³¼±ÇÑ Áö¿øÀ» °³¹ßÇØ¿À°í ÀÖ´Ù´Ï Âü°í ¹Ù¶õ´Ù. <sect2> ÀÌ´õ³Ý(±â°¡ºñÆ® ÀÌ´õ³Ý,Gigabit Ethernet) <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>1,000 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>300 ¸¶ÀÌÅ©·Î ÃÊ?</em> <item>±¸¸Å ¹æ¹ý: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI</em> <item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡ Çãºê ¶Ç´Â FDR</em> <item>±â°è´ç ºñ¿ë: <em>$2,500?</em> </itemize> ±â°¡ºñÆ® ÀÌ´õ³Ý(Gigabit Ethernet) <url url="http://www.gigabitethernet.org/">ÀÌ ÀÌ´õ³ÝÀ¸·Î ºÒ¸®´Â ÁÁÀº ±â¼úÀû ÀÌÀ¯¸¦ °¡Áø´Ù°í È®½ÅÇÏÁö ¸øÇÑ´Ù. ±×·¯³ª ÀÌ°ÍÀÌ ½Î°í Å« ½ÃÀåÀÌ ÀÖ°í IP¸¦ Áö¿øÇÏ´Â ÄÄÇ»ÅÍ ³×Æ®¿÷ ±â¼úÀ» °®°í ÀÖ´Ù´Â °ÍÀ» À̸§ÀÌ Á¤È®ÇÏ°Ô ÀǹÌÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ±×·¯³ª ÇöÀç °¡°ÝÀº Gb/s Çϵå¿þ¾î°¡ ¾ÆÁ÷ ¸¸µé±â¿¡ ±î´Ù·Î¿î °ÍÀ̶ó´Â »ç½ÇÀ» ¹Ý¿µÇÑ´Ù. ´Ù¸¥ ÀÌ´õ³Ý ±â¼úµé°ú´Â ´Ù¸£°Ô ±â°¡ºñÆ® ÀÌ´õ³ÝÀº Á» ´õ ¹ÏÀ» ¼ö ÀÖ´Â ³×Æ®¿÷À» ¸¸µå´Â È帧 Á¦¾îÀÇ ·¹º§À» Á¦°øÇÑ´Ù. FDR, Áï Ç®-µàÇ÷º½º ¸®ÇÇÅÍ(Full-Duplex Repeater)´Â ¼º´ÉÀ» Çâ»ó½ÃÅ°±â À§Çؼ­ ¹öÆÛ¸µ°ú Áö¿ªÈ­µÈ È帧 Á¦¾î¸¦ »ç¿ëÇϸ鼭, ´Ü¼øÇÏ°Ô ¶óÀεéÀ» ¸ÖƼÇ÷º½ºÇÑ´Ù. ´ëºÎºÐÀÇ ½ºÀ§Ä¡ ÇãºêµéÀº ÇöÁ¸ÇÏ´Â ±â°¡ºñÆ®-°¡´É ±¤¼¶À¯ ½ºÀ§Ä¡(gigabit-capable switch fabrics)¿¡ ´ëÇÑ »õ·Î¿î ÀÎÅÍÆäÀ̽º ¸ðµâµé·Î½á ±¸ÃàµÇ°í ÀÖ´Ù. ½ºÀ§Ä¡/FDR Á¦Ç°µéÀº Àû¾îµµ ´ÙÀ½°ú °°Àº »çÀÌÆ®µé¿¡¼­ ±¸¸ÅµÉ ¼ö Àְųª ¹ßÇ¥µÇ°í ÀÖ´Ù. <url url="http://www.acacianet.com/">, <url url="http://www.baynetworks.com/">, <url url="http://www.cabletron.com/">, <url url="http://www.networks.digital.com/">, <url url="http://www.extremenetworks.com/">, <url url="http://www.foundrynet.com/">, <url url="http://www.gigalabs.com/">, <url url="http://www.packetengines.com/">. <url url="http://www.plaintree.com/">, <url url="http://www.prominet.com/">, <url url="http://www.sun.com/">, and <url url="http://www.xlnt.com/">. ¸®´ª½º µå¶óÀ̹ö <url url="http://cesdis.gsfc.nasa.gov/linux/drivers/yellowfin.html">°¡ Á¸ÀçÇϸç Packet Engines "Yellowfin" G-NIC¿¡ ´ëÇؼ­´Â <url url="http://www.packetengines.com/">. ¸®´ª½º¿¡¼­ ÇÑ Ãʱâ Å×½ºÆ®´Â °¡Àå ÁÁÀº 100 Mb/s ÆнºÆ® ÀÌ´õ³ÝÀ¸·Î ȹµæµÉ ¼ö ÀÖ´Â °Íº¸´Ù ¾à 2.5¹è ³ôÀº ´ë¿ªÆøÀ» ¾ò¾ú´Ù; ±â°¡ºñÆ® ³×Æ®¿÷ÀÇ °æ¿ìPCI ¹ö½º »ç¿ëÀ» Á¶½É½º·´°Ô Æ©´×ÇÏ´Â °ÍÀÌ Áß¿äÇÑ ÀÎÀÚÀÌ´Ù. ÀǽÉÇÒ ¹Ù ¾øÀÌ µå¶óÀ̹ö °³¼±°ú ´Ù¸¥ NICµé¿¡ ´ëÇÑ ¸®´ª½º µå¶óÀ̹ö Áö¿øÀÌ °è¼Ó À̾îÁú °ÍÀÌ´Ù. <sect2> FC (±¤¼¶À¯ ä³Î, Fibre Channel) <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>no</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>1,062 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>?</em> <item>±¸¸Å °æ·Î: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em> <item>ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI?</em> <item>³×Æ®¿÷ ±¸Á¶: <em>?</em> <item>±â°è ´ç °¡°Ý: <em>?</em> </itemize> <p> FC(±¤¼¶À¯ ä³Î)ÀÇ ¸ñÀûÀº ³ôÀº-¼º´É ºí·° I/O(2,048 ¹ÙÀÌÆ® µ¥ÀÌÅÍ ÇÏÁßÀ» ½Ç¾î³ª¸£´Â FC ÇÁ·¹ÀÓ)¸¦ Á¦°øÇÏ´Â °ÍÀÌ´Ù. Ưº°È÷ ÄÄÇ»Å͸¦ ÅëÇؼ­°¡ ¾Æ´Ï¶ó FC¿¡ Á÷Á¢ ¿¬°áµÉ ¼ö ÀÖ´Â ´Ù¸¥ ÀúÀå ÀåÄ¡¿Í µð½ºÅ©µéÀ» °øÀ¯Çϱâ À§Çؼ­ ¸»ÀÌ´Ù. ´ë¿ªÆø-º°·Î FC´Â 133¿¡¼­ 1,062 Mbits/s »çÀÌ ¾îµð¿¡¼­³ª ½ÇÇàµÇ¸é¼­ »ó´ëÀûÀ¸·Î ºü¸£´Ù°í ÇÑ´Ù. FC°¡ high-end SCSI¸¦ ´ëüÇÒ ¸¸Å­ À¯¸íÇØÁø´Ù¸é ÀÌ°ÍÀº °ª½Ñ ±â¼úÀÌ µÉ °ÍÀÌ´Ù; Áö±ÝÀº °ª½Ñ ±â¼úÀÌ ¾Æ´Ï¸ç ¸®´ª½º¿¡ ÀÇÇؼ­ Áö¿øµÇÁö ¾Ê´Â´Ù. FC ·¹ÆÛ·±½ºµé¿¡ ´ëÇÑ ÁÁÀº ÄÝ·¢¼ÇÀº <url url="http://www.amdahl.com/ext/CARP/FCA/FCA.html">¿¡¼­ Fibre Channel Association¿¡ ÀÇÇؼ­ °ü¸®µÇ°í ÀÖ´Ù. <sect2>ÆÄÀ̾î¿ÍÀ̾î(FireWire, IEEE 1394) <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>no</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>196.608 Mb/s</em> (°ð, <em>393.216 Mb/s</em>) <item>ÃÖ¼Ò Áöü: <em>?</em> <item>±¸¸Å ¹æ¹ý: <em>¸ÖƼº¥´õ Çϵå¿þ¾î</em> <item>ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI</em> <item>³×Æ®¿÷ ±¸Á¶: <em>»çÀÌŬ ¾ø´Â ·£´ý(ÀÚ°¡-¼³Á¤)</em> <item>±â°è´ç ºñ¿ë: <em>$600</em> </itemize> FireWire, <url url="http://www.firewire.org/">, IEEE 1394-1995 Ç¥ÁØÀÎ ÀÌ°ÍÀº °í°´ ÀüÀÚÀåºñ(electronics)¸¦ À§ÇÑ Àúºñ¿ë °í¼Ó µðÁöÅ» ³×Æ®¿÷À» À§Çؼ­ °í¾ÈµÈ °ÍÀÌ´Ù. Áø¿­Àå ¾îÇø®ÄÉÀ̼ÇÀº DV µðÁöÅÐ ºñµð¿À Ä·ÄÚ´õ¸¦ ÄÄÇ»ÅÍ¿¡ ¿¬°áÇÏ´Â °ÍÀÌÁö¸¸ FireWire´Â SCSI¸¦ ´ëüÇÏ´Â °ÍºÎÅÍ ¿©·¯ºÐÀÇ °¡Á¤±ØÀå(home theater)ÀÇ °¢ ÄÄÆ÷³ÍÆ®µéÀ» »óÈ£¿¬°áÇÏ´Â °Í±îÁöÀÇ ¾îÇø®ÄÉÀ̼ǵéÀ» À§ÇÏ¿© »ç¿ëµÇµµ·Ï ÀǵµµÇ¾ú´Ù. ÀÌ°ÍÀº ¿ø(cycle)À» ¸¸µéÁö ¾Ê´Â ¹ö½ºµé°ú ºê¸®ÁöµéÀ» »ç¿ëÇÏ´Â ÀÓÀÇÀÇ ÅäÆú·ÎÁö¿¡¼­ ¿¬°áµÈ 64K Àåºñµé±îÁö Çã¶ôÇÏ°í ÄÄÆ÷³ÍÆ®µéÀÌ ´õÇØÁö°Å³ª Á¦°ÅµÉ ¶§ ÀÚµ¿À¸·Î ¼³Á¤À» °ËÃâÇÑ´Ù. ª°í(4 ¹ÙÀÌÆ® "quadlet") ³·Àº Áöü ½Ã°£À» °¡Áö´Â ¸Þ½ÃÁöµéÀÌ ATM-likeÇÑ µ¿±â(isochronous) Àü¼Û(¸ÖƼ¹ÌÀÌ´õ ¸Þ½ÃÁöµéÀÇ µ¿±â¸¦ ¸ÂÃß´Â µ¥ »ç¿ëµÈ´Ù)°ú ÇÔ²² Áö¿øµÈ´Ù. ¾Æ´äÅØ(Adaptec)Àº ´ÜÀÏ PCI ÀÎÅÍÆäÀ̽º Ä«µå¿¡ 63°³±îÁö ÀåÄ¡µéÀ» Çã¶ôÇÏ´Â FireWire Á¦Ç°µéÀ» °¡Áö°í ÀÖ°í <url url="http://www.adaptec.com/serialio/">¿¡ FireWire¿¡ ´ëÇÑ ÁÁÀº ÀϹÝÀûÀÎ Á¤º¸¸¦ ´ã°í ÀÖ´Ù. ºñ·Ï FireWire°¡ »ç¿ë °¡´ÉÇÑ °¡Àå ³ôÀº ´ë¿ªÆø ³×Æ®¿÷ÀÌ µÉ ¼ö´Â ¾ø°ÚÁö¸¸ °í°´-·¹º§ ¸¶ÄÏ(°¡°ÝÀ» ¾ÆÁÖ ³·°Ô ¸¸µé)°ú ³·Àº Áöü ½Ã°£ Áö¿øÀº ÀÌ°ÍÀ» ¸î³â À̳»¿¡ ¸®´ª½º ÇǾ¾ Ŭ·¯½ºÅÍ ¸Þ½ÃÁö-Àü´Þ ³×Æ®¿÷ ±â¼úµé ÁßÀÇ Çϳª·Î ¸¸µé °ÍÀÌ´Ù. <sect2>HiPPI°ú ½Ã·¯¾ó HiPPI <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>no</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>1,600 Mb/s</em> (½Ã¸®¾óÀº <em>1,200 Mb/s</em>) <item>ÃÖ¼Ò Áöü: <em>?</em> <item>±¸ÀÔ ¹æ¹ý: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>EISA, PCI</em> <item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡ Çãºê</em> <item>±â°è´ç ºñ¿ë: <em>$3,500</em> (½Ã¸®¾óÀº <em>$4,500</em>) </itemize> <p> HiPPI (High Performance Parallel Interface)´Â ¿ø·¡ ½´ÆÛ ÄÄÇ»ÅÍ¿Í ´Ù¸¥ ±â°è(½´ÆÛÄÄ, ÇÁ·¹ÀÓ ¹öÆÛ, µð½ºÅ© ¾î·¹ÀÌ µî) °£¿¡ ´ë·®ÀÇ µ¥ÀÌÅÍ ¼ÂµéÀÇ Àü¼ÛÀ» À§Çؼ­ ¾ÆÁÖ ³ôÀº ´ë¿ªÆøÀ» Á¦°øÇϵµ·Ï ÀǵµµÇ¾úÀ¸¸ç ½´ÆÛÄÄ¿¡ ´ëÇÑ Áö¹èÀûÀÎ ¤½ÁØÀÌ µÇ¾ú´Ù. ºñ·Ï ÀÌ°ÍÀº ¸ð¼ø ¾î¹ý(oxymoron)À̱ä ÇÏÁö¸¸ <bf>½Ã¸®¾ó HiPPI</bf>µµ ¶ÇÇÑ 32-ºñÆ® Æø Ç¥ÁØ(Æз¯·²) HiPPI ÄÉÀÌºí ´ë½Å¿¡ ±¤¼¶À¯ ÄÉÀ̺íÀ» ÀüÇüÀûÀ¸·Î »ç¿ëÇÔÀ¸·Î½á, À¯¸íÇØÁú °ÍÀÌ´Ù. Áö³ª ¸î ³âµ¿¾È HiPPI Å©·Î½º¹Ù ½ºÀ§Ä¡µéÀº ÀϹÝÀûÀÎ °ÍÀÌ µÇ¾úÀ¸¸ç °¡°ÝµéÀº ±Þ°ÝÇÏ°Ô ¶³¾îÁ³´Ù; ºÒÇàÇÏ°Ôµµ ½Ã¸®¾ó HiPPI´Â ¾ÆÁ÷ ºñ½Î°í ÀÌ°ÍÀÌ ¹Ù·Î PCI ¹ö½º ÀÎÅÍÆäÀ̽º Ä«µåµéÀº ÀϹÝÀûÀ¸·Î Áö¿øÇÏ´Â °ÍÀÌ´Ù. ´õ ³ª»Û °ÍÀº ¸®´ª½º´Â ¾ÆÁ÷ HiPPI¸¦ Áö¿øÇÏÁö ¸øÇÑ´Ù´Â °ÍÀÌ´Ù. HiPPIÀÇ ÁÁÀº °³°üÀº CERN¿¡ ÀÇÇؼ­ <url url="http://www.cern.ch/HSI/hippi/">¿¡¼­ °ü¸®µÇ°í ÀÖ´Ù; ±×µéÀº ¶ÇÇÑ <url url="http://www.cern.ch/HSI/hippi/procintf/manufact.htm">¿¡ HiPPI º¥´õµéÀÇ ´Ù¼Ò ±â´Ù¶õ ¸®½ºÆ®¸¦ °ü¸®ÇÑ´Ù. <sect2> IrDA (Àû¿Ü¼± µ¥ÀÌÅÍ ¿¬ÇÕ; Infrared Data Association) <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>no?</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>1.15 Mb/s¿Í 4 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>?</em> <item>±¸¸Å ¹æ¹ý: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em> <item>ÀÎÅÍÆäÀ̽º/¹ö½º: <em>IrDA</em> <item>³×Æ®¿÷ ±¸Á¶: <em>ªÀº °Å¸® ¹«¼±(thin air) ;-)</em> <item>±â°è´ç ºñ¿ë: <em>$0 </em> </itemize> IrDA(Àû¿Ü¼± µ¥ÀÌÅÍ ¿¬ÇÕ, <htmlurl url="http://www.irda.org/" name="http://www.irda.org/">)´Â ¸¹Àº ·¦Åé ÇǽõéÀÇ Ãø¸é¿¡ ÀÖ´Â ÀÛÀº Àû¿Ü¼± ÀåÄ¡ÀÌ´Ù. ÀÌ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇؼ­ µÎ °³ ÀÌ»óÀÇ ±â°èµéÀ» Ä¿³ØÆ®ÇÏ´Â °ÍÀº Ÿ°í ³¯ ¶§ºÎÅÍ ¾î·Æ´Ù. ±×·¡¼­ Ŭ·¯½ºÅ͸µ¿¡ »ç¿ëµÉ °¡´É¼ºÀÌ ³·´Ù. Don Becker°¡ IrDA¿¡ ¸î°¡Áö ¿¹ºñ ÀÛ¾÷À» Çß¾ú´Ù. <sect2> Myrinet <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>¶óÀ̺귯¸®</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>1,280 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>9 ¸¶ÀÌÅ©·Î ÃÊ</em> <item>±¸¸Å ¹æ¹ý: <em>´ÜÀÏ-º¥´õ Çϵå¿þ¾î</em> <item>ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI</em> <item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡ Çãºê</em> <item>±â°è´ç °¡°Ý: <em>$1,800</em> </itemize> Myrinet <url url="http://www.myri.com/">Àº "½Ã½ºÅÛ ¿µ¿ª ³×Æ®¿÷" (System Area Network, SAN)À¸·Î »ç¿ëµÉ ¼ö ÀÖµµ·Ï °í¾ÈµÈ ±Ù°Å¸® ¿µ¿ª ³×Æ®¿÷(LAN)ÀÌ´Ù. Áï º´·Ä ½Ã½ºÅÛÀ¸·Î ¿¬°áµÈ ±â°èµéÀÌ °¡µæÂù ³×Æ®¿÷ Äɺñ³Ý. LAN°ú SAN ¹öÀüµéÀº ¼­·Î ´Ù¸¥ ¹°¸®Àû ¸Åü¸¦ »ç¿ëÇÏ°í ´Ù¼Ò ´Ù¸¥ Ư¼ºµéÀ» °¡Áø´Ù; ÀϹÝÀûÀ¸·Î SAN ¹öÀüÀº Ŭ·¯½ºÅÍ ¾È¿¡¼­ »ç¿ëµÉ °ÍÀÌ´Ù. MyrientÀº ±¸Á¶ÀûÀ¸·Î ¾ÆÁÖ ÀüÅëÀûÀÎ °ÍÀÌÁö¸¸ Ưº°È÷ Àß-±¸ÇöµÈ °ÍÀ̶ó´Â ÆòÆÇÀ» µè°í ÀÖ´Ù. ¸®´ª½º¸¦ À§ÇÑ µå¶óÀ̹ö´Â ¼º´ÉÀÌ ÁÁ´Ù´Â ¸»À» µè´Â´Ù. ºñ·Ï È£½ºÆ® ÄÄÇ»ÅÍ¿¡ ´ëÇÑ ¼­·Î ´Ù¸¥ PCI ¹ö½º ±¸Çö¹°µé¿¡ ´ëÇؼ­ ¿©·¯ Ä¿´Ù¶õ ¼º´É º¯È­µéÀÌ ¸®Æ÷Æ®µÈ ¹Ù°¡ ÀÖ¾úÁö¸¸ ¸»ÀÌ´Ù. ÇöÀç MyrinetÀº ³Ê¹« ½É°¢ÇÏ°Ô "¿¹»êÀ» À§ÇùÇÏ´Â" °ÍÀÌ ¾Æ´Ñ Ŭ·¯½ºÅÍ ±×·ìÀÇ ¼±È£µÇ´Â ³×Æ®¿÷ÀÓ¿¡ Ʋ¸²¾ø´Ù. ¸®´ª½º ÇǾ¾¿¡ ´ëÇÑ »ý°¢ÀÌ ÃÖ¼Ò 256 MB RAM°ú SCSI RAID¸¦ °¡Áø Pentium Pro³ª Pentium II¶ó¸é MyrinetÀÇ °¡°ÝÀº ²Ï ÇÕ¸®ÀûÀÎ °ÍÀÌ µÈ´Ù. ±×·¯³ª Á» ´õ ÀϹÝÀûÀÎ ÇǾ¾ ¼³Á¤À» »ç¿ëÇÑ´Ù¸é ¿©·¯ºÐÀÇ ¼±ÅÃÀÌ Myrinet¿¡ ¿¬°áµÈ <em>N</em> ±â°èµéÀ̳ª ¸ÖƼ ÆнºÆ® À̳ʳÝÀ¸·Î ¹­ÀÎ <em>2N</em>°ú TTL_PAPERS »çÀÌ¿¡ ÀÖ´Ù´Â °ÍÀ» ¾Ë°Ô µÉ °ÍÀÌ´Ù. ¿©·¯ºÐÀÇ ¿¹»êÀÌ ¾ó¸¶³ª µÇ´Â°¡¿Í ¿©·¯ºÐÀÌ ½Å°æ¾²´Â ÄÄÇ»ÅÍÀÇ »ç¾çÀÌ ¾î¶² °ÍÀΰ¡¿¡ µû¶ó ÁÂÁö ¿ìÁö µÈ´Ù. <sect2>ÆĶó½ºÅ×À̼Ç(Parastation) <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>HAL ¶Ç´Â ¼ÒÄÏ ¶óÀ̺귯¸®</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>125 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>2 microseconds</em> <item>±¸ÀÔ ¹æ¹ý: <em>´ÜÀÏ-º¥´õ Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>PCI</em> <item>³×Æ®¿÷ ±¸Á¶: <em>Çãºê¾ø´Â ¸Á(mesh)</em> <item>±â°è´ç ºñ¿ë: <em>> $1,000</em> </itemize> <p> Karlsruhe ´ëÇб³ Á¤º¸°øÇаú(Department of Informatics)ÀÇ ÆĶó½ºÅ×À̼Ç(Parastation) ÇÁ·ÎÁ§Æ® <url url="http://wwwipd.ira.uka.de/parastation">´Â PVM-ȣȯ Ä¿½ºÅÒ Àú-Áöü ³×Æ®¿÷À» ±¸Ãà ÁßÀÌ´Ù. ±×µéÀº ¸ÇóÀ½ Ä¿½ºÅÒ EISA ÀÎÅÍÆäÀ̽º¿Í BSD UNIX¸¦ ½ÇÇàÇÏ´Â ÇǾ¾µéÀ» »ç¿ëÇÑ ¸ÇóÀ½ ±¸ÃàµÈ µÎ°³ÀÇ ÇÁ·Î¼¼¼­ ParaPC ÇÁ·ÎÅäŸÀÔÀ» ¸¸µé¾úÀ¸¸ç ±× ´ÙÀ½ DEC AlphaµéÀ» »ç¿ëÇÑ Á» ´õ Å« Ŭ·¯½ºÅ͵éÀ» ¸¸µé¾ú´Ù. PCI Ä«µåµéÀº HitexÀ̶ó°í ºÒ¸®´Â ȸ»ç¿Í °øÁ¶Çؼ­ ¸¸µé¾îÁ³´Ù(<url url="http://www.hitex.com:80/parastation/"> ÂüÁ¶). ÆĶó½ºÅ×ÀÌ¼Ç Çϵå¿þ¾î´Â ºü¸£°í ½Å·Ú¼º ÀÖ´Â ¸Þ½ÃÁö Àü¼Û°ú ´Ü¼øÇÑ °ü¹®(barrier) µ¿±âÈ­¸¦ ±¸ÇöÇÑ °ÍÀÌ´Ù. <sect2>PLIP <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>1.2 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>1,000 microseconds?</em> <item>±¸ÀÔ ¹æ¹ý: <em>»óÇ° Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>SPP</em> <item>³×Æ®¿÷ ±¸Á¶: <em>2 ±â°è °£ ÄÉÀ̺í</em> <item>±â°è´ç ºñ¿ë: <em>$2</em> </itemize> <p> "LapLink" ÄÉÀ̺íÀÇ ºñ¿ëÀ¸·Î PLIP(Parallel Line Interface Protocol)´Â Ç¥ÁØ ¼ÒÄÏ-±â¹Ý ¼ÒÇÁÆ®¿þ¾î¸¦ »ç¿ëÇÏ¿© Ç¥ÁØ Æз¯·² Æ÷Æ®µéÀ» ÅëÇؼ­ µÎ ¸®´ª½º ±â°èµéÀÌ Åë½ÅÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ´ë¿ªÆø, Áöü, ±×¸®°í ÃøÁ¤°¡´É¼º(scalability)ÀÇ Ãø¸é¿¡¼­ º¸¸é ÀÌ°ÍÀº ¾ÆÁÖ Áß¿äÇÑ ³×Æ®¿÷ ±â¼úÀÌ ¾Æ´Ï´Ù. ±×·¯³ª °ÅÀÇ ¿µ¿¡ °¡±î¿î °¡°Ý°ú ¼ÒÇÁÆ®¿þ¾î ȣȯ¼ºÀÌ À¯¿ëÇÏ´Ù. µå¶óÀ̹ö´Â Ç¥ÁØ ¸®´ª½º Ä¿³Î ¹èÆ÷ÆÇÀÇ ÀϺÎÀÌ´Ù. <sect2>SCI <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>no</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>4,000 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>2.7 microseconds</em> <item>±¸ÀÔ ¹æ¹ý: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>ƯÁ¤È¸»ç(proprietary) PCI</em> <item>³×Æ®¿÷ ±¸Á¶: <em>?</em> <item>±â°è´ç ºñ¿ë: <em>> $1,000</em> </itemize> <p> SCI (Scalable Coherent Interconnect, ANSI/IEEE 1596-1992)ÀÇ ¸ñÀûÀº ±âº»ÀûÀ¸·Î ¸¹Àº ¼öÀÇ ±â°èµé¿¡ °ÉÃÄ ±ÙÁ¢(coherent) °øÀ¯ ¸Þ¸ð¸® °øÀ¯¸¦ Áö¿øÇÒ ¼ö ÀÖ´Â °í¼º´É ¸ÞÄ«´ÏÁò°ú ´Ù¾çÇÑ Å¸ÀÔÀÇ ¸Þ½ÃÁö Àü¼ÛÀ» Á¦°øÇÏ´Â °ÍÀÌ´Ù. SCIÀÇ °í¾ÈµÈ ´ë¿ªÆø°ú Áöü´Â ´ëºÎºÐÀÇ ´Ù¸¥ ³×Æ®¿÷ ±â¼úµé°ú ºñ±³Çؼ­ µÑ ´Ù "³î¶ó¿î °Í"À̶ó°í ¸»Çصµ ±¦Âú´Ù. ´ÜÁ¡Àº SCI°¡ ½Ñ Á¦Ç° À¯´ÏÆ®·Î½á ³Î¸® »ç¿ë°¡´ÉÇÏÁö ¾Ê´Ù´Â °Í°ú ¸®´ª½º Áö¿øÀÌ ¾ÆÁ÷ ¾ø´Ù´Â °ÍÀÌ´Ù. SCI´Â ÁÖ·Î HP/Convex Exemplar SPP¿Í Sequent NUMA-Q 2000(<url url="http://www.sequent.com/">)¿Í °°Àº Áö¿ªÀûÀ¸·Î-°øÀ¯µÈ ¹°¸®ÀûÀ¸·Î-¹èÆ÷µÈ ¸Þ¸ð¸® ±â°èµé(logically-shared physically-distributed memory machines)¿¡ ´ëÇÑ ´Ù¾çÇÑ °íÀ¯ µðÀÚÀÎ ¾È¿¡¼­ »ç¿ëµÇ¾ú´Ù. ±×·¯³ª Dolphin(<url url="http://www.sequent.com/"> ÂüÁ¶)·ÎºÎÅÍ SCI´Â PCI ÀÎÅÍÆäÀ̽º Ä«µå¿Í 4-way ½ºÀ§Ä¡(16 ±â°èµé±îÁö ³×°³ÀÇ 4-way ½ºÀ§Ä¡µéÀ» ºÙ¿©¼­ ¿¬°áµÉ ¼ö ÀÖ´Ù)µéÀÌ ±×µéÀÇ CluStar Á¦Ç° ¶óÀÎÀ¸·Î½á »ç¿ë°¡´ÉÇÏ´Ù. SCI °³°ü¿¡ ´ëÇÑ ÁÁÀº ¸µÅ©µéÀº CERN¿¡ ÀÇÇؼ­ <url url="http://www.cern.ch/HSI/sci/sci.html">¿¡¼­ °ü¸®µÈ´Ù. <sect2>SCSI <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>5 Mb/s</em>¿¡¼­ <em>20 Mb/s</em> ÀÌ»ó±îÁö <item>ÃÖ¼Ò Áöü: <em>?</em> <item>±¸ÀÔ ¹æ¹ý: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>PCI, EISA, ISA Ä«µå</em> <item>³×Æ®¿÷ ±¸Á¶: <em>SCSI ÀåºñµéÀ» °øÀ¯ÇÏ´Â ±â°è°£ ¹ö½º</em> <item>±â°è´ç ºñ¿ë: <em>?</em> </itemize> <p> SCSI (Small Computer Systems Interconnect)´Â ±âº»ÀûÀ¸·Î µð½ºÅ© µå¶óÀ̺êµé, CDROMµé, À̹ÌÁö ½ºÄ³³Ê µî°ú °°Àº µ¥ »ç¿ëµÇ´Â I/O ¹ö½ºÀÌ´Ù. ¿©±â¿¡´Â ºÐ¸®µÈ ¼¼°³ÀÇ Ç¥Áصé SCSI-1, SCSI-2, ±×¸®°í SCSI-3; Fast and Ultra speeds; ±×¸®°í µ¥ÀÌÅÍ Æнº ³Êºñ·Î 8, 16, ¶Ç´Â 32ºñÆ®(SCSI-3¿¡¼­ ¾ð±ÞµÈ FireWire ȣȯ¼º°ú ÇÔ²²) °¡ ÀÖ´Ù. ÀÌ°ÍÀº ¾ÆÁÖ È¥¶õ½º·´´Ù. ±×·¯³ª ¿ì¸®´Â ¸ðµÎ ÁÁÀº SCSI´Â EIDEº¸´Ù ´õ ºü¸£°í ÀåºñµéÀ» Á» ´õ È¿À²ÀûÀ¸·Î °ü¸®ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ¾È´Ù. ¸¹Àº »ç¶÷µéÀÌ ±ú´ÝÁö ¸øÇÏ´Â °ÍÀº µÎ ÄÄÇ»Å͵éÀÌ ´ÜÀÏ SCSI ¹ö½º¸¦ °øÀ¯ÇÏ´Â °ÍÀÌ ¾ÆÁÖ ´Ü¼øÇÏ´Ù´Â »ç½ÇÀÌ´Ù. ÀÌ·± ¼³Á¤ ŸÀÔÀº ±â°è°£ µð½ºÅ© µå¶óÀ̺êµéÀ» °øÀ¯ÇÏ°í <bf>Àå¾Ö º¹±¸(fail-over)</bf>¸¦ ±¸Çö-ÇÑ ±â°è°¡ ´Ù¸¥ ±â°è°¡ ½ÇÆÐÇßÀ» ¶§ µ¥ÀÌÅͺ£À̽º ¿ä±¸¸¦ ¶°¸Ãµµ·Ï ÇÏ°Ô ÇÔÀ¸·Î½á-¿¡ ¾ÆÁÖ À¯¿ëÇÏ´Ù. ÇöÀç ÀÌ°ÍÀº ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®ÀÇ PC Ŭ·¯½ºÅÍ Á¦Ç° WolfPack¿¡ ÀÇÇؼ­ Áö¿øµÇ´Â À¯ÀÏÇÑ ¸ÞÄ«´ÏÁòÀÌ´Ù. ±×·¯³ª Á» ´õ Å« ½Ã½ºÅÛµé·Î È®ÀåµÉ ¼ö ¾ø´Ù´Â °ÍÀÌ °øÀ¯ SCSI¸¦ ÀϹÝÀûÀÎ º´·Ä 󸮿¡ ÀÖ¾î ´ú Èï¹Ì·Ó°Ô ¸¸µç´Ù. <sect2>¼­¹ö³Ý(ServerNet) <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>no</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>400 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>3 microseconds</em> <item>±¸ÀÔ ¹æ¹ý: <em>´ÜÀÏ-º¥´õ Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>PCI</em> <item>³×Æ®¿÷ ±¸Á¶: <em>ÇãºêÀÇ À°°¢ Æ®¸®/4¸éü °ÝÀÚ(hexagonal tree/tetrahedral lattice of hubs)</em> <item>±â°è´ç ºñ¿ë: <em>?</em> </itemize> <p> ¼­¹ö³Ý(ServerNet)Àº Tandem, <url url="http://www.tandem.com">ÀÇ °í-¼º´É ³×Æ®¿÷ Çϵå¿þ¾îÀÌ´Ù. Ưº°È÷ ¿Â¶óÀÎ Æ®·£Àè¼Ç ó¸®(OLTP) ¼¼°è¿¡¼­ ÅÄ´ýÀº °í-½Å·Úµµ ½Ã½ºÅÛµéÀÇ ¼±µÎ·Î ¾Ë·ÁÁ® À־ ±×µéÀÇ ³×Æ®¿÷ÀÌ °í-¼º´É »Ó¸¸ÀÌ ¾Æ´Ï°í "³ôÀº µ¥ÀÌÅÍ ÅëÇÕ(integrity)°ú ½Å·Úµµ"±îÁö ÁÖÀåÇصµ ³î¶ó¿î ÀÏÀÌ ¾Æ´Ï´Ù. ServerNetÀÇ ´Ù¸¥ Èï¹Ì·Î¿î ¸éÀº ÀÓÀÇÀÇ ÀåÄ¡¿¡¼­ ´Ù¸¥ ÀÓÀÇÀÇ ÀåÄ¡·Î Á÷Á¢ µ¥ÀÌÅ͸¦ Àü¼ÛÇÒ ¼ö ÀÖ´Ù°í ÁÖÀåÇÑ´Ù´Â °ÍÀÌ´Ù; <ref id="sec_MPI" name="MPI"> ¼½¼Ç¿¡¼­ ¼³¸íµÈ MPI ¸®¸ðÆ® ¸Þ¸ð¸® ¾ï¼¼½º ¸ÞÄ«´ÏÁòµé¿¡ ÀÇÇؼ­ Á¦¾ÈµÈ °Í°ú ºñ½ÁÇÑ ¿ø-»çÀÌµå ½ºÅ¸ÀÏ·Î, ÇÁ·Î¼¼¼­µé»çÀ̻Ӹ¸ÀÌ ¾Æ´Ï°í µð½ºÅ© µå¶óÀ̺êµé µî »çÀÌ¿¡¼­µµ ±×·¸´Ù. ¼­¹ö³Ý¿¡ ´ëÇÑ ¸¶Áö¸· ÇÑ°¡Áö ÄÚ¸àÆ®: ´ÜÁö ½Ì±Û º¥´õ¸¸ Á¸ÀçÇÏÁö¸¸ ±× º¥´õ´Â ¼­¹ö³ÝÀ» ÁÖ¿ä Ç¥ÁØÀ¸·Î, ÀáÀçÀûÀ¸·Î ¸¸µé ¼ö ÀÖÀ» ¸¸Å­ ÃæºÐÈ÷ °­·ÂÇÏ´Ù. TandemÀº Compaq ¼ÒÀ¯ÀÌ´Ù. <sect2>SHRIMP <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>»ç¿ëÀÚ-·¹º§ ¸Þ¸ð¸® ¸ÊµÈ(memory-mapped) ÀÎÅÍÆäÀ̽º</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>180 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>5 microseconds</em> <item>±¸ÀÔ ¹æ¹ý: <em>¿¬±¸ ÇÁ·ÎÅäŸÀÔ</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>EISA</em> <item>³×Æ®¿÷ ±¸Á¶: <em>mesh backplane (ÀÎÅÚ Paragon¿Í À¯»ç)</em> <item>±â°è´ç ºñ¿ë: <em>?</em> </itemize> <p> ÇÁ¸°½ºÅÏ ´ëÇб³ ÄÄÇ»ÅÍ °úÇÐ Çаú¿¡¼­ ÁøÇàÇÏ°í ÀÖ´Â SHRIMP ÇÁ·ÎÁ§Æ®, <url url="http://www.CS.Princeton.EDU/shrimp/">´Â ó¸® ³ëµå·Î½á ¸®´ª½º¸¦ ½ÇÇàÇÏ´Â ÇǾ¾µéÀ» »ç¿ëÇÑ º´·Ä ÄÄÇ»Å͸¦ ±¸ÃàÇÏ°í ÀÖ´Ù. ù¹ø° SHRIMP(Scalable, High-Performance, Really Inexpensive Multi-ProcessorÀÇ ¾àÀÚ)´Â Ä¿½ºÅÒ EISA Ä«µå ÀÎÅÍÆäÀ̽º À§ÀÇ µà¾ó Æ÷Æ®¸¦ °¡Áö´Â RAMÀ» »ç¿ëÇÑ ´Ü¼øÇÑ µÎ-ÇÁ·Î¼¼¼­ ÇÁ·ÎÅä ŸÀÔÀ̾ú´Ù. Áö±ÝÀº ÀÎÅÚ Paragon(<url url="http://www.ssd.intel.com/paragon.html"> ÂüÁ¶)¿¡¼­ »ç¿ëµÈ ±×¹°¸Á(mesh) ¶ó¿ìÆà ³×Æ®¿÷°ú ±âº»ÀûÀ¸·Î µ¿ÀÏÇÑ "hub"¿¡ ¿¬°áÇϱâ À§Çؼ­ Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â Á» ´õ Å« ¼³Á¤µé¿¡ È®Àå°¡´ÉÇÑ ÇÁ·ÎÅäŸÀÔÀÌ Á¸ÀçÇÑ´Ù. ¿Àº£Çìµå°¡ ÀûÀº "°¡»ó ¸Þ¸ð¸® ¸ÊµÈ Åë½Å" Çϵå¿þ¾î¿Í Áö¿ø ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇϱâ À§ÇÑ »ó´çÈ÷ ¸¹Àº ³ë·ÂÀÌ ÀÌ·ç¾îÁ³´Ù. <sect2>SLIP <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>0.1 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>1,000 microseconds?</em> <item>±¸ÀÔ ¹æ¹ý: <em>»óÇ° Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>RS232C</em> <item>³×Æ®¿÷ ±¸Á¶: <em>µÎ ±â°èµé »çÀÌ¿¡ ÄÉÀÌºí »ç¿ë</em> <item>±â°è´ç ºñ¿ë: <em>$2</em> </itemize> <p> ºñ·Ï SLIP(½Ã¸®¾ó ¶óÀÎ ÀÎÅÍÆäÀ̽º ÇÁ·ÎÅäÄÝ;Serial Line Interface Protocol)Àº ¼º´É ½ºÆåÆ®·³¿¡¼­ ³·Àº ÂÊ¿¡ ¿ÏÀüÈ÷ À§Ä¡ÇÏ°í ÀÖÁö¸¸ SLIP(¶Ç´Â CSLIP¶Ç´Â PPP)´Â µÎ ±â°èµéÀÌ ÀÏ¹Ý RS232 ½Ã¸®¾ó Æ÷Æ®µéÀ» ÅëÇؼ­ ¼ÒÄÏ Åë½ÅÀ» ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ¶Ç´Â ±×µéÀº ¸ðµ©À» °æÀ¯ÇÑ ´ÙÀ̾ó-¾÷À» ÅëÇؼ­ ¿¬°áµÉ ¼öµµ ÀÖ´Ù. ¾î¶² °æ¿ì¿¡µµ Áöü ½Ã°£Àº ³ô°í ´ë¿ªÆøÀº ³·´Ù. ±×·¡¼­ SLIPÀº ´Ù¸¥ ´ë¾ÈµéÀÌ ÀüÇô ºÒ°¡´ÉÇÒ ¶§¸¸ »ç¿ëµÇ¾î¾ß ÇÒ °ÍÀÌ´Ù. ±×·¯³ª ´ëºÎºÐÀÇ ÇǾ¾µåÀÌ µÎ °³ÀÇ RS232 Æ÷Æ®µéÀ» °®°í ÀÖ´Ù´Â °ÍÀº ÁÖ¸ñÇÒ¸¸ÇÑ °¡Ä¡°¡ ÀÖ´Ù. ±×·¡¼­ ±â°èµéÀ» ¼±Çü ¹è¿­À̳ª ¸µÇüÀ¸·Î ´Ü¼øÇÏ°Ô ¿¬°áÇؼ­ ±â°èµé ±×·ìÀ» ³×Æ®¿öÅ·ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. EQLÀ̶ó°í ºÒ¸®´Â ·Îµå ½¦¾î¸µ ¼ÒÇÁÆ®¿þ¾îµµ Á¸ÀçÇÑ´Ù. <sect2>TTL_PAPERS <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>AFAPI ¶óÀ̺귯¸®</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>1.6 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>3 microseconds</em> <item>±¸ÀÔ ¹æ¹ý: <em>ÆÛºí¸¯-µµ¸ÞÀÎ ¼³°è, ½Ì±Û-º¥´õ Çϵå¿þ¾î</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>SPP</em> <item>³×Æ®¿÷ ±¸Á¶: <em>ÇãºêµéÀÇ Æ®¸®</em> <item>±â°è´ç ºñ¿ë: <em>$100</em> </itemize> <p> ÆÛµà ´ëÇб³ÀÇ ÀüÀÚ ¹× ÄÄÇ»ÅÍ ¿£Áö´Ï¾î¸µ Çб³¿¡¼­ ¼öÇà ÁßÀÎ PAPERS (Purdue's Adapter for Parallel Execution and Rapid Synchronization) ÇÁ·ÎÁ§Æ®, <url url="http://garage.ecn.purdue.edu/~papers/">´Â º´·Ä ½´ÆÛÄÄÇ»ÅÍ°¡ º¯Á¶µÇÁö ¾ÊÀº ÇǾ¾µé/¿öÅ©½ºÅ×À̼ǵéÀ» ³ëµå·Î »ç¿ëÇÏ¿© ±¸ÃàµÉ ¼ö ÀÖµµ·Ï ÇÏ´Â, Å©±â Á¶Àý °¡´ÉÇÏ°í ³·Àº-Áöü ½Ã°£À» °¡Áö¸ç ÁýÇÕ ÇÔ¼ö Åë½Å Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î¸¦ ±¸Ãà Áß¿¡ ÀÖ´Ù. µÎ°¡Áö °³¹ß ¶óÀεéÀ» ´ë·« µû¸£´Â SPP(Ç¥ÁØ Æз¯·² Æ÷Æ®; Standard Parallel Port)¸¦ ÅëÇؼ­ ÇǾ¾µé/¿öÅ©½ºÅ×À̼ǵéÀ» ¿¬°áÇÑ PAPERS Çϵå¿þ¾î´Â ±× Á¾·ù°¡ 12°¡Áö°¡ ³Ñ´Â´Ù. "PAPERS"¶ó°í ºÒ¸®´Â ¹öÀüµéÀº ÀûÀýÇÑ ±â¼úÀÌ¸é ¹«¾ùÀ̵çÁö »ç¿ëÇؼ­ ´õ ³ôÀº ¼º´ÉÀ» ¸ñÇ¥·Î ÇÑ´Ù; ÇöÀç ÀÛ¾÷Àº FPGAµé°ú Áö±Ý °³¹ß Áß¿¡ ÀÖ´Â ³ôÀº ´ë¿ªÀÇ PCI ¹ö½º ÀÎÅÍÆäÀ̽º ¼³°èµéÀ» »ç¿ëÇÑ´Ù. ¹Ý¸é¿¡ "TTL_PAPERS"À̶ó°í ºÒ¸®´Â ¹öÀüµéÀº ÆÛµà ´ëÇÐ ¹Ù±ù¿¡¼­ ½±°Ô Àç»ý»êµÉ ¼ö ÀÖµµ·Ï µðÀÚÀÎµÈ °ÍÀÌ°í ÀϹÝÀûÀÎ TTL ·ÎÁ÷À» »ç¿ëÇؼ­ ¸¸µé¾îÁú ¼ö ÀÖ´Â ¾ÆÁÖ ´Ü¼øÇÑ °ø¿ë µµ¸ÞÀÎ ¼³°è(public domain designs)ÀÌ´Ù. ÀÌ·± µðÀÚÀÎ Áß Çϳª´Â »ó¿ëÀ¸·Î ¸¸µé¾îÁ³´Ù. <url url="http://chelsea.ios.com:80/~hgdietz/sbm4.html"> ´Ù¸¥ ´ëÇеéÀÇ Ä¿½ºÅÒ Çϵå¿þ¾î µðÀÚÀΰú ´Ù¸£°Ô TTL_PAPERS Ŭ·¯½ºÅ͵éÀº USA¿¡¼­ ´ëÇѹα¹±îÁö ¸¹Àº ´ëÇе鿡¼­ Á¶¸³µÇ¾î ¿Ô´Ù. ´ë¿ªÆøÀº SPP Ä¿³Ø¼Çµé¿¡ ÀÇÇؼ­ ½É°¢ÇÏ°Ô Á¦ÇѵǾî ÀÖÁö¸¸ °¡Àå ºü¸¥ ¸Þ½ÃÁö-±â¹Ý ½Ã½ºÅÛµéÀº ±×·¯ÇÑ ÁýÇÕ ÇÔ¼öµé(aggregate functions)¿¡ ´ëÇؼ­ ÇÊÀûÇÒ¸¸ÇÑ ¼º´ÉÀ» Á¦°øÇÒ ¼ö ¾ø´Ù. ±×·¡¼­ PAPERS´Â Ưº°È÷ ºñµð¿À º®(video wall; ¿ªÀÚÁÖ: Àü½ÃÀå µî¿¡¼­ º¼ ¼ö ÀÖ´Â ´ëÇü µð½ºÇ÷¹ÀÌ ¹× ÄÄÇ»ÅÍ, »ç¿îµå ½Ã½ºÅÛÀÇ Á¶ÇÕ)ÀÇ µð½ºÇ÷¹À̸¦ µ¿±âÈ­ÇÏ´Â µ¥(ºñµð¿À º®¿¡ ´ëÇؼ­ ¾ÕÀ¸·Î ³ª¿Ã Video Wall HOWTO¿¡¼­ ÀÚ¼¼È÷ ´Ù·ê °ÍÀÌ´Ù), °í-´ë¿ª ³×Æ®¿÷¿¡ ´ëÇÑ ½ºÄÉÁÙ¸µ ¾ï¼¼½º, À¯ÀüÀÚ °Ë»ö(genetic search)¿¡¼­ Àü¿ª ºñ±³(global fitness)¸¦ Æò°¡ÇÏ´Â °Í µî¿¡¼­ Ź¿ùÇÏ´Ù. ºñ·Ï PAPERS Ŭ·¯½ºÅ͵éÀÌ IBM PowerPC AIX, DEC Alpha OSF/1, ±×¸®°í HP PA-RISC HP-UX ±â°èµéÀ» »ç¿ëÇؼ­ ¸¸µé¾îÁ³Áö¸¸ ¸®´ª½º-±â¹Ý PCµéÀÌ °¡Àå Àß Áö¿øµÇ´Â Ç÷§ÆûÀÌ´Ù. TTL_PAPERS AFAPI¸¦ »ç¿ëÇÏ´Â »ç¿ëÀÚ ÇÁ·Î±×·¥µéÀº ¸®´ª½º¿¡¼­, °¢ ¾ï¼¼½º¿¡ ´ëÇؼ­ OS È£Ãâ¾øÀÌ SPP Çϵå¿þ¾î Æ÷Æ® ·¹Áö½ºÅ͵éÀ» ¾ï¼¼½ºÇÑ´Ù. ÀÌ·¸°Ô Çϱâ À§Çؼ­ AFAPI´Â ¸Ç¸ÕÀú <tt>iopl()</tt>³ª <tt>ioperm()</tt>¸¦ »ç¿ëÇؼ­ Æ÷Æ® Æ۹̼ÇÀ» ȹµæÇÑ´Ù. ÀÌ·± È£ÃâµéÀÇ ¹®Á¦Á¡Àº µÑ ´Ù »ç¿ëÀÚ ÇÁ·Î±×·¥ÀÌ ±ÇÇÑÀ» °®µµ·Ï(¿ªÀÚÁÖ: ¾Æ¹«·¡µµ ·çÆ® ±ÇÇÑÀÏ °Í °°´Ù) ¿ä±¸Çؼ­ ÀáÀçÀûÀÎ º¸¾È ±¸¸ÛÀ» ¸¸µç´Ù´Â °ÍÀÌ´Ù. ¼Ö·ç¼ÇÀº ¼±ÅÃÀûÀÎ Ä¿³Î ÆÐÄ¡, <url url="http://garage.ecn.purdue.edu/~papers/giveioperm.html">ÀÌ´Ù. ÀÌ°ÍÀº ±ÇÇÑÀÖ´Â ÇÁ·Î¼¼½º°¡ ÀÓÀÇÀÇ ÇÁ·Î¼¼½º¿¡ ´ëÇÑ Æ÷Æ® Æ۹̼ÇÀ» Á¦¾îÇϵµ·Ï ÇÑ´Ù. <sect2>USB (Universal Serial Bus) <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>kernel driver</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>12 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>?</em> <item>±¸ÀÔ ¹æ¹ý: <em>commodity hardware</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>USB</em> <item>³×Æ®¿÷ ±¸Á¶: <em>bus</em> <item>±â°è´ç ºñ¿ë: <em>$5?</em> </itemize> <p> USB (Universal Serial Bus, <url url="http://www.usb.org/">)´Â Å°º¸µå, È­»ó ȸÀÇ Ä«¸Þ¶ó µî 127°³±îÁö ÁÖº¯±â±âµéÀ» ´Þ ¼ö ÀÖ°í ÇÖ-Ç÷¯±×(hot-pluggable) °¡´ÉÇÑ ÀÏ¹Ý ÀÌ´õ³Ý ¼öÁØÀÇ ¼Óµµ¸¦ ³»´Â ¹ö½ºÀÌ´Ù. ¾ó¸¶³ª ¸¹Àº ÄÄÇ»Å͵éÀÌ ¼­·Î USB¸¦ »ç¿ëÇؼ­ ¿¬°áµÉ ¼ö ÀÖ´ÂÁö´Â ½ÇÁ¦ ¸íÈ®ÇÏÁö ¾Ê´Ù. ¾î·µç USB Æ÷Æ®µéÀº Áö±Ý ºü¸£°Ô RS232¿Í SPP¿Í °°Àº PC ¸¶´õº¸µåÀÇ Ç¥ÁØÀÌ µÇ¾î°¡°í ÀÖ´Ù. ±×·¯¹Ç·Î ¿©·¯ºÐÀÌ ±¸¸ÅÇÑ Â÷±â PCÀÇ µÚÆí¿¡ USB Æ÷Æ®µéÀÌ ¼û¾î ÀÖ´õ¶óµµ ³î¶óÁö ¸»±â ¹Ù¶õ´Ù. ¸®´ª½º µå¶óÀ̹ö °³¹ßÀº <url url="http://peloncho.fis.ucm.es/~inaky/USB.html">¿¡¼­ ³íÀǵǰí ÀÖ´Ù. ¿©·¯°¡Áö Á¡¿¡¼­ USB´Â °ÅÀÇ ¿©·¯ºÐÀÌ ÇöÀç ±¸¸ÅÇÒ ¼ö ÀÖ´Â, ³·Àº-¼º´É, Á¦·Î-ºñ¿ë(zero-cost)ÀÎ FireWire ¹öÀüÀÌ´Ù. <sect2>WAPERS <p> <itemize> <item>¸®´ª½º Áö¿ø: <em>AFAPI library</em> <item>ÃÖ´ë ´ë¿ªÆø: <em>0.4 Mb/s</em> <item>ÃÖ¼Ò Áöü: <em>3 microseconds</em> <item>±¸ÀÔ ¹æ¹ý: <em>public-domain design</em> <item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>SPP</em> <item>³×Æ®¿÷ ±¸Á¶: <em>wiring pattern between 2-64 machines</em> <item>±â°è´ç ºñ¿ë: <em>$5</em> </itemize> <p> WAPERS (º´·Ä ½ÇÇà°ú ºü¸¥ µ¿±âÈ­¸¦ À§ÇÑ Wired-AND ¾Æ´äÅÍ; Wired-AND Adapter for Parallel Execution and Rapid Synchronization)´Â ÆÛµà ´ëÇб³ÀÇ ÀüÀÚ ÄÄÇ»ÅÍ °øÇÐ Çб³¿¡¼­ ¼öÇà ÁßÀÎ PAPERS ÇÁ·ÎÁ§Æ®, <url url="http://garage.ecn.purdue.edu/~papers/">ÀÇ ºÎ»ê¹°ÀÌ´Ù. ÀûÀýÇÏ°Ô ±¸ÇöµÈ´Ù¸é SPP´Â 4-ºñÆ® Æø wired AND¸¦ ±¸ÇöÇϱâ À§Çؼ­ ±â°èµé °£ ¼­·Î ¹­ÀÏ ¼ö ÀÖ´Â 4ºñÆ® ¿ÀÇÂ-ÄÝ·ºÅÍ Ãâ·ÂÀ» °¡Áø´Ù. ÀÌ wired-AND´Â ÀüÀÚ°øÇÐÀûÀ¸·Î ´Ù·ç±â ¾î·Á¿î °ÍÀÌ°í ÀÌ·± ½ÄÀ¸·Î ¿¬°áµÉ ¼ö ÀÖ´Â ±â°èµéÀÇ ÃÖ´ë °³¼ö´Â Æ÷Æ®ÀÇ ¾Æ³¯·Î±× Ư¼º¿¡ Á¾¼ÓÀûÀÌ´Ù(ÃÖ´ë ¼ö½Å Àü·ù(sink current)¿Í ÈÞ½Ä ·¹Áö½ºÅÍ(pull-up register) °ª); ÀüÇüÀûÀ¸·Î 7°³ ³»Áö 8°³ ±â°èµéÀÌ WAPERS·Î ³×Æ®¿öÅ·µÉ ¼ö ÀÖ´Ù. ºñ·Ï ºñ¿ë°ú Áöü½Ã°£ÀÌ ¾ÆÁÖ ³·Áö¸¸, ±×·¡¼­ ´ë¿ªÆøµµ ³·´Ù; WAPERS´Â Ŭ·¯½ºÅÍ¿¡¼­ ´ÜÀÏ ³×Æ®¿÷À¸·Î½á°¡ ¾Æ´Ï¶ó ÁýÇÕ ÀÛ¾÷µé¿¡ ´ëÇÑ µÎ¹ø° ³×Æ®¿÷À¸·Î½á ÈξÀ ´õ ÁÁ´Ù. TTL_PAPERS¿Í ÇÔ²², ½Ã½ºÅÛ º¸¾ÈÀ» ³ôÀ̱â À§Çؼ­, ¹Ýµå½Ã ÇÊ¿äÇÏÁö´Â ¾ÊÁö¸¸ ±Ç°íµÇ´Â ¸¶ÀÌ³Ê Ä¿³Î ÆÐÄ¡°¡ ÀÖ´Ù: <url url="http://garage.ecn.purdue.edu/~papers/giveioperm.html">. <!-- ------------------------------------------------------------- --> <sect1>³×Æ®¿÷ ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽º(Network Software Interface) <!-- ------------------------------------------------------------- --> <p> º´·Ä ¾îÇø®ÄÉÀ̼ǵéÀ» Áö¿øÇÏ´Â ¼ÒÇÁÆ®¿þ¾î¸¦ ³íÀÇÇϱâ ÀÌÀü¿¡ ³×Æ®¿÷ Çϵå¿þ¾î¿¡ ´ëÇÑ ·Î¿ì-·¹º§ ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽ºÀÇ ±âº»À» °£´ÜÈ÷ ¸ÕÀú ¾ê±âÇÏ´Â °ÍÀÌ À¯¿ëÇÏ´Ù. ½ÇÁ¦·Î 3°¡Áö ±âº» ¼±Åø¸ Á¸ÀçÇÑ´Ù: ¼ÒÄÏ, ÀåÄ¡ ±¸µ¿±â(device drivers), ±×¸®°í À¯Àú-·¹º§ ¶óÀ̺귯¸®. <sect2>¼ÒÄÏ <p> Áö±Ý±îÁö °¡Àå ÀϹÝÀûÀÎ ·Î¿ì-·¹º§ ³×Æ®¿÷ ÀÎÅÍÆäÀ̽º´Â ¼ÒÄÏ ÀÎÅÍÆäÀ̽ºÀÌ´Ù. ¼ÒÄÏÀº Áö³­ 10³â°£ À¯´Ð½ºÀÇ ÀϺο´°í ´ëºÎºÐÀÇ Ç¥ÁØ ³×Æ®¿÷ Çϵå¿þ¾î´Â Àû¾îµµ µÎ°¡Áö ŸÀÔÀÇ ¼ÒÄÏ ÇÁ·ÎÅäÄݵé: UPD¿Í TCP¸¦ Áö¿øÇϵµ·Ï ¼³°èµÈ °ÍÀÌ´Ù. µÎ ¼ÒÄÏ Å¸ÀÔµéÀº ÇÑ ±â°è¿¡¼­ ´Ù¸¥ °ÍÀ¸·Î ÀÓÀÇ Å©±âÀÇ µ¥ÀÌÅÍ ºí·°À» Àü¼ÛÇÒ ¼ö ÀÖµµ·Ï ÇÏÁö¸¸ ¸î°¡Áö Áß¿äÇÑ Â÷ÀÌ°¡ ÀÖ´Ù. ºñ·Ï ¼º´ÉÀº ³×Æ®¿÷ Æ®·¡ÇÈ¿¡ µû¶ó¼­ ÈξÀ ¾ÇÈ­µÉ ¼ö ÀÖÁö¸¸ ÀüÇüÀûÀ¸·Î ÀÌ µÎ°¡Áö´Â ¾à 1,000 ¸¶ÀÌÅ©·Î ÃÊ Á¤µµÀÇ ÃÖ¼Ò Áöü¸¦ ¸¸µç´Ù. ÀÌ·± ¼ÒÄÏ Å¸ÀÔµéÀº ´ëºÎºÐÀÇ ÀÌ½Ä °¡´É, ÇÏÀÌ-·¹º§, º´·Ä ó¸® ¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇÑ ±âº» ³×Æ®¿÷ ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽ºÀÌ´Ù; ¿¹¸¦ µé¾î¼­ PVMÀº UDP¿Í TCP¸¦ È¥ÇÕÇÏ¿© »ç¿ëÇϱ⠶§¹®¿¡ ÀÌ µÑÀÇ Â÷ÀÌÁ¡À» ¾Æ´Â °ÍÀº ¼º´ÉÀ» Æ©´×ÇÏ´Â µ¥ µµ¿òÀ» ÁÙ °ÍÀÌ´Ù. Á» ´õ ³ªÀº ¼º´ÉÀ» À§Çؼ­ ÇÁ·Î±×·¥ ¾È¿¡¼­ Á÷Á¢ ÀÌ·± ¸ÞÄ«´ÏÁòµéÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ¸Àº UDP¿Í TCPÀÇ ´Ü¼øÇÑ °³°üÀÌ´Ù; ÀÚ¼¼ÇÑ ³»¿ëÀº ¸Å´º¾ó ÆäÀÌÁöµé°ú ÁÁÀº ³×Æ®¿÷ ÇÁ·Î±×·¡¹Ö Ã¥À» º¸±â ¹Ù¶õ´Ù. <sect3>UDP ÇÁ·ÎÅäÄÝ (SOCK_DGRAM) <p> <bf>UDP</bf>´Â »ç¿ëÀÚ µ¥ÀÌÅͱ׷¥ ÇÁ·ÎÅäÄÝ(User Datagram Protocol)ÀÌÁö¸¸ UDPÀÇ ¼Ó¼ºÀ» ½Å·ÚÇÒ ¼ö ¾ø´Â µ¥ÀÌÅͱ׷¥ ó¸®(Unreliable Datagram Processing)·Î Á» ´õ ½±°Ô ±â¾ïÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ´Ù¸¥ ¸»·Î Çؼ­ UDP´Â °¢ ºí·°ÀÌ °³º° ¸Þ½ÃÁö·Î Àü¼ÛµÇµµ·Ï Çã¶ôÇÏÁö¸¸ ¸Þ½ÃÁö´Â Àü¼Û Áß À¯½ÇµÉ ¼ö ÀÖ´Ù. »ç½Ç ³×Æ®¿÷ Æ®·¡ÇÈ¿¡ Á¾¼ÓÀûÀ¸·Î UDP ¸Þ½ÃÁöµéÀº À¯½ÇµÉ ¼ö ÀÖ°í ¿©·¯¹ø µµÂøÇÒ ¼ö Àְųª ±×µéÀÌ º¸³»Áø ¼ø¼­¿Í ´Ù¸¥ ¼ø¼­·Î µµÂøÇÒ ¼ö ÀÖ´Ù. UDP ¸Þ½ÃÁöÀÇ Àü¼ÛÀÚ´Â ÀÚµ¿À¸·Î ¹Þ¾Ò´Ù´Â ÅëÁö(acknowledgement)¸¦ ¹ÞÁö ¾Ê´Â´Ù. ±×·¡¼­ ÀÌ·± ¹®Á¦µéÀ» °ËÃâÇÏ°í º¸ÃæÇÏ´Â °ÍÀº »ç¿ëÀÚ°¡ ÀÛ¼ºÇÑ Äڵ忡 ÀÇÁ¸ÇÑ´Ù. ´ÙÇེ·´°Ôµµ UDP´Â ¸Þ½ÃÁö°¡ µµÂøÇß´Ù¸é ¹ÞÀº ¸Þ½ÃÁö°¡ ¼Õ»óµÈ °ÍÀÌ ¾Æ´Ï°í ¿ÏÀüÇÑ °ÍÀ̶ó°í(Áï, UDP ¸Þ½ÃÁö Á¶°¢¸¸ ¹Þ¾Ò´Ù°í) º¸ÀåÇÑ´Ù. UDP°¡ ÁÁÀº Á¡Àº °¡Àå ºü¸¥ ¼ÒÄÏ ÇÁ·ÎÅäÄÝÀÌ µÇ·Á°í ÇÑ´Ù´Â °ÍÀÌ´Ù. ´õ ³ª¾Æ°¡ UDP´Â "¿¬°á ¾ø´Â(connectionless)" °ÍÀÌ´Ù. ÀÌ°ÍÀº °¢ ¸Þ½ÃÁö°¡ ±âº»ÀûÀ¸·Î ¸ðµç ´Ù¸¥ °Íµé°ú µ¶¸³ÀÌ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÀÌ°Í¿¡ ´ëÇÑ ÁÁÀº ºñÀ¯´Â ÆíÁöÀÌ´Ù; ¿©·¯ºÐÀº µ¿ÀÏÇÑ ÁýÁÖ¼Ò·Î ¿©·¯ ÆíÁö¸¦ º¸³¾ ¼ö ÀÖÁö¸¸ °¢°¢Àº ´Ù¸¥ °Íµé°ú µ¶¸³ÀÌ¸ç ¿©·¯ºÐÀÌ ÆíÁö¸¦ º¸³¾ ¼ö ÀÖ´Â »ç¶÷ÀÇ ¼ö¿¡ ´ëÇÑ Á¦ÇÑÀÌ ¾ø´Ù. <sect3>TCP ÇÁ·ÎÅäÄÝ(SOCK_STREAM) <p> UDP¿Í ´Ù¸£°Ô <bf>TCP</bf>´Â ½Å·ÚÇÒ ¼ö ÀÖ°í, ¿¬°á-±â¹ÝÀÎ ÇÁ·ÎÅäÄÝÀÌ´Ù. º¸³»Áø °¢ ºí·°Àº ¸Þ½ÃÁö·Î º¸ÀÌÁö ¾Ê°í °Ñº¸±â¿¡ Àü¼ÛÀÚ¿Í ¼ö½ÅÀÚ »çÀÌÀÇ ¿¬°áÀ» ÅëÇؼ­ Àü¼ÛµÈ ¿¬¼ÓÀûÀÎ ¹ÙÀÌÆ®¾È¿¡¼­ µ¥ÀÌÅÍ ºí·°À¸·Î º¸ÀδÙ. ÀÌ°ÍÀº UDP ¸Þ½Ã¡°ú ¾ÆÁÖ ´Ù¸£´Ù. ¿Ö³Ä¸é °¢ ºí·°Àº ´Ü¼øÇÏ°Ô ¹ÙÀÌÆ® ½ºÆ®¸²ÀÇ ÀϺÎÀÌ°í °¢ ºí·°À» ¹ÙÀÌÆ® ½ºÆ®¸²¿¡¼­ ÃßÃâÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æ ³»´Â °ÍÀº »ç¿ëÀÚ Äڵ忡 Á¾¼ÓÀûÀ̱⠶§¹®ÀÌ´Ù; ¸Þ½ÃÁöµéÀ» ºÐ¸®ÇÏ´Â ¸¶Å·Àº ¾ø´Ù. ´õ ³ª¾Æ°¡ ³×Æ®¿÷ ¹®Á¦µé¿¡ ´ëÇؼ­ ¿¬°áÀº Á» ´õ ±úÁö±â ½¬¿î °ÍÀÌ°í ¿¬°áÀÇ Á¦ÇÑµÈ °³¼öµé¸¸ÀÌ °¢ ÇÁ·Î¼¼½ºµé¿¡ ´ëÇؼ­ µ¿½Ã¿¡ Á¸ÀçÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº ½Å·ÚÇÒ ¼ö Àֱ⠶§¹®¿¡ TCP´Â ÀϹÝÀûÀ¸·Î UDPº¸´Ù Á» ´õ ¹«°Å¿î ¿À¹öÇìµå¸¦ °¡Áø´Ù. ±×·¯³ª TCP¿¡ °üÇÑ ¸î°¡Áö Áñ°Å¿î ³î¶ó¿î °ÍµéÀÌ Á¸ÀçÇÑ´Ù. ´Ù¼ö ¸Þ½ÃÁöµéÀÌ ¿¬°áÀ» ÅëÇؼ­ Àü´ÞµÇ¾ú´Ù¸é, ªÀº ¶Ç´Â ¦ÀÌ ¸ÂÁö ¾ÊÀº Å©±âÀÇ ¸Þ½ÃÁöµéÀÇ ±×·ì¿¡ ´ëÇؼ­ UDPº¸´Ù ´õ ³ªÀº ¼º´ÉÀ» ÀáÀçÀûÀ¸·Î ³»¸é¼­, TCP´Â ±×°ÍµéÀ» ¹öÆÛ ¾È¿¡¼­ ³×Æ®¿÷ Çϵå¿þ¾î ÆÐŶ Å©±â¿¡ ´õ Àß ¸Âµµ·Ï ¹­À» ¼ö ÀÖ´Ù´Â °ÍÀÌ Ã¹¹ø°ÀÌ´Ù. ´Ù¸¥ º¸³Ê½º´Â ±â°èµé °£¿¡ ½Å·ÚÇÒ ¼ö ÀÖ´Â Á÷Á¢ ¹°¸®Àû ¸µÅ©µéÀ» »ç¿ëÇؼ­ ±¸ÃàµÈ ³×Æ®¿÷Àº TCP ¿¬°áÀ» ½±°í È¿À²ÀûÀ¸·Î Èä³»³¾ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î¼­ ParaStationÀÇ "Socket Library" ÀÎÅÍÆäÀ̽º ¼ÒÇÁÆ®¿þ¾îÀÇ °æ¿ì ÀÌ·¸°Ô µÇ¾ú´Ù. ÀÌ ¼ÒÇÁÆ®¿þ¾î´Â Ç¥ÁØ TCP OS È£Ãâµé°ú °¢ ÇÔ¼ö À̸§¿¡´Ù Á¢µÎ»ç <tt>PSS</tt>¸¦ ºÙÀÌ´Â °Í¸¸ ´Ù¸¥ »ç¿ëÀÚ-·¹º§ È£ÃâµéÀ» »ç¿ëÇÑ TCP ¹®¹ý(semantics)À» Á¦°øÇÑ´Ù. <sect2>ÀåÄ¡ ±¸µ¿±â(Device Drivers) <p> ³×Æ®¿÷¿¡ µ¥ÀÌÅ͸¦ ½ÇÁ¦·Î ³ÖÀ» ¶§°¡, ¶Ç´Â ³×Æ®¿÷À¸·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ²ôÁý¾î ¿Ã ¶§°¡ ¿À¸é Ç¥ÁØ À¯´Ð½º ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽º´Â ÀåÄ¡ ±¸µ¿±â¶ó°í ºÒ¸®´Â À¯´Ð½º Ä¿³ÎÀÇ ÀϺΰ¡ µÈ´Ù. UDP¿Í TCP´Â ´ÜÁö µ¥ÀÌÅ͸¸ Àü¼ÛÇÏÁö ¾Ê°í ±×µéÀº ¶ÇÇÑ »ó´çÇÑ ¾çÀÇ ¼ÒÄÏ °ü¸®ÀÇ ¿À¹öÇìµå¸¦ °®°í ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ ¾î¶² °ÍµéÀº ´Ù¼öÀÇ TCP Ä¿³Ø¼ÇµéÀÌ ÇϳªÀÇ ¹°¸®Àû ³×Æ®¿÷ ÀÎÅÍÆäÀ̽º¸¦ °øÀ¯ÇÒ ¼ö ÀÖ´Ù´Â »ç½ÇÀ» °ü¸®ÇØ¾ß ÇÑ´Ù. ÀÌ¿¡ ºñÇؼ­ Àü¿ë ³×Æ®¿÷ ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ ÀåÄ¡ ±¸µ¿±â´Â ´ÜÁö ¸î°¡Áö ´Ü¼øÇÑ µ¥ÀÌÅÍ Àü¼Û ÇÔ¼öµé¸¸ ±¸ÇöÇÏ¸é µÈ´Ù. ÀÌ·± ÀåÄ¡ µå¶ó¤·À̹ö ÇÔ¼öµéÀº »ç¿ëÀÚ ÇÁ·Î±×·¥¿¡ ÀÇÇؼ­, ÀûÀýÇÑ ÀåÄ¡¸¦ È®ÀÎÇϱâ À§Çؼ­ <tt>open()</tt>À» »ç¿ëÇÏ°í ¿ÀÇÂµÈ "ÆÄÀÏ"¿¡ ´ëÇؼ­ <tt>read()</tt>¿Í <tt>write()</tt>¿Í °°Àº ½Ã½ºÅÛ È£ÃâÀ» »ç¿ëÇÔÀ¸·Î½á, È£ÃâµÉ ¼ö ÀÖ´Ù. ±×·¡¼­ °¢°¢ÀÇ ±×·± ÀÛ¾÷Àº µ¥ÀÌÅÍ ºí·°À» ½Ã½ºÅÛ È£ÃâÀÇ ¿À¹öÇìµåº¸´Ù ´õ ÀÛÀº ¿À¹öÇìµå·Î Àü¼ÛÇÒ ¼ö ÀÖ´Ù. ÀÌ·± ½Ã½ºÅÛ È£ÃâÀº ¼ö½Ê ¸¶ÀÌÅ©·Î ÃÊ°¡ °É¸°´Ù. ¸®´ª½º¿¡ ´ëÇÑ ÀåÄ¡ ±¸µ¿±â¸¦ ÀÛ¼ºÇÏ´Â °ÍÀº ¾î·ÆÁö ¾Ê´Ù... ÀåÄ¡ Çϵå¿þ¾î°¡ ÀÛµ¿ÇÏ´Â ¹æ¹ýÀ» <em>Á¤È®ÇÏ°Ô</em> ¾Ë°í ÀÖ´Ù¸é ¸»ÀÌ´Ù. ÀÌ°ÍÀÌ ÀÛµ¿ÇÏ´Â ¹æ¹ýÀ» ¸ð¸¥´Ù¸é ÃßÃøÇÏÁö ¸»¶ó. ÀåÄ¡ µå¶óÀ̹ö¸¦ µð¹ö±ëÇÏ´Â °ÍÀº Áñ°ÌÁö ¾ÊÀº ÀÏÀÌ°í ½Ç¼öµéÀº Çϵå¿þ¾î¸¦ Å¿ö¸ÔÀ» ¼ö ÀÖ´Ù. ±×·¯³ª ÀÌ°ÍÀÌ ¿©·¯ºÐÀ» ±×·¸°Ô °ÌÁÖ´Â °ÍÀÌ ¾Æ´Ï¶ó¸é, ¿¹¸¦ µé¾î¼­ Àü¿ë ÀÌ´õ³Ý Ä«µå¸¦ ´õ¹Ì·Î ±×·¯³ª ÀϹÝÀûÀÎ ÀÌ´õ³Ý ÇÁ·ÎÅäÄÝ ¿À¹öÇìµå ¾øÀÌ ±â°è-´ë-±â°è ºü¸¥ Á÷Á¢ ¿¬°á·Î »ç¿ëÇϱâ À§Çؼ­, ÀåÄ¡ ±¸µ¿±â¸¦ ÀÛ¼ºÇÏ´Â °ÍÀº °¡´ÉÇÑ ÀÏÀÌ µÉ ¼ö ÀÖ´Ù. »ç½Ç Ãʱâ ÀÎÅÚ ½´ÆÛÄÄÇ»Å͵éÀÌ Çß´ø °Í°ú »ó´çÈ÷ À¯»çÇÏ´Ù.... Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸¸¦ º¸°í ½Í´Ù¸é Device Driver HOWTO¸¦ º¸¶ó. <sect2>»ç¿ëÀÚ-·¹º§ ¶óÀ̺귯¸®(User-Level Libraries) <p> ¿©·¯ºÐÀÌ OS ÄÚ½º¸¦ ÅÃÇß´Ù¸é Çϵå¿þ¾î ÀåÄ¡ ·¹Áö½ºÅÍ¿¡ ´ëÇÑ »ç¿ëÀÚ-·¹º§ ¾ï¼¼½º´Â Á¤È®È÷ ¿©·¯ºÐÀÌ Çѹøµµ ¹è¿î ÀûÀÌ ¾ø´Â °ÍÀÌ´Ù. ¿Ö³Ä¸é OSÀÇ ÁÖ¿ä ¸ñÀû Áß Çϳª´Â ÀåÄ¡ ¾ï¼¼½º¸¦ Á¦¾îÇÏ´Â °ÍÀ̱⠶§¹®ÀÌ´Ù. ±×·¯³ª OS È£ÃâÀº Àû¾îµµ ¼ö½Ê ¸¶ÀÌÅ©·Î ÃÊ ¿À¹öÇìµå°¡ °É¸°´Ù. ´ÜÁö 3 ¸¶ÀÌÅ©·Î ÃÊ µ¿¾È¿¡ ±âº» ³×Æ®¿÷ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ´Â TTL_PAPERS¿Í °°Àº Ä¿½ºÅÒ ³×Æ®¿÷ Çϵå¿þ¾îÀÇ °æ¿ì ±×·± OS È£Ãâ ¿À¹öÇìµå´Â ÂüÀ» ¼ö ¾ø´Â °ÍÀÌ´Ù. ±×·± ¿À¹öÇìµå¸¦ ÇÇÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀº Çϵå¿þ¾î ÀåÄ¡ ·¹Áö½ºÅ͵éÀ» Á÷Á¢ ¾ï¼¼½ºÇÏ´Â »ç¿ëÀÚ-·¹º§ ÄÚµå - »ç¿ëÀÚ-·¹º§ ¶óÀ̺귯¸® - ¸¦ °¡Áö´Â °ÍÀÌ´Ù. ±×·¡¼­ »ç¿ëÀÚ-·¹º§ ¶óÀ̺귯¸®°¡ Çϵå¿þ¾î¸¦ Á÷Á¢ ¾ï¼¼½ºÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº ¹«¾ùÀΰ¡, ÇÏÁö¸¸ ÀåÄ¡ ¾ï¼¼½º ±ÇÇÑ¿¡ ´ëÇÑ OS Á¦¾î¿Í ŸÇùÇÏÁö ¾Ê´Â ¹æ¹ýÀº ¹«¾ùÀΰ¡¿Í °°Àº °ÍÀÌ Áú¹®ÀÌ µÉ °ÍÀÌ´Ù. ÀüÇüÀûÀÎ ½Ã½ºÅÛ¿¡¼­ »ç¿ëÀÚ-·¹º§ ¶óÀ̺귯¸®°¡ Çϵå¿þ¾î ÀåÄ¡ ·¹Áö½ºÅ͸¦ Á÷Á¢ ¾ï¼¼½ºÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù: <enum> <item>»ç¿ëÀÚ ÇÁ·Î±×·¥ ½ÃÀÛ¿¡¼­ ÀåÄ¡ ·¹Áö½ºÅ͸¦ Æ÷ÇÔÇÏ´Â ¸Þ¸ð¸® ÁÖ¼Ò °ø°£À» »ç¿ëÀÚ ÇÁ·Î¼¼½º °¡»ó ¸Þ¸ð¸® ¸ÊÀ¸·Î ¸ÊÇÎÇÏ´Â OS È£ÃâÀ» »ç¿ëÇÑ´Ù. ¾î¶² ½Ã½ºÅ۵鿡¼­´Â <tt>mmap()</tt> È£Ãâ(¼½¼Ç <ref id="sec_MemoryMapCall" name="¸Þ¸ð¸® ¸Ê È£Ãâ"> ¿¡¼­ ¸ÇóÀ½ ¾ð±ÞµÊ)ÀÌ I/O ÀåÄ¡µéÀÇ ¹°¸®Àû ¸Þ¸ð¸® ÆäÀÌÁö ÁÖ¼ÒµéÀÇ Ç¥ÇöÇϴ Ư¼ö ÆÄÀÏÀ» ¸ÊÇÎÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¶Ç´Â ÀÌ·± ±â´ÉÀ» ¼öÇàÇÏ´Â ÀåÄ¡ ±¸µ¿±â¸¦ ÀÛ¼ºÇÏ´Â ÀÏÀº »ó´ëÀûÀ¸·Î ½±´Ù. ´õ ³ª¾Æ°¡ ÀÌ ÀåÄ¡ ±¸µ¿±â´Â ÇÊ¿äÇÑ Æ¯Á¤ ÀåÄ¡ ·¹Áö½ºÅ͵éÀ» ´ã°í ÀÖ´Â ÆäÀÌÁö(µé)À» ¸ÊÇÎÇÏ´Â °Í¸¸À¸·Î ¾ï¼¼½º¸¦ Á¦¾îÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ OS ¾ï¼¼½º Á¦¾î¸¦ À¯ÁöÇÒ ¼ö ÀÖ´Ù. <item>¸ÊÇÎµÈ Áּҵ鿡 ´Ü¼øÇÏ°Ô ·ÎµùÇϰųª ÀúÀåÇÔÀ¸·Î½á OS È£Ãâ ¾øÀÌ ÀåÄ¡ ·¹Áö½ºÅ͵éÀ» ¾ï¼¼½º. ¿¹¸¦ µé¾î¼­ <tt>*((char *) 0x1234) = 5;</tt>´Â ¸Þ¸ð¸® À§Ä¡ 1234(16Áø¼ö)¿¡´Ù ¹ÙÀÌÆ® °ª 5¸¦ ÀúÀåÇÒ °ÍÀÌ´Ù. </enum> ´ÙÇེ·´°Ôµµ ÀÎÅÚ 386(±×¸®°í ȣȯ ÇÁ·Î¼¼½ºµé)¿¡ ´ëÇÑ ¸®´ª½º°¡ Á» ´õ ³ªÀº ¼Ö·ç¼ÇÀ» Á¦°øÇÏ´Â ÀÏÀÌ ¹ú¾îÁ³´Ù: <enum> <item>±ÇÇÑÀÌ ÀÖ´Â ÇÁ·Î¼¼½º·ÎºÎÅÍ <tt>ioperm()</tt> OS È£ÃâÀ» »ç¿ëÇÔÀ¸·Î½á ÀåÄ¡ ·¹Áö½ºÅÍ¿¡ ´ëÀÀÇÏ´Â Á¤È®ÇÑ I/O Æ÷Æ® Áּҵ鿡 ¾ï¼¼½ºÇÏ´Â Æ۹̼ÇÀ» ¾ò´Â´Ù. ¶Ç´Â ¸®´ª½º¿¡ ´ëÇÑ ÆÐÄ¡<url url="http://garage.ecn.purdue.edu/~papers/giveioperm.html">À» »ç¿ëÇÏ¿© µ¶¸³µÈ ±ÇÇÑÀÖ´Â »ç¿ëÀÚ ÇÁ·Î¼¼½º(Áï, "¸ÞŸ OS")¿¡ ÀÇÇؼ­ Æ۹̼ÇÀÌ °ü¸®µÉ ¼ö ÀÖ´Ù. <item> 386 Æ÷Æ® I/O ¸í·É¾îµéÀ» »ç¿ëÇؼ­ OS È£Ãâ ¾øÀÌ ÀåÄ¡ ·¹Áö½ºÅ͵éÀ» ¾ï¼¼½º. </enum> <p> ´Ù¼öÀÇ I/O ÀåÄ¡µéÀÌ ´ÜÀÏ ÆäÀÌÁö ¾È¿¡ ±×µéÀÇ ·¹Áö½ºÅ͸¦ °®´Â °ÍÀÌ ÀϹÝÀûÀ̱⠶§¹®¿¡ ÀÌ µÎ¹ø° ¼Ö·ç¼ÇÀÌ ´õ ¼±È£µÈ´Ù. ÀÌ·± °æ¿ì ù¹ø° ±â¼úÀº ÀǵµµÈ °Í°ú µ¿ÀÏÇÑ ÆäÀÌÁö¿¡ À§Ä¡ÇÏ°Ô µÈ ´Ù¸¥ ÀåÄ¡ ·¹Áö½ºÅ͵éÀ» ¾ï¼¼½ºÇÏÁö ¸øÇϵµ·Ï ÇÏ´Â º¸È£¸¦ Á¦°øÇÏÁö ¸øÇÒ °ÍÀÌ´Ù. ¹°·Ð 386 Æ÷Æ® I/O ¸í·ÉµéÀÌ C·Î ÄÚµùµÉ ¼ö ¾ø´Ù´Â °ÍÀÌ ´ÜÁ¡ÀÌ´Ù - ´ë½Å ¿©·¯ºÐÀº ¾à°£ÀÇ ¾î¼Àºí¸® Äڵ带 »ç¿ëÇÒ ÇÊ¿ä°¡ »ý±æ °ÍÀÌ´Ù. ¹ÙÀÌÆ® °ªÀÇ Æ÷Æ® ÀÔ·ÂÀ» À§ÇÑ GCC-·¦ÇεÈ(C ÇÁ·Î±×·¥¿¡¼­ »ç¿ë °¡´ÉÇÑ) ÀζóÀÎ ¾î¼Àºí¸® ÄÚµå ÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù: <code> extern inline unsigned char inb(unsigned short port) { unsigned char _v; __asm__ __volatile__ ("inb %w1,%b0" :"=a" (_v) :"d" (port), "0" (0)); return _v; } </code> ºñ½ÁÇÏ°Ô ¹ÙÀÌÆ® Æ÷Æ® Ãâ·ÂÀ» À§ÇÑ GCC-·¦ÇÎµÈ ÄÚµå´Â ´ÙÀ½°ú °°´Ù: <code> extern inline void outb(unsigned char value, unsigned short port) { __asm__ __volatile__ ("outb %b0,%w1" :/* no outputs */ :"a" (value), "d" (port)); } </code> <!-- ------------------------------------------------------------- --> <sect1>PVM (º´·Ä °¡»ó ±â°è, Parallel Virtual Machine) <!-- ------------------------------------------------------------- --> <p> PVM(º´·Ä °¡»ó ±â°è)´Â ÀϹÝÀûÀ¸·Î ¼ÒÄÏ À§¿¡ ±¸ÇöµÈ, ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ°í ÀÌ½ÄµÉ ¼ö ÀÖ´Â ¸Þ½ÃÁö Àü´Þ ¶óÀ̺귯¸®ÀÌ´Ù. ÀÌ°ÍÀº ºÐ¸íÈ÷ ¸Þ½ÃÁö Àü´Þ Ŭ·¯½ºÅÍ º´·Ä ÄÄÇ»ÆÃÀ» À§ÇÑ »ç½Ç»óÀÇ Ç¥ÁØÀ¸·Î ÀÚ¸®¸¦ Àâ¾Ò´Ù. PVMÀº ´ÜÀÏ-ÇÁ·Î¼¼¼­¿Í SMP ¸®´ª½º ±â°èµé, ±×¸®°í ¼ÒÄÏ-°¡´É ³×Æ®¿÷(¿¹, SLIP, PLIP, ÀÌ´õ³Ý, ATM)¿¡ ÀÇÇؼ­ ¸µÅ©µÈ ¸®´ª½º ±â°èµéÀÇ Å¬·¯½ºÅ͸¦ Áö¿øÇÑ´Ù. »ç½Ç PVMÀº ´Ù¾çÇÑ ¼­·Î ´Ù¸¥ ŸÀÔµéÀÇ ÇÁ·Î¼¼¼­µé, ¼³Á¤, ±×¸®°í ¹°¸®ÀûÀÎ ³×Æ®¿÷µéÀÌ »ç¿ëµÈ ±â°èµé ±×·ì - <bf>À̱âÁ¾ Ŭ·¯½ºÅÍ</bf> -¿¡¼­ º´·Ä Ŭ·¯½ºÅͷνá ÀÎÅͳÝÀ» ÅëÇؼ­ ¸µÅ©µÈ ±â°èµéÀ» ó¸®ÇÏ´Â ¹üÀ§±îÁö ÀÛµ¿ÇÑ´Ù. PVMÀº ¶ÇÇÑ Å¬·¯½ºÅ͸¦ ÅëÇؼ­ º´·Ä ÀÛ¾÷ Á¦¾î¸¦ À§ÇÑ ±â´ÉµéÀ» Á¦°øÇÑ´Ù. À̵é Áß °¡Àå ÁÁÀº °Í, PVMÀº ¿À·§µ¿¾È ÀÚÀ¯·Ó°Ô »ç¿ë °¡´ÉÇÏ¿´°í(ÇöÀç´Â <url url="http://www.epm.ornl.gov/pvm/pvm_home.html">¿¡ ÀÖÀ½) ¸¹Àº ÇÁ·Î±×·¡¹Ö ¾ð¾î, ¾îÇø®ÄÉÀÌ¼Ç ¶óÀ̺귯¸®, µð¹ö±ë Åø µî°ú °°Àº °Í¿¡, ±×°ÍÀ» ±×µéÀÇ "ÀÌ½Ä °¡´ÉÇÑ ¸Þ½ÃÁö-Àü´Þ Ÿ°Ù ¶óÀ̺귯¸®"·Î »ç¿ëÇÏ¿©, À̸£°Ô µÇ¾ú´Ù. ³×Æ®¿÷ ´º½º ±×·ì <htmlurl url="news:comp.parallel.pvm" name="comp.parallel.pvm">ÀÌ ÀÖ´Ù. ±×·¯³ª PVM ¸Þ½ÃÁö Àü´Þ È£ÃâµéÀº ÀϹÝÀûÀ¸·Î ÀÌ¹Ì ³ôÀº Áöü¸¦ °¡Áö´Â Ç¥ÁØ ¼ÒÄÏ ÀÛ¾÷µé¿¡ ½É°¢ÇÑ ¿À¹öÇìµå¸¦ Ãß°¡ÇÑ´Ù. ´õ ³ª°¡¾Æ°¡ ¸Þ½ÃÁö Çڵ鸵 È£Ãâµé ÀÚ½ÅÀº Ưº°È÷ "ÇÁ·»µé¸®"ÇÑ ÇÁ·Î±×·¡¹Ö ¸ðµ¨À» ÀÌ·çÁö ¾Ê¾Ò´Ù. ¼½¼Ç <ref id="sec_ExampleAlgorithm" name = "¿¹Á¦ ¾Ë°í¸®Áò">¿¡¼­ ¸ÇóÀ½ ¼³¸íµÈ °Í°ú µ¿ÀÏÇÑ ÆÄÀÌ(pi) °è»ê ¿¹Á¦¸¦ »ç¿ëÇؼ­ ¸¸µç, C¿Í PVM ¶óÀ̺귯¸® È£ÃâÀ» »ç¿ëÇÑ ¹öÀüÀº ´ÙÀ½°ú °°´Ù: <code> #include <stdlib.h> #include <stdio.h> #include <pvm3.h> #define NPROC 4 main(int argc, char **argv) { register double lsum, width; double sum; register int intervals, i; int mytid, iproc, msgtag = 4; int tids[NPROC]; /* array of task ids */ /* enroll in pvm */ mytid = pvm_mytid(); /* Join a group and, if I am the first instance, iproc=0, spawn more copies of myself */ iproc = pvm_joingroup("pi"); if (iproc == 0) { tids[0] = pvm_mytid(); pvm_spawn("pvm_pi", &argv[1], 0, NULL, NPROC-1, &ero;tids[1]); } /* make sure all processes are here */ pvm_barrier("pi", NPROC); /* get the number of intervals */ intervals = atoi(argv[1]); width = 1.0 / intervals; lsum = 0.0; for (i = iproc; i<intervals; i+=NPROC) { register double x = (i + 0.5) * width; lsum += 4.0 / (1.0 + x * x); } /* sum across the local results & scale by width */ sum = lsum * width; pvm_reduce(PvmSum, &sum, 1, PVM_DOUBLE, msgtag, "pi", 0); /* have only the console PE print the result */ if (iproc == 0) { printf("Estimation of pi is %f\n", sum); } /* Check program finished, leave group, exit pvm */ pvm_barrier("pi", NPROC); pvm_lvgroup("pi"); pvm_exit(); return(0); } </code> <!-- ------------------------------------------------------------- --> <sect1>MPI (¸Þ½ÃÁö Àü´Þ ÀÎÅÍÆäÀ̽º, Message Passing Interface)<label id="sec_MPI"> <!-- ------------------------------------------------------------- --> <p> PVMÀº »ç½Ç»ó Ç¥ÁØ ¸Þ½ÃÁö-Àü´Þ ¶óÀ̺귯¸®ÀÎ ¹Ý¸é¿¡ MPI(¸Þ½ÃÁö Àü´Þ ÀÎÅÍÆäÀ̽º)´Â »ó´ëÀûÀ¸·Î »õ·Î¿î °ø½Ä Ç¥ÁØÀÌ´Ù. MPI Ç¥ÁØ¿¡ ´ëÇÑ È¨ ÆäÀÌÁö´Â <url url="http://www.mcs.anl.gov:80/mpi/">ÀÌ¸ç ´º½º±×·ìÀº <htmlurl url="news:comp.paralle.mpi" name="comp.paralle.mpi">ÀÌ´Ù. ±×·¯³ª MPI¸¦ ³íÀÇÇϱâ Àü¿¡ ÀúÀÚ´Â Áö³­ ¸î³â µ¿¾È ÀϾ PVM ´ë MPI Á¾±³ ÀüÀï¿¡ ´ëÇؼ­ Á¶±Ý ¾ê±âÇÏ°í ½ÍÀº Ã浿À» ´À³¤´Ù. ´ÙÀ½Àº Â÷ÀÌÁ¡µé¿¡ ´ëÇؼ­ »ó´ëÀûÀ¸·Î Æí°ß¾øÀÌ ¿ä¾àÇÏ·Á°í ½ÃµµÇÑ °ÍÀÌ´Ù: <descrip> <tag>½ÇÇà Á¦¾î ȯ°æ(Execution control environment).</tag> ´Ü¼øÇÏ°Ô ¾ê±âÇؼ­ MPI´Â ½ÇÇà Á¦¾î ȯ°æÀÌ ¾î¶»°Ô ±¸ÇöµÇ´Â°¡¿Í ±¸ÇöµÉ ¼ö ÀÖ´ÂÁö ¾ø´ÂÁö¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀº ¹Ý¸é PVMÀº ½ÇÇà Á¦¾î ȯ°æ Çϳª¸¦ °®´Â´Ù. ±×·¡¼­ PVM ÇÁ·Î±×·¥ ½ÇÇàÀ» ½ÃÀÛÇÏ´Â °Í°ú °°Àº ÀϵéÀº ¸ðµç °÷¿¡¼­ µ¿ÀÏÇÏ°Ô ÀÌ·ç¾îÁö´Â ¹Ý¸é MPIÀÇ °æ¿ì ÀÌ°ÍÀº ¾î¶² ±¸ÇöÀÌ »ç¿ëµÇ´Â°¡¿¡ µû¶ó¼­ ´Ù¸¦ ¼ö ÀÖ´Ù. <tag>À̱âÁ¾ Ŭ·¯½ºÅÍ Áö¿ø(Support for heterogeneous clusters).</tag> PVMÀº ¿öÅ©½ºÅ×ÀÌ¼Ç »çÀÌŬ-È°¿ë ¼¼°è¿¡¼­ ÀÚ¶ó³µ°í ±×·¡¼­ Á÷Á¢ ±â°è¿Í ¿î¿µ üÁ¦ÀÇ À̱âÁ¾ È¥ÇÕÀ» °ü¸®ÇÑ´Ù. ¹Ý¸é¿¡ MPI´Â Ÿ°ÙÀÌ MPP(°Å´ëÇÑ º´·Ä ÇÁ·Î¼¼¼­)À̰ųª °ÅÀÇ µ¿ÀÏÇÑ ¿öÅ©½ºÅ×À̼ǵéÀÇ Àü¿ë Ŭ·¯½ºÅÍÀÏ °ÍÀ̶ó°í °¡Á¤ÇÑ´Ù. <tag>ºÎ¾ý ½ÌÅ©´ë ÁõÈıº(Kitchen sink syndrome).</tag> PVM´Â MPI 2.0ÀÌ ÇÏÁö ¸øÇÏ´Â ¸ñÀûÀÇ ÅëÀÏÀ» Áõ¸íÇÑ´Ù. »õ·Î¿î MPI 2.0 Ç¥ÁØÀº ±âº» ¸Þ½ÃÁö Àü´Þ ¸ðµ¨À» ¹þ¾î³ª´Â ¸¹Àº ±â´ÉµéÀ» ´ã°í ÀÖ´Ù - RMA(¸®¸ðÆ® ¸Þ¸ð¸® ¾ï¼¼½º, Remote Memory Access)¿Í º´·Ä ÆÄÀÏ I/O¿Í °°Àº °Íµé. ÀÌ·± °ÍµéÀÌ À¯¿ëÇÑ°¡? ¹°·Ð ±×µéÀº ±×·¸´Ù... ±×·¯³ª MPI 2.0À» ¹è¿ì´Â °ÍÀº ¿ÏÀüÈ÷ »õ·Î¿î ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ ¹è¿ì´Â °Í°ú °ÅÀÇ ¶È°°´Ù. <tag>»ç¿ëÀÚ ÀÎÅÍÆäÀ̽º ¼³°è(User interface design).</tag> MPI´Â PVMÀ» µû¶ó ¼³°èµÇ¾ú°í ºÐ¸íÈ÷ ±×°ÍÀ¸·ÎºÎÅÍ ¹è¿ü´Ù. MPI´Â ´õ ´Ü¼øÇÏ°í ´õ È¿°úÀûÀÎ ¹öÆÛ Çڵ鸵°ú ¸Þ½ÃÁö·Î »ç¿ëÀÚ-Á¤ÀÇ µ¥ÀÌÅÍ ±¸Á¶°¡ Àü´ÞµÇµµ·Ï ÇÏ´Â °í¼öÁØ Ãß»óÈ­¸¦ Á¦°øÇÑ´Ù. <tag>¹ýÀÇ È¿·Â(The force of law).</tag> ³» °è»ê¿¡ ÀÇÇϸé MPI¸¦ »ç¿ëÇÏ´Â °Íº¸´Ù PVMÀ» »ç¿ëÇϵµ·Ï ¼³°èµÈ °ÍµéÀÌ ¾ÆÁ÷ ¾ÆÁÖ ¸¹ÀÌ ÀÖ´Ù; ±×·¯³ª ±×°ÍµéÀ» MPI·Î Æ÷ÆÃÇÏ´Â °ÍÀº ½±´Ù. ±×¸®°í MPI°¡ ³Î¸® Áö¿øµÇ´Â Çü½ÄÀûÀΠǥÁØ¿¡ ÀÇÇؼ­ Áö¿øµÈ´Ù´Â »ç½ÇÀº MPI¸¦ »ç¿ëÇÏ´Â °ÍÀº ¸¹Àº ±â°üµéÀÇ °æ¿ì, Á¤Ã¥»óÀÇ ¹®Á¦ÀÌ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. </descrip> °á·ÐÀÌ ³µ´Â°¡? ±Û½ê ¸®´ª½º ½Ã½ºÅÛµé·Î ¸¸µç Ŭ·¯½ºÅÍ¿¡¼­ ½ÇÇàÇÒ ¼ö ÀÖ´Â, ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ°í µ¶¸³ÀûÀ¸·Î °³¹ßµÈ MPI ¹öÀüÀº Àû¾îµµ ¼¼°¡Áö Á¸ÀçÇÑ´Ù(±×¸®°í ³ª´Â ±×°Íµé Áß Çϳª¸¦ ¿©±â¿¡¼­ ¼³¸íÇÑ´Ù): <itemize> <item>LAM(±Ù°Å¸® ¿µ¿ª ¸ÖƼ ÄÄÇ»ÅÍ, Local Area Multicomputer)´Â MPI 1.1 Ç¥ÁØÀ» ¿ÏÀüÈ÷ ±¸ÇöÇÑ °ÍÀÌ´Ù. ÀÌ°ÍÀº MPI ÇÁ·Î±×·¥µéÀÌ °³º° ¸®´ª½º ½Ã½ºÅÛ¾ÈÀ̳ª UDP/TCP ¼ÒÄÏ Åë½ÅÀ» »ç¿ëÇÏ´Â ¸®´ª½º ½Ã½ºÅÛ Å¬·¯½ºÅ͸¦ ÅëÇؼ­ ½ÇÇàµÇ´Â °ÍÀ» Çã¿ëÇÑ´Ù. ÀÌ ½Ã½ºÅÛÀº ´Ü¼øÇÑ ½ÇÇà Á¦¾î ±â´ÉµéÀ» ´ã°í ÀÖÀ¸¸ç ´Ù¾çÇÑ ÇÁ·Î±×·¥ °³¹ß°ú µð¹ö±ë µµ¿ì¹Ì(aids)¸¦ °¡Áö°í ÀÖ´Ù. ÀÌ°ÍÀº ´ÙÀ½ <url url="http://www.osc.edu/lam.html"> ¼­ ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. <item>MPICH(MPI Ä«¸á·¹¿Â, CHameleon)Àº MPI 1.1 Ç¥ÁØÀÇ À̽ļºÀÌ ³ôÀº ¿ÏÀüÇÑ ±¸ÇöÀ¸·Î½á °í¾ÈµÇ¾ú´Ù. LAN°ú °°ÀÌ ÀÌ°ÍÀº °³º° ¸®´ª½º ½Ã½ºÅÛÀ̳ª UDP/TCP ¼ÒÄÏ Åë½ÅÀ» »ç¿ëÇÏ´Â ¸®´ª½º ½Ã½ºÅ۵鿡 °ÉÃļ­ MPI ÇÁ·Î±×·¥µéÀÌ ½ÇÇàµÇµµ·Ï Çã¿ëÇÑ´Ù. ±×·¯³ª È¿À²ÀûÀÌ°í ½±°Ô Ÿ°ÙÀ» ¹Ù²Ü ¼ö ÀÖ´Â ±¸ÇöÀ» Á¦°øÇÔÀ¸·Î½á ¸í¹éÇÏ°Ô MPI¸¦ ÁõÁøÇÑ °ÍÀÌ ±× ÀåÁ¡ÀÌ´Ù. ÀÌ MPI ±¸ÇöÀ» Æ÷ÆÃÇϱâ À§Çؼ­ "ä³Î ÀÎÅÍÆäÀ̽º(channel interface)"ÀÇ ´Ù¼¸°¡Áö ÇÔ¼öµéÀ» ±¸ÇöÇϰųª Á» ´õ ³ªÀº ¼º´ÉÀ» À§Çؼ­ ¿ÏÀüÇÑ MPICH ADI(Ãß»ó ÀåÄ¡ ÀÎÅÍÆäÀ̽º, Abstract Device Interface)¸¦ ±¸ÇöÇÑ´Ù. MPICH, ±×¸®°í ÀÌ°Í¿¡ ´ëÇÑ °Í°ú Æ÷Æÿ¡ °üÇÑ ¸¹Àº Á¤º¸µéÀÌ <url url="http://www.mcs.anl.gov/mpi/mpich/">¿¡ ÀÖ´Ù. <item>AFMPI(ÁýÇÕ ÇÔ¼ö MPI, Aggregate Function MPI)´Â MPI 2.0 Ç¥ÁØ ±¸ÇöÀÇ ºÎºÐ ÁýÇÕÀÌ´Ù. ÀÌ°ÍÀº ³»°¡ ÀÛ¼ºÇÑ °ÍÀÌ´Ù. AFAPI À§¿¡ ¸¸µé¾îÁ³°í ³·Àº-Áöü½Ã°£ ÁýÇÕ(collective) Åë½Å ÇÔ¼öµé°ú RMAµéÀ» º¸¿©ÁÖµµ·Ï °í¾ÈµÇ¾ú°í ±×·¡¼­ MPI µ¥ÀÌÅÍ Å¸ÀÔµé, Åë½ÅÀÚµé(communicators)µî¸¸À» Á¦°øÇÑ´Ù. ÀÌ°ÍÀº °³º° ¸®´ª½º ½Ã½ºÅÛÀ̳ª AFAPI-°¡´É ³×Æ®¿÷ Çϵå¿þ¾î¿¡ ÀÇÇؼ­ ¿¬°áµÈ Ŭ·¯¼­ÅÍ¿¡ °áÃļ­ MPI¸¦ »ç¿ëÇÑ C ÇÁ·Î±×·¥µéÀ» Çã¶ôÇÑ´Ù. ÀÌ°ÍÀº <url url="http://garage.ecn.purdue.edu/~papers/">¿¡¼­ ÀÚÀ¯·Ó°Ô ¾òÀ» ¼ö ÀÖ´Ù. </itemize> À̵é MPI ±¸Çö¹°µéÁß ¾î¶² °ÍÀ» ¾²´ø °£¿¡ ´ëºÎºÐÀÇ °ø¿ë Åë½Å ŸÀÔµéÀ» ¼öÇàÇÏ´Â °ÍÀº ¾ÆÁÖ ´Ü¼øÇÏ´Ù. ±×·¯³ª MPI 2.0Àº, À̵é Áß¿¡ Çϳª¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¡¸Ó°¡ MPI¿Í °°Àº ´Ù¸¥ ÄÚµù ½ºÅ¸ÀϵéÀ» ÀνÄÇÏÁö ¸øÇÒ Á¤µµ·Î ÃæºÐÈ÷ ¼­·Î ´Ù¸¥ ¿©·¯°¡Áö Åë½Å Æз¯´ÙÀÓµéÀ» ¼­·Î ¿¬µ¿½ÃŲ´Ù. ±×·¡¼­ ´Ü ÇϳªÀÇ ¿¹Á¦ ÇÁ·Î±×·¥À» Á¦°øÇÏ´Â °Íº¸´Ù MPI°¡ Áö¿øÇÏ´Â ±âº»ÀûÀ¸·Î ¼­·Î ´Ù¸¥ Åë½Å Æз¯´ÙÀÓµé °¢°¢ÀÇ ¿¹Á¦¸¦ °¡Áö´Â °ÍÀÌ À¯¿ëÇÏ´Ù. ¾Æ·¡¿¡ ³ª¿À´Â ¸ðµç ¼¼°¡Áö ÇÁ·Î±×·¥µéÀº ÀÌ HOWTO¸¦ ÅëÇؼ­ »ç¿ëµÇ´Â PiÀÇ °ªÀ» ±¸ÇÏ´Â, µ¿ÀÏÇÑ ±âº» ¾Ë°í¸®ÁòÀ» ±¸ÇöÇÑ´Ù. °¢ ÇÁ·Î¼¼¼­°¡ ±×°ÍÀÇ ºÎºÐÇÕÀ» ÃÑÇÕÀ» ±¸ÇÏ°í ±× °á°ú¸¦ Ãâ·ÂÇÏ´Â ÇÁ·Î¼¼¼­ 0¹ø¿¡°Ô Àü´ÞÇϱâ À§Çؼ­ ±âº» MPI ¸Þ½ÃÁö-Àü´Þ È£ÃâµéÀ» »ç¿ëÇϴ ù¹ø° MPI ÇÁ·Î±×·¥: <code> #include <stdlib.h> #include <stdio.h> #include <mpi.h> main(int argc, char **argv) { register double width; double sum, lsum; register int intervals, i; int nproc, iproc; MPI_Status status; if (MPI_Init(&ero;argc, &ero;argv) != MPI_SUCCESS) exit(1); MPI_Comm_size(MPI_COMM_WORLD, &ero;nproc); MPI_Comm_rank(MPI_COMM_WORLD, &ero;iproc); intervals = atoi(argv[1]); width = 1.0 / intervals; lsum = 0; for (i=iproc; i<intervals; i+=nproc) { register double x = (i + 0.5) * width; lsum += 4.0 / (1.0 + x * x); } lsum *= width; if (iproc != 0) { MPI_Send(&ero;lbuf, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); } else { sum = lsum; for (i=1; i<nproc; ++i) { MPI_Recv(&ero;lbuf, 1, MPI_DOUBLE, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &ero;status); sum += lsum; } printf("Estimation of pi is %f\n", sum); } MPI_Finalize(); return(0); } </code> µÎ¹ø° MPI ¹öÀüÀº ÁýÇÕÀûÀÎ(collective) Åë½Å(ÀÌ Æ¯º°ÇÑ ¾îÇø®ÄÉÀ̼ÇÀÇ °æ¿ì ÀÌ°ÍÀº °¡Àå ÀûÀýÇÏ´Ù): <code> #include <stdlib.h> #include <stdio.h> #include <mpi.h> main(int argc, char **argv) { register double width; double sum, lsum; register int intervals, i; int nproc, iproc; if (MPI_Init(&ero;argc, &ero;argv) != MPI_SUCCESS) exit(1); MPI_Comm_size(MPI_COMM_WORLD, &ero;nproc); MPI_Comm_rank(MPI_COMM_WORLD, &ero;iproc); intervals = atoi(argv[1]); width = 1.0 / intervals; lsum = 0; for (i=iproc; i<intervals; i+=nproc) { register double x = (i + 0.5) * width; lsum += 4.0 / (1.0 + x * x); } lsum *= width; MPI_Reduce(&ero;lsum, &ero;sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (iproc == 0) { printf("Estimation of pi is %f\n", sum); } MPI_Finalize(); return(0); } </code> ¼¼¹ø° MPI ¹öÀüÀº °¢ ÇÁ·Î¼¼¼­°¡ ÀÚ½ÅÀÇ ·ÎÄà <tt>lsum</tt>¸¦ ÇÁ·Î¼¼¼­ 0¹øÀÇ <tt>sum</tt>·Î ´õÇϱâ À§Çؼ­ MPI 2.0 RMA ¸ÞÄ«´ÏÁòÀ» »ç¿ëÇÑ´Ù. <code> #include <stdlib.h> #include <stdio.h> #include <mpi.h> main(int argc, char **argv) { register double width; double sum = 0, lsum; register int intervals, i; int nproc, iproc; MPI_Win sum_win; if (MPI_Init(&ero;argc, &ero;argv) != MPI_SUCCESS) exit(1); MPI_Comm_size(MPI_COMM_WORLD, &ero;nproc); MPI_Comm_rank(MPI_COMM_WORLD, &ero;iproc); MPI_Win_create(&ero;sum, sizeof(sum), sizeof(sum), 0, MPI_COMM_WORLD, &ero;sum_win); MPI_Win_fence(0, sum_win); intervals = atoi(argv[1]); width = 1.0 / intervals; lsum = 0; for (i=iproc; i<intervals; i+=nproc) { register double x = (i + 0.5) * width; lsum += 4.0 / (1.0 + x * x); } lsum *= width; MPI_Accumulate(&ero;lsum, 1, MPI_DOUBLE, 0, 0, 1, MPI_DOUBLE, MPI_SUM, sum_win); MPI_Win_fence(0, sum_win); if (iproc == 0) { printf("Estimation of pi is %f\n", sum); } MPI_Finalize(); return(0); } </code> MPI 2.0 RMA ¸ÞÄ«´ÏÁòÀº, ¼­·Î ´Ù¸¥ ¸Þ¸ð¸® À§Ä¡µé¿¡ °ÅÁÖÇÏ´Â ´Ù¾çÇÑ ÇÁ·Î¼¼¼­µéÀ§ÀÇ ´ëÀÀÇÏ´Â µ¥ÀÌÅÍ ±¸Á¶ÀÇ ÀÓÀÇÀÇ ÀáÀçÀû ¹®Á¦Á¡µéÀ» ¾ÆÁÖ Àß ±Øº¹ÇÑ´Ù´Â Á¡À» ÁÖ¸ñÇÏ´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù. ÀÌ°ÍÀº, º£À̽º ÁÖ¼Ò¸¦ ÀǹÌÇÏ´Â "â(window)"¸¦ ÂüÁ¶ÇÏ´Â °Í°ú °æ°è ÃÊ¿ù ¾ï¼¼½º(out-of-bound access)¿¡ ´ëÇÑ º¸È£¿Í ±×¸®°í ÆòµîÇÑ ÁÖ¼Ò Å©±â Á¶Àý(even address scaling)¿¡ ÀÇÇؼ­ °¡´ÉÇÏ´Ù. RMA 󸮴 ´ÙÀ½ <tt>MPI_Win_fence</tt> ÀÌÀü±îÁö ¿¬±âµÉ ¼ö ÀÖ´Ù´Â »ç½Ç¿¡ ÀÇÇؼ­ µµ¿òÀ» ¹Þ´Â´Ù. °£´ÜÈ÷ ¸»Çؼ­ RMA ¸ÞÄ«´ÏÁòÀº ºÐ»ê °øÀ¯ ¸Þ¸ð¸®¿Í ¸Þ½ÃÁö Àü´Þ °£ÀÇ ÀÌ»óÇÑ Á¶ÇÕ(strange cross)À̶ó°í ¸»ÇÒ ¼öµµ ÀÖ°ÚÁö¸¸ ÀáÀçÀûÀ¸·Î ¾ÆÁÖ È¿À²ÀûÀÎ Åë½ÅÀ» »ý¼ºÇÏ´Â ¾ÆÁÖ ±ú²ýÇÑ ÀÎÅÍÆäÀ̽ºÀÌ´Ù. <!-- ------------------------------------------------------------- --> <sect1>AFAPI (ÁýÇÕ ÇÔ¼ö API, Aggregate Function API) <!-- ------------------------------------------------------------- --> <p> PVM, MPI µî°ú ´Ù¸£°Ô AFAPI(ÁýÇÕ ÇÔ¼ö ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥ ÀÎÅÍÆäÀ̽º; Aggregate Function Application Program Interface)´Â ÇöÁ¸ÇÏ´Â ³×Æ®¿÷ Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î À§¿¡ ³õÀÎ Æ÷Æð¡´ÉÇÑ Ãß»ó ÀÎÅÍÆäÀ̽º¸¦ ±¸ÃàÇÏ´Â ½Ãµµ·Î½á ÀÏ»ýÀ» ½ÃÀÛÇÏÁö ¾Ê¾Ò´Ù. ±×·¯±â º¸´Ù´Â AFAPI´Â PAPERS (º´·Ä ½ÇÇà°ú ºü¸¥ µ¿±âÈ­¸¦ À§ÇÑ ÆÛµà ¾Æ´äÅÍ; Purdue's Adapter for Parallel Execution and Rapid Synchronization; <url url="http://garage.ecn.purdue.edu/~papers/"> ÂüÁ¶)¿¡ ´ëÇÑ Çϵå¿þ¾î-Á¾¼ÓÀûÀÎ ·Î¿ì-·¹º§ Áö¿ø ¶óÀ̺귯¸®·Î½á ½ÃÀÛÇÏ¿´´Ù. PAPERS´Â <ref id="sec_NetworkHardware" name="³×Æ®¿÷ Çϵå¿þ¾î">¿¡¼­ ¾à°£ ³íÀǵǾú´Ù; ÀÌ°ÍÀº Áöü½Ã°£ÀÌ ¾à ¼ö ¸¶ÀÌÅ©·Î Ãʵ¿¾ÈÀÎ °ø¿ë µµ¸ÞÀÎ ¼³°è Ä¿½ºÅÒ ÁýÇÕ ÇÔ¼ö ³×Æ®¿÷ÀÌ´Ù. ±×·¯³ª ÇöÁ¸ÇÏ´Â ½´ÆÛÄÄÇ»Å͵麸´Ù ÄÄÆÄÀÏ·¯ ±â¼ú¿¡¼­ ´õ ³ªÀº Ÿ°ÙÀÌ µÉ ¼ö ÀÖ´Â ½´ÆÛÄÄÇ»Å͸¦ ¸¸µé·Á´Â ½Ãµµ·Î½á ÀÌ°ÍÀÌ °³¹ßµÇ¾ú´Ù´Â °ÍÀÌ PAPERS¿¡ ´ëÇؼ­ Áß¿äÇÑ °ÍÀÌ´Ù. ÀÌ°ÍÀº ÁúÀûÀ¸·Î ´ëºÎºÐÀÇ ¸®´ª½º Ŭ·¯½ºÅÍ ³ë·Âµé°ú, »ó´ëÀûÀ¸·Î º°·Î ÃæºÐÇÏÁö ¾Ê´Â ¼º±ä º´·Ä ¾îÇø®ÄÉÀ̼ǵ鿡 ´ëÇÑ Ç¥ÁØ ³×Æ®¿÷À» »ç¿ëÇÏ·Á°í ³ë·ÂÇÏ´Â µ¥ ÃÐÁ¡À» ¸ÂÃá PVM/MPIµé°ú ¾ÆÁÖ ´Ù¸£´Ù. ¸®´ª½º ÇǾ¾µéÀÌ PAPERS ½Ã½ºÅÛÀÇ ÄÄÆ÷³ÍÆ®µé·Î »ç¿ëµÈ´Ù´Â »ç½ÇÀº ´Ü¼øÇÏ°Ô °¡´ÉÇÑÇÑ °¡Àå ºñ¿ë-È¿À²ÀûÀÎ ¹æ½ÄÀ¸·Î ÇÁ·ÎÅäŸÀÔµéÀ» ±¸ÇöÇغ» °ÍÀÌ´Ù´Â °ÍÀ» ¸»ÇÒ »ÓÀÌ´Ù. ÇÑ Å¸½ºÀÇ ¼­·Î´Ù¸¥ ÇÁ·ÎÅäŸÀÔ ±¸Çö¹°µé¿¡ ´ëÇÑ °ø¿ë ·Î¿ì-·¹º§ ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽º ÇÊ¿ä°¡ AFAPI·Î PAPERS ¶óÀ̺귯¸®°¡ Ç¥ÁØÈ­µÇµµ·Ï ÇÑ °ÍÀÌ´Ù. ±×·¯³ª AFAPI¿¡ ÀÇÇؼ­ »ç¿ëµÇ´Â ¸ðµ¨Àº Ÿ°í³¯ ÀûºÎÅÍ ´õ ´Ü¼øÇÏ°í, ÀüÇüÀûÀÎ º´·Äó¸® ÄÄÆÄÀÏ·¯¿¡ ÀÇÇؼ­ ÄÄÆÄÀÏµÈ Äڵ峪 SIMD ¾ÆÅ°ÅØÃĵéÀ» À§Çؼ­ ÀÛ¼ºµÈ ÄÚµåµéÀÇ ´õ Á¤±³ÇÑ »óÈ£ÀÛ¿ë¿¡ Á» ´õ Àû´çÇÏ´Ù. ÀÌ ¸ðµ¨ÀÇ ´Ü¼ø¼ºÀº PAPERS Çϵå¿þ¾î¸¦ ¸¸µé±â ½±°Ô ÇÒ »Ó¸¸ ¾Æ´Ï°í SMPµé°ú °°Àº ´Ù¸¥ Çϵå¿þ¾î ½Ã½ºÅ۵鿡 ´ëÇÑ ³î¶øµµ·Ï È¿À²ÀûÀÎ AFAPI Æ÷ÆÃÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. AFAPI´Â ÇöÀç TTL_PAPERS, CAPERS, ¶Ç´Â WAPERS¸¦ »ç¿ëÇÏ¿© Ä¿³ØÆ®µÈ ¸®´ª½º Ŭ·¯½ºÅ͵鿡¼­ Àß ÀÛµ¿ÇÑ´Ù. ÀÌ°ÍÀº ¶ÇÇÑ (OS È£ÃâµéÀ̳ª ½ÉÁö¾î ¹ö½º-¶ôÅ· ¸í·É¾îµé ¾øÀ̵µ, ¼½¼Ç <ref id="sec_IntroductionToSharedMemoryProgramming" name="°øÀ¯ ¸Þ¸ð¸® ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ¼Ò°³"> ÂüÁ¶) SHMAPERS¶ó°í ºÒ¸®´Â ½Ã½ºÅÛ V °ø¿ë ¸Þ¸ð¸® ¶óÀ̺귯¸®(System V Shared Memory library)¸¦ »ç¿ëÇÑ SMP ½Ã½ºÅÛµé À§¿¡¼­µµ ÀÛµ¿ÇÑ´Ù. ÀüÅëÀûÀÎ ³×Æ®¿÷(¿¹, ÀÌ´õ³Ý) À§¿¡¼­ UDP ºê·Îµåij½ºÆ®¸¦ »ç¿ëÇÑ ¸®´ª½º Ŭ·¯½ºÅÍ À§¿¡¼­ ½ÇÇàÇÏ´Â ¹öÀüÀÌ °³¹ß Áß¿¡ ÀÖ´Ù. ¸ðµç °ü·ÃµÈ ¹öÀüµéÀÌ <url url="http://garage.ecn.purdue.edu/~papers/">¿¡¼­ ¾òÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. AFAPIÀÇ ¸ðµç ¹öÀüµéÀº C³ª C++·ÎºÎÅÍ È£ÃâµÇµµ·Ï ¼³°èµÇ¾ú´Ù. ´ÙÀ½ ¿¹Á¦´Â ¼½¼Ç <ref id="sec_ExampleAlgorithm" name = "¿¹Á¦ ¾Ë°í¸®Áò">¿¡¼­ ¼³¸íµÈ ¹Ù ÀÖ´Â PiÀÇ AFAPI¹öÀüÀÌ´Ù. <code> #include <stdlib.h> #include <stdio.h> #include "afapi.h" main(int argc, char **argv) { register double width, sum; register int intervals, i; if (p_init()) exit(1); intervals = atoi(argv[1]); width = 1.0 / intervals; sum = 0; for (i=IPROC; i<intervals; i+=NPROC) { register double x = (i + 0.5) * width; sum += 4.0 / (1.0 + x * x); } sum = p_reduceAdd64f(sum) * width; if (IPROC == CPROC) { printf("Estimation of pi is %f\n", sum); } p_exit(); return(0); } </code> <!-- ------------------------------------------------------------- --> <sect1>´Ù¸¥ Ŭ·¯½ºÅÍ Áö¿ø ¶óÀ̺귯¸®µé <!-- ------------------------------------------------------------- --> <p> PVM, MPI, ±×¸®°í AFAPI¿¡ µ¡ºÙ¿© ´ÙÀ½ ¶óÀ̺귯¸®µéÀº ¸®´ª½º Ŭ·¯½ºÅ͸¦ »ç¿ëÇؼ­ º´·Ä ÄÄÇ»ÆÃÇÏ´Â µ¥ À¯¿ëÇÒ ±â´ÉµéÀ» Á¦°øÇÑ´Ù. ÀÌ·± ½Ã½ºÅÛµéÀº ÀÌ ¹®¼­¿¡¼­ Á» ´õ °¡º­¿î Ãë±ÞÀ» ¹Þ¾Ò´Ù. ¿Ö³Ä¸é PVM, MPI, ±×¸®°í AFAPI¿Í ´Ù¸£°Ô ³ª´Â ¸®´ª½º Ŭ·¯½ºÅÍ¿¡ ÀÌ·± ½Ã½ºÅÛµéÀ» Á÷Á¢ »ç¿ëÇÒ ±âȸ°¡ ÀüÇô ¶Ç´Â °ÅÀÇ ¾ø¾ú±â ¶§¹®ÀÌ´Ù.ÀÌ·± °ÍµéÀ̳ª ´Ù¸¥ ¶óÀ̺귯¸®µé Áß ¾î¶² °ÍÀÌ¶óµµ Æ¯º°È÷ À¯¿ëÇÏ´Ù°í »ý°¢µÇ¸é ¿©·¯ºÐÀÌ Ã£Àº °ÍÀ» ¼³¸íÇÑ À̸ÞÀÏÀ» <htmlurl url="mailto:pplinux@ecn.purdue.edu" name="pplinux@ecn.purdue.edu">·Î º¸³»Áֱ⠹ٶõ´Ù. ±×·¯¸é ³ª´Â ±× ¶óÀ̺귯¸®¸¦ È®Àå ¼½¼Ç¿¡ ´õÇÏ´Â °ÍÀ» °í·ÁÇÏ°Ú´Ù. <sect2>Condor (ÇÁ·Î¼¼½º ÀÌÁÖ Áö¿ø, process migration support) <p> Condor´Â ¿öÅ©½ºÅ×À̼ǵéÀÇ Ä¿´Ù¶õ À̱âÁ¾ Ŭ·¯½ºÅ͸¦ °ü¸®ÇÒ ¼ö ÀÖ´Â ºÐ»ê ÀÚ¿ø °ü¸® ½Ã½ºÅÛÀÌ´Ù. ÀÌ°ÍÀÇ ¼³°è µ¿±â´Â Ŭ·¯½ºÅÍÀÇ È°¿ëµÇÁö ¾Ê´Â ¿ª·®À» ¿À·¡-½ÇÇàµÇ°í °è»êÀÌ ¸¹Àº Àϵ鿡 ´ëÇؼ­ »ç¿ëÇÏ°íÀÚ ÇÏ´Â »ç¶÷µéÀÇ ¿ä±¸¿¡ ÀÇÇؼ­ÀÌ´Ù. Condor´Â ½Ã°¢ ¹× ½ÇÇà ±â°èµéÀÌ °øÅë ÆÄÀÏ ½Ã½ºÅÛÀ» °øÀ¯ÇÏÁö ¾Ê°í/°Å³ª Æнº¿öµå ¸ÞÄ«´ÏÁòÀ» °øÀ¯ÇÏÁö ¾ÊÀ»Áö¶óµµ, ½ÇÇà ±â°è¿¡ Ä¿´Ù¶õ ½ÃÀÛ ±â°èÀÇ È¯°æÀ» À¯ÁöÇÑ´Ù. ´ÜÀÏ ÇÁ·Î¼¼½º¸¦ À¯ÁöÇÏ´Â Condor ÀÛ¾÷µéÀº À̺¥Æ® ¿Ï·á¸¦ È®ÀÎÇÏ´Â µ¥ ÇÊ¿äÇϱ⠶§¹®¿¡ ÀÚµ¿À¸·Î checkpointµÇ°í ¿öÅ©½ºÅ×ÀÌ¼Çµé »çÀÌ¿¡¼­ ÀÌÁֵȴÙ. Condor´Â <url url="http://www.cs.wisc.edu/condor/"> ¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. ¸®´ª½º Æ÷ÆÃµÈ ¹öÀüÀÌ Á¸ÀçÇÑ´Ù; ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº <url url="http://www.cs.wisc.edu/condor/linux/linux.html">À» ã¾Æ º¼ ¼ö ÀÖ´Ù. ÀÚ¼¼ÇÑ °ÍÀº <htmlurl url="mailto:condoradmin@cs.wisc.edu" name="condoradmin@cs.wisc.edu">À» ¸¸³ªº¸¶ó. <sect2>DFN-RPC (German Research Network - Remote Procedure Call) <p> DFN-RPC(µ¶ÀÏ ¿¬±¸ ³×Æ®¿÷ RPC) ÅøÀº ¿öÅ©½ºÅ×À̼ǰú °è»ê ¼­¹ö³ª Ŭ·¯½ºÅÍ °£¿¡ °úÇÐ-±â¼úÀûÀÎ ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥µéÀ» ºÐ»êÇÏ°í º´·ÄÈ­(parallelize)Çϱâ À§Çؼ­ °³¹ßµÇ¾ú´Ù. ÀÌ ÀÎÅÍÆäÀ̽º´Â Æ÷Æ®¶õÀ¸·Î ÀÛ¼ºµÈ ¾îÇø®ÄÉÀ̼ǿ¡ ÃÖÀûÈ­µÇ¾î ÀÕÁö¸¸ DFN-RPC´Â ¶ÇÇÑ C ȯ°æ¿¡¼­µµ »ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº ¸®´ª½º·Î Æ÷ÆõǾú´Ù. ÀÚ¼¼ÇÑ Á¤º¸´Â <url url="ftp://ftp.uni-stuttgart.de/pub/rus/dfn_rpc/README_dfnrpc.html">¿¡ ÀÖ´Ù. <sect2>DQS (ºÐ»ê Å¥À× ½Ã½ºÅÛ, Distributed Queueing System) <p> Á¤È®ÇÏ°Ô ¸»Çؼ­ ¶óÀ̺귯¸®´Â ¾Æ´ÏÁö¸¸ DQS 3.0 (ºÐ»ê Å¥À× ½Ã½ºÅÛ)Àº ¸®´ª½º¿¡¼­ °³¹ßµÇ°í Å×½ºÆ®µÈ ÀÛ¾÷ Å¥À× ½Ã½ºÅÛÀÌ´Ù. ÀÌ°ÍÀº À̱âÁ¾ Ŭ·¯½ºÅ͸¦ ÇϳªÀÇ ¿£ÅÍƼ·Î½á »ç¿ëÇÏ°í °ü¸®ÇÒ ¼ö ÀÖµµ·Ï ¼³°èµÇ¾ú´Ù. ÀÌ°ÍÀº <url url="http://www.scri.fsu.edu/~pasko/dqs.html">¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù. CODINE 4.1.1(ºÐ»ê ³×Æ®¿÷ ȯ°æ¿¡¼­ÀÇ °è»ê, COmputing in DIstributed Network Environments)¶ó°í ºÒ¸®´Â »ó¾÷¿ë ¹öÀüµµ ¶ÇÇÑ Á¸ÀçÇÑ´Ù. ÀÌ°ÍÀÇ Á¤º¸´Â <url url="http://www.genias.de/genias_welcome.html">¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. <!-- ------------------------------------------------------------- --> <sect1>ÀÏ¹Ý Å¬·¯½ºÅÍ Âü°íÀÚ·á <!-- ------------------------------------------------------------- --> <p> Ŭ·¯½ºÅ͵éÀº ¾ÆÁÖ ¸¹Àº ¹æ½ÄÀ¸·Î ±¸ÃàµÇ°í »ç¿ëµÉ ¼ö Àֱ⠶§¹®¿¡ Èï¹Ì·Î¿î °øÇåÀ» ÇÑ ±×·ìµéÀÌ ²Ï ÀÖ´Ù. ´ÙÀ½Àº ÀϹÝÀûÀÎ °ü½É°Å¸®°¡ µÉ ¼ö ÀÖ´Â ´Ù¾çÇÑ Å¬·¯½ºÅÍ-°ü·Ã ÇÁ·ÎÁ§Æ®µé¿¡ ´ëÇÑ ·¹ÆÛ·±½ºÀÌ´Ù. ÀÌ°ÍÀº ¸®´ª½º¿¡ ÇÑÁ¤µÈ °Í°ú ±×·¸Áö ¾ÊÀº ÀϹÝÀûÀΠŬ·¯½ºÅÍ ·¹ÆÛ·±½ºµéÀ» ´ã°í ÀÖ´Ù. ÀÌ ¸®½ºÆ®´Â ¾ËÆĺª ¼ø¼­·Î ³ª¿Í ÀÖ´Ù. <sect2>Beowulf <p> Beowulf ÇÁ·ÎÁ§Æ®´Â, <url url="http://cesdis1.gsfc.nasa.gov/beowulf/">, »óÇ° ÇǾ¾-Ŭ·¡½º Çϵå¿þ¾î, °í-´ë¿ªÆø Ŭ·¯½ºÅÍ-ÀÎÅͳΠ³×Æ®¿÷, ±×¸®°í ¸®´ª½º ¿î¿µ üÁ¦¸¦ ±â¹ÝÀ¸·Î ÇÑ ±Ô°ÝÇ° ¿öÅ©½ºÅ×ÀÌ¼Ç Å¬·¯½ºÅ͸¦ »ç¿ëÇϱâ À§ÇÑ ¼ÒÇÁÆ®¿þ¾î Á¦ÀÛ¿¡ ÁýÁßÇÏ°í ÀÖ´Ù. Thomas Sterling°¡ Beowulf µÚÀÇ ÃßÁø·ÂÀ̾úÀ¸¸ç °è¼ÓÇؼ­ ÀϹÝÀûÀÎ °úÇÐ ÄÄÇ»ÆÃÀ» À§ÇÑ ¸®´ª½º Ŭ·¯½ºÅ͸µÀÇ ¿õº¯ÀûÀÌ°í ¼ÖÁ÷ÇÑ Á¦¾ÈÀÚÀ̾ú´Ù. »ç½Ç, ¸¹Àº ±×·ìµéÀÇ Áö±Ý ±×µéÀÇ Å¬·¯½ºÅ͸¦ "Beowulf class" ½Ã½ºÅÛµéÀ̶ó°í ºÎ¸¥´Ù - ½ÉÁö¾î ±× Ŭ·¯½ºÅÍ°¡ ½ÇÁ¦ °ø½ÄÀûÀÎ Beowulf ¼³°è¿¡ ÀüÇô ºñ½ÁÇÏÁö ¾Ê´õ¶óµµ ¸»ÀÌ´Ù. Beowulf ÇÁ·ÎÁ§Æ®¸¦ Áö¿øÇÏ´Â ÀÏÀ» ÇÏ´Â Don Becker´Â ¸®´ª½º¿¡ ÀÇÇؼ­ ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â ¸¹Àº ³×Æ®¿÷ µå¶óÀ̹öµéÀ» ¸¸µé¾ú´Ù. À̵é Áß ¸¹Àº °ÍµéÀÌ BSD¿¡¼­ »ç¿ëµÇµµ·Ï Àû¿ëµÇ¾î ¿Ô´Ù. DonÀº ¶ÇÇÑ ºñ½Ñ ½ºÀ§Ä¡ Çãºê¾øÀÌ ´õ ³ôÀº ´ë¿ªÆøÀ» ȹµæÇϵµ·Ï ´Ù¼öÀÇ º´·Ä Ä¿³Ø¼ÇµéÀ» ÅëÇؼ­ ·Îµå-ºÐ¹è¸¦ Çã¿ëÇÏ´Â ¸¹Àº ¸®´ª½º ³×Æ®¿÷ µå¶óÀ̹öµé¿¡ ´ëÇؼ­µµ Ã¥ÀÓÀ» Áö°í ÀÖ´Ù. ÀÌ·± ·Îµå-ºÐ¹è(load-sharing) ŸÀÔÀº Beowulf Ŭ·¯½ºÅÍ°¡ ¿øÁ¶ÀÎ ´Ù¸¥ °Í°ú ±¸º°µÈ´Â ±â´ÉÀ̾ú´Ù. <sect2>Linux/AP+ <p> Linux/AP+ ÇÁ·ÎÁ§Æ®, <url url="http://cap.anu.edu.au/cap/projects/linux/">´Â Á¤È®ÇÏ°Ô ¸®´ª½º Ŭ·¯½ºÅ͸µ¿¡ ´ëÇÑ °ÍÀÌ ¾Æ´Ï°í ¸®´ª½º¸¦ Fujitsu AP1000+À¸·Î Æ÷ÆÃÇÏ´Â °Í°ú ÀûÀýÇÑ º´·Ä ó¸® ÁõÁøÀ» ´õÇÏ´Â °Í¿¡ ÃÐÁ¡À» ¸ÂÃá °ÍÀÌ´Ù. AP1000+´Â ȯÇü ÅäÆú·ÎÁö, 25 MB/s ´ë¿ªÆø, ±×¸®°í 10 ¸¶ÀÌÅ©·Î ÃÊ Áöü ½Ã°£ ... À» °¡Áø Ä¿½ºÅÒ ³×Æ®¿÷À» »ç¿ëÇÏ´Â »ó¿ë SPARC-±â¹Ý º´·Ä ±â°èÀÌ´Ù. ´Ü¼øÇÏ°Ô ¸»Çؼ­ ÀÌ°ÍÀº SPARC ¸®´ª½º Ŭ·¯½ºÅä¿Í ¾ÆÁÖ À¯»çÇÏ´Ù. <sect2>Locust <p> ·ÎÄ¿½ºÆ®(Locust) ÇÁ·ÎÁ§Æ®, <url url="http://www.ecsl.cs.sunysb.edu/~manish/locust/">´Â ¸Þ½ÃÁö-Áöü½Ã°£À» ¼û±â±â À§Çؼ­ ±×¸®°í ½Ç½Ã°£À¸·Î ³×Æ®¿÷ Æ®·¡ÇÈÀ» ÁÙÀ̱â À§Çؼ­ ÄÄÆÄÀÏ-½Ã°£ Á¤º¸¸¦ »ç¿ëÇÏ´Â ºÐ»ê °¡»ó °øÀ¯ ¸Þ¸ð¸® ½Ã½ºÅÛÀ» ±¸ÃàÇÏ°í ÀÖ´Ù. Pupa´Â ·ÎÄ¿½ºÆ®ÀÇ ±â¹Ý Åë½Å ¼­ºê½Ã½ºÅÛÀÌ°í FreeBSDÀÇ 486 ÇǾ¾µéÀ» ¿¬°áÇϱâ À§Çؼ­ ÀÌ´õ³ÝÀ» »ç¿ëÇÏ¿© ±¸ÇöµÇ¾ú´Ù. ¸®´ª½ºÀΰ¡? <sect2>Midway DSM (Distributed Shared Memory) <p> Midway, <url url="http://www.cs.cmu.edu/afs/cs.cmu.edu/project/midway/WWW/HomePage.html">´Â TreadMarks¿Í ´Ù¸£Áö ¾Ê´Â, ¼ÒÇÁÆ®¿þ¾î-±â¹Ý DSM(ºÐ»ê °øÀ¯ ¸Þ¸ð¸®) ½Ã½ºÅÛÀÌ´Ù. ÀÌ°ÍÀº »ó´ëÀûÀ¸·Î ´À¸° ÆäÀÌÁö-ÆúÆ® ¸ÞÄ«´ÏÁòµéº¸´Ù´Â ÄÄÆÄÀÏ-½Ã°£ µµ¿ò(aids)À» »ç¿ëÇÏ°í °øÂ¥¶ó´Â °ÍÀÌ Èñ¼Ò½ÄÀÌ´Ù. ³ª»Û ¼Ò½ÄÀº ÀÌ°ÍÀÌ ¸®´ª½º Ŭ·¯½ºÅ͵é À§¿¡¼­ ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù. <sect2>Mosix <p> MOSIZ´Â BSDI BSD/OS¸¦ º¯Á¶Çؼ­ ÇǾ¾µéÀ» ³×Æ®¿÷À¸·Î ¹­Àº ±×·ì À§¿¡¼­ µ¿Àû ·Îµå ¹ë·±½Ì°ú ¼±Á¡(preemptive) ÇÁ·Î¼¼½º ÀÌÁÖ¸¦ Á¦°øÇϵµ·Ï ÇÑ °ÍÀÌ´Ù. ÀÌ°ÍÀº º´·Ä 󸮿¡ ´ëÇؼ­»Ó¸¸ÀÌ ¾Æ´Ï°í Á¶Àý °¡´ÉÇÑ(scalable) SMP¿Í ¾ÆÁÖ À¯»çÇÑ Å¬·¯½ºÅ͸¦ ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â µ¥¿¡µµ ÁÁÀº °ÍÀÌ´Ù. ¸®´ª½º ¹öÀüÀÌ ÀÖÀ»±î? Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <url url="http://www.cs.huji.ac.il/mosix/">¸¦ ÂüÁ¶ÇÏÀÚ. <sect2>NOW (Network Of Workstations) <p> ¹öŬ¸® NOW (³×Æ®¿÷À¸·Î ¹­Àº ¿öÅ©½ºÅ×À̼ǵé, Network Of Workstations) ÇÁ·ÎÁ§Æ®, <url url="http://now.cs.berkeley.edu/">´Â ³×Æ®¿÷À¸·Î ¹­Àº ¿öÅ©½ºÅ×À̼ǵéÀ» »ç¿ëÇؼ­ º´·Ä ÄÄÇ»ÆÃÀ» Çϵµ·Ï ¸¹Àº ¾Ð·ÂÀ» Çà»çÇØ¿Ô´Ù. ÇöÀç ¸¹Àº ÀÛ¾÷µéÀÌ, ¸ðµÎ "´ÙÀ½ ¸î³â ¾È¿¡ ½ÇÁúÀûÀÎ 100°³ÀÇ ÇÁ·Î¼¼¼­ ½Ã½ºÅÛÀ» µ¥¸ðÇÏ´Â °Í"À» ÇâÇؼ­, ÀÌ·ç¾îÁö°í ÀÖ´Ù. ¾Æ»Ô»ç, À̵éÀº ¸®´ª½º¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. <sect2>¸®´ª½º¸¦ »ç¿ëÇÏ´Â º´·Ä ó¸®(Parallel Processing Using Linux) <p> ¸®´ª½º¸¦ »ç¿ëÇÑ º´·Ä ó¸® WWW »çÀÌÆ®, <url url="http://yara.ecn.purdue.edu/~pplinux/">, ´Â ÀÌ HOWTOÀÇ È¨ ÆäÀÌÁöÀ̸ç ÇÏ·çÂ¥¸® Æ©Å͸®¾óÀ» ³ë¸° ¿Â¶óÀÎ ½½¶óÀ̵éÀ» Æ÷ÇÔÇÑ ¸¹Àº °ü·ÃµÈ ¹®¼­µéÀÌ ÀÖ´Â °÷ÀÌ´Ù. PAPERS ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ ÀÛ¾÷À» Á¦¿ÜÇÏ°íµµ ÆÛµà ´ëÇб³ ÀüÀÚ ¹× ÄÄÇ»ÅÍ °øÇÐ Çб³´Â ÀϹÝÀûÀ¸·Î º´·Ä ó¸®ÀÇ ¸®´õ·Î ±º¸²ÇØ¿Ô´Ù; ÀÌ »çÀÌÆ®´Â ´Ù¸¥ »ç¶÷µéÀÌ ¸®´ª½º ÇǾ¾µéÀ» º´·Ä 󸮿¡ Àû¿ëÇÏ´Â °ÍÀ» µ½±â À§Çؼ­ ¼³¸³µÇ¾ú´Ù. ÆÛµàÀÇ Ã¹¹ø° ¸®´ª½º ÇǾ¾ Ŭ·¯½ºÅÍ°¡ 1994³â 2¿ù¿¡ Á¶¸³µÈ ÀÌ·¡·Î ºñµð¿À º®(video wall)À» Æ÷ÇÔÇÑ, ¼ö¸¹Àº ¸®´ª½º ÇǾ¾ Ŭ·¯½ºÅ͵éÀÌ Æ۵࿡¼­ Á¶¸³µÇ¾î¿Ô´Ù. ºñ·Ï ÀÌ·± Ŭ·¯½ºÅ͵éÀÌ 386, 486, ±×¸®°í Pentium ½Ã½ºÅÛµé(Pentium Pro ½Ã½ºÅÛÀº ¾ø´Ù)À» »ç¿ëÇßÁö¸¸ ¿ä±Ù·¡ ÀÎÅÚÀÌ Pentium II ½Ã½ºÅÛµé·Î µÈ ´Ù¼öÀÇ Ä¿´Ù¶õ Ŭ·¯½ºÅ͵éÀ» ¸¸µé ¼ö ÀÖµµ·Ï ÆÛµà ´ëÇб³¿¡ ±âºÎ¸¦ Çß´Ù. ÀÌ·± Ŭ·¯½ºÅ͵éÀÌ ¸ðµÎ PAPERS ³×Æ®¿÷À» °¡Áö°í °¡Áú °ÍÀÌÁö¸¸ ´ëºÎºÐÀÇ °ÍµéÀÌ ¶ÇÇÑ ÀüÅëÀûÀÎ ³×Æ®¿÷À» °¡Áø´Ù. <sect2>ÆæƼ¾ö ÇÁ·Î Ŭ·¯½ºÅÍ ¿öÅ©¼¥(Pentium Pro Cluster Workshop) <p> ¾ÆÀÌ¿À¿Í(Iowa) ÁÖ µ¥¸ðÀÎ(Des Moines)¿¡¼­ 1997³â 4¿ù 10-11¿¡ AMES ·¦Àº ÆæƼ¾ö ÇÁ·Î Ŭ·¯½ºÅÍ ¿öÅ©¼¥À» ¿­¾ú´Ù. ÀÌ ¿öÅ©¼¥ÀÇ WWW »çÀÌÆ®, <url url="http://www.scl.ameslab.gov/workshops/PPCworkshop.html">, ´Â ¸ðµç Âü°¡ÀÚµé·ÎºÎÅÍ ¼öÁýµÈ dzºÎÇÑ ÇǾ¾ Ŭ·¯½ºÅÍ Á¤º¸µéÀ» °®°í ÀÖ´Ù. <sect2>TreadMarks DSM (Distributed Shared Memory) <p> DSM (ºÐ»ê °øÀ¯ ¸Þ¸ð¸®, Distributed Shared Memory)´Â ÀÌ°Í¿¡ ÀÇÇؼ­ ¸Þ½ÃÁö-Àü´Þ ½Ã½ºÅÛÀÌ SMPó·³ ÇൿÇÏ´Â °Í°°ÀÌ º¸ÀÏ ¼ö ÀÖ´Â, ±â¼úÀÌ´Ù. ¸î°¡Áö ±×·± ½Ã½ºÅÛµéÀÌ Á¸ÀçÇÏ°í À̵é Áß ´ëºÎºÐÀº ¸Þ½ÃÁö Àü¼ÛÀ» Æ®¸®°Å(Ã˹ß)Çϱâ À§Çؼ­ OS ÆäÀÌÁö-¿À·ù ¸ÞÄ«´ÏÁòÀ» »ç¿ëÇÑ´Ù. TreadMarks, <url url="http://www.cs.rice.edu/~willy/TreadMarks/overview.html">´Â ÀÌ·± ½Ã½ºÅÛµé Áß Á» ´õ È¿À²ÀûÀÎ °ÍÀÌ¸ç ¸®´ª½º Ŭ·¯½ºÅÍ À§¿¡¼­ ½ÇÇàµÈ´Ù. ½½Ç ¼Ò½ÄÀº "TreadMarks°¡ ´ëÇб³µéÀ̳ª ºñ¿µ¸® ±â°üµé¿¡ Àúºñ¿ëÀ¸·Î ¹èÆ÷µÇ°í ÀÖ´Ù´Â °ÍÀÌ´Ù". ÀÌ ¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇÑ Á» ´õ ¸¹Àº Á¤º¸¸¦ ¿øÇÑ´Ù¸é <htmlurl url="mailto:treadmarks@ece.rice.edu" name="treadmarks@ece.rice.edu">°ú Á¢ÃËÇغ¸±â ¹Ù¶õ´Ù. <sect2>U-Net (User-level NETwork interface architecture) <p> ÄÚ³Ú ´ëÇб³ÀÇ U-Net (User-level NETwork interface architecture) ÇÁ·ÎÁ§Æ®, <url url="http://www2.cs.cornell.edu/U-Net/Default.html">´Â ³×Æ®¿÷ ÀÎÅÍÆäÀ̽º¸¦ °¡»óÈ­Çؼ­(virtualize) ¾îÇø®ÄÉÀ̼ǵéÀÌ ¸Þ½ÃÁöµéÀ» ¿î¿µÃ¼Á¦ÀÇ °£¼·¾øÀÌ Àü¼ÛÇϰųª ¼ö½ÅÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â, »óÇ° ³×Æ®¿÷ Çϵå¿þ¾î¸¦ »ç¿ëÇÑ ³·Àº Áöü ½Ã°£°ú ³ôÀº ´ë¿ªÆøÀ» Á¦°øÇÏ´Â ½Ãµµ¸¦ ÇÏ°í ÀÖ´Ù. U-NetÀº Fast ÀÌ´õ³Ý¿¡ ±â¹ÝÇÑ DECchip DC21140 ¸¦ »ç¿ëÇϰųª Fore Systems PCA-200(PCA-200E°¡ ¾Æ´Ô) ATM Ä«¸¦ »ç¿ëÇÏ´Â ¸®´ª½º ÇǾ¾µé À§¿¡¼­ ÀÛµ¿ÇÑ´Ù. <sect2>WWT (Wisconsin Wind Tunnel) <p> À§½ºÄܽſ¡´Â »ó´çÈ÷ ¸¹Àº Ŭ·¯½ºÅÍ-°ü·Ã ÀÛ¾÷µéÀÌ ÀÌ·ç¾îÁö°í ÀÖ´Ù. WWT (Wisconsin Wind Tunnel) ÇÁ·ÎÁ§Æ®, <url url="http://www.cs.wisc.edu/~wwt/">´Â ÄÄÆÄÀÏ·¯µé°ú ±â¹Ý Æз¯·² Çϵå¿þ¾î »çÀÌÀÇ "Ç¥ÁØ" ÀÎÅÍÆäÀ̽º¸¦ °³¹ßÇÏ´Â ÂÊÀÇ ¸ðµç Á¾·ùÀÇ ÀϵéÀ» ¼öÇàÇÏ°í ÀÖ´Ù. Wisconsin COW (Cluster Of Workstations), Cooperative Shared Memory and Tempest, Paradyn Parallel Performance Tools µîÀÌ ÀÖ´Ù. ºÒÇàÇÏ°Ôµµ ¸®´ª½º¿¡ °üÇÑ ÀϵéÀº º°·Î ¾ø´Ù. <!-- 4Àå --> <!--***************************************************************--> <sect>ÇϳªÀÇ ·¹Áö½ºÅÍÀ§¿¡¼­ÀÇ SIMD(¿¹: MMX »ç¿ë) <!--***************************************************************--> <p> ´ÜÀÏ ·¹Áö½ºÅÍ ³»ÀÇ SIMD(SWAR)´Â »õ·Î¿î ¾ÆÀ̵ð¾î°¡ ¾Æ´Ï´Ù. <em>k</em>-ºñÆ® ·¹Áö½ºÅÍ, µ¥ÀÌÅÍ Æнº, ±×¸®°í ÇÔ¼ö À¯´Ö À» °¡Áö´Â ±â°è°¡ ÀÖÀ» ¶§ ÀÏ¹Ý ·¹Áö½ºÅÍ ¿¬»êµéÀÌ <em>n</em>°³ÀÇ <em>k</em>/<em>n</em>-ºñÆ®, Á¤¼ö ÇÊµå °ªµé À§¿¡¼­ SIMD º´·Ä ¿¬»êµé·Î ¼öÇàµÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ ¿À·¡ÀüºÎÅÍ ¾Ë·ÁÁ® ¿Ô´Ù. ±×·¯³ª SWAR ±â¼úµé¿¡ ÀÇÇؼ­ Á¦°øµÇ´Â 2¹è¿¡¼­ 8¹è±îÁöÀÇ ¼Óµµ Áõ°¡°¡ ¸ÞÀνºÆ®¸² ÄÄÇ»Æÿ¡ ´ëÇÑ °ü½É»ç°¡ µÈ °ÍÀº ¿äÁòµé¾î ¸ÖƼ¹Ìµð¾î¿¡ ´ëÇÑ °­·ÄÇÑ Ãß¼¼¶§¹®ÀÌ´Ù. ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­µéÀÇ 1997 ¹öÀü ´ëºÎºÐÀº SWAR¿¡ ´ëÇÑ Çϵå¿þ¾î Áö¿øÀ» ´ã°í ÀÖ´Ù: <itemize> <item><htmlurl url="http://www.amd.com/html/products/pcd/techdocs/appnotes/20726a.pdf" name="AMD K6 MMX (MultiMedia eXtensions)"> <item><htmlurl url="http://www.cyrix.com:80/process/SUPPORT/isv.htm" name="Cyrix M2 MMX (MultiMedia eXtensions)"> <item><htmlurl url="http://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphahb2.pdf" name="Digital Alpha MAX (MultimediA eXtensions)"> <item><htmlurl url="http://hpcc997.external.hp.com:80/wsg/strategies/pa2go3/pa2go3.html" name="Hewlett-Packard PA-RISC MAX (Multimedia Acceleration eXtensions)"> <item><htmlurl url="http://developer.intel.com/drg/mmx/" name="Intel Pentium II & Pentium with MMX (MultiMedia eXtensions)"> <item><htmlurl url="http://www.microunity.com/www/mediaprc.htm" name="Microunity Mediaprocessor SIGD (Single Instruction on Groups of Data)"> <item><htmlurl url="http://www.mips.com/arch/ISA5/" name="MIPS Digital Media eXtension (MDMX, pronounced Mad Max)"> <item><htmlurl url="http://www.sun.com/sparc/vis/index.html" name="Sun SPARC V9 VIS (Visual Instruction Set)"> </itemize> »õ·Î¿î ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­µé¿¡ ÀÇÇؼ­ Á¦°øµÇ´Â Çϵå¿þ¾î Áö¿ø¿¡´Â ¸î°¡Áö °áÇÔµéÀÌ ÀÖ°í ¾î¶² Çʵå Å©±âµé¿¡ ´ëÇؼ­ ¾î¶² ¿¬»êµé¸¸À» Áö¿øÇÏ´Â °Í°ú °°Àº ´ÜÁ¡ÀÌ ÀÖ´Ù. ±×·¯³ª ¸¹Àº SWAR ¿¬»êµéÀÌ È¿À²ÀûÀ̾î¾ß ÇÏ´Â Çϵå¿þ¾î Áö¿øÀÌ ÇÊ¿ä¾ø´Ù´Â °ÍÀ» ±â¾ïÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù. ¿¹¸¦ µé¾î¼­ ºñÆ®´ÜÀ§ ¿¬»êµéÀº ÇϳªÀÇ ·¹Áö½ºÅ͸¦ ³í¸®ÀûÀ¸·Î ºÐÇÒÇÏ´Â °Í¿¡ ÀÇÇؼ­ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù. <!-- ------------------------------------------------------------- --> <sect1>SWAR: ¾îµð¿¡ ÁÁÀº °ÍÀÌ°¡(What Is It Good For)? <!-- ------------------------------------------------------------- --> <p> ºñ·Ï <em>¸ðµç</em> ÇöÀç ÇÁ·Î¼¼¼­µéÀÌ Àû¾îµµ ¾î´ø SWAR º´·Ä ±â´É(parallelism)°ú ÇÔ²² ¼öÇàÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù°í ÇÏ´õ¶óµµ °¡Àå ÁÁÀº SWAR-°³¼± ¸í·É ¼Âµéµµ ¾ÆÁÖ ÀϹÝÀûÀÎ-¸ñÀûÀÇ º´·Ä ±â´É(parallelism)À» Áö¿øÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ ½½Ç »ç½ÇÀÌ´Ù. »ç½Ç, ¸¹Àº »ç¶÷µéÀÌ Pentium°ú "Pentium with MMX technology" »çÀÌÀÇ ¼öÇà ´É·Â Â÷ÀÌ°¡ ¿ì¿¬È÷µµ MMX¿Í µ¿½Ã¿¡ ³ªÅ¸³­ ´õ Å« L1 ij½¬¿Í °°Àº °Íµé ¶§¹®À̶ó°í »ý°¢ÇÑ´Ù. ±×·¸´Ù¸é SWAR(Áï MMX)´Â Çö½ÇÀûÀ¸·Î ¾îµð¿¡ ÁÁÀº °ÍÀΰ¡? <itemize> <item>Á¤¼öµé¸¸ ÀÖ´Â °ÍÀÌ, ´õ ÀûÀº °ÍÀÌ ´õ ÁÁ´Ù. 32-ºñÆ® °ªµéÀº 64-ºñÆ® MMX ·¹Áö½ºÅÍ¿¡ ¸Â¾Æ ¶³¾îÁöÁö¸¸ 8°³ÀÇ 1-¹ÙÀÌÆ® ¹®ÀÚµéÀ̳ª 1-ºñÆ®°ªµéÀÇ Ã¼½ºÆÇ Å©±â(ü½ºÆÇÀº °¡·Î ¼¼·Î 8°³¾¿ÀÇ Ä­ÀÌ ÀÖ´Ù. ±×·¡¼­ 64°³; ¿ªÀÚÁÖ) °³¼ö ÀüüÀÌ´õ¶óµµ ¸Â¾Æ ¶³¾îÁø´Ù. Note: ÀÌ ±ÛÀ» ¾²°í ÀÖ´Â ¼ø°£ ºñ·Ï ¸¹Àº ³»¿ëÀÌ ¾øÁö¸¸ <em>MMXÀÇ ºÎµ¿-¼Ò¼ýÁ¡ ¹öÀüÀÌ ÀÖÀ»</em> °ÍÀÌ´Ù. Cyrix´Â <bf>MMFP</bf>¿¡ ´ëÇÑ ¸î°¡Áö ¼³¸íÀ» ´ãÀº ½½¶óÀ̵åµéÀ» <url url="ftp://ftp.cyrix.com/developr/mpf97rm.pdf">¿¡ Æ÷½ºÆÃÇسõ¾Ò´Ù. ¾ó¸¥ ºÁ¼­ MMFP´Â µÎ 32-ºñÆ® ºÎµ¿-¼Ò¼ýÁ¡ ¼ýÀÚµéÀÌ 64-ºñÆ® MMX ·¹Áö½ºÅÍ Çϳª¿¡ ÆÑÅ·µÇ´Â °ÍÀ» Áö¿øÇÒ °ÍÀÌ´Ù; ÀÌ°ÍÀ» µÎ°³ÀÇ MMFP ÆÄÀÌÇÁ¶óÀεé·Î ¹­À¸¸é Ŭ·° Çϳª´ç ³×°³ÀÇ ´ÜÀÏ-Á¤¹Ðµµ FLOP¸¦ »ý»êÇÒ °ÍÀÌ´Ù. <item>SIMD, ¶Ç´Â º¤ÅÍ-½ºÅ¸ÀÏ º´·Ä ó¸®(parallelism). µ¿ÀÏÇÑ ¿¬»êÀÌ ¸ðµç Çʵåµé¿¡ µ¿½Ã¿¡ Àû¿ëµÈ´Ù. ¼±ÅÃµÈ Çʵåµé¿¡ È¿°ú¸¦ ¾ø¾Ö´Â ¹æ¹ýµé(Áï, SIMD enable ¸¶½ºÅ·)ÀÌ Á¸ÀçÇÏÁö¸¸ ±×µéÀº º¹ÀâÇÏ°í ¼º´ÉÀ» ÀúÇϽÃŲ´Ù. <item> Áö¿ªÈ­(localized)µÇ°í Á¤±ÔÀûÀÎ(¿ÀÈ÷·Á ÆÑÅ·µÈ), ¸Þ¸ð¸® ÂüÁ¶ ÆÐÅϵé. ÀϹÝÀûÀÎ SWAR, ±×¸®°í Ưº°È÷ MMX, ´Â ·£´ý-¼ø¼­ Á¢±Ù¿¡ Áã¾àÀÌ´Ù; º¤ÅÍ <tt>x[y]</tt>(¿©±â¼­ <tt>y</tt>´Â À妽º ¹è¿­ÀÌ´Ù)¸¦ ¸ðÀ¸´Â °ÍÀº ¾öû ºñ½Î´Ù. </itemize> À̵éÀº ½É°¢ÇÑ Á¦¾àÁ¡µéÀÌÁö¸¸ ÀÌ·± ŸÀÔÀÇ º´·Ä 󸮴 ¸¹Àº º´·Ä ¾Ë°í¸®Áòµé¿¡¼­ ³ªÅ¸³ª´Â °ÍÀÌ´Ù - ¸ÖƼ¹Ìµð¾î ¾îÇø®ÄÉÀ̼ǵé»Ó¸¸ÀÌ ¾Æ´Ï°í. ¾Ë°í¸®ÁòÀÇ ÀûÀýÇÑ Å¸ÀÔ¿¡ ´ëÇؼ­ SWAR´Â SMP³ª Ŭ·¯½ºÅÍ º´·Ä 󸮺¸´Ù ÈξÀ È¿À²ÀûÀÌ´Ù... ±×¸®°í ÀÌ°ÍÀº ±×°ÍÀ» »ç¿ëÇÏ´Â µ¥ ¾î¶² Ãß°¡ ºñ¿ëµµ µéÁö ¾Ê´Â´Ù. <!-- ------------------------------------------------------------- --> <sect1>SWAR ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ¼Ò°³(Introduction To SWAR Programming) <!-- ------------------------------------------------------------- --> <p> SWARÀÇ ±âº» °³³ä(ÄÁ¼Á), ´ÜÀÏ ·¹Áö½ºÅÍ ¾È¿¡¼­ÀÇ SIMD, ´Â ¿öµå-±æÀÌ ·¹Áö½ºÅ͵é À§¿¡¼­ÀÇ ¿¬»êµéÀÌ <em>n</em>°³ÀÇ <em>k</em>/<em>n</em>-ºñÆ® ÇÊµå ¼öÄ¡µé¿¡ ´ëÇÑ SIMD º´·Ä ¿¬»êÀ» ¼öÇàÇÔÀ¸·Î½á °è»ê ¼Óµµ¸¦ ³ôÀÌ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ±×·¯³ª SWAR ±â¼úÀ» »ç¿ëÇÏ´Â °ÍÀº ´Ù¼Ò ¾î»öÇÒ ¼ö ÀÖÀ¸¸ç ¶ÇÇÑ ¾î¶² SWAR ¿¬»êµéÀº ½ÇÁ¦ ´ëÀÀµÇ´Â ÀÏ·ÃÀÇ ¼øÂ÷ÀûÀÎ ¿¬»êµéº¸´Ù, ±×µéÀÌ ÇÊµå ºÐÇÒÀ» ¼öÇàÇÏ´Â Ãß°¡ÀÇ ¸í·É¾îµéÀ» ¿ä±¸Çϱ⠶§¹®¿¡, ´õ °í ºñ¿ëÀÌ´Ù. ÀÌ °üÁ¡À» ¿¹½ÃÇϱâ À§Çؼ­ »ó´çÈ÷ ´Ü¼øÈ­µÈ, °¢ 32-ºñÆ® ·¹Áö½ºÅÍ ¾È¿¡¼­ 4°³ÀÇ 8-ºñÆ® ÇʵåµéÀ» °ü¸®ÇÏ´Â, SWAR ¸ÞÄ«´ÏÁòÀ» »ý°¢Çغ¸µµ·Ï ÇÏÀÚ. µÎ ·¹Áö½ÃÅ͵é¾ÈÀÇ ¼öÄ¡µéÀº ´ÙÀ½°ú °°ÀÌ Ç¥ÇöµÉ ¼ö ÀÖ°Ú´Ù: <code> PE3 PE2 PE1 PE0 +-------+-------+-------+-------+ Reg0 | D 7:0 | C 7:0 | B 7:0 | A 7:0 | +-------+-------+-------+-------+ Reg1 | H 7:0 | G 7:0 | F 7:0 | E 7:0 | +-------+-------+-------+-------+ </code> ÀÌ°ÍÀº ´Ü¼øÇÏ°Ô °¢ ·¹Áö½ºÅÍ°¡ ±âº»ÀûÀ¸·Î 4°³ÀÇ µ¶¸³ 8-ºñÆ® Á¤¼ö ¼öÄ¡µéÀÇ º¤ÅÍ·Î º¼ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¶Ç´Â Ç׸ñ 0 (PE0)¸¦ ó¸®ÇÏ´Â Reg0¿Í Reg1¿¡ ÀÖ´Â ¼öÄ¡µé·Î½á <tt>A</tt>¿Í <tt>E</tt>¸¦, ±×¸®°í PE1ÀÇ ·¹Áö½ºÅ͵鿡 ÀÖ´Â ¼öÄ¡µé·Î½á <tt>B</tt>°ú <tt>F</tt>¸¦, ±×¸®°í °è¼Ó ÀÌ·± ½ÄÀ¸·Î »ý°¢ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¹®¼­ÀÇ ³ª¸ÓÁö ºÎºÐÀº ÀÌ·± Á¤¼ö º¤Å͵鿡 ´ëÇÑ SIMD º´·Ä ¿¬»êÀ» À§ÇÑ ±âº» Ŭ·¡½ºµé°ú À̵éÀÇ ÇÔ¼öµéÀÌ ¾î¶»°Ô ±¸ÇöµÉ ¼ö ÀÖ´Â °¡¿¡ ´ëÇؼ­ ´ë·«ÀûÀ¸·Î ¸®ºäÇÒ °ÍÀÌ´Ù. <sect2>´ÙÇü¼º ¿¬»ê(Polymorphic Operations) <p> ¾î¶² SWAR ¿¬»êµéÀº, ÀÌ ¿¬»êÀÌ ½ÇÁ¦ ÀÌ·± 8-ºñÆ® Çʵåµé¿¡ º´·Ä·Î ¼­·Î µ¶¸³ÀûÀ¸·Î °è»êµÇµµ·Ï ÀǵµµÇ¾ú´Ù´Â »ç½Ç¿¡ ½Å°æ¾²Áö ¾Ê°í¼­ ÀÏ¹Ý 32-ºñÆ® Á¤¼ö ¿¬»êµéÀ» »ç¿ëÇؼ­ ½±°Ô ¼öÇàµÉ ¼ö ÀÖ´Ù. ¿ì¸®´Â ÀÓÀÇÀÇ ÀÌ·± SWAR ¿¬»êµéÀ» <em>´ÙÇü¼º(polymorphic)</em>À̶ó°í ºÎ¸¥´Ù. ¿Ö³Ä¸é ÀÌ ±â´ÉÀÌ Çʵå ŸÀÔµé(Å©±âµé)¿¡ ÀÇÇؼ­ ¿µÇâÀ» ¹ÞÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ÀÓÀÇÀÇ Çʵ尡 ¿µÀÌ ¾Æ´Ñ°¡¸¦ Å×½ºÆ®ÇÏ´Â °ÍÀº ´ÙÇü¼ºÀÌ´Ù. ±×¸®°í ¸ðµç ºñÆ®´ÜÀ§ ³í¸® ¿¬»êµéµµ ±×·¸´Ù. ¿¹¸¦ µé¾î¼­ ÀÏ¹Ý ºñÆ®´ÜÀ§ and ³í¸® ¿¬»ê(CÀÇ <tt>&</tt> ¿¬»êÀÚ)Àº ºñÆ®´ÜÀ§·Î ¼öÇàÇÏ°í ±× Çʵå Å©±â°¡ ¾ó¸¶³ª µÇ´ÂÁö¿¡ ½Å°æ¾²Áö ¾Ê´Â´Ù. À§ ·¹Áö½ºÅ͵éÀÇ ´Ü¼øÇÑ ºñÆ®´ÜÀ§ and ¿¬»ê °á°ú´Â ´ÙÀ½°ú °°Àº °á°ú¸¦ ¸¸µé¾î ³½´Ù: <code> PE3 PE2 PE1 PE0 +---------+---------+---------+---------+ Reg2 | D&ero;H 7:0 | C&ero;G 7:0 | B&ero;F 7:0 | A&ero;E 7:0 | +---------+---------+---------+---------+ </code> ºñÆ®´ÜÀ§ and ¿¬»êÀº Ç×»ó ¿¬»ê´ë»ó ºñÆ® <em>k</em> ¼öÄ¡µé¿¡ ÀÇÇؼ­¸¸ ¿µÇâÀ» ¹Þ´Â °á°ú ºñÆ® <em>k</em>ÀÇ ¼öÄ¡¸¦ °¡Áö±â ¶§¹®¿¡ ¾î¶² Çʵå Å©±â¶óµµ µ¿ÀÏÇÑ ´ÜÀÏ ¸í·É¿¡ ÀÇÇؼ­ Áö¿ø¹Þ´Â´Ù. <sect2>ºÐÇÒµÈ ¿¬»ê(Partitioned Operations) <p> ºÒÇàÇÏ°Ôµµ ¸¹Àº Áß¿äÇÑ SWAR ¿¬»êµéÀÌ ´ÙÇü¼ºÀÌ ¾Æ´Ï´Ù. ´õÇϱâ, »©±â, °öÇϱâ, ³ª´©±â µî°ú °°Àº »çÄ¢¿¬»êµéÀº ¸ðµÎ Çʵåµé°£ÀÇ ÀÚ¸®¿Ã¸²(carry)/ºô·Á¿È(borrow) »óÈ£ÀÛ¿ëÀ» ÇÒ ¼ö¹Û¿¡ ¾ø´Ù. ¿ì¸®´Â ÀÌ·± SWAR ¿¬»êµéÀ» <em>ºÐÇÒµÈ(partitioned)</em> °ÍÀ̶ó°í ºÎ¸¥´Ù. ¿Ö³Ä¸é °¢ ¿¬»êÀÌ ¹Ýµå½Ã ¿¬»ê´ë»óµéÀ» È¿À²ÀûÀ¸·Î ºÐÇÒÇØ¾ß ÇÏ°í Çʵåµé °£ÀÇ »óÈ£ÀÛ¿ëÀ» ¸·¾Æ¾ß Çϱ⠶§¹®ÀÌ´Ù. ±×·¯³ª ÀÌ·± È¿°ú¸¦ ¾ò´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Â ¼¼°¡Áö ¼­·Î ´Ù¸¥ ¹æ¹ýµéÀÌ Á¸ÀçÇÑ´Ù. <sect3>ºÐÇÒµÈ ¸í·É¾î(Partitioned Instructions) <p> ºÐÇÒµÈ ¿¬»êµéÀ» ±¸ÇöÇÏ´Â °¡Àå ¸í¹éÇÑ Á¢±Ù¹ýÀº Çʵåµé °£ÀÇ carry/borrow ³í¸®¸¦ ÀÚ¸£´Â "ºÐÇÒµÈ º´·Ä ¸í·É¾î"¿¡ ´ëÇÑ Çϵå¿þ¾î Áö¿øÀ» Á¦°øÇÏ´Â °ÍÀÌ´Ù. ÀÌ·± Á¢±ÙÀº ÃÖ°íÀÇ ¼º´ÉÀ» ³»Áö¸¸ ÇÁ·Î¼¼¼­ÀÇ ¸í·É ÁýÇÕÀ» º¯°æÇØ¾ß ÇÏ°í ÀϹÝÀûÀ¸·Î Çʵå Å©±â¿¡ ¸¹Àº Á¦ÇѵéÀÌ ÀÖ´Ù(¿¹, 8-ºñÆ® ÇʵåµéÀÌ Áö¿øµÉ ¼ö ÀÖÁö¸¸ 12-ºñÆ® ÇʵåµéÀº ±×·¸Áö ¸øÇÑ °æ¿ì). AMD/Cyrix/Intel MMX, Digital MAX, HP MAX, ±×¸®°í Sun VIS´Â ¸ðµÎ ºÐÇÒ ¸í·ÉµéÀÇ Á¦ÇÑµÈ ¹öÀüµéÀ» ±¸ÇöÇÑ °ÍµéÀÌ´Ù. ºÒÇàÇÏ°Ôµµ ÀÌ·± ¼­·Î ´Ù¸¥ ¸í·É ¼Â È®ÀåµéÀº Áß¿äÇÑ ´Ù¸¥ Á¦¾àµéÀ» °¡Áö±â ¶§¹®¿¡ ±×µé°£¿¡ ¾Ë°í¸®ÁòµéÀÌ ¼­·Î Æ÷ÆÃµÉ ¼ö ¾ø°Ô ¸¸µç´Ù. ¿¹¸¦ µé¾î¼­ ´ÙÀ½°ú °°Àº ºÐÇÒµÈ ¿¬»êÀÇ »ùÇøµÀ» »ý°¢Çغ¸ÀÚ: <code> Instruction AMD/Cyrix/Intel MMX DEC MAX HP MAX Sun VIS +---------------------+---------------------+---------+--------+---------+ | Absolute Difference | | 8 | | 8 | +---------------------+---------------------+---------+--------+---------+ | Merge Maximum | | 8, 16 | | | +---------------------+---------------------+---------+--------+---------+ | Compare | 8, 16, 32 | | | 16, 32 | +---------------------+---------------------+---------+--------+---------+ | Multiply | 16 | | | 8x16 | +---------------------+---------------------+---------+--------+---------+ | Add | 8, 16, 32 | | 16 | 16, 32 | +---------------------+---------------------+---------+--------+---------+ </code> ÀÌ Å×ÀÌºí¿¡¼­ ¼ýÀÚµéÀº °¢ ¿¬»êÀÌ Áö¿øµÇ´Â Çʵå Å©±âµéÀ» ºñÆ® ´ÜÀ§·Î ³ªÅ¸³½ °ÍÀÌ´Ù. ºñ·Ï ÀÌ Å×À̺íÀÌ Á» ´õ ÈǸ¢ÇÑ °ÍµéÀ» Æ÷ÇÔÇÑ ¸¹Àº ¸í·ÉµéÀ» »ý·«ÇÑ °ÍÀ̱â´Â ÇÏÁö¸¸ ¸¹Àº Â÷ÀÌ°¡ ÀÖ´Ù´Â °ÍÀº ºÐ¸íÇÑ »ç½ÇÀÌ´Ù. ÀÌÀÇ Á÷Á¢ÀûÀÎ °á°ú´Â °í-¼öÁØ ¾ð¾îµé(High-Level Languages; HLLs)°¡ ½ÇÁ¦·Î ÇÁ·Î±×·¡¹Ö ¸ðµ¨·Î½á ¾ÆÁÖ ÀûÇÕÇÑ °ÍÀº ¾Æ´Ï´Ù¶ó´Â °Í°ú Æ÷ÆÃÀÌ ÀϹÝÀûÀ¸·Î ¾ÆÁÖ ³ª»Ú´Ù´Â °ÍÀÌ´Ù. <sect3>±³Á¤ Äڵ带 °¡Áö´Â ºÐÇÒµÇÁö ¾ÊÀº ¿¬»ê(Unpartitioned Operations With Correction Code) <p> ºÐÇÒ ¸í·É¾îµéÀ» »ç¿ëÇؼ­ ºÐÇÒ ¿¬»êµéÀ» ±¸ÇöÇÏ´Â °ÍÀº ºÐ¸íÈ÷ È¿À²ÀûÀÏ ¼ö ÀÖÁö¸¸ ÇÊ¿äÇÑ ºÐÇÒ ¿¬»êÀÌ Çϵå¿þ¾î¿¡ ÀÇÇؼ­ Áö¿øµÇÁö ¾ÊÀ¸¸é ¾î¶»°Ô ÇÒ °ÍÀΰ¡? ÇØ´äÀº Çʵ尣 carry/borrowÀ» °¡Áø ¿¬»êµéÀ» ÀÏ¹Ý ¸í·É¾îµéÀ» »ç¿ëÇؼ­ ¼öÇàÇÏ°í ¿øÇÏÁö ¾Ê´Â ÇÊµå »óÈ£ÀÛ¿ëÀ» ±³Á¤ÇÏ´Â °ÍÀÌ´Ù. ÀÌ°ÍÀº ¼øÀüÈ÷ ¼ÒÇÁÆ®¿þ¾î·Î Á¢±ÙÇÏ´Â °ÍÀÌ°í ±³Á¤ÀÛ¾÷Àº ¿À¹öÇìµå¸¦ ÀÏÀ¸Å°Áö¸¸ ¿ÏÀüÈ÷ ÀϹÝÀûÀÎ ÇÊµå ºÐÇÒ·Î Àß ÀÛµ¿ÇÑ´Ù. ÀÌ·± Á¢±Ù¹ýÀº ºÐÇÒ ¸í·É¿¡ ´ëÇÑ Çϵå¿þ¾î Áö¿øÀÇ °¸µéÀ» ä¿ì´Â µ¥ »ç¿ëµÉ ¼ö Àְųª ¾Æ´Ï¸é Çϵå¿þ¾î Áö¿øÀ» ÀüÇô ÇÏÁö ¾Ê´Â Ÿ°Ù ±â°èµé¿¡ ´ëÇؼ­ ¿ÏÀüÇÑ ±â´ÉÀ» Á¦°øÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù´Â Á¡¿¡¼­ ¶ÇÇÑ ¿ÏÀüÈ÷ ÀϹÝÀûÀÌ´Ù. »ç½Ç C¿Í °°Àº ¾ð¾î·Î ÄÚµå ½ÃÄö½ºµéÀ» Ç¥ÇöÇÔÀ¸·Î½á ÀÌ·± Á¢±Ù¹ýÀº SWAR ÇÁ·Î±×·¥µéÀÌ ¿ÏÀüÈ÷ Æ÷Æà °¡´ÉÇÑ °ÍÀ¸·Î ¸¸µç´Ù. ±×·¸´Ù¸é ´ÙÀ½°ú °°Àº Áú¹®ÀÌ ¹Ù·Î »ý±ä´Ù: ºñºÐÇÒ ¿¬»êµéÀ» ±³Á¤ ÄÚµå·Î SWAR ºÐÇÒ ¿¬»êµéÀ» ½Ã¹°·¹À̼ÇÇÏ´Â °ÍÀÌ Á¤È®È÷ ¾ó¸¶³ª ºñÈ¿À²ÀûÀΰ¡? ±Û½ê ÀÌ°ÍÀº È®½ÇÈ÷ $64k ¹®Á¦ÀÌ´Ù... ÇÏÁö¸¸ ¸¹Àº ¿¬»êµéÀÌ ¿¹»óÇÏ´Â °Í¸¸Å­ ¾î·Á¿î °ÍÀº ¾Æ´Ï´Ù. ÀϹÝÀûÀÎ 32-ºñÆ® ¿¬»êµéÀ» »ç¿ëÇؼ­ ³×°³ÀÇ ¼ººÐÀ» °¡Áö´Â 8-ºñÆ® Á¤¼ö º¤ÅÍµé µÎ°³¸¦ ´õÇÏ´Â °Í, <tt>x</tt>+<tt>y</tt>À» »ý°¢Çغ¸ÀÚ. ÀϹÝÀûÀÎ 32-ºñÆ® µ¡¼ÀÀº ½ÇÁ¦·Î Á¤È®ÇÑ °á°ú¸¦ ¸¸µéÁö¸¸ 8-ºñÆ® Çʵåµé Áß Çϳª¶óµµ ´ÙÀ½ Çʵå·Î ij¸®(ÀÚ¸® ¿Ã¸²)¸¦ ¸¸µç´Ù¸é Á¤È®ÇÑ °á°ú¸¦ ¸¸µé¾î³»Áö ¸øÇÑ´Ù. ±×·¡¼­ ¿ì¸®ÀÇ ¸ñÀûÀº ´Ü¼øÇÏ°Ô ±×·± ij¸®°¡ ÀϾÁö ¾Êµµ·Ï º¸ÀåÇÏ´Â °ÍÀÌ´Ù. µÎ°³ÀÇ <em>k</em>-ºñÆ® ÇʵåµéÀ» ´õÇÏ´Â °ÍÀº ¸¹¾Æ¾ß <em>k</em>+1 ºñÆ® °á°ú¸¦ ¸¸µé¾î ³»±â ¶§¹®¿¡ ¿ì¸®´Â °¢ ÇʵåÀÇ msb(most significant bit)¸¦ ´Ü¼øÈ÷ "¸¶½ºÅ· Á¦°Å(masking out)"ÇÔÀ¸·Î½á ¾î¶² ij¸®µµ ¹ß»ýÇÏÁö ¾Êµµ·Ï º¸ÀåÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº <tt>0x7f7f7f7f</tt>·Î °¢ ÇÇ¿¬»êÀÚ¸¦ ºñÆ®´ÜÀ§ and(bitwise anding)ÇÏ°í ³ª¼­ ÀÏ¹Ý 32-ºñÆ® ´õÇϱ⸦ ¼öÇàÇÔÀ¸·Î½á ÀÌ·ç¾îÁø´Ù. <code> t = ((x &ero; 0x7f7f7f7f) + (y &ero; 0x7f7f7f7f)); </code> ÀÌ °á°ú´Â Á¤È®ÇÏ´Ù... °¢ ÇʵåÀÇ msb¸¦ Á¦¿ÜÇÏ°í ¸»ÀÌ´Ù. °¢ Çʵ忡 ´ëÇؼ­ ±³Á¤°ªÀ» °è»êÇغ¸ÀÚ. ÀÌ°ÍÀº, <tt>x</tt>¿Í <tt>y</tt>ÀÇ msbµéÀ» <tt>t</tt>¿¡ ´ëÇؼ­ °è»êµÈ 7-ºñÆ® ij¸® °á°ú¿¡ µÎ °³ÀÇ 1-ºñÆ® ºÐÇÒµÈ µ¡¼ÀÀ» ÇÏ´Â ¹®Á¦¿¡ Áö³ªÁö ¾Ê´Â´Ù. ´ÙÇེ·´°Ôµµ 1-ºñÆ® ºÐÇÒ µ¡¼ÀÀº ÀÏ¹Ý exclusive or ¿¬»êÀ¸·Î ±¸ÇöµÇ¾î ÀÖ´Ù. ±×·¡¼­ ±× °á°ú´Â ´ÙÀ½°ú °°´Ù: <code> (t ^ ((x ^ y) &ero; 0x80808080)) </code> ÁÁ´Ù, ±Û½ê, ÀÌ°ÍÀº ±×·¸°Ô ´Ü¼øÇÑ °ÍÀÌ ¾Æ´Ò ¼ö ÀÖ´Ù. °á±¹ 4°³ÀÇ µ¡¼ÀÀ» À§Çؼ­ 6¹ø ¿¬»êÀ» ¼öÇàÇÑ´Ù. ±×·¯³ª ¿¬»êÀÌ È½¼ö´Â Çʵ尡 ¸î°³Àΰ¡¿¡ µû¶ó ´Ù¸£Áö ¾Ê´Ù´Â °ÍÀ» ÁÖ¸ñÇÏÀÚ. ±×·¡¼­ Á» ´õ ¸¹Àº ÇʵåµéÀÌ ÀÖÀ¸¸é ¿ì¸®´Â ¼Óµµ Çâ»óÀ» ¾òÀ» ¼ö ÀÖ´Ù. »ç½Ç ÇʵåµéÀÌ ´ÜÀÏ ¿¬»ê(Á¤¼ö º¤ÅÍ)À¸·Î ·ÎµåµÇ°í ÀúÀåµÇ¾ú±â ¶§¹®¿¡, ¿ì¸®´Â ¾î¶² ½ÄÀ¸·Îµç ´Ü¼øÇÏ°Ô ¼Óµµ Çâ»óÇÒ ¼ö ÀÖÀ¸¸ç, ·¹Áö½ºÅÍ °¡¿ë¼ºÀº °³¼±µÉ ¼ö ÀÖ°í, µ¿Àû ÄÚµå ½ºÄÉÁÙ¸µ Á¾¼Ó¼ºÀÌ ´õ Àû´Ù(ºÎºÐ ¿öµå ÂüÁ¶¸¦ ÇÇÇÒ ¼ö Àֱ⠶§¹®¿¡). <sect3>ÇÊµå ¼öÄ¡ Á¦¾î(Controlling Field Values) <p> ºÎºÐ ¿¬»ê ±¸Çö¿¡ ´ëÇÑ ´Ù¸¥ µÎ°¡Áö Á¢±Ù¹ý µÑ ´Ù ·¹Áö½ºÅ͵鿡 ´ëÇÑ °ø°£ È°¿ëÀ» ÃÖ´ëÈ­ÇÏ·Á°í ÇÏ´Â ¹Ý¸é¿¡, ´ë½Å ÇÊµå °ªµéÀ» Á¦¾îÇؼ­ ³»ºÎ-Çʵå ij¸®/ºô¸² À̺¥Æ®µéÀÌ Àý´ë ÀϾÁö ¾Êµµ·Ï ÇÏ´Â °ÍÀÌ Á» ´õ °è»ê Ãø¸é¿¡¼± È¿À²ÀûÀÌ´Ù. ¿¹¸¦ µé¾î¼­ ¿ì¸®°¡ ´õÇØÁø ¸ðµç ÇÊµå °ªµéÀÌ ¾î¶² ÇÊµå ¿À¹öÇ÷ο쵵 ÀϾÁö ¾Ê´Â´Ù´Â °ÍÀ» ¾È´Ù¸é ºÎºÐ ´õÇϱ⠿¬»êÀº ÀϹÝÀûÀÎ ´õÇϱ⠸í·ÉÀ» »ç¿ëÇؼ­ ±¸ÇöµÉ ¼ö ÀÖ´Ù; »ç½Ç ÀÌ·± Á¦ÇÑÀÌ ÁÖ¾îÁö¸é ÀϹÝÀûÀÎ ´õÇϱ⠿¬»êÀÌ ´ÙÇü¼º(¿ªÀÚÁÖ: Çʵå Å©±â¿¡ µ¶¸³ÀÌ´Ù)ÀÎ °Íó·³ º¸ÀÌ°í ±³Á¤ ÄÚµå ¾øÀÌ ¾î¶² Çʵå Å©±âµé¿¡µµ »ç¿ë °¡´ÉÇÏ´Ù. ±×·¡¼­ ¾î¶»°Ô ÇÊµå °ªµéÀÌ Ä³¸®/ºô¸² À̺¥Æ®¸¦ ¹ß»ý½ÃÅ°Áö ¾Êµµ·Ï º¸ÀåÇÒ ¼ö Àִ°¡°¡ °ü°ÇÀÌ µÈ´Ù. ÀÌ·± Ư¼ºÀ» º¸ÀåÇÏ´Â ÇÑ °¡Áö ¹æ¹ýÀº ÇÊµå °ªµéÀÇ ¹üÀ§¸¦ Á¦ÇÑÇÒ ¼ö ÀÖ´Â ºÎºÐÈ­µÈ ¸í·ÉµéÀ» ±¸ÇöÇÏ´Â °ÍÀÌ´Ù. Digital MAX º¤ÅÍ minimum°ú maximum ¸í·ÉµéÀº ³»ºÎ-Çʵå ij¸®/ºô¸²À» ÇÇÇϱâ À§Çؼ­ ÇÊµå °ªµéÀ» Ŭ¸³ÇÎ(¿ªÀÚÁÖ: ÀÚ¸§)ÇÏ´Â Çϵå¿þ¾îÀûÀÎ Áö¿øÀÌ´Ù. ±×·¯³ª ¿ì¸®°¡ ÇÊµå °ªµéÀÇ ¹üÀ§¸¦ È¿°úÀûÀ¸·Î Á¦ÇÑÇÒ ¼ö ¾ø´Â ºÎºÐÈ­µÈ ¸í·ÉµéÀ» °¡ÁöÁö ¸øÇÑ´Ù°í °¡Á¤ÇÏÀÚ... °©½Î°Ô ij¸®/ºô¸² À̺¥Æ®µéÀÌ ÀÎÁ¢ Çʵåµé »çÀÌ¿¡ °£¼·ÇÏÁö ¾Ê´Â´Ù°í º¸ÀåÇϵµ·Ï ÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ Á¶°ÇÀÌ Àִ°¡? ÀÌÀÇ ÇØ´äÀº »çÄ¢¿¬»ê Ư¼ºÀÇ ºÐ¼®¿¡ ÀÖ´Ù. µÎ <em>k</em>-ºñÆ® ¼ýÀÚµéÀ» ´õÇÏ´Â °ÍÀº ¸¹¾Æ¾ß <em>k</em>+1 ºñÆ®·Î µÈ ¼ýÀÚ¸¦ »ý¼ºÇÑ´Ù; ±×·¡¼­ <em>k</em>+1 ºñÆ®´Â ÀÏ¹Ý ¸í·ÉµéÀ» »ç¿ëÇÔ¿¡µµ ºÒ±¸ÇÏ°í ±×·± ¿¬»êÀ» ¾ÈÀüÇÏ°Ô ´ãÀ» ¼ö ÀÖ´Ù. ±×·¡¼­ ¿ì¸®ÀÇ ÀÌÀü ¿¹Á¦¾È¿¡¼­ 8-ºñÆ® ÇʵåµéÀÌ ÀÌÁ¦´Â 1-ºñÆ®ÀÇ "ij¸®/ºô¸² ¿ÏÃæ±â(spacers)"¸¦ °¡Áö´Â 7-ºñÆ® ÇʵåµéÀ̶ó°í °¡Á¤ÇÏÀÚ: <code> PE3 PE2 PE1 PE0 +----+-------+----+-------+----+-------+----+-------+ Reg0 | D' | D 6:0 | C' | C 6:0 | B' | B 6:0 | A' | A 6:0 | +----+-------+----+-------+----+-------+----+-------+ </code> 7-ºñÆ® µ¡¼ÀÀÇ º¤ÅÍ´Â ´ÙÀ½°ú °°ÀÌ ¼öÇàµÈ´Ù. ¾î¶² ºÎºÐ ¿¬»êÀ» ½ÃÀÛÇϱâ ÀÌÀü¿¡ ¸ðµç ij¸® ¿ÏÃæ ºñÆ®µé(<tt>A'</tt>, <tt>B'</tt>, <tt>C'</tt>, ±×¸®°í <tt>D'</tt>)°¡ 0À̶ó´Â °ªÀ» °®´Â´Ù°í °¡Á¤ÇÏÀÚ. ´Ü¼øÇÏ°Ô ÀÏ¹Ý µ¡¼À ¿¬»êÀ» ¼öÇàÇÔÀ¸·Î½á ¸ðµç ÇʵåµéÀº Á¤È®ÇÑ 7-ºñÆ® °ªµéÀ» ¾ò´Â´Ù; ±×·¯³ª ¾î¶² ¿ÏÃæ ºñÆ® °ªµéÀº ÀÌÁ¦ 1ÀÌ µÉ ¼ö ÀÖ´Ù. ¿ì¸®´Â ÀÌ°ÍÀ» ÀüÅëÀûÀÎ ¿¬»êÀÎ ¿ÏÃæ ºñÆ®µé¿¡ ´ëÇÑ ¸¶½ºÅ©-Á¦°Å¸¦ Çѹø ´õ ¼öÇàÇÔÀ¸·Î½á ±³Á¤ÇÒ ¼ö ÀÖ´Ù. ¿ì¸®ÀÇ 7-ºñÆ® Á¤¼ö º¤ÅÍ µ¡¼À, <tt>x</tt>+<tt>y</tt>Àº ±×·¡¼­ ´ÙÀ½°ú °°´Ù: <code> ((x + y) &ero; 0x7f7f7f7f) </code> ÀÌ°ÍÀº ³×°³ÀÇ µ¡¼ÀÀ» µÎ ¸í·É¾î·Î ÁÙÀÎ °ÍÀÌ´Ù. ±×·¡¼­ ÀÌ°ÍÀº ÁÁÀº ¼Óµµ Çâ»óÀ» ºÐ¸íÈ÷ °¡Á®¿Ã °ÍÀÌ´Ù. ÁÖÀÇ ±íÀº µ¶ÀÚ(sharp reader)´Â ¿ÏÃæ ºñÆ®µéÀ» 0À¸·Î ¼³Á¤ÇÏ´Â °ÍÀº »©±â ¿¬»ê¿¡¼­ ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ´«Ä¡Ã«À» °ÍÀÌ´Ù. ±×·¯³ª ±× ±³Á¤ ¹æ¹ýÀÌ ¾ÆÁÖ ´Ü¼øÇÏ´Ù. <tt>x</tt>-<tt>y</tt>¸¦ °è»êÇϱâ À§Çؼ­ ¿ì¸®´Â <tt>x</tt>¿¡ ÀÖ´Â ¿ÏÃæ ºñÆ®µéÀº ¸ðµÎ 1ÀÌ°í <tt>y</tt>¿¡ ÀÖ´Â ¿ÏÃæ ºñÆ®µéÀº ¸ðµÎ 0À̶ó´Â Ãʱâ Á¶°ÇÀ» È®½ÇÇÏ°Ô ÇÑ´Ù. °¡Àå ³ª»Û °æ¿ì¿¡ ¿ì¸®´Â ´ÙÀ½°ú °°Àº °ÍÀ» ¾òÀ» °ÍÀÌ´Ù: <code> (((x | 0x80808080) - y) &ero; 0x7f7f7f7f) </code> ±×·¯³ª Ãß°¡ÀÇ ºñÆ®º° or ¿¬»êÀº Á¾Á¾, <tt>x</tt>ÀÇ °ªÀ» »ý¼ºÇÏ´Â ¿¬»êÀÌ <tt>& 0x7f7f7f7f</tt> ´ë½Å¿¡ <tt>| 0x80808080</tt>À» ¸¶Áö¸· ½ºÅÜÀ¸·Î½á »ç¿ëÇÑ´Ù´Â °ÍÀ» È®½ÇÇÏ°Ô ÇÔÀ¸·Î½á, ÃÖÀûÈ­µÉ ¼ö ÀÖ´Ù. ¾î¶² ¹æ¹ýÀÌ SWAR ºÎºÐÈ­µÈ ¿¬»êµé¿¡ ´ëÇؼ­ »ç¿ëµÇ¾î¾ß ÇÒ °ÍÀΰ¡? ±× ´äÀº ´Ü¼øÇÏ°Ôµµ "°¡Àå ºü¸¥ ¼Óµµ(Çâ»ó)À» ³»´Â °ÍÀÌ¸é ¹«¾ùÀÌµç µÈ´Ù"´Â °ÍÀÌ´Ù. Èï¹Ì·Ó°Ôµµ »ç¿ëÇϱâ À§ÇÑ ÀÌ»óÀûÀÎ ¹æ¹ýÀº µ¿ÀÏÇÑ ±â°èÀ§¿¡¼­ µ¿ÀÛÇÏ´Â µ¿ÀÏÇÑ ÇÁ·Î±×·¥ ³»¿¡¼­(µµ) ¼­·Î ´Ù¸¥ Çʵå Å©±âµé¿¡ ´ëÇؼ­ ¼­·Î ´Ù¸¦ ¼ö ÀÖ´Ù. <sect2>Åë½Å°ú ŸÀÔ º¯È¯ ¿¬»ê(Communication & Type Conversion Operations) <p> ºñ·Ï, À̹ÌÁö Çȼ¿µé¿¡ ´ëÇÑ ¸¹Àº ¿¬»êµéÀ» Æ÷ÇÔÇؼ­, ¾î¶² º´·Ä °è»êÀº ÇÑ º¤ÅÍÀÇ <em>i</em>¹ø° °ªÀº ÇÇ¿¬»êÀÚ º¤Å͵éÀÇ <em>i</em>¹ø° À§Ä¡¿¡ ³ªÅ¸³ª´Â °ªµé¸¸ÀÇ ÇÔ¼öÀ̶ó´Â ¼Ó¼ºÀ» °®°í ÀÖÁö¸¸, ÀÌ°ÍÀº ÀϹÝÀûÀ¸·Î ±×·± °æ¿ì°¡ ¾Æ´Ï´Ù. ¿¹¸¦ µé¾î¼­ ºÎµå·´°Ô Çϱâ(smoothing)¿Í °°Àº Çȼ¿ ¿¬»êµéÁ¶Â÷ ÀÎÁ¢ Çȼ¿µéÀ» ÇÇ¿¬»êÀÚµé·Î ¿ä±¸ÇÏ°í FFTµé°ú °°Àº º¯È¯µéµµ Á» ´õ º¹ÀâÇÑ(´ú Áö¿ªÈ­µÈ) Åë½Å ÆÐÅϵéÀ» ¿ä±¸ÇÑ´Ù. SWAR¸¦ À§ÇÑ, ºÎºÐÈ­µÇÁö ¾ÊÀº ½¬ÇÁÆ® ¿¬»êµéÀ» »ç¿ëÇÑ, 1-Â÷¿ø °¡Àå ±ÙÁ¢ÇÑ ÀÌ¿ô Åë½ÅÀ» È¿À²ÀûÀ¸·Î ±¸ÇöÇÏ´Â °ÍÀº ¾î·Á¿î ÀÏÀÌ ¾Æ´Ï´Ù. ¿¹¸¦ µé¾î¼­, <tt>PE</tt><em>i</em>·ÎºÎÅÍ <tt>PE</tt>(<em>i</em>+1)·Î °ªÀ» À̵¿Çϱâ À§Çؼ­ ´Ü¼øÇÑ ½¬ÇÁÆ® ¿¬»êÀ¸·Îµµ ÃæºÐÇÏ´Ù. ÇʵåµéÀÌ 8-ºñÆ®ÀÇ ±æÀ̸¦ °¡Áø´Ù¸é ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ °ÍÀÌ´Ù: <code> (x << 8) </code> ±×·¯³ª ÀÌ°ÍÀº Ç×»ó ±×·¸°Ô ´Ü¼øÇÏÁö ¾Ê´Ù. ¿¹¸¦ µé¾î¼­ <tt>PE</tt><em>i</em>·ÎºÎÅÍ <tt>PE</tt>(<em>i</em>-1)·Î °ªÀ» À̵¿ÇÏ·Á¸é, ´Ü¼øÇÑ ½¬ÇÁÆ® ¿¬»êÀ¸·Îµµ ÃæºÐÇÏ´Ù. ±×·¯³ª C ¾ð¾î´Â ¿À¸¥ÂÊ ½¬ÇÁÆ®°¡ ºÎÈ£ ºñÆ®¸¦ º¸Á¸ÇÏ´ÂÁö ¾ÊÇÏ´ÂÁö¸¦ ÁöÁ¤ÇÏÁö ¾Ê°í ¾î¶² ±â°èµéÀº ºÎÈ£ ºÙÀº ¿À¸¥ÂÊ ½¬ÇÁÆ®¸¸À» Áö¿øÇÑ´Ù. ±×·¡¼­ ÀϹÝÀûÀÎ °æ¿ì ¿ì¸®´Â ¹Ýµå½Ã ¸í½ÃÀûÀ¸·Î, ÀáÀçÀûÀÎ º¹»çµÈ(replicated) ºÎÈ£ ºñÆ®µéÀ» 0À¸·Î ¸¸µé¾î¾ß ÇÑ´Ù: <code> ((x >> 8) &ero; 0x00ffffff) </code> "wrap-around Ä¿³Ø¼Çµé"À» ´õÇÏ´Â °Íµµ ¶ÇÇÑ ºÎºÐÈ­µÇÁö ¾ÊÀº ½¬ÇÁÆ®¸¦ »ç¿ëÇؼ­ »ó´çÈ÷ È¿À²ÀûÀÌ´Ù. ¿¹¸¦ µé¾î¼­ <tt>PE</tt><em>i</em>·ÎºÎÅÍ °ªÀ» <tt>PE</tt>(<em>i</em>+1)·Î wraparound¸¦ ÀÌ¿ëÇؼ­ ¿Å±â·Á¸é: <code> ((x << 8) | ((x >> 24) &ero; 0x000000ff)) </code> ½ÇÁúÀûÀÎ ¹®Á¦´Â Á» ´õ ÀϹÝÀûÀÎ Åë½Å ÆÐÅÏÀÌ ¹Ýµå½Ã ±¸ÇöµÇ¾î¾ß ÇÑ´À °æ¿ì¿¡ ¹ß»ýÇÑ´Ù. ´ÜÁö HP MAX ¸í·É¾î ÁýÇÕ¸¸ÀÌ ´ÜÀÏ ¸í·ÉÀ¸·Î ÇʵåµéÀÇ ÀÓÀÇ Àç¹èÄ¡¸¦ Áö¿øÇÑ´Ù. ÀÌ°ÍÀº <tt>Permute</tt>¶ó°í ºÒ¸°´Ù. ÀÌ <tt>Permute</tt> ¸í·ÉÀº ½ÇÁ¦·Î À̸§ÀÌ À߸ø Áö¾îÁ³´Ù; ÀÌ°ÍÀº ÇʵåµéÀÇ ÀÓÀÇÀÇ permutation<footnote>¿ªÀÚÁÖ: ¼ø¿­À̶ó°í ¹ø¿ªÇÏÁö¸¸ ¼öÇп¡¼­´Â ÀÏÁ¤ °³¼öÀÇ °´Ã¼µéÀÇ ÀÚ¸® À̵¿À» ¸»ÇÑ´Ù</footnote>¸¸ ¼öÇàÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ¹Ýº¹(repetition)µµ Çã¿ëÇÑ´Ù. °£´ÜÈ÷ ¸»Çؼ­ ÀÌ°ÍÀº ÀÓÀÇÀÇ <tt>x[y]</tt> ¿¬»êÀ» ¼öÇàÇÑ´Ù. ºÒÇàÇÏ°Ôµµ <tt>x[y]</tt>´Â ±×·± ¸í·É¾øÀÌ ±¸ÇöÇϱⰡ ¾ÆÁÖ ¾î·Æ´Ù. ÄÚµå ½ÃÄö½º´Â ÀϹÝÀûÀ¸·Î ±æ¸é¼­µµ ºñÈ¿À²ÀûÀÌ´Ù; »ç½Ç ÀÌ°ÍÀº ¼øÂ÷ÀûÀÎ ÄÚµåÀÌ´Ù. ÀÌ°ÍÀº ¾ÆÁÖ ½Ç¸Á½º·¯¿î °ÍÀÌ´Ù. MasPar MP1/MP2¿Í Thinking Machines CM1/CM2/CM200 SIMD ½´ÆÛÄÄÇ»ÅÍ¿¡¼­ÀÇ <tt>x[y]</tt>ÀÇ »ó´ëÀûÀ¸·Î ³ôÀº ¿¬»ê ¼Óµµ´Â ÀÌ·± ±â°èµéÀÇ ¼º´ÉÀÌ ÁÁ¾Ò´ø ÁÖ¿ä ÀÌÀ¯µé ÁßÀÇ ÇϳªÀ̾ú´Ù. ±×·¯³ª <tt>x[y]</tt>´Â Ç×»ó °¡Àå ±ÙÁ¢ÇÑ ÀÌ¿ô Åë½Åº¸´Ùµµ, ½ÉÁö¾î ±×·± ½´ÆÛÄÄÇ»Å͵鿡¼­Á¶Â÷, ´õ ´À¸®±â ¶§¹®¿¡ ¸¹Àº ¾Ë°í¸®ÁòµéÀÌ <tt>x[y]</tt> ¿¬»êµé¿¡ ´ëÇÑ ¼ö¿ä¸¦ ÃÖ¼ÒÈ­Çϱâ À§Çؼ­ °í¾ÈµÇ¾î ¿Ô¾ú´Ù. °£´ÜÇÏ°Ô ¸»Çؼ­ Çϵå¿þ¾î Áö¿ø¾øÀÌ ÀÌ°ÍÀº <tt>x[y]</tt>°¡ ÇÕ¹ýÀûÀÌÁö ¾ÊÀº °Íó·³ ¶Ç´Â Àû¾îµµ ½Ñ °ÍÀÌ ¾Æ´Ñ°Íó·³ SWAR ¾Ë°í¸®ÁòµéÀ» °³¹ßÇÏ´Â °ÍÀÌ °¡Àå ÁÁÀ» °ÍÀÌ´Ù. <sect2>¼øȯ ¿¬»ê(Recurrence Operations) (Ãà¼Ò, ½ºÄµ µî) <p> ¼øȯÀ̶õ °è»êµÇ´Â °ªµé°£ÀÇ ¿Ü¸é»ó ¼øÂ÷ÀûÀÎ °ü°è°¡ ÀÖ´Â °è»êÀ» ¸»ÇÑ´Ù. ±×·¯³ª ÀÌ·± ¼øȯÀÌ °áÇÕÀûÀÎ ¿¬»êµéÀ» Æ÷ÇÔÇÑ´Ù¸é ¼¼°³ÀÇ ±¸Á¶È­µÈ º´·Ä ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿© ±× °è»êÀ» ÀçÄÚµùÇÏ´Â °ÍÀÌ °¡´ÉÇÒ ¼ö ÀÖ´Ù. º´·ÄÈ­°¡ °¡´ÉÇÑ ¼øȯ(recurrence)ÀÇ ´ëºÎºÐÀÇ ÀϹÝÀûÀΠŸÀÔÀº ¾Æ¸¶µµ °áÇÕ Ãà¼Ò(associative reduction)À¸·Î ¾Ë·ÁÁø Ŭ·¡½ºÀÏ °ÍÀÌ´Ù. ¿¹¸¦ µé¾î¼­ ¾î¶² º¤ÅÍ °ªµéÀÇ µ¡¼ÀÀ» °è»êÇϱâ À§Çؼ­ ´ÙÀ½°ú °°Àº ¿ÏÀüÈ÷ ¼øÂ÷ÀûÀÎ C Äڵ带 ÀÛ¼ºÇÏ´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù: <code> t = 0; for (i=0; i<MAX; ++i) t += x[i]; </code> ±×·¯³ª, ÀÌ·± µ¡¼ÀÀÇ ¼ø¼­´Â ´Ù¼ö º°·Î Áß¿äÇÏÁö ¾Ê´Ù. ºÎµ¿ ¼Ò¼ýÁ¡°ú ±ØÇÑ(saturation) ¼öÇÐÀº µ¡¼ÀÀÇ ¼ø¼­°¡ ¹Ù²î¸é ´Ù¸¥ ´äµéÀ» ³¾ ¼ö ÀÖÁö¸¸ ÀϹÝÀûÀÎ wrap-around Á¤¼ö µ¡¼ÀµéÀº µ¡¼ÀÀÇ ¼ø¼­¿¡ °ü°è¾øÀÌ µ¿ÀÏÇÑ °á°úµéÀ» ³¾ °ÍÀÌ´Ù. ±×·¡¼­ ¿ì¸®´Â ÀÌ·± ½ÃÄö½º¸¦, ù¹ø° µÎ °ªµé ½ÖµéÀ» ´õÇÏ°í, ±×´ÙÀ½¿¡ ÀÌ·± ºÎºÐÇÕµéÀ» ´õÇÏ°í ÀÌ·±½ÄÀ¸·Î ´ÜÀÏ ¸¶Áö¸· µ¡¼ÀÀÌ ³ª¿Ã ¶§±îÁö °è¼ÓÇÏ´Â, ¼¼°³ÀÇ-±¸Á¶È­µÈ º´·Ä µ¡¼ÀÀ¸·Î ÀçÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ³×°³ÀÇ 8-ºñÆ® °ªµéÀÇ º¤ÅÍ¿¡ ´ëÇؼ­ µÎ µ¡¼À ´Ü°èµéÀÌ ÇÊ¿äÇÏ´Ù; ù¹ø° ´Ü°è´Â µÎ°³ÀÇ 8-ºñÆ® µ¡¼ÀÀ» ¼öÇàÇÏ°í, ±×´ÙÀ½ µÎ°³ÀÇ 16-ºñÆ® °á°ú ÇʵåµéÀ» »ý¼ºÇÑ´Ù(°¢°¢Àº 9-ºñÆ® °á°ú¸¦ ´ã°í ÀÖ´Ù): <code> t = ((x &ero; 0x00ff00ff) + ((x >> 8) &ero; 0x00ff00ff)); </code> µÎ¹ø° ½ºÅÜÀº ÀÌ·± µÎ°³ÀÇ 9-ºñÆ® °ªµéÀ» 16-ºñÆ® Çʵåµé¾È¿¡¼­, ´ÜÀÏ 10-ºñÆ® °á°ú¸¦ ¸¸µé±â À§ÇØ, ´õÇÑ´Ù: <code> ((t + (t >> 16)) &ero; 0x000003ff) </code> ½ÇÁ¦, µÎ¹ø° ½ºÅÜÀº µÎ°³ÀÇ 16-ºñÆ® ÇÊµå µ¡¼ÀµéÀ» ¼öÇàÇÑ´Ù... ±×·¯³ª ¸Ó¸® 16-ºñÆ® µ¡¼ÀÀº Àǹ̰¡ ¾ø´Ù. ÀÌ°ÍÀÌ ¹Ù·Î ¿Ö °á°ú°¡ ´ÜÀÏ 10-ºñÆ® °á°ú °ª¿¡ ´ëÇؼ­ ¸¶½ºÅ·µÇ´Â°¡¿¡ ´ëÇÑ ÀÌÀ¯ÀÌ´Ù. "º´·Ä Á¢µÎ¾î(parallel prefix)" ¿¬»êÀ¸·Î ¾Ë·ÁÁø ½ºÄµÀº ´Ù¼Ò È¿À²ÀûÀ¸·Î ±¸ÇöÇϱⰡ ´õ ¾î·Æ´Ù. ÀÌ°ÍÀº ¿Ö³Ä¸é, Ãà¼Ò(reduction)°ú ´Ù¸£°Ô, ½ºÄµÀÌ ºÎºÐÀûÀÎ(partitioned) °á°ú¸¦ ³»±â ¶§¹®ÀÌ´Ù. ÀÌ·± ÀÌÀ¯·Î ½ºÄµÀº ¾ÆÁÖ ¸í¹éÇÑ, ºÎºÐÀûÀÎ ¿¬»êµéÀÇ ½ÃÄö½º¸¦ »ç¿ëÇؼ­ ±¸ÇöµÉ ¼ö ÀÖ´Ù. <!-- ------------------------------------------------------------- --> <sect1>¸®´ª½º¿¡¼­ÀÇ MMX SWAR <!-- ------------------------------------------------------------- --> <p> ¸®´ª½ºÀÌ °æ¿ì IA32 ÇÁ·Î¼¼¼­µéÀÌ ¿ì¸®ÀÇ ÁÖ¿ä °ü½É»çÀÌ´Ù. AMD, Cyrix, ±×¸®°í Intel ¸ðµÎ µ¿ÀÏÇÑ MMX ¸í·É¾îµéÀ» ±¸ÇöÇÑ´Ù°í ÇÏ´Â °ÍÀº ±Â´º½ºÀÌ´Ù. ±×·¯³ª MMX ¼º´ÉÀº ¼­·Î ´Ù¸£´Ù; ¿¹¸¦ µé¾î¼­ K6´Â MMX ÆÄÀÌÇÁ¶óÀÎÀ» ´ÜÁö Çϳª¸¸ °¡Áø´Ù - (ÀÌ¿¡ ¹ÝÇؼ­)Pentium with MMX´Â µÎ°³¸¦ °¡Áø´Ù. IntelÀÌ ¾ÆÁ÷µµ ÀÌ·± ¸ÛûÇÑ MMX ±¤°í¸¦ °è¼ÓÇÏ°í ÀÖ´Ù´Â °ÍÀÌ À¯ÀÏÇÑ ¹èµå´º½ºÀÌ´Ù. ;-) SWAR¸¦ À§ÇÏ¿© MMX¸¦ »ç¿ëÇÏ´Â µ¥´Â ½ÇÁ¦ ´ÙÀ½°ú °°Àº ¼¼°¡Áö Á¢±Ù¹ýÀÌ ÀÖ´Ù: <enum> <item>MMX ¶óÀ̺귯¸® ·çƾµéÀ» »ç¿ëÇÏ´Â °Í. Ưº°È÷ IntelÀº ¸î°¡Áö "¼º´É ¶óÀ̺귯¸®µéÀ»(performance libraries)", <url url="http://developer.intel.com/drg/tools/ad.htm"> °³¹ßÇß´Ù. ÀÌ°ÍÀº ÀÏ¹Ý ¸ÖƼ¹Ìµð¾î ÀÛ¾÷µé¿¡ ´ëÇؼ­ ¼ÕÀ¸·Î-ÃÖÀûÈ­µÈ ´Ù¾çÇÑ ·çƾµéÀ» Á¦°øÇÑ´Ù. ÀûÀº ³ë·ÂÀ¸·Î ¸¹Àº ºñ-¸ÖƼ¹Ìµð¾î ¾Ë°í¸®ÁòµéÀÌ ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ-ÁýÁß Æ÷¼ÇµéÀÇ ÀϺΰ¡ ÀÌ·± ¶óÀ̺귯¸® ·çƾµéÀ» Çϳª ¶Ç´Â ±×ÀÌ»ó »ç¿ëÇؼ­ ±¸ÇöµÉ¼ö ÀÖµµ·Ï ÀçÀÛ¾÷µÉ ¼ö ÀÖ´Ù. ÀÌ·± ¶óÀ̺귯¸®µéÀº ÇöÀç ¸®´ª½º¿¡ ´ëÇؼ­ »ç¿ëºÒ°¡´ÉÀÌÁö¸¸ Æ÷Æà °¡´ÉÇÒ ¼ö ÀÖ´Ù. <item>MMX ¸í·É¾îµéÀ» Á÷Á¢ »ç¿ëÇÏ´Â °Í. ÀÌ°ÍÀº ´Ù¼Ò µÎ°¡Áö Á¡µé¿¡ ÀÇÇؼ­ º¹ÀâÇÏ´Ù. ù¹ø° ¹®Á¦´Â MMX°¡ ÇÁ·Î¼¼¼­¿¡¼­ »ç¿ë°¡´ÉÇÏÁö ¾ÊÀ» ¼ö À־ ´ëü ±¸Çö¹°ÀÌ ¹Ýµå½Ã Á¦°øµÇ¾î¾ß ÇÒ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. µÎ¹ø° ¹®Á¦´Â ¸®´ª½º¿¡¼­ ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â IA32 ¾î¼Àºí·¯°¡ ÇöÀç MMX ¸í·É¾îµéÀ» ÀÌÇØÇÏÁö ¸øÇÑ´Ù´Â °ÍÀÌ´Ù. <item>ÀûÀýÇÑ MMX ¸í·É¾îµéÀ» Á÷Á¢ »ý¼ºÇÒ ¼ö ÀÖ´Â °í-¼öÁØ ¾ð¾î³ª ¸ðµâ ÄÄÆÄÀÏ·¯(module compiler)¸¦ »ç¿ëÇÏ´Â °Í. ±×·± ÅøµéÀº ÇöÀç °³¹ß Áß¿¡ ÀÖÁö¸¸ ¾î¶² °Íµµ ¾ÆÁ÷ ¸®´ª½º¿¡¼­ ¿ÏÀüÇÑ ±â´ÉÀ» °¡Áø °ÍÀÌ ¾ø´Ù. ¿¹¸¦ µé¾î¼­ ÆÛµà ´ëÇб³ (<url url="http://dynamo.ecn.purdue.edu/~hankd/SWAR/">)¿¡¼­ ¿ì¸®´Â ÇöÀç ¸í½ÃÀûÀ¸·Î º´·Ä C ¹æ¾ðÀ¸·Î ÀÛ¼ºµÈ ÇÔ¼öµéÀ» ÃëÇؼ­ C ÇÔ¼öµé·Î °¡´ÉÇÑ SWAR ¸ðµâµéÀ» »ý¼ºÇÒ ÄÄÆÄÀÏ·¯¸¦ °³¹ßÇÏ°í ÀÖÁö¸¸, ¾ÆÁ÷ MMX¸¦ Æ÷ÇÔÇؼ­ SWAR Áö¿øÀÌ °¡´ÉÇÑ °ÍÀÌ¸é ¹«¾ùÀÌµç »ç¿ëÇÑ´Ù. ù¹ø° ÇÁ·ÎÅäŸÀÔ ¸ðµâ ÄÄÆÄÀÏ·¯´Â 1996³â °¡À»¿¡ ¸¸µé¾îÁ³´Ù. ±×·¯³ª ÀÌ ±â¼úÀ» »ç¿ë°¡´ÉÇÑ »óűîÁö ¸¸µå´Â °ÍÀº óÀ½¿¡ ¿¹»óÇÑ °Íº¸´Ù ´õ ¿À·¡ °É¸®°í ÀÖ´Ù. </enum> ¿ä¾àÇϸé MMX SWAR´Â ¿©ÀüÈ÷ »ç¿ëÇϱ⿡ ¾î·Æ´Ù. ±×·¯³ª ¿©ºÐÀÇ ³ë·ÂÀ» Á¶±Ý ´õÇϸé À§¿¡¼­ ÁÖ¾îÁø µÎ¹ø° Á¢±Ù¹ýÀº Áö±Ýµµ »ç¿ëµÉ ¼ö ÀÖ´Ù. ´ÙÀ½Àº ±× ±âº»ÀÌ´Ù: <enum> <item>ÇÁ·Î¼¼¼­°¡ MMX¸¦ Áö¿øÇÏÁö ¾ÊÀ¸¸é MMX¸¦ ¾µ ¼ö ¾ø´Ù. ´ÙÀ½ GCC ÄÚµå´Â MMX°¡ ¿©·¯ºÐÀÇ ÇÁ·Î¼¼¼­¿¡¼­ Áö¿øµÇ´ÂÁö ¾ÈµÇ´ÂÁö¸¦ Å×½ºÆ®ÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. Áö¿ø¾ÈµÇ¸é 0ÀÌ ¸®Åϵǰí Áö¿øµÇ¸é 0ÀÌ ¾Æ´Ñ °ªÀÌ ¸®ÅϵȴÙ. <code> inline extern int mmx_init(void) { int mmx_available; __asm__ __volatile__ ( /* Get CPU version information */ "movl $1, %%eax\n\t" "cpuid\n\t" "andl $0x800000, %%edx\n\t" "movl %%edx, %0" : "=q" (mmx_available) : /* no input */ ); return mmx_available; } </code> <item>MMX ·¹Áö½ºÅÍ´Â ±âº»ÀûÀ¸·Î GCC°¡ <tt>unsigned long long</tt>¶ó°í ºÎ¸£´Â °Í Áß Çϳª¸¦ °®°í ÀÖ´Ù. ±×·¡¼­ ÀÌ·± ŸÀÔÀÇ ¸Þ¸ð¸®-±â¹Ý º¯¼öµéÀº ¿©·¯ºÐÀÇ MMX ¸ðµâµé°ú ±×µéÀ» È£ÃâÇÏ´Â C ÇÁ·Î±×·¥µé°£ÀÇ Åë½Å ¸ÞÄ«´ÏÁòÀÌ µÈ´Ù. ¶Ç´Â MMX µ¥ÀÌÅ͸¦ ÀÓÀÇÀÇ 64-ºñÆ® Á¤·ÄµÈ µ¥ÀÌÅÍ ½ºÆ®·°ÃÄ·Î ¼±¾ðÇÒ¼öµµ ÀÖ´Ù (¿©·¯ºÐÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» <tt>unsigned long long</tt> Çʵ带 °¡Áö´Â <tt>union</tt>ÀÇ Å¸ÀÔÀ¸·Î ¼±¾ðÇÔÀ¸·Î½á 64-ºñÆ® Á¤·ÄÀÌ µÇµµ·Ï ÇÏ´Â °ÍÀÌ Æí¸®ÇÏ´Ù). <item>MMX°¡ »ç¿ë°¡´ÉÀ̶ó¸é ¿©·¯ºÐÀº, °¢ ¸í·ÉÀ» ÀÎÄÚµåÇÏ´Â <tt>.byte</tt> ¾î¼Àºí¸® Áö½Ã¾î¸¦ »ç¿ëÇÑ ¿©·¯ºÐÀÇ MMX Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ MMX ¸í·É¾î <tt>PADDB MM0,MM1</tt>´Â ´ÙÀ½°ú °°ÀÌ GCC ÀÎ-¶óÀÎ ¾î¼Àºí¸® ÄÚµå·Î ÀÎÄÚµùµÉ ¼ö ÀÖ´Ù: <code> __asm__ __volatile__ (".byte 0x0f, 0xfc, 0xc1\n\t"); </code> MMX´Â ºÎµ¿ ¼Ò¼ýÁ¡ ¿¬»êµé¿¡ ´ëÇؼ­ »ç¿ëµÇ´Â Çϵå¿þ¾î¿Í µ¿ÀÏÇÑ °ÍµéÀ» »ç¿ëÇÑ´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ. ±×·¡¼­ MMX ÄÚµå¿Í ¼­·Î ¼¯ÀÎ ÄÚµå´Â ºÎµ¿ ¼Ò¼ýÁ¡ ¿¬»êµéÀ» È£ÃâÇؼ­´Â ¾ÈµÈ´Ù. ºÎµ¿ ¼Ò¼ýÁ¡ ½ºÅõµ ¶ÇÇÑ MMX Äڵ带 ½ÇÇàÇϱâ Àü¿¡ ºñ¿öÁ®¾ß ÇÑ´Ù; ºÎµ¿ ¼Ò¼ýÁ¡ ½ºÅÃÀº ÀϹÝÀûÀ¸·Î ºÎµ¿ ¼Ò¼ýÁ¡À» »ç¿ëÇÏÁö ¾Ê´Â C ÇÔ¼öÀÇ ½ÃÀÛÁ¡¿¡¼­ ºñ¿öÁø´Ù. <item>´ÙÀ½°ú °°ÀÌ ÄÚµùµÉ ¼ö ÀÖ´Â °Íó·³, <tt>EMMS</tt> ¸í·ÉÀ» ½ÇÇàÇÔÀ¸·Î½á, MMX Äڵ带 Á¾·áÇÏÀÚ: <code> __asm__ __volatile__ (".byte 0x0f, 0x77\n\t"); </code> </enum> À§ÀÇ °ÍÀÌ ¾ÆÁÖ ÀÌ»óÇÏ°í Á¶ÀâÇÏ°Ô º¸ÀÎ´Ù¸é ±×·¸´Ù. ±×·¯³ª MMX´Â ¿©ÀüÈ÷ ²Ï Àþ´Ù... ÀÌ ¹®¼­ÀÇ ³ªÁß ¹öÀüÀº MMX SWAR¸¦ ÇÁ·Î±×·¥ÇÏ´Â Á» ´õ ³ªÀº ¹æ¹ýµéÀ» Á¦°øÇÒ °ÍÀÌ´Ù. <!--***************************************************************--> <sect>¸®´ª½º°¡ È£½ºÆ®ÇÏ´Â ºÎ¼Ó ÇÁ·Î¼¼¼­(Linux-Hosted Attached Processors) <!--***************************************************************--> <p> ÀÌ·± Á¢±ÙÀº ¿ä»õ º°·Î ÀαⰡ ¾øÁö¸¸ ´Ù¸¥ º´·Ä ó¸® ¹æ¹ýµéÀÌ ¸®´ª½º ½Ã½ºÅÛÀ» È£½ºÆ®¿¡ ºÎ¼Ó º´·É ÄÄÇ»Æà ½Ã½ºÅÛÀ¸·Î »ç¿ëÇÔÀ¸·Î½á ³·Àº ºñ¿ë¿¡ °í¼º´ÉÀ» ¾ò´Â °ÍÀº °ÅÀÇ ºÒ°¡´ÉÇÏ´Ù. ¹®Á¦´Â ¼ÒÇÁÆ®¿þ¾î Áö¿øÀÌ ¾ÆÁÖ ÀÛ´Ù´Â °ÍÀÌ´Ù; ¿©·¯ºÐÀº °ÅÀÇ È¥ÀÚÀÌ´Ù. <!-- ------------------------------------------------------------- --> <sect1>¸®´ª½º PC´Â ÁÁÀº È£½ºÆ®ÀÌ´Ù(A Linux PC Is A Good Host) <!-- ------------------------------------------------------------- --> <p> ÀϹÝÀûÀ¸·Î ºÎ¼Ó º´·Ä ÇÁ·Î¼¼¼­µéÀº ƯÁ¤ ŸÀÔÀÇ ±â´ÉµéÀ» ¼öÇàÇÏ´Â µ¥ Àü¹®È­µÇ´Â °æÇâÀÌ ÀÖ´Ù. ¿©·¯ºÐÀÌ ¾î¼¸é È¥ÀÚÀÏ·±Áö ¸ð¸¥´Ù´Â »ç½Ç¿¡ ±âÁ×±â Àü¿¡ ´ÙÀ½°ú °°Àº °ÍÀ» ÀÌÇØÇÏ´Â °ÍÀº À¯¿ëÇÏ´Ù. Áï, ¸®´ª½º PC°¡ ÀûÀýÇÏ°Ô Æ¯Á¤ ½Ã½ºÅÛÀ» È£½ºÆ®Çϵµ·Ï ÇÏ´Â °ÍÀº ¾î·Á¿ï ¼ö ÀÖÀ»Áö¶óµµ ¸®´ª½º PC´Â ÀÌ·± ŸÀÔÀ¸·Î »ç¿ëµÇ´Â µ¥¿¡´Â ÀûÀýÇÑ ¸î°³ ¾ÈµÇ´Â Ç÷§Æûµé Áß ÇϳªÀÌ´Ù. PCµéÀº µÎ°¡Áö ÁÖ¿äÇÑ ÀÌÀ¯ ¶§¹®¿¡ ÁÁÀº È£½ºÆ®ÀÌ´Ù. ù¹ø°´Â ½Î°í ½¬¿î È®Àå ´É·ÂÀÌ´Ù; ´õ ¸¹Àº ¸Þ¸ð¸®, µð½ºÅ©, ³×Æ®¿÷ µî°ú °¡Àº ¸®¼Ò½ºµéÀÌ ½±°Ô PC¿¡ Ãß°¡µÈ´Ù. µÎ¹ø°´Â ÀÎÅÍÆäÀ̽ºÀÇ ¿ëÀ̼ºÀÌ´Ù. ISA¿Í PCI ¹ö½º ÇÁ·ÎÅäŸÀÔ Ä«µåµéÀÌ ³Î¸® »ç¿ë°¡´ÉÇÒ»Ó¸¸ ¾Æ´Ï¶ó º´·Ä Æ÷Æ®´Â ¿ÏÀüÈ÷ ºñ-ħ·«ÀûÀÎ ÀÎÅÍÆäÀ̽º·Î Àû´çÇÑ ¼º´ÉÀ» Á¦°øÇÑ´Ù. IA32 ºÐ¸®µÈ I/O ½ºÆäÀ̽º´Â ¶ÇÇÑ °³º° I/O Æ÷Æ® ÁÖ¼ÒµéÀÇ ·¹º§¿¡¼­ Çϵå¿þ¾î I/O ÁÖ¼Ò ÇÁ·ÎÅؼÇÀ» Á¦°øÇÔÀ¸·Î½á ÀÎÅÍÆäÀ̽º¸¦ ¿ëÀÌÇÏ°Ô ÇÑ´Ù. ¸®´ª½º´Â ¶ÇÇÑ ÁÁÀº È£½ºÆ® OSÀÌ´Ù. Àüü ¼Ò½º ÄÚµåÀÇ ÀÚÀ¯·Î¿î »ç¿ë °¡´É¼º, ¸¹Àº "ÇÙÅ·" Ä«À̵åµé, À̵éÀº ¸í¹éÈ÷ ´ë´ÜÇÑ µµ¿òÀÌ´Ù. ±×·¯³ª ¸®´ª½º´Â ¶ÇÇÑ ±¦ÂúÀº °ÅÀÇ-½Ç-½Ã°£ ½ºÄÉÁÙ¸µÀ» Á¦°øÇÏ°í <url url="http://luz.cs.nmt.edu/~rtlinux/">¿¡´Â ¸®´ª½ºÀÇ ÁøÁ¤ÇÑ ½Ç-½Ã°£ ¹öÀüÁ¶Â÷ ÀÖ´Ù. ¾Æ¸¶µµ ¿ÏÀüÇÑ UNIX ȯ°æÀ» Áö¿øÇÏ´Â ¹Ý¸é ¸®´ª½º´Â Microsoft DOS ¶Ç´Â Windows¿¡¼­ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï ÀÛ¼ºµÈ °³¹ß ÅøµéÀ» Áö¿øÇÏ´Â °ÍÀÌ Á¶±Ý ´õ Áß¿äÇÑ »ç½ÇÀÌ´Ù. MSDOS ÇÁ·Î±×·¥µéÀº, ±ÛÀÚ ±×´ë·Î MSDOS¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Â ÇÁ·ÎÅØƼµå °¡»ó ¸Ó½®À» Á¦°øÇÏ´Â, <tt>dosemu</tt>¸¦ »ç¿ëÇÑ ¸®´ª½º ÇÁ·Î¼¼½º ¾È¿¡¼­ ½ÇÇàµÉ ¼ö ÀÖ´Ù. ¸®´ª½º´Â Á» ´õ Á÷Á¢ÀûÀ¸·Î Windows 3.xx ÇÁ·Î±×·¥µé¿¡ ´ëÇؼ­ Áö¿øÇÑ´Ù: <tt>wine</tt>, <url url="http://www.linpro.no/wine/">, °ú °°Àº ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î´Â UNIX/X ȯ°æ¾È¿¡¼­ Á¤È®ÇÏ°í È¿À²ÀûÀ¸·Î ´ëºÎºÐÀÇ ÇÁ·Î±×·¥µéÀ» ½ÇÇàÇÒ¸¸Å­ ÃæºÐÈ÷ Àß Windows 3.11À» ½Ã¹Ä·¹ÀÌÆ®ÇÑ´Ù. ´ÙÀ½ µÎ ¼½¼ÇµéÀº ³»°¡ ¸®´ª½º¿¡¼­ Áö¿øµÇ¾úÀ¸¸é ÇÏ°í ¹Ù¶ó´Â ºÎ¼Ó º´·Ä ½Ã½ºÅ۵鿡 ´ëÇÑ ¿¹Á¦µéÀ» Á¦°øÇÑ´Ù.... <!-- ------------------------------------------------------------- --> <sect1>±×°Í¿¡ DSP¸¦ Àû¿ëÇߴ°¡(Did You DSP That)? <!-- ------------------------------------------------------------- --> <p> °í-¼º´É DSP(µðÁöÅÐ ½Ã±×³Î ó¸®(Digital Signal Processing)) ÇÁ·Î¼¼¼­ ½ÃÀåÀÌ ¹ø¼ºÁßÀÌ´Ù. ºñ·Ï ÀÌ·± ĨµéÀÌ ÀϹÝÀûÀ¸·Î ¾îÇø®ÄÉÀ̼Ç-Á¾¼ÓÀûÀÎ ½Ã½ºÅ۵鿡 ÀÓº£µùµÇµµ·Ï °í¾ÈµÈ °ÍÀÌÁö¸¸, ±×µéÀº ¶ÇÇÑ °Å´ëÇÑ ºÎ¼Ó º´·Ä ÄÄÇ»ÅÍµé ¶ÇÇÑ ¸¸µé°í ÀÖ´Ù. ¿Ö ±×·±°¡? <itemize> <item>Texas Instruments (<url url="http://www.ti.com/">) TMS320¿Í Analog Devices (<url url="http://www.analog.com/">) SHARC DSP Æйи®¿Í °°Àº ¸¹Àº °ÍµéÀÌ "Á¢Âø(glue)" ·ÎÁ÷ÀÌ °ÅÀÇ ¾ø´Â ¶Ç´Â ÀüÇô ¾ø´Â º´·Ä ±â°èµéÀ» ¸¸µéµµ·Ï °íµÈ °ÍÀÌ´Ù. <item>À̵éÀº ¾ÆÁÖ, Ưº°È÷ MIP³ª MFLOP ´ç ºñ¿ëÀÌ, ½Î´Ù. ±âº» Áö¿ø ·ÎÁ÷ÀÇ ºñ¿ëÀ» Æ÷ÇÔÇؼ­ DSP ÇÁ·Î¼¼¼­°¡ ºñ±³°¡´ÉÇÑ ¼º´ÉÀ» °¡Áö´Â PC ÇÁ·Î¼¼¼­ÀÇ ºñ¿ëÀÇ 10ºÐÀÇ 1À̶ó°í ÇÑ´Ù. <item>±×µéÀº ¸¹Àº Àü·ÂÀ» ¾²°Å³ª ¸¹Àº ¿­À» ¹ß»ýÇϰųª ÇÏÁö ¾Ê´Â´Ù. ÀÌ°ÍÀº ÀüÅëÀûÀÎ ÇǾ¾ÀÇ ÆÄ¿ö ¼­ÇöóÀÌ¿¡ ÀÇÇÑ Àü·ÂÀ» ÀÌ·± ÀÏ·ÃÀÇ Ä¨µé¿¡ °ø±ÞÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù - ±×¸®°í ±×°ÍµéÀ» ¿©·¯ºÐÀÇ ÇǾ¾ ÄÉÀ̽º¿¡ ³Ö¾îµµ ÀÌ°ÍÀÌ ¿ÀºìÀÌ µÇÁö ¾ÊÀ»°ÍÀ̶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù. <item>°í-¼öÁØ (¿¹, C) ÄÄÆÄÀÏ·¯µéÀÌ Àß »ç¿ëÇÒ °Í°°Áö ¾ÊÀº ´ëºÎºÐÀÇ DSP ¸í·É¾î ÁýÇÕ - ¿¹¸¦ µé¾î¼­ "ºñÆ® ¿ª¹æÇâ ¾îµå·¹½Ì(<item>°í-¼öÁØ (¿¹, C) ÄÄÆÄÀÏ·¯µéÀÌ Àß »ç¿ëÇÒ °Í°°Áö ¾ÊÀº ´ëºÎºÐÀÇ DSP ¸í·É¾î ÁýÇÕ¿¡´Â ÀÌ»óÇÏ°Ô º¸ÀÌ´Â °ÍµéÀÌ ÀÖ´Ù - ¿¹¸¦ µé¾î¼­ "ºñÆ® ¿ª¹æÇâ ¾îµå·¹½Ì(Bit Reverse Addressing)". ºÎ¼Ó º´·Ä ½Ã½ºÅÛÀ» »ç¿ëÇÏ¸é ±×·± È£½ºÆ®¿¡¼­ ´ëºÎºÐÀÇ Äڵ带 Á÷¼±ÀûÀ¸·Î(straightforwardly) ÄÄÆÄÀÏÇÏ°í ½ÇÇàÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÀÌ¿¡ ¹ÝÇؼ­ DSP À§¿¡¼­ ½Ã°£À» ´ëºÎºÐ Àâ¾Æ¸Ô´Â ¸î°³ ¾ÈµÇ´Â ¾Ë°í¸®ÁòµéÀº Á¶½É½º·´°Ô ¼ÕÀ¸·Î-Æ©´×µÈ ÄÚµå·Î ½ÇÇàµÈ´Ù. <item>ÀÌ·± DSP ÇÁ·Î¼¼¼­µéÀº ½ÇÁ¦ UNIX-like OS¿¡¼­ ½ÇÇàµÇµµ·Ï °í¾ÈµÈ °ÍÀÌ ¾Æ´Ï°í ÀϹÝÀûÀ¸·Î µ¶¸³-½ÇÇàÇü ¹ü¿ë ÄÄÇ»ÅÍ ÇÁ·Î¼¼¼­µé°ú ¸¶Âù°¡Áö·Î ÁÁÁö ¾Ê´Ù. ¿¹¸¦ µé¾î¼­ ¸¹Àº °ÍµéÀÌ ¸Þ¸ð¸® °ü¸® Çϵå¿þ¾î¸¦ °¡Áö°í ÀÖÁö ¾Ê´Ù. ´Ù¸¥ ¸»·Î ÇÏ¸é ±×µéÀº Á» ´õ ¹ü¿ë ±â°èµé¿¡ ÀÇÇؼ­ È£½ºÆ®µÇ¾î¾ß °¡Àå Àß ÀÛµ¿µÈ´Ù... ¸®´ª½º¿Í °°Àº. </itemize> ¾î¶² ¿Àµð¿À Ä«µåµé°ú ¸ðµ©µéÀº ¸®´ª½º µå¶óÀ̹öµéÀÌ ¾ï¼¼½ºÇÒ ¼ö ÀÖ´Â DSP ÇÁ·Î¼¼¼­µéÀ» Æ÷ÇÔÇÏ°í ÀÖÁö¸¸ ³×°³ ¶Ç´Â ±× ÀÌ»óÀÇ DSP ÇÁ·Î¼¼¼­µéÀ» °¡Áö´Â ºÎ¼Ó º´·Ä ½Ã½ºÅÛÀ» »ç¿ëÇÏ¸é ±× ´ñ°¡°¡ Å©´Ù. Texas Instruments TMS320 ½Ã¸®Áî, <url url="http://www.ti.com/sc/docs/dsps/dsphome.htm">, ´Â ¾ÆÁÖ ¿À·§µ¿¾È ¾ÆÁÖ ÀαⰡ ÀÖ¾ú°í TMS320-±â¹Ý º´·Ä ÇÁ·Î¼¼¼­¸¦ ¸¸µé±â°¡ ½¬¾ú±â ¶§¹®¿¡ »ç¿ë°¡´ÉÇÑ ±×·± ½Ã½ºÅÛµéÀÌ ²Ï ÀÖ¾ú´Ù. TMS320¿¡´Â Á¤¼ö-¸¸ÀÇ ¹öÀü°ú ºÎµ¿-¼Ò¼ýÁ¡ °¡´É ¹öÀüµéÀÌ ÀÖ´Ù; ´õ ¿À·¡µÈ µðÀÚÀεéÀº ´Ù¼Ò ºñÀÏ»óÀûÀÎ ´ÜÀÏ-Á¤¹Ðµµ ºÎµ¿-¼Ò¼ýÁ¡ Æ÷¸äÀ» »ç¿ëÇßÁö¸¸ »õ·Î¿î ¸ðµ¨µéÀº IEEE Æ÷¸äµéÀ» Áö¿øÇÑ´Ù. ¿À·¡µÈ TMS320C4x ('C4x ·Î ¾Ë·ÁÁü)´Â TI-Á¾¼ÓÀûÀÎ ´ÜÀÏ-Á¤¹Ðµµ ºÎµ¿-¼Ò¼ýÁ¡ Æ÷¸äÀ» »ç¿ëÇؼ­ 80 MFLOPS±îÁö ȹµæÇß´Ù; ÀÌ¿¡ ¹ÝÇؼ­ ´ÜÀÏ 'C67x Àº VelociTI¶ó°í ºÒ¸®´Â VLIW-±â¹Ý Ĩ ¾ÆÅ°ÅØÃĸ¦ »ç¿ëÇؼ­, 1 GFLOPS ´ÜÀÏ-Á¤¹Ðµµ ¶Ç´Â IEEE ºÎµ¿ ¼Ò¼öÁ¡ ¿¬»ê¿¡ ´ëÇؼ­ 420 MFLOPS ¹è-Á¤¹Ðµµ±îÁö Á¦°øÇÒ °ÍÀÌ´Ù. ¸ÖƼÇÁ·Î¼¼¼­·Î ÀÌ·± ĨµéÀÇ ±×·ìÀ» ¼³Á¤ÇÏ´Â °ÍÀÌ ½¬¿ï»Ó ¾Æ´Ï¶ó ´ÜÀÏ Ä¨¾È¿¡¼­µµ 'C8x ¸ÖƼÇÁ·Î¼¼¼­´Â µÎ°³ ¶Ç´Â ³×°³ÀÇ Á¤¼ö ºÎ¼Ó DSPµé°ú ÇÔ²² 100 MFLOPS IEEE ºÎµ¿-¼Ò¼ýÁ¡ RISC ¸¶½ºÅÍ ÇÁ·Î¼¼¼­¸¦ Á¦°øÇÒ °ÍÀÌ´Ù. ¸î°³ÀÇ ºÎ¼Ó º´·Ä ½Ã½ºÅ۵麸´Ù ´õ ¸¹ÀÌ »ç¿ëµÈ¹Ù ÀÖ´Â ´Ù¸¥ DSP ÇÁ·Î¼¼¼­ Æйи®´Â Analog Devices <url url="http://www.analog.com/"> »çÀÇ SHARC(ADSP-2106x·Î ¾Ë·ÁÁü)ÀÌ´Ù. ÀÌ·± ĨµéÀº ¿ÜºÎ Á¢Âø(glue) ³í¸® ¾øÀÌ 6°³ÀÇ ÇÁ·Î¼¼¼­ °øÀ¯ ¸Þ¸ð¸® ¸ÖƼÇÁ·Î¼¼¼­·Î ¼³Á¤µÉ ¼ö ÀÖ´Ù. ±×¸®°í Á¡ ´õ Å« ½Ã½ºÅ۵鵵 ¿©¼¸°³ÀÇ 4-ºñÆ® links/chip(Ĩ´ç ¸µÅ©)¸¦ »ç¿ëÇؼ­ ¼³Á¤µÉ ¼ö ÀÖ´Ù. ´ëºÎºÐÀÇ ´õ Å« ½Ã½ºÅÛµéÀº ±º»ç¿ë ¾îÇø®ÄÉÀ̼ÇÀ» ¸ñÇ¥·Î ÇÏ´Â °Í °°°í ¾à°£ ºñ½Î´Ù. ±×·¯³ª Integrated Computing Engines, Inc., <url url="http://www.iced.com/">, ȸ»ç´Â GreenICE¶ó°í ºÒ¸®´Â Èï¹Ì·Î¿î Á¶±×¸¸ µÎ-º¸µå PCI Ä«µå ¼ÂÀ» ¸¸µé¾ú´Ù. ÀÌ À¯´ÖÀº 16°³ÀÇ SHARC ÇÁ·Î¼¼¼­µé ¹è¿­À» °¡Áö°í ÀÖ°í ´ÜÀÏ-Á¤¹Ðµµ IEEE Æ÷¸äÀ» »ç¿ëÇؼ­ ¾à 1.9 GFLOPSÀÇ ÃÖ°í ¼Óµµ¸¦ ³¾ ¼ö ÀÖ´Ù. GreenICE´Â $5,000 ¹Ì¸¸ÀÇ °¡°ÝÀÌ´Ù. ³» ÀÇ°ßÀ¸·Î´Â ºÎ¼Ó º´·É DSPµéÀº ½ÇÁ¦·Î ¸®´ª½º º´·Ä ó¸® Ä¿¹Â³ÊƼ°¡ ´õ ¸¹Àº ½Å°æÀ» ½á¾ß ¸¶¶¥ÇÒ °ÍÀ̶ó°í »ý°¢ÇÑ´Ù.... <!-- ------------------------------------------------------------- --> <sect1>FPGAs°ú Àç¼³Á¤ °¡´ÉÇÑ ³í¸® ¿¬»ê <!-- ------------------------------------------------------------- --> <p> º´·Ä 󸮰¡ °¡Àå ³ôÀº ¼º´ÉÇâ»óÀ» ¾ò±â À§ÇÑ °ÍÀÌ ÀüºÎÀ̶ó¸é ¿Ö Ä¿½ºÅÒ Çϵå¿þ¾î¸¦ ¸¸µéÁö ¾Ê´Â°¡? ±Û½ê, ¿ì¸®´Â ¸ðµÎ ´äÀ» ¾Ë°í ÀÖ´Ù; ÀÌ°ÍÀº ³Ê¹« ºñ½Î¸ç °³¹ßÇϱ⿡ ½Ã°£ÀÌ ³Ê¹« ¿À·¡ °É¸®°í Á¶±ÝÀÌ¶óµµ ¾Ë°í¸®ÁòÀ» º¯°æÇÒ ¶§¸é ¾µ¸ð¾ø´Â °ÍÀÌ µÇ¹ö¸°´Ù. ±âŸ µîµî. ±×·¯³ª ÀüÀÚÀûÀ¸·Î ÀçÇÁ·Î±×·¡¹Ö °¡´ÉÇÑ FPGA(Çʵå ÇÁ·Î±×·¡¸Óºí °ÔÀÌÆ® ¾î·¹ÀÌ(Field Programmable Gate Arrays))µéÀÇ ¿äÁòÀÇ Áøº¸°¡ ÀÌ·± Á¦¾àµéÀÇ ´ëºÎºÐÀ» ¹«·ÂÈ­½ÃÄÑ ¹ö·È´Ù. Áö±Ý °ÔÀÌÆ® ¹ÐÁýµµ°¡ ÃæºÐÈ÷ ³ô¾Æ¼­ ´Ü¼øÇÑ Àüü ÇÁ·Î¼¼¼­°¡ ÇϳªÀÇ FPGA¿¡ µé¾î°¡µµ·Ï ¸¸µé¾îÁú ¼ö ÀÖ°í FPGA¸¦ Àç¼³Á¤(ÀçÇÁ·Î±×·¥)ÇÏ´Â °Íµµ ¶ÇÇÑ, ÇÑ ¾Ë°í¸®ÁòÀÇ ÇÑ ±¹¸é¿¡¼­ ´ÙÀ½À¸·Î ¿Å°Ü°¥ ¶§¶óµµ Àç¼³Á¤ÇÏ´Â °ÍÀÌ Å¸´çÇÒ¸¸Å­ÀÇ ¼öÁرîÁö ³·¾ÆÁ³´Ù. ÀÌ ³»¿ëÀº ½ÉÀåÀÌ ¾àÇÑ »ç¶÷µéÀ» À§ÇÑ °ÍÀÌ ¾Æ´Ï´Ù: ¿©·¯ºÐÀº FPGA ¼³Á¤¿¡ ´ëÇؼ­, ¸®´ª½º È£½ºÆ® ½Ã½ºÅÛ À§ÀÇ ÇÁ·Î±×·¥µé¿¡ ´ëÇؼ­ ÀÎÅÍÆäÀ̽ºÇÏ´Â ·Î¿ì-·¹º§ Äڵ带 ÀÛ¼ºÇÏ´Â ÀÏ°ú ÇÔ²², VHDL°ú °°Àº Çϵå¿þ¾î ±â¼ú(description) ¾ð¾îµé·Î ÀÛ¾÷ÇØ¾ß ÇÑ´Ù. ±×·¯³ª FPGAÀÇ ºñ¿ëÀº ³·°í Ưº°È÷ ³·Àº-Á¤¹Ðµµ Á¤¼ö µ¥ÀÌÅÍ(½ÇÁ¦, ÀÌ·± Àç·áÀÇ Á¶±×¸¸ »óÀ§ÁýÇÕ¿¡ ´ëÇؼ­´Â SWAR°¡ ´õ ³´´Ù)¿¡ ´ëÇؼ­ ÀÛ¾÷ÇÏ´Â ¾Ë°í¸®Áòµé¿¡ ´ëÇؼ­ ºñ¿ëÀÌ ³·°í, FPGA´Â ¿©·¯ºÐÀÌ µ¥ÀÌÅ͸¦ Á¦°øÇÏ´Â ¼Óµµ¸¸Å­ ºü¸£°Ô º¹ÀâÇÑ ¿¬»êµéÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ ´Ü¼øÇÑ FPGA-±â¹Ý ½Ã½ºÅÛµéÀº À¯ÀüÀÚ µ¥ÀÌÅͺ£À̽º °Ë»ö¿¡¼­ ½´ÆÛÄÄÇ»Åͺ¸´Ù ´õ ³ªÀº ¼Óµµ¸¦ ¸¸µç´Ù. ÀûÀýÇÑ FPGA-±â¹Ý Çϵå¿þ¾î¸¦ ¸¸µå´Â ´Ù¸¥ ȸ»çµéÀÌ ÀÖÁö¸¸ ´ÙÀ½°ú °°Àº µÎ ȸ»ç°¡ ÁÁÀº »ùÇÃÀ» Á¦½ÃÇÑ´Ù. Virtual Computer Company´Â µ¿ÀûÀ¸·Î Àç¼³Á¤ °¡´ÉÇÑ SRAM-±â¹Ý Xilinx FPGAµéÀ» »ç¿ëÇÑ ´Ù¾çÇÑ Á¦Ç°µéÀ» Á¦°øÇÑ´Ù. ±×µéÀÇ 8/16ºñÆ® "°¡»ó ISA ÇÁ·ÎÅä º¸µå(Virtual ISA Proto Board)" <url url="http://www.vcc.com/products/isa.html">´Â $2,000 ¹Ì¸¸ÀÌ´Ù. ¾ËÅ׶ó(Altera) ARC-PCI(Altera Reconfigurable Computer, PCI bus), <url url="http://www.altera.com/html/new/pressrel/pr_arc-pci.html">, ´Â ºñ½ÁÇÑ Å¸ÀÔÀÇ Ä«µåÀÌÁö¸¸ ¾ËÅ׶ó FPGAµé°ú ISA°¡ ¾Æ´Ñ PCI ¹ö½º ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÑ´Ù. ¸¹Àº ¼³°è Åøµé, Çϵå¿þ¾î ±â¼ú(description)¾ð¾î, ÄÄÆÄÀÏ·¯, ¶ó¿ìÅÍ, ¸ÊÆÛ µîÀº À©µµ¿ìÁ DOS¿¡¼­¸¸ ½ÇÇàµÇ´Â ¿ÀºêÁ§Æ® ÄÚµå·Î Á¦°øµÈ´Ù. È£½ºÆ® ÇǾ¾¿¡´Ù DOS/Windows¸¦ °¡Áø µð½ºÅ© ÆÄƼ¼ÇÀ» °¡Áö°í ±×°ÍµéÀÌ ÇÊ¿äÇÒ ¶§¸¶´Ù ¸®ºÎÆÃÇÑ´Ù. ±×·¯³ª ÀÌµé ¼ÒÇÁÆ®¿þ¾î ÆÑÅ°ÁöµéÀº ¸®´ª½º¿¡¼­ <tt>dosemu</tt>¸¦ »ç¿ëÇؼ­ ¶Ç´Â, <tt>wine</tt>¿Í °°Àº À©µµ¿ìÁî ¿¡¹Ä·¹ÀÌÅ͸¦ »ç¿ëÇؼ­ ½ÇÇàµÉ ¼ö ÀÖ´Ù. <!--***************************************************************--> <sect>ÀϹÝÀûÀÎ °ü½É°Å¸® Áß¿¡¼­ <!--***************************************************************--> <p> ÀÌ ¼½¼Ç¿¡¼­ ´Ù·ç¾îÁö´Â ³»¿ëÀº ¸ðµç ¸®´ª½ºÀÇ ³×°¡Áö º´·Ä ó¸® ¸ðµ¨µé¿¡ Àû¿ëµÇ´Â °ÍÀÌ´Ù. <!-- ------------------------------------------------------------- --> <sect1>ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í ÄÄÆÄÀÏ·¯ <!-- ------------------------------------------------------------- --> <p> ³ª´Â ÁÖ·Î ÄÄÆÄÀÏ·¯ ¿¬±¸ÀÚ·Î ¾Ë·ÁÁ® ÀÖ´Ù. ±×·¡¼­ ³ª´Â ¸®´ª½º ½Ã½ºÅ۵鿡 ´ëÇÑ È¿À²ÀûÀÎ º´·Ä Äڵ带 ÀÚµ¿À¸·Î »ý¼ºÇÏ´Â À§´ëÇÑ ÄÄÆÄÀÏ·¯µéÀÌ ¸¹ÀÌ ÀÖ´Ù°í ¸»ÇÒ ¼ö ÀÖ¾úÀ¸¸é ÇÑ´Ù. ºÒÇàÇÏ°Ôµµ ´Ù¾çÇÑ ¸í½ÃÀû Åë½Å°ú ´Ù¸¥ º´·Ä ¿¬»êµéÀ» »ç¿ëÇÑ ¿©·¯ºÐÀÇ º´·Ä ÇÁ·Î±×·¥À» GCC·Î ÄÄÆÄÀ쵃 C ÄÚµå·Î Ç¥ÇöÇÔÀ¸·Î½á ¼º´ÉÀ» ³ôÀÏ ¼ö ÀÖ´Ù´Â °ÍÀº ¾î·Æ´Ù´Â °ÍÀÌ Áø½ÇÀÌ´Ù. ´ÙÀ½ ¾ð¾î/ÄÄÆÄÀÏ·¯ ÇÁ·ÎÁ§Æ®µéÀÌ °í-¼öÁØ ¾ð¾îµé·ÎºÎÅÍ È¿À²ÀûÀÎ Äڵ带 ¸¸µå´Â ³ë·ÂÀ» ÇÏ°í ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ÀÌµé °¢°¢Àº ±×°ÍÀÌ ÁöÇâÇÏ´Â ÇÁ·Î±×·¡¹Ö ÀÛ¾÷µéÀÇ Á¾·ù¿¡ ´ëÇؼ­´Â È¿À²ÀûÀÌÁö¸¸ ¾î¶² °Íµµ °­·ÂÇÑ ¹ü¿ë ¾ð¾îÀÌÁö ¾Ê°í, GCC·Î ÄÄÆÄÀÏÇÒ C ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀ» ¿µ¿øÈ÷ ¸ØÃß°Ô ÇÒ ¸¸ÇÑ °ÍÀÌ ¾ø´Ù. (±×·¡µµ) ÀÌ°ÍÀº ÁÁ´Ù. ÀÌ·± ¾ð¾îµé°ú ÄÄÆÄÀÏ·¯µéÀ» ±×µéÀÌ ÀǵµµÈ ¹Ù´ë·Î »ç¿ëÇÏ°í ¿©·¯ºÐÀº ´õ ªÀº °³¹ß ½Ã°£, ½¬¿î µð¹ö±ë°ú À¯Áö º¸¼ö µîÀÇ º¸»óÀ» ¹ÞÀ» °ÍÀÌ´Ù. ¿©±â¿¡ ¸®½ºÆ®µÈ(¾ËÆĺª ¼ø¼­·Î) °Íµé ¿Ü¿¡ ¸¹Àº ¾ð¾îµé°ú ÄÄÆÄÀÏ·¯µéÀÌ ÀÖ´Ù. ÀÚÀ¯·Ó°Ô »ç¿ë°¡´ÉÇÑ ÄÄÆÄÀÏ·¯µé(À̵éÁß ´ëºÎºÐÀº ¸®´ª½º º´·Ä 󸮿¡ ´ëÇؼ­ ¾Æ¹«°Íµµ ÇÏÁö ¸øÇÑ´Ù)Àº <url url="http://www.idiom.com/free-compilers/">¿¡ ÀÖ´Ù. <sect2>Fortran 66/77/PCF/90/HPF/95 <p> Àû¾îµµ °úÇÐ ÄÄÇ»Æà »çȸ¿¡¼­´Â ¾ðÁ¦³ª Æ÷Æ®¶õ(Fortran)ÀÌ ÀÖ´Ù. ¹°·Ð ÀÌÁ¦ Æ÷Æ®¶õÀº 1966³â ANSI Ç¥ÁØ¿¡¼­ ±×·¨´ø °Í°ú ¶È°°Àº °ÍÀ» ÀǹÌÇÏÁö ¾Ê´Â´Ù. ±âº»ÀûÀ¸·Î Æ÷Æ®¶õ 66Àº ¾ÆÁÖ ´Ü¼øÇÑ °ÍÀÌ´Ù. Æ÷Æ®¶õ 77Àº ¸¹Àº °ÍµéÀ» Ãß°¡Çß°í À̵é Áß °¡Àå ÁÖ¸ñÇÒ ¸¸ÇÑ °ÍÀº ¹®ÀÚ µ¥ÀÌÅÍ¿¡ ´ëÇÑ °³¼±µÈ Áö¿ø°ú <tt>DO</tt> ·çÇÁ ¹®¹ýÀÇ º¯°æÀÌ´Ù. PCF (Parallel Computing Forum) Æ÷Æ®¶õÀº 77¿¡´Ù ´Ù¾çÇÑ º´·Ä ó¸® Áö¿øÀ» ´õÇÏ·Á°í ½ÃµµÇÏ¿´´Ù. Æ÷Æ®¶õ 90Àº ¿ÏÀüÇÑ-±â´ÉÀÇ Çö´ë ¾ð¾îÀÌ´Ù. ÀÌ°ÍÀº ±âº»ÀûÀ¸·Î C++-ºñ½ÁÇÑ °´Ã¼-ÁöÇâ ÇÁ·Î±×·¡¹Ö ±â´Éµé°ú º´·Ä ¹è¿­ ¹®¹ýÀ» 77 ¾ð¾î¿¡ Ãß°¡ÇÑ °ÍÀÌ´Ù. µÎ ¹öÀüµé(HPF-1°ú HPF-2)¸¦ °¡Áö´Â HPF (High-Performance Fortran, <url url="http://www.crpc.rice.edu/HPFF/home.html">)´Â ±âº»ÀûÀ¸·Î Áøº¸µÈ, Ç¥ÁØÈ­µÈ, ¿ì¸®µéÀÌ º¸Åë CM Æ÷Æ®¶õ, MasPar Æ÷Æ®¶õ, ¶Ç´Â Æ÷Æ®¶õ D·Î ¾Ë°í ÀÖ´Â °ÍÀÇ ¹öÀüÀÌ´Ù; ÀÌ°ÍÀº ´Ù¾çÇÑ º´·Ä ó¸® °³¼±Á¡µéÀ» ³Ö¾î¼­ Æ÷Æ®¶õ 90À» È®ÀåÇÑ °ÍÀÌ´Ù. ÁÖ·Î µ¥ÀÌÅÍ ·¹À̾ƿôÀ» ÁöÁ¤ÇÏ´Â µ¥ ÃÐÁ¡À» µÐ °ÍÀÌ´Ù. ¸¶Áö¸·À¸·Î Æ÷Æ®¶õ 95´Â 90À» »ó´ëÀûÀ¸·Î Àû°Ô ÁõÁø½ÃÅ°°í °³¼±ÇÑ °ÍÀÌ´Ù. C·Î ÀÛ¾÷ÇÑ °ÍÀº ÀϹÝÀûÀ¸·Î <tt>f2c</tt>, <tt>g77</tt> (¸®´ª½º-Á¾¼ÓÀûÀÎ ÈǸ¢ÇÑ °³°üÀº <url url="http://linux.uni-regensburg.de/psi_linux/gcc/html_g77/g77_91.html">¿¡ ÀÖ´Ù), ¶Ç´Â <url url="http://extweb.nag.co.uk/nagware/NCNJNKNM.html"> »ó¾÷¿ë ¹öÀü Æ÷Æ®¶õ 90/95°úµµ Àß ÀÛµ¿ÇÑ´Ù. ÀÌ°ÍÀº ÀÌµé ¸ðµç ÄÄÆÄÀÏ·¯µéÀÌ °á°úÀûÀ¸·Î GCCÀÇ ¹é-¿£µå¿¡¼­ »ç¿ëµÈ °Í°ú ÄÚµå-»ý¼º¿¡¼­ µ¿ÀÏÇϱ⠶§¹®ÀÌ´Ù. SMP¿¡ ´ëÇÑ Äڵ带 »ý¼ºÇÒ ¼ö ÀÖ´Â »ó¾÷¿ë Æ÷Æ®¶õ º´·Ä±â(parallelizer)µéÀº <url url="http://www.kai.com/">°ú <url url="http://www.psrv.com/vast/vast_parallel.html">¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. ÀÌ·± ÄÄÆÄÀÏ·¯µéÀÌ SMP ¸®´ª½º¿¡¼­ ÀÛµ¿ÇÒ·±Áö ¾ÈÇÒ·±Áö´Â ¸ð¸£Áö¸¸ Ç¥ÁØ POSIX ½º·¹µåµé(Áï, LinuxThreads)°¡ SMP ¸®´ª½ºÇÏ¿¡¼­ ÀÛµ¿ÇÑ´Ù¸é ±×°ÍÀº °¡´ÉÇÒ °ÍÀÌ´Ù. Æ÷Æ®·£µå ±×·ì(Portland Group)Àº, <url url="http://www.pgroup.com/">, SMP ¸®´ª½º¿¡ ´ëÇÑ Äڵ带 »ý¼ºÇÏ´Â »ó¾÷¿ë º´·ÄÈ­ HPF Æ÷Æ®¶õ(±×¸®°í C, C++)¸¦ °¡Áö°í ÀÖ´Ù; ±×µéÀº ¶ÇÇÑ MPI³ª PVMÀ» »ç¿ëÇÑ Å¬·¯½ºÅ͵éÀ» Ÿ°ÙÀ¸·Î ÇÑ ¹öÀüµµ °®°í ÀÖ´Ù. <url url=" http://www.apri.com/">ÀÇ FORGE/spf/xHPF Á¦Æûµéµµ SMPµéÀ̳ª Ŭ·¯½ºÅ͵鿡 ´ëÇؼ­ À¯¿ëÇÒ °ÍÀÌ´Ù. º´·Ä ¸®´ª½º ½Ã½ºÅÛµé°ú ÀÛ¾÷ÀÌ °¡´ÉÇϵµ·Ï ¸¸µé¾îÁú ¼ö ÀÖ´Â, ÀÚÀ¯·Ó°Ô »ç¿ë°¡´ÉÇÑ º´·ÄÈ­ Æ÷Æ®¶õµéÀº ´ÙÀ½°ú °°Àº °ÍµéÀ» Æ÷ÇÔÇÑ´Ù: <itemize> <item>ADAPTOR (ÀÚµ¿ µ¥ÀÌÅÍ º´·ÄÈ­ º¯È¯±â(Automatic DAta Parallelism TranslaTOR), <url url="http://www.gmd.de/SCAI/lab/adaptor/adaptor_home.html">), ´Â HPF¸¦ MPI ¶Ç´Â PVM È£Ãâµé·Î ÀÌ·ç¾îÁø Æ÷Æ®¶õ 77/90 ÄÚµå·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¸®´ª½º´Â ¾ð±ÞÇÏÁö ¾Ê´Â´Ù. <item>Ä«³×±â ¸á·ÐÀÇ Fx <url url="http://www.cs.cmu.edu/~fx/Fx"> ´Â ¸î°¡Áö ¿öÅ©½ºÅ×ÀÌ¼Ç Å¬·¯½ºÅ͵éÀ» ¸ñÇ¥·Î »ï´Â´Ù. ±×·¯³ª ¸®´ª½º´Â? <item>HPFC (ÇÁ·ÎÅäŸÀÔ HPF ÄÄÆÄÀÏ·¯, <url url="http://www.cri.ensmp.fr/~coelho/hpfc.html">) PVM È£Ãâµé·Î ÀÌ·ç¾îÁø Æ÷Æ®¶õ 77À» »ý¼ºÇÑ´Ù. ÀÌ°ÍÀº ¸®´ª½º Ŭ·¯½ºÅÍ¿¡¼­ »ç¿ë°¡´ÉÀΰ¡? <item>PARADIGM (ºÐ»ê-¸Þ¸ð¸® ¹ü¿ë ¸ÖƼÄÄÇ»ÅÍ¿¡ ´ëÇÑ º´·ÄÈ­ ÄÄÆÄÀÏ·¯(PARAllelizing compiler for DIstributed-memory General-purpose Multicomputers), <url url="http://www.crhc.uiuc.edu/Paradigm/">) ´Â ¸®´ª½º¿¡¼­ »ç¿ëµÉ ¼ö Àִ°¡? <item>Polaris ÄÄÆÄÀÏ·¯, <url url="http://ece.www.ecn.purdue.edu/~eigenman/polaris/">, ´Â °øÀ¯ ¸Þ¸ð¸® ¸ÖƼÇÁ·Î¼¼½ºµé¿¡ ´ëÇÑ Æ÷Æ®¶õ Äڵ带 »ý¼ºÇÏ°í ¾ó¸¶ ¾ÈÀ־ PAPERS ¸®´ª½º Ŭ·¯½ºÅ͸¦ ´Ù½Ã ¸ñÇ¥·Î »ïÀ» °ÍÀÌ´Ù. <item>PREPARE, <url url="http://www.irisa.fr/EXTERNE/projet/pampa/PREPARE/prepare.html">, ´Â MPI Ŭ·¯½ºÅ͵éÀ» ¸ñÇ¥·Î »ï´Â´Ù... IA32 ÇÁ·Î¼¼¼­µé¿¡¼­ ½ÇÇàµÇ´Â Äڵ带 »ý¼ºÇÒ ¼ö ÀÖ´ÂÁö ¾ø´ÂÁö´Â ºÐ¸íÇÏÁö ¾Ê´Ù. <item>ADAPT¿Í ADLIB¸¦ Á¶ÇÕÇؼ­, shpf(°í¼º´É Æ÷Æ®¶õ ÄÄÆÄÀÏ ½Ã½ºÅÛ ºÎºÐÁýÇÕ(Subset High Performance Fortran compilation system), <url url="http://www.ccg.ecs.soton.ac.uk/Projects/shpf/shpf.html">)´Â MPI È£ÃâµéÀ» °¡Áö´Â Æ÷Æ®¶õ 90À» »ý¼ºÇÏ´Â ÆÛºí¸¯ µµ¸ÞÀο¡ ÀÖ´Â °ÍÀÌ´Ù... ±×·¡¼­ ¿©·¯ºÐÀÌ ¸®´ª½º¿¡¼­ Æ÷Æ®¶õ 90 ÄÄÆÄÀÏ·¯¸¦ °¡Áö°í ÀÖ´Ù¸é... <item>SUIF (½ºÅÄÆ÷µå ´ëÇб³ Áß°£ Çü½Ä(Stanford University Intermediate Form), <url url="http://suif.stanford.edu/"> ÂüÁ¶) ´Â C¿Í Æ÷Æ®¶õ ¸ðµÎ¿¡ ´ëÇÑ º´·ÄÈ­ ÄÄÆÄÀÏ·¯¸¦ °¡Áö°í ÀÖ´Ù. ÀÌ°ÍÀº Àü¹Ì ÄÄÆÄÀÏ·¯ ÀÎÇÁ¶ó ÇÁ·ÎÁ§Æ®(National Compiler Infrastructure Project)¿¡ ´ëÇؼ­µµ °ü½ÉÀ» °¡Áö°í ÀÖ´Ù. ±×·¡¼­ º´·Ä ¸®´ª½º ½Ã½ºÅÛµéÀ» ¸ñÇ¥·Î ÇÏ´Â »ç¶÷ÀÌ Àִ°¡? </itemize> Æ÷Æ®¶õÀÇ ´Ù¾çÇÑ ¹æ¾ðµé¿¡ ´ëÇÑ ÀáÀçÀûÀ¸·Î À¯¿ëÇÑ ¸¹Àº ÄÄÆÄÀÏ·¯µéÀ» »©¸Ô¾ú´Ù°í È®½ÅÇÏÁö¸¸ ÃßÀûÇϱ⿡ ¾î·Á¿î Á¡ÀÌ ¸¹´Ù. ³ªÁß¿¡ ³ª´Â ¸®´ª½º¿¡¼­ ÀÛµ¿ÇÑ´Ù°í ¾Ë·ÁÁø ±×·± ÄÄÆÄÀÏ·¯µé¸¸ ¸ð¾Æ º¸°íÀÚ ÇÑ´Ù. <htmlurl url="mailto:pplinux@ecn.purdue.edu" name="pplinux@ecn.purdue.edu">·Î ºñÆòÀ̳ª ±³Á¤À» À̸ÞÀÏ·Î º¸³»Áֱ⠹ٶõ´Ù. <sect2>GLU (Granular Lucid) <p> GLU (Granular Lucid) ´Â Áý¾àÀûÀÌ°í(intensional) (Lucid) ±ä±ÞÇÑ ¸ðµ¨µéÀ» Á¶ÇÕÇÑ ÇÏÀ̺긮µå ÇÁ·Î±×·¡¹Ö ¸ðµ¨¿¡ ±â¹ÝÇÑ °í-¼öÁØ ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛÀÌ´Ù. ÀÌ°ÍÀº PVM°ú TCP ¼ÒÄϵéÀ» Áö¿øÇÑ´Ù. ÀÌ°ÍÀº ¸®´ª½º¿¡¼­ ½ÇÇàµÇ´Â°¡? Á» ´õ ¸¹Àº Á¤º¸°¡ <url url="http://www.csl.sri.com/GLU.html">¿¡ ÀÖ´Ù. <sect2>Jade¿Í SAM <p> Jade ´Â C¸¦ È®ÀåÇؼ­ ¼øÂ÷ÀûÀÌ°í ±ä±ÞÇÑ(imperative) ÇÁ·Î±×·¥µé ¾È¿¡¼­ ¼º±ä Çù·ÂÀ» °³¹ßÇϵµ·Ï ÇÑ º´·Ä ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÌ´Ù. ÀÌ°ÍÀº ºÐ»ê °øÀ¯ ¸Þ¸ð¸® ¸ðµ¨À» °¡Á¤ÇÑ´Ù. ÀÌ°ÍÀº PVMÀ» »ç¿ëÇÏ´Â ¿öÅ©½ºÅ×ÀÌ¼Ç Å¬·¯½ºÅ͵鿡 ´ëÇؼ­ SAM¿¡ ÀÇÇØ ±¸ÇöµÈ´Ù. Á» ´õ ¸¹Àº Á¤º¸´Â <url url="http://suif.stanford.edu/~scales/sam.html">¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. <sect2>Mentat°ú Legion <p> Mentat´Â ¿öÅ©½ºÅ×ÀÌ¼Ç Å¬·¯½ºÅ͵鿡¼­ ÀÛµ¿ÇÏ°í ¸®´ª½º·Î Æ÷Æõȹ٠ÀÖ´Â °´Ã¼-ÁöÇâ º´·Ä ó¸® ½Ã½ºÅÛÀÌ´Ù. Mentat ÇÁ·Î±×·¡¹Ö ¾ð¾î(MPL)Àº C++¿¡ ±â¹ÝÇÏ°í ÀÖ´Â °´Ã¼-ÁöÇâ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÌ´Ù. Mentat ½Ç½Ã°£ ½Ã½ºÅÛÀº ºñ-ºí·ÏÅ· RPCµé°ú ¾à°£ ´àÀº ¾î¶² °ÍµéÀ» »ç¿ëÇÑ´Ù. Á» ´õ ¸¹Àº Á¤º¸´Â <url url="http://www.cs.virginia.edu/~mentat/">¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. Legion <url url="http://www.cs.virginia.edu/~legion/"> ´Â Mentat ÀÇ »óÀ§¿¡ ¸¸µé¾îÁø °ÍÀÌ°í WANÀ¸·Î ¹­ÀÎ ±â°èµé¿¡ ´ëÇؼ­ ´ÜÀÏ °¡»ó ±â°è¸¦ Á¦°øÇÑ´Ù. <sect2>MPL (MasPar ÇÁ·Î±×·¡¹Ö ¾ð¾î) <p> Mentat ÀÇ MPL°ú È¥µ¿µÇÁö ¸»ÀÚ. ÀÌ ¾ð¾î´Â ¿ø·¡ MasPar SIMD ½´ÆÛÄÄÇ»Å͸¦ À§ÇÑ ¿ø½Ã º´·Ä C ¹æ¾ðÀ¸·Î½á °³¹ßµÇ¾ú´Ù. ±Û½ê, MasPar´Â ½ÇÁ¦ ´õÀÌ»ó Àå»ç¸¦ ÇÏÁö ¾ÊÁö¸¸(±×µéÀº ÀÌÁ¦ NeoVista Solutions, <url url="http://www.neovista.com">, µ¥ÀÌÅÍ ¸¶ÀÌ´× È¸»çÀÌ´Ù), ±×µéÀÇ MPL ÄÄÆÄÀÏ·¯´Â GCC¸¦ »ç¿ëÇؼ­ °³¹ßµÇ¾ú¾ú´Ù. ±×·¡¼­ ÀÌ°ÍÀº ¾ÆÁ÷µµ ÀÚÀ¯·Ó°Ô »ç¿ë°¡´ÉÇÏ´Ù. HuntsvilleÀÇ ¾Ë¶ó¹Ù¸¶ ´ëÇб³¿Í ÆÛµà ´ëÇб³ À̵é°ú Á¶ÀÎÆ®Çؼ­ MasPar ÀÇ MPLÀº AFAP È£ÃâµéÀ» °¡Áø C Äڵ带 »ý¼ºÇÏ´Â °ÍÀ¸·Î ¸ñÇ¥°¡ ¹Ù²î¾ú´Ù(¼½¼Ç 3.6À» ÂüÁ¶), ±×·¡¼­ ¸®´ª½º SMP ¹× Ŭ·¯½ºÅ͵é À§Çؼ­ ÀÛµ¿ÇÑ´Ù. ±×·¯³ª ±× ÄÄÆÄÀÏ·¯´Â ´Ù¼Ò ¹ö±×°¡ ¸¹´Ù. <url url="http://www.math.luc.edu/~laufer/mspls/papers/cohen.ps"> ÂüÁ¶. <sect2>PAMS (º´·Ä ¾îÇø®ÄÉÀÌ¼Ç °ü¸® ½Ã½ºÅÛ(Parallel Application Management System)) <p> Myrias ´Â PAMS (º´·Ä ¾îÇø®ÄÉÀÌ¼Ç °ü¸® ½Ã½ºÅÛ) À̶ó°í ºÒ¸®´Â ¼ÒÇÁÆ®¿þ¾î Á¦Ç°À» ÆĴ ȸ»çÀÌ´Ù. PAMS´Â °¡»ó °øÀ¯ ¸Þ¸ð¸® º´·Ä 󸮸¦ À§ÇÑ ¾ÆÁÖ ´Ü¼øÇÑ Áö½Ã¾îµéÀ» Á¦°øÇÑ´Ù. ¸®´ª½º ±â°èµéÀÇ ³×Æ®¿÷Àº ¾ÆÁ÷ Áö¿øµÇÁö ¾Ê´Â´Ù. Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸¸¦ À§Çؼ­´Â <url url="http://www.myrias.com/">¸¦ ÂüÁ¶ÇÏÀÚ. <sect2>Parallaxis-III <p> Parallaxis-III ´Â µ¥ÀÌÅÍ º´·ÄÈ­ (SIMD ¸ðµ¨)¿¡ ´ëÇÑ "°¡»ó ÇÁ·Î¼¼¼­¿Í Ä¿³Ø¼Ç(virtual processors and connections)"À¸·Î Modula-2¸¦ È®ÀåÇÑ ±¸Á¶Àû ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÌ´Ù. Parallaxis ¼ÒÇÁÆ®¿þ¾î´Â ¼øÂ÷ ¹× º´·Ä ÄÄÇ»ÅÍ ½Ã½ºÅÛµéÀ» À§ÇÑ ÄÄÆÄÀÏ·¯µé°ú, µð¹ö°Å(gdb¿Í xgdb µð¹ö°Å¿¡ ´ëÇÑ È®ÀåÆÇ), ±×¸®°í ¼­·Î ´Ù¸¥ ¿µ¿ªÀÇ, Ưº°È÷ À̹ÌÁö ó¸® ¿µ¿ªÀÇ, ¸¹Àº ¾çÀÇ »ùÇà ¾Ë°í¸®Áòµé·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. ÀÌ°ÍÀº ¼øÂ÷ ¸®´ª½º ½Ã½ºÅÛµé À§Çì¼­ ½ÇÇàµÈ´Ù... ±¸ ¹öÀüÀº ´Ù¾çÇÑ º´·Ä Ÿ°ÙµéÀ» Áö¿øÇß¾ú´Ù. ±×¸®°í »õ·Î¿î ¹öÀüµµ (¿¹, PVM Ŭ·¯½ºÅ͸¦ Ÿ°ÙÀ¸·Î »ïÀ½) ¶ÇÇÑ ±×·²°ÍÀÌ´Ù. Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <url url="http://www.informatik.uni-stuttgart.de/ipvr/bv/p3/p3.html">¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. <sect2>pC++/Sage++ <p> pC++/Sage++ ´Â ¾î¶² ±âº» "¿ä¼Ò(element)" Ŭ·¡½º·ÎºÎÅÍ "°´Ã¼µéÀÇ ÁýÇÕü(collections of objects)"¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅÍ-º´·Ä ½ºÅ¸ÀÏ ÀÛ¾÷µéÀ» Çã¿ëÇÏ´Â C++¿¡ ´ëÇÑ ¾ð¾î È®ÀåÀÌ´Ù. ÀÌ°ÍÀº PVM¿¡¼­ ½ÇÇàµÉ ¼ö ÀÕ´Â C++ Äڵ带 »ý¼ºÇÏ´Â ¼±Çà ÇÁ·Î¼¼¼­ÀÌ´Ù. ÀÌ°ÍÀº ¸®´ª½º¿¡¼­ ÀÛµ¿Çϴ°¡? Á» ´õ ¸¹Àº Á¤º¸´Â <url url="http://www.extreme.indiana.edu/sage/">¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. <sect2>SR (¸®¼Ò½º µ¿±â(Synchronizing Resources)) <p> SR (¸®¼Ò½º µ¿±â(Synchronizing Resources))´Â ¸®¼Ò½ºµéÀÌ ±×µéÀÌ °øÀ¯ÇÏ´Â ÇÁ·Î¼¼½ºµé°ú º¯¼öµéÀ» ĸ½¶È­ÇÏ´Â Çù·Â(concurrent) ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÌ´Ù; ¿¬»ê(operation)µéÀÌ ÇÁ·Î¼¼½º »óÈ£ÀÛ¿ë¿¡ ´ëÇÑ ÁÖ¿ä ¸ÞÄ«´ÏÁòÀ» Á¦°øÇÑ´Ù. SR Àº È£Ãâ°ú ¼­ºñ½º ÀÛ¾÷µé¿¡ ´ëÇÑ ¸ÞÄ«´ÏÁòµéÀÇ »õ·Î¿î Á¤ÇÕÀ» Á¦°øÇÑ´Ù. °á°úÀûÀ¸·Î ¸ðµç ·ÎÄà ±×¸®°í ¸®¸ðÆ® ÇÁ·Î½ÃÀú È£Ãâ, ¶ûµ¥ºä, ¸Þ½ÃÁö Àü´Þ, µ¿Àû ÇÁ·Î¼¼½º »ý¼º, ¸ÖƼij½ºÆ®, ±×¸®°í ¼¼¸¶Æ÷¾îµéÀÌ Áö¿øµÈ´Ù. SR Àº ¶ÇÇÑ °øÀ¯µÈ(shared) Àü¿ª º¯¼öµé°ú ¿¬»ê(operation)µéÀ» Áö¿øÇÑ´Ù. ÀÌ°ÍÀº ¸®´ª½º·Î Æ÷ÆõǾúÁö¸¸ ±×°ÍÀ¸·Î ½ÇÇàµÉ ¼ö ÀÖ´Â º´·ÄÈ­°¡ ¹«¾ùÀÎÁö´Â ºÐ¸íÇÏÁö ¾Ê´Ù. Á» ´õ ¸¹Àº Á¤º¸´Â <url url="http://www.cs.arizona.edu/sr/www/index.html">¿¡¼­ °¡´ÉÇÏ´Ù. <sect2>ZPL°ú IronMan <p> ZPL Àº °øÇаú °úÇÐ ¾îÇø®ÄÉÀ̼ǵéÀ» Áö¿øÇϵµ·Ï °í¾ÈµÈ ¹è¿­-±â¹Ý ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÌ´Ù. ÀÌ°ÍÀº IronMan À̶ó°í ºÒ¸®´Â ´Ü¼øÇÑ ¸Þ½ÃÁö-Àü´Þ ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ È£ÃâÀ» »ý¼ºÇϸç ÀÌ·± ÀÎÅÍÆäÀ̽º¸¦ ±¸¼ºÇÏ´Â ¸î°¡Áö ÇÔ¼öµéÀÌ °ÅÀÇ ¸ðµç ¸Þ½ÃÁö-Àü´Þ ½Ã½ºÅÛÀ» »ç¿ëÇؼ­ ½±°Ô ±¸ÇöµÉ ¼ö ÀÖ´Ù. ±×·¯³ª ¿öÅ©½ºÅ×ÀÌ¼Ç Å¬·¯½ºÅÍµé »óÀÇ PVM °ú MPI, ±×¸®°í ¸®´ª½º°¡ Áö¿øµÇ´Â °ÍÀÌ ÁÖ¿ä Ÿ°ÙÀÌ´Ù. Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <url url="http://www.cs.washington.edu/research/projects/orca3/zpl/www/">¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. <!-- ------------------------------------------------------------- --> <sect1>¼º´É ¹®Á¦(Performance Issues) <label id="sec_PerformanceIssues"> <!-- ------------------------------------------------------------- --> <p> ƯÁ¤ÇÑ ¸¶´õº¸µå, ³×Æ®¿÷ Ä«µåµé µîÀ» ¾î¶² °ÍÀÌ ÃÖ°íÀΰ¡¸¦ ¾Ë¾Æº¸·Á°í º¥Ä¡¸¶Å·ÇÏ´Â µ¥, ¸¹Àº ½Ã°£À» ¼ÒºñÇÏ´Â »ç¶÷µéÀÌ ¸¹ÀÌ ÀÖ´Ù. ÀÌ·± °ÍÀÇ ¹®Á¦´Â ¿©·¯ºÐÀÌ ¾î¶² °ÍÀ» º¥Ä¡¸¶Å·ÇÒ ¼ö ÀÖÀ» ¶§¿¡´Â ÀÌ¹Ì ±×°ÍÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â °Í Áß¿¡ ÃÖ°í°¡ ´õÀÌ»ó ¾Æ´Ï¶ó´Â °ÍÀÌ´Ù; ÀÌ°ÍÀº ½ÉÁö¾î ½ÃÀå¿¡¼­ »ç¶óÁö°í ¿ÏÀü ´Ù¸¥ ¼Ó¼ºµéÀ» °¡Áø °³¼±µÈ ¸ðµ¨·Î ±³Ã¼µÇ¾úÀ»¼ö ÀÖ´Ù. PC Çϵå¿þ¾î¸¦ »ç´Â °ÍÀº ¿À·£Áö Á꽺¸¦ »ç´Â °Í°ú °°´Ù. º¸Åë ÀÌ°ÍÀº ¶óº§¿¡ ºÙÀº ȸ»ç À̸§ÀÌ ¹«¾ùÀÎÁö´Â »ó°üÀÌ ¾ø°í ¾ÆÁÖ ÁÁÀº Àç·Î·Î ¸¸µé¾îÁø´Ù. ±¸¼º ¼ººÐµé(¶Ç´Â ¿À·»Áö Á꽺 ³óÃà¾×)ÀÌ ¹«¾ùÀ¸·Î ¸¸µé¾îÁ³´ÂÁö ½Å°æ¾²°Å³ª ¾Æ´Â »ç¶÷Àº °ÅÀÇ ¾ø´Ù. Áï, ¿©·¯ºÐÀÌ ½Å°æ¾µ Çϵå¿þ¾î Â÷À̵éÀº º°·Î ¾ÈµÈ´Ù. ¿©·¯ºÐÀÌ ¸®´ª½º·Î ¾µ Çϵå¿þ¾î¿¡ ´ëÇؼ­ ±âÇØÇÒ ¼ö ÀÖ´Â °ÍÀÌ ¹«¾ùÀΰ¡¸¦ È®½ÇÈ÷ ¾Ë°í ºü¸¥ ¹è´Þ, ÁÁÀº °¡°Ý, ±×¸®°í ¹ÝÇ°¿¡ ´ëÇÑ ÀûÀýÇÑ Á¤Ã¥¿¡ ´ëÇؼ­¸¸ ½Å°æÀ» ÁýÁßÇ϶ó´Â °ÍÀÌ ³» Á¶¾ðÀÌ´Ù. ¼­·Î ´Ù¸¥ PC ÇÁ·Î¼¼¼­µé¿¡ ´ëÇÑ ÈǸ¢ÇÑ °³°üÀº <url url="http://www.pcguide.com/ref/cpu/fam/">¿¡ ÀÖ´Ù; »ç½Ç ¿ÏÀüÇÑ WWW »çÀÌÆ® <url url="http://www.pcguide.com/">¿¡´Â PC Çϵå¿þ¾îÀÇ ÁÁÀº ±â¼úÀûÀÎ °³°üµéÀÌ ¸ð¿© ÀÖ´Ù. ƯÁ¤ Çϵå¿þ¾î ¼³Á¤µéÀÇ ¼º´É¿¡ ´ëÇؼ­ Á¶±Ý ¾Æ´Â °Íµµ À¯¿ëÇÏ´Ù. ±×¸®°í ¸®´ª½º º¥Ä¡¸¶Å· HOWTO(Linux Benchmarking HOWTO) <url url="http://sunsite.unc.edu/LDP/HOWTO/Benchmarking-HOWTO.html">°¡ ½ÃÀÛÇϱ⿡ ÁÁÀº °÷ÀÌ´Ù. ÀÎÅÚ IA32 ÇÁ·Î¼¼¼­µéÀº ½ÇÇàÁßÀÎ ½Ã½ºÅÛÀÇ ¼º´ÉÀ» Á¤±³ÇÑ ¼¼ºÎ»çÇ×±îÁö ÃøÁ¤ÇÏ´Â µ¥ »ç¿ëµÇ´Â ¸¹Àº Ư¼öÇÑ ·¹Áö½ºÅ͵éÀ» °¡Áø´Ù. ÀÎÅÚ VTune, <url url="http://developer.intel.com/design/perftool/vtune/">, ´Â ¾ÆÁÖ ¿ÏÀüÇÑ ÄÚµå-Æ©Æà ½Ã½ºÅÛ¿¡¼­ ¼º´É ·¹Áö½ºÅ͵éÀ» ³Ð°Ô »ç¿ëÇÑ´Ù... ÀÌ°ÍÀº ºÒÇàÇÏ°Ôµµ ¸®´ª½º¿¡¼­ ½ÇÇàµÇÁö ¾Ê´Â´Ù. ÆæƼ¾ö ¼º´É ·¹Áö½ºÅ͵éÀ» ¾ï¼¼½ºÇϱâ À§ÇÑ ·Îµù °¡´ÉÇÑ ¸ðµâ ÀåÄ¡ µå¶óÀ̹ö, ±×¸®°í ¶óÀ̺귯¸® ·çƾµéÀº <url url="http://www.cs.umd.edu/users/akinlar/driver.html">¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. ÀÌ·± ¼º´É ·¹Áö½ºÅ͵éÀº ´Ù¸¥ IA32 ÇÁ·Î¼¼¼­µé°ú ´Ù¸£´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ; ÀÌ·± ÄÚµå´Â 486, Pentium Pro, Pentium II, K6 µî°ú´Â ÀÛµ¿ÇÏÁö ¾Ê°í Pentium¿¡ ´ëÇؼ­¸¸ ÀÛµ¿ÇÑ´Ù. ¼º´É¿¡ ´ëÇÑ ´Ù¸¥ ¾ð±ÞÀº, Ä¿´Ù¶õ Ŭ·¯½ºÅ͵éÀ» ¸¸µé°í ±×°ÍÀ» Á¶±×¸¸ °ø°£¿¡ ³Ö°íÀÚ ÇÏ´Â »ç¶÷µé¿¡ Ưº°È÷, ÀûÀýÇÏ´Ù. Àû¾îµµ ¿äÁòÀÇ ¾î¶² ÇÁ·Î¼¼¼­µéÀº ¿Âµµ ¼¾¼­¸¦ ³»ÀåÇÏ°í ÀÖ°í ¿î¿µ ¿Âµµ°¡ ³Ê¹« ³ôÀ» ¶§ ³»ºÎ Ŭ·°À» ´ÊÃß´Â µ¥ »ç¿ëµÇ´Â ȸ·Îµé(¿­ »ý¼ºÀ» ÁÙÀÌ°í ½Å·Úµµ¸¦ ³ôÀÌ´Â ½Ãµµ)À» °¡Áö°í ÀÖ´Ù. ³ª´Â ¸ðµç »ç¶÷µéÀÌ ÆçƼ¿¡<footnote>¿ªÀÚÁÖ: ÆçƼ¿¡ È¿°ú - ÀÌÁ¾(ì¶ðú)ÀÇ ±Ý¼Ó Á¢Ã˸鿡 ¾àÇÑ Àü·ù°¡ Èê·¶À» ¶§ ¿­ÀÌ ¹ß»ý ¶Ç´Â Èí¼öµÇ´Â Çö»ó</footnote> ÀåÄ¡(¿­ ÆßÇÁ)¸¦ »ç¼­ °¢ CPU¸¦ ½ÄÈú ÇÊ¿ä´Â ¾ø´Ù°í Á¦¾ÈÇÏÁö¸¸ ³ôÀº ¿î¿µ ¿­ÀÌ ¼ººÐµéÀÇ »ç¿ë½Ã°£À» ÁÙÀϻӸ¸ ¾Æ´Ï¶ó - ½Ã½ºÅÛ ¼º´ÉÀ» Á÷Á¢ ÁÙÀÏ ¼öµµ ÀÖ´Ù´Â °ÍÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. ¿©·¯ºÐÀÇ ÄÄÇ»Å͵éÀ» °ø±âÈ帧À» Â÷´ÜÇÏ´Â ¹°¸®Àû ¹èÄ¡¼Ó¿¡ ³õÁö ¸»°í Á¦ÇÑµÈ ¿µ¿ª¾È¿¡¼­ ¿­À» Àâ¾Æ¶ó. ±âŸ µîµî. ¸¶Áö¸·À¸·Î ¼º´ÉÀ̶õ ´Ü¼øÈ÷ ¼Óµµ»Ó¸¸ÀÌ ¾Æ´Ï°í ½Å·Úµµ¿Í °¡¿ë¼ºµµ Æ÷ÇԵȴÙ. ³ôÀº ½Å·Úµµ¶õ ¿©·¯ºÐÀÇ ½Ã½ºÅÛÀÌ, ºñ·Ï ±¸¼º ¿ä¼ÒµéÀÌ ½ÇÆÐÇÏ´õ¶óµµ, °ÅÀÇ Àý´ë·Î Á×Áö(crash) ¾Ê´Â´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù... ÀÌ°ÍÀº ÀϹÝÀûÀ¸·Î ¿©ºÐÀÇ ÆÄ¿ö °ø±Þ±â¿Í ÇÖ-½º¿Ò ¸¶´õº¸µå¿Í °°Àº Ư¼ö ±â´ÉµéÀ» ¿ä±¸ÇÑ´Ù. ÀÌ°ÍÀº º¸Åë ½ÎÁö ¾Ê´Ù. ³ôÀº °¡¿ë¼ºÀ̶õ °ÅÀÇ ¸ðµç ½Ã°£¿¡ »ç¿ë °¡´ÉÇÏ´Ù´Â °³³äÀ» ¸»ÇÑ´Ù... ½Ã½ºÅÛÀº ±× ±¸¼º¿ä¼Ò°¡ ½ÇÆÐÇÒ ¶§ Á×À» ¼öµµ ÀÖÁö¸¸ ½Ã½ºÅÛÀº À绡¸® °íÃÄÁö°í ¸®ºÎÆõȴÙ. ¸¹Àº ±âº» À̽´µéÀ» ³íÀÇÇÑ High-Availability HOWTO°¡ ÀÖ´Ù. ±×·¯³ª Ŭ·¯½ºÅÍ¿¡ ´ëÇؼ­ Ưº°È÷, ³ôÀº °¡¿ë¼ºÀº ¸î°³ÀÇ ¿©ºÐÀ» °¡Áö´Â °ÍÀ¸·Î ½±°Ô ȹµæµÉ ¼ö ÀÖ´Ù. ³ª´Â Àû¾îµµ ÇÑ°³ÀÇ ¿©ºÐÀ» ±ÇÀåÇÏ´Â ¹ÙÀÌ°í Ä¿´Ù¶õ Ŭ·¯½ºÅÍ¿¡¼­ 16°³ ±â°è¸¶´Ù Çϳª¾¿ÀÇ ¿©ºÐÀ» Àû¾îµµ °¡Áö´Â °ÍÀ» ¼±È£ÇÑ´Ù. À߸øµÈ Çϵå¿þ¾î¸¦ ¹ö¸®°í ±×°ÍÀ» ¿©ºÐÀÇ °ÍÀ¸·Î ±³Ã¼ÇÏ´Â °ÍÀº À¯Áöº¸¼ö °è¾àº¸´Ùµµ ´õ ³ôÀº °¡¿ë¼º°ú ´õ ³·Àº ºñ¿ëÀ» ¾òÀ»¼ö ÀÖµµ·Ï ÇÑ´Ù. <!-- ------------------------------------------------------------- --> <sect1>°á·Ð - °Å±â¿¡ ÀÖ´Ù. <!-- ------------------------------------------------------------- --> <p> ±×·¡ ¸®´ª½º¸¦ »ç¿ëÇؼ­ º´·Ä 󸮸¦ ÇÏ´Â »ç¶÷ÀÌ Àִ°¡? ±×·¸´Ù! ¸¹Àº »ç¶÷µéÀÌ ¸¹Àº º´·Ä-ó¸® ½´ÆÛÄÄÇ»ÅÍ È¸»çµéÀÌ Á״´ٴ °ÍÀÌ º´·Ä 󸮰¡ ½Ãµé½ÃµéÇØÁö±â ½ÃÀÛÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÏ´Â °ÍÀÌ ¾Æ´Ñ°¡ÇÏ°í »ý°¢Çß´ø °ÍÀº ¾ÆÁÖ ¿À·¡ ÀüÀÇ ÀÏÀÌ ¾Æ´Ï´Ù. ³ª´Â ±×´ç½Ã ±×·² °ÍÀ̶ó°í »ý°¢ÇÏÁö ¾Ê¾Ò°í(³»°¡ ½ÇÁ¦·Î ÀϾ °ÍÀ̶ó°í »ý°¢ÇÑ °Í¿¡ ´ëÇÑ °ÍÀ» Àç¹Ì°Å¸®·Î º¸·Á¸é <url url="http://dynamo.ecn.purdue.edu/~hankd/Opinions/pardead.html">¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù), º´·Ä 󸮰¡ Áö±Ý ¶Ç´Ù½Ã ÀϾ°í ÀÖ´Â °ÍÀº ¸í¹éÇÑ »ç½ÇÀÌ´Ù. ½ÉÁö¾î ¾ó¸¶Àü¿¡ º´·Ä ½´ÆÛÄÄÇ»Å͸¦ ¸¸µå´Â °ÍÀ» ÁßÁöÇÑ IntelÀÌ MMX¿Í ¾ÕÀ¸·Î ³ª¿Ã IA64 EPIC (Explicitly Parallel Instruction Computer)°ú °°Àº °Íµé¿¡¼­ º´·Ä ó¸® Áö¿øÀ» ÇÑ´Ù°í ÀÚ¶ûÇÏ°í ÀÖ´Ù. ¿©·¯ºÐÀÌ ¼±È£ÇÏ´Â °Ë»ö ¿£Áø¿¡¼­ "Linux"¿Í "paralle'À» °Ë»öÇÑ´Ù¸é ¿©·¯ºÐÀº ¸î°³ÀÇ »çÀÌÆ®µéÀÌ ¸®´ª½º¸¦ »ç¿ëÇÑ º´·Ä 󸮿¡ Æ÷ÇԵȴٴ °ÍÀ» ¾Ë°Ô µÉ °ÍÀÌ´Ù. Ưº°È÷ Linux PC Ŭ·¯½ºÅ͵éÀº ¸ðµç °÷¿¡¼­ ¶°¿À¸£´Â °Íó·³ º¸ÀÏ °ÍÀÌ´Ù. PC Çϵå¿þ¾îÀÇ Àúºñ¿ë °í¼º´É°ú ÇÕÃļ­ ¸®´ª½ºÀÇ ÀûÀýÇÔ(appropriateness)´Â ¸®´ª½º¸¦ »ç¿ëÇÑ º´·Ä 󸮸¦ ÀÛ°í, ¿¹»êÀÌ ÀûÀº ±×·ìµé°ú Å©°í ¿¹»êÀÌ ¸¹°í ±¹°¡ÀûÀÎ ¿¬±¸¼Òµé ¸ðµÎÀÇ ÀαâÀÖ´Â ½´ÆÛÄÄÇ»Æà Á¢±ÙÀ¸·Î ¸¸µé¾ú´Ù. ÀÌ ¹®¼­ µµÃ³¿¡ ÀÖ´Â ´Ù¾çÇÑ ÇÁ·ÎÁ§Æ®µéÀÌ ºñ½ÁÇÑ º´·Ä ¸®´ª½º ¼³Á¤À» °¡Áö´Â "À¯»çÇÑ" ¿¬±¸ »çÀÌÆ®µé ¸®½ºÆ®¸¦ °ü¸®ÇÑ´Ù. ±×·¯³ª <url url="http://yara.ecn.purdue.edu/~pplinux/Sites/">¿¡, º´·Ä 󸮿¡ ¸®´ª½º ½Ã½ºÅÛµéÀ» »ç¿ëÇÏ´Â ´Ù¾çÇÑ »çÀÌÆ®µéÀÇ »çÁø, ¼³¸í, ±×¸®°í ¿¬¶ô Á¤º¸µéÀ» Á¦°øÇϱâ À§Çؼ­ °í¾ÈµÈ ¹®¼­µéÀÌ ÀÖ´Ù. <itemize> <item>¿©·¯ºÐÀº ¹Ýµå½Ã "¿µ¼ÓÀûÀÎ" º´·Ä ¸®´ª½º »çÀÌÆ®¸¦ °¡Á®¾ß ÇÑ´Ù: SMP, ±â°èµéÀÇ Å¬·¯½ºÅÍ, SWAR ½Ã½ºÅÛ, ¶Ç´Â ºÎ¼Ó ÇÁ·Î¼¼¼­¸¦ °¡Áö´Â PC µîµîÀº »ç¿ëÀڵ鿡°Ô <em>¸®´ª½º¿¡¼­ º´·Ä ÇÁ·Î±×·¥µéÀ» ¼öÇàÇÒ ¼ö</em> ÀÖµµ·Ï ¼³Á¤µÈ´Ù. º´·Ä 󸮸¦ Á÷Á¢ Áö¿øÇÏ´Â ¸®´ª½º-±â¹Ý ¼ÒÇÁÆ®¿þ¾î ȯ°æ (¿¹, PVM, MPI, AFAPI)ÀÌ ±× ½Ã½ºÅÛ¿¡ ¹Ýµå½Ã ¼³Ä¡µÇ¾î¾ß ÇÑ´Ù. ±×·¯³ª, Çϵå¿þ¾î´Â ¸®´ª½ºÀÇ º´·Ä 󸮿¡ ¸ÅÀÏ ÇÊ¿ä°¡ ¾ø°í º´·Ä ÇÁ·Î±×·¥µéÀÌ ½ÇÇàÁßÀÌ ¾Æ´Ò ¶§ ¿ÏÀüÈ÷ ´Ù¸¥ ¸ñÀûµéÀ» À§Çؼ­ »ç¿ëµÉ ¼ö ÀÖ´Ù. <item>¿©·¯ºÐÀÇ »çÀÌÆ®°¡ ¸®½ºÆ®µÇµµ·Ï ¿ä±¸ÇÏÀÚ. ¿©·¯ºÐÀÇ »çÀÌÆ® Á¤º¸¸¦ <htmlurl url="mailto:pplinux@ecn.purdue.edu" name="pplinux@ecn.purdue.edu">¿¡°Ô º¸³»ÀÚ. ¿©·¯ºÐÀÇ »çÀÌÆ® Á¤º¸¿¡ ´ëÇؼ­ ´Ù¸¥ ¿£Æ®¸®µé¿¡¼­ »ç¿ëµÈ Æ÷¸äÀ» µû¸£±â ¹Ù¶õ´Ù. <em>±× »çÀÌÆ®¿¡ ´ëÇÑ Á¢ÃË °¡´ÉÇÑ »ç¶÷À¸·ÎºÎÅÍÀÇ ¸í½ÃµÈ ¿ä±¸°¡ ¾øÀ¸¸é ¾î¶² »çÀÌÆ®µµ ¸®½ºÆ®¿¡ Ãß°¡µÇÁö ¾ÊÀ» °ÍÀÌ´Ù.</em> </itemize> ÇöÀç ¸®½ºÆ®¿¡´Â 14°³ÀÇ Å¬·¯½ºÅ͵éÀÌ ÀÖÁö¸¸ ¿ì¸®´Â Àû¾îµµ ¼ö½Ê°³ÀÇ Å¬·¯½ºÆ®µéÀÌ Àü¼¼°è¿¡ ÀÖ´Ù´Â °ÍÀ» ¾È´Ù. ¹°·Ð ¸®½ºÆ®°¡ ¾Ï½Ã³ª º¸Áõ, ±âŸ µîµîÀ» ÀǹÌÇÏÁö ¾Ê´Â´Ù; ¿ì¸®´Â ´ÜÁö ¸®´ª½º¸¦ »ç¿ëÇÑ º´·Ä 󸮸¦ Æ÷ÇÔÇÑ ÀνÄ, ¿¬±¸, ±×¸®°í Çù·ÂÀ» ÁõÁøÇϱ⸦ ¹Ù¶ö»ÓÀÌ´Ù. </article>