PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : بررسی تخصصی تراشه های انویدیا از تسلا تا فرمی نویسنده : وحید vfsdf



VFSDF
2012/09/06, 00:52
بررسی تخصصی تراشه های انویدیا از تسلا تا فرمی نویسنده : وحید VFSDF

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

داستان دقیقا از کجا شروع شد ؟

شرکت انویدیا در زمان حضوره G70 موفقیت هایی در دوره های کوتاه داشت و اما در همین نسل با شکست هایی سنگین در مواجهه با کارت های شرکت رقیب یعنی ATI داشت.در عصره X1900 Series انویدیا دچار شکست هایی بسیار سنگینی شد و x1950 xtx ضربه اخر این برند به پیکره انویدیا در زمینه پرفورمنس بود.اما انویدیا از مدت ها پیش بر رویه معماری کار میکرد که در ادامه به اون تسلا(tesla ) گفتن و نسل G80 شروع این معماری بود.این معماری به حدی پیشرفته بود که در ابتدایه عرضه موجب شوک رقبا شد و کارایی تا 3 برابر نسل پیشین طبق ادعای انویدیا داشت و از اخرین API شرکت مایکروسافت DX10 بهره میبرد.
برایه شروع و توضیح جدیدترین معماری فعلی انویدیا که ما اون رو فرمی میخونیم لازمه توضیحاتی درمورده معماری ابتدایی تسلا که فرمی هم از خانواده اونه بدم.
البته من قصد ندارم به طور دقیق بر رویه معماری G80 زوم کنم چون از حوصله بحث خارجه و اگر دوستان علاقه مند بودن من در یک تاپیک جدا گانه به بحث و تاریخچه پیدایشش میتونم اشاره کنم.

پیش از کودا کور ها انویدیا برایه پردازش دادها از هسته هایی به نامه SP که مخفف Streaming processor بود بهره میبرد.

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


خوب متاسفانه sp ها کاملا از خط لوله پردازش تشکیل شده بودن.یک عمل به sp فرستاده میشد و توسط دو ALU و یک FPU مرحله خواسته شده عملوند رو پردازش و انجام میداد.داده های Integer و floating point احتمالی اون هرکدوم در ALU مربوط پردازش و واحد FPU یا Floating point unit داده هایه ممیز شناور سنگین رو از خط لوله پردازش عبور میده و پردازش میکنه.در این نسل sp یک مشکلی وجود داشت و اون نداشتن حافظه سریع catch بود.این به این معناست که این پردازش گر به طور ویژه به درد پردازش های سنگین عملیات ریاضی میخورد نه چیزه دیگر.به همین علت هر sp بسیاری از وقت خودش رو صرف کار رویه پیکسل ها و ورتکس ها(رئوس) میکرد.که این باعث میشد نداشتن کش اونقدرها هم برای SP مهم نباشه.

میشه اینطورعنوان کرد که sp ها مدل بسیار ساده شده SPE های پردازش گر CELL درPS3 بودن یا حتی میشه گفت SPE ها مدل ساده SM های انویدیا هستن که در ادامه درموردشون توضیح میدم.
SP ها از جنس پردازش گر هایه نرده ای یا اسکالر(Scalar) هستن و عملکرد این نوع پردازش گرها جای صحبت زیاد داره که از حوصله تاپیک خارج است.
در مقابل اسکالر ها ابر اسکالر ها یا super scalar ها هستن که ati قدیم یا amd فعلی از اون برایه gpu هاشون استفاده میکنن.که مزایا و معایب خودشونو دارن.اگر دوستان مایل بودن در تاپیک جداگانه ای در اینمورد به طور اختصاصی بحث میکنیم.
برگردیم به بحث:
خوب تا حدودی با عملکرد sp ها اشنا شدیم.اما درواقع sp ها به طور خاص قابله استفاده نیستن و در ساختار بزرگتری درون sm یا streaming processor مورد استفاده قرار میگیرند.
Sm ها در واقع ارایه ای از sp ها هستن.مثلا در نسل G80/G92/GT200 در هر SM 8 عدد sp قرار داشت که توضیحشون رو در ادامه میدم.
خوب معماری sm در نسل تسلا قبل یعنی gt200 و g80 که درشکل زیر مشاهده میکنید:

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


هر sm متشکل از 8 پردازنده جریانی یا همون sp (streaming processor) و به همراه 2 پردازنده چند منظوره خاص SFU که مخفف Special function unit هست.
SFU شامل 4 واحده ضرب ممیزشناور(Floating point or FP- Multiply) هست که برایه عملیات هایه خاص غیره جبری مثله محاسبه سینوس یا کوسینوس و... به کار میرود.مورده بعد برایه پردازش داده هایی مثله Anistropic texture ******ing استفاده میشه.هرچند انویدیا در این مورد به طور مشخص صحبت نکرده.اما فکر میکنیم هر SFU به طور کامل از خط لوله(Pipeline) تشکیل شده یعنی یک-عمل/یک-دستور یا عملوند که سرانجام نتیجه را به ما میدهد.
در SM ما واحده MT Issue رو میبینیم که وضیفه ارسال دستورالعمل ها رو به واحد هایه sp و sfu در گروه داره.
علاوه بر پردازش گرهایی که در sm وجود داره.یک حافظه کش عملیاتی کوچک وجود داره که در شکل I Catch میبینیم که مخفف instruction catch هست و داده هایه فقط خواندنی ذخیره میشود.یک حافظه هم خواندنی هم نوشتنی read/writeshared memory با حجم 16 kb هم وجود دارد که داده های اشتراکی sp ها در اون قرار میگیرد.
حافظه catch به طور هدفمندی کوچک طراحی شده چون برخلاف روال میکروپردازنده های دکستاپ داده هایی که قرار است در این قسمت ذخیره شوند بسیار کوچک اند.
حال بیایم کمی از بالاتر به ساختار تراشه ها نگاه کنیم.در اینجا ما TPC یا Texture/pixel Cluster رو مشاهده میکنیم.

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


همونطور که میبینید ساختار کلی دونسل GT200 و G80/G92 بسیار به هم شبیه.علت این مورد ایجاد ساختاری ماژولار توسط انویدیا برایه طراحی اولیه تسلا هست که موجب شد G80 باکمی تغییر و بزگ شدن به GT200 تبدیل شود
ماژولار بودن کلاسترها یا خوشه ها در تسلا به این معنا بود که هرتعداد SM میتونستن در خوشه قرار بگیرند و این موجب این شد در نسل G80/G92 2عدد SM قرار گیرد اما در GT200 3 عدد SM در خوشه جای بگیرند.
ساختار کلاستر ها در GT200 انچنان تغییری نکرد.اجزایه اون شامل SM ها و تعدادی کنترل منطقی یا Logic control و البته بلاک تکسچر.
بلاک تکسچر یا texture block خود شامل texture addressing و fiilter logic هست که در ادامه خدمت دوستان بیشتر توضیح میدم.
ساختار به کلی ماژولار تسلا اولیه به نامه SPA یا Streaming processor arrayموجب شد انویدا برایه گسترش این معماری برتر با مشکلات کمی روبه رو بشه.
شکل زیر ساختاره یک G80 که نسل اولیه تسلا هست رو نشون میده:

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


ساختار TPC یک G80 رو که خدمت دوستان توضیح دادم.این GPU شامل 8 عدد TPC بود که در هرکدام از TPC ها2 SM یعنی مجموعا 128 SP و 32 SFU که با 754 Million ترانزیستور ایجاد شده بودند.
حال ببینیم GT200 که انویدیا GT اون رو به نام Graphics TESLA نام گذاری کرده بود چگونه است:

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


خوب میبینیم از 10 فروند TPC بهره برده که هر TPC شامل 3 عدد SM هست پس این GPU دارای 240 SP و 60 تا SFU هست.با توجه با این مشخص براورد کلی افزایش قدرت 87.5 % رو نسبت به G80 شاهد هستیم.
این هم چارت عملکردی GT200 در مجاورت باقیه اجزایه GPU و پل شمالی:

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


برای اشنایی با عملکرد این GPU توضیحاتی میدم.در قسمت جلویی GPU ما زمانبند ها (Schaduler) وکنترل منطق logic control رو داریم که برایه توزیع حجم کار ها در تمام ارایه هسته های پردازشی به کار رفتن.در قسمت دیگر ما حافظه های تکسچر کش سطح 2 L2 Texture catch که برای ضخیره سازی بافت ها به کار میرن و واحد های پردازشگر تصویر یا همون rasterization processos که تصویره نهایی رو از الگویه شبکه داخلی inter connection network و حافظه های DRAM گرفته و مراحل پایانی فیلـــترینگ و خروج داده ها و ارسال به فریم بافر frame buffer انجام میشه.
این بود توضیحی مقدماتی رویه نسل اولیه و ثانویه تسلا که در ادامه به اخرین نسل اون یعنی فرمی میپردازیم(نسل بعد معماری انویدیا کپلر نام دارد که اطلاعات دقیق از اون دردسترس نیست)

Nvidia Fermi with cuda core

انویدیا با تاخیری 6 ماهه نسبت به رقیب کارت هایه مبتنی بر فرمی رو وارد بازار کرد.اما علل این تاخیر از طرف این شرکت با توجه به تغییرات اساسی معماری قابل بخشش هست از اون جمله میتوان به اضافه کردن واحد هایه پولیمورف انجین در هر sm که دقیقا به منظور براورده کردن خواسته های نسل اتی API مایکروسافت یعنی DX11 بود انجام گرفت.
بیایید با هم به برسی وتاریخچه شکل گیری این پردازشگر پیشرفته بپردازیم:
انویدیا در ابتدا فرمی را به دومنظور طراحی کرد
1:فرمی برای کار در ابر کامپیوترهای تسلا (Architected for tesla)
2:فرمی برایه صنعت بازی(Architected for gaming)
معماری هردو بخش یکی هست اما بنده قصد دارم در هردو مورد توضیحاتی رو بدم اما تمرکز اصلی مقاله رویه صنعت بازی هست.



Architected for tesla

برخلاف رقبایه انویدیا که به طور مشخص بر این موضوع تاکید دارن که پردازشگر ها اینده رو برایه ماروشن نگه میدارن.انویدیا خلاف این موضوع رو عنوان میکنه.بر اساس تئوری کلی و اولیه این شرکت تعداد زیادی پردازنده ضعیف و کم سرعت که داده ها میانشون تقسیم میشن کار هارو بسیار سریعتر از تعداد کمی کارگر با سرعت بسیار زیاد انجام میدن.
به طوره کلی نحوه گسترش gpgpu بر این اساس هست که کارها و وظایف بین چندین پردازنده کم سرعت تقسیم بشه و این باعث میشه کارها با سرعت بسیار بالاتری انجام بگیره.طبق ادعایی که چندی پیش انویدیا عنوان کرده بود gpu ها میتونن تا 200 برابر سریعتر از cpu ها باشن که در یکی از کنفرانس هایه اینتل این موضوع با اختلاف زیاد با عدد عنوان شده تایید شد و انویدیا از اینتل حتی با همین حد اقرار هم تشکر کرد.
طبق همین تئوری انویدیا از گذشته هایه دور در فکر جاگزین کردن gpu در پردازش گر هایه ابر کامپیتور ها شد و کودا با معماری نوین فرمی شروع قدرتمند این مورد بود.همونطور که اطلاع دارید چندی پیش سریعترین ابر کامپیتوتر جهان در چین با نام tinahe 1-A که از 7168 پردازنده TESLA M2050 که معادل GFORCE اون میشه GTX470 تشکیل شده که در صدر پرقدرت ترین ابرکامپیوتر هایه جهان قرار گرفته.

نحوه گسترش معماری فرمی بر این اساس بود که هر یک از اجزا حتی sm ها به طور ماژولار عمل کنن و هریک بتونن در غیاب اجزای دیگه به کار خودشون ادامه بدن.بر همین اساس انویدیا میتونه تراشه فرمی رو تنها با یک sm راه اندازی کنه چون به طور مستقیم به بخش راستر متصله و interconnect network هم در sm قرار داره که باعث میشه بدون نیاز به کلاستر (cluster) کارشو انجام بده.

تسلا در واقع بخش پردازش بازدهی بالا یا high performance compute انویدیا هست که در ماژول های مختلف و حتی شامل 4 gpu به مشتریان عرضه میشه.در ابر کامپیوتر ها پردازش هایه مربوط به اشکال رو در سطح صنعت بازی هایه کامپیوتری نداریم به همین سبب در سری TESLA M2050 به موتور پردازشگر اشکال POLYMORPH ENGINE که در اون واحد تسلیتور مربوط به DX11 وجود دارد در بسیاری از SM ها نیازی نیست پس در مصرف زیاد این GPU که بخش زیادی از اون در این بخش صرف میشود صرفه جویی شده و ابر کامپیوتر ها مصرف کلی پایین تری پیدا میکنند.

البته بعضی از وظایف پردازشگر اشکال ممکنه در مراحل gpgpu نیاز شود که در اون صورت pe وارد عمل میشود.
انویدیا به مشتریان خودش این GPU هارو همراه با بسیاری از اجزایه دیگه به شامل حافظه هایه سریع ddr ویا حتی فلیپ فلاپ های فوق سریع مربوط به ابرکامپیوتر ها در ماژول هایی به نامه TESLA SUPER COMPUTER یا COMPUTING CLUSTER عرضه میکنه

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


تصویره بالا مربوط به C1070 هست که شامل فرمی نیست و از GT200 تشکیل شده اما تمام اجزایه مورد نیاز یک خوشه پردازش تسلا درش وجود داره.
در این مقطع به علت شباهت بسیار زیاد و تنها تفاوت هایه نرم افزاری بینه دو بسط فرمی یاد شده.یه ادامه بحث در بخش طراحی برایه بازی هایه کامپیوتر میپردازم تا گسستگی مطلب پیش نیاد.و مقاله بصورت فوق حرفه ایی روند خودشو طی بکنه .

Nvidia Fermi Architecture

پیش از توضیح در مورده کلیات این GPU لازمه یاداوری کنم قصد دارم با توضیحاتی از جزء معماری به کل معماری برسم.پس باید از کوچکترین عضو معماری که بنیان اون هست شروع کنم و به کلیت کار خوشه ها بپردازم تا با دستاورد عظیم انویدیا بهتر اشنا بشیم .

CUDA Architecture

فرمی از هسته های کودا تشکیل شده که این هسته ها در داخل sm قرار میگیرند.تمام این هسته براساس استاندارد IEEE 754 که توسط انستیتو مهندسین برق و الکترونیک برای عملیات ریاضی در مورده ممیز هایه شناورFP و Full 32 bit integer مقرر شده انجام میگیرد.
من قصد دارم جزء به جزء اجزایه این تراشه رو خدمت دوستان توضیح بدم چون اعتقاد دارم این مقاله یکی از بهترین ها در سایت هات اور کلاک خواهد بود و برای همیشه از طرف من باقی میمونه.
سعی میکنم بصورت فوق حرفه ایی به عملکرد هسته بپردازم .
با نگاهی کاملا حرفه ایی .

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


در تصویره بالا شمای کلی یک هسته کودارو مشاهده میکنید.برخلافه نسل پیش که از sp هایه ساده تشکیل شده بودن و توضیحاته کاملشو در بخش اول مقاله خدمت دوستان دادم هسته کودا بسیار بهینه تر و پیچیده تره:
: dispatch port وظیفه ای مشابه خوشه(cluster) دسته بالا یعنی sm داره با این تفاوت که تنها وظیفه ارسال/دریافت داده به کودا کور هایه همسایه و شبکه ی بین هسته هارو داره.
Operand collector: وظیفه جمع اوری عملوند ها و ارسالشون به ALU مربوطه برای پردازش داره که بسته به ویژگی داده ها اعم از ممیز شناور یا ثابت به ALU مربوط میفرسته.

FP/INT Unit:عملوند ها به دودسته ثابت یا INTEGER ویا ممیز شناور Floating Point تقسیم میشن که oc بنا به ویژگی به ALU مربوط برایه پردازش میفرسته. ALU که مخفف Arithmetical logic unit هست از مجوعه ای از Gate هایه منطقی تشکیل شده که مجموع اونها ایجاد 1 یا چند خط لوله پردازشی یا pipeline میکنن.عمل و دستورالعمل ها با تغییر در ولتاژ پایه این گیت هایه منطقی عملیات پردازشی رو در خط لوله پردازش انجام میده که این تنها توسط ترانزیستور هایه بیشمار 40nm که ساختار ALU رو تشکیل دادن ممکنه.به طوره کلی ورودی و خروجی هر ALU شامل عملونده که از Operand collector میگیرد و اعمال میشه و دیگری که شامل code یا همون issue ای هست که از واحد کنترل control unit برایه پردازش استفاده میکنه و نتیجه رو به result queue میفرسته.

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


البته این نکته قابله ذکره که از نظره بسیار از مراجع FPU ها بسیار پیچیده تر از ALU های رایج هستن و برخلافه اکثره ALU هایه معمول که از سیستم Two,s compliment یا متمم 2 استفاده میکنن اینها از داده هایه بسیار پیچیده ممیز شناور برایه عملیات پردازشی بهره میگیرند که موجب میشه هر FPU از چندین مدار پیچیده داخلی یا Complex circuit برایه ارتباط Multiple internal ALU,s استفاده کنه و همین باعث میشه صرف یک ALUاون رو حساب نکنیم.
این موضوع برای اولین بار در یک سایت ایرانی توسط من مطرح شد
ALU INT هم طبق گفته انویدیا برایه داده های 64-BIT و دقت بالاتر برای انجام عملیات ها بهینه شده.همچنین از متد FMA یا Fused multiply add برای داده های double and single prec***on استفاده میکنه.
همونطور که گفتم نتیجه پردازش FP/INT Unit به result queue یا صف انتهایی میرسه که توسط واحده اعظام یا شبکه داخلی برایه ادامه عملیات مورد نیاز جذب میشه.
SM in Fermi
واحده SM در فرمی دچار تغییرات بنیادین شده و میشه اونو یک پردازشگر کاملا خودکفا دونست .این سومین نسل ارتقاء یافته sm از دوره تسلا اولیه یعنی G80 هست . علاوه بر اون یک پردازشگر کاملا جدا به نامه polymorph engine هم برایه وظایف dx11 به sm اظافه شده که توضیحات کامل اونو خدمت دوستان خواهم داد.

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.




از اونجایی که قول دادم جزء به جزء معماری فرمی توضیح بدم لازم هست کلیاتی رو درمورده دستورالعمل ها یا instruction ها خدمت دوستان بدم.
در دنیای پردازش های گرافیکی ویا مربوط به GPGPU داده ها به شکل دستورالعمل یا instruction به حافظه گرافیک ارسال میشن. بعد از ارسال حجم عظیم دستورالعمل های ارسالی که از سطح کرنل گرفته میشه حافظه GDDRAM قسمتی ازاون هارو به GPU ارسال میکنه که در کنترلر حافظه برسی و به حافظه کش سطح 2 و سپس به حافظه کش سطح 1 میرسه.
دستورالعمل ها در قسمتی به نامه INSTRUCTION CATCH ارسال میشه تا برایه مراحل بعدی پردازش اماده بشه که شما در بالاترین قسمت SM اون رو مشاهده میکنید.کش دستورالعمل باید بسیار سریع باشه طوریکه تماما از لچ ها( Flip-Flop )باید ساخته شده باشن.
نکته خیلی خیلی مهم:
دستور العمل ها برایه اینکه قابله پردازش توسط هسته ها باشن باید به شکل ترد یا thread در بیان که این مورد از وظایفه warp scheduler هست.
Warp scheduler : که یکی از مهمترین بخش های sm هست و عملکرد اون همراه با dispatch unit هست که سرنوشت عملکرد تراشه رو میتونه رقم بزنه.البته عملکرد کلی این واحد در GIGA Thread Engine که بعدا توضیح خواهم داد مدیریت میشود.
Warp چیست؟ یا Warp از نگاه یک منتقد کارتهای گرافیکی . قبل از اینکه توضیحاتی رو درمورده ریسمان ها خدمت دوستان بدم لازمه چند مورد رو بدونیم.مکانیزم های SIMD و MIMD :

SIMD & MIMD mechanism

در متد های پردازشی یا multiple processingما دو مکانیزم رو مد نظر قرار میدیم . یا ریزتراشه ای براساس عملکرد SIMD یا بر اساس عملکرده MIMD که هرکدوم رو تا حدی برایه دوستان توضیح میدم.
SIMD :

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


