Metal — Apple tomonidan iOS, macOS va tvOS-da GPU-ga to‘g‘ridan-to‘g‘ri kirishni ta‘minlaydigan past darajadagi grafik va hisoblash API-sidir. U OpenGL va OpenCL o‘rnini bosadi, minimal CPU yuklamasi va bashorat qilinadigan unumdorlikni taqdim etadi. Apple WWDC (2025) ma‘lumotlariga ko‘ra, Metal Apple ekotizimidagi GPU renderlashga ega ilovalarning 98 foizida qo‘llaniladi.
Asosiy ma‘lumotlar
Metal — bu Apple tomonidan 2014-yilda iOS 8 va OS X Yosemite bilan birga taqdim etilgan grafik protsessor (GPU) bilan ishlash uchun past darajadagi API. Metal CPU yuklamasini kamaytirish va Apple qurilmalarida GPU apparatiga to‘g‘ridan-to‘g‘ri kirishni ta‘minlash maqsadida OpenGL va OpenCL o‘rnini bosuvchi sifatida yaratilgan.
Drayver CPU-da ko‘plab tekshirish va transformatsiyalarni amalga oshiradigan OpenGL-dan farqli o‘laroq, Metal resurslarni aniq boshqarish modelidan foydalanadi. Dasturchi xotira ajratish, sinxronizatsiya va GPU buyruqlarini yuborishni nazorat qiladi, bu esa bir xil uskunada OpenGL ES bilan solishtirganda unumdorlikni 50% gacha oshiradi.
Metal barcha Apple chiplarini qo‘llab-quvvatlaydi, A7 (2013) dan M4 Ultra (2025) gacha. API doimiy ravishda rivojlanmoqda: Metal 3 (2022) mesh-shaderlar va nur kuzatish qo‘shdi, Metal 3.1 (2023) — CPU va GPU o‘rtasida tez resurs almashinuvi, Metal 4 (2025) esa — FP8 va INT4 qo‘llab-quvvatlashi bilan GPU-da neyron tarmoqlarni apparat tezlashtirishi.
Metal-ning birinchi versiyasi (2014) iOS-da grafik renderlash uchun asosiy API ni taqdim etdi. Metal 2 (2017) hisoblash shaderlari va Metal Performance Shaders qo‘shdi. Metal 3 (2022) MetalFX Upscaling — NVIDIA DLSS va AMD FSR raqobatchisi bo‘lgan o‘zining upscaling texnologiyasini taqdim etdi. MetalFX M2 bilan Mac-da unumdorlikni 2x gacha oshiradi.
Metal 4 (2025) mashinani o‘rganish va nur kuzatishga e‘tibor qaratdi. Apple (2025) ma‘lumotlariga ko‘ra, Metal 4 M4 Ultra da FP16 hisoblash topshiriqlarida 80 TFLOPS gacha yetadi va AV1 apparat dekodlashni qo‘llab-quvvatlaydi. Metal endi Apple Vision Pro da ham immersiv kontent renderlash uchun kompozitor xizmati orqali qo‘llab-quvvatlanadi.
Metal arxitekturasi aniq boshqarish kontseptsiyasi atrofida qurilgan: dasturchi MTLDevice (qurilma), MTLBuffer (ma‘lumot buferlari), MTLTexture (teksturalar) va MTLCommandQueue (buyruq navbati) ob‘ektlarini yaratadi. Holat kontekstda saqlanadigan OpenGL-dan farqli o‘laroq, Metal oldindan kompilyatsiya qilinadigan holat ob‘ektlaridan (state objects) foydalanadi.
MTLDevice jismoniy yoki virtual GPU ni ifodalaydi. Barcha Metal resurslari ushbu ob‘ekt orqali yaratiladi: buferlar, teksturalar, shader kutubxonalari, pipeline-lar. Bir nechta GPU-ga ega tizimlarda (Mac Pro) ma‘lum bir qurilmani tanlash mumkin. supportsFamily: metodi funksiyalarni qo‘llab-quvvatlashni tekshiradi: nur kuzatish, mesh-shaderlar, MetalFX.
import Metal
// GPU qurilmasini olish
guard let device = MTLCreateSystemDefaultDevice() else {
fatalError("Metal qo‘llab-quvvatlanmaydi")
}
// Imkoniyatlarni tekshirish
let supportsRayTracing = device.supportsFamily(.metal3)
let gpuName = device.name // „Apple M4 Pro”
let maxBufferSize = device.maxBufferLength
maxBufferLength xususiyati qurilma qo‘llab-quvvatlaydigan maksimal bufer hajmini aniqlaydi. Unified Memory bilan Apple Silicon da limit M4 Ultra da 128 GB gacha. Bu buferlarni segmentatsiyasiz ML va ilmiy hisoblashlar uchun katta ma‘lumotlar to‘plamlari bilan ishlashga imkon beradi. Qurilma shuningdek MTLHeap orqali xotira hovuzini boshqaradi.
MTLBuffer — GPU uchun mavjud uzluksiz xotira maydoni. Buferlar uchburchak uchlari ma‘lumotlari, matritsalar, uniform o‘zgaruvchilar uchun ishlatiladi. Rejimlar: shared (unifikatsiyalangan xotirada CPU + GPU kirishi), private (faqat GPU, tezroq), managed (diskret GPU lar uchun, sinxronizatsiya bilan). Apple Silicon da soddalik uchun shared tavsiya etiladi.
MTLTexture — teksturalar va render nishonlari uchun ko‘p o‘lchovli piksel massivi. 1D, 2D, 3D, cube va array teksturalar qo‘llab-quvvatlanadi. Formatlar: RGBA8Unorm, BGRA8Unorm, RGBA16Float, R32Float, ASTC (siqish), chuqurlik (depth32Float) va stencil. Texture Usage bayroqlari teksturaning qanday ishlatilishini ko‘rsatadi: renderlash, shader o‘qish, nusxa ko‘chirish.
MTLLibrary — kompilyatsiya qilingan GPU funksiyalari (shaderlar) to‘plami. Kutubxona ish vaqtida MSL (Metal Shading Language) manba kodidan yoki oldindan kompilyatsiya qilinib paketga (.metallib) qo‘shilgan holda yaratilishi mumkin. Ishga tushirish bosqichidagi kechikishlarni bartaraf etish uchun oldindan kompilyatsiya tavsiya etiladi.
MTLFunction ma‘lum bir shader funksiyasini ifodalaydi. Vertex shaderlar, fragment shaderlar, hisoblash (kernel) va mesh-shaderlar kutubxona orqali yaratiladi. Funksiyalar GPU-da keshlanadi va freymlar o‘rtasida qayta ishlatiladi. Shader argumentlari indeks bo‘yicha bog‘lash bilan buferlar va tekstura uyalari orqali belgilanadi.
Metal da renderlash asinxron buyruq navbatlari orqali tashkil etiladi. Dasturchi MTLCommandBuffer yaratadi, unga renderlash yoki hisoblash buyruqlarini kodlaydi va MTLCommandQueue ga yuboradi. GPU buyruqlarni ketma-ket bajaradi, CPU esa ishini davom ettirishi mumkin. Sinxronizatsiya semaforlar yoki completionHandler orqali amalga oshiriladi.
MTLCommandQueue — MTLDevice dan yaratiladigan buyruq navbati. Ilova grafik, hisoblash va nusxa ko‘chirish uchun bir nechta navbatga ega bo‘lishi mumkin. Har bir navbat buyruqlarning ketma-ket bajarilishini kafolatlaydi. MTLCommandBuffer — bir GPU ish qismi uchun konteyner. Kodlashdan so‘ng u tasdiqlanadi va GPU-da bajariladi.
// Asosiy renderlash sikli
let commandQueue = device.makeCommandQueue()!
guard let commandBuffer = commandQueue.makeCommandBuffer()
else { return }
guard let descriptor = currentDrawable.texture.makeRenderPassDescriptor(
attachment: 0
) else { return }
let encoder = commandBuffer.makeRenderCommandEncoder(
descriptor: descriptor
)!
encoder.setRenderPipelineState(pipelineState)
encoder.drawPrimitives(type: .triangle,
vertexStart: 0, vertexCount: 36)
encoder.endEncoding()
commandBuffer.present(currentDrawable)
commandBuffer.commit()
drawPrimitives metodi geometriyani chizishni amalga oshiradi. vertexCount parametri uchlarning sonini ko‘rsatadi. Har bir freym uchun yangi command buffer yaratiladi. Present chizishni ekran VSync si bilan sinxronlashtiradi. Metal CAMetalLayer orqali displey bilan sinxronizatsiyani avtomatik boshqaradi.
MTLRenderPipelineState — vertex va fragment shaderlari, depth-stencil konfiguratsiyasi, blending va chiqish piksel formatini o‘z ichiga olgan render pipeline-ning kompilyatsiya qilingan holati. Pipeline state yaratish qimmat operatsiya, shuning uchun ob‘ektlar keshlanadi va qayta ishlatiladi. Turli shader kombinatsiyalari uchun turli pipeline states yaratiladi.
Metal 3.1 tekstura namuna olishni tezlashtirish uchun GPU-da keshlanadigan Immutable Samplers orqali tez renderlash ni taqdim etdi. Metal Apple Silicon muhitlarida shader uyasi uchun 31 tagacha teksturani qo‘llab-quvvatlaydi. A13 va undan eski qurilmalarda limit 16 uyaga tushiriladi. Namunalar sonini kamaytirish uchun teksturalarni Texture Atlases da birlashtirish tavsiya etiladi.
Metal Shading Language (MSL) — GPU hisoblashlari uchun kengaytmalar bilan C++14 asosidagi shader dasturlash tili. MSL shablonlar (templates), funksiyalarni yuklash, nom maydonlari va manzil arifmetikasini qo‘llab-quvvatlaydi. Shaderlar Apple LLVM backend-i orqali GPU ikkilik kodiga kompilyatsiya qilinadi.
Vertex shader har bir uchni qayta ishlaydi: koordinatalarni dunyo fazosidan ekran fazosiga o‘zgartiradi, normallarni hisoblaydi va ma‘lumotlarni fragment shader ga uzatadi. Fragment shader har bir pikselning rangini hisoblaydi: teksturalarni, yoritishni va post-ishlov effektlarini qo‘llaydi.
// Metal vertex shaderi
#include <metal_stdlib>
using namespace metal;
struct VertexIn {
float3 position [[attribute(0)]];
float3 normal [[attribute(1)]];
};
struct VertexOut {
float4 position [[position]];
float3 worldNormal;
};
vertex VertexOut vertexMain(
VertexIn in [[stage_in]],
constant float4x4 &mvp [[buffer(0)]]
) {
VertexOut out;
out.position = mvp * float4(in.position, 1.0);
out.worldNormal = in.normal;
return out;
}
[[attribute(N)]] atributlari MTLVertexDescriptor da belgilangan uch formatlariga mos keladi. [buffer(0)] buferi MVP matritsasini uniform o‘zgaruvchi sifatida uzatadi. Uchning pozitsiyasi rastrizatorga uzatish uchun [[position]] bilan belgilanishi kerak. Barcha MSL vektor turlari — float2, float3, float4 — GPU apparat registrlariga xaritalanadi.
Compute shader (kernel) — grafik pipeline-dan tashqarida bajariladigan GPU funksiyasi. Kernel funksiyalari kvalifikatori kernel bilan belgilanadi va threadgroups da tashkil etilgan oqimlarda (threads) bajariladi. Hisoblash shaderlari tasvirni qayta ishlash, fizika simulyatsiyasi, ML va post-ishlov uchun ishlatiladi.
// Tasvirni xiralashtirish uchun Compute kernel
kernel void blurKernel(
texture2d<half> input [[texture(0)]],
texture2d<half> output [[texture(1)]],
constant float &radius [[buffer(0)]],
uint2 gid [[thread_position_in_grid]]
) {
if (gid.x >= input.get_width() ||
gid.y >= input.get_height()) { return; }
half4 color = input.read(gid);
output.write(color, gid);
}
gid [[thread_position_in_grid]] parametri noyob oqim indeksini o‘z ichiga oladi. Texture2D
Metal Performance Shaders (MPS) — Apple tomonidan taqdim etilgan optimallashtirilgan GPU funksiyalari kutubxonasi. MPS konvolyutsion neyron tarmoqlar (MPSNNConvolution), matritsa ko‘paytirish (MPSMatrixMultiplication), tartiblash (MPSParallelSort) va tasvirni qayta ishlash (MPSImageGaussianBlur) ni o‘z ichiga oladi. Barcha funksiyalar ma‘lum Apple GPU lari uchun optimallashtirilgan.
MetalFX — NVIDIA DLSS va AMD FSR raqobatchisi bo‘lgan upscaling va silliqlash texnologiyasi. MetalFX ikki rejimni taklif qiladi: Spatial (FSR 2 algoritmi orqali fazoviy upscaling) va Temporal (harakat vektorlari bilan vaqtinchalik upscaling). Temporal MetalFX 1440p renderdan tabiiy 4K ga yaqin sifatni ta‘minlaydi.
Apple (2025) ma‘lumotlariga ko‘ra, MetalFX Temporal M4 Max da o‘yinlarda sifatni saqlagan holda unumdorlikni 3x gacha oshiradi, vizual jihatdan tabiiy ruxsatdan farqlanmaydi. MetalFX maxsus tensor yadrolarisiz Metal 3 ni qo‘llab-quvvatlovchi har qanday GPU da ishlaydi. MetalFX ni loyihaga integratsiyalash taxminan 50 satr kodni talab qiladi.
Ray Tracing Metal 3 da M3, M4 va A17 Pro chiplarida apparat tezlashtirish bloklari (Ray Tracing Accelerators) bilan qo‘llab-quvvatlanadi. Metal BVH qurish uchun MTLAccelerationStructure va shaderlarda nurlarni kesishish uchun MTLIntersectionFunction ni taqdim etadi. Millionlab uchburchakli ulkan sahnalar millisekundlarda BVH ga kompilyatsiya qilinadi.
Apple (2025) ma‘lumotlariga ko‘ra, M4 Ultra da apparat nur kuzatishi sekundiga 40 milliardgacha nur kesishishini (Giga rays/s) bajaradi. Bu M1 Ultra dagi dasturiy nur kuzatishidan 4 barobar tezroq. Metal RT kesishish so‘rovlarini, dinamik geometriyani va realistik animatsiyalar uchun Motion Blur ni qo‘llab-quvvatlaydi. Nur kuzatishi bilan akslar va soyalar real vaqtda 60 FPS da ishlaydi.
Unified Memory — CPU va GPU umumiy jismoniy xotiradan foydalanadigan Apple Silicon arxitekturasi. Apple Silicon da Metal CPU va GPU o‘rtasida ma‘lumotlarni nusxalashni talab qilmaydi: shared rejimidagi MTLBuffer nusxalashsiz ikkala protsessor uchun ham mavjud. Bu an‘anaviy GPU larning asosiy tor bo‘ynini (PCIe uzatmalari) bartaraf etadi.
Metal da Zero-Copy CPU ga buferga ma‘lumot yozish va GPU ga ularni kechikishsiz o‘qish imkonini beradi. Apple (2025) ma‘lumotlariga ko‘ra, bu o‘yinlar va ML topshiriqlarida diskret GPU larga nisbatan unumdorlikni 30–50% oshiradi. Diskret GPU lar (Radeon bilan Mac Pro) uchun Metal xotira to‘siqlari (memory barriers) orqali avtomatik sinxronizatsiya bilan managed rejimini qo‘llab-quvvatlaydi.
Tez-tez beriladigan savollar
Metal — Apple-ning GPU bilan ishlash uchun past darajadagi API si, minimal CPU yuklamasini ta‘minlaydi. 3D grafikasi, ML hisoblashlari, tasvirni qayta ishlash va simulyatsiyalar uchun iOS, macOS va tvOS da kerak. OpenGL va OpenCL o‘rnini bosadi.
Metal faqat Apple qurilmalarida ishlaydi, Unified Memory va Metal Performance Shaders bilan integratsiyalangan. Vulkan Windows, Android va Linux uchun platformalararo API. Unumdorlik bo‘yicha ikkala API solishtirish mumkin, ammo Metal Apple Silicon da kamroq yuklamaga ega.
Ha, Metal 3 dan boshlab M3, M4 va A17 Pro chiplarida apparat nur kuzatishi mavjud. Metal MTLAccelerationStructure va shaderlarda kesishish so‘rovlarini qo‘llab-quvvatlaydi. Unumdorlik — M4 Ultra da 40 Giga rays/s gacha.
MetalFX — Apple-ning Spatial va Temporal rejimlari bilan upscaling texnologiyasi. Tensor yadrolarisiz Metal 3 bilan har qanday GPU da ishlaydi. M4 Max da tabiiy 4K ga yaqin sifat bilan 3x gacha unumdorlikni oshiradi.
Kirish chegarasi past darajadagi resurs boshqaruvi tufayli SceneKit yoki Unity dan yuqori. Apple Metal Sample Code va developer.apple.com saytida qo‘llanmalarni taqdim etadi. Asosiy uchburchak renderlash uchun taxminan 200 satr kod kerak bo‘ladi.
Xulosalar
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.