در چند پست قبلی درباره شکست OpenGL از Directx مایکروسافت نوشتم. بعد از آنکه OpenGL 2.0 از directx 9 شکست خورد ARB آنرا به گروه khronos داد و بعد از کلی کار گروه khronos برای OpenGL 3 سر انجام یک OpenGL شکست خورده بود که حتی بعضی از قابلیتهای قدیم آنهم از آن حذف شده بود که نمونه آن مجموع OpenGL Lean and Mean بود.

حالا با این شکست دیگه بحث بیشتری روی آن نمیشه کرد تا ببینیم آیا OpenGL به تارخ میپیوند یا اینکه مجددا از خاک بلند میشه. چیزی که حالا باید راجع بهش بحث بشه Directx 11 هست که اگر خاطرتان باشه من مطلبی با عنوان چرا ویندوز ۷ مهم است نوشتم و حالا باید نوشت چرا Directx 11 مهم است.

مایکروسافت با Directx 10 جامع ترین بازنگری از زمان ایجاد API خود به بعد را بر روی آن انجام داد.

البته Directx 10 مخالفهای زیادی هم دارد و انتقادات شدیدی هم ازش شد که باعث شد برنامه نویسان به اون رو نیاورند و منتظر Directx 11 بمونند. این قضیه را حتی در تصویر بالا که لوگوی directx هست میبینید که منتقدان نسخه ۱۰ روی آنرا خط زدند و ۱۱ را جلوی آن نوشتند که به معنی این هست که منتظر نسخه ۱۱ هستند. که این انتظار هست که باعث مهم شدن Directx 11 میشود. در این مطلب این قضیه را بررسی میکنم و نگاهی حرفه ای به ساختمان Directx 11 می اندازم.

قبل از همه چیز از آنجائیکه مایکروزافت نهایتا پرده را از روی API خود کنار زده است و همچنین بخاطر آنکه این محصول هنوز یک رویداد خبرساز به حساب میاد، رویدادی که ایده ای از آنچه باید از سخت افزارهای سالهای آتی انتظار داشته باشیم را در اختیارمان قرار میدهد. این احتمال بسیار وجود داره که Directx 11 به یک مورد کاملا مهم تبدیل بشه البته نسبت به Directx 10 چون مایکروسافت فاصله زیادی بین نسخه های API خودش ایجاد کرده که میشه به اون یک ارتقاء افزایشی گفت و این API با نسخه های قبلی و همینطور سخت افزارهای قبلی خود کاملا سازگار است و مورد بعد اینکه Directx 11 نه تنها برروی ویندوز ۷ نصب میشه بلکه برروی ویستا نیز نصب میشود و همین یک امتیاز برتری نسبت به نسخه ۱۰ هست چون نسخه ۱۰ فقط روی ویستا جواب میدهد و همین باعث محدودیت gamer ها شد و همینطور برنامه نویسان. تا اون زمان xp کاملا ارزش خود را از دست میدهد البته نه فقط برای direct بلکه بخاطر سخت افزارهای کاملا حرفه ای تر از امروزی، و این دلیلی هست که میشه گفت با اومدن Directx11 کاربران مجبورم xp را ترک کنند که این البته بیشتر برای کسانی است که بازی میکنند. چون برنامه های جدید و بازی های جدید با نسخه directx11 سازگار میشوند.

با ارائه Directx 10 مایکروسافت مورد سرزنش قرار گرفت بخاطر اینترفیس برنامه نویسی جدید در میان بازیکنان و برنامه نویسان که به یک اندازه با ناهمگونی مواجه شد.

http://ve3dmedia.ign.com/images/02/71/27186_DraculaOrigin-02_normal.jpg

مایکروسافت تصمیم گرفته تا به تنهایی مشکلاتی را حل کند. یکی از این مشکلات Multi-threaded هست. حالا که دارم این مطلب را دارم مینویسم و به اینجا رسید ، دارم به این نتیجه میرسه که خیلی جا برای بحث داره و شاید دو قسمت بشه پس آمادگیشو داشته باشید.
شاید برای شما حرفی که میزنه عجیب باشه اونم اینکه شما فکر میکنید با اینکه خیلی وقته که چند هسته ای ها به بازار عرضه شدند برنامه نویسان پس دیگه کار خودشون رو خوب بلد هستند؛ اما موتورهای کنونی هنوز صرفا از یک رشته واحد برای راندو استفاده میکنند. و بقیه آنها برای صدا ، منابع decompression ، خصوصیات فیزیکی و … استفاده میشوند. حالا دلیلش چیست که تقسیم نشدند بخاطر این هست بعضی از آنها به نحوه کار GPU ها و گروه دیگری به API 3 بعدی مورد استفاده مربوز میشند. بخاطر همین هست که مایکروسافت میخواد خودش مشکل را حل کنه.
حتی زمانیکه GPU ها در حالت SLI یا Crossfire به یکدیگر متصل باشند باز میبینید که تنها یک GPU وجود داره چون هدف آنها ساخت یک تصویر است که تنها با یک GPU مجازی واحد برروی سیستم شما وجود داره که نتیجه اش اینه که یک بافر فرمان وجود داره. وقتیکه یک منبع واحد در میان رشته های متعدد به اشتراک گذاشته میشود، برای جلوگیری از نوشته شدن همزمان فرامین رشته های متعدد و ایستادن آنها برروی یک پای یکدیگر از تکنیک Mutex Mutual exclusion استفاده میشه. این به این معنی است که تمام مزایای استفاده از رشته های متعدد توسط یک بخش حیاتی که کد را Serialize میکنه از بین خواهد رفت. هیچ API نمیتونه این را برطرف کنه چون ذاتا به نحوه برقراری ارتباط cpu و GPU وابسته است. ولی مایکروسافت یک API را عرضه کرده که میتونه برای برطرف نمودن آن تلاش کنه. Directx 11 بافرهای ثانویه ای را معرفی کرده است که میتوانند ذخیره سازی شده و بعدا مورد استفاده قرار بگیره.

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

