如何使用OpenMP并行化此矩阵时间矢量运算

How can I parallelize this Matrix times Vector operation using OpenMP?

本文关键字:时间 运算 何使用 OpenMP 并行化      更新时间:2023-10-16

我试图在下面的代码中并行化for循环,但我不确定应该在for循环之前添加什么类型的OpenMP指令,我需要首先以私有或公共形式声明这些变量吗?

#include <stdio.h>
#include <time.h>
#include <omp.h>
void mxv_row(int m, int n, double *A, double *B, double *C)
{
int i, j;
# pragma omp parallel private(?)shared (?)
for (i=0; i<m; i++)
# pragma omp for
{
A[i] = 0.0;
for (j=0; j<n; j++)
A[i] += B[i*n+j]*C[j];
}
}

当您在循环外声明j时,它应该是私有的。如果您在第二个for循环中声明它,那么就可以了。

其余部分可以共享(i除外,因为它是并行循环索引(,但不必共享,因为它只有大小和指针。