مقایسه بهترین API‌های گرافیکی

دوشنبه ۲۷ آبان ۱۳۹۸ - ۰۹:۳۰
مطالعه 13 دقیقه
API گرافیکی یا رابط برنامه‌نویسی گرافیکی، ابزاری ضروری برای تعامل بین نرم‌افزار‌، درایور‌ها و سخت‌افزار گرافیکی است. با زومیت همراه باشید تا در مورد مطرح‌ترین API‌های گرافیکی، بیشتر بدانیم.
تبلیغات

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

رابط‌ برنامه‌نویسی نرم‌افزار کاربردی یا Application Programming Interface که به اختصار به آن رابط برنامه‌نویسی گرافیکی یا API گرافیکی نیز گفته‌ می‌شود ابزاری است که فرایند ساخت گرافیک را در تمامی بخش‌های کامپیوتر، آسان می‌کند. امروزه استفاده از API برای سازندگان سخت‌افزار‌های گرافیک رایانه‌ای، یک ضرورت اجتناب ناپذیر است؛ چرا‌که برنامه‌نویس‌ها با وجود اینکه نیاز به استفاده مستقیم از سخت‌افزار‌های ویژه‌ای مثل کارت‌های گرافیک دارند، باید به این سخت‌افزار‌ها دسترسی مجازی هم داشته باشند.

اما پیش از آن‌که به معرفی و مقایسه مطرح‌ترین APIهای گرافیکی موجود بپردازیم، لازم است با مفهوم دیگری با عنوان lower-level graphics API، بیشتر آشنا شویم. شاید با ترجمه تحت‌لفظی lower-level این سوء‌تفاهم برای مخاطب ایجاد شود که چرا پیشرفته‌ترین و به‌روز‌ترین API‌‌های گرافیکی موجود، در دسته‌بندی lower-level یا سطح پایین قرار گرفته‌اند؟ برای درک بهتر فلسفه‌ی این طبقه‌بندی، تصویر زیر را مشاهده کنید.

  • مستطیل سبز: بازی ویدیویی
  • مستطیل قرمز: درایور‌ها
  • مستطیل زرد: موتور بازی
  • نقطه‌چین: API گرافیکی
مقایسه 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 گرافیکی مطرح و پیشرو بیشتر آشنا شویم.

کپی لینک

۱. دایرکت ایکس ۱۲

مقایسه 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

مقایسه APIهای گرافیکی

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

مقایسه APIهای گرافیکی

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

مقایسه APIهای گرافیکی

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های گرافیکی

این 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 را به‌طرز چشمگیری کاهش می‌دهد و این به افزایش کارایی آن منجر خواهد شد چرا‌که با کاهش میزان فعالیت، پردازنده می‌تواند سایر وظایف خود را بهتر و سریع‌تر انجام دهد.

مقاله رو دوست داشتی؟
نظرت چیه؟
داغ‌ترین مطالب روز
تبلیغات

نظرات