در این نوع عملکرد ما ساختاره single instruction , multi data داریم . به این معنا که دستور عمل هایه مشابه به چندین پردازش گر به طور همزمان و سنکرون ارسال و چندین نتیجه برایه ما حاصل میشه. SM هایه NVIDIA و AMD از این دسته هستن.
MIMD

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


در این متد که تقریبا مقابل مکنیزم SIMD هست ما ساختاره multiple instruction , multiple data داریم که به این معناست چند دستور العمل غیره متشابه به چندین دسته پردازشگر غیره همزمان(غیره سنکرون یا Asynchronous ) و غیره متشابه ارسال و سپس چندین نتیجه برایه ما حاصل میشه..
ما میتونیم SPE های پردازشگر CELL که مخفف synergistic processing element هستن از خانواده پردازشگرهایه آسنکرون نام ببریم.این نوع پردازشگر ها مشکلاته زیادی سر راهشون هست که از جمله اونها میتونیم به سخت بودن برنامه ریزی برای عملکرده هر هسته یا عدم همزمانی اتمام عملیات هر هسته که موجب میشه بعضی هسته ها در انتظار صف خروجی باشن و همین باعث میشه بهینه عمل نکنن از جمله بزرگترین مشکلات سر راه این حالت از پردازشگر نام ببریم .این نوع پردازشگر ها مزایایی هم دارن که از جمله اونها میشه به سرعت بسیار بسیار بالایه پردازش ها در صورت بهینگی برنامه ریزی هریک از هسته ها نام برد.
همونطور که خدمت دوستان عرض کردم مجموع CUDA Core ها در SM ها عملکردی SIMD دارن به همین خاطر برایه ایجاد Parallel computing صحیح میان تمام 32 هسته هر sm واحد هایی به نامه warp scheduler نیاز هست که دستور العمل هارو به صورت ترد ها thread زمان بندی و میان هسته ها تقسیم میکنه.
حال ببنیم warp ها چی هستن؟

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.

در تحقیقی که من انجام دادم دست یافتم
ورپ یا ریسمان طبق بیان دپارتمان دانشگاه بریتیش کلمبیا university of british Columbia (UBC) به این صورت معنا شده: Threads group into a SIMD Instruction که همین بیان ساده شمای کلی عملکرد SM رو توضیح میده.زمانبند ریسمان درواقع وظیفه دسته بندی دستورالعمل ها به صورت ترد Thread داره که این مهم به صورت 2 مراحله زیر انجام میگیرد:
شمای کلی یک ریسمان به شکل زیر است:

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.

ادامه مقاله در پست بعدی

VFSDF
2012/09/06, 00:56
1:کنترل جریان ترد های Threadدرون ریسمان : ( Control flow threads into a warp )

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.

همونطور که میبینید زمانبند ریسمان ترد هارو ایجاد ودر میسره هسته ها بر اساس عملیاتی که میخواسته روشون انجام بگیره رها کرده:
اینجا مشکلی مرسوم پیش میاد به نامه واگرایی شاخه ها یا branch divergence که زمانی اتفاق میوفته که ترد هایه درون ریسمان به مسیرهایه اجرایی یا execution path های متفاوتی برن همونطور که درشکل بالا میبینید حدوده 50% از ترد ها دچار واگرایی شدن .
معمولا برای حل این مشکل از سیستم چند ریسمانی یا multiple warp استفاده میکنن که نمونش رو در شکل زیر میتونید ببنید

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.

همونطور که میبینید با این تکنیک بیش از 30% در راندمان GPU بهبود ایجاد کردند(برسی موتورگرافیک بازی ها هم منجر به ایجاد بهینگی هایی از این دست برایه بالابردن سرعت پردازش میشود) دقیقا همون چیزی که با رامین اکبری همیشه سرش بحث و گفتگو میکردیم.
2:اجرایه تیرد هایه عددی درون ریسمان : Execution of scalar thread in warp))

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


طبق شکل بالا براساس معماری پایه ای کامپیوتر دستورات عددی به این صورت به gpu ارسال و سپس بر اساس شکل زیر به خطوط لوله پردازشگر SIMD ارسال میشوند.دستورات از طریق cpu ارسال و gpu وظیفه مالتی ترد کردن وریسمان سازی رو انجام وسپس ترد ها بین هسته ها تقسیم و پردازش و سپس نتیجه نهایی به cpu برای ارسال به ram برای نمایش نهایی انجام میشود.همانند شکل.

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


خوب این از توضیحاته مربوط به زمانبند ریسمان که خدمتتون ارائه دادم دیگه ازین ساده تر نمیتونستم بهش بپردازم . اگر سوال اضافی از این قسمت داشتید خوشحال میشم پاسخ گو باشم چون این قسمت تقریبا از مهمترین قسمت هایه sm هست .
حالا بیایم به sm یکبار دیگر نگاهی بیاندازیم:

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


