تکنولوژی های جدید CPU

لوگو و شعار جدید اینتل

نام تجاری جدیدی که از این پس بر روی کلیه پردازنده های اینتل گذاشته خواهد شد، بسیار به معماری آنها نزدیک است: Core2. تا کنون عرضه دو خانواده پردازنده های Core2 Duo برای کامپیوتر های میان قیمت و Core2 Extreme برای کامپیوترهای گرانقیمت در حوزه کامپیوترهای روی میزی قطعی شده و در ماه های آینده شاهد حضور آنها در بازار خواهیم بود، هر دو این پردازنده ها با هسته Conroe تجهیز شده اند که از پیکر بندی دوهسته بهره می‌برد. در حوزه کامپیوترهای همراه نیز هسته Merom و در حوزه کامپیوترهای سرویس دهنده، هسته Woodcrest معرفی شده اند اما هنوز جزئیات دقیقی در مورد پردازنده هایی که این هسته ها در آن به کار گرفته خواهد شد داده نشده است.

شباهت بسیار زیادی میان نام پردازنده های Core2 با پردازنده های Core Duo وجود دارد، Core Duo و برادر ارزانقیمتش Core Solo نام پردازنده های مدرن حوزه کامپیوترهای همراه اینتل می باشند که بر پایه معماری P-M (نسخه تکامل یافته معماری P6) با هسته Yonah عرضه می شوند، این پردازنده های 32 بیتی هم اکنون در اکثر کامپیوترهای همراه مدرن و iMac‌های جدید Apple استفاده می‌شوند.

http://stockwatch.in/files/intel-logo.jpg


از معماری CPU چه می دانید؟

پیش از آنکه به بررسی معماری نسل آینده پردازنده های اینتل بپردازیم ابتدا اجازه دهید تا دانستنی های ابتدایی که علم به آن ضروری به نظر می رسد را تشریح کنیم:

کدهای اجرایی سیستم عامل و نرم افزارها در آخرین مرحله پیش از ارسال به پردازنده، می بایست به زبان ماشین و اسمبلی تبدیل شود، بالغ بر 50 درصد کدهایی که پردازنده اجرا می کند عملیات «Load» (بارگذاری از حافظه به ثبات های داخلی پردازنده) و عملیات «Store» (ذخیره‌سازی از ثبات‌های داخلی به حافظه کامپیوتر) را دیکته می کنند، از این میان، اکثریت کدها «بارگذاری» و بخش اندکی کد‌های «ذخیره‌سازی» هستند. 15 الی 20 درصد کدها مختص دستورالعمل های انشعابی مانند if، then و else است که روال پیش روی برنامه را با شروط مشخصی تعیین می کنند.

سایر کدها بیشتر شامل دستورالعمل های ساده ریاضی مانند ADD (جمع) یا MUL (ضرب) می‌شوند. در این بین تنها درصد کمی از کدها به دستورالعمل های سطح بالای محاسباتی دیگر مانند DIV (تقسیم) یا SQRT (به توان دو) ترجمه می‌شود. هر یک از این دستورالعمل ها برای اجرا به ترتیب وارد یکی از خط‌لوله‌های پردازنده می‌شود، در هر خط لوله به طور استاندارد پنج واحد زیر وجود دارد:

• «واحد واکشی»:
در این واحد دستورالعمل از حافظه اصلی خوانده شده و به ثبات‌های داخلی پردازنده منتقل می‌شود، دستورالعمل واکشی شده الگویی از بیت‌ها به زبان ماشین است که در بر گیرنده نوع عملگر و آدرس عملوند‌های آن است.

• «واحد کدگشایی»:
در این واحد الگوی دستورالعمل‌ از داخل ثبات پردازنده خوانده شده و با کدگشایی آن واحد اجرایی را برای اجرای محاسبات درخواست شده آماده می کند.

• «واحد واکشی عملوند»:
این واحد، داده هایی که آدرس آنها در دستورالعمل ذکر شده را از حافظه کاشه، به ثبات‌های داخلی پردازنده انتقال می‌دهند.

• «واحد اجرایی»:
پس از حصول اطمینان از موجودیت داده ها در داخل ثبات های پردازنده و آماده سازی واحد اجرایی، واحد‌های ریاضی و منطقی موجود در بخش اجرایی پردازنده (ALU)، محاسبه دستورالعمل را آغاز می کنند.

• «واحد بازگیری»:
در این مرحله نتیجه محاسبات که داخل ثبات های پردازنده ذخیره شده به حافظه کاشه یا حافظه اصلی کامپیوتر منتقل می‌شود. 

معماری Intel Core2 در مقابل AMD Athlon 64

پیش واکشی و کاشه ‌نمودن هوشمند تر

اطمینان از موجودیت دستورالعمل ها و داده ها در داخل حافظه کاشه پیش از اجرای دستورالعمل، یکی از مهمترین دغدغه های طراحان معماری پردازنده در عصر پردازنده های 3 گیگاهرتزی است، این امر شرایط لازم را برای افزایش کارایی با زیاد شدن فرکانس کاری پردازنده را فراهم می‌سازد. در غیر این صورت فرکانس بالاتر به معنی صرف زمان انتظار بیشتر برای رسیدن اطلاعات به پردازنده خواهد بود. بخشی از پردازنده که حافظه کاشه را برای اجرای دستورالعمل ها آماده می‌سازد ، «بخش پیش واکشی» نام دارد، با این وجود الگوریتم های سخت‌افزاری موجود برای پیش واکشی همیشه وظیفه خود را با موفقیت انجام نمی‌دهند و مورد‌های اندکی هنوز وجود دارد که پس از ورود دستورالعمل به خط لوله  داده ها با تاخیر از حافظه کاشه دریافت می‌شوند. این موضوع باعث می‌شود تا کارایی کلی پردازنده به ویژه در برنامه‌هایی که به پهنای باند حافظه حساس هستند، کم شود.

بخش پیش واکشی در معماری Core™ بدون هیچ تردیدی از آنچه در معماری های K8 و NetBrust یافت می‌شود برتر است. هر هسته پردازنده ای که از این معماری بهره می برد حداقل سه واحد پیش واکشی (دو واحد برای داده و یک واحد برای دستورالعمل) مختص به خود دارد، دو واحد پیش واکشی دیگر نیز برای کاشه سطح 2 این پردازنده ها در نظر گرفته شده است. لذا پردازنده های دو هسته ای Core2 که با این معماری عرضه خواهند شد با 8 واحد «پیش واکشی» مجزا می توانند از پهنای باند حافظه موجود به صورت موثر‌تری استفاده کرده و ضریب اطمینان حضور اطلاعات در حافظه کاشه را هنگام اجرای یک دستورالعمل بالا برند.

حافظه کاشه موجود در پردازنده های مبتنی بر معماری Core نیز در افزایش کارایی آن موثر است. یک حافظه کاشه سطح دو 4 مگابایتی میان هر دو هسته پردازنده به اشتراک گذاشته شده است و دسترسی به آن در 12 تا 14 سیکل ساعت موثر خواهد بود. حافظه کاشه سطح یک داده و دستورالعمل نیز هر دو تا 32 کیلوبایت با زمان دسترسی 3 سیکل ساعت ارتقا پیدا کرده‌اند. باید اضافه کرد حافظه کاشه Trace که در معماری NetBrust از آن بهره گرفته شده بود، با توجه به خط لوله های کوتاه Core کنار گذاشته شده است. این حافظه اساسا به عنوان یک بافر برای دستورالعمل های کدگشایی‌ نشده به کار گرفته می شد در حالی که این واحد برای خط لوله های طولانی NetBrust مفید واقع شده بود ، اینتل تشخیص داده که طرح سنتی حافظه کاشه سطح یک در این معماری موثرتر می باشد.


Core در برابر K8 

زیرسیستم حافظه

مهمترین رقیب Core ، معماری K8 دو ویژگی برتر کوچک اما غیرقابل چشم پوشی در زیرسیستم های حافظه دارد.

اولین ویژگی حافظه کاشه  سطح یک بزرگتر آن است، هر دو بخش دستورالعمل و داده این حافظه، 64 کیلوبایت گنجایش دارند در حالی که طراحان Core بر این بخش ها 32 کیلوبایت در نظر گرفته اند. این تنها یک برتری کوچک است چرا که انتظار می رود حافظه 8 طرفه 32 کیلوبایتی، عملکرد بسیار نزدیکی نسبت به حافظه 2 طرفه 64 کیلوبایتی داشته باشد.

