ugurercan@akdeniz.edu.tr,hakanakar@akdeniz.edu.tr,akocer@akdeniz.edu.tr



Benzer belgeler
Paralel Programlamada Kullanılan Temel Algoritmalar

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#6: AZALT VE FETHET YÖNTEMİ

Paralel Hesaplama ve MATLAB Uygulamaları

VERİ YAPILARI VE PROGRAMLAMA

Yrd. Doç. Dr. A. Burak İNNER Bilgisayar Mühendisliği

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

Tarih Saat Modül Adı Öğretim Üyesi. 01/05/2018 Salı 3 Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Algoritmalar. Doğrusal Zamanda Sıralama. Bahar 2017 Doç. Dr. Suat Özdemir 1

Algoritma Geliştirme ve Veri Yapıları 2 Veri Modelleri. Mustafa Kemal Üniversitesi

Algoritmalar. Sıralama Problemi ve Analizi. Bahar 2017 Doç. Dr. Suat Özdemir 1

Algoritmalar ve Karmaşıklık

BIL222 Veri Yapıları ve Algoritmalar

Paralel ve Sıralı Brute Force Algoritmasının Karşılaştırılması

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

BİL 542 Paralel Hesaplama. Dersi Projesi. MPJ Express Java Paralel Programlama

3.Hafta Master Teorem ve Böl-Fethet Metodu

Bilgisayar programlamanın üç temel mantık yapısından biridir. Diğer ikisi ise Seçilim(Selection) ve Döngü(Loop, Iteration)dür.

BİL-341 ALGORİTMALAR BÜYÜK O NOTASYONU AHMET ATAKAN atakanahmet@hotmail.com KIRGIZİSTAN-TÜRKİYE MANAS ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

Yrd. Doç. Dr. Caner ÖZCAN

Azalt ve Fethet Algoritmaları

Yrd. Doç. Dr. Caner ÖZCAN

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#1: ALGORİTMA KAVRAMI

F(A, N, K) // A dizi; N, K integer if N<0 then return K; if A[N]>K then K = A[N]; return F(A, N-1, K);

Alıştırma 1: Yineleme

BIP116-H14-1 BTP104-H014-1

Algoritma Geliştirme ve Veri Yapıları 10 Graf Veri Modeli. Mustafa Kemal Üniversitesi

PARALEL HESAPLAMA ÇAĞRI GİDER ENES BİLGİN

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

Bilgisayar Mimarisi Nedir?

YZM 2116 Veri Yapıları

2. (x 1 + x 2 + x 3 + x 4 + x 5 ) 10 ifadesinin açılımında kaç terim vardır?

Algoritmalar. DERS 3 Böl ve Fethet(Divide and Conquer) İkili arama Sayı üstelleri Fibonacci sayıları Matriks çarpımı Strassen in algoritması

VERİ YAPILARI. GRAPH LAR Düzce Üniversitesi Teknoloji Fakültesi ÖĞR.GÖR.GÜNAY TEMÜR 1

BULANIK MANTIK VE SİSTEMLERİ BAHAR DÖNEMİ ÖDEV 1. Müslüm ÖZTÜRK Bilişim Teknolojileri Mühendisliği ABD Doktora Programı

BÖLÜM III: Şebeke Modelleri. Şebeke Kavramları. Şebeke Kavramları. Şebeke Kavramları. Yönlü Şebeke (Directed Network) Dal / ok

Bilgisayar Mühendisliği. Bilgisayar Mühendisliğine Giriş 1

SORULAR. 2. Noktaları adlandırılmamış 6 noktalı kaç ağaç vardır? Çizerek cevaplayınız.

b) Algoritmanızın en kötü durumda işlem zamanını asimptotik olarak bulunuz

Algoritma Geliştirme ve Veri Yapıları 1 Temel Algoritma Kavramları. Mustafa Kemal Üniversitesi

Algoritmaların Karşılaştırılması. Doç. Dr. Aybars UĞUR

Çizgeler (Graphs) Doç. Dr. Aybars UĞUR

EM205 26/9/2014. Programlamaya giriş Algoritmalar. Amaçlar

Bölüm 10. Eşzamanlılık (Concurrency) ISBN

Aktivite 8. Saati Yen Sıralama ağları

GENETİK ALGORİTMA ÖZNUR CENGİZ HİLAL KOCA

BMB204. Veri Yapıları Ders 9. B+ Ağacı, Hash, Heap. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

