Posts Tagged ‘multicore’

Bu kadar çok çekirdek lazım mı?

Çarşamba, 2009.10.28

Bilgisayarınızdaki çekirdek sayısını artırmak her zaman, özellikle de bir son kullanıcıysanız çok fazla işinize yarıyor mu? Bu yazıda çekirdek meselesine biraz değinmek istiyorum.

tilera_islemci_on_arka

Tilera Tile Gx isimli işlemcisiyle 100 çekirdeğe ulaştı.

Her ne kadar ne kadar çekirdek sayısı üzerine pazarlama fetişizmi geliştirilecek kadar önemli bir rakam da olsa kullanıcıların fark etmediği veya kasıtlı olarak gözden uzak tuttuğu bir gerçek var: Ne yazık ki günümüzde yazılımların çoğunluğu çok izlekli (multi-threading) yapıya sahip değil. Yani, kaç tane bağımsız yuvada kaç çekirdekli işlemciniz olursa olsun, yazılım sadece bütün bu donanımsal kaynaktan sadece tek bir çekirdeği kullanabiliyor.

Programcıların derdi

Açık konuşalım: Bir uygulamayı izleklere bölmek çok zor bir iş. Zamanında Intel desteğiyle Boğaziçi Üniversitesi‘nde açılan ve bu tür uygulamalar geliştirilmesi için tahsis edilen laboratuarda öğretim görevlileriyle konuşurken onların bile “bir gün birisi çıksa ve 3 GHz değil 10 GHz işlemci ürettik, tek yoldan daha fazla hız için uğraşacağız ve artık böyle ilerlenecek dese, kimse bu işlerle uğraşmaz” dediğini dün gibi hatırlıyorum. Dolayısıyla mimarilere ve çekirdek sayılarına göre, kaynak yönetimini (önbellek tutarlılıklarının (cache coherency) sağlanması, çekirdekler arası iletişim ve iş bölümü) sistem seviyesine bırakıp sadece işi yapan kodu kendisini her yere uyarlayabilen ve verimlilik kaybı yaşamadan çalışabilen kod yazmak zor iş.

crysis_nanoluadam

Yerli kardeşlerin zoraki yalanı

Intel’in de desteklediği Crytek’in Crysis oyunu bütün dünyada çok büyük ilgi gördü. Tabii “Yahu bu adamlar Türk işte” diyerek mesnetsiz bir sahiplenme duygusuyla sarıldığımız Crytek’in sahibi Türk kökenli Yerli kardeşler, İstanbul’daki bir toplantıda “Peki çok çekirdeğin oyun performansına bir etkisi var mı” sorularına, var var diyerek cevap verdiler. Tabii, nasıl var çok da açıklayamadılar. Burada iki nokta vardı ve toplantıda, donanımdan anlayan herkes bunları çok iyi biliyordu:

  • Crysis, işlemci ve bellek performansından etkilense de oyun içindeki performans anlamında ekran kartına daha çok bağımlı bir oyun. Bunu en önemli iş ortakları olan Nvidia kadar iyi biliyorlar.
  • Crysis oyununun motoru çok izlekli bir yapıya sahip değil. Yani dört çekirdekli bir işlemciniz varsa crysis.exe en fazla %25 işlemci yükü yaratabilecek ve tek çekirdeğin performansıyla sınırlı kalacak. En azından bu konuşmanın geçtiği sıralarda durum buydu.

Peki Yerli kardeşler durumu nasıl topladı? Saniyede gösterilen kare sayısını sabit tutarak performansa katkı yapıyormuş. Yani zaten çok çekirdeğe para vermemizin sebebi, çalışan ana yazılımların kendilerine bir çekirdeği ayırabilmesi, geri kalan arka plan işlerinin de boştaki çekirdek veya çekirdeklere aktarılması sayesinde ana yazılımın sorunsuz biçimde ve performans kaybına uğramadan çalışması değil mi?

Uzman uygulamalarla hayat bulan çekirdekler

Kısıtlı miktarda da olsa bazı ev kullanıcısı ve uzmanlara yönelik uygulamalarda çok çekirdek destekli uygulamalar var. Bu çok çekirdekli uygulamalar bazı noktalarda yeterince verimli olamayabiliyor. Örneğin Nero Move it ilk çıktığında sergilediği düşük çok çekirdek kullanım yeteneği sebebiyle bende hayal kırıklığı yaşatmıştı.

