【发布时间】:2020-12-05 18:27:49
【问题描述】:
我现在正在准备考试,其中一个练习题是编写一段代码,该代码在 SMP 计算机上实现数组所有元素的并行求和。我之前写过一些 OpenMP 程序,它们很大,但没有真正利用子句和指令,我遇到了 reduce 子句,所以我想知道下面的部分是否是一个并行程序,因为我想知道如何是否可以将程序简化为但仍保留并行化?
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
int main(int argc, char ** argv){
int n = atoi(argv[1]);
double * X;
X = malloc(n * sizeof(double));
for(int i = 0; i < n; i++){ X[i] = 2.0; }
int i = 0;
double sum = 0.0;
omp_set_num_threads(atoi(argv[2]));
#pragma omp parallel for private(i), shared(X) reduction(+: sum)
for(i = 0; i < n; i++){
sum += X[i];
}
printf("Sum is : %0.2f\n", sum);
return 0;
}
【问题讨论】:
标签: c multithreading parallel-processing openmp