Metal — nedir, grafik API'si ve shader'lar

Yazar: IT Sectr Yayınlanma: 2026-05-03 Okuma süresi: 10 dk

Metal, Apple'ın düşük seviyeli grafik ve hesaplama API'sidir ve iOS, macOS ve tvOS'ta GPU'ya doğrudan erişim sağlar. OpenGL ve OpenCL'nin yerini alarak minimum CPU yükü ve öngörülebilir performans sunar. Apple WWDC (2025)'ye göre, Apple ekosisteminde GPU işleme kullanan uygulamaların %98'inde Metal kullanılmaktadır.

Önemli Noktalar

  • Metal — grafik ve hesaplama desteğiyle Apple'ın düşük seviyeli GPU API'si
  • MTLDevice — tüm Metal kaynaklarının oluşturulduğu GPU soyutlaması
  • Komut tamponları MTLCommandBuffer çoklu iş parçacıklı komut kaydını sağlar
  • Metal Shading Language shader'ları C++14 tabanlı GPU koduna derlenir
  • Metal Performance Shaders ML ve filtreleme için optimize edilmiş GPU işlevleri sunar

Metal nedir?

Metal, grafik işleme birimi (GPU) ile çalışmak için düşük seviyeli bir API'dir ve Apple tarafından 2014 yılında iOS 8 ve OS X Yosemite ile birlikte tanıtılmıştır. Metal, CPU yükünü azaltmak ve Apple cihazlarında GPU donanımına daha doğrudan erişim sağlamak amacıyla OpenGL ve OpenCL'nin yerine oluşturulmuştur.

Sürücünün CPU üzerinde birçok denetim ve dönüşüm gerçekleştirdiği OpenGL'nin aksine Metal, açık kaynak yönetimi modelini kullanır. Geliştirici, bellek ayırma, senkronizasyon ve GPU komut gönderimini kontrol eder ve aynı donanımda OpenGL ES'ye kıyasla %50'ye varan performans artışı sağlar.

Metal, A7'den (2013) M4 Ultra'ya (2025) kadar tüm Apple çiplerini destekler. API sürekli gelişmektedir: Metal 3 (2022) mesh shader ve ışın izleme desteği ekledi, Metal 3.1 (2023) — CPU ve GPU arasında hızlı kaynak paylaşımı ve Metal 4 (2025) — FP8 ve INT4 desteğiyle GPU'da sinir ağlarının donanım hızlandırmasını ekledi.

Metal'in Tarihçesi

Metal'in ilk sürümü (2014), iOS'ta grafik işleme için temel bir API sağlıyordu. Metal 2 (2017), hesaplama shader'ları ve Metal Performance Shaders'ı ekledi. Metal 3 (2022), MetalFX Upscaling'i tanıttı — NVIDIA DLSS ve AMD FSR ile rekabet eden Apple'ın oyunlar için kendi yükseltme teknolojisi. MetalFX, M2'li Mac'te 2 kata kadar performans artışı sağlar.

Metal 4 (2025), makine öğrenimi ve ışın izlemeye odaklandı. Apple (2025)'ye göre, M4 Ultra'daki Metal 4, FP16'da hesaplama görevlerinde 80 TFLOPS'a kadar ulaşır ve donanım AV1 kod çözmeyi destekler. Metal artık Apple Vision Pro'da da sürükleyici içerik işlemek için kompozitör hizmeti aracılığıyla desteklenmektedir.

Metal Mimarisi: Cihaz ve Kaynaklar

Metal mimarisi, açık yönetim konsepti etrafında inşa edilmiştir: geliştirici MTLDevice nesneleri (cihaz), MTLBuffer (veri tamponları), MTLTexture (dokular) ve MTLCommandQueue (komut kuyruğu) oluşturur. Durumun bağlamda saklandığı OpenGL'nin aksine Metal, önceden derlenmiş durum nesnelerini kullanır.

MTLDevice — API Giriş Noktası

MTLDevice, fiziksel veya sanal bir GPU'yu temsil eder. Tüm Metal kaynakları bu nesne aracılığıyla oluşturulur: tamponlar, dokular, shader kitaplıkları, boru hatları. Birden çok GPU'lu sistemlerde (Mac Pro) belirli bir cihaz seçilebilir. supportsFamily: yöntemi, özellik desteğini kontrol eder: ışın izleme, mesh shader, MetalFX.

swift
import Metal
 
// GPU cihazı alınıyor
guard let device = MTLCreateSystemDefaultDevice() else {
    fatalError("Metal desteklenmiyor")
}
 
// Yetenekler kontrol ediliyor
let supportsRayTracing = device.supportsFamily(.metal3)
let gpuName = device.name // "Apple M4 Pro"
let maxBufferSize = device.maxBufferLength

maxBufferLength özelliği, cihaz tarafından desteklenen maksimum tampon boyutunu belirler. Apple Silicon'da Unified Memory ile sınır 128 GB'a kadar çıkar (M4 Ultra'da). Bu, tampon bölümlemesi olmadan ML ve bilimsel hesaplama için büyük veri kümeleriyle çalışmayı sağlar. Cihaz ayrıca MTLHeap aracılığıyla bellek havuzunu yönetir.

MTLBuffer ve MTLTexture — GPU için Veri

MTLBuffer — GPU tarafından erişilebilen bitişik bir bellek bölgesi. Tamponlar, köşe verileri, matrisler, uniform değişkenler için kullanılır. Modlar: shared (birleşik bellekte CPU + GPU erişimi), private (yalnızca GPU, daha hızlı), managed (ayrık GPU'lar için, senkronizasyonlu). Apple Silicon'da basitlik için shared modu önerilir.

MTLTexture — dokular ve işleme hedefleri için çok boyutlu bir piksel dizisi. 1D, 2D, 3D, küp ve dizi dokuları destekler. Biçimler: RGBA8Unorm, BGRA8Unorm, RGBA16Float, R32Float, ASTC (sıkıştırılmış), derinlik (depth32Float) ve şablon. Texture Usage bayrakları, dokunun nasıl kullanılacağını belirtir: işleme, shader okuma, kopyalama.

MTLLibrary ve Shader Derleme

MTLLibrary — derlenmiş GPU işlevlerinin (shader'lar) bir koleksiyonudur. Bir kitaplık, çalışma zamanında MSL (Metal Shading Language) kaynak kodundan oluşturulabilir veya önceden derlenerek pakete (.metallib) dahil edilebilir. Başlatma gecikmelerini ortadan kaldırmak için ön derleme önerilir.

MTLFunction, belirli bir shader işlevini temsil eder. Köşe shader'ları, parça shader'ları, hesaplama çekirdekleri ve mesh shader'lar kitaplık aracılığıyla oluşturulur. İşlevler GPU'da önbelleğe alınır ve kareler arasında yeniden kullanılır. Shader argümanları, dizin tabanlı bağlama ile tamponlar ve doku yuvaları aracılığıyla iletilir.

Metal ile İşleme: Komut Tamponları

Metal'de işleme, asenkron komut kuyrukları aracılığıyla düzenlenir. Geliştirici MTLCommandBuffer oluşturur, içine işleme veya hesaplama komutlarını kodlar ve MTLCommandQueue'ya gönderir. GPU komutları sırayla yürütürken CPU çalışmaya devam edebilir. Senkronizasyon, semaforlar veya completionHandler aracılığıyla gerçekleşir.

MTLCommandQueue ve MTLCommandBuffer

MTLCommandQueue — MTLDevice'dan oluşturulan bir komut kuyruğu. Bir uygulamanın grafik, hesaplama ve kopyalama işlemleri için birden çok kuyruğu olabilir. Her kuyruk, komutların sıralı yürütülmesini garanti eder. MTLCommandBuffer — bir grup GPU işi için kapsayıcı. Kodlamadan sonra, gönderilir ve GPU'da yürütülür.

swift
// Ana işleme döngüsü
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 yöntemi, geometri işlemeyi yürütür. vertexCount parametresi, köşe sayısını belirtir. Her kare için yeni bir komut tamponu oluşturulur. Present, işlemeyi ekranın VSync'i ile senkronize eder. Metal, CAMetalLayer aracılığıyla ekran senkronizasyonunu otomatik olarak yönetir.

İşleme Boru Hattı Durumu

MTLRenderPipelineState — köşe ve parça shader'ları, derinlik-şablon yapılandırması, karıştırma ve çıktı piksel biçimini içeren derlenmiş bir işleme boru hattı durumu. Boru hattı durumu oluşturmak pahalı bir işlemdir, bu nedenle nesneler önbelleğe alınır ve yeniden kullanılır. Farklı shader kombinasyonları için farklı boru hattı durumları oluşturulur.

Metal 3.1, doku örneklemeyi hızlandırmak için GPU'da önbelleğe alınan Immutable Samplers ile hızlı işlemeyi tanıttı. Metal, Apple Silicon'da shader yuvası başına 31 adede kadar dokuyu destekler. A13 ve altı eski cihazlarda sınır 16 yuvaya düşer. Örnek sayısını azaltmak için dokuların Texture Atlas'larda birleştirilmesi önerilir.

Metal Shading Language ve Shader'lar

Metal Shading Language (MSL), GPU hesaplama için uzantılarla birlikte C++14 tabanlı bir shader programlama dilidir. MSL, şablonlar, işlev aşırı yüklemesi, ad alanları ve adres aritmetiğini destekler. Shader'lar, Apple'ın LLVM arka ucu aracılığıyla ikili GPU koduna derlenir.

Köşe ve Parça Shader'ları

Köşe shader'ı her köşeyi işler: koordinatları dünya uzayından ekran uzayına dönüştürür, normalleri hesaplar ve verileri parça shader'ına iletir. Parça shader'ı her pikselin rengini hesaplar: dokuları, aydınlatmayı ve son işleme efektlerini uygular.

cpp
// Metal köşe shader'ı
#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)]] nitelikleri, MTLVertexDescriptor'da belirtilen köşe biçimlerine karşılık gelir. [buffer(0)] tamponu, MVP matrisini bir uniform değişken olarak iletir. Köşe konumu, rasterleştiriciye iletmek için [[position]] ile işaretlenmelidir. Tüm MSL vektör türleri — float2, float3, float4 — GPU donanım yazmaçlarına eşlenir.

Hesaplama Çekirdekleri

Hesaplama shader'ı (çekirdek), grafik boru hattının dışında yürütülen bir GPU işlevidir. Çekirdek işlevleri, kernel niteleyicisiyle işaretlenir ve iş parçacığı grupları halinde düzenlenmiş iş parçacıklarında yürütülür. Hesaplama shader'ları, görüntü işleme, fizik simülasyonu, ML ve son işleme için kullanılır.

cpp
// Görüntü bulanıklaştırma için hesaplama çekirdeği
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]] parametresi, benzersiz iş parçacığı dizinini içerir. Texture2D<type>, piksel türüne göre özelleştirilir: half (FP16), float (FP32). Hesaplama çekirdekleri, M4 Ultra'da 1 milyardan fazla iş parçacığı ızgara boyutuyla başlatılabilir. Apple Silicon GPU'larında maksimum iş parçacığı grubu boyutu 1024 iş parçacığıdır.

Performans ve Metal Performance Shaders

Metal Performance Shaders (MPS), Apple tarafından sağlanan optimize edilmiş GPU işlevleri kitaplığıdır. MPS, evrişimli sinir ağları (MPSNNConvolution), matris çarpımı (MPSMatrixMultiplication), sıralama (MPSParallelSort) ve görüntü işleme (MPSImageGaussianBlur) içerir. Tüm işlevler belirli Apple GPU'ları için optimize edilmiştir.

MetalFX Yükseltme

MetalFX, NVIDIA DLSS ve AMD FSR ile rekabet eden bir yükseltme ve kenar yumuşatma teknolojisidir. MetalFX iki mod sunar: Spatial (FSR 2 algoritmasıyla uzamsal yükseltme) ve Temporal (hareket vektörleriyle zamansal yükseltme). Temporal MetalFX, 1440p işlemeden yerel 4K'ya yakın kalite sunar.

Apple (2025)'ye göre, M4 Max'te MetalFX Temporal, yerel çözünürlükten görsel olarak ayırt edilemeyen kaliteyi korurken oyunlarda 3 kata kadar performans artışı sağlar. MetalFX, özel tensor çekirdekleri olmadan Metal 3'ü destekleyen herhangi bir GPU'da çalışır. MetalFX'in bir projeye entegrasyonu yaklaşık 50 satır kod gerektirir.

Metal'de Işın İzleme

Işın izleme, Metal 3'te donanım hızlandırma birimlerine (Ray Tracing Accelerators) sahip M3, M4 ve A17 Pro çiplerinde desteklenir. Metal, BVH oluşturmak için MTLAccelerationStructure ve shader'larda ışın kesişimi için MTLIntersectionFunction sağlar. Milyonlarca üçgen içeren devasa sahneler milisaniyeler içinde BVH'ye derlenir.

Apple (2025)'ye göre, M4 Ultra'da donanım ışın izleme, saniyede 40 milyara kadar ışın kesişimi (Giga rays/s) gerçekleştirir. Bu, M1 Ultra'daki yazılım ışın izlemeden 4 kat daha hızlıdır. Metal RT, kesişim sorgularını, dinamik geometriyi ve gerçekçi animasyonlar için Motion Blur'u destekler. Işın izlemeli yansımalar ve gölgeler, 60 FPS'de gerçek zamanlı olarak çalışır.

Birleşik Bellek ve Zero-Copy

Unified Memory, CPU ve GPU'nun aynı fiziksel belleği paylaştığı Apple Silicon mimarisidir. Apple Silicon'da Metal, CPU ve GPU arasında veri kopyalama gerektirmez: shared modundaki MTLBuffer, kopyalama olmadan her iki işlemci tarafından da erişilebilir. Bu, geleneksel GPU'ların ana darboğazını (PCIe aktarımları) ortadan kaldırır.

Metal'de Zero-Copy, CPU'nun bir tampona veri yazmasına ve GPU'nun bunu gecikmeden okumasına olanak tanır. Apple (2025)'ye göre, bu, oyunlarda ve ML görevlerinde ayrık GPU'lara kıyasla %30–50 performans artışı sağlar. Ayrık GPU'lar (Radeon'lu Mac Pro) için Metal, bellek bariyerleri aracılığıyla otomatik senkronizasyonlu managed modunu destekler.

Sıkça Sorulan Sorular

Metal nedir ve neden gereklidir?

Metal, minimum CPU yükü sağlayan Apple'ın düşük seviyeli GPU API'sidir. iOS, macOS ve tvOS'ta 3D grafikler, ML hesaplamaları, görüntü işleme ve simülasyonlar için kullanılır. OpenGL ve OpenCL'nin yerini alır.

Metal, Vulkan'dan nasıl farklıdır?

Metal yalnızca Apple cihazlarında çalışır, Unified Memory ve Metal Performance Shaders ile entegredir. Vulkan, Windows, Android ve Linux için platformlar arası bir API'dir. Her iki API de performans açısından karşılaştırılabilir, ancak Metal'in Apple Silicon'da yükü daha düşüktür.

Metal ışın izlemeyi destekliyor mu?

Evet, Metal 3 ile M3, M4 ve A17 Pro çiplerinde donanım ışın izleme mevcuttur. Metal, MTLAccelerationStructure ve shader'larda kesişim sorgusu desteği sağlar. Performans — M4 Ultra'da 40 Giga rays/s'ye kadar.

MetalFX Upscaling nedir?

MetalFX, Spatial ve Temporal modlarıyla Apple'ın yükseltme teknolojisidir. Tensor çekirdekleri olmadan Metal 3'ü destekleyen herhangi bir GPU'da çalışır. M4 Max'te yerel 4K'ya yakın kaliteyle 3 kata kadar performans artışı sağlar.

Metal ile çalışmaya başlamak zor mu?

Düşük seviyeli kaynak yönetimi nedeniyle giriş engeli SceneKit veya Unity'den daha yüksektir. Apple, Metal Sample Code ve developer.apple.com'da eğitimler sağlar. Temel üçgen işleme yaklaşık 200 satır kod gerektirir.

Özet

  • Metal — minimum CPU yüküyle Apple'ın düşük seviyeli GPU API'si
  • MTLDevice ve MTLCommandQueue — açık kaynak yönetimiyle mimarinin temeli
  • MTLCommandBuffer ve kodlayıcılar çoklu iş parçacıklı GPU komut kaydını sağlar
  • Metal Shading Language (C++14) köşe, parça, hesaplama ve mesh shader'ları destekler
  • MetalFX — Metal 3'lü herhangi bir GPU'da 3 kata kadar iyileştirmeyle yükseltme
  • Donanım ışın izleme M3/M4/A17 Pro'da mevcut
  • Birleşik bellek Apple Silicon'da CPU ve GPU arasında veri kopyalamayı ortadan kaldırır

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun