Metal هي واجهة برمجة تطبيقات (API) رسومية وحاسوبية منخفضة المستوى من Apple، توفر وصولاً مباشراً إلى GPU على iOS وmacOS وtvOS. تحل محل OpenGL وOpenCL، مع توفير حد أدنى من الحمل على CPU وأداء قابل للتنبؤ. وفقاً لـ Apple WWDC (2025)، يتم استخدام Metal في 98% من التطبيقات التي تعرض رسومات عبر GPU في نظام Apple البيئي.
النقاط الرئيسية
Metal هي واجهة برمجة تطبيقات منخفضة المستوى للعمل مع وحدة معالجة الرسومات (GPU)، قدمتها Apple في 2014 مع iOS 8 وOS X Yosemite. تم إنشاء Metal كبديل لـ OpenGL وOpenCL بهدف تقليل الحمل على CPU وتوفير وصول أكثر مباشرة إلى أجهزة GPU في أجهزة Apple.
على عكس OpenGL، حيث يقوم برنامج التشغيل بالعديد من الفحوصات والتحويلات على CPU، تستخدم Metal نموذج الإدارة الصريحة للموارد. يتحكم المطور في تخصيص الذاكرة والمزامنة وإرسال أوامر GPU، مما يعطي تحسناً في الأداء يصل إلى 50% مقارنة بـ OpenGL ES على نفس الجهاز.
تدعم Metal جميع شرائح Apple بدءاً من A7 (2013) وصولاً إلى M4 Ultra (2025). تتطور الواجهة باستمرار: Metal 3 (2022) أضاف دعم mesh shaders وتتبع الأشعة، Metal 3.1 (2023) — المشاركة السريعة للموارد بين CPU وGPU، وMetal 4 (2025) — تسريع عصبوني للأجهزة على GPU بدعم FP8 وINT4.
الإصدار الأول من Metal (2014) وفر واجهة برمجة أساسية لعرض الرسومات على iOS. Metal 2 (2017) أضاف compute shaders وMetal Performance Shaders. Metal 3 (2022) قدم MetalFX Upscaling — تقنية الرفع الخاصة بـ Apple للألعاب، المنافسة لـ NVIDIA DLSS وAMD FSR. يوفر MetalFX تحسناً في الأداء يصل إلى 2x على Mac مع M2.
Metal 4 (2025) ركز على التعلم الآلي وتتبع الأشعة. وفقاً لـ Apple (2025)، تنفذ Metal 4 على M4 Ultra ما يصل إلى 80 TFLOPS في المهام الحاسوبية عند FP16 وتدعم فك التشفير الأجهزة AV1. Metal الآن مدعومة أيضاً على Apple Vision Pro عبر خدمة compositor لعرض المحتوى الغامر.
بنية Metal مبنية حول مفهوم الإدارة الصريحة: يقوم المطور بإنشاء كائنات MTLDevice (الجهاز)، MTLBuffer (المخازن المؤقتة للبيانات)، MTLTexture (الأنسجة) وMTLCommandQueue (قائمة انتظار الأوامر). على عكس OpenGL، حيث يتم تخزين الحالة في السياق، تستخدم Metal كائنات حالة يتم ترجمتها مسبقاً.
MTLDevice يمثل GPU مادياً أو افتراضياً. يتم إنشاء جميع موارد Metal عبر هذا الكائن: المخازن المؤقتة، الأنسجة، مكتبات الشادرات، خطوط الأنابيب. في الأنظمة ذات GPUs متعددة (Mac Pro) يمكن اختيار جهاز معين. تتحقق طريقة supportsFamily: من دعم الميزات: تتبع الأشعة، mesh shaders، 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 جيجابايت (على M4 Ultra). يتيح ذلك العمل مع مجموعات بيانات كبيرة للتعلم الآلي والحوسبة العلمية دون تجزئة المخازن المؤقتة. يدير الجهاز أيضاً مجموعة الذاكرة عبر MTLHeap.
MTLBuffer — منطقة ذاكرة متجاورة يمكن الوصول إليها بواسطة GPU. تُستخدم المخازن المؤقتة لبيانات الرؤوس والمصفوفات والمتغيرات الموحدة. الأوضاع: shared (وصول CPU + GPU على ذاكرة موحدة)، private (GPU فقط، أسرع)، managed (لـ GPUs المنفصلة، مع مزامنة). على 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 تمثل دالة شادر محددة. يتم إنشاء vertex shaders وfragment shaders وcompute kernels وmesh shaders عبر المكتبة. تُخزن الدوال مؤقتاً على 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 — حالة خط أنابيب عرض مترجمة، تتضمن vertex shader وfragment shader وتكوين depth-stencil والمزج وتنسيق البكسل الناتج. إنشاء pipeline state عملية مكلفة، لذا يتم تخزين الكائنات مؤقتاً وإعادة استخدامها. يتم إنشاء حالات خط أنابيب مختلفة لمجموعات مختلفة من الشادرات.
قدم Metal 3.1 العرض السريع عبر Immutable Samplers التي تُخزن مؤقتاً على GPU لتسريع أخذ عينات النسيج. تدعم Metal ما يصل إلى 31 نسيجاً لكل فتحة شادر على Apple Silicon. على الأجهزة القديمة مع A13 وأقل ينخفض الحد إلى 16 فتحة. يوصى بدمج الأنسجة في Texture Atlases لتقليل عدد العينات.
Metal Shading Language (MSL) هي لغة برمجة شادرات تستند إلى C++14 مع امتدادات للحوسبة على GPU. تدعم MSL القوالب (templates) وتحميل الدوال والمساحات الاسمية والحساب العنواني. تُترجم الشادرات إلى كود GPU ثنائي عبر الواجهة الخلفية LLVM من Apple.
Vertex shader يعالج كل رأس: يحول الإحداثيات من الفضاء العالمي إلى فضاء الشاشة، ويحسب المعادلات وينقل البيانات إلى fragment shader. Fragment shader يحسب لون كل بكسل: يطبق الأنسجة والإضاءة وتأثيرات ما بعد المعالجة.
// Vertex 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]] على موضع الرأس لتمريره إلى rasterizer. جميع أنواع المتجهات في MSL — float2 وfloat3 وfloat4 — تُخطط لسجلات أجهزة GPU.
Compute shader (kernel) هي دالة GPU تُنفذ خارج خط أنابيب الرسومات. تُوسم دوال kernel بمؤهل kernel وتُنفذ في خيوط (threads) منظمة في مجموعات (threadgroups). تُستخدم compute shaders لمعالجة الصور ومحاكاة الفيزياء والتعلم الآلي وما بعد المعالجة.
// 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]] على فهرس الخيط الفريد. Texture2D<type> تتخصص حسب نوع البكسل: half (FP16)، float (FP32). يمكن تشغيل compute kernels بحجم شبكة يزيد عن مليار خيط على M4 Ultra. الحد الأقصى لحجم threadgroup هو 1024 خيطاً على GPU Apple Silicon.
Metal Performance Shaders (MPS) هي مكتبة دوال GPU محسّنة مقدمة من Apple. تتضمن MPS الشبكات العصبية الالتفافية (MPSNNConvolution) وضرب المصفوفات (MPSMatrixMultiplication) والفرز (MPSParallelSort) ومعالجة الصور (MPSImageGaussianBlur). جميع الدوال محسّنة لـ GPUs Apple محددة.
MetalFX هي تقنية رفع وتنعيم، منافسة لـ NVIDIA DLSS وAMD FSR. تقدم MetalFX وضعين: Spatial (الرفع المكاني عبر خوارزمية FSR 2) وTemporal (الرفع الزمني مع motion vectors). يوفر MetalFX Temporal جودة قريبة من 4K الأصلي من عرض بدقة 1440p.
وفقاً لـ Apple (2025)، يوفر MetalFX Temporal على M4 Max تحسناً في الأداء يصل إلى 3x في الألعاب مع الحفاظ على جودة لا يمكن تمييزها بصرياً عن الدقة الأصلية. يعمل MetalFX على أي GPU يدعم Metal 3، دون نوى tensor مخصصة. يتطلب دمج MetalFX في مشروع حوالي 50 سطراً من الكود.
Ray Tracing في Metal 3 مدعوم على شرائح M3 وM4 وA17 Pro مع وحدات تسريع أجهزة (Ray Tracing Accelerators). توفر Metal MTLAccelerationStructure لبناء BVH وMTLIntersectionFunction لتقاطع الأشعة في الشادرات. يتم ترجمة المشاهد الضخمة بملايين المثلثات إلى BVH في أجزاء من الثانية.
وفقاً لـ Apple (2025)، ينفذ تتبع الأشعة الأجهزة على M4 Ultra ما يصل إلى 40 مليار تقاطع شعاع في الثانية (Giga rays/s). هذا أسرع 4 مرات من تتبع الأشعة البرمجي على M1 Ultra. تدعم Metal RT استعلامات التقاطع والهندسة الديناميكية وMotion Blur للرسوم المتحركة الواقعية. تعمل الانعكاسات والظلال مع تتبع الأشعة في الوقت الفعلي بمعدل 60 إطاراً في الثانية.
Unified Memory هي بنية Apple Silicon حيث تشارك CPU وGPU نفس الذاكرة الفعلية. لا تتطلب Metal على Apple Silicon نسخ البيانات بين CPU وGPU: MTLBuffer في وضع shared متاح لكلا المعالجين دون نسخ. هذا يزيل عنق الزجاجة الرئيسي لـ GPUs التقليدية (نقل PCIe).
يسمح Zero-Copy في Metal لـ CPU بكتابة البيانات في مخزن وقراءة GPU لها دون تأخير. وفقاً لـ Apple (2025)، يعطي هذا تحسناً في الأداء بنسبة 30–50% مقارنة بـ GPUs المنفصلة في الألعاب ومهام التعلم الآلي. لـ GPUs المنفصلة (Mac Pro مع Radeon) تدعم Metal وضع managed مع مزامنة تلقائية عبر memory barriers.
الأسئلة الشائعة
Metal هي واجهة GPU منخفضة المستوى من Apple توفر حداً أدنى من الحمل على CPU. تُستخدم للرسومات ثلاثية الأبعاد وحوسبة ML ومعالجة الصور والمحاكاة على iOS وmacOS وtvOS. تحل محل OpenGL وOpenCL.
Metal تعمل فقط على أجهزة Apple، مدمجة مع Unified Memory وMetal Performance Shaders. Vulkan هي API متعددة المنصات لـ Windows وAndroid وLinux. كلا الواجهتين متقاربتان في الأداء، لكن Metal لها حمل أقل على Apple Silicon.
نعم، مع Metal 3 على شرائح M3 وM4 وA17 Pro يتوفر تتبع الأشعة الأجهزة. توفر Metal MTLAccelerationStructure ودعم استعلامات التقاطع في الشادرات. الأداء — يصل إلى 40 Giga rays/s على M4 Ultra.
MetalFX هي تقنية الرفع من Apple مع وضعي Spatial وTemporal. تعمل على أي GPU مع Metal 3، دون نوى tensor. توفر تحسناً في الأداء يصل إلى 3x بجودة قريبة من 4K الأصلي على M4 Max.
حاجز الدخول أعلى من SceneKit أو Unity بسبب إدارة الموارد منخفضة المستوى. توفر Apple Metal Sample Code ودروساً تعليمية على developer.apple.com. يتطلب عرض مثلث أساسي حوالي 200 سطر من الكود.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا