【发布时间】:2020-01-04 16:12:45
【问题描述】:
我目前是 OpenMp 的新手,正在尝试编写一个简单的 OpenMP-C 矩阵向量乘法程序。将矩阵大小增加到 750x750 元素时,我的程序停止响应并且窗口挂起。我想知道这是我的笔记本电脑的限制,还是我面临的数据争用情况。
我正在尝试定义一个矩阵 A 和一个向量 u 并放置随机元素 (0-10)。然后我正在计算向量结果b。
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x_range = 50;
int y_range = 50;
int A[x_range][y_range];
int u[y_range];
int b[y_range];
printf("Measuring time resolution %g\n", omp_get_wtick());
printf("Parallel program start time %g\n", omp_get_wtime());
#pragma omp parallel num_threads(x_range)
{
int b_temp[y_range];
for (int j = 0; j < y_range; j++)
{
b_temp[j] = 0;
}
#pragma omp for
for (int i = 0; i < x_range; i++)
{
for (int j = 0; j < y_range; j++)
{
A[i][j] = (rand() % 10) + 1;
}
}
#pragma omp for
for (int j = 0; j < y_range; j++)
{
{
u[j] = (rand() % 10) + 1;
}
}
#pragma omp for
for (int i = 0; i < x_range; i++)
{
for(int j = 0; j < y_range; j++)
{
b_temp[i] = b_temp[i] + A[i][j]*u[j];
}
}
#pragma omp critical
for(int j = 0; j < y_range; j++)
{
b[j] = b[j] + b_temp[j];
}
}
printf("parallel program end time %g\n", omp_get_wtime());
return 0;
}
【问题讨论】:
标签: c openmp race-condition