nero_move_it_logowork

We like to… move it!

Adobe gibi sayısal içerik üretimi konusunda uzman bir şirket bile bu konuda muzdarip. En son montaj masasına oturduğum zaman, ilginç şekilde After Effects’in çoklu izlek desteğinin olduğunu, fakat çatır çutur çıkış almanız gereken ve aslında daha çok kullanılan bir üretim yazılımı olan Premiere’de ise bu desteğin bulunmadığını görmüştüm. Dolayısıyla gidilecek daha çok yol var.

Özel işlemciler ve ekran kartları

Peki gelelim, yazının girişinde gördüğünüz resmin sebebine. Tilera isimli şirket, 100 tane çekirdeği bir araya getirdiği bir işlemciden bahsediyor. Bu işlemcileri özel yapan şey, ekran kartlarındaki akış mantığını benimsemiş olmaları. Peki, bunlar bizim ne işimize yarıyor? Aslında, nasıl sorusu daha fazla anlam ifade ediyor.

opengl_logo350Ekran kartlarını OpenGL ve DirectX gibi API’lar için
birer hızlandırıcı olarak düşünebiliriz.

Temel işletim sistemi (işlem denetimi ve sürücülerin bileşenlere hükmetmesi diye özetleyelim) haricinde (ve aslında bunların bazıları da dahil) her bir iş çeşitli yazılımsal katmanların belirli nesnelere yaptırmaları ve sisteme geri dönmesi olarak tanımlanabilir. Biz bunlara genellikle API, yani yazılım programlama arayüzü diyoruz. Örneğin DirectX ve openGL arayüzleri, ekran kartına grafik kökenli işleri yaptırıyorlar. Ekran kartı dediğimiz şey aslında işletim sistemlerindeki programlama arayüzleri için birer hızlandırıcı gibi çalışıyor. Bu mantıkla herhangi bir API için herhangi bir hızlandırıcı yazabilirsiniz. Bunun oyuncuların en çok bileceği örnek vermek gerekirse, PhysX diyebiliriz. Önceleri kendi hızlandırıcısına sahip olan PhysX şimdilerde CUDA teknolojisinden faydalanarak Nvidia ekran kartları üzerinden çalışıyor.

Toshiba Quad Core HD ve Tilera

Toshiba’nın, Quad Core HD dediği ama aslında Sony, Toshiba ve IBM’in ortaklara üretimi olan ve Playstation 3’te de kullanılan Cell işlemcisinin bir türevi olan sistem, benzer biçimde dizüstü bilgisayarların video sıkıştırma ve açma yeteneklerini değiştiren bir işlemci. Bu işlemci kendisine özel yazılımlardan faydalanarak bu işlemleri, sistemdeki işlemciye yük bindirmeden yapabiliyor.

products_TILEmpower_diagram

Tilera TILEPro64 kullanılan bir bağımsız sistemin yapı planı (ürün için tıklayın)

Tilera’nın durumu biraz daha farklı. Kendisine has mimarisiyle çalışan Tilera’nın Tile serisi işlemcileri, bağımsız olarak kullanılabiliyor. Bu şekilde çok fazla akışa ihtiyaç duyduğunuzda Tilera’nın çözümleri sizi kendinize getirebilir. Tabii altyapı konusunda duruma özel sistemler kurmanız gerekebilecektir. Elbette temelde bu işin CUDA veya ATI Stream’den çok az farkı var gibi görünüyor ama Tilera’nın çözümü kendisine has bağımsız sistemlerde de kullanılabildiği için daha işe yarar bir çözüm.

Java yongaları gelecek mi? 🙂

Elbette burada BYTE’ın yanılmıyorsam 1996’da kullandığı bir kapaktaki konuyu paylaşmazsam olmaz. Java dili, sanal makine üzerine çalışan ve bu sebeple her türlü platformda neredeyse hiç müdahale gerektirmeden çalışabilen bir sistem. Bununla ilgili hazırlanan kapak konusu muhtemel Java yongalarını konu alıyordu. Yani Java uygulamalarını kendisi işleyerek sistemdeki yükünü azaltacak bir şeylerden bahsediyoruz. Dile kolay 13 sene geçmiş, bilgisayarlarda adanmış Java yongaları yok fakat en azından bilişimciler uygulamalara yönelik hızlandırıcıları hızla keşfediyor ve bunların önemini daha iyi anlıyor.