2012-06-01 3 views
1

내 랩톱 (MacBook Pro 10.5.8, MPICH2-1.1)에 PETSc-3.2를 설치하려고하는데 테스트를 실행할 때 약간의 어려움이 있습니다. 시스템 호출에서 잘못된 주소를 반환하는 getdomainname()으로 오류가 발생했습니다. 조사하기 위해getdomainname()은 MPI (PETSc 라이브러리 테스트)에서 잘못된 주소를 반환합니다.

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

단일 프로세서 코드는 문제없이 작동하며, 병렬 코드는 올바른 n 프로세서에 대한 ame하지만 mpirun -np 1으로 실행하는 경우에도 getdomainname()에 대한 호출에서 잘못된 주소를 반환합니다.

누구나 이와 같은 문제가 발생 했습니까? mpirun에 대한 설정이 있습니까? MPI가 스폰하는 각 프로세스마다 도메인 이름이 설정되도록해야합니까? 미리 감사드립니다!

업데이트 : PETSc이 문제로 실행 분들을 위해

는 옵션 --with-debugging=0로 컴파일합니다. 일부 PETSc 디버깅 메시지 등에서는 이 아닌 getdomainname()에 대한 호출을 사용하는 것 같습니다. 디버깅하지 않고 컴파일하면 라이브러리의이 분기가 비활성화됩니다.

+1

x86_64 또는 IA-32 시스템입니까? MPI 컴파일러와 비 MPI 테스트가 다른 아키텍처에 해당 할 수 있습니까? –

+0

좋은 전화, 나는 그것에 대해서 생각조차하지 않았다! 내 MPI 컴파일러는 자동으로'-m64'를 사용합니다. 나는 싱글 프로세서 코드를'-m64'로 다시 컴파일했고, 작동을 멈췄다.이 문제를 해결할 방법이 있을까? 아니면'-m64'없이 모든 것을 컴파일해야 하는가? 대답에 넣어주세요. – Mosby

답변

2

MPICH2의 최신 버전을 사용해보십시오. 1.1은 매우 오래된 버전입니다. 현재 버전에서는 묻지 않는 한/-m64 인수를 mpicc에 추가하지 않아야합니다. (이전 버전에서도이 작업을 수행 한 것이 확실하지 않지만 가능합니다.)

관련 문제