gpt4 book ai didi

c - OpenMP 给出不一致的数据顺序

转载 作者:行者123 更新时间:2023-11-30 17:12:38 25 4
gpt4 key购买 nike

我使用 OpenMP 用 C 语言编写了一段代码,但是编译时前四个结果总是处于不同的顺序,并且运行时仅在大约一半的时间中显示非 0 的值。我错过了什么吗?这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <omp.h>

void test(int *ptr0, int *ptr1, int n)
{
int sum=0, i;
int id=omp_get_thread_num();

for(i=0;i<16;i++){
sum+=prt0[i]*ptr1[i];
}

printf("Sum = %d from thread %d\n",sum,id);
}

int main()
{
int m=64, n=16, a, b;

int** array0=calloc(m, sizeof(int*));
for(a=0;a<m;a++){
array0[a]=calloc(n, sizeof(int));
}

int** array1=calloc(m, sizeof(int*));
for(b=0;b<m;b++){
array1[b]=calloc(n, sizeof(int));
}

for(i=0;i<16;i++);{
array0[i][n/2]=i;
array1[i][n/2]=i;
}

#pragma omp parallel for schedule(dynamic)
for(i=0;i<n;i++){
test(array0[i],array1[i],n);
}

double start_time, run_time;
start_time=omp_get_wtime();
run_time=omp_get_wtime()-start_time;
printf("Total run time = %.5g seconds\n", run_time);

}

结果是(前 4 行有不同的变化):

Sum = 0 from thread 3
Sum = 1 from thread 1
Sum = 4 from thread 2
Sum = 9 from thread 3
Sum = 16 from thread 0
Sum = 25 from thread 1
Sum = 36 from thread 2
Sum = 49 from thread 3
Sum = 64 from thread 0
Sum = 81 from thread 1
Sum = 100 from thread 2
Sum = 121 from thread 3
Sum = 144 from thread 0
Sum = 169 from thread 1
Sum = 196 from thread 2
Sum = 225 from thread 3
Total run time = 3.95e-07 seconds

关于如何使结果与 0、1、4、9 等和运行时间不为 0 秒一致,有什么建议吗?

最佳答案

为什么您通过请求行中的当前开始和结束时间来期望较长的持续时间?你不想测量一些东西吗?我猜你真正的目标是获取循环开始之前的开始时间和所有测试完成之后的结束时间。

您无法控制输出的顺序,因为您无法控制线程的运行速度。只需将结果放入一个附加数组并在主线程中打印内容即可。

关于c - OpenMP 给出不一致的数据顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31391785/

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