7 Nisan 2014 Pazartesi

OpenMP ile Paralelleştirerek Faktoriyel, Permütasyon, Kombinasyon hesabı

Visual Studio 2013 ile yalnızca OpenMP kullanarak Faktoriyel, Permütasyon ve Kombinasyon hesabı yapan program aşağıdadır. Kolay gelsin.
#include <iostream>
#include <conio.h>
#include <omp.h>
#include <pthread.h>
#include <assert.h>

using namespace std;

long long OmpFaktoriyel(short int sayi)
{
    long long sonuc = 1;
    #pragma omp parallel for shared(sayi, sonuc)
    for (int i = 1; i <= sayi; i++)
    {
        #pragma omp atomic
        sonuc *= i;
    }
    return sonuc;
}

float OmpPermutasyon(short int n, short int r)
{
    assert(n >= r);
    long long nFaktoriyel;
    long long rnFaktoriyel;
#pragma omp parallel shared(n, r, nFaktoriyel, rnFaktoriyel)
    {
        #pragma sections
        {
            #pragma section
            {
                nFaktoriyel = OmpFaktoriyel(n);
            }
            #pragma section
            {
                rnFaktoriyel = OmpFaktoriyel(n-r);
            }
        }
    }
    return (float)nFaktoriyel / (float)rnFaktoriyel;
}

float OmpKombinasyon(short int n, short int r)
{
    assert(n >= r);
    long long nFaktoriyel;
    long long rnFaktoriyel;
    long long rFaktoriyel;
#pragma omp parallel shared(n, r, nFaktoriyel, rnFaktoriyel)
    {
    #pragma sections
        {
            #pragma section
            {
                nFaktoriyel = OmpFaktoriyel(n);
            }
            #pragma section
            {
                rnFaktoriyel = OmpFaktoriyel(n - r);
            }
            #pragma section
            {
                rFaktoriyel = OmpFaktoriyel(r);
            }
        }
    }
    return (float)nFaktoriyel / ((float)rnFaktoriyel*rFaktoriyel);
}



int main()
{
    short int sayi = 0;
    short int n, r;
    cout << "\nOpenMP de faktoriyeli hesaplanacak sayiyi giriniz:"; cin >> sayi;
    cout << endl << "\tOpenMP Faktoriyel Sonucu:" << OmpFaktoriyel(sayi);
    cout << "\nOpenMP de Permutasyonu hesaplanacak N ve R sayilarini sirayla giriniz:"; cin >> n >> r;
    cout << endl << "\tOpenMP Permutasyonu Sonucu:" << OmpPermutasyon(n,r);
    cout << "\nOpenMP de Kombinasyonu hesaplanacak N ve R sayilarini sirayla giriniz:"; cin >> n >> r;
    cout << endl << "\tOpenMP Kombinasyon Sonucu:" << OmpKombinasyon(n, r);
    _getch();
    return 0;
}

Hiç yorum yok:

Yorum Gönder