یکی از ویژگی‌های بسیار جالب دایرکت ایکس 12 قابلیتی به اسم استفاده‌ی صریح از پردازنده‌های گرافیکی یا EMA است که استفاده‌ی موازی از پردازنده‌های گرافیکی کاملاً متفاوت را ممکن می‌کند. در ادامه با EMA و پیش‌نمایشی از عملکرد آن آشنا می‌شویم.

تبلیغات ۷۲۰ در ۹۰

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

پاسخ مایکروسافت به این سوال عددی در حد 20 درصد است! گرچه تعداد فراخوانی ترسیم در هر ثانیه چندین برابر می‌شود و همین‌طور در موارد خاص ممکن است سرعت اجرای بازی دو تا سه برابر شود، اما در مجموع برتری دایرکت ایکس 12 آن قدر زیاد نیست.

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

EMA یا Explicit Multi-Adapter به معنی استفاده‌ی صریح از پردازنده‌های گرافیکی قابلیت جالب دایرکت ایکس 12 است که می‌خواهیم بحث عمیقی در مورد آن داشته باشیم.

Ashes of the Singularity اولین نمایش رندر به کمک دو کارت گرافیک متفاوت

باز هم Oxide Games طراح معروف بنچ‌مارک Ashes و موتور گرافیکی Nitrous پیشتاز است و اولین پیش‌نمایش از اجرای یک بازی توسط دو کارت گرافیک کاملاً متفاوت را ارایه می‌کند.

Ashes of the Singularity اولین نمایش رندر به کمک دو کارت گرافیک متفاوت

Ashes of the Singularity اولین نمایش رندر به کمک دو کارت گرافیک متفاوت

قبلاً با این بازی استراتژی و بسیار سنگین که البته با توجه به اولین بودن در نوع خود، نباید روی نتایج آن بیش از اندازه تکیه کرد، آشنا شدیم. لذا از تکرار مکررات پرهیز می‌کنم و سراغ معرفی قابلیتی به اسم EMA در دایرکت ایکس 12 می‌رویم.

آشنایی با SLI و CrossFire و اساس عملکرد موازی کارت گرافیک‌ها

پس از معرفی واسط بسیار سریعی به اسم پی‌سی‌آی اکسپرس، دو مغز متفکر دنیای پردازنده‌های گرافیکی به فکر استفاده از دو یا چند کارت گرافیک برای اجرای بازی‌ها افتادند. انویدیا و AMD هر دو از یک روش اساسی برای اجرای موازی بازی‌ها استفاده می‌کنند که چیزی جز AFR یا alternate frame rendering به معنی رندر نوبتی فریم‌ها نیست. هر پردازنده‌ی گرافیکی یکی از فریم‌ها را رندر می‌کند و زمانی که کار خود را به پایان برساند، فریم بعدی برای رندر در دستور کار قرار می‌گیرد. به این ترتیب اگر سرعت رندر کردن فریم‌ها را یکسان در نظر بگیریم و دو پردازنده‌ی گرافیکی داشته باشیم، فریم‌ها یکی در میان رندر می‌شود و به عبارت ساده‌تر فریم‌های زوج را کارت گرافیک اول و فریم‌های فرد را کارت گرافیک دیگر رندر می‌کند.

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

AFR روش ساده و خوبی است از این جهت که سازگاری بسیار خوبی برای اجرای انواع بازی‌ها دارد و پیچیدگی‌های عجیبی در ساخت موتورهای گرافیکی ایجاد نمی‌شود.

روش دیگر SFR یا Split Frame Rendering است و در حقیقت بخش‌های مختلف یک فریم توسط پردازنده‌های گرافیکی مختلف رندر می‌شوند. این روش شاید بهینه‌تر باشد اما پیاده‌سازی آن دشوار تر است.

چرا AFR یا رندر نوبتی فریم‌ها بد است؟!

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

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

بهترین حالت یکسان بودن پردازنده‌های گرافیکی است.

پدیده‌‎ی مایکرواستاترینگ در سیستم‌هایی با دو کارت گرافیک گاهاً جدی می‌شود و علی‌رغم اینکه سرعت اجرای بازی بسیار زیاد است، برخی فریم‌ها به کندی رندر می‌شوند. ای‌ام‌دی برای حل این مشکل زمان‌بندی را تصحیح کرد و شاید این روزها کمتر با چنین مشکلی مواجه شویم. به نظر من انویدیا به نوعی صورت مسأله را پاک کرده و برای SLI کردن، تنها دو کارت گرافیک کاملاً مشابه را مجاز می‌داند اما در محصولات ای‌ام‌دی، می‌توان پردازنده‌ی گرافیکی مجتمع APU را هم با کارت گرافیک مجزا کراس‌فایر کرد.

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

روش جاه‌طلبانه‌ی LucidLogix و علت شکست خوردن آن

در سال 2010 بود که LucidLogix تکنولوژی جالبی به اسم Hydra معرفی کرد. به کمک Hydra فراخوانی‌های دایرکت ایکس و OpenGL تفسیر شده و بین چند پردازنده‌ی گرافیکی که حتی ممکن است کاملاً متفاوت باشند، توزیع می‌شود.

روشی سخت‌افزار و نرم‌افزاری با پردازش اضافی بیش از حد.

