• Verimli paralel programlar yazabilmek için paralel olarak çalışacak programın üzerinde çalışacağı bilgisayar donanımı ve işletim sistemi hakkında bilgi sahibi olmamız gerekiyor. • Bu bölüm içerisinde paralel donanım ve yazılım mimarilerinden bahsedeceğiz.
Von Neumann Architecture (Mimarisi)
• İsmini Macar asıllı ünlü Matematikçi/Dahi John von Neumann’ dan almıştır. • ‘stored-program computer’ olarak da bilinmektedir. • Bu mimaride hem program komutları hem de veriler aynı elektronik bellekte tutulur
• Dört ana unsurdan oluşmaktadır. • Aritmetik ve Mantıksal Ünite (Aritmetic and Logic Unit) • Kontrol Ünitesi (Control Unit) • İlk ikisi CPU oluşturur. • Bellek (Memory) • Bağlantılar (interconnections) • Giriş ve Çıkış (Input/Output)
Von-Neumann Darboğazı (bottleneck)
• Bu mimarinin en büyük sorunu bilgisayarın komutları (instruction) okuyarak işlemesi için sürekli olarak işlemi askıya alıp hafızaya erişmesi gerekmektedir. • Bu da çok daha hızlı çalışabilecek olan ALU’nun sürekli komut okuma (fetch) ve çözümleme (decode) işlemleri süresince boşa beklemesine neden olmaktadır. • 2010 yılına bir işlemci bir fetch işlemi süresinde 100’den fazla komutu çalıştırabilecek hızlara sahipti.
İşlem (Process), Multitasking ve Thread
• İşletim Sistemleri (Operating Systems): Bilgisayar donanım kaynaklarını yöneten ve çeşitli uygulama yazılımları için yaygın servisleri sağlayan bir yazılımlar bütünüdür. • İşletim sistemleri hangi programların nasıl ve ne zaman çalışacağını belirler. • Aynı zamanda hafıza ve sabit disk I/O birimlerinin yönetiminden de sorumludur. • Process (İşlem): Genel anlamda işlemci üzerinde yürütülmekte olan her bir programa verilen genel isim.
Multitasking (Çoklu Görev)
• Multitasking: İşletim sisteminin eş zamanlı olarak birden fazla işlemi çalıştıra bilmesi yeteneğine verilen isim. • İşletim sistemi çalışmakta olan bir işlemi yarıda keserek çok kısa aralıklarda farklı işlemleri eş zamanlı olarak bir arada çalıştırabilir. • Aradaki geçiş süreleri (time-slice) olarak adlandırılır.
Threads (İş Parçacıkları)
• Thread: Lightweight process. • Thread’ler bir programın paralel ve birbirinden bağımsız işlemler yapmasını sağlar. • İki tip thread yapısı vardır: • User-level Threads • Kernel-level Threads
Cache Memory (Önbellek)
• Von-Neumann bottleneck çözümü için en yaygın olarak kullanılan yöntemlerden bir tanesi. • Cache Bellek: CPU içinde bulunan yüksek hızlı hafıza yapılarına verilen isimdir. (İşlemci önbelleği) • Sistem belleğinden gelen veriler çoğunlukla CPU’nun hızına yetişemez işlem hızımızı artırmak için kullanıyoruz.
Caching Yöntemleri
• İlişkilendirmeye göre ön bellek çeşitlerini üçe ayırabiliriz: • Doğrudan ilişkili ön bellek (Direct mapped cache) • Tam ilişkili ön bellek (Fully Associative cache) • Kümeli ilişkili ön bellek (Set Associative cache)
Virtual Memory (Sanal Bellek)
• Cache Bellekler işlemci ve hafıza arasında bir geçiş sağlamakta ve bilgisayarlarımızın daha hızlı işlem yapabilmesine olanak sağlamaktadır. • Fakat bilgisayarımızın ana belleğine (RAM) sığamayacak kadar büyük ölçekli bir programı nasıl çalıştıracağız? • Virtual Memory (Sanal Bellek) : Fiziksel Belleğin yetersiz kaldığı durumlarda, uygulamaların ihtiyaç duyduğu bellek ihtiyacını sabit diski kullanarak karşılayan bilgisayar tekniğidir.
• Sanal bellek için disk üzerinde ayrılan bu disk alanına swap space (takas alanı) da denilir. • Sanal Bellek, cache bellekler gibi veri yada program bloklarını yönetmek için kullanılırlar. • Genellikle bu bloklara page (sayfa) adını veriyoruz.
Sanal Bellek Örneği
Örneğin, ana belleği 32 MB olan bir bilgisayarda, 300 MB’lık bir program çalıştırılmak istenirse, bu programın tümünün RAM’e yerleşmesi mümkün değildir. • Bu durumda sanal (istemsel) sayfalama yöntemi kullanılarak, örneğin ana bellek 4 KB’lık sayfalara bölünerek, çalıştırılmak istenen programın sadece gerekli işlemlerine ait sayfalar ana belleğe yüklenir. • Geri kalanı ise sanal bellekte bekler ve gerekli olduğunda RAM’e getirilir. • İşletim sistemi ve bilgisayar donanımının sayfalama ve kesimleme yöntemlerini desteklemesi gerekmektedir.
Pipelines (Boru Hattı Mimarisi)
• İşlemci üzerinde komutların paralel (eş zamanlı olarak) çalışması prensibine dayanmaktadır. (Instruction Level Parallelism). • Zamanı kısaltarak toplam işi arttıran, toplu komutların daha hızlı çalışmasını sağlayan günümüzde daha hızlı işlemci tasarımında kullanılan önemli bir yöntemdir. • Bir komut 4 temel bileşenden oluşmaktadır: • FI : Fetch Instruction (Git Getir) • DA: Decode and calcultale effective address (Çözümleme) • FO: Fetch Operand (Belekten Veri okuma) • EX: Execute (İşlemi gerçekleştir – Yaz) • Her zaman aralığında bir bileşen icra edilir.
Paralel Donanım Mimarileri
• Flynn’in Klasik Taksonomisi (Flynn Sınıflandırması. 1966 yılında Michael J. Flynn tarafından yapılan bilgisayar mimarisinin sınıflandırmasıdır.) • Paralel Donanım Mimarileri • SISD (Single Instruction, Single Data Stream) Tek Komut Tek Veri Akışı • SIMD (Single Instruction, Multiple Data Stream) Tek Komut Çok Veri Akışı • MISD (Multiple Instruction, Single Data Stream) Çok Komut Tek Veri Akışı • MIMD (Multiple Instruction, Multiple Data Stream) Çok Komut Çok Veri Akışı • olarak 4’e ayrılırlar
SISD (Tek Komut Tek Veri Akışı)
• Klasik Seri olarak çalışan bilgisayarlardır. • Von Neumann mimarisi örnek olarak verilebilir.
SIMD (Tek Komut Çok Veri Akışı)
• Bu sistemler Paralel sistemlerdir. • Çoklu veri akışları üzerinde aynı komutu paralel olarak işleyebilen sistemlerdir. • Single Control Unit, Multiple ALU (Tek Kontrol Ünitesi Çoklu Aritmetik Lojik Birim)
SIMD Sistemleri
• Vector Processors (Vektör İşlemciler):
• Bu tip işlemciler dizi yada vektör şeklindeki veri üzerinde paralel olarak çalışabilme kabiliyetine sahiptirler. • Örneğin veri yolu genişliği boyutundaki bir diziyi tek bir (instruction cycle) komut döngüsü süresinde işleyebilir.
• Grafik İşlemcileri (GPU: Graphics Processing Units):
• Graphic processing pipeline kullanılarak piksel dizilerinin ve grafik işlemlerinin paralel olarak işlenebilmesini sağlamaktadır.
MISD (Çok Komut Tek Veri Akışı)
• Tek bir veri üzerinde birden fazla komut setinin eşzamanlı olarak çalıştırılması prensibine dayanmaktadır.
MIMD (Çok Komut Çok Veri Akışı)
• MIMD sistemler birbirinden tamamen bağımsız ve paralel olarak çalışabilen çekirdeklere (core) sahiptirler. • Her bir core kendisine ait bir ALU ve Kontrol Ünitesine sahiptir. • SIMD sistemlerin aksine MIMD sistemler asenkron olarak çalışabilirler. • Birçok MIMD sistemde global bir saat darbesi (clock pulse) yoktur. • Bunun yerine kullanıcı sistemi kendi arasında senkronize etmelidir.
MIMD Sistemler
• Bu sistemler iki temel gruba ayrılabilirler:
• Shared-memory Systems (Hafıza Paylaşımlı Sistemler) • Uniform Memory Access (UMA) (Tekdüze Bellek Erişimi) • Nonuniform Memory Access (NMA) (Tekdüze olmayan Bellek Erişimi) • Distiributed-memory Systems (Dağıtık Bellek Sistemleri) • Bu sistemlere en iyi örnek işlemsel kümelerdir (clusters). Birbirlerine network ağı ile bağlı olan PC’lerden oluşan küme sistemleri gibi • Hadoop (Hadoop Distributed File System (HDFS) on Java)
Bir sonraki Paralel programlama konusu için — Tıklayınız