Sayfalar

OpenMP etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
OpenMP etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Cumartesi, Ekim 17, 2009

Sitemli OpenCv 2.0 Kurulumu - Install -

Aslında böyle bir yazı yazmayı düşünmüyordum ama gelen sorular yüzünden yazmak zorunda kaldım. Önce konumuzu anlatalım

OpenCv2.0 windows versiyonunu C ye kurun .
CMake' i kurun ve çalıştırın

Yukardaki ekran gelir OpenCv 2.0 ı kurduğunuz dizini seçin
kurulumun yapılacağı dizini yazıyoruz Visual için "vs2008" seçtik mesela

Salı, Eylül 09, 2008

OpenMP ve OpenCv ile Kenar Bulma

Öncelikle uygulamamızdan bahsetmek istiyorum. Basit bir kenar bulma işlemi yapacağız. Hem OpenMP'li Hemde normal yapacağız ki performans farkını görelim
  • İlk etapta resmi siyah beyaza çeviriyoruz. Bu işlemi programda görüntüyü yüklerken "CV_LOAD_IMAGE_GRAYSCALE" diyerek hallediyoruz. (bakınız işin kolayına kaçma metodları s-??? )
  • Kenar bulma için kullanacağımız metod ise gayet basit. Bir pikselin solundaki veya üstündeki piksel ile olan renk farkı belli bir eşik değerini aşıyorsa kenardır, beyaz (255) olarak işaretlenir. Aşmıyorsa kenar değildir, Siyah (0 ) değeri atanır.yani
X kenarı bulunacak görüntü dosyası olsun K ise Kenarları gösterdiğimiz görüntü dosyası olsun

Eğer |X(i,j)-X(i-1,j)| > eşik veya |X(i,j)-X(i,j-1)| > eşik
ise K(i,j)=255;
değil ise K(i,j)=0;
  • işlemin mantığından da anlayabileceğiniz gibi her piksel için yapılacak işlem bağımsız. ve paralel olarak çalıştırmak için gayet uygun bir metod.
  • Kenar bulma fonksiyonumuzda bir döngü ( for ) içinde pikselin kenar olup olmadığını bulan kodu yazıyoruz.
  • Şimdi geldik işin en zor kısmı olan paralel versiyonunu yazmaya. Kenar bulma fonksiyonumuzu kopyele yapıştır deyip 2. bir nüshasını alıyoruz ! Adını OpenMP li olarak değiştiriyoruz. for döngümüzden önceki satıra şu çoook zor satırı yazıyoruz.
#pragma omp parallel for
yani diyoruz ki bundan sonraki for döngüsünü paralel çalıştırılsın.
Sonarasında çalıştırıp sonuçları gözlüyoruz.


Benim evdeki AMD64 çift çekirdekli işlemcideki performansı Resimde de görebilirsiniz. % 44 lük bir hızlanma hem de tek satırlık eklemeyle hiç fena değil öyle değilmi ? Farkın nereden geldiğini CPU Usage grafiğinde rahatlıkla görebilirsiniz. OpenMP siz kenar bulma fonksiyonu çalışırken işlemcinin sadece biri çalışıyor. OpenMP li versiyonunda işlemci kullanımı % 100 lere ulaşıyor.

Sonuç : OpenMP ile işlemcinizin atıl duran çekirdeklerinide çalıştırıp programlarınızı hızlandırabilirsiniz. Hatta hiç başka bir detay öğrenmeseniz bile bizim burada bahsettiğimiz paralel çalıştırılabilecek döngüler çok işinize yarıyacaktır eminim. Helede İşlemcilerin çekirdek sayılarının arttığını düşürsek - 4 çekirdekli çıktı bile-

Örneği İndirmek için : OpenCV & OpenMP

4 çekirdekli işlemcisi olup da deneyen olursa performans artışını bize bildirsin. seviniriz.

Pazartesi, Eylül 08, 2008

OpenMP

ReklamlarStart();
DerinDeliMavi'den bir ilk daha , Sizler için hiçbir fedakarlıktan kaçmayan sitemiz size yine yeni imkanlar sunuyor. Hafta sonu yemeyip içmeyip - oruç oruç - sizlere neler hazırladık neler...
ReklamlarEnd();

Benim gibi çiftçekirdekli bir işlemciniz varsa yazdığınız programların CPU kullanımına baktığınızda Yukardaki grafikteki I numaralı bölümdeki gibi bir manzarayla karşılaşırsanız. Yani uzunlafın kısası Bilgisayarınız çift çekirdekli ama Yazıl sadece birini kullanıyor. Paralel programlama işi de burada ortaya çıkıyor. Bütün her iş için olmasada paralel olarak çalıştırarak programın hızlanması imkanına sahibiz. Grafiğin II kısmında görebileceğiniz gibi. Yapılacak iş teorik olarak şöyle ; Aynı görevi, küçük bir birinden bağımsız çalışmasında mahzuru olmayacak şekilde bölüp çoklu işlemcilerde eş zamanlı olarak çalıştırılmasıdır.

İşte OpenMP bu işi kolaylaştırmak için yapılmış API dır. Pek çok donanım ve işletim siteminde çalışan ve basit derleyici ön işlem direktifleriyle kullanacağınız bir sistem.


OpenMP nin çalışma sistemi program paralel işletilmesi gereken kısımlarda dallanır paralel çalışıp işlem bitince tekrar birleşmesi şeklinde olur. ( Fork - Join Model )

Bu kadar teorik bilgi yeter daha fazlasını merak eden google'dan soruştursun. Yukarda bahsettiğimiz üzere OpenMP derleyici önişlem direktifleri kullanıyor yani öncelikle OpenMP desteği sunan bir derliyiciye ihtiyacınız olacak.
OpenMP desteği sunan derleyiciler
http://openmp.org/wp/openmp-compilers/

Linkde gördüğünüz gibi Eğer Linux kullanıcısıysanız ve derleyiciniz gcc 4.2 ve üstünde probleminiz yok. Microsoft Visual kullanıyorsanız OpenMP 2.0 destekleniyor ve ücretsiz versiyonlarında olup olmadığından da emin değilim. Benim gibi CodeBlocks ile Mingw32 kullanıyorsanız "TDM's Experimental GCC/MinGW32 Builds" kurmanız lazım.

Yapılacak işlemler
  1. http://www.tdragon.net/recentgcc/ adresinden Bundled Installer ı indirin
  2. Daha önceden Mingw yi kurğunuz yerin üzerine kurun.
  3. Hemen güzel bir OpenMP makalesi okuyun.
  4. CodeBlocks ' çalıştırıp yeni bir console projesi oluşturun
  5. Project->Build Options kısmından Linker settings tabında Link libraries kısmına gomp ve pthread girin
  6. Project->Build Options->Compiler Settings tabının other options kısmına -fopenmp girin

İşlem tamam. Artık bütün bunlarun üstüne şöyle basitçe hemde OpeCv li bir program yazmaya başlayabiliriz. Malum Performans en çok Görüntü işlemede lazım oluyor...

Devam edecek...