ویژگی دوم و با اهمیت تر معماری K8، «کنترلرحافظه» مجتمع در داخل پردازنده است. در کامپیوترهای مبتنی بر این معماری حافظه اصلی به صورت مستقیم توسط «کنترلر حافظه» داخلی پردازنده مدیریت می شوند، در حالی که در کامپیوترهای مبتنی بر معماری های Intel «کنترلرحافظه» در داخل چیپ‌ست «پل‌شمالی» مادربرد قرار داشته و تعامل پردازنده با حافظه اصلی، از این طریق صورت می گیرد. «کنترلرحافظه» مجتمع در داخل پردازنده، دسترسی بی واسطه به حافظه اصلی با تاخیر کمتر را به همراه دارد.

تاخیر دسترسی به حافظه اصلی در کامپیوترهای پنتیوم 4 تقریبا دو برابر کامپوترهای Athlon 64 است (80 الی 90 در برابر 45 الی50 نانوثانیه). با این وجود مهندسین اینتل در معماری جدید خود راه‌ کارهای متعددی مانند «آشکارسازی حافظه» برای پنهان کردن این تاخیر از چشمان پردازنده ابداع کرده‌اند که در ادامه به آنها اشاره خواهیم کرد. http://www.vaultnetworks.com/vn_images/assets/intel_vs_amd.png

 

دو ویژگی برتر مطرح شده در معماری K8 توسط دیگر برتری های زیر سیستم حافظه معماری Core قابل چشم پوشی هستند، پردازنده های مبتنی بر معماری Core‌ دارای حافظه کاشه سطح دو گسترده تر و واحدهای پیش واکشی هوشمندتری نسبت به K8 هستند. حافظه کاشه سطح یک در Core پهنای باندی نزدیک به دو برابر پهنای باند K8 ارائه می‌کند (اندازه گیری شده با نرم افزار ScienceMark) علاوه بر این در پیکربندی های دو هسته ای نیز حافظه کاشه سطح دو در Core حدود 2.5 برابر سریع تر از آنچه که معماری K8 در پردازنده های Athlon 64 X2 ارائه کرده، عمل می کند.

 کدگشایی هوشمندتر

Core اولین معماری در دنیای پردازنده های x86 است که به 4 واحد کدگشایی x86 تجهیز شده است: 3 «کدگشای ساده» و یک «کدگشای پیچیده». وظیفه واحدهای کدگشایی در تمام پردازنده های x86 کنونی تنها ترجمه کردن دستورالعمل های ورودی (شامل کدعملگر و آدرس ها) نیست، بلکه ترجمه دستورالعمل ها با طول متغییر 1 الی 15 بیتی به دستورالعمل های از پیش تعیین شده با طول ثابت (دستورالعمل های RISC) که زمانبندی و اجرای آنها ساده تر است نیز می باشد، اینتل نام این دستورالعمل ها کدگشایی شده را micro-op نهاده است.

در معماری Core، اکثر دستورالعمل ها x86 توسط یکی از سه واحدکدگشایی ساده به یک micro-op ترجمه می شوند و سایر دستورالعمل های سطح بالایی که حداکثر با چهار micro-op بیان می‌شوند، توسط واحد کدگشایی پیچیده کدگشایی می‌گردند.

یکی دیگر از نوآوری های معماری Core، «همجوشی macro-op» نام دارد، این ویژگی ترکیب دو دستورالعمل وابسته x86 را ممکن می‌سازد. به عنوان مثال دستورالعمل مقایسه (CMP) با دستورالعمل پرش (JNE) به کمک این ویژگی ترکیب شده و به یک micro-op کدگشایی می‌شود. این دستورالعمل ها به طور عمومی نتیجه کامپایل عبارات شرطی if، then و else هستند.  

به کمک این نوآوری، پردازنده هایی که از معماری Core بهره می‌برند، توانایی کدگشایی پنج دستورالعمل را در هر سیکل ساعت دارند ، با توجه به تصویر، پنج دستورالعمل به صورت هم زمان از صف دستوالعمل ها خوانده شده و در نهایت چهار micro-op کدگشایی می‌شود.

 

به گفته اینتل به طور متوسط در برنامه های عمومی کامپیوتر، از میان هر 10 دستورالعمل استاندارد x86 که به پردازنده ارسال می‌شود دو دستورالعمل قابل ادغام با همدیگر هستند و دستورالعمل ترکیب شده مسیر خط‌لوله را همانند یک دستورالعمل ساده طی کرده و در پایان خط لوله تاثیر مشابه با حالت ترکیب نشده بر روی ثبات‌های پردازنده خواهد گذاشت. در صورتی این ادعای اینتل صحت داشته باشد، «همجوشی macro-op» حدود 11 درصد افزایش کارایی را به ارمغان خواهد آورد.