همونطور که میبینید در فرمی ما 32 هسته کودا داریم.برایه اینکه تردهای درون ریسمان به خوبی بین هسته ها ی کودا تقسیم بشه انویدیا تصمیم گرفته هسته هارو به 2 قسمت 16 تایی تقسیم کنه وبرایه هر کدام یک warp scheduler قرار بده.این به این معناست که هر زمانبند ریسمان در هر ریسمان 16 ترد ایجاد میکنه و به 16 هسته کودا تقسیم میکنه. که مجموع 2 زمانبند کل هسته هارو پوشش میدن.البته زمانبد ریسمان ها داده هایه اختصاصی مثل محاسبه سینوس یا لگاریتم یا تانژانت و.... رو به SFU ها که توضیحاتشو قبلا در بخش GT200 خدمت دوستان داده بودم ارسال میکنن. البته SFU ها یا همون Special function UNIT در FERMI بسیار قویتر شدن و از 2Pipline در gt200 به 4 pipeline در fermi تبدیل شدن.
مورده بعد dispatch unit هست که توضیحاتشو در قسمت زیر خدمته دوستان میدم:
Dispatch unit : همونطور که در قسمت بالا خدمت دوستان توضیح دادم هر warp شامل چند Thread و هر ترد شامل چندین instruction یا دستورالعمل هست.
واحد اعظام هم ریسمان هارو از طریق ارسال به ریجستری انجام میده و این هسته ها شروع به کار میکنن. به ازای هر زمانبند ریسمان یک واحده اعظام وجود داره که عملکرده اسکالری هسته هارو تایید میکنه و 16 ترد داخل ریسمان طبق سلسله مراتب حافظه کش به هسته ها ارسال میشن.
قسمت بعد که میخوایم راجع بهشون صحبت کنیم واحد های خطی یا linear هستن که ثبات ها و پردازشگر هایه تکسچر از اون جمله اند.

TEX & texture catch :

در دنیای داده های DYNAMIC که بخش اعظم ترد هایه گرافیکی رو شامل میشه ما داده های رفتار خطی زیادی داریم که Texture ها بخش اعظم اونها هستن.تکسچرها از اونجایی که تنها برورویه سطح triangle ها پیاده سازی میشن و داده های ثابت و رفتاری خطی linear دارن اما بسیار پر حجم هم هستن و نیاز به واحدی اختصای برایه این منظور دارن که واحد های پردازش تکسچر و کش تکسچر این مهم رو به انجام میرسونن.
uniform catch :ساختار حافظه ای فرمی بر اساس عملکردی به کلی سلسه مراتبی یا hierarchy با حافظه اشتراکی هستن که حافظه کش سطح 1 بسیار پر سرعت برای انجام عملیات های درون sm و ارتباط بین کور ها از طریق شبکه داخلی به کار میروند.یونیفرم کش برایه ارتباط بین این دو به کار میرود.
در ادامه به ساختار تماما سلسله مراتبی فرمی برایه حافظه ها اشاره خواهم کرد.

64KB Configurable Shared Memory and L1 Cache:

در واقع یکی از کلید های نواوری و موفقیت های برنامه پذیری یا( programmablity )و بازدهی (performance) یک اپلیکشین GPU حافظه اشتراکی هست.حافظه اشتراکی در واقع اجازه میدهد بلاک تیرد هایی که به طور همسان یا BLOCK SAME THREAD هستن به صورت همکار (CO OPORATION) اجرا شوند , تسهیل برای انجام مجدد سطح گسترده ای از داده های روی مموری اشتراکی.و کاهش شدید ترافیک چیپ در هنگام خاموشی المان ها هست.در واقع حافظه اشتراکی کلید اجرای بسیار از کودا اپلیکیشن CUDA Application ) )ها هست.
در نسل G80-GT200 تنها یک حافظه اشتراکی 16kb وجود داشت.در معماری فرمی بنا به گسترش sm یک حافظه 64kb قابل پیکربندی یا configure ability هست که بنا به نیاز سخت افزاری سطح کرنل kernel instead struction قابلیت پیکربندی به شرایط زی رو داره:
48KB of Shared memory with 16 KB of L1 catch : 1
16 KB of Shared memory with 48 KB of L1 cache : 2
همینطور که ملاحظه میکنید میزان سطح 2کش در فرمی برابر با 768KB شده که فوق العاده کمک میکنه به فرمی. بقیه مشخصات هم واضح توضیح داده شده.

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


16 Load/Store Unit: (LD/ST)

واحد هایه سببز رنگی که بین cuda core ها و SFU ها هستن ودر SM به شکل LD/ST میبینیم درواقع واحد هایه ذخیره و بازیابی هستن.هر یک از این واحد ها محاسبه مبدا و مقصد ادرس ها برای 16 ترد در هر کلاک به کار میرن که بخوبی از عهده کارشون برمیان .

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.

بدلیله اینکه این قسمت بارها مورد بررسی قرار گرفته و بسیار کلیشه ایی شده و واقعا در حد توضیح و بررسی در مقاله نیست فقط اشاره کمی میکنم به

