У меня есть этот код. Это 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 или попробовать другой способ сделать его параллельным?