دیگر نوآوری اینتل در حوزه کدگشایی معماری اینتل «همجوشی micro-op» نام دارد، هدف نهایی این ویژگی که از معماریP-M پردازنده های Core Duo به ارث برده شده ترکیب micro-opها با یکدیگر است. دستورالعمل های پیچیده ی اندکی وجود دارند که پس از کدگشایی به چندین micro-op تبدیل می شوند، در مقابل دستورالعمل های ساده متعددی نیز هستند که نمی توان آنها را با یک micro-op بیان نمود. به عنوان مثال دستور ساده ADD (جمع) در صورتی که عملوندهایش ثبات‌های پردازنده باشند (مانند ADD EBX,EAX) به سادگی به یک micro-op کدگشایی می‌شود اما اگر یکی از عملوند‌ها آدرس خانه‌ای از حافظه باشد پیچیدگی این دستور ساده برای پردازنده بسیار زیاد می شود. مانند دستور ADD [mem],EAX که بر اساس آن مقدار ثبات EAX باید با مقدار خانه mem حافظه جمع شده و حاصل در خانه mem قرار گیرد.

در معماری‌های ابتدایی مانند آنچه که در «پنتیوم پرو» به کار برده شده بود، این نوع دستورالعمل ها به چندین micro-op شکسته می‌شد، زیرا واحد‌های محاسباتی پردازنده تنها به ثبات ها دسترسی مستقیم برای محاسبات خود دارند. بنابر این در بهترین حالت دستورالعمل ADD [mem],EAX به دستورالعمل‌های زیر شکسته می‌شود:

• «بارگذاری» : MOV EBX,[mem]a
• محاسبات منطقی و ریاضی : ADD EBX,EAX
• «ذخیره‌سازی» : MOV [mem],EBX

«همجوشی micro-op» امکان ترکیب دستور «بارگذاری» با دستور محاسباتی را میسر می سازد، بنابر به کمک این ویژگی تنها یک micro-op برای دستورالعمل بالا توسط واحد کدگشایی تولید می‌شود. این امر چندان کار کوچکی نیست چرا که در طرح‌های قدیمی کنارهم قرار دادن عملگر‌های محاسباتی با «بارگذاری» موجب طولانی شدن خط‌لوله و پایین آمدن حداکثر فرکانس کاری پردازنده می‌شد. در معماری نوین اینتل با استفاده از مدار‌های بزرگ و هوشمندتر که به صورت همزمان چندین «همجوشی micro-op» انجام می‌دهند، این امر بدون اعمال محدودیت قابل ملاحظه ممکن گشته است.


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 تفاوت‌ های موجود را ترسیم کرده‌ایم :


در پردازنده های 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 تبدیل کرد.

دسترسی هوشمندانه به حافظه

از زمان «پنتیوم پرو»، پردازنده های x86 توانایی اجرای دستورالعمل ها، خارج از نوبت را پیدا کردند. با این حال به طور میانگین یک سوم دستورالعمل‌ها به سادگی قابلیت اجرای خارج از نوبت را ندارند، این دستورالعمل‌ها همگی از نوع «بارگذاری» هستند، جلو انداختن دستورالعمل‌های «بارگذاری» افزایش عملکرد چشم‌گیری نسبت به بارگذاری داده‌ها در زمانی که به آنها نیاز دارید خواهد داشت. با این کار تاخیرهای متعدد حافظه کاشه سطح 1 و سطح 2 از چشمان پردازنده پهنان خواهند ماند.

تصور این افزایش کارایی بسیار ساده است، فرض کنید یک دستورالعمل ALU در اختیار دارید که نیاز به بخش مشخصی از داده های ذخیره شده در حافظه را دارد اما این بخش داده در حافظه کاشه سطح 1 موجود نباشد، در این صورت پردازنده هنگام آغاز محاسبات باید در انتظار دریافت داده‌های مذکور بماند. اگر عملیات «بارگذاری» چندین سیکل قبل از زمانی که ALU به آن بخش داده نیاز دارد آغاز شود، تاخیر انتقال داده از حافظه کاشه سطح 2 به سطح 1 اهمیت اندکی پیدا خواهد کرد. البته «بارگذاری» خارج از نوبت داده‌ای که قبل از آن در عملیات «ذخیره&zw

/ 1 نظر / 80 بازدید
امید سرودی

با تشکر از برادرم عبدالهی پور که در این مطالب ما را یاری فرمودند سپاس فراوان و ارزوی موفقیت