Paralel Programlama ile Resim Filtreleme Uygulamaları
Herkese merhaba. Bu proje 4 farklı uygulama içeriyor. Her bir uygulama farklı paralellism teknikleri kullanılarak filtreleme işlemleri yapıyor. Şimdi uygulamaları birlikte inceleyelim. Kaynak kodlar için Github hesabımı takip edebilirsiniz:
Technologies
- MPI
- OpenMP
- C++
Paralel Programlama
Paralel Programlama basit şekliyle, bir problemin çözümünde birden çok hesaplama kaynağının aynı anda kullanılmasıdır.
- Problemin çözümünde birden çok işlemci kullanılır.
- Problem eşzamanlı çözülmek için farklı parçalara bölünür.
- Her parça farklı komut serilerine bölünür.
- Komutlar aynı anda farklı işlemciler üzerinde işlenir.
Bu projede, her bir uygulama farklı paralellism teknikleri kullanılarak filtreleme işlemleri yapmaktadır. Uygulamaları çalıştırmak için Ubuntu işletim sistemi edinmeniz gerekmekte. Bilgisayarınıza kurmak istemiyorsanız VirtualMachine sanal ortamına kurarak çalıştırabilirsiniz. Uygulamaların hepsinde aynı görüntü ve matrisleri kullanıldığı için tek bir görüntü, görüntü matrisi ve script dosyası üzerinden işlem yapıldı.
filter1 Uygulaması
Ubuntu'da bir terminal açıp projenin bulunduğu dizine gidiyoruz. filter1.cpp uygulamasını çalıştırmak için ilk adım olarak;
yazarak bir a.out dosyası oluşturuyoruz. Şimdi bizim görüntü matrisimizi işleyerek filtrelenmiş bir görüntü matrisi elde etmemiz gerekli. Bunun için;
yazıyoruz ve filtrelenmiş görüntü matrisi olan GoruntuMatrisi1_filtered.txt dosyasını elde ediyoruz. Filtrelenmiş görüntüyü elde etmek için bu matrisi kullanacağız.
Şimdi script dosyasını çalıştırarak filtrelenmiş görüntüyü elde edeceğiz. Bu işlemi yapmadan önce karşımıza çıkacak muhtemel paket yüklemelerini yapmamız gerekli. Bunun için octave paketine ihtiyacımız var. İndirmek için aşağıdaki adımları izleyebilirsiniz.
Paket yüklemelerini bitirdikten sonra projemizin son adımı tamamlayabiliriz.
Çalıştırdıktan sonra orjinal Goruntu1.bmp görüntüsü ile filtrelenmiş görüntü aşağıdaki gibi olacaktır.
filter2 Uygulaması
Bu uygulamada farklı bir teknik olarak MPI kütüphanesi kullanıldı. MPI, paralel programlama amacıyla kullanılan bir platformdur. MPI temel olarak birden fazla bilgisayarın üzerinde aynı programın çalıştırılması ve bu çalıştırma sırasında programların birbiri ile iletişime geçerek birbirinden veri transfer etmesine dayanır. MPI ile işimizi bilgisayarlara dağıtabildiğimiz gibi bir bilgisayar üzerinde de birden fazla iş (process) çalıştırmamız mümkündür. Dolayısyla örneğin 10 bilgisayarın bulunduğu bir ortamda her bilgisayarda 3’er iş çalıştırılırsa bu durumda toplam 30 iş çalışmış olur. Yani programımız sanki 30 farklı bilgisayarda çalışıyormuş gibi davranmak zorundadır.
Ubuntu'da bir terminal açıp projenin bulunduğu dizine gidiyoruz. filter1.cpp uygulamasını çalıştırmak için ilk adım olarak gerekli MPI kütüphanesini indirmemiz gerekiyor. Sırayla aşağıdaki işlemleri yapabilirsiniz:
İndirme işlemlerini tamamladıktan sonra projemizi çalıştırabiliriz. İlk olarak;
ile bir a.out dosyası oluşturduk. Daha sonra;
Programın kaç kere çalışmasını istiyorsanız 4 yerine herhangi bir çift sayı yazabilirsiniz. Bu işlemin ardından filtrelenmiş görüntünün matrisini elde edeceğiz. Daha sonra;
komutunu yazarak filtrelenmiş görüntüyü elde ediyoruz. Sonuçlar aşağıdaki gibi olacaktır.
filter3 Uygulaması
Bu uygulama da MPI kütüphanesi kullanılarak yazıldı. Çalışması sırayla;
Ve sonuç;
filter4 Uygulaması
Bu uygulamada OPENMP kütüphanesi kullanıldı. OpenMP paralel programlama işini kolaylaştıran bir API’dir. Çalışma prensibi, paralel işletilmesi gereken kısımlarda dallanır, paralel çalışıp işlem bitince tekrar birleşmesi şeklinde olur. Uygulamamızda kullanabilmek için öncelikle gerekli indirmeleri yapmalıyız.
Sorunsuz şekilde indirmelerimizi tamamladıktan sonra uygulamayı çalıştırabiliriz.
Çalıştırdıktan sonra orjinal ve filtrelenmiş görüntü aşağıdaki gibi olacaktır: