با هر چه عشق نام تو را ميتوان نوشت
بعد از تحقيقاتم تصميم بر ان گرفتم که نکات و تفاوت هاي اصلي معماری گرافيک ها را توضيح دهم
ALU واحد منطقي که وظيفه عمليات رياضي را بر عهده دارد و در کنار ان يک حافظه Register براي نگه داري مقادير شناور که عمليات رياضي بر روي ان انجام مي شود احتياج داريم
ساده ترين پردازنده داراي حداقل اين قسمت ها هست . که ابتدا ورودي دريافت و بعد پردازش و بعد ارسال مي گردد و یک دور کامل از اين مراحل را يک چرخه cycle مي گويند
در اينجا ما یک چرخه داريم با یک بار عملیات پردازنده
به ALU که وظيفه انجام رياضيات عددي تکي را دارند scalar مي گويند
اما در صورتي که ورودي ها زياد باشند scalar مجبور است تا انها را يکي پس از ديگري انجام دهد که باعث مي شود که چرخه cycle هاي زيادي داشته باشيم
[Only registered and activated users can see links. ]
و نتايج انها ديرتر به دست ما خواهد رسيد . هرچه قدر که فرکانس و سرعت بيشتر باشد فقط چرخه ها را سريع تر انجام ميدهد اما در اصل موضوع که cycle هاي بيشتري داريم تفاوتي ايجاد نمي کند
در صورتي که بخواهيم عمليات هاي بيشتري را روي داده هاي بيشتر بدون افزايش چرخه ها انجام دهيم بايد از ALU هاي بيشتري هم زمان استفاده ببريم (موازي سازي)
اما استفاده از تعداد زياد scalar به صورت جدا هزينه بر خواهد بود
Single instruction, multiple data (SIMD)
ALU هايي که در کنار هم متصل باشند و تمام انها هم زمان عمليات رياضي را انجام دهند SIMD مي گويند تمام ALU هاي آن يک واحد را تشکيل مي دهند
[Only registered and activated users can see links. ]
بر خلاف scalar ها که مقادير دلخواه و مستقل را دارند يک واحد SIMD بايد داراي يک دستور العمل ورودي يکسان باشد اما نتياج هر کدام متفاوت خواهد بود
معادله رياضي را فرض کنيد که داراي چند مجهول مي باشد . و ضرايب X در SIMD X ذخيره مي شوند و ضرايب Y در SIMD Y ذخيره مي شود و ضرايب Z در SIMD Z ذخيره مي شود
يعني SIMD ها فقط يک دسته بندي را مي پذيرند . بعد نتايج همزمان پردازش مي شود
به SIMD ها پردازنده VECTOR يعني برداري هم گفته مي شود
[Only registered and activated users can see links. ]
با استفاده از SIMD مي توان مقادير زيادي را در چرخه (Cycle) هاي کمتر پردازش کرد . در صورتي که تعداد داده ها از طول SIMD بيشتر نباشد تمام انها را در یک دور چرخه انجام ميدهد
ابر کامپيوتر هاي SIMD استفاده زيادي در گذشته داشته اند
يکي از مشکلات SIMD اين هست که بايد داده هاي ورودي براي ان دسته بندي شود . به همين موضوع دستور العمل هاي خاصي مانند MMX و SSE2 و ... براي محاسبات ان توسعه يافتند
بهترين کاربرد اين نوع پردازنده ها براي کار بر روي مولتي مديا هست که سبک ان مناسب پردازنده هست
Very long instruction word
VLIW "کلمه دستور العمل خيلي طولاني" معماري سابق ATI بود که از SIMD به صورت ILP يعني "موازي سازي در سطح دستور العمل" استفاده مي برد
ورودي و خروجي SIMD هاي ان به صورتي بود که چهار SIMD طولاني که بر روي دستور العمل ها کار مي کردنند (يعني VLIW ها) در کنار هم به مرور دستور العمل ها را بيرون بدهند ILP
اين معماري بهترين بازدهي و تاکيد بر روي گرافيک خام داشت که دستور العمل هاي اجزاي تصاوير بدون هيچ گونه مشکلي و به صورت موازي پردازش مي شدند
اما در زمينه محاسبات ضعيف بود چرا که بايد محاسبات به صورت ILP دسته بندي مي شدند که يکي از سخت ترين مسائل حتي براي امروز هست
[Only registered and activated users can see links. ]
Single instruction, multiple thread (SIMT)
اگر لوله هاي SIMD درون معماري RISC به صورت گروه هايي از نخ داده با دستور العمل مشترک تبديل شوند SIMT گفته مي شود
معماري RISC در پردازنده هاي ARM استفاده مي شود که شعار ان محاسبات با استفاده از دستور العمل هاي محدود هست که بازدهي بالايي دارد
يعني يک پردازنده ساده را درون يک پردازنده عمومي قرار دهيد تا وظيفه هدايت ان را بر عهده بگيرد
[Only registered and activated users can see links. ]
تمام گرافيک هاي مدرن امروزي چنين معماري را دارند
تقسيم بندي و نام گزاري داده ها
[Only registered and activated users can see links. ]
thread به معناي نخ هست يعني داده هايي که از يک منبع تکي پردازش به مرور زمان توليد شده اند
thread Block بسته يا گروهي از نخ ها را مي گويند که از يک منبع نزديک توليد شده اند که ممکن است داراي ويژگي مشترکي باشند يا نباشند
در AMD اطلاعاتي که از واحد پردازشي هاي ان ايجاد مي شود را Wavefront و در انويديا ان را Warp مي گويند
در معماري GCN هر CU ان 4 عدد SIMD با ضرفيت توليد حداکثر 16 ترد دارد
که هرکدام از SIMD ها بسته هاي داده فقط از يک دستور العمل خاصي را توليد مي کند و داده ها قبل از ان توسط سخت افزار دسته بندي مي شوند و به SIMD مخصوص خودشان فرستاده مي شوند
Wavefront هايي که از اين SIMD ها بيرون مي ايد همگي داراي دستور العمل مخصوص به خود و همانند هستند
[Only registered and activated users can see links. ]
ميزان register هاي هر SIMD اجازه نگه داري 10 wavefront را مي دهد تا بر روي ان کار کنند اگر در يک چرخه داده محاسبه نشد در چرخه هاي بعدي انجام ميشود
هر CU هم 40 wavefront مي شود يعني ضرفيت ریجستر cu هاي GCN زياد هست
براي اولين بار در فرمي هسته هاي کودا معرفي شد کودا ها بر خلاف مدل GCN ارزش تکي و مستقل دارند
اما اين به ان معنا نيست که معماري ان متفاوت هست بلکه با استفاده از ترفند هاي سخت افزاري و نرم افزاري SIMD را طوري کرده اند که تصور هسته هاي مستقل همانند MIMD داشته باشد
[Only registered and activated users can see links. ]
MMID معماری خیلی پرهزینه و منعطفی هست . رابطه افزایش انعطاف و قدرت خام محاسباتی برعکس هستند و هرچقدر معماری منعطف تر باشد قدرت خام ان کاهش پیدا میکند
واحد هايي مثل SFU و ... در کنار هسته های کودا براي همين امر هستند که انويديا اولين بار نام ان را SIMT گذاشت اما کاملا متفاوت با مدل GCN
اين مدل از ترانزيستور بيشتري استفاده ميبرد مخصوصا در قسمت کنترل و منطق آن و همچنين بخش پذيري و قابليت خاموش کردن بخش هاي اضافه را دارد
ميزان داده هايي که Sm هاي انويدا توانايي کار بر روي ان را دارند ربطي به تعداد کودا هاي ان ندارد بلکه هميشه 2 عدد warp با 16 ترد بوده است
[Only registered and activated users can see links. ] [Only registered and activated users can see links. ]
به صورت تئوری توانایی محاسبات GCN بیشتر است اما در برنامه های واقعی همه wavefront ها به صورت 16 ترد نیستند و بعضی از داده ها احتیاج به نتایجی دارند که هنوز پردازش نشده و stall می شوند
که در برنامه های عادی بخش های زیادی که در معماری gcn بدون استفاده می مانند باعث مصرف بیهوده و افزایش تاخیر می شوند اما در صورت استفاده از حداکثر توان تئوری مشکلی نخواهد بود
به این دلایل بازدهی و سرعت معماری انویدیا در برنامه های متوسط بیشتر است اما به همان نسبت ترانزیستور بیشتر احتیاج می برد
Cu های GCN به صورت ابکی هستند و در برنامه های متوسط تاخیر بالایی دارند و توانایی کار بر روی ترد های بیشتری به صورت همزمان و موازات بیشتری را دارند
برنامه های که برای کودا نوشته شده باشند سرعت خیلی پایینی روی GCN دارند
اما با استفاده از DX 12 و استفاده از حداکثر توان سخت افزار و موازات می بینیم که گرافیک های متوسط AMD هم رده گرافیک های گران قیمت انویدیا هستند
درصورتی که بازی های حجیم کنسول های GCN برای معماری انویدیا تقسیم و شکسته نشوند باعث Crash و هنگ کردن میشود
FRONT END یا بخش CONTROL LOGIC در SM های انویدیا بدون در نظر گرفتن اینکه حداکثر تعداد کوداهای تراشه چقدر هست حجم و مصرف بالایی دارند
که می بینیم انویدیا هر جا که پیشرفت قابل ملاحظه در بازدهی به مصرف را داشته است مربوط به این بخش می شود
[Only registered and activated users can see links. ]
از فرمی به کپلر با سه برابر بازدهی بیشتر با استفاده از کاهش حجم این قسمت و از کپلر به مکسول با استفاده از SMM یا SM های سری موبایل انویدیا که مصرف کمتری دارند
نسبت کودا ها به هر SM اهمیتی ندارد به جز اینکه هر Front end که دو warp شانزده تردی را پشتیبانی می کنند همیشه یکسان بوده و فقط بر دسترسی و موازات به هر کودا ها تاثیر دارد
یک تفاوتی که بین این گرافیک ها وجود دارد این است که
هر SM انویدیا یک poly morph Engine دارد که در ان واحد tessellator وجود دارد یعنی یکی به ازای هر SM و در بخش GPC بالاتر raster بین چند عدد از انها اشتراک شده است
معماری GCN تعداد CU خیلی زیادی دارد و گروهی از انها در گروه بندی shader engine دارای یک tessellator در Geometry engine و raster مشترک هستند
به طور مثال در معماری Hawaii با 44 عدد CU به صورت کلی چهار tessellator وجود دارد اما در معماری مکسول با شانزده عدد SMM شانزده عدد tessellator هست
نوع برنامه نویسی مغلوب و اینده انها بر معماری های بعدی خیلی تاثیر گذار هست انویدیا در حال حرکت به سمت معماری مناسب بهره گیری از ضرفیت بازی های کنسول های GCN هست
و amd نیز در صورت اینکه بخواهد بازدهی به مصرف خودش را افزایش دهد باید تقصیم پذیری و خاموش شدن بخش های اضافه را به SIMD های خودش اضافه کند که باعث افزایش ترانزیستور میشود
در صورت نیاز در اینده به روز رسانی خواهد شد
کپی فقط با ذکر منبع