¾î¼Àºí¸®´Â ¸Å¿ì Àú±ÞÀÇ(? - very low things, Çϵå¿þ¾î ·¹º§ÀÇ) ÀϵéÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù. :
¿©·¯ºÐÀÌ ¾î¼Àºí¸®¸¦ »ç¿ëÇϸé, ƯÁ¤ ÇÁ·Î¼¼¼¿¡¸¸ ÀÖ´Â ·¹Áö½ºÅͳª I/O ¸¦ ¹Ù·Î Á¢±ÙÇÒ ¼ö ÀÖ´Ù.(you can access machine-dependent registers and I/O)
Å©¸®Æ¼Äà ¼½¼Ç µî¿¡¼ µ¥µå¶ô°ú °°Àº ÀÏÀ» ¾ß±âÇÒ ¼ö ÀÖ´Â ¿©·¯°³ÀÇ ÇÁ·Î¼¼½º ¾²·¹µåµéÀÇ ÄÚµå µ¿ÀÛÀ» ¸Å¿ì Á¤È®ÇϰÔ(!) ÄÁÆ®·Ñ ÇÒ ¼ö ÀÖ´Ù. Áï, ÄÚµå ÇϳªÇϳªÀÇ µ¿ÀÛÀ» ¸ðµÎ Á¦¾îÇϰí, ¿©·¯ºÐÀÌ »ý°¢ÇÑ ´ë·Î ¿òÁ÷ÀÌ°Ô ÇÒ ¼ö ÀÖ´Ù.(¿ªÀÚ ÁÖ: ¹°·Ð, ¿©±â¿¡´Â ±×¸¸ÅÀÇ ³ë·Â°ú ´ñ°¡°¡ µû¸¥´Ù.)
ÀϹÝÀûÀÎ ÄÄÆÄÀÏ·¯°¡ Á¦°øÇϴ ȯ°æ°ú, »ý¼ºÇÏ´Â ÄÚµåÀÇ ±ÔÄ¢µéÀ» ¹«½ÃÇÑ Ã¤ ÀÛ¾÷ÇÒ ¼ö ÀÖ´Ù. ´Ù½Ã ¸»Çؼ, ¼ÓµµÀÇ ÃÖÀûÈ µîÀ» À§ÇØ ¸Þ¸ð¸® ÇÒ´ç¿¡ °üÇÑ ±ÔÄ¢À̳ª, ¾²·¹µù, ÇÔ¼ö È£Ãâ ±ÔÄ¢°ú °°Àº °ÍµéÀ» ÀϽÃÀûÀ¸·Î ¹«½ÃÇϰí ÇÁ·Î±×·¡¹Ö ÇÒ ¼ö ÀÖ´Ù.
¼·Î ´Ù¸¥ ±Ô¾àÀ» »ç¿ëÇÏ´Â ¿©·¯°³ÀÇ ÄÚµåµé °£ÀÇ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÃàÇÒ ¼ö ÀÖ´Ù. (¿¹¸¦ µé¸é, ´Ù¸¥ ÄÄÆÄÀÏ·¯µé·Î »ý¼ºµÈ ÄÚµåµéÀÌ »óÈ£ ÀÛ¿ëÇÒ ¼ö ÀÖµµ·Ï ¸¸µç´ÙµçÁö, low-·¹º§ ÀÎÅÍÆäÀ̽º°¡ »óÀÌÇÑ ÄÚµåµéÀÇ ÀÎÅÍÆäÀ̽º¸¦ ÅëÀÏÇÑ´ÙµçÁö ÇÏ´Â ÀÏ ¸»ÀÌ´Ù.)
ÀϹÝÀûÀÎ °í¼öÁØ ¾ð¾î(c ³ª pascal °°Àº)¿ë ÄÄÆÄÀÏ·¯·Î´Â »ý¼ºÇϱâ Èûµç ƯÁ¤ ÇÁ·Î¼¼¼ÀÇ Æ¯¼öÇÑ(!) ÇÁ·Î±×·¡¹Ö ¸ðµå¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. À̸¦Å׸é, ÀÎÅÍÆäÀ̽º ½ºÅ¸Æ®¾÷À» À§ÇØ ÇÁ·Î¼¼¼ÀÇ 16ºñÆ® ¸ðµå¸¦ »ç¿ëÇÑ´ÙµçÁö, Æß¿þ¾î¿ë ÇÁ·Î±×·¥À» ¸¸µç´ÙµçÁö, ÀÎÅÚ ÄÄÇ»ÅÍ¿¡¼ ·¹°Å½Ã ÄÚµå(legacy code)¸¦ ¸¸µç´ÙµçÁö ÇÏ´Â ÀÏÀ» ¾î¼Àºí¸®¸¦ »ç¿ëÇØ¼ ÇÒ ¼ö ÀÖ´Ù.
¶ÇÇÑ, ÄÚµå ÃÖÀûȸ¦ Á¦´ë·Î ½ÃŰÁö ¸øÇÏ´Â ³ª»Û(!) ÄÄÆÄÀÏ·¯ÀÇ Äڵ带 Á÷Á¢(!) ÃÖÀûÈ ½ÃÄѼ ±×·± ÄÄÆÄÀÏ·¯°¡ »ý¼ºÇÑ ´À·ÁÅÍÁö°í ºÒÇÊ¿äÇÑ ·çÇÁ³ª ·çƾµéÀ» ¸Å¿ì ºü¸£°í, È¿À²ÀûÀÎ ·çÇÁ·Î ¹Ù²Ù¾î ÁÙ ¼ö ÀÖ´Ù. (±×·¯³ª, ¸Å¿ì ÁÁÀº free ÄÄÆÄÀÏ·¯µéÀÌ ÀÖ´Ù. gcc ó·³)
¿©·¯ºÐÀÇ Çϵå¿þ¾î ¼³Á¤¿¡¸¸ ¿Ïº®ÇÏ°Ô ÃÖÀûÈµÈ Äڵ带 Á÷Á¢ Á¦ÀÛÇÒ ¼ö ÀÖ´Ù. ±×·³À¸·Î½á, ¹ü¿ëÀûÀÎ (ÀϹÝÀûÀÎ) ȣȯ(?)À» À§ÇÑ ºÒÇÊ¿äÇÑ ±º»ìÀ» ¿©·¯ºÐÀÇ Äڵ忡¼ »¬ ¼ö ÀÖ´Ù.
¸¸¾à ¿©·¯ºÐÀÌ »õ·Î¿î ¾ð¾î¸¦ ¸¸µé°í, ±× ¾ð¾î¸¦ À§ÇØ ÄÄÆÄÀÏ·¯¸¦ ¸¸µç´Ù¸é, (±×·± ÀÏÀ» ÇÏ´Â »ç¶÷Àº ¸î¸í ¾ÈµÇ°í, ¶Ç, ÀÚÁÖ ±×·¯Áöµµ ¾ÊÁö¸¸) ¿©·¯ºÐÀÇ ÄÄÆÄÀÏ·¯°¡ ÃÖÀûÀÇ Äڵ带 »ý»êÇÒ ¼ö ÀÖµµ·Ï Á¶Á¤ÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù.
¾î¼Àºí¸®´Â ¸Å¿ì Àú¼öÁØÀÇ ¾ð¾îÀÌ´Ù. (ÀÌÁø ±â°è¾î ÀνºÆ®·°¼ÇÀ» ±×´ë·Î ½Éº¼È ÇѰͿ¡ Áö³ªÁö ¾Ê´Â´Ù.) À̰ÍÀº ´ÙÀ½°ú °°Àº Àǹ̸¦ °¡Áø´Ù :
¾î¶² ÇÁ·Î±×·¥À» óÀ½ºÎÅÍ ¾î¼Àºí¸® Äڵ带 ÀÌ¿ëÇÏ¿© ÀÛ¼ºÇÏ´Â ÀÏÀº ¸Å¿ì ¿À·¡ °É¸®°íµµ Â¥Áõ³ª´Â ÀÛ¾÷ÀÌ´Ù.
¹ö±×°¡ ¹ß»ýÇÒ È®·üÀÌ ¸Å¿ì(!) ¸Å¿ì ³ô´Ù.
°Ô´Ù°¡ ¹ö±×¸¦ ÃßÀûÇØ¼ Àâ¾Æ³»±â¶õ ²ûÂïÇÒ Á¤µµ·Î ¾î·Æ´Ù.
¿©·¯ºÐÀÌ ÀÛ¼ºÇÑ Äڵ带 ÀÌÇØÇϱ⵵ ¾î·Á¿ï »Ó¸¸ ¾Æ´Ï¶ó ¼öÁ¤Çϱ⵵ ¾î·Æ±â ±×Áö¾ø´Ù. Áï, À¯Áö º¸¼ö°¡ ¾î·Æ´Ù.
¾î¼Àºí¸®·Î ÄÚµùÀ» ÇÑ °á°ú¹°Àº ÇöÁ¸Çϰųª ¾ÕÀ¸·Î °³¹ßµÉÁöµµ ¸ð¸£´Â ´Ù¸¥ ¾ÆÅ°ÅØÃÄÀÇ ¸Ó½ÅÀ¸·Î À̽ÄÇÒ ¼ö ¾ø´Ù.
¿©·¯ºÐÀÌ ¾î¼Àºí¸®·Î ÃÖÀûȽÃÄÑ ÀÛ¼ºÇÑ ÄÚµå´Â ¿©·¯ºÐÀÌ °³¹ßÇÑ Å¸°ÙÀÌ µÇ´Â ¾ÆÅ°ÅØÃÄ¿Í µ¿ÀÏÇÑ ¾ÆÅ°ÅØÃĸ¦ °¡Áö°í, ¶Ç, µ¿ÀÏÇÑ ¼³Á¤À» Çϰí, µ¿ÀÏÇÑ È¯°æÀ» °¡Áø ±â°è¿¡¼¸¸ ¼öÇàµÉ °ÍÀÌ´Ù. ¿¹±Û µé¸é, ÀÎÅÚ °è¿ÀÇ ÇÁ·Î¼¼¼µé(Intel 386, 486, Pentium, PPro, PII, PIII, PIV; Cyrix 5x86, 6x86, M2; AMD K5, K6 (K6-2, K6-III), K7 (Athlon, Duron).µî) ¸¸ º¸´õ¶óµµ ´Ùµé ÇÁ·Î¼¼¼ÀÇ µðÀÚÀÎÀ̳ª ±× ¿Ü ¿©·¯ ¿ä¼Òµé(»ó´ëÀû Ŭ·° Áö¿¬½Ã°£(?), ¼öÇà¼Óµµ, ¿ë·®, ij½¬, ·¥, ¹ö½º, µð½ºÅ©, FPU ÀÇ Á¸Àç¿©ºÎ, MMX, 3DNOW, SIMDÈ®Àå µîµî... ³ª¿Çϱ⵵ Èûµé´Ù)ÀÇ Â÷ÀÌ·Î ÀÎÇØ¼ ÇÁ·Î¼¼¼¸¶´Ù ¶Ç, ±× ÁÖº¯ ȯ°æ¿¡ µû¶ó¼ ¿Ïº®ÇÏ°Ô ´Ù¸¥ ÃÖÀûÈ Å×Å©´ÐÀÌ ÇÊ¿äÇÏ´Ù. °Ô´Ù°¡ ÇÁ·Î¼¼¼ÀÇ ¼³°è/µðÀÚÀÎÀº °è¼ÓÀûÀ¸·Î º¯Çϰí, ¹Ù²î°í, ¹ßÀüÇϰí Àֱ⠶§¹®¿¡, ¹æ±Ý ³ª¿ÇÑ ¸ñ·Ï°ú ¶ÇÇÑ, ¿©·¯ºÐÀÌ ÃÖÀûȽÃŲ Äڵ尡 ÃÖ½ÅÀÇ(!) Äڵ尡 µÇ±â¸¦ ¹Ù¶ó´Â°ÍÀº ¸»µµ ¾ÈµÈ´Ù.
°Ô´Ù°¡, ÀÚÀßÇÑ ¼¼¹ÐÇÑ ºÎºÐ¿¡ ½Å°æÀ» ¾²´À¶ó ÇÁ·Î±×·¥ ÀüüÀÇ ¾Ë°í¸®ÁòÀ̳ª ¼³°è¿¡ ½Å°æÀ» ¾²Áö ¸øÇÒ °¡´É¼ºÀÌ ´ÙºÐÈ÷ Á¸ÀçÇÑ´Ù.
you spend more time on a few details and can't focus on small and large algorithmic design, that are known to bring the largest part of the speed up (e.g. you might spend some time building very fast list/array manipulation primitives in assembly; only a hash table would have sped up your program much more; or, in another context, a binary tree; or some high-level structure distributed over a cluster of CPUs)
¾Ë°í¸®Áò ¼³°è¸¦ Á¶±Ý¸¸ ¹Ù²Ù¾îµµ ÀÌ¹Ì ¸¸µé¾îµÐ ¾î¼Àºí¸® ÄÚµåÀÇ Àüü¸¦ ´Ù½Ã ¸¸µé¾î¾ß ÇÒÁöµµ ¸ð¸¥´Ù.
¹¹, Ç¥ÁØ º¥Ä¡¸¶Å© µî, ¾öû³ ¼öÇà¼Óµµ°¡ ÇÊ¿äÇÏÁö ¾ÊÀº ÇÁ·Î±×·¥À̶ó¸é, »ó¿ë ÄÄÆÄÀÏ·¯µéÀÌ ¸¸µé¾î³»´Â ¾î¼Àºí¸® Äڵ嵵 ¼ÕÀ¸·Î ¸¸µç°Í ó·³ ÁÁÀº Äڵ带 »ý»êÇÑ´Ù. gcc µµ »ó´çÈ÷ ÁÁÀº ÄÄÆÄÀÏ·¯ÀÌ´Ù.
±×¸®°í, ÄÄÆÄÀÏ·¯ ´º½º±×·ì (comp.compilers) ÀÇ moderator ÀÎ John Levine ÀÌ ¸»ÇÑ ³»¿ëÀ» ÀοëÇϰڴÙ.
"ÄÄÆÄÀÏ·¯´Â º¹ÀâÇÑ ÀڷᱸÁ¶¸¦ ´Ù·ç±â ½±°Ô µµ¿ÍµÐ´Ù. ±×¸®°í, ÄÄÆÄÀÏ·¯¸¦
»ç¿ëÇÑ ÇÁ·Î±×·¥Àº ±×¸® Áö·çÇÏÁöµµ ¾ÊÀ¸¸ç, °Ô´Ù°¡ ¸Å¿ì ÁÁÀº ǰÁúÀÇ Äڵ带 »ý»êÇØÁØ´Ù."
"compilers make it a lot easier to use complex data structures,
and compilers don't get bored halfway through
and generate reliably pretty good code."
ÄÄÆÄÀÏ·¯µéÀº °Å´ëÇÑ ÇÁ·Î±×·¥ Àüü¿¡ °ÉÃÄ ÇÔ¼öµé°ú, ¸ðµâµé °£ÀÇ ÀÎÅÍÆäÀ̽º ÄÚµå ÃÖÀûÈ¿Í °°Àº °ÍµéÀ» Á¤È®ÇÏ°Ô ¼öÇàÇØ ÁØ´Ù.
¿ä¾àÇÏÀÚ¸é, ¿©·¯ºÐÀº ¾î¼Àºí¸®°¡ ÇÊ¿äÇÑ °æ¿ì¸¦ °¡²û ¹ß°ßÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×¸®°í, ¾î¶² °æ¿ì¿¡´Â ²À ÇÊ¿äÇÏÁö´Â ¾Ê¾Æµµ ¾î¼Àºí¸®·Î ÄÚµùÇÏ´Â °ÍÀÌ À¯¿ëÇÑ °æ¿ì¸¦ ¹ß°ßÇÒ ¼öµµ ÀÖÀ» °ÍÀ̸ç, ¿©·¯ºÐÀÌ ±×·¸°Ô ´À³¤´Ù¸é, ±×·¸°Ô Ç϶ó. ´ÜÁö, ´ÙÀ½ »çÇ×µéÀ» ¸í½ÉÇϰí, ±×·¸°Ô ÇÑ´Ù¸é ÁÁÀ» °ÍÀÌ´Ù. :
¾î¼Àºí¸® ÄÚµåÀÇ »ç¿ëÀ» ÃÖ¼ÒÈÇ϶ó
¸Å¿ì Àß Á¤ÀÇµÈ ÀÎÅÍÆäÀ̽º ³»ºÎ·Î ¾î¼Àºí¸® Äڵ带 ĸ½¶È(!)Ç϶ó.
¿©·¯ºÐÀÇ ¾î¼Àºí¸® Äڵ尡 º¸´Ù °í¼öÁØÀÇ ¾ð¾îÆÐÅÏÀ¸·ÎºÎÅÍ ÀÚµ¿ÀûÀ¸·Î »ý¼ºµÈ ÄÚµåÀΰ¡? (¿¹¸¦ µé¸é gcc ÀÇ ÀζóÀÎ ¾î¼Àºí¸® ¸ÅÅ©·Î µî°ú °°Àº)
±× ÇÁ·Î±×·¥µéÀ» ¾î¼Àºí¸® ÄÚµå·Î ¹ø¿ªÇÑ ÈÄ ºñ±³ÇØ º¸¶ó
have automatic tools translate these programs into assembly code
°¡´ÉÇÑ ¸¸Å ÄÚµåµéÀÌ ÃÖÀûÈ µÇ¾ú´Â°¡(have this code be optimized if possible)
À§ÀÇ »çÇ×µéÀ» Àß Ã¼Å©ÇØ º¸°í, ÃÖÀûÈµÈ ÁÁÀº Äڵ带 »ý»êÇÏ´Â ÄÄÆÄÀÏ·¯ÀÇ back-end ¸¦ Àß ÀÌ¿ëÇ϶ó.
All of the above, i.e. write (an extension to) an optimizing compiler back-end.
ºñ·Ï ¿î¿µÃ¼Á¦ °³¹ß°ú °°ÀÌ ¾î¼Àºí¸®°¡ ²À ÇÊ¿äÇÑ °Íó·³ º¸ÀÌ´Â °æ¿ì¶ó ÇÒÁö¶óµµ À§¿¡¼ ¾ð±ÞÇÑ ³»¿ëµéÀ» ÁÖÀDZí°Ô »ý°¢ÇØ º» ÈÄ¿¡ ¾î¼Àºí¸®ÀÇ »ç¿ë ¿©ºÎ¸¦ °áÁ¤Ç϶ó
¸®´ª½ºÀÇ Ä¿³Î ¼Ò½º¸¦ Çѹø º¸µµ·Ï Ç϶ó : ¸®´ª½ºÀÇ Ä¿³ÎÀº ÇÊ¿äÇÑ Á¤¸» ÃÖ¼Ò(!)ÀÇ ¾î¼Àºí¸® Äڵ常 »ç¿ëµÇ¾ú´Ù. ±× °á°ú·Î ºü¸£°í, ½Å·Ú¼ºÀÖ°í, Æ÷ÅͺíÇϸç, À¯Áöº¸¼öÇϱ⠿ëÀÌÇÑ ¿î¿µÃ¼Á¦ÀÇ Äڵ尡 »ý¼ºµÇ°Ô µÇ¾ú´Ù. °Ô´Ù°¡ µÒ°ú °°Àº °ÔÀÓÁ¶Â÷µµ ¼Óµµ Çâ»óÀ» À§ÇÑ ÀϺΠ¸Å¿ì ÀÛÀº ·çƾÀ» Á¦¿ÜÇϰí´Â ´ëºÎºÐ c ¸¦ ÀÌ¿ëÇØ¼ ¸¸µé¾îÁ³´Ù´Â »ç½ÇÀ» Ç×»ó »ó±âÇ϶ó.