مراحل کاری Polymorph Engine
یا همان موتور پردازشی اشکال که در واقع میشه گفت اطلاعات مربوط به شکل و اجزای هندسی اشیاء رو محاسبه و پردازش میکنه که در ابتدا بواسطه TESSELLATOR همان گونه که در مقاله نگاهی به DX11 توضیح دادم حدفاصل راس ها رو پر میکنه که باعث ایجاد حجم در اشکال میشه بعد با قسمتی روبرو هستیم بنامه transform viewport که درین قسمت هم اندازه و جای دقیق انها روی صفحه مشخص میشه .و بعد دوباره در attribute setup یکسری خصوصیات ویژه که اشکال نیاز دارن مورد پردازش قرار میگیره و اطلاعات پردازش شده فرستاده میشه به so یا همون stream output که بعد خارج میشه که در شبکه با هم ادغام میشن . ابته توضیحی در رابطه با raster engine هم بدم که متشکل از سه قسم هست که وظیفه اصلیش تنظیم کیفیت اجسام پردازش شده و جایگاه شون روی مونیتور دقیقا اول گوشه های اجسام تنظیم میشه بعد rasterrizer یه اسکن خطی از کلیت کار اجام میده .

Total Fermi architecture

همونطور که قبلا خدمت دوستان عرض کردم قصده بنده این بود که از معماری جزء فرمی به کل معماری اون برسم که از پردازشگر های کودا شروع و سپس به SM رسیدم وحال به طراحی کلی وکلاستر ها و حافظه مشترک وگیگا ترد انجین خواهیم رسید.
به گفته انویدیا فرمی اولین معماری تراشه GPU ای هست که از سلسله مراتب صحیح حافظه کش True cache hierarchy در ترکیب با حافظه اشتراکی مقیم چیپ on-chip shared memory داره.درواقع عملایت کودا کور ها با استفاده از معماری بینظیر این کارت میتونن از تمام فضای کش ها و مموری های اشتراکی بهره ببرن.به این سیستم که برای اولین بار در فرمی به کار رفته NPDCC یا NVIDIA Parallel Data Cache Configurable گفته میشود. در ادامه به توضیح این متد میپردازم:

NVIDIA Parallel Data Cache with Configurable L1 and Unified L2 Cache

پیش از اینکه توضیح تخصصی در مورده این متد خدمت دوستان بدم لازمه کمی کلیت عملکرده این مکانیزم رو برایه دوستان واظح روشن کنم.
به تصویره زیر دقت کنید

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


همونطور که میبینید حافظه کش سطح 1 مشغول تبادل اطلاعات بین L1 Cache و کوداکور هاست.در بخش قبل خدمت دوستان توضیح دادم که کش سطح L1 کاملا قابل پیکر بندی هست و بسته به نیاز SM میتونه دو نوع Config داشته باشه(دونوع کانفیگ در بخش قبل ذکر شده)
48KB of Shared memory with 16 KB of L1 catch : 1
16 KB of Shared memory with 48 KB of L1 catch : 2
این نوع عملکرد باعث 2 نوع بهینگی میشه:
1:پهنای باند کلی SM افزایش پیدا میکنه Improve Bandwith)) که این امر موجب سریعتر شدن عملکرد حافظه ها و ارجاع دهنده ها میشه.
2:کاهش زمان تاخیر حافظه L1 cache میشود Reduce latency)) که این مهم تنها از طریق قابل پیکر بندی بودن حافظه میسر میشود.
تصویره زیر نحوه ارتباط کل CUDA CORE ها در GPU درون کلاستر ها و با حافظه L1 Cache داخلی sm رو نشون میده:


فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.

خوب حالا بیایم برایه حافظه کش سطح 2 چه اتفاقی میوفته: L2 Cache configuring))
به تصویر زیر دقت کنید:


فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.

همونطور که میبینید یکی از کودا کور ها به طور مستقیم داده ای رو با کش سطح 2 که excute شده در حال اشترک گذاری هست.عملکرده سلسه مراتب Hierarchy)) فرمی در این سطح کش باعث ایجاد سرعت بالاتر همگرایی (coherent) داده های اشتراکی در این سطح میشه.
تصویره زیر نحوه ارسال و دریافت داده های اشتراکی بین هردو سطح کش L1 وL2 هستیم.

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.

خوب برگردیم به نحوه عملکرد کلی NPDCC:

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.

در دنیای پردازش های گرافیکی و GPGPU همگرایی داده ها یکی از مهمترین ارکان افزایش سرعت شبکه داخلی پردازشگر هستش که به انجام رسوندن صحیح اون نیاز به عملکرده هوشمندانه ادوات ذخیره/ بازیابی یک GPU داره.
عملکرده صحیح اون موجب افزایش کارایی در برنامه های مربوط به پردازش هایی مثله ray tracing , fluid computing و... میشه.
یکی از مشکلات معمول سر راه این مهم عدم اشتراک گذاری درست منابع ذخیره سازی است.در حین اشترک گذاری منابع ذخیره سازی ما ناخوداگاه پایه ایجاد بسیار از مشکلات رو ایجاد میکنیم.این مشکلات میتونن به شکل زیر باشن:
بعضی از الگوریتم ها به طور طبیعی به هنگام عملیات اجرایی نیاز به اشتراک گذاری حافظه دارند .بعضی دیگر نیازمند حافظه سریع کش هستند و بعضی دیگر در انه واحد نیازمند هر دوی این متدها هستن.
در فرمی OMH یا optimal memory hierarchy اجازه میده ویژگی های هردوی shared memory و cache هارو با هم داشته باشیم.
در حقیقت:
The Fermi architecture addresses this challenge by implementing a single unified memory request path for loads and stores, with an L1 cache per SM multiprocessor and unified L2cache that services all operations
میرسیم به موتور مدیریت دستورالعمل های کرنل که اثر مستقیم بر ریسمان ها داره و از مهمترین امکانات فرمی هستش:

