Core در برابر K8 : كدگشايي
به نظر شما چگونه سه واحد «كدگشايي ساده» به اضافه يك واحد «كدگشايي پيچيده» در معماري Core با سه واحد «كدگشايي پيچيده» موجود در معماري K8 رقابت ميكند؟
معماري ابتدايي پردازندههاي Athlon (معماري K7) دو شيوه كدگشايي «مسير برداري» و «مسير مستقيم» داشت. كدگشايي «مسير برداري» يك دستورالعمل منجر به چندين دستورالعمل شبه RISC شده (كه AMD آنها را macro-op نام نهاده) و كدگشايي «مسير مستقيم» منجر به يك macro-op ميشود هر يك از واحدهاي كدگشايي در K7 داراي توانايي كدگشايي به دو شيوه مذكور بودند. اما از ديدگاه عملكرد، كدگشايي «مسير مستقيم» به دليل داشتن تعداد macro-op كمتر ترجيح داده ميشد. اگر از اين كه ما معماري منسوخ شده K7 را تحليل ميكنيم شگفت زده شدهايد بايد اضافه كنيم كه معماري K8 به طور گستردهاي بر پايه معماري K7 طراحي گشته است.
هر سه واحد «كدگشايي پيچيده» K7 قادر به كدگشايي «مسير مستقيم» اكثريت دستورالعملهاي x86 ميباشد و بخش اندكي از دستورالعملها به شيوه «مسير برداري» كدگشايي ميگردند. با اين وجود برخي از دستورالعملهاي مميزشناور و SSE ميبايست به شيوه زمانبر «مسير برداري» كدگشايي ميشدند. در معماري K8 از واحدهاي «كدگشايي پيچيده» قدرتمندتري بهره برده شد كه توانايي كدگشايي تمامي دستورالعملهاي SSE و مميزشناور را به شيوه «مسير مستقيم» دارا ميباشد.
مشابه ويژگي «همجوشي macro-op» اينتل در معماري K8 شركت AMD وجود ندارد همچنين ميتوان فرم ديگري از «همجوشي micro-op» را در اين معماري يافت، براي اينكه پيچيدگي اين مقايسهها موجب سردرگمي شما نشود در جدول 2 تفاوتهاي موجود را ترسيم كردهايم :
| معماري Intel Core | معماري AMD K8 |
معناي macro-op | دستورالعمل x86 | يك دستورالعمل بزرگ شبه RISC كه نتيجه كدگشايي يك دستورالعملx86 ميباشد. macro-op كميسادهتر يا مشابه دستورالعملهاي x86 بوده و هر دستورالعمل ساده x86 پس از كدگشايي با يك يا دو macro-op بيان ميشود. |
معناي micro-op | نتيجه كدگشايي يك دستورالعمل x86 كه به يك يا چندmicro-op تبديل ميشود. | macro-opها پيش از ارسال به واحد اجرايي به چندين micro-op شكسته ميشوند |
همجوشي macro-op | دستورالعملهاي مقايسه و پرش با يكديگر ادغام ميشوند | وجود ندارد |
همجوشي micro-op | دستورالعملهاي مشابه ADD [mem],EAX را به يك micro-op كدگشايي ميكند. | كدگشايي ADD [mem],EAX با يك macrp-op بيان ميشود. |
جدول شماره 2
در پردازندههاي Athlon ويژگي «همجوشي micro-op» وجود دارد، يك دستورالعمل مشابه دستورالعمل ADD [mem],EAX در گذر از خطلوله پردازنده تنها با يك macro-op بيان ميشود. دستورالعملهاي «بارگذاري» و SSE نيز در معماري Core قابل تركيب با يكديگر هستند اما اين امكان براي K8 در نظر گرفته نشده و دستورالعملهاي SSE توسط دو macro-op مجزا اجرا ميشوند.
با توجه به اين توضيحات به نظر شما واحدهاي كدگشايي Core چگونه با K8 رقابت ميكنند؟ شايد بدون دسترسي به اطلاعات بيشتر در مورد ساير بهينهسازيهاي Core در واحد كدگشايي، نتيجهگيري كمي دشوار باشد، با اين وجود بر اساس مفروضات ميتوان ايده كلي مقايسه را مطرح كرد. در اكثر وضعيتهاي موجود معماري Core برتري نسبي در اين بخش دارد، اين معماري ميتواند در هر سيكل ساعت خود 4 تا 5 دستورالعمل x86 (به لطف «همجوشي macro-op» ) را كدگشايي و به داخل خطلوله هدايت كند در حالي كه K8 در هر سيكل ساعت تنها 3 دستورالعمل را كدگشايي ميكند.
وضعيتهايي كه 3 واحد«كدگشايي پيچيده» K8 از 3واحد«كدگشايي ساده» و يك واحد پيچيدهي Core پيشي ميگيرند بسيار اندك است. اين اتفاق زماني رخخواهد داد كه پيچيدگي هر سه دستورالعمل واكشي شده از صف دستورالعملها در حدي باشد كه توسط واحدهاي «كدگشايي ساده» تعبيه شده در Core نتوان آنها را به micro-op تبديل كرد.