Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
getdomainname()在MPI(测试PETSc库)下返回错误地址_C_Macos_Mpi_Mpich_Unistd.h - Fatal编程技术网

getdomainname()在MPI(测试PETSc库)下返回错误地址

getdomainname()在MPI(测试PETSc库)下返回错误地址,c,macos,mpi,mpich,unistd.h,C,Macos,Mpi,Mpich,Unistd.h,我试图在我的笔记本电脑(MacBook Pro 10.5.8,MPICH2-1.1)上安装PETSc-3.2,但在运行测试时遇到了一些困难:系统调用返回错误地址的getdomainname()时出错 [-1]PETSC ERROR: --------------------- Error Message ------------------ [-1]PETSC ERROR: Error in system call! [-1]PETSC ERROR: getdomainname()! [-1]P

我试图在我的笔记本电脑(MacBook Pro 10.5.8,MPICH2-1.1)上安装PETSc-3.2,但在运行测试时遇到了一些困难:系统调用返回错误地址的
getdomainname()
时出错

[-1]PETSC ERROR: --------------------- Error Message ------------------
[-1]PETSC ERROR: Error in system call!
[-1]PETSC ERROR: getdomainname()!
[-1]PETSC ERROR: ------------------------------------------------------
为了进行调查,我编写了以下测试代码,以检查带有和不带MPI的
getdomainname()
的功能:

单处理器:

#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <limits.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
  char *name;
  int namelen = CHAR_MAX;
  name = (char*) calloc (namelen,sizeof(char));
  int err = getdomainname(name,namelen);
  printf("%s\n",strerror(errno));
  printf("Domain name: %s\n",name);
  return err;
} 
单处理器代码工作正常,并行代码获取处理器的正确名称,但在调用
getdomainname()
时返回错误地址,即使使用
mpirun-np 1
运行也是如此

以前有人遇到过这样的问题吗?是否需要对
mpirun
进行某种配置,以便为MPI生成的每个进程设置域名?提前谢谢

更新:
对于那些使用PETSc遇到此问题的人,请使用选项
--with debugation=0
进行编译。似乎在一些PETSc调试消息等中,它们使用了对
getdomainname()
的调用,而不是
MPI\u Get\u processor\u name()
。在不进行调试的情况下编译将禁用库中的此分支。

请尝试较新版本的MPICH2,1.1非常旧。除非您要求,否则当前版本不应将任何
-m32
/
-m64
参数添加到
mpicc
。(我不确定旧版本是否也能做到这一点,但这是可能的)

这是x86_64还是IA-32系统?MPI编译器和非MPI测试是否适用于不同的体系结构?很好,我甚至没有想到这一点!我的MPI编译器自动使用
-m64
。我用
-m64
重新编译了我的单处理器代码,它停止了工作。。。tehre是解决这一问题的一种方法,还是我应该在没有
-m64
的情况下编译所有内容?请把这个写在答案里。
/* Headers */
#include "mpi.h"

int main(int argc, char **argv)
{
  MPI_Init(&argc,&argv);

  int myrank;
  char *mpi_name;
  int mpi_namelen = MPI_MAX_PROCESSOR_NAME;
  mpi_name = (char*) calloc (mpi_namelen,sizeof(char));

  MPI_Comm_rank(MPI_COMM_WORLD,&myrank);
  int mpi_err = MPI_Get_processor_name(mpi_name,&mpi_namelen);
  printf("MPI_Get_processor_name [%d]: %s\n",mpi_err,mpi_name);

  char *name;
  int namelen = CHAR_MAX;
  name = (char*) calloc (namelen,sizeof(char));
  int err = getdomainname(name,namelen);
  printf("%s\n",strerror(errno));
  printf("Domain name: %s\n",name);
  return err;

  MPI_Finalize();
}