Metal হল Apple-এর একটি নিম্ন-স্তরের গ্রাফিক্স এবং কম্পিউট API যা iOS, macOS এবং tvOS-এ GPU-তে সরাসরি প্রবেশাধিকার প্রদান করে। এটি OpenGL এবং OpenCL-কে প্রতিস্থাপন করে, ন্যূনতম CPU ওভারহেড এবং পূর্বানুমানযোগ্য কর্মক্ষমতা প্রদান করে। Apple WWDC (2025) অনুসারে, Apple ইকোসিস্টেমে GPU রেন্ডারিংযুক্ত 98% অ্যাপ্লিকেশনে Metal ব্যবহৃত হয়।
মূল পয়েন্ট
Metal হল গ্রাফিক্স প্রসেসিং ইউনিট (GPU)-এর সাথে কাজ করার জন্য একটি নিম্ন-স্তরের API, যা 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) মেশ শেডার এবং রে ট্রেসিং সমর্থন যোগ করেছে, 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: পদ্ধতি ফিচার সমর্থন পরীক্ষা করে: রে ট্রেসিং, মেশ শেডার, 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-এ সীমা 128 GB পর্যন্ত (M4 Ultra-তে)। এটি বাফার সেগমেন্টেশন ছাড়াই ML এবং বৈজ্ঞানিক কম্পিউটিংয়ের জন্য বড় ডেটাসেট নিয়ে কাজ করার অনুমতি দেয়। ডিভাইস MTLHeap-এর মাধ্যমে মেমরি পুলও পরিচালনা করে।
MTLBuffer — GPU-র জন্য অ্যাক্সেসযোগ্য একটি সংলগ্ন মেমরি অঞ্চল। বাফার ভার্টেক্স ডেটা, ম্যাট্রিক্স, ইউনিফর্ম ভেরিয়েবলের জন্য ব্যবহৃত হয়। মোড: 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 একটি নির্দিষ্ট শেডার ফাংশন উপস্থাপন করে। ভার্টেক্স শেডার, ফ্র্যাগমেন্ট শেডার, কম্পিউট কার্নেল এবং মেশ শেডার লাইব্রেরির মাধ্যমে তৈরি করা হয়। ফাংশন 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 ম্যাট্রিক্সকে ইউনিফর্ম ভেরিয়েবল হিসেবে পাস করে। রাস্টারাইজারে পাঠানোর জন্য ভার্টেক্স অবস্থান [[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 ডিভাইসে কাজ করে, ইউনিফাইড মেমরি এবং 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন