Apple M1 çipi neden bu kadar hızlı?
(erik-engheim.medium.com)- M1, tek bir CPU değil; büyük bir silikon paket içine birden fazla çipin yerleştirildiği bütün bir sistem. CPU bunun sadece bir parçası
→ CPU, GPU, bellek ve I/O denetleyicilerini bir araya getiren bir SoC (System on a Chip)
- Çok sayıda genel amaçlı çekirdek koymak yerine, belirli işlere özelleşmiş çipler kullanıyor
→ CPU: OS ve uygulamaları çalıştırır
→ GPU: Grafik işlerini yürütür. Uygulama arayüzü, 2D/3D oyunlar vb.
→ ISP (Image Processing Unit): Görüntü işleme hızını artırır
→ DSP (Digital Signal Processor): CPU'dan daha fazla matematik yoğun işlevleri yerine getirir. Müzik dosyalarının sıkıştırmasını açmak gibi
→ NPU (Neural Processing Unit): Makine öğrenimi, ses tanıma, kamera işleme vb. işlemleri hızlandırır
→ Video Encoder/Decoder: Video dosyalarını/formatlarını düşük güçle işler
→ Secure Enclave - şifreleme, kimlik doğrulama, güvenlik
→ UMA (Unified Memory Architecture): CPU, GPU ve diğer çekirdeklerin hızlıca bilgi alışverişi yapmasını sağlar
Bu çiplerin görüntü/video düzenleme ve büyük video kodlama işlerinde güçlü performans vermesinin nedeni bu
- Unified Memory Architecture (UMA) neden özel?
→ Önceki CPU/GPU birleşik çipleri yavaştı
İkisi, farklı bellek alanlarını farklı şekillerde kullanıyordu.
Üstelik GPU çok ısındığı için, büyük soğutma fanlarına sahip dev kartlar yüksek performans veriyordu
Ama bu durumda iki taraf arasında çok fazla veri kopyalamak gerektiğinden PCIe gibi bir veriyolu gerekiyordu
→ Unified Memory, CPU/GPU için ayrı ayrı tahsis edilmez; doğrudan birlikte kullanılır.
Shared Memory'den farklı olarak CPU ve GPU aynı anda erişebilir ve konum bilgisini paylaşarak eriştikleri için kopyalama gerekmez
- Bu SoC yaklaşımı iyiyse diğer üreticiler neden yapmıyor?
→ Yapıyorlar. AMD, CPU/GPU'yu aynı silikon kalıba koyan APU biçimini üretmeye başladı
→ Ama bunu gerçekten yapmak zor. Çünkü SoC, tüm bilgisayarı tek bir çipe koymak anlamına geliyor; bu da HP ya da Dell gibi bilgisayar üreticilerine daha uygun
→ Intel ve AMD'nin iş modeli, insanların PC anakartına taktığı genel amaçlı CPU'lara dayanıyor,
yeni SoC pazarı ise farklı üreticilerin fiziksel ürünlerini getirip birleştirmek değil, IP'leri (Intellectual Property) birleştirmek demek
→ Peki Intel, AMD, Nvidia Dell ya da HP'ye IP lisansı verebilir mi?
→ Elbette Intel ve AMD tamamlanmış SoC satabilir, ancak CPU üreticisi / PC üreticisi / MS arasında çıkar çatışmaları ortaya çıkabilir (içine ne konulacağı gibi)
→ Ama Apple için bu basit bir konu. Her şeyi kendisi yapıyor. "They control the whole widget"
- CPU'yu hızlandırmanın en temel zorluğu
→ M1'in hızlı genel amaçlı CPU çekirdeği Firestorm gerçekten çok hızlı. Bu, eski ARM çekirdeklerinin AMD/Intel'e göre daha yavaş olmasından ayrıldığı nokta
→ Firestorm, hız açısından Intel/AMD Ryzen çekirdeklerinin çoğunu geçiyor; bu da sağduyuya aykırı görünüyor.
→ Hızlı bir CPU yapmanın stratejisi ne?
-
Komutları sıralı biçimde daha hızlı yürütmek
-
Birden fazla komutu paralel yürütmek
80'lerde bu kolaydı. Sadece saat frekansını artırmak komutları daha hızlı yürütmeye yetiyordu.
Bilgisayar her clock cycle'da bir şey yapar; bu "bir şey" çok küçük olduğundan, tek bir komut için birkaç clock cycle gerekebilir
Ama günümüzde saat frekansını artırmanın sınırları var.
"Moore yasasının sonu"
Bu yüzden artık mümkün olduğunca çok komutu paralel çalıştırmak önemli
- Multi-core mı, yoksa Out-of-Order işlemciler mi?
→ Paralel yürütme için iki yaklaşım var
- Daha fazla CPU çekirdeği eklemek (geliştirici açısından daha fazla thread eklemek)
Teoride işlemcinin çekirdekleri birden fazla thread çalıştırabilir (yazılım thread'leri)
Bu, thread'ler arasında geçiş yaparak çalıştığı için I/O ya da ağ üzerinde bir şey beklenen durumlarda kullanılır
Donanım thread'i hızı artırır, ancak geliştiricinin bunu kullanacak kod yazması gerekir.
Sunucu/bulut tarafında bu model uygundur.
Bu yüzden Ampere gibi şirketler, 128 çekirdekli Altra Max gibi bulut odaklı ARM CPU'lar üretiyor.
Apple ise bunun tam tersi. Apple, tek kullanıcıya yönelik cihazlar yapan bir şirket
Masaüstü yazılımlarının çoğu çok sayıda çekirdeği kullanacak şekilde tasarlanmamıştır.
Oyunlar 8 çekirdekte performans kazanabilir ama 128 çekirdek sadece israftır.
Bu yüzden daha az sayıda ama daha güçlü çekirdek gerekir
- Sırasız yürütme (Out-of-Order Execution, OoO), daha fazla komutu paralel çalıştırır ama çoklu thread gibi açıkça kullanılmasını gerektirmez
Geliştirici açısından bakıldığında, çekirdekler sadece daha hızlı çalışıyormuş gibi görünür
Bellekte belirli bir konumdan veri almak yavaştır
Ama 1 byte almakla 128 byte almak arasında gecikme farkı yoktur
Veri veri yolu üzerinden taşınır; bu yol genişse aynı anda daha fazla byte okunabilir
CPU çalışırken birden fazla komut bloğunu aynı anda yürütmeye çalışır, ancak bu komutlar sıralı yürütülecek şekilde yazılmıştır
Modern mikroişlemciler Out-of-Order yürütme yapar.
Yani birden fazla komutu analiz ederek aralarında bağımlılık olup olmadığını bulur.
01: mul r1, r2, r3 // r1 ← r2 × r3
02: add r4, r1, 5 // r4 ← r1 + 5
03: add r6, r2, 1 // r6 ← r2 + 1
Bu örnekte 1 ve 2 bağımlıdır ama 3. komut önceki ikisiyle hiç ilişkili değildir.
Böylece Out-of-Order işlemciler bağımlılığı olmayan 3. komutu paralel çalıştırabilir.
Pratikte CPU, bir iki değil yüzlerce komut arasındaki bağımlılıkları tespit edebilir.
CPU komutları bir düğüm grafiği gibi bağlar ve bunu analiz ederek hangi komutların paralel yürütülebileceğini, hangi noktaların sonuç beklemesi gerektiğini belirler.
M1'in Firestorm çekirdeğinin olağanüstü hızının nedeni, son derece iyi bir Out-of-Order yürütme yapması.
Görünüşe göre Intel/AMD dahil ana akım pazardaki herkesten daha iyi.
- Peki AMD ve Intel'in Out-of-Order yürütmesi neden M1'den daha yavaş?
→ Az önce anlatılan şey aslında ROB (Reorder Buffer) ile ilgilidir ve normal makine kodu komutları değildir (CPU'nun yürütmek için bellekten getirdiği)
Bu komutlar CPU Instruction Set Architecture (ISA) kapsamındadır; x86, ARM, PowerPC diye adlandırdığımız şeyler bunlardır.
→ CPU içeride, programcının görmediği tamamen farklı bir komut kümesi olan micro-operations (mikro komutlar, micro-ops ya da μops) ile çalışır ve ROB bu micro-ops'larla doludur
→ ARM/x86 komutlarını açık API, micro-ops'u ise kapalı API gibi düşünebilirsiniz.
→ CISC'te komutlar büyük ve karmaşık olduğu için micro-ops kullanmak şarttır; RISC'te ise kullanıp kullanmamak tercihe bağlıdır.
(Örneğin küçük ARM CPU'ları micro-ops kullanmayabilir. Bu, OoO yapamayacakları anlamına gelmez)
→ Bu neden önemli? Çünkü "yüksek hız, ROB'un ne kadar hızlı ve ne kadar dolu tutulabildiğine" bağlı
→ ROB ne kadar hızlı doldurulursa, o kadar fazla komutu paralel yürütme fırsatı doğar ve performans artar
→ Makine kodu komutları, decoder tarafından micro-ops'lara bölünür.
→ Intel/AMD çekirdeklerinde 4 decoder varken,
Apple'da "çılgın" 8 decoder var ve ROB 3 kat daha büyük; yani temelde 3 kat daha fazla komut barındırabiliyor
- O zaman Intel ve AMD neden daha fazla komut decoder'ı koymuyor?
→ İşte burada RISC'in karşı atağı başlıyor. M1 Firestorm çekirdeğinde ARM RISC bulunması önemli.
→ x86 komutlarının uzunluğu 1 ila 15 byte arasında değişir, RISC ise sabit boyutludur
→ Tüm komutlar aynı uzunlukta olduğunda, onları doğrudan 8 farklı decoder'a bölüp vermek yeterlidir
→ Ama x86'da bir komutun ardından gelen komutun tam olarak nerede başladığı bilinmediği için, her komutu gerçekten analiz etmekten başka çare yoktur
→ Intel ve AMD bu sorunu brute-force şekilde çözmeye çalışıyor; yani her olası komut başlangıcından itibaren decode ediyorlar
Yani yanlış tahminleri ve hataları sürekli çöpe atmak zorundalar.
Bu yüzden daha fazla decoder eklemek zor; Apple içinse çok daha kolay
→ Bu da temelde aynı saat frekansında AMD/Intel CPU'larına göre iki kat fazla komut işleyebilmesini sağlıyor
→ Gerçekte x86, karmaşık CISC komutlarını çok sık kullanmayıp daha çok RISC benzeri kısa komutlara yönelse de, o 15 byte'lık komutları yine de işlemek zorunda olduğu için karmaşıklık devam ediyor.
- Ama AMD'nin Zen3 çekirdeği hâlâ daha hızlı değil mi?
→ Benchmark'larda Zen3, Firestorm'dan daha hızlı görünüyor ama Zen3 5GHz'de, Firestorm ise 3.2GHz'de çalışıyor
→ Apple'ın saat frekansını yükseltmemesinin nedeni, çipin ısınması.
→ Temel olarak Firestorm çekirdeği Zen3'ten daha üstün
→ Zen3 daha fazla güç tüketip daha fazla ısı üreterek oyunlarda kullanılabilir, ama "Apple bunu yapmamayı seçmiş durumda"
→ Apple daha yüksek performans isterse daha fazla çekirdek ekleyecektir. Böylece daha az güçle daha yüksek performans elde edebilir
- Gelecek
→ AMD/Intel iki açıdan kendilerini köşeye sıkıştırmış durumda
-
Heterojen hesaplama ve SoC tasarımını ileri taşıyacak bir iş modeli yok
-
Karmaşık x86 CISC komutları artık bir legacy haline geldiği için OoO performansını geliştirmeyi zorlaştırıyor
→ Elbette oyun bitmiş değil. Saat hızını daha da artırabilirler, soğutmayı geliştirebilirler, daha fazla çekirdek kullanabilirler..
→ Intel'in durumu daha da kötü. Zaten çekirdek hızında Firestorm'un gerisinde, üstelik SoC içine koyduğu GPU da zayıf.
→ Çok sayıda çekirdek doğal olarak sunucular için iyi, ancak Amazon ve Ampere 128 çekirdekle saldırıyor. Intel/AMD iki cephede birden savaşmak zorunda
→ Neyse ki AMD/Intel'den farklı olarak Apple çiplerini pazarda satmıyor
→ Hemen değil belki ama PC kullanıcıları yavaş yavaş Apple'a geçecek ve Apple PC pazarında daha büyük pay sahibi olacak
17 yorum
Gerçekten çok iyi yazıyorsunuz
Bunu çok anlaşılır ve güzel şekilde derleyip toparladığınız için teşekkür ederim. Harika!
Güzel içerik için teşekkürler.
Teşekkürler!!
M1 cihazı almak istiyordum ama meğerse onun yerine hisse senedi almam gerekiyormuş..
Güzel yazı için teşekkürler!
Ben de Apple hissesinin gelecekteki değerinin yüksek olacağına katılıyorum.
Bir gün gerçekten Apple Car'ın çıkacakmış gibi geliyor.
Weak memory modelgiderek daha önemli hale geliyor gibi görünüyor.. Apple artık gerçekten çipten montaja, donanıma, OS'e ve uygulamalara kadar her şeyi tamamen kendisi yapabilen (Jobs'un hayalini kurduğu) kapalı bir şirket haline geliyor.Ben de bir sonraki cihaz olarak M1 Mac mini ya da MacBook Air düşünüyorum..
Ben de 2015 MacBook Pro'dan M1'e geçiyorum... Yıl sonu ya da gelecek yılın başında geleceğini söylüyorlar!
Bugün kontrol ettim, Türkiye'de satışa sunulmuş!
Vay! Guru gerçekten harika!!
Teşekkürler ;)
Yazının içinde yazarın yazdığı bir RISC/CISC karşılaştırma yazısı da var; kesinlikle çok tavsiye ederim. “Neden böyle bir komut yapısına sahip oldular?” sorusunu da akıcı bir şekilde açıklıyor.
Temelde iyi yazı yazan biri gibi görünüyor. Bu yazı da epey uzun ama rahat okunuyordu.
Vay, güzel içerik için teşekkürler.
Teşekkür ederim!
Yeniden bilgisayar mimarisi dersi alıyormuşum gibi hissettiriyor haha
Sonuçta Apple, en iyi yaptığı şeyi giderek daha iyi yapmaktan başka seçeneği olmayan bir yapıya sahip.
Intel ve AMD şimdi ne yapacak..
Bugün yüklediğim GeekNews Podcast 16. bölümde M1 çipinin Memory-Order hilesinden kısaca bahsetmiştim; bu yazı ise ondan farklı olarak daha ayrıntılı.
Görünüşe göre bunu gelecek haftaki podcast'te de yine konuşacağız ^^;