K7ºÍK8 ½âÂëÆ÷(Decoders)ºÍ¹ÜÏß(Pipelines)µÄÇø±ð
ÏÖÔÚÈÃÎÒÃÇÀ´±È½ÏK7ºÍK8 ¡£ÔÚÎÄÕµÄÇ°Ãæ²¿·ÖÎÒÃÇÔø¾Ëµµ½¹ÜÏßÓм¸¸ö£¬ÉõÖÁ¸ü¶àµÄ²ã¡£ËüÃÇÓë½âÂëÆ÷ÓиüÉî²ã´ÎµÄ½Ó´¥£¬ÌرðÊǽâÂëÆ÷µÄÃüÃûÎÞÂÛ´ÓÖÊÁ¿»¹ÊÇÊýÁ¿À´Ëµ¶¼ÓÐÁ˺ܴóµÄ¸Ä±ä ¡£
ΪÁËÈôó¼Ò¸ü¼ÓÃ÷È·µØÁ˽⵽¸Ä±ä£¬ÏÖÔÚÏÈÈÃÎÒÃÇ¿´¿´K7½âÂëÆ÷¡£ÔÚ֮ǰÈÃÎÒÃÇÃèÊöÒ»ÏÂʲôÊǽâÂëÆ÷£¬"decoder"(½âÂëÆ÷)ÊõÓﱻʹÓÃÔÚK7¼Ü¹¹µÄºÜ¶àµØ·½:
-
Predecoder -- ÔÚÖ¸ÁîдÈëI-cache֮ǰ¶ÔËüÃǽøÐзÖÎö£¬¼ì²âËüÃÇµÄÆðʼºÍ½áÊøµØÖ·£¬Ç°×ºÎ»ÖúͽâÂëÀàÐÍ(DirectPath ºÍ VectorPath£»Õ⽫ÔÚºóÃæ½âÊÍ£©¡£ËùÓÐÕâЩÄÚÈݶ¼´¢´æÔÚL1 cache µÄÌØ¶¨½âÂëÕóÁÐbitsÀͬʱËü»áÈÏʶ"goto"Ö¸Á²¢Ô¤±¸·ÖÖ§Ñ¡ÔñÆ÷À´Ñ¡Ôñ¿ìËÙµÄÔ¤²â£¬²¢gotoתµ½¼ì²âµ½µÄµØÖ·¡£Prerecording ÔÚËٶȲ»¿ì¹ý4 bytes/ʱÖÓµÄʱºò½«¿ªÊ¼×÷Óá£
-
Decoder(½âÂëÆ÷)±¾Éí -- ´ÓI-cache ¶ÁÈ¡ x86 Ö¸Áî µ½mOPs,²¢½øÐÐת»»ÅÅÁкͱê¼Ç ¡£
ÎÒÃÇÄܹ»ÔÚK7µÄ½âÂë¹ý³ÌÖп´µ½Ëü°üº¬ÁËһϵÁеIJÙ×÷£¬ÕâÀïÎÒÃdzÆ"decoder"ûÓнøÐÐÉî²ã´ÎµÄÍÚ¾ò¡£ÏÖÔÚÈÃÎÒÃdzÎÇåÔÚ#1Ìáµ½µÄDirectPath ºÍ VectorPath ÊõÓ﾿¾¹ÊÇʲôÒâ˼¡£K7 µÄ½âÂëÆ÷Äܹ»Í¨¹ýDirectPath »òÕß VectorPath À´´¦Àíx86 Ö¸ÁǰÕߣ¬DirectPath ½ö´¦Àíת»»Îªµ¥¸ömOPsµÄx86 Ö¸Áî ¡£
ÆäËüµÄÖ¸ÁîÔòÓÉVectorPath ´¦Àí£¬²¢°ÑËüÃÇת»»ÎªÁ¬ÐøµÄÁ½¸ö»òÕ߸ü¶àµÄmOPs ¡£ÔÚÕâЩָÁîÖÐ(°üÀ¨×ÔÓµÄÕûÊý·Ö¸î/integer division)¶¼Ê¹ÓÃÁËMicrocode Engine ¡£Í¨¹ýÄÚ½¨µÄ±íµ¥£¬ËüÄܹ»°Ñx86Ö¸Áî·Åµ½mOPs ÐòÀïÃæ¡£
ÈÃÎÒÃǼì²âÒ»ÏÂK7 decoderºÍpipeline µÄÔË×÷£º

-
1.FETCH(È¡):predecoder(Ô¤½âÂëÆ÷)´ÓI-cache ¶ÁÈ¡16 bytes £¬²¢Í¬²½¼ì²â½«Òª½øÐÐfetch(È¡)µÄϸö¶Î ¡£Ë³±ã˵һÏ£¬K8Ò²ÊǶÁÈ¡16 bytes µÄ¡£ÔÚÌØ¶¨µÄÇé¿öÏ£¨Èç¹ûx86Ö¸Áî´óÓÚ16/3 bytes)£¬Õâ¸ö½×¶Î½«±äΪÏÞÖÆµÄÒòËØÖ®Ò»¡£ ƽ¾ùµÄx86Ö¸ÁîÈÝÁ¿ÔÚ5-6 bytes ¡£
-
2.SCAN(ɨÃè):Ô¤ÏÈÅÅÁкõÄDecode Array(½âÂëÕóÁÐ)±»·Ö¿ª£¬²¢·Ö±ðͨ¹ýDirectPath »òÕßVectorPath¡£³¬¹ý6¸öµ¥¶ÀµÄÖ¸Á·¢Ë͵½DirectPath£¬ÈôÖ»Óе¥¸öÖ¸Á½øÈëVectorPathºÍMicrocode Engine ¡£
-
3.ALIGN1(ÅÅÁÐ):ÔÚÕâ¸ö½×¶Î£¬¿ÉÒÔ»º³å³¬¹ý9¸öDPÖ¸Áî(³¬¹ý24 bytes) ¡£ÆäÖÐ3¸öµÄÿ¸öʱÖÓ½«·¢Ë͵½Èý¸öÐŵÀÖ´ÐС£ÐŵÀµÄÊý×Ö(0/1/2)±»·ÖÅ䏸mOP DP Ö¸Á²¢×ª»»ÎªÐèÒªµÄ×ӽ׶Ρ£¸Ã½×¶ÎµÄ×ܹ²ÐÔÄÜÊÇ3DP Ö¸Áî/ʱÖÓ¡£VectorPath Ö¸ÁîҲͨ¹ýÕâ¸ö½×¶Î£¬²¢±£³ÖÔÚ½âÂëÆ÷µÄmOP˳Ðò£¬²¢Êä³öµ½ÏàÓ¦µÄÔ´Ö¸Áî˳Ðò¡£VectorPath Ö¸ÁîÁ¢¼´Õ¼¾ÝÁËÈý¸ö½âÂëÆ÷µÄÐŵÀ£¬µ«²¢²»ºÍÔçǰDirectPath Ö¸ÁîÁªºÏ¡£Èç¹û×îºóÒ»¸öʱÖÓÉÙÓÚ3¸öDirectPath£¬ÄÇô¿ÕÐŵÀÈÔ¾ÉÊǿյġ£
ÏÂÃæÈÃÎÒÃÇÍ£ÏÂÀ´ÌÖÂÛÒ»ÏÂVectorPath Ö¸ÁîµÄÈõµã --- ËüµÄ¿í¶ÈÕ¼¾ÝÁË3¸ö½âÂëÐŵÀ£¬Òò´Ë²»ÔÊÐíDP ½âÂëÆ÷²¢Ðй¤×÷¡£ÆäʵVectorPath Ö¸Áî±¾Éí²¢²»"»µ" -- Microcode ÒýÇæ ÒÔ3±¶ mOP/ʱÖÓ µÄËÙ¶ÈÔËÐУ¬ÈçDP ½âÂëÆ÷Ò»Ñù¡£ÔÚÕâ¸öVectorPath µÄmOP¾ÍÏñDirectPath Ò»Ñù£¬²úÉú³¬¹ý10¸öµÄ¸´ÔÓÖ¸Áî(ÀýÈçdivision £¨·Ö¸î)£¬ºÜ¶àϵͳָÁî)¡£VectorPath ÊÇÏ൱²»´íµÄ½â¾ö·½°¸£¬ÔÚ"triplet" ÖУ¬VectorPathÆðµ½Á˸¨ÖúµÄ×÷Óãº
-
Èç¹ûVPÖ¸ÁîÔÚÒ»ÏߵĵÚһλ(ÓеÚ0¸öλÖÃ)£¬ÄÇôËü½«Ö±½Óµ½Microcode Engine ²úÉúmOP ϵÁÐ(ʹÓÃËüµÄ±í¸ñ)¡£MopsÒÔÈý¸öΪµ¥Î»Êä³ö£¬Èç¹û×îºótriplet ÓÐÉÙÓÚÈý¸ömOPs£¬¿ÕµÄÔò·ÖÅäNULL -ROP ¡£µ¥ÔªµÄÁíÍâÁ½¸öÖ¸ÁîÔòͨ¹ýÏò×óÒÆ£¨µ½0λÖÃ)£¬È»ºóϸöÖ¸ÁîÔò¸½¼Óµ½3¸ö¡£
-
Èç¹ûVPÖ¸Áî²¢²»ÊÇÒ»ÏߵĵÚһ룬ÄÇôÉÏÊöµÄDPÖ¸Á±»Ê×ÏȽâÂ룬¶ø¿ÕµÄmOPλÖÃÔò±»·ÖÅäNULL-ROP ÒÔ²¹×ã3¸ö¡£È»ºóËüÔÙ½øÐкÍÇ°ÃæÒ»ÑùµÄ¹¤×÷ - VP Ö¸ÁîÔÚÏÂÒ»Ðб»´¦Àí¡£
-
4.ALIGN2
-
5.EDEC
-
6.IDEC
-
7.SCHED
-
8.EXEC
ÏÂÃæÈÃÎÒÃÇÁоÙÒ»ÏÂFPÖ¸ÁîµÄ¸÷¸ö½×¶Î¡£
-
7.STKREN
-
8.REGREN
-
9.SCHEDW
-
10.SCHED:
-
11.FREG
-
12-15.FEXEC1-4
ËùÓÐÕâЩ½×¶Î¶¼ÊÇK7ÀïÃæµÄ£¬¶ø¶ÔÓÚK8ĿǰµÄ×ÊÁÏ»¹²»Ïêϸ¡£µ«ÊÇ´ÓÒÔÏÂÎÒÃÇ»¹ÊÇ¿ÉÒÔ¿´µ½K8ÓëK7µÄÇø±ð£º
- FETCH1 (¶ÔÓ¦K7µÄ FETCH )
- FETCH2
- PICK
- DECODE1
- DECODE2
- PACK
- PACK/DECODE
- DISPATCH (¶ÔÓ¦K7µÄIDEC)
--½ÓÏÂÒ³--