GIGA Thread Engine


فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.

خوب میرسیم به یکی از مهم ترین بخش هایه فرمی که سرنوشت کیفیت اجرایی هسته ها به طور مستقیم به این بخش مربوط میشه.
این موتور در نسل G80 معرفی شد و میتونست 12.888 ترد رو مدیریت کنه.موتور گیاگا ترد در فرمی از لحاظ سرعت مدیریت تفاوت چندانی با نسل G80 نداره اما چیزی که اونو متمایز کرده 10 برابر شدن سرعت سویچینگ متن هستش (Application Context Switching).
همونطور که در توضیحات sm خدمت دوستان عرض کردم واحده warp scheduler از دستورالعمل ها ترد و ترد هارو به ریسمان تبدیل میکنه و سپس در طول array cuda ها میفرسته.
عملکرد صحیح و بهینه این بخش بستگی به عملکرد giga thread داره و عملیات این واحد دستورات لازم به زمانبند ریسمان رو میده تا چگونگی عملکرد کلی ریسمان ها تایین بشه.
برایه متوجه شدن عملکرد این موتور به تصویره زیر دقت کنید:

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.

در اینجا شما دونوع مرحله اجرایی هسته یا کرنل Kernel میبینید.اجرای سری یا serial و اجرای همزمان شده یا concurrent که در سمت راست تصویر هست.
یکی از وظایف مهم این موتور همزمانی هسته های اجرایی هست که هرچه بهینه تر باشند سرعت عملیات بالاتر میرود.انجام صحیح این مورد بستگی به عملکرده نرم افزاری درایور داره که برایه الگوریتم های جدید چگونه انجام بازخانی و synchronize سازی داده هارو به انجام برسونه.
از مواردی که به همزمان سازی داده ها کمک شایانی میکند IMT یا intelligently manage thread هست که جدید ترین مکانیزم مدیریت ترد ها است.
میرسیم به عملکرد مهم memory controller یعنی ECC که در ادامه توضیح میدم:

ECC Support

انویدیا برای افزایش باز دهی و تاثیر گذاری 512 هسته کودا که دائما در حال بارگذاری و اجرای داد ها هستن از مکانیزم تصصیح خطا استفاده کرده که این مهم در کنترلر (Memmory controller )حافظه انجام میگیرد.

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.

Ecc که مخفف error code correction هست به منظور درست کردن خطاهای احتمالی در ترد های ها هست که برای اولین بار در فرمی پیاده سازی شده و درواقع فرمی اولین gpu هست که از این متد ECC برای رفع خطاهای احتمالی استفاده میکند.
به تصویره زیر دقت کنید:

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.

مموری کنترلر یک خطا از سطح L1 یا L2 تشخیص داده پس بر اساس الگوریتم های عیب یاب خطای ecc پیش از تاثیر گزاری بر عملکرد gpu اون رو تصصیح میکنه

فقط کاربران عضو قادر به مشاهده لینک‌ها هستند.


در اینجا کل مموری کنترل ها در یک loop چک شده اند و این عملیات از نو در طول حافظه ها پیگیری میشود.
پیش از اتمام مقاله لازمه درمورده nvidia nexus توضیحاتی رو بدم

Nvidia NEXUS

بطور خلاصه اشاره کنم که : انویدیا نکسوس در واقع اولین گستره و بستر نرم افزاری برای اپلیکیشن های کودا و نرم افزار های قابل ساپورت اون از جمله c , c++ , opencl , directcompute , …. هست که پلی است میان برنامه نویس و کودا کور برای رسیدن به قدرت بی همتایه کودا کور ها که از جمله قابلیت های کودا کور ها اجرای مستقیم کد های c بدون نیاز به المانی دیگر است و این یعنی یک برنامه نویس 512 هسته برایه اجرای توابع مورد نیاز خود در اختیار دارد.
سخن پایانی:
به جرات میتوان گفت تراشه فرمی پیشرفته ترین GPU و حتی تراشه ساخت دست بشر با توجه به ویژگی های ارزنده ای که دارد نام برد چون این پردازنده شگفت انگیز تنها برای پاسخ گویی نیاز های صنعت بازی طراحی نشده.بخش عمده طراحی این GPU برای کار در زمینه های GPGPU Progrraming که توسط سری qouadro این نیاز برطرف میشود و مورد اصلی اون عملکرد تراشه در ابرکامپیوتر های تسلاست.
با وجود بیرقیب بودن انویدیا در زمینه gpu supercomputer ها انویدیا بخش زیادی از سود خود را در این صنعت بدست میاورد.همونطور که دیدیم بیش از 7000 تراشه ابر کامپیوتر تسلا m2050 در سریعترین ابر راینه جهان tianhe 1-A به کار رفت و همگام با CPU های XEON شرکت اینتل کسب موفق ترین تراشه GPU)) به خاطر ایجاد سریعترین ابر کامپیوتردرزمینه ابرکامپیوترها رو بدست اورد

امیدوارم از خواندن این مقاله لذت کافی رو برده باشید و مفید بوده باشه. هرگونه سوالی در این زمینه با روی باز پاسخ داده خواهد شد .

موفق باشید

نویسنده : وحید
VFSDF