Neden Çift Çekirdek?
Önce bir temel bir soruyu sormakla başlayalım. Neden sistemler çift çekirdek işlemciye ihtiyaç duyuyor? Biz neden duyuyoruz?
Aslında bu sorunun birçok cevabı vardır fakat diğer detaylara değinmeden önce, özellikle son kullanıcılar ve mobil uygulama geliştiriciler açısından baktığımızda; en büyük işlevi (ama tek amacı değil) çoklu görev yönetimidir (bkz. Multitasking).
Benim ‘çoklu görev yönetimi’ olarak adlandırdığım, bazen çok görevli yürütüm olarak da geçen bu işleve, maalesef çoğu mobil işletim sistemi sahip değildir. iOS, Windows Phone ve Android, gerçek multitasking özelliğine sahip işletim sistemleri olmamalarına rağmen, her birinin bu duruma yakın çözümleri de mevcuttur. (Bu arada hala piyasada gerçek anlamda bu desteğe sahip bazı işletim sistemleri de mevcuttur; webOS, Blackberry 10, MeeGo vb.) Aslında çift çekirdeğin asıl kullanım amacı ve uygulamadaki yansımalarını ele alacak olduğumuzda, ortaya hayli karışık bir durum da çıkmaktadır ki, bu durumu yazının devamında açıklamaya çalıştım.
Peki Gerçekten Neden Çift Çekirdek Cihazlar?
Android işletim sistemi, 4.0 Ice Cream Sandwich (yayımlanma tarihi: Kasım 2011) sürümüyle birlikte akıllı telefonlarda çift çekirdek desteğine kavuşmuştur. (İşletim sistemi kodlarında bu desteğe 2.3 Gingerbread sürümüyle birlikte alpha seviyesinde rastlanılmasına rağmen, 3.parti uygulama geliştiriciler bu desteği 4.0 Ice Cream Sandwich ortamında geliştirme yaparken, son kullanıcılar ise uygulamadaki yansımalarını 4.0 Ice Cream Sandwich ve 4.1 Jelly Bean sürümüyle görebilirler.)
Bu arada ilk çift çekirdek destekli Android cihazların 2010 yılı sonlarında hazırlanıp, 2011 yılı Şubat ayından itibaren piyasada yer ettiklerini ve ilk 4 çekirdekli cihazlarında 2011 yılında çıkarak hala piyasanın hakimi olduklarını belirtmekte fayda var. Artık bu durumu teknik olarak açıklamak epey güç, işin pazarlama boyutu ve tüketici yanılsamaları daha etkili.
Diyelim ki, işletim sisteminiz multitasking desteğine sahip. Peki bu durum son kullanıcıları ne kadar etkileyecek? İşletim sisteminin bu desteğe sahip olması, 3.parti uygulamalarında aynı şekilde çift çekirdek desteğiyle çalışacağı anlamına gelmez, ki bu durum son kullanıcıların çoklu çekirdek desteğine en çok ihtiyaç duyduğu alandır. Google, Android işletim sistemini ve büyük oyun/uygulama geliştirici stüdyolarda uygulamalarını çift çekirdeğe optimize edebilirler fakat bu durum 3.parti uygulama geliştiriciler açısında pek de kolay değildir. Yani sizin aldığınız o 4 çekirdekli cihazlarda sistemin uygulamaları ve bazı çalışma mantıkları çift çekirdeğe uygundur fakat sürekli kullandığınız ve arasında geçişler yaptığınız 3.parti uygulamalar değildir.
Bu ne demek oluyor? Siz peş peşe işlemler, uygulamalar açtığınızda, bölünmüş çekirdekler görevleri paylaşarak hızlıca tepki vermeleri ve çalıştırmaları gerekirken (sisteminizin varsa multitasking özelliği ile çekirdeklerin görevleri bölüştürerek çalıştırması) öyle yapmıyor, tek çekirdek üzerinde koşmaya çalışıyorlar. Diğer işlemcilere kanalize edilmemiş görevler, tek bir çekirdeğe biniyor. Sonra soğuk kış günlerinde ceplerinizde cep kaloriferleri taşımak zorunda kalıyorsunuz. Bir de çekirdeklerin aynı görev ya da görevleri parçalara ayırarak (adreslendirerek) aynı anda yürütmeleri ve sonuçlandırmaları vardır ki, o zaten bambaşka bir konudur. (Bkz. Multithreading)
İşlemcilerin Performansı
Hiçbir işlemciyi salt frekans değerleriyle kıyaslayamayız. Hızı etkileyen birden fazla etmen vardır. Donanımsal açıdan sahip oldukları transistör sayıları, aralıkları, pinler ve daha birçok etmen…
Ancak en önemlisi; son kullanıcılar ve mobil yazılım geliştiriciler için; bu durum benim işime nerede ve nasıl yarayacağı sorusudur!
İşlemciler ve diğer donanım bileşenleri, her ne kadar kağıt üzerinde iyi olduklarını gösterseler de, son kullanıcılar için çok bir anlam ifade etmezler. Hatta o cihazlar için bile çoğu zaman ifade etmezler.
Mikro işlemcilerin bu denli çoğalarak hepimizin cebine girdiği günümüzde, en önemli mesele OPTİMİZASYONDUR!
Özellikle bugün mobil piyasanın büyük çoğunluğuna hakim olan ARM mimarisinin kendisi bile başlı başına optimizasyon harikasıdır. Kıyasladığımız mimari burada x86’nın güç tüketimi ve diğer mobil dezavantajları…
Donanımın kendini göstereceği platform yazılımdır. Kullanıcı elinde tuttuğunda hoşuna gidecek grafiklerde, sistemin geçişlerdeki hızı da, çoklu uygulamalar arası geçişlerde, hatta onlarca uygulama arası geçişte… Bunların hepsi yazılımın ve onun ne kadar optimize edildiğinin (hem kendi içinde hem de kullanılan donanıma) sonucudur. (Çekirdeğin bazı noktalarda salt payı da vardır fakat bu kısımda, yazılımla çekirdek entegre düşünülmüştür.)
Aslında konu optimizasyon olunca uzamaya epey müsait. Donanımla yazılımın bir araya geldiği ilk noktadan itibaren epey önemli bir süreç olan yazılımın optimizasyonunda herşey, belki de en önemli kısım kernel ile başlıyor. Adeta iki kıtayı birbirine bağlayan köprü gibi, onun işlevi, çalışma şekli ve mobil cihazlara olan optimizasyonu, bu sürecin başlangıcıdır. İstanbul trafiğinde köprülerin, tüm şehrin trafiğinin akışında ne kadar önemli olduğuyla belki paralellik kurulabilir.
Yazılımın kendisi, donanımın kendini gösterebilmesi için büyük önem taşır. Bu konuyla iligli Qualcomm’da Ürünlerden Sorumlu Başkan Yardımcısı Talluri’de işlemcilerin performansa etkisi noktasında şöyle diyor: “Eğer tüm sistem verimli bir şekilde hazırlanmışsa, performans artışını gözlemleyebilirsiniz.”
Aynı konuda Microsoft Kıdemli Ürün Yöneticisi Greg Sullivan’da benzer şekilde, “Çoklu çekirdek desteği uygulamaların ona göre yazılmadığı bir dünyada bir anlam ifade etmezler” demiştir.
Bu konuyla ilgili bir diğer önemli değerlendirmede Intel Mobil ve İletişim Grubu Yöneticisi Mike Bell’den 2012 Haziran’da şu şekilde gelmiştir: “The way it’s implemented right now, Android does not make as effective use of multiple cores as it could, and I think – frankly – some of this work could be done by the vendors who create the SoCs, but they just haven’t bothered to do it”
Peki ya Test Sonuçlarında Durum Ne?
Benchmark testleri son kullanıcı için çoğu zaman işlevsellik açısında bir anlam ifade etmez ama son yıllarda iyi bir satış stratejisi olarak karşımızda duruyor. Bu yüzden popüler telefonlardan, aynı üreticinin hem 2 çekirdekli HTC One X LTE ve hem de 4 çekirdekli HTC One X+’ın Linpack test sonuçlarına bir bakalım.
Multithread testlerde One X+ 168.7 MFLOPS puanı alırken; One X 205.7 MFLOPS puanı alıyor.
Daha grafik özelinde bir test olan Quadrant testinde ise; One X+ 7,355 puan alırken, One X 4,324 puan alıyor.
Single thread Linpack testinde ise; One X+ 102.4 MFLOPS puanı alırken, One X 103.5 MFLOPS puanı alıyor.
Eğer konu makine puanlarıysa, bu testler çift çekirdekli One X’in birçok yönden 4 çekirdekli One X+’dan daha yüksek puanlar aldığını görüyoruz.
Donanımların aynı olduğu ama hem o donanıma hem de kendi içinde daha optimize işletim sistemlerinin de ciddi performans farkları olduğuna dair bir örnekte, son kullanıcıların tercihleri noktasında verebiliriz.
Gündelik Kullanım
ARM11 mimarisiyle çalışan en son Android cihazlar 2.3 Gingerbread sürümüyle geliyordu. O zamanlar çıkan Android cihazlarının en büyük rakibi iPhone 3G idi ve o da ARM11 mimarisine sahipti. Benimde dahil olduğum gibi çoğu son kullanıcının, Android’in diğer bütün ek özelliklerine rağmen iOS sisteminin birçok yönden verimliliği, sistemin akıcılığı ve kararlılığı dolayısıyla tercihlerini iPhone’dan yana kullandıklarını hepimiz hatırlarız. Zaten rakamlarda bu yönde. Peki o halde aynı donanımda cihazlar olmasına rağmen neden performans ve beklentileri karşılamada bir cihaz diğerine göre daha başarılı olabiliyor? Cevap işletim sisteminde.
Benim ARM11 mimarisiyle çalışan çok güzel bir cihazım daha var, Raspberry PI. Bu mini bilgisayar, 700Mhz hızında çalışan bir işlemci ve 512mb RAM ile geliyor. Bu küçük bilgisayarımın bugün yapamadığı çok az şeyi iPhone 3G ve diğer benzer Android’li cihazlar yapıyor ama şuan piyasada bulunan akıllı telefonların, o tüm donanım güçlerine rağmen, yapamadığı birçok şeyi bu küçük bilgisayarım yapabiliyor. (Üretim amaçları farklı olan bu cihazların örneklendirmeye katılmasının sebebi, benzer özellikleri üzerinden bir karşılaştırma yapmaktır; multitasking vb.) Bu nasıl mı oluyor? Cevap işletim sisteminde. İsterseniz üreticisinin önerdiği GNU/Linux dağıtımı Debian‘ı kullanın ya da benim yaptığım gibi Plan 9‘ı.
Raspberry PI
Bu duruma bir örnek daha verelim. Şahsi bilgisayarım bir netbook. 1.6Ghz hızında x86 Atom işlemcili. 1GB RAM‘i var. Bu donanımdaki netbookları kullanan arkadaşların, bu netbooklarla hız ve stabilite konusunda epey kötü hatıraları olabilir. Fakat bende onlardan hiç yok! Makinem son derece hızlı ve stabil çalışıyor. Hiç takılmadı?, kendisinden beklenenleri her seferinde aksatmadan başarıyla gerçekleştiriyor. Üstelik çoklu görev yönetimini de en iyi şekilde, donanımının izin verdiği ölçüde gerçekleştiriyor. Bu durum karşısında daha yüksek sistemli bırakın netbookları, telefonlar bile var artık. Ama bu kadar verimli çalışmıyorlar. Bugün netbook’umun yapamadığı bazı şeyleri akıllı telefonlar yapıyor, akıllı telefonların yapamadığı birçok şeyi netbook’um yapıyor. Bu nasıl mı oluyor? Cevap işletim sisteminde. Lubuntu adında son derece hafif bir GNU/Linux dağıtımı kullanıyorum, bu kadar.
Konuyla ilgili güncel bir örnek üzerinden gitmekte fayda var. Microsoft, Windows 8 platformuyla birlikte yeni bir ekosistem kurdu. Windows 8, Windows 8 RT ve Windows Phone 8 sistemlerini aynı kernel (NT) üzerinde inşa ederek, ciddi bir başarıya imza attılar. Bunun mobildeki yansımasını ele alcak olursak, Windows Phone 8 platformu hazırlanırken, bazı önemli kurallar koydu. Üreticilerden sadece Snapdragon serisi işlemcileri kullanmalarını istedi ve platformunu da bu SoC üreticisinin mimarisine göre hazırladı. Üstelik Windows Phone 7 sonrası yeniden hazırlanan kerneli de böylece yeni nesil işlemcilere optimize edebilecek bir yapı kurdu. Bu size son derece stabil ve tatmin edici hızda bir donanım/yazılım üreticisini hatırlattı mı? Hani dünyada en çok satan?
Apple en başından beri, özellikle iOS’in gelişimi bu noktada takdir edilesiye, sürekli mobile uygun çözümler geliştirdi. Ellerinde hazır Darwin kernelini direkt kullanmak yerine iOS için üst katmanlara yaklaştıkça daha özel bir kernel hazırlanması, sistemin stabilitesi ve kararlılığına olan bağlılık, ki bu uğurda hala bile bazı özelliklerin ısrarla son kullanıcı ve geliştiriciler tarafından dile getirilmesine rağmen sisteme eklenmemesi, gibi bir çok sebepten bu verimi yakalabildiler.
Mobil Dünya’ya Geçiş ve İşlemcilerde Güç Tüketimi Önceliği
Eskiden geliştiriciler, Amerikan kas gücü arabalarına benzetebileceğimiz x86 mimarisinin o muhteşem gelişimine ve gücüne dayanarak, akıllarında bugünki gibi bir optimizasyon düşünmeden geliştirdiler. Adeta petrol çoktu, 4.0lt v12 motoru 600 beygirle donatmanın kimseye bir zararı yoktu. Tabi bu durum sadece oyunlar için değil, bazı uygulamalar içinde geçerliydi.
Ancak hayat mobile gidiyor. En azından şuanda o x86’lar eskisi kadar yok, ARM var.
Elektrikle çalışan Japonlar var. 1.0lt benzinli ya da hibrid arabalar var ve rağbet görüyor, çünkü mobilin en büyük handikapı enerji verimliliği ve bu konuda ARM çok iyi.
Şimdi insanlara bu mimaride çalışacak Call of Duty gibi oyunlarda lazım. Nasıl olacak?
Çok önemli gelişmeler yaşanıyor. Nasıl ki, elektrikle çalışan spor/yarış arabaları çıkıyor, hem ARM kendini tabletlerde bile Call of Duty gibi oyunlar çalıştırabilecek seviyeye getiriyor, hem de Intel bu oyunları rahatça oynayabileceğiniz tabletlerin pillerini gün boyu (Intel Haswell) kullanılacak seviyede tutma yolunda ilerliyor. Yani işler bu cephede epey yerinde…