gpt4 book ai didi

c - 如何让openmp在子程序中正确运行(c语言)

转载 作者:行者123 更新时间:2023-11-30 14:50:48 26 4
gpt4 key购买 nike

我正在尝试比较 openmp 缩减总和与数组的正常串行求和之间的差异。但我只从子程序“fast_sum”中得到垃圾号,而serial_sum中的结果是正确的。我不知道为什么......我可以使用 gcc-7 -fopenmp 成功编译我的代码。请帮助我并提前感谢您!

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <omp.h>
#include <sys/time.h>
#define NUM_THREADS 8

//////// serial /////////
double serial_sum(double *A, int N){
double sum=0.0;
int i;
for(i=1;i<=N;++i)
sum += A[i];

return(sum);
}

double fast_sum(double *A, int N){
double sum=0.0;
int i;
#pragma omp parallell for reduction(+:sum) num_threads(NUM_THREADS)
for (i =1; i<=N; ++i)
sum += A[i];

return(sum);
}

int main(void)
{
int N = 256;
double sum1, sum2, sum3;
double *A;
int i, h;

A = (double*)malloc(N * sizeof(double));

for( i = 1; i<=N;++i){
A[i] = i;
}

/* initialization A[N] */

sum1 = serial_sum(A,N);
printf("normal_sum is %f\n", sum1);
sum2 = fast_sum(A,N);
printf("fast_sum is %f\n", sum2);

free(A);
}

最佳答案

此处存在索引错误。 C 是 0 索引的 您从未初始化 A[0],并且尝试访问 A[N],即使数组仅分配给 N-1。所以谁知道 A[0] 和 A[N] 中的值是什么 - 它们可能非常大,给你垃圾值。

关于c - 如何让openmp在子程序中正确运行(c语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48773005/

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