Openmp DCT параллельный - PullRequest
0 голосов
/ 11 мая 2018

У меня есть этот код. Это openmp реализация DCT.

#include <bits/stdc++.h>
#include <omp.h>
#include <sys/time.h>
using namespace std;
#define pi 3.142857
#define ChunkSize 128
const int m = 4096;

int dctTransform(int matrix[m])
{
    int i, k;

    int chunk;
    chunk = ChunkSize;

    float dct[m];

    float ci, dct1, sum;
    #pragma omp parallel shared(matrix,i,chunk) private(k)
    {
        #pragma omp for schedule(dynamic,chunk) nowait
        for (i = 0; i < m; i++) {
            if (i == 0)
                ci = 1 / sqrt(m);
            else
                ci = sqrt(2) / sqrt(m);

            sum = 0;
            for (k = 0; k < m; k++) {
                    dct1 = matrix[k] * 
                    cos((2 * k + 1) * i * pi / (2 * m));
                    sum = sum + dct1;
            }
            dct[i]= ci * sum;
        }
    }
    for (i = 0; i < m; i++) {
        printf("%f\t", dct[i]);
        printf(" ");
    }
}

int main()
{
    int matrix[m] = { 255, 255, ..., 255 };//4096 values
    dctTransform(matrix);
    return 0;
}

Проблема в том, что при параллельном запуске я получаю результаты, отличные от последовательного кода. Может кто-нибудь объяснить мне, почему это произошло? Я должен изменить параллельный omp или попробовать другой способ сделать его параллельным?

...