جمعه, ۱۴ اردیبهشت, ۱۴۰۳ / 3 May, 2024
مجله ویستا

معماری AMD K۱۰ ( قسمت اول)


معماری AMD K۱۰ ( قسمت اول)
طی یک سال گذشته شرکت امریکایی amd که بعنوان دومین کارخانه ی بزرگ در بازار پردازنده ها به حساب آورده می شود ، معماری جدید خود را در قالب یک server solution Barcelona ارائه کرد. در واقع Barcelona جزو دسته ی Opteron ها محسوب می شود که توانایی های جدید ی را نسبت به مدل های قبلی در زمینه های مجازی سازی داراست و با multi-socket scaling خود ، توانایی های قابل توجهی را در بسیاری از نرم افزار های همسان ساز چند مسیره از خود بروز می دهد.
با توجه به جذابیت کامپیوتر های Desktop یا رومیزی ، معماری K۱۰ در راستای ایجاد یک بستر کاملا جدید و یکپارچه ، متشکل از یک پردازشکر PHENOM X۴ و مادربردی با چیپ ست AMD-ATI و یک پردازشگر گرافیکی ( یا بیشتر) آن هم از AMD-ATI ، تحت نام SPIDER ، به بازار عرضه شدند. نتیجه ی این مجموعه ، تشکیل یک ماشین قدرتمند در زمینه ی بازی و مالتی مدیا با تناسب ۱۰۰ درصد و تحت پوشش AMD بود. پردازنده ی این مجموعه خود یک محصول کاملا AMD ای است که تحت تاثیر معماری قبلی یعنی K۸ ، می باشد اما با تغییراتی عمده بخصوص در بهبود کارکرد در زمینه ی برنامه های چند مسیری یا multithread و i.e ( برنامه های i.e قادرند تا از چند هسته به طور همزمان و کامل استفاده کنند.).
بسیاری بر این باورند که با دو هسته در یک پردازنده بطور طبیعی ،دوبرابر شدن کارکرد حاصل خواهد شد. این نظر شبیه به استفاده از ۱۰ کارگر برای انجام کار یک کارگر است که موجب ۱۰ برابر شدن سرعت انجام کار می شود. در واقع این عمل شما را مجبور می سازد تا کار را در یک مسیر به شکل موازی بین آنه تقسیم کنید. البته قرار دادن محصولات در کنار هم نیز تا اندازه ای زمان بر است؛ از این رو پرش کارکرد هرگز نمی تواند خطی باشد. PHENOM و کلا خانواده ی K۱۰ اصولا برای اجابت کردن خواسته های رو به افزایش برنامه های multithread ، طراحی و مشهور شده اند.
● نوزاد جدید در شهر
معرفی یک ریز معماری جدید همواره یک رویداد جالب تلقی می شود. نسل پردازشگر های K۱۰ در نوع خود قابل احترام است (هرچند بر پایه ی معماری های قبلی است) ؛ اما افزایش حافظه ی کش و بالا رفتن سرعت باس، کاهش و بهبود فرایند ساخت و نحوهی آرایش اجزا ،مشابهتی با گذشته ندارد. تمام موفقیت این خانواده در گام اول به یکسان بودن پایه ی خود استوار بوده است. گذشت زمان ثابت کرده است که یک معماری خوب (با پتانسل خوب) می تواند موجب وسعت رقابتی بیشتر در بازار باشد و این خود جنبه ی تمایزی در بین تولیدات مشابه محسوب می شود. یک پردازنده ی پیشرفته قادر است تا در مقابل رقم بالای عملیات در یک چرخه (CYCLE) در یک کلاک نسبتا پایین بسیار سریع عمل کند. البته تولید پردازنده هایی با ترانزیستور های کم ، برای تولید در کمیت های زیاد مناسب تر به نظر می رسند ، اما کاملا واضح است که نسل فعلی پردازنده های K۸ به شکلی که در حال حاضر در حال اتفاق است ، بطور کامل توسط مشتقات K۱۰ در دسته بندی های متفاوت با کارایی های متفاوت و همچنین قیمت های متفاوت ، جایگزین خواهند شد. اگرچه هنوز پردازنده های فنوم نوظهور هستند ، ممکن است دارای ضعف ها و مشکلات زیادی باشند به همین دلیل است که تا قبل از ظهور پردازنده های PHENOM II ، تنوع پردازنده های سری K۱۰ بسیار محدود و کم بود اما در کل تولید چهار هسته های یکپارچه با تکنولوژی ۶۵NM ، لقمه ی بزرگی به نظر می رسید. فضای داخلی این پردازشگر ها ۲۸۶ میلی متر مربع است که این دو برابر بزرگتر از پردازشگر های CORE ۲ DUO و بیش از دو برابر اندازه ی یک ATHLONE X۲ (Brisbane) است.
که بعنوان دومین کارخانه ی بزرگ در بازار پردازنده ها به حساب آورده می شود ، معماری جدید خود را در قالب یک server solution Barcelona ارائه کرد. در واقع Barcelona جزو دسته ی Opteron ها محسوب می شود که توانایی های جدید ی را نسبت به مدل های قبلی در زمینه های مجازی سازی داراست و با multi-socket scaling خود ، توانایی های قابل توجهی را در بسیاری از نرم افزار های همسان ساز چند مسیره از خود بروز می دهد.
با توجه به جذابیت کامپیوتر های Desktop یا رومیزی ، معماری K۱۰ در راستای ایجاد یک بستر کاملا جدید و یکپارچه ، متشکل از یک پردازشکر PHENOM X۴ و مادربردی با چیپ ست AMD-ATI و یک پردازشگر گرافیکی ( یا بیشتر) آن هم از AMD-ATI ، تحت نام SPIDER ، به بازار عرضه شدند. نتیجه ی این مجموعه ، تشکیل یک ماشین قدرتمند در زمینه ی بازی و مالتی مدیا با تناسب ۱۰۰ درصد و تحت پوشش AMD بود. پردازنده ی این مجموعه خود یک محصول کاملا AMD ای است که تحت تاثیر معماری قبلی یعنی K۸ ، می باشد اما با تغییراتی عمده بخصوص در بهبود کارکرد در زمینه ی برنامه های چند مسیری یا multithread و i.e ( برنامه های i.e قادرند تا از چند هسته به طور همزمان و کامل استفاده کنند.).
بسیاری بر این باورند که با دو هسته در یک پردازنده بطور طبیعی ،دوبرابر شدن کارکرد حاصل خواهد شد. این نظر شبیه به استفاده از ۱۰ کارگر برای انجام کار یک کارگر است که موجب ۱۰ برابر شدن سرعت انجام کار می شود. در واقع این عمل شما را مجبور می سازد تا کار را در یک مسیر به شکل موازی بین آنه تقسیم کنید. البته قرار دادن محصولات در کنار هم نیز تا اندازه ای زمان بر است؛ از این رو پرش کارکرد هرگز نمی تواند خطی باشد. PHENOM و کلا خانواده ی K۱۰ اصولا برای اجابت کردن خواسته های رو به افزایش برنامه های multithread ، طراحی و مشهور شده اند.
● نوزاد جدید در شهر
معرفی یک ریز معماری جدید همواره یک رویداد جالب تلقی می شود. نسل پردازشگر های K۱۰ در نوع خود قابل احترام است (هرچند بر پایه ی معماری های قبلی است) ؛ اما افزایش حافظه ی کش و بالا رفتن سرعت باس، کاهش و بهبود فرایند ساخت و نحوهی آرایش اجزا ،مشابهتی با گذشته ندارد. تمام موفقیت این خانواده در گام اول به یکسان بودن پایه ی خود استوار بوده است. گذشت زمان ثابت کرده است که یک معماری خوب (با پتانسل خوب) می تواند موجب وسعت رقابتی بیشتر در بازار باشد و این خود جنبه ی تمایزی در بین تولیدات مشابه محسوب می شود. یک پردازنده ی پیشرفته قادر است تا در مقابل رقم بالای عملیات در یک چرخه (CYCLE) در یک کلاک نسبتا پایین بسیار سریع عمل کند. البته تولید پردازنده هایی با ترانزیستور های کم ، برای تولید در کمیت های زیاد مناسب تر به نظر می رسند ، اما کاملا واضح است که نسل فعلی پردازنده های K۸ به شکلی که در حال حاضر در حال اتفاق است ، بطور کامل توسط مشتقات K۱۰ در دسته بندی های متفاوت با کارایی های متفاوت و همچنین قیمت های متفاوت ، جایگزین خواهند شد. اگرچه هنوز پردازنده های فنوم نوظهور هستند ، ممکن است دارای ضعف ها و مشکلات زیادی باشند به همین دلیل است که تا قبل از ظهور پردازنده های PHENOM II ، تنوع پردازنده های سری K۱۰ بسیار محدود و کم بود اما در کل تولید چهار هسته های یکپارچه با تکنولوژی ۶۵NM ، لقمه ی بزرگی به نظر می رسید. فضای داخلی این پردازشگر ها ۲۸۶ میلی متر مربع است که این دو برابر بزرگتر از پردازشگر های CORE ۲ DUO و بیش از دو برابر اندازه ی یک ATHLONE X۲ (Brisbane) است.
ذکر یک نکته در اینجا شاید بد نباشد : اکثر کمپانی های بزرگ همواره با ساختن یک تراشه یا هسته یا انجین قدرتمند با قابلیت های زیاد ، تنوع محصول را از همان یک اثر ایجاد می کنند. برای مثال AMD در بسیاری موارد با خاموش کردن یک یا دو یا سه هسته از مجموع ۴ هسته و ایجاد تغییراتی در فرکانس و کش ، در حال حاضر تنوع محصول فراوانی را ایجاد کرده است. البته میزان بازدهی و تنوع به درجه ی کمال فناوری مجموعه بستگی دارد. البته بر خلاف پردازنده های CORE ۲ QUAD اینتل ، ای ام دی در یک هسته ی یکپارچه سری k۱۰ را عرضه کرده است. از طرف دیگر اینتل از MCM( شاخص چیپ چند گانه MULTY chip module ) استفاده می کند که به آنها اجازه می دهد تا دو پردازنده ی دو هسته ای را در یک جایگاه LGA مشابه قرار دهند و آنها را در یک باس مشترک ادغام کرده است. این نوع اتصال پردازنده ها در یک باس مشترک برای dual core ها نسبت به یک quad core یکپارچه ، محدودیت و اشکالاتی را در ارتباط بین هسته ها ایجا می کند و آن ایجاد بار سنگین ترافیکی بر روی چیپ ست است. برای آنکه اطلاعات موجود در کش L۲ از پردازشگر dual core اول به کش L۲ پردازنده ی دوم برسد ، می بایست دائما بین چیپ ست رفت و آمد داشته باشد. این نوع عمل در یک نوع بارگذاری از سرور ها می تواند به شکل قابل توجی کارکرد سیستم را کاهش دهد ولی هنوز برای اکثر کاربران در اکثر عملیات ها ی چند مسیری ، برای سنجش به دلیل یک شمار نسبتا پایینی از حافظه ی عملیات های I/O ، نتیجه قابل قبول است. این وابستگی خود در راهی از مسیر اول و دوم در دوهسته ی اول استفاده می کند و مسیر سوم و چهارم از جفت هستته های دوم استفاده می کند که نیاز اشترک گذاشتن داده ها را بین کش های هر هسته کاهش می دهد. مسیری که در پیکر بندی MCM توسط اینتل تعیین شده است ، عملا یک وجه ی قدرتمند در طراحی پردازننده های اینتلی به حساب نمی آید بنابراین وجه ی خیلی قدرتمند و خلاقی نیست ولی راهکار بسیار کارامدی محسوب می شود که تمامی این اشکالات در نسل نه چندان نو ظهور Core i۷ طی یک فرآیند تولید پیچیده ،دقیقا همانند k۱۰ ها بر طرف شده و به عقیده ی بسیاری از کارشناسان اینتل از تجربه و حرکت AMD از k۱۰ ها به نفع محصول تازه ی خود Core i۷ استفاده کرده است.
● یک انقلاب در معماری یا یک حرکن تکاملی؟
اگرچه هسته ی k۱۰ ممکن است بسیار به هسته ی k۸ شباهت داشته باشد ولی انصافا تغییرات بسیار زیادی را در آن می توان دید. در جدول زیر شما می توانید لیستی از تغییرات اعمال شده را ببینید که ما به ترتیب و مختصرا در ادامه ی کار آنرا برای شما تشریح خواهیم کرد.
از یک نقطه نظر ساده می توان اینگونه عنوان کرد که هر پردازشگر ۴ فاز را در ساختار خود دارد:
۱) ورود کد های عملیاتی
۲) ورود عمل کننده آدرس
۳) انتقال عملوند به دورن رجیستری پردازشگر
۴) اجرای عملیات پردازش
در عمل ، داده ها می توانند برای انتقال به رجیستری های حافظه ی پردازشگر ، بعد از اینکه پردازشگر برخی محاسبات را روی آنها انجام داد ، ساده شوند.
● ورود دستورالعمل
یک پردازشگر k۸ به روش ورود دستورالعمل در هر کلاک پردازش از کش L۱ (دستورالعمل) در بلوک های ۱۶ بایتی با داخل بافر (حافظه میانجی پردازنده) عمل می کند. ورود دستورالعمل ها از بلوک ها ( تنها برای ارسال شدن به کانال های رمزگذار X۸۶) در داخل بافر انجام می شود.نسبت ورود ( که شامل ۱۶ بایت در کلاک می باشد) ارسال داده ی رمز گذاری شده را در هر کلاک ممکن می سازد: بسته هایی از دستورالعمل هایی با طول متوسط (کمتر از ۵ بایت) . البته در برخی از دستورالعمل ها ، اندازه ی متوسط هر دستورالعمل در زنجیره می تواند از ۵ بایت بلند تر شود. برای نمونه طول SSE۲ ( دستورالعمل های ساده با رجیستری – عملوند های رجیستری مانند MOVAPD XMM۰, XMM۱ ) روی هم ۴ بایت است. در حین انجام آدرس دهی غیر مستقیم همراه با استفاده از مبنا و رجیستری های حرکت ( مثلا MOVAPD XMM۰, [EAX+۱۶] ) ، طول کل دستورالعمل به ۶ تا ۸ بایت افزایش می یابد.
در حالت ۶۴ بیت ، هنگام استفاده از رجیستری های اضافی ، به کد دستورالعمل یک بایت پیشوند REX ی دیگر اضافه می شود. در این روش طول دستورالعمل های SSE۱ ( اگر دستورالعمل یک مبنای برداری باشد ( هر چهار تا ۳۲ بیت یک مبنای برداری است) یک بیت کوتاهتر است ) اما اسکالر ( با یک عملگر تکی) دستورالعمل های SSE۱ نیز می تواند یک طول ۶ تا ۹ بایتی در بسیاری شرایط داشته باشد. در این شرایط نسبت ورود ۱۶ بایت در هر کلاک برای حفظ سرعت کدگذاری ۳ تا در هر کلاک دستورالعمل های SSE در x۸۶ ناکافی است. به دلیل انکه k۸ دو بلوک FPU ی ۶۴ بیت دارد، برای اجرای عملیات SIMD در یک زمان مشابه مورد استفاده قرار می گیرند ، یک یک دستورالعمل برداری SSE در دو عملیات بزرگ که در دو چرخه درون بلوک های FPU ی ۶۴ bit ی اجرا می شوند ، کدگذاری می گردند. اگر طول دستورالعمل SSE در بین ۷ تا ۹ بایت باشد، نسبت ورود داده ها ۱۶بایت در کلاک می شود. حد اکثز سرعت کدگذاری این دستورالعمل ها ۵.۱ در هر چرخه است ، یعنی ۳ دستورالعمل در یک چرخه . نکته ای در اینجا قابل ذکر است این است که به فاکتور محدود کننده در معماری k۸ نسبت ورود داده نیست بلکه میزان پهنای بلوک های FPU است که فقط ۶۴ بیتی هستند.
در تصویر می توانید یک نمونه از پیکربندی پنج فرمان را در یک بلوک ۳۲ بایتی ببینید که می تواند برای یک کلاک انتخاب شود. اگر صف این دستورالعمل های بلند چندین بلوک ۱۶ بایتی را را اشغال کند ، در زمان ورود دستورالعمل بلوک های ۱۶ بایتی ممکن است نسبت ۳ دستورالعمل در هر کلاک را خراب کند. معماری k۱۰ این نسبت ورود را به عنوان یک ضرورت دارد . از این نظر ورود بلوک ۳۲ بایتی که در معماری نو آورانه ی k۱۰ قرار داده شده ، به نظر می رسد که چیز بیشتری را نسبت دهی کند. در اصل بلوک ۳۲ بایتی ورود و انتخاب دستورات ۸ بایتی را از کش ممکن می سازد ، چرا که پهنای FPU در فنوم، ۱۲۸ بیت است و همین عامل موجب انجام عملیات های پایه ی برداری SSE در یک چرخه می شود که درست به مانند پردازنده ی Core۲duo است. این دلیلی برای افزایش نسبت ورود به ۲ است. ورود دستورالعمل اصولا از میان کش L۱ بیرون می رود بنابراین پهنای باس بیت کش L۱ و هسته باید از ۲x۶۴ بیت به ۲x۱۲۸ بیت افزایش داده می شد. یک ریز معماری این عملیات را انجام داده و توانسته تا ۴ عملیات ۸ بایتی را در هر چرخه رمز گذاری کند اما فاکتور محدود کننده دیگر ، تعداد رمز گذار ها و بلوک های FPU است که فقط ۳ تا از این بلوک ها موجود است اما ورودی ۳۲ بایتی می تواند سرعت اجرای دستورالعملی مختلط فرمانهای سوار بر نقاط شناور عملیات ها را افزایش دهد.پردازشگر های CORE۲ اینتل دستورالعمل ها را در بلوک های (شبیه به K۸) می گیرند و می توانند ۴ دستورالعمل را در کلاک فقط وقتی که طول دستورالعمل ها بیش از ۴ بایت نیست کد گذاری کنند. از طرفی کدگذار فقط می تواند ۳ دستورالعمل را در هر کلاک پردازش کند. مهندسان اینتلی از کمی حیله با همین تراکم استفاده کرده اند که نسبتا مشکل را حل کرده است. در هنگام ایجاد یک گره ی اجرایی ، دستورالعمل های بلندSSE درون یک پیش بافر مخصوص داخلی موقتا ذخیره میشوند (با بلندب ۶۴ بایت) که نهایتا با ۴بلوک با دستورالعملهای ۱۶ بایتی تقسیم شده و فرستاده می شوند که ورود دستورالعمل های کدگذار را در یک نسبت ۳۲ بایتی در هر کلاک میسر می کند. اگر گره در این چهار گروه نتواند جور شود ، قادر نخواهد بود به داخل بافر آورده شود و اجرا صد در صد محدود خواهد شد. هر چند ممکن است این سوال مطرح شود که چند درصد از این شرایط در K۱۰ قابل اجراست اما باید متذکر شویم که در K۱۰ مشکلی از این نوع وجود ندارد..
پردازشگر های مدرن X۸۶ می توانند به صورت یک پردازشگر در کنار یک پردازشگر دیگر در نظر گرفته شوند. قبل از اجرای یک مرحله ، یک مرحله کدگذاری دستورالعمل های X۸۶ صورت می گیرد و در آن دستورالعمل های استاندارد به عملیات هایی ریز تقسیم می شوند. برخی عملیات ها نیز در یک روش سوپر اسکالر ، درون واحد های موازی ALU برای عملیات های کامل و FPU برای اعداد حقیقی انجام می شوند. K۸وk۱۰ و Core۲ همه سه واحد هر یک برای حساب ALU ی صحیح و سه تا برای شکستن نقاط یا ممیز های شناور (FPU= واحد نقاط شناور) دارند و نیز واحد های اضافه ای مانند ۳تا AGU در پردازشگر های AMD، واحد های تولید آدرس برای استفاده در بخش آدرس دهی یا جهت محاسبه ی آدرس های حافظه وجود دارد. از ابتدای دهه ی نود ، ایده ی X۸۶ CISC ( محاسبه ی مجموعه ی دستورالعمل ها ) شروع به شکستن و کاهش و شبیه سازی فعال در RSIC ی ( محاسبه ی دستورالعمل های کاهش یافته ) ساده تر و موثر تر از مایکرو شد ؛ یعنی کد های مایکرو اجرا شدند. اولین پنتیوم ها پردازنده های مطلوبی بودند و از این یکپارچه گی بر خوردار بودند. پردازنده های AMD K۵ نیز در همان بازه ی زمانی یک پردازشگر x۸۶ ب مبنای معماری AMD ۲۹۰۰۰ RISC بود اما دارای امکانات فوق العاده ای در قالب یک کدگذارx۸۶ کار می کرد. این امر اجرای دستور العمل را تند تر و موثر تر می کرد. مثلا معماری کلاسیک RSIC دانش اجرای عملیات های ضرب و تقسیم را نداشت چه برسد به جذر و درجه ها. اما در k۵ یک قسمت جداگانه برای هر یک از این عملیات ها قرار دادده شده بود که از روش های ساده ای برای محاسبه ی انواع پیچیده ای توسط به کاربردن ابزار های الگوریتم استفاده می کرد. از طرفی یک نمونه پردازشگر x۸۶ دارای دستورالعمل های پیچیده ی بسیاری است و زمان زیادی را در اجرا بر روی پردازنده های ۴۸۶ و ضعیفتر می گرفت. در بسیاری از جنبه ها ماشین های برنامه نویسی RISC اگر در یک اسمبل کننده ی زبان اعمال شوند ، بسیار پیچیده تر خواهند بود اما برنامه هایی از این قبیل می توانند تند تر از آنهایی که دستورالعمل های پیچیده ای برای عملیات های ریاضی بالاتر دارند ، کار کنند.
محمدصادق مجدی