روش جالبی بود و گیمرها بسیار خوشحال بودند و البته برخی آن را جالب نمی‌دانستند. پیاده‌سازی روشی که شبیه AFR نیست، بسیار مشکل است و نظر گروه دوم با بررسی‌های اولیه‌ی Hydra تأیید شد. عملکرد روش LucidLogix خوب نیست چرا که تفسیر و سپس توزیع و در نهایت ترکیب نتایج رندر، فرآیند پیچیده‌ای است و متأسفانه سازگاری آن با موتورهای گرافیکی هم گرفتار مشکلات جدی شد.

Hydra روش نرم‌افزاری و سخت‌افزاری برای استفاده‌ی موازی از پردازنده‌های گرافیکی کاملاً متفاوت

Hydra روش نرم‌افزاری و سخت‌افزاری برای استفاده‌ی موازی از پردازنده‌های گرافیکی کاملاً متفاوت

با ادامه‌ی توسعه‌ی Hydra مشکلات کمتر و عملکرد بهتر شده بود اما نیاز به بروزرسانی مداوم و بررسی یکایک درایورها و بازی‌ها، مانع شکوفایی این تکنولوژی جالب شد. اگر دقت کرده باشید در اغلب مادربوردهای حرفه‌ای، آپشن استفاده از LucidLogix که با اسامی متنوعی مثل MVP وجود دارد، غیرفعال است. علت مشکلات سازگاری آن است و به نظر می‌رسد که سازندگان سخت‌افزار هم اقبالی به استفاده از آن ندارند.

دایرکت ایکس 12 و سه روش برای استفاده‌ی موازی از پردازنده‌های گرافیکی

در دایرکت ایکس 12 سه روش کلی برای استفاده‌ی موازی از چند پردازنده‌ی گرافیکی وجود دارد. ساده‌ترین روش استفاده‌ی ضمنی از پردازنده‌های گرافیکی یا به عبارتی Implicit Multi-Adapter است. مایکروسافت این روش را برای تداوم مسیر AFR در اختیار توسعه‌دهندگان بازی قرار داده و در حقیقت پدیده‌ی جدیدی نیست.

در این روش بیشتر امور توسط درایور و در حقیقت انویدیا و AMD مدیریت می‌شود. درایو بهینه‌تر به معنی عملکرد بهتر است و معمولاً استفاده از دو کارت گرافیک مشابه، سرعت اجرا را بیش از 90 درصد افزایش نمی‌دهد.

استفاده‌ی ضمنی از پردازنده‌های گرافیکی یا Implicit Multi-Adapter

استفاده‌ی ضمنی از پردازنده‌های گرافیکی یا Implicit Multi-Adapter

روش دوم EMA است، روشی برای استفاده‌ی صریح از پردازنده‌های گرافیکی که پدیده‌ی واقعاً جدید دایرکت ایکس 12 است. اما چرا مایکروسافت به این روش، استفاده‌ی صریح می‌گوید؟

استفاده‌ی صریح یعنی مشخص کردن صریح نقش‌ها در فرآیند رندر.

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

EMA خود به دو صورت پیاده‌سازی می‌شود. Unlinked و Linked

EMA خود به دو صورت پیاده‌سازی می‌شود. Unlinked و Linked

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

روش EMA Linked در دایرکت ایکس 12

روش EMA Linked در دایرکت ایکس 12

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

یکی از مشکلات روش AFR با معرفی EMA به کلی از بین می‌رود، منظور تکرار داده‌های موجود روی حافظه‌ی پردازنده‌های گرافیکی است. قابلیت بسیار جالب دیگری که قابل استفاده است، تحویل فریم ناقص به دیگر پردازنده‌های گرافیکی برای ادامه‌ی فرآیند رندر است. در این صورت می‌توان تکنیک‌هایی مثل HBAO+ را توسط پردازنده‌‌های گرافیکی انویدیا اجرا کرد تا سرعت اجرا بهینه شود. شاید پی‌سی‌آی اکسپرس از نظر تأخیر ذاتی خود روش جالبی برای تبادل داده بین پردازنده‌های گرافیکی نباشد اما دایرکت ایکس 12 این امکان را فراهم کرده که سازنده‌ی بازی تمامی فرآیندهای جابجایی داده را مستقیماً کنترل کند. بنابراین می‌توان بازی‌ها را دقیقاً بهینه کرد.

مدیریت حافظه‌ی کارت گرافیک‌های مختلف در EMA

مدیریت حافظه‌ی کارت گرافیک‌های مختلف در EMA

تمرکز اصلی EMA بهینه‌سازی اجرای بازی به کمک پردازنده‌های گرافیکی مجتمع و مجزا است. به عنوان مثال می‌توان پس‌پردازش که شاید فرآیند سنگینی باشد را به کمک گرافیک مجتمع انجام داد و تکمیل رندر را به کارت گرافیک مجزا سپرد. Epic Games در این زمینه بررسی بیشتری انجام داده و به این نتیجه رسیده که برای این روش تقسیم کار، اگر رزولوشن 1080p و فریم‌ریت 60 مدنظر باشد، تنها 2 گیگابیت بر ثانیه پهنای باند نیاز است. PCIe 3.0 شانزده مسیره پهنای باند 64 گیگابیت بر ثانیه‌ای دارد و به نظر می‌رسد که هیچ مشکلی متوجه این روش تقسیم بار پردازشی نیست.

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