ラップトップ (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: ------------------------------------------------------
getdomainname()
調査するために、 MPI を使用した場合と使用しない場合の機能を確認するために、次のテスト コードを作成しました。
シングル プロセッサ:
#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()
。デバッグなしでコンパイルすると、ライブラリ内のこのブランチが無効になります。