Yiğit TURAK

Paralel Programlama ile Sıralama Algoritmaları

| Temmuz 4, 2011 |

Tarih boyunca bilimin gelişmesi ve insanların hep daha iyiyi arzulama istekleri kullanılan araç ve gereçlerden hep daha iyisi istenmektedir. Bilgisayar sistemlerinde de aynı durum söz konusudur. Yapılan araştırmalar ve testler çok güçlü bilgisayar sistemlerine ihtiyaç duymaktadır. İşlemci hızını artırmak, bellek miktarını artırmak gibi çözümler bilgisasayarlardaki işlem hızını belirli bir oranda artırsa da yine de istenilen kapasiteye ulaşamamaktadır. Bu duruma çözüm olarak bilgisayar sistemlerini paralel çalıştırma yöntemi bulunmuştur. Paralel çalıştırma yöntemiyle birlikte DNA çözümlemeleri, hava durumu tahminleri ve astronomi ile ilgili hesaplamalar yapılabilir duruma gelmiştir.

Bunların yanı sıra bilgisayar sistemlerini en çok zorlayan algoritmalardan çeşitlerinden birisi de sıralama algoritmaları (sorting algorithm)’dır. Sıralama algoritmaları düşük boyutlu dizilerde hesaplamalar çok hızlı olsa da çok büyük boyutlu dizilerin sıralamalarında bilgisayar sistemleri zorluk yaşamaktadır. Bu sebeple sıralama algoritmaları da paralel sistemler ile çalıştırılmaktadır.

Paralel sistem türlerinden Message Passing Interface (MPI) ile Kova (Bucket) sıralama algoritmalarını beraber kullandım. Bu algoritmanın çalışma prensibi aşağıdaki resimde de görüldüğü gibi:

1. Master oluşturulur ve bu oluşturulan Master verilen sayı dizisini onlarlı sayı sistemine göre kovalara atar.

2. Master benim yazdığım programda 2 adet Slave yaratıyor ve daha önceden oluşturduğu kovaları bu Slave’lere paylaştırıyor.

3. Slavler aldıkları kovaların içini sıraladıktan sonra sırayla geri Master’a gönderiyor.

4. Master aldığı kovaları mesaj sırasına göre sıralıyor.

5. Sıralanmış kovaların içeriklerini okuyor.
#include
#include
#include

//kovaların icini bubble sort ile siraliyoruz
void bubbleSort(int dizi[], int size){
int i, j, hafiz;
for(i=size-1; i>0; i--){
for(j=0; j dizi[j+1]){
dizi[j] = dizi[j+1];
dizi[j+1] = hafiz;
}
}
}
}
//dizinin maksimum elemanini buluyoruz
int maxFnc(int dizi[], int size){
int i, temp;
int max = -100;
for(i=0; i

Yorumlar

Cevapla





    Anın Sözü

    Takip etmesi daha kolay

    Arama