Bilgisayar Mimarisi ve Organizasyonu Giriş

PROGRAMLAMAYA GİRİŞ VE ALGORİTMA «YTÜROK» EĞİTMEN:REHA ÖZGÜR ŞİMŞEK

Bilgisayar Mühendisliğine Giriş. Yrd.Doç.Dr.Hacer KARACAN

Algoritmalar. Arama Problemi ve Analizi. Bahar 2016 Doç. Dr. Suat Özdemir 1

ALGORİTMA VE PROGRAMLAMA I

Algoritma Analizi. Özelliklerinin analizi Algoritmanın çalışma zamanı Hafızada kapladığı alan

YZM 2116 Veri Yapıları

Büyük Veri Analitiği (Big Data Analytics)

Günümüz bilgi toplumunda bilgisayar, her alanda kendine yer edinmiş ve insana, bir çok işlemde yardımcı olarak büyük kolaylık sağlamaktadır.

Graflar bilgi parçaları arasındaki ilişkileri gösterirler.

10.Hafta Minimum kapsayan ağaçlar Minimum spanning trees (MST)

Week 9: Trees 1. TREE KAVRAMI 3. İKİLİ AĞAÇ DİZİLİMİ 4. İKİLİ ARAMA AĞACI 2. İKİLİ AĞAÇ VE SUNUMU > =

Algoritmalara Giriş Ekim 17, 2005 Massachusetts Institute of Technology Profesörler Erik D. Demaine ve Charles E. Leiserson Dağıtım 15.

YZM 2116 Veri Yapıları

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#9: AÇGÖZLÜ ALGORİTMALAR

Algoritma ve Akış Diyagramları

Max - Min Heap Tree (Max ve Min Yığıt Ağaçları) Veri Yapıları ve Algoritmalar 2 - Mustafa EGE Ders Notları

PERFORMANCE COMPARISON OF KARATSUBA AND NIKHILAM MULTIPLICATION ALGORITHMS FOR DIFFERENT BIT LENGTHS

YZM 2116 Veri Yapıları

Msg Görüntülerinden NDVI Ürünlerinin Seri ve Paralel Hesaplatılması

MATLAB PARALEL HESAPLAMA ARACI İLE A* ALGORİTMASININ ROTA PLANLAMA İÇİN ANALİZİ

BİLGİSAYAR PROGRAMLAMA Araş. Gör. Ahmet ARDAHANLI. Kafkas Üniversitesi Mühendislik Fakültesi

127 - Twoing Algoritması ile Sınıflandırma Kalp Hastalığı Uygulaması MEHMET AKİF ERSOY ÜNİVERSİTESİ İLHAN UYSAL MEHMET BİLEN SAMİ ULUKUŞ

Ağaç (Tree) Veri Modeli

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

ÜNİT E ÜNİTE GİRİŞ. Algoritma Mantığı. Algoritma Özellikleri PROGRAMLAMA TEMELLERİ ÜNİTE 3 ALGORİTMA

DENİZ HARP OKULU BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

İşletim Sistemlerine Giriş

BM-311 Bilgisayar Mimarisi

T.C. MARDİN ARTUKLU ÜNİVERSİTESİ MİDYAT MESLEK YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI (UZAKTAN ÖĞRETİM) ÖNLİSANS PROGRAMI Eğitim Öğretim Yılı

Temel Bilgisayar (Basic Computer) Yazılım (Software)

Bilgisayarlara ve Programlamaya Giriş (COMPE 101) Ders Detayları

Öğr.Gör. Gökhan TURAN Gölhisar Meslek Yüksekokulu

Graf Veri Modeli. Düğümler kümesi. Kenarlar kümesi

Yazılım Mühendisliğine Giriş

Veri Yapıları Laboratuvarı

Doğu Akdeniz Üniversitesi Bilgisayar ve Teknoloji Yüksek Okulu Bilgi teknolojileri ve Programcılığı Bölümü DERS 1 - BİLGİSAYAR VE ÇEVRE ÜNİTELERİ

Bilişim Teknolojilerine Giriş

VERİ YAPILARI DATA STRUCTURE GİRİŞ

Dr. Fatih AY Tel: fatihay@fatihay.net

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu

Problem Set 1 Çözümler

MAK 1005 Bilgisayar Programlamaya Giriş. BİLGİSAYARA GİRİŞ ve ALGORİTMA KAVRAMI

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

3. Bölüm Algoritmalar

YZM 2116 Veri Yapıları

