الان وباتوجه به معماری ریزپردازنده های پلاریس و پاسکال بههترین راه حل برای گیمرهاکدوم خواهدبود ودراصل بایدبگیم ایا amdباپلاریس میتونه اب رفته رو به جوی برگردونه یاهمچنان دنباله روخواهدبود؟
پاسکال یاپلاریس؟کدومیک؟
نمایش نسخه قابل چاپ
الان وباتوجه به معماری ریزپردازنده های پلاریس و پاسکال بههترین راه حل برای گیمرهاکدوم خواهدبود ودراصل بایدبگیم ایا amdباپلاریس میتونه اب رفته رو به جوی برگردونه یاهمچنان دنباله روخواهدبود؟
پاسکال یاپلاریس؟کدومیک؟
مشخصه سوال نداره پاسکال معظمنقل قول:
نوشته اصلی توسط SYNCMASTER [Only registered and activated users can see links. Click Here To Register...]
درود عرفان جاننقل قول:
نوشته اصلی توسط ErfanDL [Only registered and activated users can see links. Click Here To Register...]
تا جایی که من متوجه شدم و محمد علی جان توضیحات مفیدی رو ارائه دادند معماری پاسکال جدید نیست و بیشتر تمرکزش رو بهبود و نحوه عملکرد SM هاش بوده و تقریبا میشه گفت صافی معماری مکسول هست خود انودیا هم گفته که بخشهایی که به معماری اضافه شده صرفا برای بالا بردن قدرت بخش محاسباتی هسته هست وکاربرد اصلیش هم صنعتیه خوب این رو همه میدونن که در گیمینگ کاربردی نداره تازه همون بخش به درد نخور Async Comput هم که کاربردش در dx 12 حیاتیه هنوز هم در پاسکال مشاهده نشده
ولی در اون طرف AMD هنوز بلوک دیاگرامی که مثل دیاگرام پاسکال بشه تشریحش کرد رو بیرون نداده و هنوز معماریش رو ندیدیم چی هست
ولی یه نکته ای هست اونم اینه که پولاریس در فرایند ساختش یک گام از پاسکال جلوتره استفاده از فرایند 14nm FinFET به جای 16nm FinFET پاسکال و این خودش یک امتیازه برای AMD
برای فهم خیلی از مسائل نیاز به پیش زمینه هایی هست که هیچ کجا انها را به ترتیب و از پایه توضیح نمی دهند
و بدون انها نمی توان چیزی را فهمید
چندین وقت بود که مطالب پراکنده و توضیحات را مطالعه می کردم که سرانجام توانستم با کنار هم قرار دادن همه انها به یک قائده برسم
مطالبی که در این تاپیک گفته شد یکی از بزرگترین و اولین قدم برای فهم و درک عملکرد ها و توضیحات تخصصی بود
البته کسانی هستند که چون یک عمر اشتباه فهمیدن و گفتن نمی خواهند اینها را قبول کنند
و مثلا با اصول خودشان چه چیزی را میخواهند توضیح دهند یا به کجا برسند؟؟؟
توصیه من به خواننده گان این است که مطالب خارج از این تاپیک را از ذهن خودشان خارج کنند
و می خواهیم با هم از مبتدی به پیشرفته به صورت اصلاح شده حرکت کنیم
[Only registered and activated users can see links. Click Here To Register...]
اولین و بزرگترین سردرد برای کسانی که فقط به اسامی اهمیت می دهند و بین data و thread تفاوتی قائل نمی شوند
و به توضیحات و عملکرد اهمیت نمی دهند و این مطالب را بازی با جملات می دانند تفاوت بین SIMD و SIMT هست
اشتباه گرفتن اینها برای افراد معمولی رایج هست
ترد یک فرقی با process در زمینه CPU دارد و ان هم این است که تردها از یک مموری مشترک استفاده میکنند
داده عنوان عمومی دارد اما ترد یک حالت نرم افزاری خاص هست .همون طور که گفتم SIMT برروی سخت افزار SIMD اجرا میشوند
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
در این تصویر SIMD را یک شناسه نرم افزاری thread اما با ضرفیت اجرای داده بالا گفته است
SIMT دارای چندین نخ و شناسه هست اما همگی به صورت قفل شده و یک دستور العمل هستند
در اطلاعات تصاویر دیگر گفته شده که از نظر نرم افزار هر بخش ان همانند یک اسکار تکی هست
معماری و GCN و انویدیا به صورت اسکالر هست هر بخش و تعداد نخ ها اهمیتی ندارد و میتواند برای نرم افزار مخفی باشد
بر خلاف ان VLIW به صورت وکتور بوده است و حجم ان همیشه ثابت و مشخص برای نرم افزار هست
در GCN یک wavefront که از تمام SIMD ها و 64 هسته CU با یک دستور العمل استفاده کند وکتور گفته می شود
گاهی اوقات به SIMT عنوان Superscalar نیز می گویند . پس هرجا دیدید یعنی یکی هستند
و حالت نرم افزاری هست و کاملا متفاوت با VLIW یا SIMD و در مقابل هم مقایسه می شوند
MIMD همانند یک اسکالر مستقل و تمام اجزای ان نیز مستقل هستند که مثال ان پردازنده های چند هسته ای هست
که خیلی پر هزینه و غیر بهینه برای موازی سازی می باشد
که به نظرم انویدیا با تبادل اطلاعات warp ها بین SM های خودش و دسته بندی برای ایجاد انعطاف استفاده میکند
هر SM می تواند همانند یک گرافیک کاملا مستقل باشد و یک هسته ازCPU اختصاصی برای خودش بگیرد
و همانند توضیح ام از شبکه هوش مصنوعی MIMD را درون SM های خودش شبیه سازی کند
در واقع SM ها همانند هر هسته یک پردازنده چند هسته ای می مانند یعنی MIMD واقعی انها هستند
نه SIMD های درون SM ها که انویدیا همیشه انها را همانند هسته نمایش و تبلیغ میکند .
که هسته واقعی بودن انها غیر ممکن و خیلی پر هزینه است
بر خلاف انویدیا که هرSM ان گرافیک مستقل هست تمام کل تراشه GCN یک گرافیک واحد را می سازند که برای دایرکت ایکس 11 تمام بار کاری و نیاز گرافیک فقط به یک هسته داده می شود که باعث ایجاد گلوگاه شده است
تمام پردازش های گرافیکی به میزان یکسان CPU نیاز دارند و هیچ چیزی نمی تواند و امکان ندارد که بگوییم فلان معماری یا نرم افزار کمتر از پردازنده اصلی استفاده می کند
بلکه تنها کاری که دایرکت ایکس 12 و انویدیا انجام میدهد پخش مساوی بار کاری بین هسته های CPU است
برخلاف قبل در دایرکت ایکس 12 هر CU از معماری GCN با SM های انویدیا برابری میکند و حتی بهتر می تواند مولتی تردینگ داشته باشد .
به همین خاطر با احتساب ساده تر بودن و تعداد هسته بیشتر GCN بازدهی بهتری در DX12 دارد
Homogeneous coordinates
مختصات همگن که برای مکان یابی در ماتریس ها به کار می رود در سال 1827 معرفی شد
ماتریس ها به خاطر ساختار حل پذیری یکسان و الگوریتمی بودم در محاسابات کامپیوتر بکار میرود
در همان ابتدایی ترین گرافیک ها از این مختصات XYZW برای مکان یابی اشیاء سه بعدی استفاده میشد
[Only registered and activated users can see links. Click Here To Register...]
XYZ بیانگر طول و عرض و ارتفاع هستند یعنی سه بعد تمامی اجسام
اما W بعد چهارم هست که فقط در دنیای ریاضیات نظری ملموس هست اما چه احتیاجی به بعد چهارم هست؟
برای اندازه گیری ها همیشه مقیاسی و یا نسبت گیری به چیزی وجود دارد
در معادلات حرکت دو بعدی چیزی نسبت به محور با استفاده از بعد سوم که حرکت ان باشد بدون در نظر گرفتن ان در معادلات استفاده میکنیم .
حرکت یا تغییرات در سه بعدی ،بعد چهارم گفته میشود که از نظر یک بعد پنجمی فقط یک ضلع یا محور دیده می شود
در دنیای گرافیک کامپیوتری اجسام به صورت طبیعی W به مقدار 1 دارند که اگر به ضریب داده شود بزرگنمایی انجام می شود
کمتر از یک به سمت نقطه بی نهایت می رود و اگر مساوی صفر باید از مکان به وکتور یا مسیر تبدیل می شود مثلا برای نورپردازی . بدون W خیلی از معادلات غیر ممکن خواهد بود
تاریخچه و تکامل گرافیک ها
[Only registered and activated users can see links. Click Here To Register...]
نسل اول گرافیک ها دارای دو موتور اختصاصی فقط برای تغییر شکل و نور پردازی بودند و هیچ قابلیت دیگری نداشتند
[Only registered and activated users can see links. Click Here To Register...]
Primitives به اطلاعات اولیه اشیاء سه بعدی گفته میشود
همه چیز از مثلثات تشکیل شده است که به ان triangle می گویند یک سطح بالاتر polygon به معنای شکل ساده است
رئوس انها و نقاط اصلی اشیاء را vertex می گویند
تمام اطلاعاتی که پیوسته وارد گرافیک و با CPU رد و بدل می شود اینها هستند که پیوسته در حال تغییر و حرکت هستند
نقاط رئوس دریافت میشود و مثلثات کنار هم قرار می گیرند و یک کره یا شکل دیگر سه بعدی را می سازند
که کنترل انها بر عهده geometry است
Rasterization به معنای شطرنجی کردن هست و در اصطلاح زمانی به کار می رود که بخواهند چیزی را اماده برای چاپ بنمایند
در گرافیک کامپیوتر نتایج اماده برای تسکچر گزاری و تبدیل شدن به پیکسل های قابل نمایش می شود
texturing
بر روی این شکل ها با توجه به اطلاعاتی که دارند یک تسکچر یا یک تصویر و پوسته قرار میگیرد که تصور جزئیات و شکل را ایجاد می کند .
تسکچر ها در حافظه مموری گرافیک در هر بار لودینگ ذخیره میشود
Z buffering و blending که در معماری های قدیمی اینگونه صدا می شد قسمتی بود برای حذف بخش های اضافه از تصویر
یعنی با توجه به فاصله پیکسل ها تا دوربین پیکسل هایی که در پشت بقیه قرار می گرفتند را حذف میکرد و اخرین مرحله بود
نسل دوم ظهور هسته های سایه زن وshader بود با ورود این بخش ها تنها ATI و انویدیا در گوی رقابت باقی ماندند و بقیه شرکت ها حذف شدن
[Only registered and activated users can see links. Click Here To Register...]
این پردازنده ها فقط فضایی برای برنامه نویسی و ایجاد ازادی و توانایی بیشتر برای بخش های اختصاصی قبلی ایجاد کرد
و هر بخشی پردازنده های shader اختصاصی خودش را داشت
در این زمان سطوح و اجسام پیچیده تر و نورپردازی و افکت های پیچیده تر ایجاد شد
اما هنوز هم نقاط ضعفی داشت . و به صورت خطی و مرحله ای بود
ساختارو پردازش های گردشی وجود نداشت . توانایی کنترل جریان پویا و متغییر نداشت .
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
معماری شدر های جداگانه اختصاصی انویدیا که دارای Tiled rasterization و عمل Z Cull جانبی قبل از تسکچر گزاری هست
[Only registered and activated users can see links. Click Here To Register...]
در یک صحنه که از تسکچر و پیکسل های زیادی استفاده میشد و احتیاج به شدر های پیکسل زیادی میرفت و تسکچر های جئومتری و ... بی استفاده بودند
و در صحنه ای پر از جئومتری هست بار زیادی برای جئومتری شدر ها بود و شدر های پیکسل بی استفاده می ماندند . که همیشه بار پردازشی محدودیت داشت و همیشه بخشی از سخت افزار بیکار باقی میماند
Tiled rasterization
[Only registered and activated users can see links. Click Here To Register...]
در گرافیک های قوی دسکتاپ که قدرت و پهنای باند بالایی دارند عمل پیکسل و تسکچر سازی قبل از حذف سطوح اضافی و پنهان انجام میشود
و دلیل ان نیاز و تاکید بر روی سرعت بالای ایجاد تصویر هست .اما در این عمل بخش زیادی از پردازش اضافی انجام میشود که بیهوده به هدر میرود
در گرافیک های موبایل تکنیکی وجود دارد که قبل از ایجاد پیکسل ها اولویت انها را تشخیص می دهد
و سطوحی که پشت سطوح دیگر قرار می گیرند را حذف می کند و بعدا عمل پیکسل گذاری انجام میشود .
این کار باعث تاخیر در ایجاد تصویر میشود اما در سطح موبایل نسبت به صرفه جویی که در پهنای باند و پردازش می شود کاملا ارزش ان را دارد
Unified Shaders
بزرگترین قدمی که برای چندمنظوره شدن گرافیک ها برداشته شد و بدون ان پیشرفت های دیگر ممکن نبود و گرافیک ها را به شکل امروزی در اورد.
ظهور پردازنده های سایه زن مشترک هست .
که اولین بار توسط ATI در تراشه Xenos برای Xbox 360 ابداء شد .
[Only registered and activated users can see links. Click Here To Register...]
پردازنده های شدر مشترک با یک استاندارد یکسان به وجود امد که تمامی پردازش ها بر روی ان انجام میگرفت
و ضرفیت بالای ان همیشه در حال استفاده بود . که بهینه گی و استفاده پذیری را افزایش میداد .
بخش های پردازشی همه یکجا جمع شدن اما بخش های ادرس دهی و دستور دهی به صورت مجزا باقی هستند
[Only registered and activated users can see links. Click Here To Register...]
فرایند های پیچیده تر و پردازش های پویاتر قابل امکان شد و برنامه نویسان ازادی بیشتری داشتند
همچنین گرافیک ها توانایی این را یافتند که محاسبات مستقل چند پردازشی را به صورت بخشی مجزا و جداگانه انجام دهند
اولین معماری پردازنده مشترک دسکتاپ ATI معماری VLIW 5 بود که از دستور العمل ILP و هدفش تمرکز بر روی گرافیک بود
و یک دستورالعمل اضافی برای کارهای خاص داشت که بعدا از معماری حذف شد
انویدیا با پردازنده های شدر مشترک به سمت SIMT رفت و سری 8800 و فرمی و ...
بعضیا که قبلا از GCN نمی دونستند استاتر چی هست افسانه بافی میکنند که معماری Vliw پر استاتر بوده و GCN خیلی بهتر شده به خاطر منعطف تر شدن!!
اما اصلا نمی دونند که استاتر به خاطر تاخیر در گرافیک به وجود میاید و ربطی به انعطاف در محاسبات ندارد
و اتفاقا همین محاسبات و چند منظوره ترشدن هست که اخلال در گرافیک خطی به وجود میاورد و باعث استاتر میشد .
When AMD taped out Tahiti in 2011, the focus was on peak frame rates. No one seemed to care about stuttering,
as long as the cards could post a top FPS that was as competitive as possible. Did it really take until Fiji for AMD’s engineers and software teams to prioritise a ‘consistently smooth experience’?
Most folks in the industry used to believe FPS averages were a good proxy for smooth animation,
but as games and graphics APIs grew more complex, gaps between high FPS averages and good user experiences became more apparent.
We didn’t always use the right quantitative language to describe these performance issues precisely
asynchronous shaders
قدم بعدی در استفاده از تمام ضرفیت پردازنده های شدر دوباره توسط شرکت ATI سابق برداشته شد
امروزه پردازش ها به دو دسته گرافیک و محاسبات تقسیم می شوند .
به تمام مراحل ایجاد شکل سه بعدی و تصویر گرافیک می گویند و به ضرفیت ازاد شدر ها که برای محاسبات ازاد استفاده میشود محاسبات میگویند .
نمایشگر یک نرخ تازه سازی تصویر دارد که تصاویر باید قبل از زمان مشخص اماده باشند که اگر زودتر یا دیرتر نمایش داده شود باعث استاتر میشود .
برای جلوگیری از هرگونه مشکلی گرافیک با استفاده از تمام ضرفیت پردازنده ها اجرا می شوند و به سرعت در یک زمان خاصی به اتمام می رسد
و اگر زمان اضافی قبل از نرخ تازه سازی تصویر داشته باشند محاسبات اجرا می شود که تا زمان نرخ تازه سازی تصویر ادامه دارد
و بعد متوقف و دوباره گرافیک و متوقف و محاسبات و ... انجام می شود یعنی تمام داده ها در دسته خودشان با تمام ضرفیت پردازنده اجرا میشوند .
همانند مثال بزرگراه و چراغ سبز و قرمز .
دلیل ان هم این است که پردازش متغییر و غیر قابل پیشبینی است و زمان یکسان و مشخصی ندارد و انها به خاطر کیفیت از خیر اجرای همزمان گرافیک و محاسبات می گزرند
اینجا بخشی از توانایی پردازنده ها بدون استفاده باقی می ماند .
مخصوصا شرایطی در گرافیک وجود دارد که فشار و گلوگاه کاری بر روی rasterization و پردازنده های شدر ازاد هستند که نمی شود برای محاسبات استفاده کرد و برعکس
در صورت حل این مشکل بازدهی شگفت انگیزی همانند صحبت های توسعه دهندگان DOOM شاهد خواهیم بود
استفاده از تکنیک شطرنجی سازی TSSAA در کنار محاسبات
برای حل این موضوع ACE که پردازنده مجزا برای دسته بندی وزمان بندی برای SIMD ها به صورت اضافه بر سازمان هستند طراحی شد .
مسئولیت انها این است که وقتی که بار پردازشی گرافیک و محاسبات به صورت مخلوط اجرا می شوند
کنترل اجرای گرافیک را نظارت داشته باشند و با تغییر اولویت استفاده از منابع مطمئن شد که حتما گرافیک در نرخ تازه سازی تصویر به انجام برسد .
برای اینکار حتما به API های نظر DX12 که ابزار های کنترل چند نخی دارند نیاز هست
تمام اینها در پتنت ان توضیح داده شده است
[Only registered and activated users can see links. Click Here To Register...]
مقایسه Vliw با GCN
[Only registered and activated users can see links. Click Here To Register...]
همون طور که گفتم تمام شدر های vliw در هر واحد پردازشی ان 64 تا هست که همگی با هم اجرا می شوند
16 SIMD دارد که هرکدام 4 ALU در رائس اجرایی دارد و همه انها چهار تا یک دستور العمل Vliw یکسان دارند
برای اینکه هر دستورالعمل و SIMD پر شود باید 4 شدر پر گردنند
که هرکدام دستورالعمل گرافیکی مجرا دارند که هر رنگ نشان داده شده بیانگر یکی از چهار مختصات ماتریسی XYZW است
برای محاسبات باید به صورت دستورالعمل VLIW و XYZW مرتب شود تا یک SIMD را پرکند
معمولا تمام SIMD های واحد پردازشی برای محاسبات پر نمی شدند چون مرتب سازی به این روش محدودیت وابستگی و جنسیتی دارد
در GCN هر SIMT فقط یکی از مشخصات XYZW را برعهده می گیرد
از نظر گرافیک و دستور العمل مستقل محدود تر و کم ضرفیت تر است اما از نظر محاسبات محدودیت ضرفیتی دارد
یک ALU اصلی و بقیه 16 نخ دستورالعمل گرافیکی یکسان
اگر برای محاسبات استفاده نشود ضرفیت بالای GCN بی استفاده میماند و برای همین طراحی شده است
در یک زمان هر چهار SIMD بر روی یک wavefront محاسباتی مرتب شده کار نمی کنند
و برای اینکه تمام SIMD ها را مشغول نگه دارند باید حتما چهار wavefront داده شود
علت این امر در تصویر بعدی نشان داده شده است
[Only registered and activated users can see links. Click Here To Register...]
در اینجا اجرای فقط یک wavefront را می بینید
دستورات محاسباتی احتیاج به وابسته دیگری دارند که قبل از دیگران باید اجرا شود و دستورات دیگر به دنبال ان بیایند
هر پردازش SIMD یک کلاک گفته میشود تمام wavefront ها چهار کلاک طول میکشند .
حتی اگر وابسته کمتر داشته باشند و در کلاک کمتر wavefront در کل CU اتمام شوند باز هم فقط برای همان wavefront بیکار میمانند تا کلاک چهارم برسد و دستور جدید بگیرند
تعریف چرخه در اینجا این است که SIMD ها کاملا از یک wavefront فارق شوند
که چهار کلاک طول میکشد و در این مدت 256 شدر بازنشسته می شوند
در مدتی که یک SIMD از دستورالعمل خودش از ان wavefront فارق شده است این معنی را نمیدهد که بیکار خواهد ماند
بلکه برای اینکه تمام انها حداکثر در هر کلاک فعال باشند باید چهار wavefront داده شود نه کمتر و نه بیشتر
Load Balance
تکنیکی است که فقط صرفا بگویم که حافظه و رم مشترک بین چند واحد پردازشی CU است
و اگر بار اضافی بر روی یکی از انها بود میتواند به شریک بیکار خود تبادل کند تا سرعت و استفاده پذیری بالا برود
[Only registered and activated users can see links. Click Here To Register...]
همانطور که گفتم در معماری شدر های متحد بخش های اختصاصی از خودشان فضای پردازشی ندارند بلکه فقط ادرس دهی را انجام میدهند
برای اینکه از پهنای باند و سیم کشی بهینه استفاده شود بخشهایی که مسیر داده یکسانی دارند در یک مکان کنار هم جمع شده اند
Vertex و Geometry و Tessellator با هم بخش جلویی و متصل به CPU را می سازند
تنها محدودیت بخش های اختصاصی ادرس دهی هست که فقط تعداد مشخصی از triangle را قبول میکنند
اما اینکه این دستور العمل فقط یک پیکسل باید یا 16 پیکسل فرقی نمیکند
SIMT های GCN چه از تمام حجم و ضرفیت ان استفاده شود و چه نشود از نظر زمان اجرایی هیچ فرقی ندارد
Rasterization که عمل قبل از تسکچر است فقط یک مثلث در هر چرخه قبول میکند و اگر تسلیشن و ... زیادی انجام شود
[Only registered and activated users can see links. Click Here To Register...]
می بینیم که در هر کلاک فقط یک پیکسل نمایش داده میشود اما حالت بهینه ان این است که 16 پیکسل تصویر نمایش دهد
که گفتم این مشکلات به خاطر ساختار SIMT و طول و سرعت و کلاک ثابت شدر ها هست
Render Back End
[Only registered and activated users can see links. Click Here To Register...]
یا Rop بخشی است که رابط بین شدر ها و تسکچر ها است و مستقیم به مموری متصل می باشد
و اطلاعات تصویری را برای ورود و خروج اماده میکند و تنها بخش اختصاصی است که دارای پردازنده خودش است
در واقع این بخش همان Z Buffer و حذف قسمت های اضافی و پنهان که پشت اشیاء قرار می گیرند می باشد
این بخش محدودیت فیزیکی در تعداد اتصالاتی دارد که از مموری به ان وصل میشود
فلسفه سابق AMD این بوده است که برای ایجاد رابط مموری با پهنای باند فیزیکی بالا تا حد ممکن ROP ها را ساده و تعداد بالا طراحی کند .
اما اخیرا متوجه شده است که اگر الگوریتم فشرده سازی رنگ برای تسکچر ها را در ان قرار دهد و ROP ها کم تعداد با رابط کم اما بزرگتر و پیشرفته تر بسازد .
پهنای باند مشابه اما با مصرف خیلی کمتری بدست خواهد اورد
به همین علت در معماری پولاریس تعداد انها کاهش و پیشرفته تر شده است
کش و ورودی دستور العمل برای شدر ها را افزایش داده تا کمی هم فضا اضافی برای دستورات ریز که سرعت یکسانی با دستورات بزرگ دارند داشته باشد .
که باعث شده کمی بازدهی و گلوگاه ورودی دایرکت ایکس 11 بهبود یابد
Discard accelerator و فراخوانی زودتر در شدر ها یعنی مثلثات ریز به جای عملیات تسلیشن و ... مستقیم به مرحله اخر در پردازش میروند .
البته جاشون که همیشه در شدرها ثابت هست
دایرکت ایکس 12 فقط میتواند چند نخی و چند هسته ای را به معماری GCN هدیه دهد
اما سرعت اجرای دستورات و مشکل دستورالعمل های ریز فقط با قابلیت SIMD با طول و کلاک های مختلف حل میشود
که مثلا یک اسکالر سرعت اجرای دو برابری و یا بیشتر نسبت به وکتور دارد که هرچه ضرفیت اجرایی بیشتر باشد سرعت کندتر است
توضیح تمام اینها و توانایی شگفت انگیزی و بهینگی در مصرف که میدهد در پتنت ان داده شده است
[Only registered and activated users can see links. Click Here To Register...]
محمد علی جان، عالی بود من فقط توصیه میکنم لطفا حتما ادامه بده این راه رو به شدت استفاده کردم و باز هم برمیگردم برای خوندن و تمرکز کافی @};-
درود
محمد علی جان بسیار مفید و به جا بود چند وقت بود مطلب به این خوبی نخونده بودم دمت گرم خداوکیلی شارژ شدم
@};-@};-
آقا عالی بود . مطالب فوق سنگین
عالی بود=d>=d>=d>
[Only registered and activated users can see links. Click Here To Register...]
با استفاده از مطالبی که از این تاپیک یاد گرفتیم و مطالعات بیشتر به سطح عمیق تری از بررسی معماری ها خواهیم رفت
معماری شدر های مشترک سری اولیه انویدیا 8800 و vliw از دو قسمت تشکیل شده اند
بخش شدر های چند منظوره و بخش triangle ها که برای گرافیک است و در vliw به ان setup engine می گفتند
همزمان با معرفی این دو قسمت بخش دیگری به نام ultra threaded dispatch معرفی شد که گذرگاه مرکزی برای جابجایی اطلاعات بین این دو قسمت است
معماری GCN از این لحاظ که هنوز هم این گذرگاه و بخش SETUP ENGINE را دارد مشابه vliw است
[Only registered and activated users can see links. Click Here To Register...]
اما انویدیا با سری فرمی به سمت پخش کردن قسمت های اختصاصی کنترل مثلثات در هر قسمت Sm خودش رفت
از ultra threaded dispatch قبلی فقط چیزی با نام Giga thread engine باقی ماند
نمی تونم بگم که ایا یک بخش مرکزی با ادرس دهی بالا از چند قسمت جداگانه اما در مجموع با همان مقدار ادرس دهی ترانزیستور کمتری دارد یا اینکه مساوی هستند یا ...
همانند اینکه بگوییم ایا حجم فیزیکی دو alu 16 بیتی مساوی با یک alu 32 بیتی است یا خیر؟
از بالا تا پایین رده گرافیک های انویدیا معماری خیلی یکسان فقط با تفاوت در تعداد sm ها شده است
که ممکن است منظور از scalability در معماری NAVI در اینده amd نیز همین باشد
هدف انویدا از این تصمیم رسیدن به موازات و اجرای خارج از دستور برای sm های خودش است
[Only registered and activated users can see links. Click Here To Register...]
Kernel به تمام داده های موازی و غیر خطی که به گرافیک داده می شوند گفته میشود
انویدیا به kernel هایی که بدون اجبار به صورت موازی در هر Sm ان اجرا می شود grid می گوید
اجرای خارج از دستور یعنی قبل از اینکه نوبت یا زمان اصلی برای ان برسد داده اجرا شود
که خطراتی همانند hazard را دارد که انویدیا در درایور خودش تعمیداتی برای ان اندیشده است
[Only registered and activated users can see links. Click Here To Register...]
قبلا برنامه نویس خیلی با api های قبلی باید کلنجار می رفته است
و در پایان این درایور نویس بوده است که بهینه سازی ها را انجام میداده
و تمام شرکت های برنامه نویسی بزرگ ارتباط نزدیکی با شرکت سخت افزاری برای درایور داشته اند
و همیشه یک واسطه بوده است
اما هدفی که در مورد Amd خیلی ستایش میکنم ان است که ما می خواهیم با ارزان ترین و قدرمتند ترین سخت افزار
و بدون هیچ واسطه ای در هر جای جهان هر کسی خودش بتواند یک توسعه دهنده باشد
در این تصویر استفاده حداکثری از پهنای باند بین گرافیک و cpu توسط روش خارج از دستور نسبت به حالت خطی قبلی را می بینید
که خیلی وابسته به سرعت اجرایی شدر ها بود که Cpu را معطل نگه میداشته است
[Only registered and activated users can see links. Click Here To Register...]
طبق گفته انویدیا در معماری مکسول این قابلیت ها بهبود یافته است
Improvements to control logic partitioning, workload balancing, clock-gating granularity, compiler-based scheduling
انویدیا برای مقابله با vliw در زمینه بازدهی گرافیک و پاسخ گویی سریع sfu و load/store را بکار برده است
یعنی simd های با طول کم که از طریق sfu برای محاسبات مطابق نیاز ضرفیت ان افزوده می شده است
اما gcn اینطور نیست
در مکسول انویدیا دسته بندی سخت افزاری را حذف کرده و وظیفه انرا برعهده کامپایلر قرار داده
که میتواند از طریق درایور انرا دستکاری کند . در این زمینه مشابه vliw شده است
شبکه هوش مصنوعی انویدیا این قابلیت را میدهد که محاسباتی که دستور العمل یکسانی دارند را در یک قسمت جمع اوری کند
برای بهره گیری بیشتر از ضرفیت simt ها
به جای اینکه ضرفیت بخش های خالی simt به خاطر اجرای یک دستورالعمل یکسان هدر برود
انویدیا kernel دیگری از جای دیگر که دستور العمل یکسانی دارند را در ان grid یا sm بارگزاری میکند
که بدون قابلیت موازات kernel و تحت پردازش خطی بودن قبلی غیر ممکن است .
اینکار انویدیا مشابه async از Amd است اما یک فرقی دارد و ان این است که فقط در مورد محاسبات استفاده میشود نه گرافیک
انویدیا هنوز هم جوابی برای این کمبود ندارد جز اینکه هنگامی که گرافیک تمام شد محاسبات را load balance کند
[Only registered and activated users can see links. Click Here To Register...]
با توجه به قابلیت شبکه ای و جابه جایی اصلاعات بین sm ها و البته اسم گزاری instruction dispatch unit
ناخوداگاه یاد ultra-threaded dispatch می افتیم که باتوجه به عملکرد و شکل قرارگیری بین دو قسمت دیگر
انگار هنوز هم همان ساختمان گرافیکی قبلی پا برجاست اما فقط مینیاتوری و کوچک شده است
[Only registered and activated users can see links. Click Here To Register...]
یک تصویر از توضیع یک مثلث بین sm های انوییدا و ترتیب مراحل اجرایی
[Only registered and activated users can see links. Click Here To Register...]
در پایین ان هم ساختمان مموری و اولویت انهاست که طبق داده ای که دارند سرعت متفاوتی خواهند داشت
مراحل گردش نخ اطلاعات بین مموری و شدر که طبق روش معماری شدر های متحد است
[Only registered and activated users can see links. Click Here To Register...]
یک تصویر از عملیات z buffer که همانند اسم ان مربوط به بعد z یا عمق است
[Only registered and activated users can see links. Click Here To Register...]
انویدیا در بخش rasterization خودش می تواند Z Cull را انجام دهد
یعنی قبل از عمل پیکسل گزاری و در مرحله شطرنجی سازی بخش rop و حذف قسمت پنهان فعال میشود
انویدیا همیشه از این قابلیت بهره مند بوده است اما برای ان کار احتیاج است که خود برنامه نویس از ان با کدنویسی استفاده ببرد
اما جدیدا مشخص شده است که انویدیا در مکسول بدون نیاز به کد نویسی و بدون اینکه حتی کسی بفهمد
به صورت جزئی این روش را از طریق کامپایلر انجام میداده است
اما بهینگی مکسول به خیلی علت های دیگر نیز مربوط می شود این کار فقط بخش کوچکی از ان میتواند باشد
شطرنجی سازی دو حالت دارد یکی immediate mode یا حالت سریع که در گرافیک های pc استفاده میشود
و دیگری delay mode یا حالت تاخیر که در موبایل است .
در موبایل چون صفحه نمایش کوچک و پیکسل ها کم هستند خیلی مهم نیست که کمی تاخیر ایجاد شود
اما در pc امکان ندارد که تمام کل صفحه یکباره نمایش داده شود .
و مثلث هایی از بالای صفحه نمایش که پردازش شده اند معطل شوند تا اخرین مثلث در پایین صفحه نمایش پردازش شود تا همگی باهم خروجی دهند
روش انویدیا ترکیب این دو است یعنی نه حالت سریع و نه حالت تاخیر است بلکه تاخیری به صورت جزئی است
روش انویدیا این است که تنها اولین داده ای که برون میاید را در حالت تاخیر شطرنجی سازی می کند
اما اخرین داده گرافیکی را به روش سریع پردازش و شطرنجی سازی میکند. یکجورایی همزمانی می شود در بخش محدودی از تصویر
__________________________________
تمام پردازنده ها و کلا هرچیزی که محاسبات انجام میدهد مثل risc و cisc و vliw و simt همگی از fetch , decode ,alu
تشکیل شده اند که ممکن است به ان front end بگویند
تفاوت اینها نه در ساختمان که خیلی مشابه اند بلکه در نوع دستور العمل و شیوه اجرایی داده ان است
هدف گرافیک موازات است اما هدف cpu پردازش سریع خطی پشت سر هم
گرافیک و cpu به هیچ وجه مشابه هم نیستند و تکنیک هایی که در گرافیک استفاده میشود اصلا در cpu وجود ندارد
همانطور که قبلا گفتم برخلاف sisd یا اسکالر
این شیوه اجرای داده به صورت موازی است که نیاز به دسته بندی و شبکه بندی دارد
و اصلا یک گرافیک خوب با دسته بندی عالی به هر چیزی حتی کامپایلر و هوش مصنوعی بستگی دارد به جز cpu بودن!!!
اما وقتی که میگویند گرافیک ها به cpu نزدیک تر شده اند به خاطر این است که شیوه دستور العمل ان به simt تبدیل شده است
یا به عبارتی از وکتور به اسکالر تبدیل شده . Cpu یک اسکالر تکی است
اما simt توانایی همان اسکالر را دارد اما میتواند با همان دستور العمل نخ های مشابه در کنار خودش داشته باشد
یک simt یک نخی هیچ چیزی از یک Cpu که risc باشد کم ندارد
و در هرکلاک دستور جدید و حالت های جدید درست مثل sisd و اسکالر هست
Simt موازات را به اسکالر هدیه داده است اما نسبت به cpu سرعت کمتری دارد
گرافیک های simt در چهار کلاک نخ هایی را با چهار دستور العمل متفاوت میتوانند اجرا کنند xyzw در مورد گرافیک
یا اینکه برای branch یا شاخه و حالت های مختلف می توانند استفاده شوند
و در شاخه ها از تمام ضرفیت simt استفاده نمی شود و تاثیر منفی دارد
[Only registered and activated users can see links. Click Here To Register...]
انویدیا نیز همانند Amd شدر های ان چهار کلاکی هستند . در تصویر به مسئله قفل بودن نخ های Simt اشاره شده
[Only registered and activated users can see links. Click Here To Register...]
برای اینکه شاخه ها به شیوه سریع تر و تمیزتری اجرا شوند
mask که نوعی دسته بندی دقیق است ابداء شده که با کد های باینری نخ های فعال و غیر فعال را برای شاخه ها نشان میدهد
این تصویری از front end انویدیا که هر Sm و cu دارای ان هست . هرجا Alu وجود داشت اینها نیز وجود دارد
به خاطر یکسان بودن یکی از مختصات هست که داده ها دورن کش گم نمی شوند
[Only registered and activated users can see links. Click Here To Register...]
برای ادامه مطلب یک بار دیگر با نقشه فنی معماری های گرافیک ها که در صفحه اول این تاپیک پست کردم نگاه بیندازید
[Only registered and activated users can see links. Click Here To Register...]
البته مطالبی که در تاپیک پایه های cpu گفتم نیز بیاد داشته باشد
مکسول انویدیا sm ان خیلی مشابه کپلر است اما طبق گفته انویدیا دلیل دو بخشی بودن ان ایجاد انعطاف بیشتر است
فرق قابل توجه بین مکسول و کپلر در ان است که ریجستر تکسچر که اطلاعات تصاویر در ان ذخیره میشود و قبلا به ان TMU می گفتند
الان به جای اینکه همه بخش ها دسترسی مساوی داشته باشند به دو قسمت دسترسی تقسیم شده
اگر اطلاعاتی در یکی باشد بخش دیگری نمی تواند انرا داشته باشد البته مزیت ان این است که طبق ادعای انعطاف انویدیا
می توانند غیر وابسته و مستقل باشند و اگر مثل کپلر میخواهد باشند کافی است که در هر دو اطلاعات یکسانی پر شود
می بینیم که فقط یک دسترسی ساده به ریجستر می تواند تایین کننده یک بخشی یا دو بخشی بودن پردازنده ای شود
معماری GCN که گفتم مشابه بولدوزر است و واقعا هم اینطور است یک کش مشترک بین تمام simd ها و یک decode مشترک
بیاد دارم که سالها پیش در ترجمه خبری گفته بودم که GCN مشابه Cpu است
به این خاطر که اسلات های تسکچر که نوعی ریجستری هستند جایشان را به کش سریع تر مشابه cpu داده اند
و به جای اینکه شدر ها اطلاعات را از ان اسلات ها بگیرند از این کش دریافت میکنند که در برنامه نویسی کلاسیک تاثیر منفی بر ان دارد .
همان طور که می بینید در تسکچر معماری انویدیا و GCN متفاوت هستند
در ابتدای همین پست هم تصویری از ساختار اولویت مموری Sm گذاشته ام
در هر CU از GCN یک اسکار در کنار چهار SIMD وجود دارد که گفتم برای کارهای خاص است
و اسمی ازش برده نمی شود
همه چیز پولاریس و ادعایی که Amd از انقلابی بودن ان میکند مربوط به همین اسکالر می شود
ظاهرا amd به پتانسیل این اسکالر پی برده است و این قسمت را همانند یک cpu مستقل در کنار simd ها تبدیل کرده است
و از حالت کم استفاده قبلی به یک قدرت شاخص تبدیل شده است
فرق ان با HSA این است که به جای اینکه تنها در حافظه با گرافیک ارتباط داشته باشد در کنار Simd ها در هر CU خواهد بود
سابقا همه چیز ان با SIMD در معماری قبلی یکی بود اما الان با اضافه شدن یک DECODE مستقل عملیات های خاص را میتواند انجام دهد
طبق اطلاعات و توضیحات کاملی که در این لینک امده است که پیشنهاد میکنم حتما مطالعه کنید
[Only registered and activated users can see links. Click Here To Register...]
با وجود اینکه با اسکالر سازی و SIMT شدن خیلی از مشکلات محاسبات حل شده است اما هنوز هم مسائلی چون
شاخه یا Branch و وابسته ها وجود دارد که در صورت استفاده از SIMD برای ان سرعت پایین
و مصرف بالا و هدر رفتن یا خالی ماندن بخش های پردازشی می شود
که گاهی اوقات برای ایجاد داده مجبور به رفتن به کلاک های بیشتر میشوند و SIMD های خالی تر
بعضی اوقات تبدیل کدنویسی به وکتور برای تولید ان داده ها بهینه تر خواهد بود
تاکنون از اسکالر و کلاک در گرافیک صحبت شده بود اما در محاسبات نیز خیلی مفید است
این اسکالر سریع و استفاده از ان در کد نویسی این قابلیت ها را میدهد
اول. Prefetch که از اسم ان مشخص هست میتواند همانند یک بخش پردازشی قبل از SIMD ها عمل کند
و دسته بندی اطلاعات را مناسب SIMD ها اصلاح نماید و نرخ گم شدن کش نیز کاهش پیدا میکند
این روش با SIMD های قبلی هیچ مزیتی ندارد جز اینکه فقط کلاک و بخش های پردازشی بی استفاده را زیاد میکند
اما اسکالر سریع اینطور نیست . مثل مراحل fetch و decode و .... در Cpu
دوم .حذف و کاهش شاخه بندی ها با استفاده از سپردن پردازش ان به اسکالر برای یافتن مسیر ها
سوم. سپردن پردازش های تک نخی به این اسکالر و انجام عملیات های مستقل متفاوت از بقیه SIMD ها
همچون رد کردن مرحله تسلیشن برای ان که در معماری قبلی غیر ممکن بود
طبق مطلب در ازمایش گاه amd بر روی معماری کپلر ازمایش هایی برای اسکالر انجام شده است
که نشان میدهد کپلر همانند GCN های سابق از توانایی اسکالر مخصوص بی بهره بوده است و مشابه هم اند
با این حساب به حرف راجا کدوری می رسیم که گفته بود از نظر زمانبندی معماری 2 تا 3 سال از انویدیا عقب هستند
همچنین در مطلب نمودار هایی از بهبود بازدهی با استفاده از کدنویسی برای اسکالر موجود است
اسکلت اصلی پولاریس با GCN های سابق خیلی مشابه است
و با وجود این مطلب به معماری Vega امیدوار شدم .
مخصوصا اگر کنترل شاخه های ان fine grained و دقیق تر و بهینه تر شده باشد
فکر می کنم تا چندین سال یا برای همیشه چیز جدیدی برای توضیح در این تاپیک یا جای دیگر وجود نداشته باشد همچنین برای جهان
شما چی فکر میکند؟
این تصاویر برای جایزه
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
عالی بود. تشکر@};-@};-