28
FONKSİYONEL VE İMPERATİVE PROGRAMLAMA İLE SIRALAMA AB Konferansı Şubat’ 2014 Elis Soylu ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ [email protected]

Fonksiyonel ve İ mperative programlama İ le s ı ralama

  • Upload
    marcie

  • View
    167

  • Download
    0

Embed Size (px)

DESCRIPTION

Fonksiyonel ve İ mperative programlama İ le s ı ralama . Elis Soylu ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ [email protected]. AB Konferansı Şubat’ 2014. - PowerPoint PPT Presentation

Citation preview

Page 1: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

FONKSİYONEL VE İMPERATİVE PROGRAMLAMA İLE SIRALAMA

AB Konferansı Şubat’ 2014

Elis SoyluESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ

[email protected]

Page 2: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

FONKSİYONEL VE İMPERATİVE PROGRAMLAMA İLE SIRALAMA

*PARALEL PROGRAMLAMA*SIRALAMA ALGORİTMASI*SIRALAMA ÇEŞİTLERİ*PARALEL FONKSİYONEL PROGRAMLAMA

*HASKELL*ERLANG

*NESNEL PROGRAMLAMA*MPI*CUDA

*PERFORMANSLAR*ANALİZLER

AB Konferansı Şubat’ 2014

Page 3: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Sıralama algoritması bilgisayar ortamında oldukça önemli bir yere sahiptir.

Yazılım anlamında nesnel ve fonksiyonel diller bu algoritmanın paralelleştirilmesinde önemli bir yer tutar.

Nesnel olarak MPI (Message Passing Interface) ve CUDA (Compute Unified Device Architecture)dilleri, fonksiyonel olarak Haskell ve Erlang dilleri yapısal açıdan bu algoritma doğrultusunda karşılaştırılacaktır.

AB Konferansı Şubat’ 2014

Page 4: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

PARALEL PROGRAMLAMABilgisayar programlama, insan tarafından yapılacak herhangi bir işin veya hesaplamanın kısa bir sürede, enerji harcamadan gerçekleştirilmesini sağlayan bir yöntemdir.

• Nesne tabanlı• Yordamsal• Bildirimsel• Fonksiyonel Programlama

genel adları altında toplanır.

AB Konferansı Şubat’ 2014

Page 5: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Çok çekirdekli bilgisayarlar ile eşzamanlı ortak iş yapılması hedeflenmiştir.

Çekirdek sayısının az olduğu durumlarda etkin bir şekilde çalışabilen bir programlama dili, çekirdek sayısının artmasıyla bu etkinliği kaybedip bazı sorunlara yol açabilir.

Doğru programlama seçimi hızlı hesapların yapılmasını kolaylaştırır.

AB Konferansı Şubat’ 2014

Page 6: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Sıralama Algoritması Sıralama algoritması, genel olarak matematikten güç alıp bilgisayar bilimlerine fayda sağlayan belli koşullar altında sıralama yaptıran önemli bir tekniktir.

Sıralama yapılırken en çok kullanılan yapılar sayı büyüklüğü ve alfabetik kısıtlardan oluşmaktadır.

Sıralama, genel olarak bir veri yığınının düzenlenebilmesini sağlayan önemli bir yapı taşıdır.

AB Konferansı Şubat’ 2014

Page 7: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Sıralama mantığına göre• içsel (internal)• dışsal (external) sıralamaları vardır. En çok bilinen sıralama türleri• kabarcık sıralaması (bubble sort)• hızlı sıralama (quicksort)• seçmeli sıralama (selection sort)• birleştirmeli sıralama (merge sort) şeklindedir.

AB Konferansı Şubat’ 2014

Page 8: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Kabarcık sıralama, ilk elemandan başlayarak ve her geçişte yan yana bulunan elemanları inceleyen ve sıraya sokan bir sıralama çeşididir.

Hızlı sıralama, veriler için rastgele bir x elemanını belirleyip sol tarafına kendinden küçükleri, sağ tarafına ise büyükleri yerleştirerek kurulur.

Seçmeli sıralama, verilerin 1.,2.,3. ,… sıradaki elemanları ile en küçük, en küçük 2. eleman,…şeklindeki elemanları yer değiştirilerek kurulur.

Birleştirmeli sıralama ise, veri yapısı ikişerli parçalar haline inene kadar bölünerek, bu parçaların kendi içlerinde sıralanmasıyla birleştirme yapılarak elde edilir.

AB Konferansı Şubat’ 2014

Page 9: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Paralel Fonksiyonel Programlama

Paralellikteki mantık, yapılması gereken işi paylaştıran, çeşitli birimlere veren ve bu işi eş uyumlu olarak gerçekleştiren etkin bir programlama çeşididir.

Paralel programlama mantığının önündeki en büyük engel, eldeki bir verinin değerini diğer işlemcilere dağıtabilmek için çoğaltma ve değiştirme yetkisine sahip olmasıdır.

Fonksiyonel Diller; Haskell, Erlang, F#, Scala, ML, … olarak sıralanabilir. Bunlardan ikisi Haskell ve Erlang fonksiyonellik açısından önemlidir.

AB Konferansı Şubat’ 2014

Page 10: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Fonksiyonel bir dilin özellikleri

Ortak sınıf yapısı olarak fonksiyonlar kullanıldığından parametreler aynı olduğu sürece aynı sonuçlar elde edilir.

Fonksiyonlar yapısal olarak kendi verisi dışındaki verilerde değişiklik yapamaz. Dolayısıyla yan-etki durumuyla karşılaşılmaz.

Fonksiyonel dilde bir değişkene atanan değer program sonuçlanıncaya kadar bir değişikliğe uğramaz. Değişikliğin yapılmasının zorunlu olduğu durumlarda özyinelemeli (recursive) yapılar kullanılır.

AB Konferansı Şubat’ 2014

Page 11: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Fonksiyonel dildeki bir fonksiyon oluşturduğu değer ile birebir eşlenmiştir. Dolayısıyla tersine bir durum kolaylıkla elde edilebilir.

Bu dil sayesinde farklı bir bakış açısı sunmasından dolayı matematiksel bir yorum katar.

Daha kısa ve anlaşılabilir kod yazımı sayesinde de büyük bir avantaj sağlar.

AB Konferansı Şubat’ 2014

Page 12: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Haskell

Fonksiyonel dillerden biri olan Haskell, herhangi bir yazılımı modellerken yapının temelinin tamamen fonksiyonlardan oluşmasını kullanır. Veri yapılarının içeriğini değiştirmek yerine onlardan yeni veri yapıları türeten fonksiyonlar oluşturur. Yani her şey bir fonksiyondur.Haskell dili, tanımlı temel tip ve fonksiyonlar ile kullanıcı tarafından tanımlanan tip ve fonksiyonlardan ibarettir.

AB Konferansı Şubat’ 2014

Page 13: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Haskell dilinin elemanları

Temel veri tipleri

Her bir veri tipinin sabitleri

Veri tipleri arasındaki fonksiyonlar

Veri tiplerine ve fonksiyonlara uygulanan yapıcılar

AB Konferansı Şubat’ 2014

Page 14: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Haskell Derleyicisi

AB Konferansı Şubat’ 2014

Page 15: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Haskell ’de Sıralamaqsort []= []qsort (x:xs) = qsort small ++ mid ++ qsort large where small = [y | y<-xs, y<x] mid = [y | y<-xs, y==x] ++ [x] large = [y | y<-xs, y>x]

>>qsort [2,-5,3,1,6]>>[-5,1,2,3,6]

AB Konferansı Şubat’ 2014

Page 16: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

ErlangErlang, yüksek geçerliliğe sahip oldukça fazla büyüklükteki işlemlerin gerçekleştirilmesini sağlayan bir programlama dilidir.

Günlük yaşamda, haberleşme, bankacılık, e-ticaret, anlık mesajlaşma gibi alanlarda sıklıkla karşılaşılır.

Erlang dili, Ericsson firmasının dili olarak bilinir. Daha çok haberleşme alanında bu dil kullanılır ve daha çok tanınır.

AB Konferansı Şubat’ 2014

Page 17: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Nesnel ProgramlamaNesnel programlama, çözülecek problemi parçalayarak nesne üzerinden çözüm yöntemi geliştirir.

Nesne mantığı, daha sonra da kullanılma olasılığına karşın genel bir yapıda toplanmasına dayanır. Parça parça elde edilen çözüm adımları çözüme bütün bir şekilde ulaşabilmek için bir araya getirilir.

Nesnel programlama dilleri arasında, C++, MPI, Java, CUDA, C#,… gösterilebilir. Bunlardan ikisi, MPI ve CUDA paralellik açısından önemlidir.

AB Konferansı Şubat’ 2014

Page 18: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

MPI

MPI, genel olarak program çalışma süresini kısaltacak paralelleştirme mantığında kullanıcıya kolaylık sağlayan mesaj gönderim yöntemini kullanan ara yüzdür.

C, Fortran dilleri yardımıyla MPI ile haberleşme ortamı kurulur.

Haberleşme, MPI ara yüzü yardımıyla mesaj gönderme-alma şeklindedir.

MPI programının mesajı alan, gönderen, ortamdaki bilgisayar sayısı, bilgisayar sırasını bulan fonksiyonları temel olarak her kod bloğunda yer alır.

AB Konferansı Şubat’ 2014

Page 19: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

CUDA

CUDA, NVIDIA firması tarafından bilgisayarın ekran kartı bileşenini etkin şekilde kullanmaya yardımcı olan bir mimaridir. Ekran kartı üzerinde bulunan çok sayıdaki küçük işlemciler bilgisayarda gerçekleştirilen temel aritmetik hesaplamalar haricinde paralel hesaplamaya da yardımcı olur. Bu aşamada ekran kartındaki işlemci yapısında yer alan ‘thread’ ler yardımıyla görev dağılımı yapılarak paralel hesaplama elde edilir.

AB Konferansı Şubat’ 2014

Page 20: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Hızlı sıralama algoritmasının seçilen dillerdeki performansları

Hızlı sıralama algoritması genelde n elemanlı bir diziyi O(n logn)

karmaşıklığıyla sıraya koyar. Sıralamanın bozuk bir şekilde başladığı durumlarda ise en kötü

O(n2) süreye kadar işlem yapar .

AB Konferansı Şubat’ 2014

Page 21: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

Hızlı sıralama algoritması

Fonksiyon qsort(dizi) kucuk, eşit, buyuk listelerini oluştur Boyut(dizi)<1 ise diziyi döndür. Diziden bir pivot değer belirle Dizideki her x elemanı için

X < pivot ise kucuk listesine al, X = pivot ise esit listesine al, X > pivot ise buyuk listesine al,

qsort(qsort(kucuk),esit,qsort(buyuk)) için döngüyü tekrarla.

AB Konferansı Şubat’ 2014

Page 22: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

SEÇİLEN PROGRAMLAMA DİLLERİNİN HIZLI SIRALAMA ALGORİTMA ANALİZLERİ

Programlama Dilleri

Donanım Süre Veri Seti

Haskell Intel Core 2 Quad

2.9548s 106

Erlang Intel Core 2 Quad

4.14s 106

MPIIntel Core 2 Quad

1.25s 106

CUDA Intel Core 2 Quad

1.6s 106

AB Konferansı Şubat’ 2014

Page 23: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

SONUÇ VE ÖNERİLER Paralel programlamada nesneye yönelik programlama

dilleri fonksiyonel dillere göre daha hızlı sonuçlanmaktadır.

Uygun mimari seçimi ile daha büyük veriler de nanosaniye derecesinde hesaplamalarla sıralanabilir.

Farklı tür sıralama algoritmaları için de aynı dil üzerinde etkin çözüm yöntemleri ile daha hızlı sonuçlar alınabilir.

Aynı dil üzerinde farklı programlama türleri ile daha hızlı sonuçlar alınabilir.

AB Konferansı Şubat’ 2014

Page 24: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

SORULAR ?

AB Konferansı Şubat’ 2014

Page 25: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

KAYNAKLAR

AB Konferansı Şubat’ 2014

Page 26: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

AB Konferansı Şubat’ 2014

www.vikipedi.org.tr enformatik.kku.edu.tr/uygulamalar http://en.wikipedia.org/wiki/Functional_programming D. Hünniger, Haskell, 2012 http://www.erlang.org/ Mesut, A. , Programlama Dilleri, 2011 Kaleci, D. ,Şahin A., Kaya O.A., MPI ile Paralel Programlamanın

Temelleri, Akademik Bilişim'09, 2009 http://www.nvidia.com/object/cuda_home_new.html Capannini, G.,Silvestris, F., Baraglia, G. , Sorting on GPUs for

large scaled at a sets: A through comparison, Information Processing and Management, 2011

Page 27: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

AB Konferansı Şubat’ 2014

Jones, D. , Marlow, S., Singh, S., Parallel Performance Tunning for Haskell , ACM SIGPLAN Symposium on Haskell, 2009

Patterson, M.,Sagonas, K., Johanson, E., TheHiPE/x86 Erlang Compiler: System Description and Performance Evaluation, 2012

http://www.codeproject.com/Articles/42311/Parallel-Quicksort-using-MPI Performance-Analysis

http://on-demand.gputechconf.com

Page 28: Fonksiyonel  ve  İ mperative  programlama  İ le s ı ralama

AB Konferansı Şubat’ 2014

ELİS [email protected]

MUAMMER AKÇ[email protected]