ی بدست آمده چندان ایده آل نباشد.
مشکل نسخه های قبلی Directx ایجاد منابع مثلا بافتها بود در نسخه های ۹ و ۱۰ منابع باید در رشته راندو انجام بشه. برنامه نویسان با ایجاد رشته ای که بافت را از دیسک خوانده و Decmpress نموده و سپس منبع آبجکتهای Direct3d که خودش در رشته اصلی ایجاد شده است را پر کنه، یعنی این مشکل را دور میزدند.
اما بخش عمده ای از بار کاری هنوز روی رشته اصلی قرار داره که قبل از دچار اضافه بار overload است. این وضعیت ، توازن مناسب را تضمین نمیکند و به زمانهای اجرای خوبی نیاز دارد. بخاطر همین مایکروسافت یک اینترفیس جدید را با Directx 11 معرفی کرده که یک برنامه نویس میتونه یک آبجکت device را در هر رشته ایجاد نماید که برای بارگذاری منابع مورد استفاده قرار خواهد گرفت. هماهنگی میان توابع device بطور دقیق تری نسبت به Directx 10 انجام خواهد شد و از نظر زمان پردازنده نیز بسیار اقتصادی تر است.

همانطور که گفتم تا وارد بحث میشم تازه میبینم چقدر بزرگ هست و بقیه خصوصیات direct 11 را در مطلب بعدی که در ادمه این مینوسم منتشر خواهم کرد.

برچسب ها: directx

٪ نظرات

  1. با سلام
    وب سایت بسیار پر محتوایی دارید
    و با تشکر از اینکه لینک وبلاگ من رو هم گذاشتین
    با ارزوی ساعاتی خوش برای شما
    پیش ما بیا

  2. آقا شما خیلی زحمت میکشی
    ما چه جوری باید تشکر کنیم؟؟

  3. عاطفه جان
    شما با همین نظراتتان بهترین تشکر را میکنید.

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

  5. دادا
    ما اینهمه سایت گیم داریم که توی گوگل search کنی میبینی.
    از من چه انتظاری داری

  6. عزیز دست کم بگو این عکسها مال کدوم بازیهاست. به خصوص دومی خیلی چشمم رو گرفته. 🙂

  7. عکس اولی crysis هست ولی دومی را نمیدونم. راجع به directx جستجو میکردم بهش رسیدم

  8. عجیبه که اینقد از ویستا طرفداری می کنید. من که یه هفته ای کار کردم اما پشیمون شدم و برگشتم به XP. الان نسخه پیش آزمایشی ویندوز ۷ رو نصب کردم. ازش راضیم. جالبه که ویندوز ۷ تو ۱۶ دقیقه رو سیستمم نصب شد.

  9. دوست عزیزم سعد جان
    من از ویستا طرفداری نمیکنم و فقط دارم آموزش مید.
    اگر شما با ویستا نتونستید کار کنید نمیشه گفت که تقصیر ویستا هست.
    در مورد ویندوز ۷ که نصب کردید باید بگم که اون نسخه در حال حاضر هسته اش ویستا هست و فقط چند قابلیت کلیدی اصلی را برای تست روی آن قرار دادند. من در مطالبم که درباره ویندوز ۷ نوشتم به این موضوع اشاره کردم. اون ویندوز ۷ نیست اون فعلا هسته اش ویستا هست تا زمانیکه نسخه اصلی آن ارائه شود. البته باز هم نسخه های آزمایشی دیگه هم فکر کنم از ویندوز ۷ منتشر بشه.

  10. […] خود direcx runtime هنوز تک رشته ای single-threaded است. من در مطلب “چرا directx 11 مهم است؟” درباره multithread توضیح دادم پس اینجا کلام دیگه کوتاه […]

  11. […] خود direcx runtime هنوز تک رشته ای single-threaded است. من در مطلب “چرا directx 11 مهم است؟” درباره multithread توضیح دادم پس اینجا کلام دیگه کوتاه […]

پیام بگذارید

ما را در شبکه های اجتماعی دنبال کنید

© تمامی حقوق برای علی مختاری محفوظ است.

تماس با من

میدان جمهوری اسلامی ، جنب بانک مسکن ، مجتمع اداری تجاری نگین

۰۳۱-۹۱۰۱۵۰۶۲ 

info@alimokhtari.name