openmp - Openmp DCT 并行
问题描述
我有这个代码。它是 DCT 的 openmp 实现。
#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 或尝试其他方式使其并行?
解决方案
推荐阅读
- swift - 在 macOS 应用程序中执行外部 swift 代码
- c++ - 无法使用 QVariantList 填充 ComboBox 模型
- node.js - 如何在使用 axios 的反应应用程序中显示 src 文件夹中的图像
- vba - 拆分表单为其每个部分创建一个单独的集合
- arrays - 最简单的字符串数组c程序上的分段错误(核心转储)
- r - 如何合并两个数据框并根据巧合填充不同的选项
- php - 在脚本中设置系统日期?
- visual-studio-code - 保存时有没有办法更改默认文件名?
- spring - 弹簧千分尺执行器 StatsD 标签定义
- python - 从作为异步任务运行的函数中获取订单值