Quantcast
Channel: جامعه مجازی دانشگاه پیام نور - همه انجمن ها
Viewing all articles
Browse latest Browse all 11241

بررسی معماري بولدوزر - آينده پردازنده های سطح بالاي AMD

$
0
0
[تصویر: 5-bulldozer.jpg]
ای ام دی هنوز هم به طور واضح در مورد تاریخ انتشار پردازنده هایی با این معماری، صحبت نکرده است. پس نمی دانیم، دقیقا چه موقع این پردازنده سرنوشت نسل های آینده سرور ها و کامپیوتر های آینده را رقم می زند و گیمر های هاردکور تا کی باید منتظر بمانند.

گیمر های هاردکور به افرادی می گویند که بیشتر وقت خود را صرف بازی های کامپیوتری می کنند و معمولا دوست دارند، بازی ها را با بیشترین نرخ فریم دهی و بهترین سخت افزار ها تجربه کنند. این افراد یا از روی علاقه این کار ها را انجام می دهند، یا از سوی شرکت های بزرگ ساخت بازی، برای تست بازی ها و یافتن باگ های آنها استفاده می شوند.

اکنون جزئیات زیادی از معماری سری بولدوزر در دسترس است و به همین جهت ما حرف های زیادی برای گفتن داریم. در سال 1999، AMD معماری K7 را طراحی کرد اما از سال 1999 تاکنون، این اولین بار است که AMD معماری پردزانده های خود را از نو انجام می دهد. پس می توان گفت که با عرضه معماری بولدوزر، ای ام دی، کاری پر خطر را با موفقیت به پایان رسانده است.

-فلسفه بولدوزر بودن:

اکنون بیایید تا از فلسفه ساخت بولدوزر سخن بگوییم. اول از همه توضیحی لازم است:

در حال حاضر پردازنده ها از دو راه برای بهبود عملکرد خود استفاده می کنند. یکی استفاده از چند هسته فیزیکی برای پردازش است و دومی استفاده از مولتی تریدینگ موازی می باشد. ای ام دی، بولدوزر را به عنوان راه سومی در بین این دو مطرح می کند. با همراهي شما، ابتدا توضیح این دو را خواهیم داد و بعد به سراغ بررسی Bulldozer خواهیم رفت.

استفاده از چند هسته فیزیکی برای پردازش: می دانید که در این چند ساله اخیر رقابت بر سر زیاد کردن هسته ها بوده. تا جایی که اینتل Core i7-980X و ای ام دی، Phenom II X6 1090T را عرضه کرد که هر دو این ها پردازنده های شش هسته ای هستند. استفاده از 6 هسته، موجب عملکرد 6 برابر نسبت به فرکانس خواهد شد. البته لازم است بدانید که برنامه ها هم باید برای 6 هسته بهینه سازی شوند.

برای مثال اگر شما یک برنامه با Visual Basic.net بنویسید. که اعداد 1 تا 10000 را یکی یکی در یک جعبه متن چاپ کند، به پردازنده فشار خواهد آورد. اگر اتمام این برنامه برای یک پردازنده 2 هسته ای با فرکانس 2.6 گیگاهرتز،7 دقیقه طول بکشد. برای یک پردازنده 4 هسته ای با همین فرکانس نیز هفت دقیقه طول خواهد کشید. چون این برنامه فقط از یک هسته استفاده می کند و به این ترتیب، پردازنده دو هسته ای از 50 درصد و پردازنده چهار هسته ای از 25 درصد توان خودش بهره خواهد برد! اگر باور ندارید می توانید، برنامه تست پردازنده نارنجی را با حجم 56 کیلوبایت، برای ویندوز دانلود کنید (این یک برنامه کم حجم و کوچک است که جای بهبود دارد و صرفا برای اثبات این مساله ساخته شده و جنبه بنچ مارک گیری ندارد)

به این ترتیب با بهینه سازی برنامه ها می توان به نتایج بسیار بهتری دست یافت و استفاده از چند هسته فیزیکی برای پردازش کمک بسیار زیادی به عملکرد بهتر می باشد.

استفاده از Multi-Threading :

ابتدا باید توضیحی را از مولتی تریدینگ ارائه کنیم. برای اطلاعات بیشتر می توانید به مطلب بررسی دایرکت ایکس یازده مراجعه نمایید و این دقیقا همان تعریفی است که در آن مقاله ارائه دادیم:

