Facebook
From Sharp Cassowary, 9 Years ago, written in C.
This paste is a reply to Untitled from Queen Wolf - go back
Embed
Viewing differences between Untitled and Re: Untitled
#include 
#include 
#include 

#define  NUM_LOOPS 50

int
main(int argc, char *argv[])
{
    double **A;
    double *u, *v;
    long rows = 5000, columns = 5000;
    time_t begin_t, end_t;
    long i, j, k;

    // Inicjujemy wektory i macierz.
    u = (double*)malloc(columns * sizeof(double));
    v = (double*)malloc(rows * sizeof(double));

    A = (double**)malloc(rows * sizeof(double*));

    for (i = 0; i < rows; i++)
        A[i] = (double*)malloc(columns * sizeof(double));

    // Wypełniamy wektor u oraz macierz A dowolnymi wartościami.
    for (i = 0; i < columns; i++) {
        u[i] = (double)(i / 1000.0f);

        for ( j = 0; j < rows; j++ )
            A[j][i] = (double)(i * j / 1000.0f);
    }

    begin_t = time(NULL);

    // Pętla zewnętrzna.
    for (k = 0; k < NUM_LOOPS; k++) {
        // Obliczamy v = A*u z wykorzystaniem dyrektyw OpenMP.
        #pragma omp parallel for shared(A, v, u, rows, columns) private(i, j)
        for (i = 0; i < rows; i++) {
            v[i] = 0.0f;
            for (j = 0; j < columns; j++)
                v[i]  = v[i] + A[i][j] * u[j];
        }
    }

    end_t = time(NULL);

    printf("Czas obliczen: %f.\n", difftime(end_t, begin_t));

    // Zwalniamy pamięć.
    free(u);
    free(v);

    for (i = 0; i < rows; i++)
        free(A[i]);

    free(A);

    return 0;
}