gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:43 26 4
gpt4 key购买 nike

我正在尝试在我的笔记本电脑(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;
}

并行:

/* 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();
}

单处理器代码工作没有问题,并行代码获得处理器的正确名称,但在调用 getdomainname() 时返回错误地址,即使使用 mpirun - np 1.

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

更新:

对于那些使用 PETSc 遇到此问题的人,请使用选项 --with-debugging=0 进行编译。似乎在某些 PETSc 调试消息等中,他们使用了对 getdomainname() 而不是 MPI_Get_processor_name() 的调用。编译而不调试会禁用库中的这个分支。

最佳答案

尝试更新版本的 MPICH2,1.1 已经很旧了。除非您要求,否则当前版本不应向 mpicc 添加任何 -m32/-m64 参数。 (我不确定旧版本是否也这样做,但这是可能的)

关于c - getdomainname() 在 MPI 下返回错误地址(测试 PETSc 库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10843436/

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