گاهی اوقات لازم می شود که هر برنامه و بازی دو یا چند عمل را به صورت هم زمان انجام دهد؛ بدون این که از دسترس خارج و به قول معروف Not Responding شود. برای مثال در بازی ها وقتی شما در حال تیر اندازی کردن هستید از ویژگی مولتی تریدینگ استفاده می کنید چون هم حرکات شما پردازش می شود و هم حرکات و اعمال دشمنان شما.

پس مولتی تریدینگ کمک می کند که چند عمل به طور همزمان انجام شود. اما برنامه ها باید برای مولتی تریدینگ نیز بهینه سازی شوند. ولی انتظار نداشته باشید که برای اثبات این یکی هم برنامه بدهیم! در عوض یک نکته مهم: مولتی تریدینگ با پردازنده ها سر و کار مستقیم دارد و پردازنده ای که Thread های بیشتری داشته باشد، در این کار موفق تر است. یک پردازنده 6 هسته ای با 12 ترید می تواند، در هر هسته خود 2 کار را همزمان انجام دهد. لازم به ذکر است که در یک برنامه خوب، بسته به سنگینی عملیات پردازشی، کار ها بین ترید ها و هسته ها تقسیم می شوند. برای مثال 12 کار کوچک بین دوازده ترید، اگر نه شش کار بزرگ بین 6 هسته و باز هم اگر نشد، 3 کار سنگین، هر کدام با دو هسته و ....

-در اعماق یک بولدوزر:

حالا می خواهیم ببینیم که این راه سومی که ای ام دی میگوید چیست؟ در زیر دو دیاگرم می بینید. دیاگرم سمت چپ، یک چیپ دو هسته ای است. معماری این چیپ شبیه معماری اصلی بولدوزر است. اما به دیاگرم سمت راست بنگرید تا اوج کار را در یابید. این یک چیپ یک هسته ای است که این دو هسته را در خود جای داده است!
[تصویر: 1-bulldozer.jpg]
با این که کار جالبی است، اما ما هنوز هم مشکوک هستیم که آیا نامیدن بولدوزر به عنوان "راه سوم" درست است یا این که فقط تقلیدی است از تکنولوژی Hyper Threading اینتل؟

قبل از همه چیز باید شما را با مفهوم پایپ لاین آشنا کنیم. برای اطلاعات بیشتر در این مورد هم می توانید به مقاله بررسی کرتکس و تگرا 2 مراجعه نمایید. اما این تعریف پایپ لاین است:

پایپ لاین (pipe line) ها یک سری از عناصر پردازش اطلاعات هستند که به یک دیگر متصل شده اند و معمولا به طور موازی کار می کنند. بر این اساس، خروجی هر چیپ پردازنده، ورودی چیپ پردازنده بعدی خواهد بود و به همین ترتیب عملیات تا اتمام کار ادامه پیدا می کند. بیشتر شدن تعداد پایپ لاین ها در مولتی تریدینگ (در مطلب مربوط به بررسی دایرکت ایکس یازده توضیح آن داده شد) و سرعت عملیات پردازشی تاثیر زیادی می گزارد. به یاد داشته باشید که در پردازنده ها هر Thread از تعدادی پایپ لاین تشکیل شده که در دیاگرام های بالا هم می توانید صحت این مساله را دریابید.

تکنولوژی هایپر تریدینگ اینتل، راندمان کاری هسته ها را با استفاده از اتحاد کاری ترید ها و پایپ لاین ها بالا می برد. به این صورت که دستورات را به حد نساب پایپ لاین ها رسانده و در یک ثانیه به تمامی پایپ لاین های هسته، اعمال می کند. در این وضعیت، در شرایطی که پردازنده منتظر کد ها از ترید A هست، هایپر تریدینگ، عملیات دیگر را به سمت ترید B سوق می دهد تا از حداکثر ظرفیت پردازنده، استفاده شود. به این ترتیب دیگر نقطه خللی به وجود نمی آید. این کاری است که هم هایپر تریدینگ انجام می دهد و هم معماری Bulldozer ولی کار بولدوزر تنها این نیست، این معماری دو هسته را در یک ماژول گرد آوری کرده و کنترل بیشتری بر ترید ها دارد به این ترتیب وضعیت این گونه می شود:(به پاراگراف پایین، دقت بسیار داشته باشید)

