7 Nisan 2014 Pazartesi

OpenMP matris çarpımı ile ilgili basit bir örnek.

#define X1 4
#define Y1 2
#define X2 2
#define Y2 5

int matris1[X1][Y1], matris2[X2][Y2], sonucMatrisi[X1][Y2];

int getchToInt()
{
    char ch = _getch();
    switch (ch)
    {
    case '0': return 0; break;
    case '1': return 1; break;
    case '2': return 2; break;
    case '3': return 3; break;
    case '4': return 4; break;
    case '5': return 5; break;
    case '6': return 6; break;
    case '7': return 7; break;
    case '8': return 8; break;
    case '9': return 9; break;
    }
}

void MatrisCarp(void)
{
    cout << "Birinci Matris:[" << X1 << "][" << Y1 << "]\n";
    int i, j, k;
    for (i = 0; i < X1; i++)
    {
        for (j = 0; j < Y1; j++)
        {
            cout << ", " << i << j << ":";
            matris1[i][j] = getchToInt(); cout << matris1[i][j];
        }
        cout << "\n";
    }

    cout << "Ikinci Matris:[" << X2 << "][" << Y2 << "]\n";

    for (j = 0; j < X2; j++)
    {
        for (k = 0; k < Y2; k++)
        {
            cout << ", " << j << k << ":";
            matris2[j][k] = getchToInt(); cout << matris2[j][k];
        }
        cout << "\n";
    }
#pragma omp parallel for shared(sonucMatrisi,matris1,matris2)
    for (i = 0; i < X1; i++)
    {
        for (j = 0; j < Y2/*X2*/; j++)
        {
            sonucMatrisi[i][j] = 0;
            for (k = 0; k < Y1; k++)
                #pragma omp atomic
                sonucMatrisi[i][j] += matris1[i][k] * matris2[k][j];
        }
    }

    cout << "Sonuc Matrisi:[" << X1 << "][" << Y2 << "]\n";

    for (i = 0; i < X1; i++)
    {
        for (k = 0; k < Y2; k++)
        {
            cout << ", " << sonucMatrisi[i][k];
        }
        cout << "\n";
    }
}

Hiç yorum yok:

Yorum Gönder