GccOptimizationOptionsÀÔ´Ï´Ù. = GCC Optimization Options = gcc version 3.2.2 ±âÁØ. gcc version 3.4.6 ±âÁØ. == Option Details == gcc´Â ±âº»ÀûÀ¸·Î ¾Æ¹«·± ¿É¼ÇÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é, ¸¸µé¾îÁö´Â Äڵ带 ÃÖÀûÈ­(optimization)½ÃÅ°Áö ¾Ê½À´Ï´Ù. ÃÖÀûÈ­¸¦ À§ÇØ, ¿©·¯°¡Áö ¿É¼ÇÀ» Á¦°øÇϴµ¥ (¾Æ·¡ Ç¥ Âü°í), ÀÌµé ¿É¼ÇÀ» ÀÏÀÏÈ÷ ¼±ÅÃÇϱ⠺¸´Ù´Â ÀÌµé ¿É¼ÇÀ» ¼¼Æ®·Î ¹­¾î Á¦°øÇÏ´Â '-O', '-O1', '-O2', '-O3' µîÀ» ÀϹÝÀûÀ¸·Î ¾¹´Ï´Ù. (Âü°í·Î '-O0'´Â ÀüÇô ÃÖÀûÈ­ÇÏÁö ¸»¶ó´Â, default ¿É¼ÇÀÔ´Ï´Ù.) '-O' ¶Ç´Â '-O1'ÀÇ °æ¿ì, ¸¸µé¾îÁö´Â ¿ÀºêÁ§Æ®, ¶Ç´Â ½ÇÇà ÆÄÀÏÀ» °¡´ÉÇÑ ÀÛ°Ô Çϸ鼭, ÄÄÆÄÀÏ ½Ã°£ÀÌ ¿À·¡°É¸®Áö ¾Ê´Â ¹üÀ§¿¡¼­ ÃÖÀûÈ­¸¦ ¼öÇàÇÕ´Ï´Ù. '-O2'ÀÇ °æ¿ì, ¸¸µé¾îÁö´Â Äڵ尡 °¡´ÉÇÑ ºü¸£°Ô ¼öÇàµÇµµ·Ï ÇÏÁö¸¸, ÄÚµåÀÇ Å©±â°¡ ³Ê¹« Ä¿ÁöÁö ¾Êµµ·Ï ÇÏ´Â ¹üÀ§¿¡¼­ ÃÖÀûÈ­¸¦ ¼öÇàÇÕ´Ï´Ù. '-Os'ÀÇ °æ¿ì, '-O2'¿¡¼­ Á¦°øÇÏ´Â ¸ðµç ÃÖÀûÈ­ ±â´ÉÀ» ´Ù ¾²Áö¸¸, ÄÚµåÀÇ Å©±â¸¦ Áõ°¡½ÃÅ°´Â ÃÖÀûÈ­ ±â´ÉÀº »©°í ³ª¼­ ÃÖÀûÈ­¸¦ ¼öÇàÇÕ´Ï´Ù. '-O3'ÀÇ °æ¿ì, ÄÚµåÀÇ Å©±â´Â ÀüÇô ½Å°æ ¾²Áö ¾Ê°í, ¿ÀÁ÷ ºü¸¥ Äڵ带 ¸¸µé¾î ³»±â À§ÇØ ÃÖÀûÈ­¸¦ ¼öÇàÇÕ´Ï´Ù. ±×·¯³ª, ²À »ý°¢ÇØ µÎ¾î¾ß ÇÒ Á¡Àº, '-O3'·Î ¸¸µé¾î³½ Äڵ尡 ¹Ýµå½Ã '-O2'¸¦ ½á¼­ ¸¸µé¾î³½ Äڵ庸´Ù ºü¸£´Ù´Â º¸ÀåÀº ¾ø´Ù´Â °ÍÀÔ´Ï´Ù. ¿Ö³ÄÇϸé, º¸Åë CPU°¡ ±â°è¾î¸¦ ¼öÇàÇÒ ¶§, ÀÏÁ¤ÇÑ ºÐ·®¸¸Å­ ¸ÕÀú CPU ³»ºÎÀÇ cache(ij½Ã)¿¡ ºÒ·¯¿Í¼­ ¼öÇàÇϴµ¥, '-O3'¸¦ ½á¼­ ¸¸µç ÄÚµå´Â ´ë°³ Å©±â°¡ Ä¿¼­, ÀÌ cache¿¡ µé¾î°¥ ¼ö ÀÖ´Â ¸í·ÉÀÇ ¾çÀÌ »ó´ëÀûÀ¸·Î Àû¾îÁö±â ¶§¹®¿¡, ¿ÀÈ÷·Á ´À·ÁÁú °¡´É¼ºµµ ÀÖ½À´Ï´Ù. || |||||||| Included in Level || || Optimization || -O1 || -O2 || -Os || -O3 || || defer-pop || O || O || O || O || || thread-jumps || O || O || O || O || || branch-probabilities || O || O || O || O || || cprop-registers || O || O || O || O || || guess-branch-probability || O || O || O || O || || [wiki:GccOptionOmitFramePointer omit-frame-pointer] || O || O || O || O || || merge-constants || O || O || O || O || || loop-optimize || O || O || O || O || || if-conversion || O || O || O || O || || if-conversion2 || O || O || O || O || || align-loops || X || O || X || O || || align-jumps || X || O || X || O || || align-labels || X || O || X || O || || align-functions || X || O || X || O || || crossjumping || X || O || O || O || || prefetch-loop-array || ? || ? || X || ? || || optimize-sibling-calls || X || O || O || O || || cse-follow-jumps || X || O || O || O || || cse-skip-blocks || X || O || O || O || || gcse || X || O || O || O || || gcse-lm || X || O || O || O || || gcse-sm || X || O || O || O || || gcse-las || X || O || O || O || || expensive-optimizations || X || O || O || O || || strength-reduce || X || O || O || O || || rerun-cse-after-loop || X || O || O || O || || rerun-loop-opt || X || O || O || O || || caller-saves || X || O || O || O || || [wiki:GccOptionForceMem force-mem] || X || O || O || O || || peephole2 || X || O || O || O || || regmove || X || O || O || O || || strict-aliasing || X || O || O || O || || delete-null-pointer-checks || X || O || O || O || || reorder-blocks || X || O || O || O || || reorder-functions || X || O || O || O || || unit-at-a-time || X || O || ? || O || || schedule-insns || X || O || O || O || || schedule-insns2 || X || X || X || O || || schedule-interblock || X || O || ? || O || || sched-spec || X || O || ? || O || || inline-functions || X || X || X || O || || rename-registers || X || X || X || O || || web || X || X || X || O || || unswitch-loops || X || X || ? || O || '-On' (n=1, 2, 3) ²ÃÀÇ ¿É¼Ç°ú ´õºÒ¾î À§ Ç¥ÀÇ ¿ÞÆí ¿É¼ÇÀ» ¼¯¾î ¾µ ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, À§ Ç¥¿¡ µû¸£¸é '-O2'¸¦ ¾µ °æ¿ì, 'inline-function' ÃÖÀûÈ­´Â Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. µû¶ó¼­ ´ÙÀ½°ú °°ÀÌ '-O2'¿¡ ÇØ´çÇÏ´Â ¸ðµç ÃÖÀûÈ­ ±â¹ýµé°ú '-inline-functions'À» ÇÔ²² ¾µ ¼ö ÀÖ½À´Ï´Ù: {{{ $ gcc -O2 -finline-funtions hello.c }}} ¹°·Ð, ƯÁ¤ ¿É¼Ç ±â´ÉÀ» »©´Â °Íµµ °¡´ÉÇÕ´Ï´Ù. ¾Æ·¡´Â '-O3'°¡ Á¦°øÇÏ´Â ¸ðµç ÃÖÀûÈ­ ±â¹ýÀ» Àû¿ëÇÏÁö¸¸ 'inline-functions' ÃÖÀûÈ­¸¸ »©°í ÄÄÆÄÀÏÇÏ´Â °ÍÀ» º¸¿©ÁÝ´Ï´Ù. {{{ $ gcc -O3 -fno-inline-functions hello.c }}} Áï, À§ Ç¥ÀÇ ¿ÞÆí ºÎºÐÀÇ ¿É¼ÇÀ» Àû¿ë½ÃÅ°·Á¸é(on) "-f¿É¼ÇÀ̸§"À» ¾²°í, ²ô·Á¸é(off), "-fno-¿É¼ÇÀ̸§" ²ÃÀ» ¾¹´Ï´Ù. || Target CPU Types || -march= Type || ||i386 DX/SX/CX/EX/SL ||i386|| ||i486 DX/SX/DX2/SL/SX2/DX4 ||i486|| ||487 ||i486|| ||Pentium ||pentium|| ||Pentium MMX ||pentium-mmx|| ||Pentium Pro ||i686, pentiumpro|| ||Pentium II ||pentium2|| ||Celeron ||pentium2|| ||Pentium III ||pentium3|| ||Pentium IIIM ||pentium3m|| ||Pentium M ||pentium-m|| ||Pentium 4 ||pentium4|| ||Pemtium 4M ||pentium4m|| ||Pentium 4 Prescott||prescott|| ||Pentium 4 Xeon, Nocona ||nocona|| ||Via C3 ||c3|| ||Winchip 2 ||winchip2|| ||Winchip C6-2 ||winchip-c6|| ||AMD K5 ||i586|| ||AMD K6 ||k6|| ||AMD K6 II ||k6-2|| ||AMD K6 III ||k6-3|| ||AMD Athlon ||athlon|| ||AMD Athlon 4 ||athlon-4|| ||AMD Athlon XP ||athlon-xp|| ||AMD Athlon MP ||athlon-mp|| ||AMD Duron ||athlon|| ||AMD Tbird ||athlon-tbird|| ||AMD K8 ||k8|| ||AMD Opteron ||opteron|| ||AMD Athlon 64 ||athlon64|| ||AMD Athlon FX ||athlon-fx|| ||IDT Winchip C6 ||winchip-c6|| ||IDT Winchip2 ||winchip2|| ||Via C3 ||c3|| ||Via C3-2 ||c3-2|| ¾Æ·¡ PDF´Â °£´ÜÇÑ XML tree¸¦ memory¿¡ buildÇÏ´Â ÇÁ·Î±×·¥À» ¿©·¯ °¡Áö ÃÖÀûÈ­ ¿É¼ÇÀ» ½á¼­ ÄÄÆÄÀÏÇÑ ÈÄ, ½ÇÇà ½Ã°£À» Àç º» °ÍÀÔ´Ï´Ù. [http://www.cinsk.org/~cinsk/kldp/benchmark-gcc-opt.pdf Benchmark Data Sheet] attachment:benchmark-gcc-opt.pdf == References == ÀÌ ±ÛÀÇ ´ëºÎºÐÀº [http://www.linuxjournal.com/ Linux Journal]ÀÇ 2005³â 3¿ùÆÇ¿¡ ³ª¿Â, M. Tim Jones¾¾°¡ ¾´ "[http://interactive.linuxjournal.com/article/7269 Optimization in GCC]"¸¦ Åä´ë·Î ¸¸µç °ÍÀÔ´Ï´Ù. ¿ø¹®À» º¸½Ã¸é ´õ ÁÁÀ» °Í °°½À´Ï´Ù. GCC Info ManualÀ» º¸½Ã¸é ÃÖ½ÅÀÇ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ¶Ç´Â [http://www.gnu.org/software/gcc/onlinedocs/ GCC Online Documentation]À» Âü°íÇϱ⠹ٶø´Ï´Ù. [http://portal.acm.org/ft_gateway.cfm?id=979948&type=pdf Strength Reduction for Loop-Invariant Types] by Phung Hua Nguyen and Jingling Xue (°¡ÀÔÇϽðí loginÇÏ½Ã¸é º¼ ¼ö ÀÖ½À´Ï´Ù.) [http://portal.acm.org/citation.cfm?id=808480 Global Common Subexpression Elimination] by John Cocke ---- [http://wiki.kldp.org/wiki.php/CodeFest/20050218 KLDP Codefest 2005-02-18]¿¡¼­ ½èÀ½ -- [http://www.cinsk.org/ ½Å¼º±¹] 2006-08-28 GCC 3.4.6 ³»¿ë Ãß°¡ -- [http://www.cinsk.org/ ½Å¼º±¹] ---- CategoryCompilation