باید برای شما یک سناریو را تعریف کنیم : فکر کنید که پردازنده درگیر یک عملیات سنگین است. دستورات در کش سطح یکی که در هسته اول است ذخیره شده اند. پردازنده صبر می کند که دستورات به حد نصاب کل پایپ لاین های هسته اول برسند و این کار را با هسته دوم نیز انجام می دهد. (فرض می کنیم که هر هسته تنها یک Thread دارد.) برای مثال اگر کل پایپ لاین های هسته اول، 4 عدد باشند و روی هم، توان پردازشی معادل 400 گیگافلاپ را داشته باشند و کد ها به این توان برسند، پردازنده یک باره کد ها را از کش دستورات به هسته اول منتقل کرده و پردازش را انجام میدهند. اما حالا تصور کنید که در دور دوم، کد های هسته اول به 300 گیگافلاپ و توان پردازشی مورد نیاز برای کد های هسته دوم به 100 گیگافلاپ برسند. پردازنده آن ها را به هسته اول می برد و هسته دوم را باز می گذارد. به این ترتیب از ظرفیت های هسته اول نهایت استفاده صورت می گیرد و در طی کار هسته اول، هسته دوم می تواند دستورات را به حد نصاب خودش رسانده و عمل کند. به این ترتیب، از حداکثر ظرفیت برای مولتی تریدینگ استفاده شده و دیگر هیچ خللی باقی نمی ماند. این نکته هوشمندانه کاری است که در Bulldozer صورت گرفته.(فلاپ یک واحد رایج در اندازه گیری توان پردازشی است. البته در این مثال کاری به زیاد یا کم بودن قدرت نداریم و فقط یک عدد تصادفی را برای مثال در نظر گرفته ایم)
[تصویر: 2-bulldozer.jpg]
همانطور که در دیاگرام بالا می بینید، این معماری سطوح مختلفی را شامل می شود. کش L3 که با رنگ خاکستری مشاهده می کنید در سراسر پردازنده به اشتراک گذاشته می شود. قسمت های صورتی رنگ در سطح ماژول به اشتراک گذاشته می شوند و قسمت های آبی رنگ که از اصلی ترین اجزاء پردازشی هستند، به طور اختصاصی کار می کنند و البته طبیعتا کنترل آن ها برای پردازنده امکان پذیر می باشد.

چیزی که این دیاگرم نشان می دهد، استفاده از ماژول به جای هسته است. این کار باعث شده که ماژول ها بتوانند، خود کنترل عملیات پردازشی را به دست بگیرند. پس مجددا تاکید می شود که اگر از پتانسیل های نرم افزاری بولدوزر نیز استفاده شود، احتمالا در سال های آتی شاهد کنترل ماژول ها توسط برنامه و کنترل هسته ها توسط پردازنده، خواهیم بود. این یعنی عملکردی بسیار بالا تر و پایدار تر. اما قضیه به همین سادگی نیست و در آن چند نکته مهم وجود دارد که در ادامه به آن خواهیم رسید.

به گفته AMD، تحقیقات گسترده ای انجام شده و نتیجه این بوده که برای به دست آوردن عملکرد بهتر لازم است هر ماژول از دو هسته بهره ببرد. اگر تعریف گنگ است، لازم نیست نگرانی به خود راه بدهید، چون در ادامه مروری خواهیم داشت بر همه ی موارد باقی مانده.

-زیر کاپوت:

از عهد K7 تا کنون، هیچکدام از پردازنده های AMD، در پشتیبانی از کد های x86، به اندازه بولدوزر قوی نبوده اند. اول یک تعریف از کد های x86 و اطلاعات بیشتر را می توانید در مطلب بررسی باب کت بیابید:

دستورات x86، دستورات 32 بیتی هستند که توسط سیستم عامل به پردازنده داده می شوند. البته این دستورات فقط برای سیستم عامل نیست و بسیاری از برنامه های 32 بیتی نیز از این نوع دستورات در کد های خود استفاده می کنند. دستورات x86 از زمانی متداول شدند که اینتل پردازنده های 32 بیتی را روانه بازار کرد و همگان به مزایای بالا و گسترده بودن اعمال قابل انجام توسط این پردازنده ها پی بردند و پس از آن، این پردازنده ها گسترش زیادی یافتند.

اما معماری بولدوزر برای این کد ها تدیبیری چهار گانه اندیشیده است! یعنی این معماری و پردازنده های مبتنی بر آن، مجهز به چهار کدگشا برای کد های ایکس 86 خواهند بود! پس بولدوزر در این مورد، در سطح معماری گران قیمت Nehalem اینتل قرار دارد. این در حالی است که محصولات قبلی AMD از سه کد گشا استفاده می کردند.

