BİL 542 Paralel Hesaplama Dersi Projesi MPJ Express Java Paralel Programlama Recep Ali YILMAZ 131419106 Fen Bilimleri Enstitüsü Bilgisayar Mühendisliği Bölümü Bilgisayar Mühendisliği Yüksek Lisans Programı İçindekiler 1. Paralel hesaplama ............................................................................................................2 İki sayının toplanması ...............................................................................................2 1.1 2. Java .................................................................................................................................3 3. MPJ Express ....................................................................................................................4 3.1 4. 5. MPJ Design ..............................................................................................................4 MPJ Yapılandırılması ......................................................................................................5 4.1 Multicore..................................................................................................................5 4.2 Cluster......................................................................................................................5 MPJ Express Kurulum .....................................................................................................6 5.1 Kurulum Öncesi .......................................................................................................6 5.2 Kurulum ...................................................................................................................6 6. Uygulama Derleme ve Çalıştırma ....................................................................................7 7. Örnek Uygulama .............................................................................................................8 8. Performans ve SpeedUp Ölçümü ................................................................................... 10 9. 8.1 Performans .............................................................................................................10 8.2 SpeedUP Ölçümü ................................................................................................... 10 Kaynakça ...................................................................................................................... 11 1 1. Paralel hesaplama Paralel hesaplama, aynı görevin (parçalara bölünmüş ve uyarlanmış), sonuçları daha hızlı elde etmek için çoklu işlemcilerde eş zamanlı olarak işletilmesidir. Bu fikir, problemlerin çözümünün ufak görev parçalarına bölünmesi ve bunların eş zamanlı olarak koordine edilmesine dayanır. Paralel hesaplama ile performans artar, büyük sorunlar daha az sürede çözülür ve bilimdeki gelişmeler paralel hesaplamaya gereksinim duyar. 1.1 İki sayının toplanması Seri (1 işlemci) 1+2+3+4+5+6+7+8 3+3+4+5+6+7+8 6+4+5+6+7+8 10 + 5 + 6 + 7 + 8 15 + 6 + 7 + 8 21 + 7 + 8 28 + 8 36 Paralel (2 işlemci) 1+2+3+4+5+6+7+8 3 + 3 + 4 + 5 + 6 + 15 6 + 4 + 5 + 21 10 + 26 36 1,75 kat hızlanma sağlanır. Daha fazla işlem olursa hızlanma 2 kata kadar çıkar. 2 2. Java Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış açık kodlu, nesneye yönelik, zeminden bağımsız, yüksek verimli, çok işlevli, yüksek seviye, adım adım işletilen (yorumlanan-interpreted) bir dildir. Java, Sun Microsystems'den James Gosling tarafından geliştirilen bir programlama dilidir (Sun Microsystem'in şu anda Oracle Corporation ile bağlı ortaklığı bulunmaktadır) ve 1995 yılında Sun Microsystems'in çekirdek bileşeni olarak piyasaya sürülmüştür. Bu dil C ve C++'dan birçok sözdizim türetmesine rağmen bu türevler daha basit nesne modeli ve daha az düşük seviye olanaklar içerir. Java uygulamaları bilgisayar mimarisine bağlı olmadan herhangi bir Java Virtual Machine (JVM)'de çalışabilen tipik bytecode'dur (sınıf dosyası). Java ilk çıktığında daha çok küçük cihazlarda kullanılmak için tasarlanmış ortak bir düzlem dili olarak düşünülmüştü. Ancak düzlem bağımsızlığı özelliği ve tekbiçim kütüphane desteği C ve C++'tan çok daha üstün ve güvenli bir yazılım geliştirme ve işletme ortamı sunduğundan, hemen her yerde kullanılmaya başlanmıştır. Sun Microsystems, 27 Ocak 2010 tarihinde, 20 Nisan 2009 tarihinde imzalanan bir anlaşmaya göre, 7.4 milyar $ karşılığında Oracle tarafından satın alındı. Takip eden ay Sun Microsystems; Oracle, USA, Inc ile birleşti Oracle America, Inc. adını aldı. 3 3. MPJ Express MPJ Express, açık kaynak kodlu uygulama geliştirmek ve çok çekirdekli işlemciler ve işlem kümeleri / bulutlar için paralel uygulamalar çalıştırmasına izin veren kütüphaneleri barındıran Java destekli yazılım dilidir. MPI’ ın Java platformunda çalışan versiyondur. Yazılım MİT lisansı (LGPL bir varyantı) altında dağıtılmaktadır. 3.1 MPJ Design MPJ Express sürekli gelişimini sağlayan katmanlı bir tasarıma sahiptir. Güncellemek ya da gerektiği gibi dışarı takas katmanları bulunmaktadır. 4 4. MPJ Yapılandırılması MPJ iki şekilde yapılandırılabilir; multicore veya cluster. Yapılandırma yöntemlerini aşağıdaki grafik özetlemektedir. 4.1 Multicore Çok çekirdekli tek sunuculu/donanımlı yapılarda kullanılabilmektedir. 4.2 Cluster Birden çok sistemin veya bu sistemler üzerindeki dağıtık memory yapıları için kullanılmaktadır. 5 5. MPJ Express Kurulum Bu dokümanda MPJ Express Linux/Unix ortamı için çalışma yapılmıştır. 5.1 Kurulum Öncesi Linux ortamı için kurulum öncesi adımlar aşağıdaki gibidir. 1. Aşağıdaki adresten Ubuntu Desktop Linux İşletim Sistemini indirin http://releases.ubuntu.com/14.04.1/ubuntu-14.04.1-desktop-amd64.iso Direk kendi bilgisayarınıza veya sanal makine olarak kurulum yapabilirsiniz. 2. Java 1.6 (stable) or higher (Mandatory) 3. Apache ant 1.6.2 or higher 4. Perl (MPJ kaynak kodunun derlenmesi için) 5. Open MPI - MPI library 6. CMake (MPJ kaynak kodunun derlenmesi için) 5.2 Kurulum 1. MPJ Express’ aşağıdaki adresten indirin. http://sourceforge.net/projects/mpjexpress/files/releases/ 2. MPJ_HOME ve PATH için aşağıdaki komutları çalıştırın a. export MPJ_HOME=/path/to/mpj/ b. export PATH=$MPJ_HOME/bin:$PATH Bu bilgileri ““.bashrc” içerisinde eklerseniz her seferinde tekrar yapmanıza gerek kalmayacaktır. 3. MPJ Express için bir çalışma dizini oluşturun ve indirdiğiniz kurulum dosyalarını buraya kopyalayın. 4. Yukarıdaki işlemleri yaptıktan sonra “cd $MPJ_HOME; ant” komutu ile MPJ Express’ i derleyiniz. 6 6. Uygulama Derleme ve Çalıştırma Aşağıdaki şekilde örnek bir uygulama yazalım. Aşağıdaki komutları kullanarak derleyelim. javac -cp .:$MPJ_HOME/lib/mpj.jar HelloWorld.java Burada derlemeyi OpenMPI’ den farklı olarak mevcut Java derleyicisi ile derliyoruz fakat derleyiciye kütüphane olarak “mpj.jar” ı gösteriyoruz. Aşağıdaki komut satırı ile örnek kodu çalıştırın çıktı aşağıdaki gibi olacaktır. mpjrun.sh -np 2 HelloWorld 7 7. Örnek Uygulama Uygulamanın amacı for döngüsü içerisindeki değer kadar dönüp içerdeki ikinci for döngüsündeki hesaplama işleminin yapılması. Hesaplama işleminin amacı CPU’ ya yük getirmek bu sayede işlem süresini artırmak ve CPU’ ları %100 seviyede kullanabilmek. Uygulama hem tek cpu ve klasik java kodunda hem de Mpj derlemesi ile çalışacak şekilde hazırlandı. Aşağıdaki birinci örnek klasik java örneğidir. Derleme, çalıştırma ve çıktı aşağıdaki gibidir. 8 Aşağıdaki örnek ise Mpj kütüphaneleri eklenmiş koddur. Burada iki core/process ile çalışacak şekilde düzenleme yapılmıştır. Process’ leri if blokları ile yakalayıp içerisinde aynı hesaplama işlemi yapılıyor. Derleme, çalıştırma ve çıktı aşağıdaki gibidir. 9 8. Performans ve SpeedUp Ölçümü 8.1 Performans Her iki uygulama için CPU kullanımına ait performans grafikleri aşağıdaki gibidir. Seri çalıştırmada 40sn~ civarında bir zaman tüketiyor ve önce birinci hesaplama sonra ikinci hesaplama yapılıyor. Bu işleme ait CPU kullanımı analizi aşağıdaki gibidir. Mpj ile parallel çalıştırmada 3.5sn~ civarında bir zaman tüketiyor ve her iki hesaplama da aynı anda işlenmeye başlıyor. Bu işleme ait CPU kullanımı analizi aşağıdaki gibidir. 8.2 SpeedUP Ölçümü Formülümüze göre hesaplarsak; Tek CPU Toplam Zaman 2 Core Cpu Toplam Zaman Speed Up 10 39486 3481 11,34 9. Kaynakça http://mpj-express.org Son Erişim Zaman: 15.11.2014 Ubuntu http://www.ubuntu.com Son Erişim Zaman: 15.11.2014 Vikipedi http://tr.wikipedia.org/wiki/Java_%28programlama_dili%29 Son Erişim Zaman: 14.11.2014 stackoverflow.com http://stackoverflow.com/questions/3382954/measure-execution-time-for-a-javamethod Son Erişim Zaman: 14.11.2014 11