gpt4 book ai didi

c - 执行基本 OpenMP (C) 程序期间没有响应

转载 作者:行者123 更新时间:2023-11-30 16:07:37 24 4
gpt4 key购买 nike

我目前是 OpenMp 的新手,正在尝试编写一个简单的 OpenMP-C 矩阵 vector 乘法程序。将矩阵大小增加到 750x750 元素后,我的程序停止响应并且窗口挂起。我想知道这是否是我的笔记本电脑的限制,或者是我面临的数据竞争状况。

我试图定义一个矩阵 A 和一个 vector u 并放入随机元素 (0-10)。然后我计算 vector 结果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;
}

最佳答案

首先,您正在执行的操作不能有数据竞争条件,因为不存在 RAW 、 WAR 、 WAW 依赖性。您可以在 wiki 中阅读有关它们的更多信息。 .

其次,您的系统挂起是因为您按照 x_range 的指示创建了 750 个线程

关于c - 执行基本 OpenMP (C) 程序期间没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59592496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com