Programlama Nedir? Bir bilgisayar bilimcisi gibi düşünmek ve programlama ne demektir?

Algoritmalar ve Programlama. Algoritma

Apriori Algoritması. Konu İçeriği. Giriş. Tarihçesi. Apriori Nedir? Örnekler. Algoritma. Açıklama. Weka İle Kullanımı. Kaynakça.

ALGORİTMA VE PROGRAMLAMA I

Transkript:

Paralel Programlamada Kullanılan Temel Algoritmalar Uğur Ercan 1, Hakan Akar 1, Abdülkadir Koçer 2 1 Akdeniz Üniversitesi, Enformatik Bölüm Başkanlığı, Antalya 2 Akdeniz Üniversitesi, Teknik Bilimler MYO, Antalya ugurercan@akdeniz.edu.tr,hakanakar@akdeniz.edu.tr,akocer@akdeniz.edu.tr Özet: Bilgisayar donanımları, yazılımların ihtiyaçlarına cevap vermekte zorlanmaktadırlar. Donanım parçalarındaki hafıza ya da bit derinliği arttırılabilirken işlemci hızı neredeyse fiziksel limitlere ulaşmıştır. Donanım üreticileri fiziksel limitlere dayanan işlemci hızı yerine, bilgisayarlarda kullanılan işlemci sayısını arttırmaktadırlar. Bilgisayar yazılımlarının çok işlemcili bilgisayarlardan daha verimli yararlanabilmesi için paralel olarak programlanması gerekmektedir. Bir yazılımın nasıl paralel olarak programlanabileceği yazılımın kendisiyle doğrudan ilgilidir. Genelde her yazılım çeşitli algoritmalarla paralelleştirilebilir. Günümüzde paralel programlamada kullanılan 3 temel algoritma bulunmaktadır. Bunlar; böl ve yönet, paralel işaretçi teknikleri ve randomizasyon. Sonuç olarak her paralel programlama algoritmasının kendine özgü kullanım alanı bulunmaktadır. Hangi algoritmanın kullanılacağı ya da programın paralel programlamaya uygun olup olmadığı programın yapısıyla doğrudan ilgilidir. Çok çekirdekli işlemcilerin kişisel ve taşınabilir bilgisayarlarda dahi yaygınlaşması paralel programlamaya duyulan ihtiyacı ve bu alanda yapılan araştırmaların önemini her geçen gün arttırmaktadır. Anahtar Sözcükler: paralel programlama, algoritma, böl ve yönet, parallel işaretçi teknikleri, randomizasyon Basic Algorithms Used in Parallel Programming Abstract: Computer Hardware usually cannot meet the needs of software. While memory amount or bit depth in computer hardware can be increased, processor speed has almost reached the physical limits. Hardware manufacturers increase the number of processors used in computers instead of processor speed based on physical limits. Computer software should be programmed in parallel in order to benefit from multi-processor computers more efficiently. How to develop a parallel programmed software is directly related with the software itself. Almost all software can be parellalizable with the help of several algorithms. There are three basic parallel programming algorithms which are divide and conquer, parallel pointer techniques and randomization. As a result, every parallel programming algorithm has specific use area. Presence of multi-core processors even in personal and portable computers increases the need and importance of parallel programming day by day. Keywords: parallel programming, algorithm, divide and conquer, parallel pointer techniques, randomization.

1. Giriş Günümüzün hızla gelişen teknolojisi bilgisayarlar, yazılımların ihtiyaçlarına cevap vermekte zorlanmaktadırlar. Yazılımlar her geçen gün daha fazla hafıza, daha hızlı grafik kartı ve daha hızlı bilgisayarlara ihtiyaç duymaktadırlar. Daha fazla yarıiletken kullanarak hafıza arttırılabilmektedir. Fakat bilgisayarların hızı fiziksel limitlere dayandığı için saat hızını arttırmak işlemcinin yanlış işlem yapmasına ya da ısınarak yanmasına sebep olmaktadır. Bu sorunu çözmek için mühendisler daha fazla işlemciyi paralel olarak aynı iş üzerinde çalışacak şekilde üretmeyi başarmışlardır. Günümüzde akıllı cep telefonlarında bile çift çekirdekli işlemciler oldukça yaygın olarak kullanılmaktadır. Bu paralel işlemci mimarisini etkin olarak kullanabilmek için yazılımların paralel olarak programlanması gerekmektedir. Peki, paralel programlama nedir? Yapılacak olan işlemin tek bir bilgisayarda ve tek işlemci üzerinde çalıştırılmasına Seri Programlama denir. Burada aynı anda sadece tek bir işlem yapılabilmektedir. Bir işlem bitmeden diğer bir işlem çalıştırılamaz. Seri programlamanın çalışma mantığı, Şekil- 1 de gösterilmiştir[1]. Şekil 1. Seri Programlama çalışma mantığı Seri programlamada her bir işlem sırayla işlendiği ve her bir işlem adımı için ayrı bir zaman ihtiyacı olduğu için, seri programlamada performans ve verimlilik gibi kısıtlamalar gözlenmektedir. Paralel programlama ise, bir problemi çözmek için birden fazla bilgisayar kaynaklarının aynı anda kullanılmasıdır. Bir işlem çoklu işlemci kullanarak çalıştırılır ya da çoklu çekirdek teknolojisine sahip işlemci üzerinde gerçekleştirilir. Bir problem parçalara ayrılarak aynı zamanda çözülebilir. Her parça farklı işlemci üzerinde aynı anda çalıştırılır. Paralel programlamanın çalışma mantığı, Şekil-2 de gösterilmiştir[1]. Şekil 2. Paralel Programlama çalışma mantığı Bilgisayarlar genel olarak seri yani her defasında bir komutu yerine getirecek şekilde programlanırlarsa da, performans ve etkinliğin artırılması amacıyla paralel programlama geliştirilmiştir. Paralel programlama işleme sürecini parçalara bölmekte, her bir komut eş zamanlı olarak farklı işlemciler (microprocessors) üzerinde çalıştırılmaktadır. Bu işlemciler tek bir makine üzerinde olabileceği gibi bir ağ ile bağlı bilgisayarlar üzerinde de olabilmektedir. Böylece her bir işlemciye düşen işlem sayısı azaltılarak işlem süresini azaltmak mümkün olmaktadır [2]. Paralel programlama aracılığıyla daha büyük problemler daha kısa sürelerde çözüme ulaştırılmakta ve performans arttırılabilmektedir. Paralel programlama yöntemi, bilimsel gelişmelerle beraber ortaya çıkan karmaşık ve büyük problemlerin çözümünde problemlerin farklı kısımlarını farklı işlemcilere bölüştürerek gereksinim duyulan hızlanma ve etkinliğin sağlanmasında yardımcı olmaktadır [3]. Paralel programlamada bir problemin çözümü aşağıdaki adımlarla geçekleştirilir; 1)Problem parçalara bölünür, 2)Bu parçalar eşit zaman aralıklarına bölünür. 3)Her problem parçası farklı işlemcilerde, aynı anda senkronize olarak işleme alınır ve

programlama gerçekleştirilir. Paralel programlamanın en temel tercih sebepleri bellek kullanımını en uygun şekilde gerçekleştirerek bilgisayardaki yavaşlamaları engellemesi ve tek işlemcinin yerine çoklu (çift, dört, vs.) işlemci kullanılması ile sıcaklık artışının engellenmesidir. Bu sayede bilgisayarlar hesaplamaları hızlı bir şekilde yapabilmekte ve bu bilgisayarda performans artışı sağlamaktadır. 1.1. Paralel Programlamanın Tarihçesi Paralellik ile ilgili ilk fikirler, ilk olarak 1958 de IBM araştırmalarında nümerik hesaplamaların yapılabileceği fikrini ortaya atan John Cocke ve Daniel Slotnick ile ortaya çıkmıştır. 1960 a gelindiğinde Novosibirsk Matematik Enstitüsünden (IMN) E. V. Yevreinov un birbirine bağlantılı şekilde programlanabilen paralel mimarileri tasarlamasıyla paralel kavramı yeni bir boyut kazandı. 1964 de ise Daniel Slotnick Lawrence Livermore National Laboratuarlarında kullanılmak üzere büyük-paralel makineleri geliştirdi. 1967 de Gene Amdahl ve Daniel Slotnick AFIPS Konferansında paralel işlemlerin olasılığıyla ilgili bir makale yayınladılar. Bu paralellik ile ilgili olan tartışma konusu daha sonra Amdahl Kanunu olarak adlandırıldı. 1983 te Goodyear Aerospace NASA Goddard için Massively Paralel Processor (MPP) geliştirdi. 1985 te David Gelernter Linda paralel programlama sisteminin temellerini ortaya koydu. 1986 da Parallel Virtual Machine (PVM) projesi dağıtık bilgisayarlarda gerekli olan yazılımların kullanılabilmesi için geliştirildi. 1993 te IBM, RISC RS/6000 işlemcisine dayalı ilk SP1 Powerparallel sistemi piyasaya sürdü [2]. 2. Paralel Programlama Algoritmaları Bugünün çoğu algoritmaları ardışık şekilde işler diğer bir ifade ile seri programlama mantığındadır, yani, her basamağın tek bir işlemden oluştuğu bir dizi adımı belirtirler. Bu algoritmalar temel olarak ardışık bir biçimde işlemleri yürüten bugünün bilgisayarlarına uyumludur. Araştırmacılar paralel bilgisayarlarda ve/veya işlemcilerde bir adımda çoklu işlemleri yürüten bilgisayarlar ve programlar geliştirerek daha uygun maliyetli, daha hızlı ve verimli gelişmeler hedefliyorlar. Paralel bir makinede ya da işlemcide bir işlemi etkili bir şekilde çözebilmek için, her adımda çoklu işlemleri belirleyebilen bir algoritma tasarlamak gereklidir. Örneğin, n elemanlı bir A dizisinin toplamını hesaplamayı ele alalım. Standart algoritma, toplamı dizinin ilk elemanından son elemanına kadar tek bir geçiş yaparak, o zamana kadar görülen sayıları işleyen bir toplamı tutarak hesaplama işlemini gerçekleştirir. Buna karşın paralel olarak çok sayıda işlemi yürüten toplamı hesaplamak için bir algoritma tasarlamak zor değildir. Paralel bir bilgisayarda, paralel bir algoritmadaki işlemler farklı işlemciler tarafından eş zamanlı olarak yürütülebilir. Dahası, tek işlemcili bir bilgisayarda bile bir algoritmadaki paralellik çoklu işlevsel birimler, ardışık düzendeki işlevsel birimler, ya da ardışık düzenli bellek sistemleri kullanarak işletilebilir. Bu nedenle, çoklu işletimleri yürütmek için bir algoritmadaki paralellik ve herhangi bir belirli bilgisayarın imkânları arasında bir ayrım yapmak önemlidir. Tabi ki, paralel bir algoritmanın her tür bilgisayarda verimli bir şekilde çalışması için, algoritma en az bilgisayar kadar çok paralellik içermelidir, aksi halde kaynaklar yararsız kalabilir. Fakat karşıt her zaman geçerli olmaz, bazı paralel bilgisayarlarda algoritma çok sayıda

paralellik içerse bile tüm algoritmaları verimli olarak yürütemez. Bilgisayarlar paralelliğin bazı formlarını kapsadıkça, algoritma tasarımındaki vurgu seri algoritmalardan paralel algoritmalara yöneldi. Bu alandaki gelişmeler şu şekilde sıralanabilir; Hesaplamanın paralel modelleri, Paralel algoritmik teknikler, Paralel karmaşıklık teorisi. Paralel programlamada aynen seri programlamada olduğu gibi çeşitli algoritma teknikleri vardır. Bu teknikler karşılaşılan problemin durumuna göre farklılıklar gösterir. Bu algoritma tekniklerinden en çok kullanılanı ve bilineni böl ve yönet, paralel işaretçi teknikleri ve rastgeleleştirme algoritmalarıdır. 2.1. Böl ve Yönet (Divide & Conquer) Böl ve Yönet terimi basitçe büyük toplulukları küçüklere ayırmak ve onları yönetmek demektir. Bu eski yöneticiler ve krallar tarafından kendi vilayetlerini yönetmek ve hatta yeni yerler fethetmek için kullanılan teknikti. Vilayetleri din, iş, kast ya da mezhep gibi farklı adlara bölerlerdi[4]. Böl ve Yönet algoritması, orijinal problemi daha kolay çözmek için, problemi alt problemlere bölen, bölünen alt problemleri çözen, orijinal problemin çözümünü oluşturmak için, alt problemlerin çözümlerini birleştiren bir algoritmadır[5]. Böl ve yönet paradigması program modülaritesini yükseltir, genellikle basit ve verimli algoritmalara yol açar. Bu nedenle sıralı algoritma tasarımcıları için güçlü bir araç olduğu kanıtlanmıştır. Böl ve yönet paralel algoritma tasarımı daha da önemli bir rol oynamaktadır. İlk adımda oluşturduğunuz alt problemler genellikle bağımsız olduğundan, bunlar paralel olarak çözülebilir. Genellikle alt problemler özyinelemeli olarak çözülür ve böylece bir sonraki bölme adımında paralel olarak çözülecek daha çok alt problem elde edilir[5]. Ancak bilinmelidir ki, yüksek derecede bir paralel algoritma elde etmek için, böl ve yönet in bölme ve birleştirme adımlarının paralelize (birlikte yürütülmesi) olması gerekir. Orijinal problemi mümkün olduğunca çok sayıda alt probleme bölerek, paralel olarak çözmek paralel algoritmalarda oldukça yaygındır. Paralel Böl ve Yönet örneği için, sıralı Merge Sort algoritması düşünün. Merge sort, n adet girilmiş elemanı alır ve onları sıralayarak geri verir. Bu algoritma, n elemanlı bir dizi iki parçaya bölünüp, bölünen her dizi öz yineli olarak sıralanıp ve sıralanmış yarı diziler tekrar birleştirilerek çalışır[5]. Merge Sort un sıralı çalışma zamanını analiz etmek için, n/2 elamanlı iki sıralı dizi O(n) sürede birleştirilebileceği unutulmamalıdır. Dolayısıyla çalışma süresi belirtilebilir, Burada çözüm Paralel bir algoritma olarak tasarlanmış olmasa da, merge sort onları paralel yapılmasına olanak tanıyacak iki bağımsız öz yineleme olduğundan, doğal paralelliği vardır[5]. Algoritma: mergesort(a) 1. if ( A = 1) then return A 2. else 3. in parallel do 4. L := mergesort(a[0.. A /2)) 5. R := mergesort(a[ A /2.. A )) 6. return merge(l,r) Beklendiği gibi, bu algoritmanın çözüm için gerekli olan zaman karmaşıklığı W(n)=O(n logn) dir, sıralı ardışık algoritması için de zaman aynıdır. Derinlik için çözüm D(n)=O(n), fakat bu çözümden daha

küçüktür. Bir algoritmanın paralelliğini, derinliğine çalışma oranı olarak tanımlarız. Bu nedenle iyi olmasa da bu algoritmanın paralelliği O(n log n) dir. Burada ki sorun birleştirme adımının sıralı kalmasıdır ve performans sorunu olduğudur. Daha önce belirtildiği gibi böl ve yönet algoritmasının paralelliği, bölme ve/veya birleştirme adımlarının paralelleştirilmesi ile genellikle iyileştirilebilir. Paralel birleştirme kullanılarak sıralanmış iki dizinin, karmaşıklığı ve derinliği birleştirilebilir[5]. Bu birleştirme algoritması kullanarak, birleştirme derinliğinin yinelenmesi, olur. şekil 3 de verilmiştir [7]. 1. Forall i 1 : n do 2. S[i] P[i] 3. While S[i] S[S[i]] do 4. S[i] S[S[i]] 5. Endwhile 6. Enddo Pipelined Böl ve Yönet tekniği kullanılarak, Merge sort un derinliği O(n log n) azaltılarak O(log n) e indirilebilir. Buradaki esas fikir, üst öz yineleme adımlarını tamamlamadan birleştirmenin en üst seviyede başlamasıdır. Böl ve fethet, paralel problemlerin çözümü için geliştirilmiş en güçlü tekniklerden biri olduğu kanıtlanmıştır[5]. 2.2. Paralel İşaretçi Teknikleri Listeler, ağaçlar, graflar gibi geleneksel sıralı tekniklerin bir çoğunu paralel tekniklere çevirmek kolay değildir. Örneğin bağlı liste elementlerin dolaşmak, ağaç düğümlerini sıralı gezmek, graflarda derinlik öncelikli dolaşmak sıralı tekniklerdir. Şans eseri bu teknikler, neredeyse aynı kuvvetteki paralel tekniklerle genellikle yer değiştirilebilir. [5] 2.2.1. İşaretçi Atlama Paralel algoritmaların tasarımı, iş karmaşıklığını en aza indirecek düzeyde olması önemlidir. İşaretçi atlama tekniği bağlı liste ve ağaç yapıları için kullanılan yaygın bir teknik olup paralel programlama tekniklerinde sık kullanılan bir yöntemdir [6]. Basit olarak ifade etmek gerekirse işlem dizisinde bir elemanın adresini diğerinin değerine atama işlemidir. Örnek bir algoritma yapısı aşağıda ve ilgili iterasyon dağılımı Şekil 3. iki ağaç (tree) ve 13 başucu noktasının üç iterasyon dağılımı 2.2.2. Euler Tur Yönlendirilmiş graflarda Euler turu her bir düğümün bir kez ziyaret edildiği graf dolaşma turudur. Yönsüz grafta zıt yöndeki iki tane düğüm ile yer değiştirir. Yönsüz ağaçta Euler turu ağacın çevresini dolaşırken her bir düğümü bir aşağı inerken, bir yukarı çıkarken olmak üzere iki kez ziyaret eder. Ağaçtaki Euler turu, temsil eden bağlı yapıyı koruyarak her bir alt ağacın miktarı gibi ağaçtaki bazı özellikleri hesaplamak mümkündür. Bu teknik ağacın derinliğinden bağımsız olarak paralel derinliği ve sıralı işi kullanır. Euler turu, derinlik öncelikli dolaşma gibi, standart ağaç dolaşma teknikleri yerine kullanılabilir[5]. 2.2.3. Graf Küçültmesi Graf küçültmesi, grafın orijinal yapısını koruyarak daha küçük boyutlara indirmeye

yarar. Genellikle graf küçültme operasyonu gerçekleştirdikten sonra problem küçültülen grafta özyinelemeli olarak çözülür. Küçültülen graftaki problemin çözümü, sonuç çözümünü oluşturmakta kullanılır. Örneğin, bir grafı onu oluşturan parçalara ayırmanın bir yolu düğümleri komşu düğümlerle birleştirerek küçültülmüş graftaki bileşenlerin bağlantılarını bularak ve küçültme işlemini geri alarak yapılır. Bir çok problem ağaçları küçülterek çözülebilir. Böyle bir durumda da bu tekniğe ağaç küçültme tekniği denir. [5] 2.2.4. Kulak Ayrıştırma Bir grafta kulak ayrıştırma, graftaki köşelerin parçalanarak sıralı yol koleksiyonu haline getirilmesidir. İlk yol çember, diğerleri kulak olarak isimlendirilir. Her bir kulağın bitiş noktası önceki yollara bağlanır. Bir graftaki kulak ayrıştırma bir kez bulunduğunda, iki noktanın aynı çember üzerinde yer aldığını belirlemek zor değildir. Bu bilgi ikili, üçlü ve çoklu bağlantılılığı belirlemek için algoritmalarda kullanılabilir. Kulak ayrıştırma, grafın yapısından bağımsız olarak logaritmik derinlik ve sıralı iş kullanılarak paralel olarak bulunabilir. Böylece bu teknik derinlik öncelikli arama gibi problemlerin çözümünde standart sıralı tekniklerin yerine kullanılabilir. [5] 2.3. Rastgeleleştirme (Randomization) Paralel algoritmalarda rastgele sayılar kullanılır. İşlemciler rastgele sayıları kullanarak genelde iyi sonuçlara ulaşmak amacıyla komutları yerel olarak işleyebilirler. Rastgele sayıların paralel programlamada en yaygın kullanılan 3 örneği; örnekleme, simetri kırılması ve yük dengelemedir. 2.3.1.Örnekleme Rastgeleliliğin paralel programlama kullanımının bir çeşidi de bir element setinden temsilci örneğin seçilmesidir. Genellikle problem seçilen bu örnekle çözülür. Bu örnekte kullanılan çözüm yöntemi, orijinal veri setinin çözümü için bir rehber oluşturmuş olur. Örneğin, elimizde bir tamsayı kümesi var ve biz bunu sıralamak istiyoruz. Bunu tamsayı kümesini alt kümelere bölerek ve her bir kümeyi kendi içinde sıralayarak bu işi yapabiliriz. Bu algoritmanın iyi çalışması için, kümelerin birbiri ile örtüşmeyen sayı değerleri ile temsil edilmesi ve her bir kümenin yaklaşık olarak eşit sayıda anahtar içermesi gerekmektedir. Rastgele örneklem, aralık sınırlarının belirlenmesinde kullanılır. Öncelikle her bir işlemci kendi rastgele örneklem anahtarlarını seçer. Sonra seçilen bütün anahtarlar birlikte sıralanır. Son olarak bu anahtarlar sınır değerler olarak kullanılır. Bu tarz rastgele örnekleme ayrıca birçok paralel hesaplama geometrisinde, graflarda ve kelime eşleştirme algoritmalarında da kullanılmaktadır. 2.3.2. Simetri Kırılması Rastgeleliliğin bir başka kullanımı da simetri kırılmasındadır. Örneğin, bir çizgede bağımsız düğümler setinin seçilmesi problemini düşünelim. (birbiri ile komşu olamayan düğümler seti bağımsız düğümlerdir.) diğer bütün düğümlerle paralel olarak her bir düğümün bağımsız düğümler setine katılıp katılmaması gerektiğine karar verilmesi gerektiğini düşünün. Eğer düğümlerden birisinin bağımsız düğümler setine katılmasına karar verilirse, ona komşu olan diğer bütün düğümlerin sete katılmaması gerekmektedir. Eğer her bir düğümün yerel yapısı aynıysa, her bir düğüm eşit sayıda komşuya sahipse, hangi düğümlerin sete katılacağına anlık olarak karar vermek oldukça zordur. Böyle zor bir çıkmaz durum, düğümler arasındaki simetriyi kırmak için rastgeleliliğin kullanılmasıyla çözülebilir[8]. 2.3.3. Yük dengeleme Rastgeleliliğin üçüncü kullanım şeklide yük dengelemedir. Çok büyük miktardaki veri kümesini yaklaşık olarak eşit büyüklükte alt kümelere hızlıca ayırmanın bir yolu da her bir maddeyi rastgele olarak alt kümelere atamaktır. Bu teknik en iyi, alt kümelerin ortalama boyutu en azından logaritmik olarak ilk veri kümesinin boyutlarında olduğu zamanlarda çalışır.

3. Sonuç Günümüzde kullanılan bilgisayar donanımları çok çekirdekli olmasına rağmen, kullandığımız yazılımların çok az bir kısmı paralel olarak programlanmıştır. Bu sebeple seri programlanan bu yazılımlar donanımı etkili olarak kullanamamakta ve kullanıcının zaman kaybetmesine sebep olmaktadır. Paralel programlamada 3 temel algoritma kullanılmaktadır. Paralel programlama algoritmalarının kendine özgü kullanım alanı bulunmaktadır. Hangi algoritmanın kullanılacağı ya da programın paralel programlamaya uygun olup olmadığı programın yapısıyla doğrudan ilgilidir. Bu sebeple herhangi bir paralel programlama algoritmasının diğerinden daha iyi ya da kötü olduğunu söylemek mümkün değildir. Fakat paralel programlamanın temel mantığında bir problemi küçük parçalara ayırmak olduğu için en sık kullanılan algoritmanın böl ve yönet algoritması olduğu söylenebilir. Çok çekirdekli işlemcilerin kişisel ve taşınabilir bilgisayarlarda dahi yaygınlaşması paralel programlamaya duyulan ihtiyacı ve bu alanda yapılan araştırmaların önemini her geçen gün arttırmaktadır. 4. Kaynaklar [1] MPI Programlamaya Giriş ve Motivasyon. http://www.uybhm.itu.edu.tr/ documents/basarim09sunum/ 01_Giris_ve_Motivasyon_akinci_v3.pdf, Erişim Tarihi 26.11.2012 [2] Akçay, M., & Erdem, H. A. (2010). Paralel Hesaplama ve Matlab Uygulamaları. Akademik Bilişim 2010. Muğla: Muğla Üniversitesi. [3] Altıntaş, V., & Yeğenoğlu, E. D. (2011). Görüntü işlemede seri ve paralel programlamanın performansı. 6. International Advanced Technologies Symposium. [4] Divide And Conquer Method. www.curriki.org: http://www.curriki.org/xwiki/bin/view/coll_n ishantgupta/ Lesson2DivideandConquerMethod?viewer=p rint, Erişim Tarihi 26.11.2012 [5] Guy, E. B., & Bruce, M. M. Parallel Algorithms. www.cmu.edu: http://www.cs.cmu.edu/~guyb/papers/ BM04.pdf, Erişim Tarihi 26.11.2012 [6] Wyllie, J. C. (1979). The Complexity of parallel computations. Technical Report TR-79-387. Ithaca, NY: Department of Computer Science, Cornell University. [7] Chatterjee, S., & Jan Prins, J. Parallel Computing PRAM Algorithms. www.unc.edu: http://www. cs.unc.edu/~prins /Classes/633/Handouts/pram.pdf, Erişim Tarihi 26.11.2012 [8] Luby, M. (1986). A simple parallel algorithm for the maximal independent set problem. SIAM Journal of Computing, 1036-1054.