gpt4 book ai didi

c - 如何使用 MPI_Gather 函数从变量中获取数据

转载 作者:行者123 更新时间:2023-11-30 16:40:21 26 4
gpt4 key购买 nike

我尝试编写“查找素数”代码。但是 MPI_Gather 函数无法获取“c”的值(素数)。即使我声明其他数组也不起作用。我的代码源有什么问题?当我删除 MPI_Gather 函数的部分时,效果很好。我是否需要使用其他类型的函数才能获取该值?

这是我的代码:

#include<stdio.h>
#include<mpi.h>
#include<stdlib.h>
#define MAXSIZE 1000

int main(int argc, char *argv[]){
int my_rank,p,low,high;
int x,data[MAXSIZE],a=0;
int num,t,result,i=0;
int w=0,b=0,c=0,d=0;
int * results, *resultss;

MPI_Request req;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD, &p);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);


if( my_rank == 0){
printf("Input(50~1000) : ");
fflush(stdout);
scanf("%d",&w);
for(i=0; i<w; i++) data[i] = i+1;
}

MPI_Bcast(&w, 1, MPI_INT,0,MPI_COMM_WORLD);
MPI_Bcast(data, w, MPI_INT,0,MPI_COMM_WORLD);


if( my_rank != 0){
x = w/(p-1);
low = (my_rank-1)*x;
high = low+x-1;
for(num = data[low]; num <= data[high];num++){
result = 0;
t=1;
while(num>=t){
if(num%t==0){
result = result +1;
}
t += 1;
}
if(result==2){
if(i%5){
c=num;
// printf("%d\t",c);
}
else{
c=num;
// printf("%d\n",c);
}
}

else {
results = (int *)malloc(p * sizeof(int));
}
}
}

MPI_Gather(&c, 1, MPI_INT, results, 1, MPI_INT, 0, MPI_COMM_WORLD);
int j=0;
for(j=1; j< p; j++){
if(my_rank == 0){
printf("%d\n",results[j]);
}
}

MPI_Finalize();

}

这是错误消息:

* 处理接收到的信号*

 Signal: Segmentation fault: 11 (11)
Signal code: Address not mapped (1)
Failing at address: 0x0
[ 0] 0 libsystem_platform.dylib 0x00007fff8af90b3a _sigtramp + 26
[ 1] 0 ??? 0x000000010cc560cb 0x0 + 4509229259
[ 2] 0 libopen-pal.40.dylib 0x00000001052771a5 non_overlap_copy_content_same_ddt + 885
[ 3] 0 libmpi.40.dylib 0x00000001050cc97c ompi_datatype_sndrcv + 444
[ 4] 0 libmpi.40.dylib 0x00000001051401ff ompi_coll_base_gather_intra_basic_linear + 159
[ 5] 0 libmpi.40.dylib 0x00000001050d9ac4 MPI_Gather + 564
[ 6] 0 prog3 0x0000000105095dfb main + 923
[ 7] 0 libdyld.dylib 0x00007fff8ad81235 start + 1
[ 8] 0 ??? 0x0000000000000001 0x0 + 1

* 错误消息结束 *

<小时/>

主要作业正常终止,但 1 个进程返回非零退出代码。根据用户指示,作业已中止。

mpirun 注意到节点 ****-ui-MacBook Pro 上的 PID 为 0 的进程在信号 11 上退出(段错误:11)。

最佳答案

错误是您没有在正确的位置分配结果

应该是这样的

if( my_rank != 0){
/* compute how many prime numbers there are */
} else {
results = (int *)malloc(p * sizeof(int));
}

关于c - 如何使用 MPI_Gather 函数从变量中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46702812/

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