gpt4 book ai didi

c++ - OpenMP 使用矩阵乘法任务

转载 作者:行者123 更新时间:2023-11-30 19:18:58 28 4
gpt4 key购买 nike

因此,为了尝试在 C++ 中练习一些 openMP,我尝试编写一个矩阵乘法而不使用 #pragma omp 并行 for

这是我试图向其添加任务的矩阵乘法骨架。

#include <omp.h>
#include <cstdio>

void process(double **a, double **b, double **c, int i) {
for(int j=0;j<1024;j++)
for(int k=0;k<1024;k++)
c[i][j] += a[i][k]*b[k][j];
}

void matrix_mult(double **a, double **b, double **c) {

omp_set_num_threads(4);

/* do I need to modify some storage attributes here? shared, private etc? */
#pragma omp parallel
{
for(int i=0;i<1024;i++) {

#pragma omp task
{
process(a,b,c,i);
}
}
}
}

我一直在研究一些 openMP 概述和示例,但在将概念应用到我的代码中时遇到了困难。当我使用超过 1 个线程时,我不断得到不正确的矩阵结果。我可以做什么来解决这个问题?谢谢!

最佳答案

你有一个逻辑错误:你不会生成 1024 个任务,而是生成 (# 个线程)*1024 个任务,因为每个线程都在 parallel< 中运行 for 循环/strong> 地区。只需将此for循环放入单个区域即可。

关于c++ - OpenMP 使用矩阵乘法任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25945024/

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