Burak IŞIKLI :))

Paralel Programlama(Hesaplama) Temelleri

Posted in Distributed Systems, Parallel Computing by Burak IŞIKLI on 18 Ocak 2010

Paralel hesaplama en basit şekliyle şöyle tarif edebiliriz. Bir problemi çözmek için kaynaklaı eşzamanlı çoklu olarak kullanmaktır. Örneğin bir integrali hesaplamak için iki bilgisayarı veya iki işlemci(çekirdeği) kullanarak yapabiliriz. Bu örnekleri çoğaltabiliriz. Fakat paralel programlama yaparken dikkat edeceğimiz ilk önemli konulardan biri mimarilerdir. Bu konuda şöyle bir yasa vardır:
Moore Yasası:
Intel şirketinin kurucularından Gordon Moore’un 19 Nisan 1965 yılında Electronics Magazine dergisinde yayınlanan makalesi ile teknoloji tarihine kendi adıyla geçen yasa.
Her 18 ayda bir tümleşik devre üzerine yerleştirilebilecek bileşen sayısının iki katına çıkacacağını, bunun bilgisayarların işlem kapasitelerinde büyük artışlar yaratacağını, üretim maliyetlerinin ise aynı kalacağını, hatta düşme eğilimi göstereceğini öngören deneysel (ampirik) gözlem. Bu gözlem kendini doğrulamıştır. Bu durumda bu teoriye göre tasarım karmaşıklığı, performans artışının nasıl olacağı, ölü alanlarla ne yapacağız gibi engeller önümüze çıkıyor. İşte bu noktada paralellik önümüze çıkıyor.
Paralel sistemlerin birçok kullanım alanı vardır. Hava tahmini modelleme, termonükleer proses, fizik, kimya, biyoteknoloji, matematik, veri madenciliği, web indeksleme, veritabanları gibi birçok alanda kullanılıyor.
Paralel programlama başlamadan önce bazı dar boğazları aşmamız gerekiyor:

Bu konuyu 3 farklı şekilde çözebiliriz:
* Multiple Datapath(Çoklu Veriyolu)
* Multiple Memory Units(Çoklu Hafıza Birimleri)
* Multiple Processing Units(Çoklu İşlemci Birimleri)
Bu konuda sıkça kullanılan iki mimari mevcuttur.
1-) SIMD(Single Instruction Multiple Data): Bir kontrol birimini(bir direktif) farklı veri setlerinde işlem yapılarak sonuca ulaşılıyor. Yani bir programımız olurken, programlarımız aynı veri setini kullanıyor.
2-) MIMD(Multiple Instruciton Multiple Data): Farklı direktifleri farklı veri setlerine işlem yaparak sonuca ulaşılıyor. Yani birden fazla programımız farklı veya bölünmüş veri setinde işlem yapıyor.
Bu mimarilerden istediğimiz birini kullanarak darboğazı aşabiliriz. Programlamaya başlamadan önce bize uygun paralel mimarimizi seçtikten sonra hangi paralel algoritmayı kullanacağımıza karar vermemiz gerekiyor.

Paralel Algoritmalar:
– Data Paralel
– Task-Graph
– Work Pool
– Master Slave
– Pipeline
– Hybrid
Bu algoritmaları araştırarak detaylı bulabilirsiniz. Ben zamanı geldikçe anlatacağım. Bize uyan paralel algoritmayı da seçtikten sonra programlamaya geçebiliriz. Literatürde kullanabileceğimiz iki paralel programlama modeli vardır.
* Message-Passing
* Shared Adress Space

1-) Message-Passing
* Genelde büyük çaptaki bilgisayar sistemlerinde kullanılan program türü(Örneğin Cluster sistemlerde)
* Paylaştırılmış adres alanı
* Implicit paralelleme
* Proses etkileşimi veriyi gönderip alarak sağlanıyor
* Haberleşme mesajları gönderip alarak sağlanıyor
* Primitive
+ Send
+ Recieve
+ Blocking vs non-blocking
+ Buffered vs non-buffered
* En iyi bilinen bu konuda kullanılan kütüphanesi MPI(Message-Passing Interface)

2-) Shared Address Space
* Genelde SMP makinalarda kullanılır.(Multicore chip)
* Paylaşılmış adres alanı
* Thread
* Shmget/shmat unix operasyonları
* Explicit Paralelleştirme
* Proses/Thread haberleşmesi ile iletişim sağlanır.
* Memory oku/yaz ile haberleşme gerçekleşir.(Örnek x++;)
* En iyi bilinen bu konuda kullanılan kütüphanesi POSIX Thread(PThreads) API
+ Thread oluşumu ve silinmesi
+ Thread yönetimi
+ Senkronizasyon

Paralel Programlama Görünmez Tehlikeleri(Pitfalls)
– Senkronizasyon
+ Deadlock
+ Livelock
+ Fairness
– Verimlilik
+ Paralelleştirmeyi maksimum hale getirmek
– Güvenilirlik
+ Doğruluk
+ Debugging

2 Yanıt

Subscribe to comments with RSS.

  1. cansu said, on 17 Nisan 2012 at 21:13

    teşekkürler

  2. Cagan said, on 31 Ocak 2013 at 13:35

    Teşekkürler bilgilendirme için..

    Ellerinize sağlık çok açıklayıcı olmuş🙂


Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: