مقایسه بهترین APIهای گرافیکی
امروزه، دنیای فناوریهای سهبعدی به چنان پیشرفت خیرهکنندهای دست یافته است که میتوان ادعا کرد، هیچ مفهومی نیست که تخیلات انسان توانایی تصور کردنش را داشته باشد، اما این فناوریها از عهده تصویرسازی آن برنیایند. ابزارهای مدلسازی سهبعدی به یاری انسان آمدهاند تا ایدههای شخصی ما را به الگوهایی کاربردی برای مصارف گسترده دیگر مانند سینما، پویانمایی (انیمیشن)، بازیهای ویدیویی و معماری تبدیل کنند. برای چنین اهدافی، نرمافزارهای بسیاری در دسترس هستند و اینکه مناسبترین ابزار کدام است، کاملا به سلیقه افراد بستگی دارد. بهعلاوه روزبهروز بر محبوبیت نرمافزارهای گرافیکی و رندرینگ سهبعدی افزوده میشود مخصوصا وقتی پای بازیهای ویدیویی در میان باشد و اینجا است که اهمیت API های گرافیکی مشخص میشود چراکه، API گرافیکی ابزاری است که بهصورت اختصاصی برای سادهسازی فرایند ساخت تصاویر سهبعدی طراحی شده است.
API گرافیکی چیست؟
رابط برنامهنویسی نرمافزار کاربردی یا Application Programming Interface که به اختصار به آن رابط برنامهنویسی گرافیکی یا API گرافیکی نیز گفته میشود ابزاری است که فرایند ساخت گرافیک را در تمامی بخشهای کامپیوتر، آسان میکند. امروزه استفاده از API برای سازندگان سختافزارهای گرافیک رایانهای، یک ضرورت اجتناب ناپذیر است؛ چراکه برنامهنویسها با وجود اینکه نیاز به استفاده مستقیم از سختافزارهای ویژهای مثل کارتهای گرافیک دارند، باید به این سختافزارها دسترسی مجازی هم داشته باشند.
اما پیش از آنکه به معرفی و مقایسه مطرحترین APIهای گرافیکی موجود بپردازیم، لازم است با مفهوم دیگری با عنوان lower-level graphics API، بیشتر آشنا شویم. شاید با ترجمه تحتلفظی lower-level این سوءتفاهم برای مخاطب ایجاد شود که چرا پیشرفتهترین و بهروزترین APIهای گرافیکی موجود، در دستهبندی lower-level یا سطح پایین قرار گرفتهاند؟ برای درک بهتر فلسفهی این طبقهبندی، تصویر زیر را مشاهده کنید.
- مستطیل سبز: بازی ویدیویی
- مستطیل قرمز: درایورها
- مستطیل زرد: موتور بازی
- نقطهچین: API گرافیکی
این تصویر، روند پیشرفت ابزارهای گرافیک رایانهای را طی سالیان گذشته نشان میدهد.
اولین ردیف مربوط است به دوران کنسولهای اولیه مانند آتاری و Commodore64 که گرافیکی بسیار ساده و ابتدایی داشتهاند و نرمافزار (مستطیل سبزرنگ) بهطور مستقیم با سختافزار گرافیکی در ارتباط بودهاست.
ردیف دوم نمایانگر این است که با گذشت زمان، هم سختافزارها و هم نرمافزارها، هردو پیچیدهتر شدهاند و سیستمهای عامل از دسترسی مستقیم آنها با یکدیگر جلوگیری میکنند چراکه، نیاز بوده تا نرمافزار، محدود به دستگاه خاصی نباشد و بتواند با طیف گستردهتری از سختافزارهای موجود در بازار، سازگاری داشته باشد. بههمین دلیل، استانداردهای جدیدی تعیین شدند و درایورها (مستطیل قرمز) پدید آمدند. API گرافیکی هم مانند رابطهایکاربری دیگر، وسیلهای برای برقراری ارتباط، استانداردسازی و ثبت عملکردهای نرمافزار است و درایورها این موارد را به دستوراتی که برای سختافزار قابل فهم باشد، ترجمه میکنند.
در ردیف سوم میبینیم که با پیچیدهتر شدن بازیها، دیگر امکان بازخوانی مستقیم API گرافیکی از کدهای منطقی بازی وجود نداشت و بههمین دلیل لایه دیگری با نام موتور بازی یا game engine (مستطیل زرد) ایجاد شد. وجود چنین لایهای از این جهت ضروری بوده است که تولید موضوعات گرافیکی با جزئیات زیاد (higher-level) مثل ماهیت (entity)، دارایی (asset)، جنس (material)، دوربین (camera) و نور (light) در بخش گرافیکی API، تنها با کمک بهکارگیری فرمانهایی با جزئیات کم (lower-level) مانند سایهزنی (shader)، بافت (texture) و شبکه توری (mesh) امکانپذیر است.
ردیف چهارم بیانگر شیوه کارکرد بازیهای مرسوم امروزی است. همانطور که مشاهده میکنید، با قویتر شدن بازیها، موتورهای بازی نیز پیچیدهتر و گرانقیمتتر شدهاند. بنابراین اکثر سازندگان بازی، ترجیح میدهند بهجای طراحی موتور بازی اختصاصی از موتورهای بازی موجود در بازار مثل Unity و Unreal استفاده کنند و تمرکز اصلی خود را بر طراحی بازی قرار دهند. تصویر نشان میدهد که درایورها نیز بزرگتر و پیچیدهتر شدهاند. درایورها با بازی تفاوت دارند و حاوی فایلهای سنگین گرافیک و موزیک نیستند. پس چه چیزی درون آنهاست؟ هزاران هزار کد. چراکه، باید APIهای گرافیکی (مثل DirectX 9, 10, 11, OpenGL) را بهکار بگیرند و کارتهای گرافیک یا GPU را مدیریت کنند.
ردیف پنجم اما نمایانگر نسل جدید APIهای گرافیکی است. همانطور که میبینید درایورها کمحجمتر و در عوض، موتورهای بازی بزرگتر و پیچیدهتر شدهاند. بنابراین API گرافیکی lower-level بهمعنای پایینتر بودن کیفیت یا ضعیفتر بودن آن نیست و به این معنا است که در این نسل جدید، تمام وظایف به ابزارهای خودکار مثل درایورها محول نمیشود و لایههای بالاتر (مثل GPU)، مسئولیت بیشتری در مدیریت و پردازش گرافیکی به عهده دارند و به همین دلیل، درایورها سادهتر و کوچکتر شدهاند.
حالا که با مفهوم APIگرافیکی low-level آشنا شدیم، بیایید با چند API گرافیکی مطرح و پیشرو بیشتر آشنا شویم.
۱. دایرکت ایکس ۱۲
DirectX، رابط گرافیکی پلتفرم مایکروسافت است. این API گرافیکی شناختهشده با هدف مدیریت وظایف مربوط به نرمافزارهای چندرسانهای (multimedia) و بهطور ویژه بهبود عملکرد بازی و ویدئو طراحی شد. در ابتدا کلیه زیرشاخههای این API گرافیکی با واژه Direct آغاز میشدند مانند Direct3D، DirectSound، DirectMusic، DirectDrawو... که سرانجام کل مجموعه باعنوان DirectX نامگذاری شد. بعدها مایکروسافت، کنسول بازی اختصاصی خود را تحت عنوان Xbox روانه بازار کرد که حرف X آن ریشه در همین DirectX دارد. اولین نسخه DirectX در سال ۲۰۰۲ و بانام DirectX 9 بههمراه ویندوز ۹۸ بهبازار آمد و جدیدترین نسخه آن یعنی DirectX 12 در سال ۲۰۱۴ رونمایی و در سال ۲۰۱۵ بههمراه ویندوز ۱۰ بهطور رسمی معرفی شد.
نام نسخه | شماره | تاریخ معرفی | توضیحات |
---|---|---|---|
DirectX 12 | 10.00.10240.16384 | جولای۲۰۱۵ | Windows 10, Xbox One |
DirectX 12 | 10.00.15063.0000 | مارس ۲۰۱۷ | Windows 10, Depth Bounds Testing and Programmable MSAA added |
DirectX 12 | 10.00.17763.0001 | اکتبر ۲۰۱۸ | Windows 10, DirectX Raytracing support added |
DirectX 12 | 10.00.18362.0116 | مه ۲۰۱۹ | Windows 10, Variable Rate Shading (VRS) support added |
DirectX 12 توسط یک ویژگی خاص بهنام آداپتور چندگانه پشتیبانی میشود و به سازندگان این امکان را میدهد تا بهطور همزمان از چند GPU روی یک سیستم استفاده کنند. این ویژگی (استفاده همزمان از چند GPU) پیش از این تحت انحصار دو محصول از NVIDIA و AMD با نامهای AMD CrossFireX و NVIDIA SLI بود.
DirectX 12 از تمامیGPUهای Fermi (و همینطور محصولات جدیدتر) شرکت انویدیا، چیپهای مبتنی بر GCN شرکت AMD و همینطور Hasswell و پردازندههای جدید اینتل پشتیبانی میکند.
سال ۲۰۱۴ و حین برگزاری همایش SIGGRAPH، شرکت اینتل ، ویدیویی جذاب از کمربند سیارکها در منظومه شمسی نمایش میداد. اینتل مدعی شد که برای ساخت این دموی گرافیکی که با کمک DirectX 12 تولید شده است، سرعت رندرینگ و مصرف برق CPU بهمیزان ۵۰ تا ۷۰ درصد نسبت به DirectX 11 بهبود پیدا کردهاست.
بازی ویدیویی Ashes of the Singularity اولین محصولی بود که DirectX 12 را بهکار گرفت و مایکروسافت بهتازگی DirectX 12 را برای ویندوز ۷ نیز معرفی کرد. بهدلیل تفاوتهای ذاتی کامپیوتر و Xbox ، امکان تبادل مستقیم کدهای DirectX 12 روی این دو پلتفرم وجود ندارد، با این وجود، کنسولهای Xbox مایکروسافت به این API گرافیکی مجهز است.
۲. OpenGL
Open Graphics Library که به اختصار بهآن OpenGL هم گفته میشود، یک رابط برنامهنویسی گرافیکی چندزبانه (cross-language) و چندسکویی (cross-platform) است که بهزبان برنامهنویسی C نوشته شده و از آن برای رندرینگ گرافیکی دوبعدی و سهبعدی استفاده میشود.
این API اولینبار سال ۱۹۹۱ توسط شرکت Silicon Graphics طراحی شد و در سال ۱۹۹۲ بهبازار آمد و کاربردگستردهای در زمینههای مختلف مانند نقشهکشی با کامپیوتر، واقعیت مجازی، تجسم علمی و اطلاعات، شبیهسازی پرواز و بازیهای ویدیویی داشته است. OpenGL از سال ۲۰۰۶ به بعد، توسط Khronos Group که یک کنسرسیوم غیرانتفاعی فناوری است، اداره میشود. جدیدترین نسخه این API که 4.6 OpenGL نام دارد در ۳۱ ژوئیه سال ۲۰۱۷ معرفی شد. در جدول زیر تاریخ معرفی و مشخصات ۷ نسخه آخر (نسخه ۴ به بعد) OpenGL را مشاهده میکنید.
نسخه | تاریخ معرفی | مشخصات |
---|---|---|
4.0 | مارس ۲۰۱۰ | GLSL 4.00, Tessellation on GPU, shaders with 64-bit precision |
4.1 | جولای۲۰۱۰ | GLSL 4.10, Developer-friendly debug outputs, compatibility with OpenGL ES 2.0 |
4.2 | اوت۲۰۱۱ | GLSL 4.20, Shaders with atomic counters, draw transform feedback instanced, shader packing, performance improvements |
4.3 | اوت۲۰۱۲ | GLSL 4.30, Compute shaders leveraging GPU parallelism, shader storage buffer objects, high-quality ETC2/EAC texture compression, increased memory security, a multi-application robustness extension, compatibility with OpenGL ES 3.0 |
4.4 | جولای۲۰۱۳ | GLSL 4.40, Buffer Placement Control, Efficient Asynchronous Queries, Shader Variable Layout, Efficient Multiple Object Binding, Streamlined Porting of Direct3D applications, Bindless Texture Extension, Sparse Texture Extension |
4.5 | اوت۲۰۱۴ | GLSL 4.50, Direct State Access (DSA), Flush Control, Robustness, OpenGL ES 3.1 API and shader compatibility, DX11 emulation features |
4.6 | جولای۲۰۱۷ | GLSL 4.60, More efficient geometry processing and shader execution, more information, no error context, polygon offset clamp, SPIR-V, anisotropic filterin |
۳.Vulkan
Vulkan یک API گرافیکی کمهزینه و چندسکویی است که کاربردهای گرافیکی قدرتمندی مانند بازیهای ویدیویی و رسانههای تعاملی را در تمامی پلتفرمها، هدف گرفتهاست. Vulkan نیز مانند سایر APIهای گرافیکی مثل DirectX، OpenGL و Metal ، قصد دارد بیشترین کارایی ممکن را از تعادل بین GPU و CPU به کاربران ارائه دهد. اما نقطه تمایز Vulkan این است که قادر به رندرکردن گرافیکهای دوبعدی است. بهعلاوه با وجود تقسیم کار بهتر بین CPUهای چندهستهای، در مقایسه با OpenGL و DirectX 11 ، مصرف برق پایینتری دارد.
در ابتدا بسیاری پیشبینی میکردند که Vulkan ادامهدهندهی مسیر OpenGL باشد. اما این پیشبینی درست نبود
زمانیکه برای اولینبار این API توسط Khronos Group (که مالک OpenGL نیز هست) معرفی شد، بسیاری Vulkan را نسل بعدی یا OpenGL آینده تصور میکردند اما با رونمایی از آن، این تصورات درست از آب درنیامدند. برای مشاهده تفاوتهای عملکرد این دو API گرافیکی به جدول زیر دقت کنید.
OpenGL | Vulkan |
---|---|
تنها یک ماشین global state دارد | مبتنی بر شیء است و فاقد global state |
state تنها به یک محتوا منحصر میشود | مفهوم تمامی stateها در بافر دستورها قرار گرفته است |
عملکردها فقط بهصورت ترتیبی انجام میشوند | قابلیت برنامهنویسی چندرشتهای دارد |
حافظه و همگامسازی GPU معمولا مخفی است | کنترل و مدیریت همگامسازی و حافظه مقدور است |
بررسی خطا بهصورت مداوم انجام میشود | درایورها حین اجرا، بررسی خطا انجام نمیدهند. در عوض برای سازندگان، یک لایه اعتبارسنجی در نظر گرفته شده است. |
بهمنظور استاندارد سازی و ارتقاء فناوری APIهای گرافیکی low-level در بنیادی مشترک بین Khronos و AMD، توافق شد که شرکت AMD اجزاء ساخت API گرافیکی اختصاصی خود یعنی Mantle را در اختیار Khronos قرار دهد و در حقیقت ساختVulkan از اجزاء Mantle الهام گرفته است. Vulkan اولینبار در سال ۲۰۱۶ رونمایی شد و جدیدترین ویرایش آن ، یعنی نسخه 1.1.125 بهتازگی و در تاریخ ۱۴ اکتبر ۲۰۱۹ به بازار آمد. این API کاملا توسط اندروید پشتیبانی میشود اما به دلیل حمایت اپل از API اختصاصی خود Metal ، امکان پشتیبانی رسمی از سیستمهای عامل IOS و Mac را ندارد. (البته کتابخانههای متنبازی در بازار موجود هستند که این مسئله را ممکن میکنند.)
جدول زیر سازگاری Vulkan با شناخته شدهترین محصولات گرافیکی را بررسی میکند.
نام شرکت | چیپ GPU | کارت گرافیک | اندروید | لینوکس | ویندوز |
---|---|---|---|---|---|
AMD | Navi 10 | Radeon RX 5000 series | × | √ | √ |
Vega 10 | Radeon Rx Vega series | × | √ | √ | |
Polaris 10, Polaris 11, Polaris 12 | Radeon Rx 400 series Radeon Rx 500 series | × | √ | √ | |
Tonga, Fiji, Carrizo | Radeon R9 Series and more | × | √ | √ | |
Bonaire, Hawaii, Kaveri, Kabini Temash, Mullins, Beema, Carrizo-L | Radeon HD 7790 and more, PlayStation 4, Xbox One | × | √ | √ | |
Oland, Cape Verde, Pitcairn, Tahiti | Radeon HD 77xx–7900 Series | × | × | × | |
Cayman, Trinity/Richland | Radeon HD 69xx Series, Radeon HD 7xxx–76xx Series | × | × | × | |
Cedar, Cypress, Juniper, Redwood, Palm, Sumo | Radeon HD 5000 Series, Radeon HD 6350, Radeon HD 64xx–68xx Series | × | × | × | |
R600, RV630, RV610, RV790, RV770, ... | Radeon HD 2000 Series, HD 3000, HD 4000 | × | × | × | |
Nvidia | TU10x, TU11x | GeForce 20 series, GeForce 16 series | × | × | × |
GV10x | Nvidia Titan V | × | √ | √ | |
GP10x | GeForce 10 series, Tegra X2 | × | √ | √ | |
GM10x, GM20x | GeForce GTX 750 Ti, GTX 750, GTX 860M, GeForce 900 series, Tegra X1 | √ | √ | √ | |
GK10x, GK110, GK208 | GeForce 600 series, GeForce 700 series, Tegra K1 | √ | √ | √ | |
GF10x, GF11x | GeForce 400 series, GeForce 500 series | × | × | × | |
G8x, G9x, GT20x, GT21x | GeForce 8 series, GeForce 9 series, GeForce 100 series, GeForce 200 series, GeForce 300 series | × | × | × | |
Intel | Core i3-/i5-/i7-8000, | √ | √ | √ | |
Core i3-/i5-/i7-7000, Pentium xyz, Celeron xyz | √ | √ | √ | ||
Core i3-/i5-/i7-6000, Core m3-/m5-/m7-6Yxx, Pentium G4xxx, Celeron G39xx | √ | √ | √ | ||
Core i3-/i5-/i7-6000, Core m3-/m5-/m7-6Yxx, Pentium G4xxx, Celeron G39xx | √ | √ | × | ||
Core i3-/i5-/i7-4000, Pentium G3xxx, Celeron G18xx | √ | √ | × | ||
Core i3-/i5-/i7-3000, Pentium G2xxx, Celeron G16xx | √ | √ | × | ||
Core i3-/i5-/i7-2000, Pentium Gxxx, Celeron Gxxx | × | × | × | ||
Core i3-/i5-/i7-xxx, Pentium G69xx, Celeron G1101 | × | × | × | ||
Imagination Technology | GE8200, GE8300 | √ | √ | √ | |
GE7400, GE7800, GT7200, GT7400, GT7600, GT7800, GT7900 | Apple A9, A9X, A10 Fusion, Helio X30 (MT6799) | √ | √ | √ | |
G6100, G6200, G6230, G6400, G6430, G6630, RK3368, G6050, G6060, G6100 (XE), G6110, GX6240, GX6250, GX6450, GX6650 | Apple A7, A8, A8X, MediaTek MT8173, MT8176, MediaTek MT6595M, MT6595T, MT6595M, MT6795, MT8135, Helio X10 (MT6795), LG H13, Atom Z3460, Z3480, Z3530, Z3560, Z3570, Z3580 | √ | √ | √ | |
SGX543, SGX544, SGX554 | Apple S1, A5, A5X, A6, A6X, NovaThor L8540, L8580, L9540, TI OMAP 4470, 5430, 5432, MediaTek MT5327, MT6589M, MT6589T, MT6589, MT8117, MT8121, MT8125, MT8389, Atom Z2460, Z2520, Z2560, Z2580, Z2760, Exynos 5410 | × | × | × | |
Qualcomm | Adreno 510, Adreno 530, Adreno 540,Adreno 512 | Snapdragon 430, 625, 650, 652, 660,820, 821, 835 | √ | √ | √ |
Adreno 418,Adreno 420,Adreno 430 | Snapdragon 415, 615, 616, 617, 805, 808, 810 | √ | √ | √ | |
Snapdragon 200, 208, 210, 212, 400, 410, 412, 600, 800, 801 | × | × | × | ||
ARM | Mali-G71, ... | Kirin 960, 970, Exynos 8895, MediaTek Helio P23 (MT6763T), Helio P30 | √ | √ | √ |
Mali-T860, Mali-T830, Mali-T880 | Exynos 8890, Exynos 7880, Exynos 7870, Kirin 950, 955, MediaTek MT6738, MT6750, Helio X20 (MT6797), X25 (MT6797T), P10 (MT6755), P20 (MT6757) | √ | √ | √ | |
Mali-T760, ... | Exynos 8890, Exynos 7880, Exynos 7870, Kirin 950, 955, MediaTek MT6738, MT6750, Helio X20 (MT6797) , X25 (MT6797T), P10 (MT6755), P20 (MT6757) | √ | √ | √ | |
Mali-T600 series, T720 | Exynos 8890, Exynos 7880, Exynos 7870, Kirin 950, 955, MediaTek MT6738, MT6750, Helio X20 (MT6797), X25 (MT6797T), P10 (MT6755), P20 (MT6757) | × | × | × |
۴.Mantle
Mantle یک API کم هزینه رندرینگ برای بازیهای ویدیویی سهبعدی است. AMD اولینبار در سال ۲۰۱۳ این APIگرافیکی را با مشارکت یک شرکت سازنده بازیهای ویدیویی بهنام DICE طراحی کرد تا رقیبی برای Direct3D و OpenGL در رایانههای خانگی باشد. هرچند Mantle از Xbox One و PlayStation 4 نیز پشتیبانی میکند. در سال ۲۰۱۵ توسعه اختصاصی Mantle تعلیق و در سال ۲۰۱۹ رسما متوقف شد و جای خود را به API گرافیکی Vulkan داد.
توسعه APIگرافیکی Mantle در سال ۲۰۱۹ متوقف شد و جای خود را به Vulkan داد.
یکی از قابلیتهای Mantle کاهش مواردی است که پردازنده شدیدا تحت فشار قرار میگیرد. طراحی این API بهگونهای است که به بازیها و نرمافزارها اجازه میدهد تا بهشکل بهینهتری از GPU استفاده کنند . Mantle با کمکردن هزینه اعتبارسنجی API و سنجش بهینهتر پردازندههای چندهستهای، در حقیقت گلوگاههای ایجاد شده در پردازنده را از بین میبرد.
Mantle از GPU و APUهای بازی زیر پشتیبانی میکند:
نوع محصول | نام محصول | سری | توضیحات |
---|---|---|---|
GPU | Radeon | HD 7000 | - |
Radeon | HD 8000 | - | |
AMD Radeon | RX 200 | R7 و R9 | |
APU | AMD A10 | 7000 | all Steamroller-based "Kaveri" |
AMD A8 | 7000 | ||
AMD E1 | 2000 | all Jaguar-based "Kabini" and "Temash" | |
AMD E2 | 3000 | ||
AMD A4 | 1200 | ||
AMD A4 | 1350 | ||
AMD A4 | 5000 | ||
AMD A6 | 1450 | ||
AMD A6 | 5200 | ||
AMD sempron | 2650 | ||
AMD sempron | 3850 | ||
AMD Athlon | 5150 | ||
AMD Athlon | 5350 | ||
AMD E1 | Micro-6200T | all Puma-based "Beema" and "Mullins" | |
AMD A4 | Micro-6400T | ||
AMD A10 | Micro-6700T | ||
AMD E1 | 6010 | ||
AMD E2 | 6110 | ||
AMD A4 | 6210 | ||
AMD A6 | 6310 |
۵.METAL
این API گرافیکی ، یک رابطبرنامهنویسی گرافیکی کمهزینه و low-level تحت لیسانس شرکت اپل است که اولینبار در IOS 8 بهکار گرفته شد. عملکرد Metal را درحقیقت میتوان با ترکیب دو رابطبرنامهنویسی OpenGL و OpenCL با یکدیگر در یک API گرافیکی ، مشابه دانست. هدف از طراحی این API شبیهسازی APIهای سایر پلتفرمها مثل Vulkan و DirectX 12 برای سیستمهای عامل IOS، Mac و tvOS بوده است. Metal یک APIگرافیکی شیءگرا است که با زبانهای برنامهنویسی سوئیفت و Objective-C اجرا میشود اما مبتنی بر زبان ++C نوشته شده است. اولینبار اپل در چیپ A7 از این API استفاده کرد و از سال ۲۰۱۴، Metal در تمامی دستگاههای iOS و از سال ۲۰۱۵ روی سیستمعامل Mac نیز نصب شده است. در سال ۲۰۱۷ و در همایش WWDC، اپل دومین نسخه Metal را معرفی کرد که از سیستمهای عامل macOS High Sierra، iOS 11 و tvOS 11 پشتیبانی میکند. در حقیقت Metal 2 در مقایسه با Metal، رابطگرافیکی متفاوتی محسوب نمیشود و از همان سختافزار بهره میبرد اما کارایی بیشتر و بهینهتری دارد.
Metal در مقایسه با OpenGL به دلایل مختلف، کارایی بهتری دارد. مهمترین این دلایل عبارتاند از:
- محاسبه اولیه سایهسازیها (Shader) و اعتبار وضعیت از پیش تأیید شده
- همگامسازی آشکار بین GPU و CPU
- فضای حافظه اشتراکی بین GPU و CPU
- هزینههای کمتر درایور
- بهینهسازی قابلیت چند رشتهای بودن پردازندهها؛بهنحوی که هر رشته از پردازنده بهطور مجزا میتواند به GPU دستور ارسال کند.
مواردی که ذکر شد در حقیقت، میزان فعالیت پردازنده، برای انجام موفق دستورها اجرایی GPU را بهطرز چشمگیری کاهش میدهد و این به افزایش کارایی آن منجر خواهد شد چراکه با کاهش میزان فعالیت، پردازنده میتواند سایر وظایف خود را بهتر و سریعتر انجام دهد.
نظرات