از قابلیت‌های دایرکت ایکس 12 مدیریت صفوف دستور و دستورات مهم با در نظر گرفتن اولویت است. موتور محاسباتی غیرهم‌زمان یا ACE که بخشی از معماری GCN است، این امور را با شیوه‌ای بهینه انجام می‌دهد.

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

مشکلات روش مالتی ترد در دایرکت ایکس 11

قبل از هر چیز بهتر است به مفهوم شیدر اشاره کنم:

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

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

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

در مجموع می‌توان دستورات را در سه گروه طبقه‌بندی کرد، دستورات گرافیکی، محاسباتی و کپی.

پردازش گرافیکی به صورت مالتی‌ترد و صفوف محاسبه، گرافیک و کپی

پردازش گرافیکی به صورت مالتی‌ترد و صفوف محاسبه، گرافیک و کپی

ساده‌ترین روشی که می‌توان گرافیک مالتی ترد ناهم‌زمان را توضیح داد این است که روش کار سوییچ کردن بین صفوف دستور مختلف در زمان‌های مشخص است. صفی مثل کپی یا گرافیک یا محاسبه به عنوان صف اصلی اجرا می‌شود و بعد از زمان مشخصی، نوبت صف دیگر می‌شود. علاوه بر اشکال فواصل خالی که اشاره شد، یک اشکال دیگر هم داریم، اینکه دستورات فوری و مهم باید با صفوف ترکیب شوند و در انتظار بمانند تا زمان اجرایشان فرا برسد.

شاید یک مثال روزمره همه‌چیز را وضوح بخشد: فرض کنید یک چهار راه داریم، سه جاده به یک جاده تبدیل می‌شود اما چراغ راهنمایی به دستورات می‌گوید که باید صبر کنند تا نوبت جاده‌ی مربوط به آنها فرابرسد. یک خودروی مهم هم باید در انتهای صفوف قرار بگیرد. روشی ساده ولیکن غیر بهینه است. نه؟

پیش‌خالی‌سازی و اولویت‌بندی دستورات صفوف دستور

پیش‌خالی‌سازی و اولویت‌بندی دستورات صفوف دستور

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

پیش‌خالی‌سازی و اولویت‌بندی دستورات صفوف دستور

پیش‌خالی‌سازی و اولویت‌بندی دستورات صفوف دستور

روش جدید مدیریت صفوف و دستورات در دایرکت ایکس 12

مشکلات موردبحث در دایرکت ایکس 12 با استفاده از روش ترکیب دستور جدید به اسم شیدرهای آسنکرون حل می‌شود. در معماری GCN ای‌ام‌دی موتور محاسباتی آسنکرون (غیرهم‌زمان) می‌توان دستورات را جاسازی کند، فضای خالی در یک صف با دستورات صفوف دیگر پر می‌شود، فرآیندی شبیه ترکیب ترافیک دو جاده. برتری دیگر ACE یا همان موتور محاسباتی آسنکرون در این است که صف در حال اجرا را در زمان لازم، تغییر می‌دهد. مثلاً اگر صفی شامل دستورات مهم فرا برسد، سریعاً آن را به صف اصلی که در حال اجراست، تبدیل می‌کند. روشن است که این روش موجب افزایش کارایی می‌شود.

معماری GCN در اغلب کارت گرافیک‌های سری 7000 (به جز تغییر نام یافته‌های سری قبل) و نسل‌هدی بعدی استفاده شده است. هر یک از ACEها می‌توان 8 صف دستور را با شیدرهای مربوط به خود مدیریت کند. ساده‌ترین پردازنده‌های گرافیکی دارای 2 موتور محاسباتی آسنکرون هستند و پردازنده‌های گرافیکی سریع‌تر، 8 موتور را در خود جای داده‌اند.

موتور محاسباتی غیرهم‌زمان کلید حل مشکلات صفوف دستور

موتور محاسباتی غیرهم‌زمان کلید حل مشکلات صفوف دستور

از تئوری تا عمل، نتیجه‌ی استفاده از ACE چیست؟

ای‌ام‌دی برای نمایش عملکرد روش جدیدی که در دایرکت ایکس 12 قابل استفاده است، از بسته‌ی توسعه‌ی نرم‌افزاری LiquidVR استفاده کرده است. رندری که با سرعت 245 فریم بر ثانیه اجرا می‌شود، البته بدون شیدرهای غیرهم‌زمان و پس‌پردازش. با اضافه کردن پس‌پردازش سرعت اجرا به 158 فریم بر ثانیه افت می‌کند. اگر شیدرهای غیرهم‌زمان فعال شوند، فریم‌ریت مجدداً افزایش پیدا می‌کند و به 230 فریم بر ثانیه می‌رسد. تقریباً نزدیک به عدد اول. بنابراین در بهترین حالت می‌توان به افزایش سرعت اجرا در حد 50 درصد امیدوار بود.

ممکن است سرعت اجرا بسیار بالا باشد اما در لحظاتی دوربین جا بماند! تجربه‌ی خوشایندی نیست.

مزیت اصلی استفاده از ACE برای پر کردن فضای خالی صفوف دستور و همین‌طور تنظیم اولویت صفوف مهم و فوری، افزایش سرعت است اما یک مزیت دوم هم وجود دارد که به خصوص در واقعیت مجازی ارزش زیادی دارد: کاهش تأخیر. در واقعیت مجازی اگر قرار باشد کاربر سر خود را بچرخانه و حسگرها و مجموعه پردازشی، صحنه‌ی پیش روی وی را به سرعت تغییر دهند، پردازنده‌ی گرافیکی هم باید تأخیر زیادی نداشته باشد. یک مورد جالب دیگر به موازی‌سازی کارت گرافیک‌ها مربوط است. در روش جدید دایرکت ایکس 12، موازی‌سازی دستورات و صفوف به شکلی بهینه‌تر صورت می‌گیرد که احتمالاً در کاهش تأخیر یا همان مایکرواستاترینگ موثر است. این مهم را باید در بنچ‌مارک‌ها و اولین بازی‌های مبتنی بر واسط برنامه‌نویسی جدید بررسی کرد.

نظر شما در مورد ACE معماری GCN چیست؟ آیا انویدیا هم می‌توان راهکاری مشابه ارایه کند یا تا مدتی AMD از افزایش عملکرد و کاهش تأخیر لذت می‌برد؟