• Paralel programlama (Paralel Hesaplama), bir bilgisayar donanımı üzerinde belirli işlemlerin dağıtılıp eş zamanlı olarak çalışması mantığına dayanmaktadır. • Paralel bilgisayarlarda programlama için işletim sistemi seviyesinde ve/veya programlama dili seviyesinde pek çok yazılım sistemi geliştirilmiştir. • Bu sistemler, problemin parçalara bölümlenmesini ve işlemcilere atanmasını sağlayan çeşitli mekanizmalar içermelidir.
Gelin birde seri hesaplamaya bakalım.
Seri Hesaplama Nedir?
• Geleneksel olarak, yazılımlar seri hesaplama için yazılmıştır. • Yazılım bilgisayar üzerindeki tek Merkezi İşlem Birimi (CPU) üzerinde çalışmaktadır. • Problem komutlara ayrılmıştır. • Komutlar ardışık olarak çalıştırılmaktadır. • Herhangi bir anda sadece bir komut çalıştırılabilmektedir.
Peki ya o zaman paralel hesaplama nedir dersek ?
Paralel Hesaplama Nedir?
• Bir problemi çözmek için çok sayıdaki hesaplama kaynağını aynı anda kullanmaktır. • Program çok sayıda CPU üzerinde çalışmaktadır. • Problem eşzamanlı olarak çözülebilecek komutlara ayrılır. • Her bir parça kümesi komutlara ayrılır. • Her bir parçanın komutları aynı anda farklı CPU‘lar üzerinde çalıştırılır.
Moore Yasası
• Moore Yasası, Intel şirketinin kurucularından Gordon Moore’un 19 Nisan 1965 yılında ortaya attığı bir yasa • Moore’a göre, 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ı söylüyor.
Paralel Programların Gereksinimi
• Günümüzde hesaplanması oldukça uzun süren problemlerin çözümlenebilmesi için paralel hesaplama yöntemlerine ihtiyaç duyuyoruz. • İnsan genomunun (Gen şifrelerinin) çözümlenmesi, • Medikal görüntüleme sistemleri, • Hızlı ve tutarlı arama motorlarının geliştirilmesi, • Kısa sürede yada anlık trafik ve meteoroloji tahminlerinin hesaplanması, • Yapay zekaya sahip karar destek sistemleri veya gerçekçi oyun motorlarının kodlanması • gibi problemlerin çözümünde yüksek hesaplamaya ihtiyaç duyuyoruz.
Paralel Programlama Nasıl Fayda Sağlıyor?
Paralel programlama bize
• Zaman ve paradan tasarruf. • Kompleks ve Büyük ölçekli problemlerin çözümlenmesi. • Eşzamanlı olarak veri işlemek. • Problemi bilgisayar ağları vasıtasıyla dağıtarak problemleri farklı noktalarda kolektif olarak çözmek. • Paralel donanımların daha iyi anlaşılması.
gibi faydalar sağlar.
Paralel Programlama Örneği
• Bir örnek ile açıklayalım. • N adet değerin bir fonksiyon ile hesaplanarak toplanması: • Klasik yöntem ile (Serial code)
sum = 0; for (i = 0; i < n; i++) { x = Compute next value(. . .); sum += x; }
• Sonrasında farz edelim ki p adet core’a sahip bir bilgisayarımız olsun ve p<
my sum = 0; my first_i = . . . ; my last_i = . . . ; for (my_i = my_first_i; my_i < my_last_i; my_i++) { my_x = Compute next value(. . .); my_sum += my_x; }
• my_ ifadesi her bir core için çalışmaktadır.
N=24 ve p=8 olduğu durumda bir seri içindeki değerleri toplayalım • 1, 4, 3, 9, 2, 8, 5, 1, 1, 6, 2, 7, 2, 5, 0, 4, 1, 8, 6, 5, 1, 2, 3, 9, • Her bir core için bu değerlerin (my_sum) toplamı:
core – 0 1 2 3 4 5 6 7
my_sum – 8 19 7 15 7 13 12 14
• Son olarak bir master core ile tüm core’lar da hesaplanan değerleri (my_sum) toplayarak toplam değeri hesaplamamız gerekli:
if (I’m the master core) { sum = my_x; for each core other than myself { receive value from core; sum += value; } else { send my_x to the master; }
• Bu değeri de 8+19+7+15+7+13+12+14=95 olarak hesaplayabiliriz. • Bu yöntem ile master core 0 diğer 7 adet core’dan gelen veriyi toplayarak genel toplamı hesaplayacaktır. • Bu işlemi seri olarak yapsaydık 24 adımda tamamlayabilirdik. • Paralel olarak yaptığımızda bu görev 3+ 7=10 adımda (instruction cycle) da tamamlanacaktır.
Farkları Nedir?
• Her iki paralel yöntem arasındaki fark core sayısı artıkça daha belirgin hale gelmektedir. • Örn: 1000 core’a sahip olan bir sistemde birinci yöntemin işlemi tamamlaması 999 adım sürmesine rağmen ikinci yöntem bu işlemi sadece 10 adımda tamamlayacaktır. (neredeyse 100 kat daha hızlı bir şekilde) • Paralel programların verimliği senkronizasyon ve geliştirilen algoritmaya oldukça bağımlıdır.