جدال تازه انویدیا و ایامدی بر سر دایرکت ایکس 12: واقعیت چیست؟
داستان از آنجایی آغاز شد که سخنگوی تیم بازیسازی Oxide ادعا کرد که بنچمارکِ دایرِکت ایکس ۱۲ آنها که بر اساس نسخهی آزمایشی بازی Ashes of the Singularity تهیه شده، روی برخی کارتهای گرافیک ایامدی کمی سریعتر از محصولاتِ همردهی انویدیا اجرا میشود.
بخش غیر منتظرهی ماجرا این بود که تیم توسعه دهندهی بنچمارک خبر داد که انویدیا از آنها خواسته تا قابلیتِ Asynchronous Compute/Shaders را در بنچمارکشان غیر فعال کنند. به نظر میرسید معماری مَکسول انویدیا ( یا همان کارتهای سری ۹۰۰) قابلیت Asynchronous compute موجود تحتِ دایرکت ایکس ۱۲ را به خوبی و در سطح مناسب سخت افزاری پشتیبانی نمیکند. در همین حال ایامدی به سرعت دست به کار شد و یک معرفیِ تفضیلی را بر اساس یک فایل PDF بزرگ ۴۱ صفحهای مشتمل بر تعداد زیادی اسلاید آماده کرد و در اختیار رسانهها قرار داد تا به زَعمِ خود اهمیت این قابلیت را روشن سازد.
خلاصه اینکه همگان انتظار داشتند که معماری مکسول انویدیا از پشتیبانی کامل دایرکت ایکس ۱۲ برخوردار باشد، اما اکنون تردیدهایی در این موضوع ایجاد شده است. در طرف مقابل ایامدی مدتی است که در معماری GCN 1.2 خود که مشتمل بر کارتهای گرافیکی سری Fury، Hawaii، Granada و Tonga میشود از asynchronous compute پشتیبانی میکرده است.
Async compute/shader به زبان ساده
به طور معمول گرافیکهای چند رشتهای و موازی تحت دایرکت ایکس ۱۱ در صفِ واحدی به کار گرفته میشوند و سپس برای قرار گرفتن در نوبتِ اجرا زمانبندی میشوند. تمام این مراحل هم همزمان انجام میشود. اما در دایرکت ایکس ۱۲ و API های مشابه مانند Mantle و Vulkan، وظایفی که در صفهای متفاوتی قرار میگیرند به طور مستقل، بر اساسِ اولویت و به صورت غیرهمزمان زمانبندی میشوند. این روش مزیتهای متعددی دارد که بزرگترینِ آنها تاخیر کمتر و در نتیجه سرعت بالاتر پردازش فریم ها است که در عین حال باعث استفادهی بسیار بهتر از تراشهی گرافیکی هم میشود.
اِیاِمدی سعی دارد این مساله را با مجموعهای از تصاویر متناظر با جاده و چراغهای ترافیکی آن نشان دهد. در گذشته دستورات همیشه به همان ترتیبی که میرسیدند پردازش و صف بندی میشدند. اما با دایرکت ایکس ۱۲ و معماری گرافیکی GCN، دستورالعملها را میتوان به صورت مجزا اولویت بندی و پردازش کرد، به این معنی که وظایف و مجموعه دادههای مهمتر اولویت بالاتری برای اجرا پیدا میکنند و سریعتر اجرا خواهند شد.
اما با قابلیت Asynchronous Shaders یک قدم جلوتر میرویم و حالا به کمکِ آن ۳ صف متفاوت در دسترس است. صف گرافیکها (برای رندر)، صف Compute یا پردازش (برای فیزیک، نورپردازی و افکتهای Post-processing) و سرانجام صف کپی ( برای انتقال دادهها). کارهایی از انواع همه یا هر یک از این ۳ نوع صف میتوانند به طور مستقل زمانبندی شوند. تمام کارتهای گرافیکی مبتنی بر معماریِ GCN اکنون میتوانند دستورالعملهای فرمانِ چندگانه و گردش دادهها را توسط واحدهایی که ACE گفته میشود به صورت همزمان اجرا کنند. هر صف میتواند دستورات را بدون نیاز به انتظار برای انجام وظایفِ صفهای دیگر عبور دهد. این کار تراشهی گرافیک شما را همیشه ۱۰۰ درصد فعال نگه میدارد.
ایامدی میگوید که Asynchronous Shaders افزایش راندمانی تا سقفِ ۴۶ درصد را در دمویی که با کیت توسعهی LiquidVR به نمایش گذاشته شده، موجب شده است. اما این که تفاوت در بازیهای معمولی چگونه بروز کند خود بحث دیگری است. البته که از هر افزایش راندمانی، هر چقدر هم که اندک باشد استقبال میشود.
پس چه اتفاقی افتاده است؟
انویدیا از تیم اُکساید خواسته که ویژگیِ Asynchronous Compute/Shaders را برای سخت افزارهایش غیر فعال کند، در حالی که درایورش نشان میدهد که این گزینه قابل استفاده است. اکنون فرضیهی ما این است که انویدیا قطعا این قابلیت را پشتیبانی میکند، البته با محدودیتهایی.
دوباره مرور میکنیم: Asynchronous Shaders قابلیت یکسانی در API دایرکت ایکس ۱۲ روی تمام سخت افزارهای سازگار با آن است که به نرم افزار اجازه میدهد دادههای سنگین را بهتر توزیع کند. درایورِ انویدیا هم گزارش میدهد که تراشههای مکسول این مشخصه را پشتیبانی میکنند. اما تیم بازیسازیِ اکساید بنچمارکی را برای نمایش توانمندیهای دایرکت ایکس ۱۲ ساخته و به مشکلاتی برخورده است. وقتی که آنها قابلیتِ Async Shader را فعال کردند، نتیجه برای محصولات برپایهی مکسول به گفتهی خود آنها «فاجعهی کامل» بود. تیم اکساید با رد و بدل شدن پیامهایی با انویدیا سعی در رفعِ ایرادات کردند، اما در عوض متوجه شدند که معماری مَکسول آن گونه که درایورهایش گزارش میدهند، قابلیت Asynchronous Shaders را در ردهی Tier 1 و در سطح پایینِ سخت افزاری به درستی پشتیبانی نمیکند. در آن مرحله بود که بنا به ادعای خود این تیم، انویدیا شروع به اِعمالِ فشار به تیم اکساید میکند تا بخشی از کدِ بازی خود را که از این قابلیت استفاده میکند، به کلی حذف کنند.
درجوابیهی تیم اکساید، در عین اینکه که از راندمانِ خوب درایورهای انویدیا تحت دایرکت ایکس ۱۱ تمجید میشود و سربارِ درایورهای انویدیا تحت دایرکت ایکس ۱۲ هم بسیار بهتر از درایورهای ایامدی قلمداد میشود، اما از پایین بودن فریمِ تولیدی با فعال شدن Async Compute صحبت به میان میآید و در پایانِ متن هم به عدم پشتیبانی ذاتی معماری مکسول از این قابلیت منتهی میشود.
آزمایش داوطلبانه
فردی در انجمنهای سایت Beyond3d بنچمارکِ کوچکی را برای دایرکت ایکس ۱۲ ساخته است. او کدهای سادهای را برای پرکردن صفهای گرافیک و Compute نوشته تا بتواند تشخیص دهد که آیا معماری تراشهی گرافیکی میتواند آنها را به صورتِ غیر همزمان اجرا کند و قابلیت asynchronous Shaders را دارد یا خیر.
او ۱۲۸ صفِ فرمان و ۱۲۸ لیست فرمان را تولید کرد تا به کارتها ارسال کند و سپس از ۱ تا ۱۲۸ صف فرمان را پی در پی اجرا کند. اگر افزایش تعداد صفهای اجرا شده باعث افزایش خطی در زمان اجرای آنها شود، بیانگر این است که کارت نمیتواند صفهای چندگانه را به صورت همزمان پردازش کند و در نتیجه از Async Shaders پشتیبانی نمیکند. او سپس نسخهی بروز شدهای با ۲ صف فرمان و ۱۲۸ لیست فرمان را منتشر کرد و بسیاری از کاربران نتایجِ بدست آمده با این بنچمارک روی سیستمشان را هم ارسال کردند.
روی معماری مکسول انویدیا، اجرای همزمان تا سقفِ ۳۱ لیست فرمان تقریبا با سرعت یکسان و بدون تاخیر بود، اما از هنگام اضافه شدن لیستِ شماره ۳۲، زمان رندر هم اضافه میشود که نشان از ایجاد سربار برای زمانبندی صفها است.
از طرف دیگر روی معماری GCN اِیاِمدی، تا سقف ۱۲۸ لیست فرمان به صورت همزمان تقریبا با زمان یکسان اجرا میشوند و تنها از صف شمارهی ۶۴ به بالا کمی تاخیر به آن اضافه میشود. این رفتار نشانهی سازگاریِ کامل این معماری با قابلیت Async Shaders و توانایی واحد زمانبندِ این معماری است.
اتفاق جالب این است که زمانِ اجرای صف ها در معماری مکسول تا زمانی که کمتر از ۳۱ عدد باشند به نحو بارزی کمتر از معماری CGN است، اما زمانی که این تعداد از ۳۱ واحد تجاوز کند زمان اجرای آن به صورت تساعدی افزایش مییابد. در مورد کارت GTX 980 Ti ، زمان اجرای هر سه مدل صفهای تعریف شده در تعداد ۱۲۸ واحد مشابه زمان اجرای آنها در Fury X است.
نتیجه گیری
شاید در غیابِ بازیهای دایرکت ایکس ۱۲ و نبود بنچمارکی رسمی بر اساس این API، نتیجه گیری و تحلیل آمارِ چند بررسی آماتوری کاری منطقی و دقیق نباشد، اما دست کم به برآورد و پیش بینی ما از چالشهای پیش رو و نحوهی عملکرد معماریهای گرافیکی ایامدی و انویدیا در آینده جهت میدهد.
از طرفِ دیگر، قبل از اینها مشخص شده بود که معماری GCN حتی در کارتهای نسل جدید Fury هم از قابلیتهای Raster Ordered Views و Conservative Raster که گزینههای پیاده سازی شده در DX 12.1 هستند پشتیبانی نکرده و قابلیتهای آن به Feature Level 12.0 ختم میشود. حالا هم با ظنِ اینکه معماری مَکسول انویدیا در سوی دیگر این ماجرا نمیتواند به درستی از قابلیت Async Shaders پشتیبانی کند، این تردید ایجاد میشود که هنوز هیچ یک از دو شرکتِ رقیب محصولی با پشتیبانی جامعِ دایرکت ایکس ۱۲ در اختیار ندارند، یا دست کم اینکه نحوهی تعامل آنها با این API جدید از یکدیگر متفاوت است.
این ماجرا هر سرانجامی که داشته باشد، شطرنجی را که انویدیا و اِیاِمدی برای تبلیغِ محصولاتشان بر سر قابلیتهای معماری خود آغاز کردهاند متوقف نخواهد کرد و اصلِ قضیه زمانی آغاز میشود که بکارگیری دایرکت ایکس ۱۲ در بازیهای جدید توسط توسعه دهندگان به طورِ جدی آغاز شود و بتوان بنچمارکهای مختلفی را از موتورهای گرافیکی در بازیهای متفاوت بررسی و مقایسه کرد. در اینصورت است که برای بسیاری از این ابهامات و تردیدهایی که اکنون ایجاد شدهاند میتوان پاسخ مشخص و دقیقی پیدا کرد و گمانه زنیهای امروز رو به حقیقت بدل نمود.