Metal, Apple का एक निम्न-स्तरीय ग्राफिक्स और कंप्यूट API है जो iOS, macOS और tvOS पर GPU तक सीधी पहुँच प्रदान करता है। यह OpenGL और OpenCL को बदलता है, जिसमें न्यूनतम CPU ओवरहेड और पूर्वानुमानित प्रदर्शन होता है। Apple WWDC (2025) के अनुसार, Metal का उपयोग Apple इकोसिस्टम में GPU रेंडरिंग वाले 98% ऐप्लिकेशन में किया जाता है।
मुख्य बिंदु
Metal एक निम्न-स्तरीय API है जो ग्राफिक्स प्रोसेसिंग यूनिट (GPU) के साथ काम करने के लिए है, जिसे Apple ने 2014 में iOS 8 और OS X Yosemite के साथ पेश किया था। Metal को OpenGL और OpenCL के प्रतिस्थापन के रूप में बनाया गया था जिसका उद्देश्य CPU ओवरहेड को कम करना और Apple उपकरणों पर GPU हार्डवेयर तक अधिक सीधी पहुँच प्रदान करना है।
OpenGL के विपरीत, जहाँ ड्राइवर CPU पर कई जाँच और रूपांतरण करता है, Metal स्पष्ट संसाधन प्रबंधन मॉडल का उपयोग करता है। डेवलपर मेमोरी आवंटन, सिंक्रोनाइज़ेशन और GPU कमांड सबमिशन को नियंत्रित करता है, जो समान हार्डवेयर पर OpenGL ES की तुलना में 50% तक प्रदर्शन सुधार प्रदान करता है।
Metal A7 (2013) से M4 Ultra (2025) तक सभी Apple चिप्स को सपोर्ट करता है। API लगातार विकसित हो रहा है: Metal 3 (2022) ने mesh शेडर्स और रे ट्रेसिंग सपोर्ट जोड़ा, Metal 3.1 (2023) ने CPU और GPU के बीच तेज़ संसाधन साझाकरण, और Metal 4 (2025) ने FP8 और INT4 सपोर्ट के साथ GPU पर न्यूरल नेटवर्क का हार्डवेयर त्वरण जोड़ा।
Metal का पहला संस्करण (2014) iOS पर ग्राफिक्स रेंडरिंग के लिए बुनियादी API प्रदान करता था। Metal 2 (2017) ने कंप्यूट शेडर्स और Metal Performance Shaders जोड़े। Metal 3 (2022) ने MetalFX Upscaling पेश किया — गेम्स के लिए Apple का अपना अपस्केलिंग, जो NVIDIA DLSS और AMD FSR का प्रतिस्पर्धी है। MetalFX M2 वाले Mac पर 2x तक प्रदर्शन सुधार प्रदान करता है।
Metal 4 (2025) ने मशीन लर्निंग और रे ट्रेसिंग पर ध्यान केंद्रित किया। Apple (2025) के अनुसार, M4 Ultra पर Metal 4 FP16 पर कंप्यूट कार्यों में 80 TFLOPS तक प्रदर्शन करता है और हार्डवेयर AV1 डिकोडिंग सपोर्ट करता है। Metal अब Apple Vision Pro पर इमर्सिव कंटेंट रेंडर करने के लिए कंपोज़िटर सेवा के माध्यम से भी समर्थित है।
Metal आर्किटेक्चर स्पष्ट प्रबंधन की अवधारणा पर बनाया गया है: डेवलपर MTLDevice ऑब्जेक्ट (डिवाइस), MTLBuffer (डेटा बफ़र्स), MTLTexture (टेक्सचर) और MTLCommandQueue (कमांड क्यू) बनाता है। OpenGL के विपरीत, जहाँ स्थिति कॉन्टेक्स्ट में संग्रहीत होती है, Metal स्टेट ऑब्जेक्ट का उपयोग करता है जो पहले से कम्पाइल किए जाते हैं।
MTLDevice एक भौतिक या वर्चुअल GPU का प्रतिनिधित्व करता है। सभी Metal संसाधन इस ऑब्जेक्ट के माध्यम से बनाए जाते हैं: बफ़र्स, टेक्सचर, शेडर लाइब्रेरीज़, पाइपलाइन। कई GPU वाले सिस्टम (Mac Pro) पर एक विशिष्ट डिवाइस चुना जा सकता है। supportsFamily: विधि फ़ीचर सपोर्ट की जाँच करती है: रे ट्रेसिंग, mesh शेडर्स, MetalFX।
import Metal
// GPU डिवाइस प्राप्त करना
guard let device = MTLCreateSystemDefaultDevice() else {
fatalError("Metal समर्थित नहीं है")
}
// क्षमताओं की जाँच करना
let supportsRayTracing = device.supportsFamily(.metal3)
let gpuName = device.name // "Apple M4 Pro"
let maxBufferSize = device.maxBufferLength
maxBufferLength प्रॉपर्टी डिवाइस द्वारा समर्थित अधिकतम बफ़र आकार निर्धारित करती है। Apple Silicon पर Unified Memory के साथ सीमा 128 GB तक है (M4 Ultra पर)। यह बफ़र सेगमेंटेशन के बिना ML और वैज्ञानिक कंप्यूटिंग के लिए बड़े डेटासेट के साथ काम करने की अनुमति देता है। डिवाइस MTLHeap के माध्यम से मेमोरी पूल का भी प्रबंधन करता है।
MTLBuffer — GPU द्वारा सुलभ एक सन्निहित मेमोरी क्षेत्र। बफ़र्स का उपयोग वर्टेक्स डेटा, मैट्रिसेज़, uniform वेरिएबल्स के लिए किया जाता है। मोड: shared (यूनिफाइड मेमोरी पर CPU + GPU एक्सेस), private (केवल GPU, तेज़), managed (डिस्क्रीट GPU के लिए, सिंक्रोनाइज़ेशन के साथ)। Apple Silicon पर सरलता के लिए shared मोड अनुशंसित है।
MTLTexture — टेक्सचर और रेंडर टार्गेट के लिए पिक्सल का एक बहु-आयामी ऐरे। 1D, 2D, 3D, cube और array टेक्सचर सपोर्ट करता है। फ़ॉर्मेट: RGBA8Unorm, BGRA8Unorm, RGBA16Float, R32Float, ASTC (संपीड़ित), डेप्थ (depth32Float) और स्टेंसिल। Texture Usage फ़्लैग इंगित करते हैं कि टेक्सचर का उपयोग कैसे किया जाएगा: रेंडरिंग, शेडर रीडिंग, कॉपी करना।
MTLLibrary — कम्पाइल्ड GPU फ़ंक्शन (शेडर्स) का संग्रह। एक लाइब्रेरी रनटाइम पर MSL (Metal Shading Language) स्रोत कोड से बनाई जा सकती है या पहले से कम्पाइल करके बंडल (.metallib) में शामिल की जा सकती है। इनिशियलाइज़ेशन विलंब को खत्म करने के लिए प्री-कम्पाइलेशन अनुशंसित है।
MTLFunction एक विशिष्ट शेडर फ़ंक्शन का प्रतिनिधित्व करता है। वर्टेक्स शेडर्स, फ़्रैगमेंट शेडर्स, कंप्यूट केर्नल और mesh शेडर्स लाइब्रेरी के माध्यम से बनाए जाते हैं। फ़ंक्शन GPU पर कैश किए जाते हैं और फ़्रेम के बीच पुनः उपयोग किए जाते हैं। शेडर आर्गुमेंट इंडेक्स-आधारित बाइंडिंग के साथ बफ़र्स और टेक्सचर स्लॉट के माध्यम से पास किए जाते हैं।
Metal में रेंडरिंग एसिंक्रोनस कमांड क्यू के माध्यम से आयोजित की जाती है। डेवलपर MTLCommandBuffer बनाता है, उसमें रेंडरिंग या कंप्यूट कमांड एनकोड करता है और MTLCommandQueue में सबमिट करता है। GPU कमांड को क्रमिक रूप से निष्पादित करता है जबकि CPU काम करना जारी रख सकता है। सिंक्रोनाइज़ेशन सेमाफ़ोर या completionHandler के माध्यम से होता है।
MTLCommandQueue — MTLDevice से बनाई गई एक कमांड क्यू। एक ऐप्लिकेशन में ग्राफिक्स, कंप्यूट और कॉपी संचालन के लिए कई क्यू हो सकती हैं। प्रत्येक क्यू कमांड के क्रमिक निष्पादन की गारंटी देती है। MTLCommandBuffer — GPU कार्य के एक बैच के लिए कंटेनर। एनकोडिंग के बाद, इसे कमिट किया जाता है और GPU पर निष्पादित किया जाता है।
// मुख्य रेंडर लूप
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 विधि ज्यामिति रेंडरिंग निष्पादित करती है। vertexCount पैरामीटर वर्टेक्स की संख्या निर्दिष्ट करता है। प्रत्येक फ़्रेम के लिए एक नया कमांड बफ़र बनाया जाता है। Present रेंडरिंग को डिस्प्ले के VSync के साथ सिंक्रोनाइज़ करता है। Metal CAMetalLayer के माध्यम से स्वचालित रूप से डिस्प्ले सिंक्रोनाइज़ेशन प्रबंधित करता है।
MTLRenderPipelineState — एक कम्पाइल्ड रेंडरिंग पाइपलाइन स्थिति, जिसमें वर्टेक्स और फ़्रैगमेंट शेडर्स, डेप्थ-स्टेंसिल कॉन्फ़िगरेशन, ब्लेंडिंग और आउटपुट पिक्सल फ़ॉर्मेट शामिल है। पाइपलाइन स्थिति बनाना एक महँगा ऑपरेशन है, इसलिए ऑब्जेक्ट कैश किए जाते हैं और पुनः उपयोग किए जाते हैं। विभिन्न शेडर संयोजनों के लिए अलग-अलग पाइपलाइन स्थितियाँ बनाई जाती हैं।
Metal 3.1 ने Immutable Samplers के माध्यम से तेज़ रेंडरिंग पेश की जो टेक्सचर सैंपलिंग को गति देने के लिए GPU पर कैश की जाती हैं। Metal Apple Silicon पर प्रति शेडर स्लॉट 31 टेक्सचर तक सपोर्ट करता है। A13 और उससे नीचे वाले पुराने उपकरणों पर सीमा 16 स्लॉट तक कम हो जाती है। सैंपल की संख्या कम करने के लिए टेक्सचर को Texture Atlases में संयोजित करने की अनुशंसा की जाती है।
Metal Shading Language (MSL) GPU कंप्यूटिंग के लिए एक्सटेंशन के साथ C++14 पर आधारित एक शेडर प्रोग्रामिंग भाषा है। MSL टेम्पलेट, फ़ंक्शन ओवरलोडिंग, नेमस्पेस और एड्रेस अरिथमेटिक सपोर्ट करता है। शेडर्स Apple के LLVM बैकएंड के माध्यम से बाइनरी GPU कोड में कम्पाइल होते हैं।
Vertex shader प्रत्येक वर्टेक्स को प्रोसेस करता है: कोऑर्डिनेट को वर्ल्ड स्पेस से स्क्रीन स्पेस में बदलता है, नॉर्मल की गणना करता है और फ़्रैगमेंट शेडर को डेटा भेजता है। Fragment shader प्रत्येक पिक्सल का रंग निर्धारित करता है: टेक्सचर, लाइटिंग और पोस्ट-प्रोसेसिंग प्रभाव लागू करता है।
// Metal वर्टेक्स शेडर
#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)]] एट्रीब्यूट MTLVertexDescriptor में निर्दिष्ट वर्टेक्स फ़ॉर्मेट से मेल खाते हैं। [buffer(0)] बफ़र MVP मैट्रिक्स को uniform वेरिएबल के रूप में भेजता है। वर्टेक्स स्थिति को रास्टराइज़र को भेजने के लिए [[position]] से चिह्नित किया जाना चाहिए। सभी MSL वेक्टर प्रकार — float2, float3, float4 — GPU हार्डवेयर रजिस्टरों पर मैप किए जाते हैं।
Compute shader (kernel) एक GPU फ़ंक्शन है जो ग्राफिक्स पाइपलाइन के बाहर निष्पादित होता है। Kernel फ़ंक्शन kernel क्वालिफ़ायर से चिह्नित होते हैं और थ्रेड में निष्पादित होते हैं जो थ्रेडग्रुप में संगठित होते हैं। कंप्यूट शेडर्स का उपयोग इमेज प्रोसेसिंग, भौतिकी सिमुलेशन, ML और पोस्ट-प्रोसेसिंग के लिए किया जाता है।
// इमेज ब्लर के लिए कंप्यूट केर्नल
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]] पैरामीटर में अद्वितीय थ्रेड इंडेक्स होता है। Texture2D<type> पिक्सल प्रकार के अनुसार विशिष्ट होता है: half (FP16), float (FP32)। कंप्यूट केर्नल M4 Ultra पर 1 बिलियन से अधिक थ्रेड के ग्रिड आकार के साथ चलाए जा सकते हैं। Apple Silicon GPU पर अधिकतम थ्रेडग्रुप आकार 1024 थ्रेड है।
Metal Performance Shaders (MPS) Apple द्वारा प्रदान किए गए अनुकूलित GPU फ़ंक्शन की एक लाइब्रेरी है। MPS में कन्वोल्यूशनल न्यूरल नेटवर्क (MPSNNConvolution), मैट्रिक्स गुणन (MPSMatrixMultiplication), सॉर्टिंग (MPSParallelSort) और इमेज प्रोसेसिंग (MPSImageGaussianBlur) शामिल हैं। सभी फ़ंक्शन विशिष्ट Apple GPU के लिए अनुकूलित हैं।
MetalFX एक अपस्केलिंग और एंटी-अलियासिंग तकनीक है, जो NVIDIA DLSS और AMD FSR की प्रतिस्पर्धी है। MetalFX दो मोड प्रदान करता है: Spatial (FSR 2 एल्गोरिदम के माध्यम से स्थानिक अपस्केलिंग) और Temporal (मोशन वेक्टर के साथ अस्थायी अपस्केलिंग)। Temporal MetalFX 1440p रेंडर से नेटिव 4K के करीब गुणवत्ता प्रदान करता है।
Apple (2025) के अनुसार, M4 Max पर MetalFX Temporal गेम्स में नेटिव रेज़ोल्यूशन से दृष्टिगत रूप से अप्रभेद्य गुणवत्ता बनाए रखते हुए 3x तक प्रदर्शन सुधार प्रदान करता है। MetalFX बिना समर्पित टेंसर कोर के, Metal 3 सपोर्ट करने वाले किसी भी GPU पर काम करता है। प्रोजेक्ट में MetalFX को एकीकृत करने में लगभग 50 लाइन कोड लगता है।
Ray Tracing Metal 3 में हार्डवेयर त्वरण इकाइयों (Ray Tracing Accelerators) के साथ M3, M4 और A17 Pro चिप्स पर समर्थित है। Metal BVH बनाने के लिए MTLAccelerationStructure और शेडर्स में रे इंटरसेक्शन के लिए MTLIntersectionFunction प्रदान करता है। लाखों त्रिकोणों वाले बड़े दृश्य मिलीसेकंड में BVH में कम्पाइल होते हैं।
Apple (2025) के अनुसार, M4 Ultra पर हार्डवेयर रे ट्रेसिंग प्रति सेकंड 40 बिलियन रे इंटरसेक्शन (Giga rays/s) तक प्रदर्शन करती है। यह M1 Ultra पर सॉफ़्टवेयर रे ट्रेसिंग से 4 गुना तेज़ है। Metal RT इंटरसेक्शन क्वेरी, डायनामिक ज्यामिति और यथार्थवादी एनिमेशन के लिए Motion Blur सपोर्ट करता है। रे ट्रेसिंग के साथ रिफ्लेक्शन और शैडो 60 FPS पर रियल-टाइम में काम करते हैं।
Unified Memory Apple Silicon आर्किटेक्चर है जहाँ CPU और GPU एक ही भौतिक मेमोरी साझा करते हैं। Apple Silicon पर Metal को CPU और GPU के बीच डेटा कॉपी करने की आवश्यकता नहीं होती: shared मोड में MTLBuffer बिना कॉपी किए दोनों प्रोसेसरों के लिए सुलभ है। यह पारंपरिक GPU (PCIe ट्रांसफ़र) की मुख्य बाधा को समाप्त करता है।
Metal में Zero-Copy CPU को बफ़र में डेटा लिखने और GPU को बिना देरी के उसे पढ़ने की अनुमति देता है। Apple (2025) के अनुसार, यह गेम्स और ML कार्यों में डिस्क्रीट GPU की तुलना में 30–50% प्रदर्शन सुधार प्रदान करता है। डिस्क्रीट GPU (Radeon के साथ Mac Pro) के लिए Metal मेमोरी बैरियर के माध्यम से स्वचालित सिंक्रोनाइज़ेशन के साथ managed मोड सपोर्ट करता है।
अक्सर पूछे जाने वाले प्रश्न
Metal Apple का निम्न-स्तरीय GPU API है जो न्यूनतम CPU ओवरहेड प्रदान करता है। इसका उपयोग iOS, macOS और tvOS पर 3D ग्राफिक्स, ML गणना, इमेज प्रोसेसिंग और सिमुलेशन के लिए किया जाता है। यह OpenGL और OpenCL को बदलता है।
Metal केवल Apple उपकरणों पर काम करता है, Unified Memory और Metal Performance Shaders के साथ एकीकृत है। Vulkan Windows, Android और Linux के लिए एक क्रॉस-प्लेटफ़ॉर्म API है। दोनों API प्रदर्शन में तुलनीय हैं, लेकिन Metal का Apple Silicon पर ओवरहेड कम है।
हाँ, Metal 3 के साथ M3, M4 और A17 Pro चिप्स पर हार्डवेयर रे ट्रेसिंग उपलब्ध है। Metal शेडर्स में MTLAccelerationStructure और इंटरसेक्शन क्वेरी सपोर्ट प्रदान करता है। प्रदर्शन — M4 Ultra पर 40 Giga rays/s तक।
MetalFX Spatial और Temporal मोड के साथ Apple की अपस्केलिंग तकनीक है। यह बिना टेंसर कोर के, Metal 3 वाले किसी भी GPU पर काम करती है। M4 Max पर नेटिव 4K के करीब गुणवत्ता के साथ 3x तक प्रदर्शन सुधार प्रदान करती है।
निम्न-स्तरीय संसाधन प्रबंधन के कारण प्रवेश बाधा SceneKit या Unity से अधिक है। Apple Metal Sample Code और developer.apple.com पर ट्यूटोरियल प्रदान करता है। बुनियादी त्रिकोण रेंडरिंग के लिए लगभग 200 लाइन कोड की आवश्यकता होती है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें