小编Agn*_*gni的帖子

由于MPI_comm_size导致的分段错误错误

我有一个Fortran代码设计与默认通信器MPI_COMM_WORLD一起运行,但我打算只用几个处理器运行它.我有另一个代码,用于MPI_comm_split获取另一个通信器MyComm.这是一个整数,3当我打印它的值时我得到了.现在我在我的Fortran代码中调用一个C函数来获得对应的等级和大小MyComm.但我在这里面临几个问题.

  1. 在Fortran中,当我打印时MyComm,它的值是3,但是当我在C函数中打印它时,它就变成了17278324.我还打印了MPI_COMM_WORLD的值,它的价值大约是1140850688.我不知道这些价值观是什么意思,为什么MyComm变化的价值呢?

  2. 我的代码运行正常并创建可执行文件,但是当我执行它时,我得到了分段错误错误.我gdb以前调试我的代码,过程终止于以下行

程序以信号11,分段故障结束.

#0  0x00007fe5e8f6248c in PMPI_Comm_size (comm=0x107a574, size=0x13c4ba0) at pcomm_size.c:62
62      *size = ompi_comm_size((ompi_communicator_t*)comm);
Run Code Online (Sandbox Code Playgroud)

我注意到MPI_comm_rank给出了相应的排名MyComm,但问题只在于MPI_comm_size.没有这样的问题MPI_COMM_WORLD.所以我无法理解造成这种情况的原因.我检查了我的输入,但我没有得到任何线索.这是我的C代码,

#include <stdio.h>
#include "utils_sub_names.h"
#include <mpi.h>
#define MAX_MSGTAG 1000
int flag_msgtag=0;
MPI_Request mpi_msgtags[MAX_MSGTAG];

char *ibuff;
int ipos,nbuff;

MPI_Comm MyComm;
 void par_init_fortran (MPI_Fint *MyComm_r,MPI_Fint*machnum,MPI_Fint *machsize)
{
 MPI_Fint comm_in
 comm_in=*MyComm_r;
 MyComm=MPI_Comm_f2c(comm_in);
 printf("my comm is %d \n",MyComm);

  MPI_Comm_rank(MyComm,machnum); …
Run Code Online (Sandbox Code Playgroud)

c fortran mpi

0
推荐指数
1
解决办法
338
查看次数

标签 统计

c ×1

fortran ×1

mpi ×1