Bolu Beyi tarafından yazıldı Ocak - 25 - 2013 4 Yorum

OpenMPOpenMP ile bilgisayarımızın işlemcilerinin tamamını kullanarak eş zamanlı olarak hesaplama yapabilmekteyiz. C ile OpenMP kullanmadan, 1’den bizim gireceğimiz N sayısına kadar olan sayıları toplamak istersek, bilgisayarımız tek bir işlemciyi kullanacaktır. Fakat bunu OpenMP ile gerçekleştirecek olursak, her bir işlemciye iş dağıtılır ve işlem, paralel olarak gerçekleştirilir. Örneğimize geçmeden önce, kısaca iki önemli fonksiyondan bahsedelim. “omp_get_thread_num()” fonksiyonu, iş yapacak olan threadin id değerini tutar. “omp_get_num_threads()” fonksiyonumuz ise, bilgisayarımızda bulunan thread sayısını tutar.

#include <omp.h>
#include<stdio.h>
int main ()
{
int nthreads, tid, t_sayisi, ToplamSon=0;
int toplam[2];//2 işlemcim olduğu için 2 elemanlı dizi oluşturdum
int N;
printf(“N?\n”);
scanf(“%d”, &N);//Kaça kadar olan sayıların toplanacağını N değişkenine atadıkfor(int i=0; i<2; i++)
{
toplam[i] = 0;
}
//İşlemin paralel olarak çalıştığı kısmı “#pragma” ile başlatıyoruz. Bu blok içerisinde işlemciler eş zamanlı olarak çalışıyor. Döngü içerisinde olmamasına rağmen ekrana, kaçıncı threadin hangi sonucu bulduğu 2 kez yazılıyor fark ettiyseniz.
#pragma omp parallel private(tid)
{
//İşlem yapacak threadin id değerini ve thread sayısını değişkenlere atadık
tid = omp_get_thread_num();
t_sayisi=omp_get_num_threads();
//Burada i değeri, tid değerine göre değişmekte ve thread sayısı kadar artış göstermekte. Böylelikle her bir threadin aynı sayıları toplaması önleniyor.
for(int i = tid; i<N+1; i+=t_sayisi)
{
toplam[tid] + = i;
}
printf(“Thread %d , toplam = %d \n”, tid, toplam[tid]);

for(int i = 0; i<2; i++)
{
ToplamSon + =toplam[i];
}
printf(“TOPLAM = %d \n”, ToplamSon);
}

Bugüne kadar 4 yorum yapıldı

  1. kelebek dedi ki:

    Hocam çok güzel anlatmışsın. Open MP bilmeyen birisi olduğumu varsayarak şu soruya cevap verin lütfen; paralel her işlemci aynı fonksiyonu mu kullanacak? #pragma omp parallel private(tid)
    fonksiyonu her işlemci tarafından çağrılacak mı? Bu konuda yazı içerisinde bilgilendirme yok. Sadece bu nedenle bile yazınız eleştirilebilir bir yazı haline gelmiş.

  2. joss dedi ki:

    Bu program 2 kez yazmadı toplamı. Emin misiniz diye sorsam ayıp olur mu 🙂


Time limit is exhausted. Please reload CAPTCHA.