gpt4 book ai didi

c - 在 C OpenMP 中并行化函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:48:48 24 4
gpt4 key购买 nike

我如何在 OpenMP for C 中并行化此函数

int zeroRow(int**A,int n) {
int i, j, sum, num = 0;
for(i= 0;i< n;i++) {
sum = 0;
for(j = 0; j < n; j++) {
sum += A[i][j];
}
if(sum == 0) {
num++;
}
}
return num;
}

我检查了这是否是正确的程序。

int zeroRow(int**A,int n) {
int num = 0;
#pragma omp parallel for reduction(+:num);
for(int i= 0;i< n;i++) {
int sum = 0;
for(int j = 0; j < n; j++) {
sum += A[i][j];
}
if(sum == 0) {
num++;
}
}
return num;
}

请告诉我我所做的是否正确,或者我已经使用归约并行化了外部循环,并且为每个线程提供了一个单独的数字。

最佳答案

看起来是正确的并行化。

您唯一应该添加的是指定 A 的使用的术语。 您依赖默认案例是共享的。您应该使用

明确命名状态
#pragma omp parallel for reduction(+:num) default(shared)

#pragma omp parallel for reduction(+:num) shared(A)

而且你不需要在pragma行的末尾写一个分号(;)(但是这样写是不会出错的)

关于c - 在 C OpenMP 中并行化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20456967/

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