اما حالا که کاپوت یک بولدوزر را بالا زده ایم، لازم است به جزئیات ریز و مهم آن نیز توجه داشته باشیم. اکنون می خواهیم توضیحاتی را در مورد واحد استنباطی پردازنده یا Branch Prediction Unit مطرح کنیم.
[تصویر: 3-bulldozer.jpg]
در دیاگرم بالا واحد استنباطی یا Branch Prediction Unit، از کد ها استنباطی منطقی کرده و نحوه اجرا را برای Fetch معین می کند. کار Fetch، این است که دستوراتی را که می بایست اجرا شوند، از حافظه گرد آوری کند. البته Fetch، توانایی های منطقی نیز در ارزیابی دستورات واحد استنباطی دارد و توانایی های منطقی این واحد باعث شده اند که خود بداند باید چه کاری را چه موقع انجام دهد. پس Fetch، همه چیز را برای شروع کار مهیا می کند. البته بعد از آن کار به کد گشای دستورات x86 محول می شود. این کد گشا وظیفه دارد که بر اساس اطلاعاتی که از fetch و Prediction Unit ها جمع آوری کرده، کد ها را خوانده و به کد های قابل فهم برای قسمت های اجرایی پردازنده تبدیل کند و به قسمت های اجرایی تحویل دهد. پس از آن کار ها بر روی اجرای کد ها شروع می گردد.

پاراگراف بالا توضیحی کوتاه و تقریبا به زبان ساده بود، از آن چه که در این مرحله اتفاق می افتد. اما حالا می خواهیم ببینیم در این قسمت، معماری بولدوزر چه اهداف جالبی را دنبال می کند:

در بولدوزر، واحد استنباط منطقی و Fetch به طور مجزا از یک دیگر کار می کنند. البته با هم در ارتباط اند. توانایی های استنباطی واحد Fetch بیشتر شده و این مساله کمک می کند که اگر ناگهان واحد استنباطی یا Prediction Unit دچار وقفه یا اشتباه شد، Fetch از کار نیافتاده و به کار خود ادامه دهد. در این وضعیت سه شرط وجود دارد که Fetch به یکی از آن ها دامن خواهد زد. البته اگر Fetch هم خطا کند، چنين وضعی پيش می آيد.

اولین شرط این که اگر خطا جزئی بود، Fetch خودش آن را رفع کرده و زمینه درست را برای Decoder و قسمت های بعد محیا کند. دوم این که Fetch هیچ کاری انجام نداده و فقط از ادامه عملیات جلو گیری کند و دستور باز خوانی را به Prediction Unit صادر کند. سوم این که Fetch خطا هایی که وجود دارند را به Prediction Unit تحویل دهد و به این ترتیب واحد استنباطی، با دقت و درستی بیشتری دستورات را تفسیر خواهد کرد.

باز هم به این این جا می رسیم که بولدوزر اساسا با چیز هایی که در سری Phenom شاهد آن بودیم، متفاوت است. مقدار کش L1 دستورات، در پردازنده های مبتنی بر بولدوزر 64 کیلو بایت خواهد بود و البته کش داده ها بسیار کم تر است. هر ماژول دو هسته ای فقط از دو عدد کش 32 کیلو بایت L1 بهره می برد. این مقدار بسیار کم است اما مسلما AMD برای این کار خود دلایل محکمی داشته و این شرکت دوست ندارد تمام زحمت هایش را با یک کش کم، به هدر بدهد. هر چند که کش های L2 و L3 خوبی در بولدوزر استفاده شده اند و کش L1، تمام ماجرا نیست.

بولدوزر در قسمت FPU، انتظارات را حداقل در روی کاغذ براورده کرده است. FPU (Floating Point Unit) واحدی است که محاسبات بسیار پیچیده و پیشرفته ریاضی را بر عهده می گیرد و بولدوزر در این قسمت بیشتر شبیه کینگ کنگ است تا بولدوزر! منظور این است که این قسمت، گاهی بسیار بیش تر از حد انتظار، خوب کار می کند.

در بولدوزر FPU ها چنان قوی هستند که می توانند به طور همزمان دو Thread سخت افزاری را سازمان دهی کنند. (فقط در شرایطی که دو Thread در یک هسته باشند. تعریف Thread که یادتان هست؟ اگر نیست دوباره به ابتدای مقاله مراجعه کنید) همچنین امکان کار کردن با دو واحدMMX (Multi Media Extensions) ، که مسئول بهبود عملیات مولتی مدیا هستند نیز برای FPU ها وجود دارد. (از این نظر که FPU ها محاسبات ریاضی را بر عهده می گیرند، با بیشتر بخش های حیاتی پردازنده در ارتباط اند)

اگر با جزئیات معماری Phenom II نیز آشنا باشید، حتما فکر می کنید که FPU بولدوزر، فقط کمی بیشتر یا کمتر از معماری فنوم عمل می کند. اما AMD در این مورد اطمینان داده که FPU در قلب بولدوزر، عملکردی متفاوت خواهد داشت. بله، سر انجام پشتیبانی از SSE 4.1 و SSE 4.2 هم به معماری بولدوزر اضافه شد. همچنین این معماری از تکنولوژی AVX اینتل نیز پشتیبانی می کند. البته اگر چیزی در مورد این دو تکنولوژی نمی دانید به بند های زیر نگاهی بیاندازید.

به طور خلاصه تکنولوژی SSE عبارت است متد های پردازشی ای که بیشتر در محاسبات ریاضیاتی کاربرد دارند و بر این اساس که ریاضی اصلی ترین جزء کامپیوتر و برنامه هاست، این تکنولوژی متد های پردازشی مهمی را به سخت افزار های همچون FPU ارائه می دهد. SSE متعلق به اینتل است و البته یک استاندارد جهانی است که AMD هم از آن استفاده می کند. تا قبل از این AMD از SSE 4 پشتیبانی می کرد و از الگوریتم ها و متد های جدیدی که در اس اس ای 4.1 و 4.2 عرضه شده بودند، بی بهره بود. در حالی که پردازنده های مبتنی بر Nehalem در سری Core i7، از آن بهره می بردند. ولی اکنون با وجود پشتیبانی از این دو متد جدید در معماری بولدوزر، انتظار عملکرد بیشتر و بهتر نیز از واحد های محاسباتی نظیر FPU می رود. لازم به ذکر است که SSE یک دنیا اطلاعات است و ما فقط توضیحی خلاصه از این تکنولوژی را عرضه کردیم. پس این همه آن چیزی نیست که وجود دارد.

اما در مورد AVX یا Advanced Vector Extensions باید گفت: این تکنولوژی در ماه March سال 2008 از سوی اینتل عرضه شد و شامل متد هایی بسیار پیشرفته بر پایه کد های x86 برای بهبود محاسبات و کار های برداری یا Vector ارائه شده است. استفاده از این تکنولوژی گام بزرگی برای معماری Bulldozer به شمار می رود. این را بدانید که هم اکنون فقط این سیستم عامل ها قادر به پشتیبانی از AVX می باشند:

- لینوکس هایی که نسخه هسته آن ها 2.6.30 و بالا تر است

- ویندوز 7 – ویندوز سرور 2008 نسخه R2 و سرویس پک 1

- مکینتاش : اطلاعاتی در دسترس نیست.
[تصویر: 4-bulldozer.jpg]
بر اساس تصویر بالا، هر ماژول بولدوزر دارای دو هسته خواهند بود و برای سیستم عامل به عنوان یک پردازنده دو هسته ای شناخته خواهند شد. اما این هنوز هم بسیاری را به این سوال می رساند که ماژول های Bulldozer واقعا تا چه اندازه ای کارایی دارند؟

ای ام دی ادعا کرده که ماژول ها می توانند در اندازه ای بسیار کوچک تر از یک پردازنده دو هسته ای باشند و توان مصرفی و گرمای کمتری هم داشته باشند و در همین اندازه کوچک هم می توانند معادل 80 در صد یک پردازنده دو هسته ای معمولی، کارایی داشته باشند.

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

- سخن پایانی:

بولدوزر حرف های زیادی برای گفتن دارد. این معماری بسیار نو آورانه و جالب است. ظرفیت های بالایی هم دارد. این که ماژول هایی دو هسته ای با 80 درصد عملکرد پردازنده های دو هسته ای عادی و بسیار کوچک تر و کم مصرف تر استفاده شوند، این پتانسیل را به وجود آورده که با افزایش تعداد ماژول ها به عملکرد فوق العاده ای دست یافت. در حالی که مصرف در حد متعالی باشد. در کل استفاده از ماژول ها به جای هسته های تکی، پشتیبانی از تکنولوژی های جدید نظیر SSE 4.2 و AVX و FPU های بسیار قدرتمند، این معماری را به چیزی بسیار قدرتمند و پایدار تبدیل کرده است. احتمالا شاهد بهبود بیشتری در این معمار تا سال های آینده خواهیم بود. البته امیدواریم که پردازنده های مبتنی بر این معماری به تولید انبوه برسند چون بعد از سال 2012 ، معلوم نیست AMD ای وجود داشته باشد یا خیر! به هر حال امیدواریم که بتوانیم این معماری را در عرصه عمل نیز ببینیم و بنچ مارک های آن را در اختیار شما قرار دهیم.

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

Viewing all articles
Browse latest Browse all 11241

Trending Articles