2017-12-27 30 views
0

valgrind에서 다음과 같은 오류가 나타납니다.Petsg 실행시 Valgrind 관련 문제

==30996== Conditional jump or move depends on uninitialised value(s) 
==30996== at 0x12B28904: ??? (in /usr/lib64/libmlx4-rdmav2.so) 
==30996== by 0xE12CF9A: ibv_open_device (in /usr/lib64/libibverbs.so.1.0.0) 
==30996== by 0xAAFA03B: btl_openib_component_init (in /sw/arcts/centos7/openmpi/1.10.2-gcc-4.8.5/lib/libmpi.so.12.0.2) 
==30996== by 0xAAF0832: mca_btl_base_select (in /sw/arcts/centos7/openmpi/1.10.2-gcc-4.8.5/lib/libmpi.so.12.0.2) 
==30996== by 0xAAF0160: mca_bml_r2_component_init (in /sw/arcts/centos7/openmpi/1.10.2-gcc-4.8.5/lib/libmpi.so.12.0.2) 
==30996== by 0xAAEE95D: mca_bml_base_init (in /sw/arcts/centos7/openmpi/1.10.2-gcc-4.8.5/lib/libmpi.so.12.0.2) 
==30996== by 0xABE96D9: mca_pml_ob1_component_init (in /sw/arcts/centos7/openmpi/1.10.2-gcc-4.8.5/lib/libmpi.so.12.0.2) 
==30996== by 0xABE75A8: mca_pml_base_select (in /sw/arcts/centos7/openmpi/1.10.2-gcc-4.8.5/lib/libmpi.so.12.0.2) 
==30996== by 0xAA98BD3: ompi_mpi_init (in /sw/arcts/centos7/openmpi/1.10.2-gcc-4.8.5/lib/libmpi.so.12.0.2) 
==30996== by 0xAAB87EC: PMPI_Init_thread (in /sw/arcts/centos7/openmpi/1.10.2-gcc-4.8.5/lib/libmpi.so.12.0.2) 
==30996== by 0x5D4664: PetscInitialize.part.3 (in /scratch/kfid_flux/ykmizu/ROMLSS/bin/ks_main.x) 
==30996== by 0x49B5B4: main (in /scratch/kfid_flux/ykmizu/ROMLSS/bin/ks_main.x) 
==30996== 

이 오류는 반복해서 반복됩니다. PetscInitialize가 나에게 왜 힘든 시간을 줄 것인지 이해할 수 없습니다. 내가 int 치의과 복식을 초기화 등

PetscInitialize(&argc, &argv, NULL, NULL); 
SlepcInitialize(&argc, &argv, NULL, NULL); 
PetscViewerPushFormat(PETSC_VIEWER_STDOUT_SELF, PETSC_VIEWER_ASCII_MATLAB); 

이 단지 거짓 오류 후에 내가 내 main.c에 파일에서 호출하는 첫 번째 것들 중 하나입니까? 어떤 도움이라도 대단히 감사하겠습니다. 이것에 대해 조금 절실합니다. 고맙습니다.

답변

0

토론이 있습니다. here

valgrind에서 시끄러운 Open MPI를 사용하는 것으로 보입니다. 컴파일러에서 두 가지 버전의 PETSc (두 가지 PETS_ARCHs)를 시도 할 수 있습니다. 하나는 시스템에서 최적화 된 MPI를 사용하고 다른 하나는 configure 옵션 --download-mpich와 함께 MPICH를 사용하여 빌드됩니다.

디버깅을 위해 mpich로 컴파일 된 PETSC_ARCH를 선택할 수 있습니다. 성능 평가를 위해 플랫폼의 최적화 된 MPI로 컴파일 된 다른 PETSC_ARCH를 선택할 수 있습니다.

또한 PETSc와 SLEPc를 모두 사용하려는 경우 환경 시작을 위해 PetscInitialize 또는 SlepcInitialize를 선택할 수 있습니다. 두 번 반복하는 것은 의미가 없습니다.

도움이되기를 바랍니다.

+0

어떻게 서로 다른 두 개의 빌드가 앞쪽 mpich 용이고 다른 쪽은 open-mpi 용입니까? 나는 mpich를 설치했는데, 그것은 open-mpi의 링크를 풀게했다. 한번 시도한 결과, make는 mpi.h를 찾지 못했습니다. mpich를 재 연결하여 프로그램을 다시 작동 시키려고했지만 mpi.h를 찾을 수 없습니다. 한 번에 두 개의 open-mpi와 mpich 중 하나만 연결할 수 있다면 어떻게 두 가지 다른 버전을 만들 수 있습니까? – Yue

+0

죄송합니다. configure --download-mpich 옵션을 사용하여 설치를 시도 했습니까? 또는 당신은 혼자서 mpich를 설치했습니다. 내 의견에는 가장 안전한 방법은이 옵션을 직접 사용하는 것입니다. –

+0

두 버전을 빌드하는 경우 PETSC를 동일한 PETSC_DIR로 구성 할 수 있지만 PETSC_ARCH는 다릅니다. 예를 들어, openmpi 버전의 경우 : ./confugre PETSC_DIR = yourdir PETSC_ARCH = arch-linux-openmpi --with-mpi-dir = your_openmpi_dir ... mpich 버전의 경우 : ./confugre PETSC_DIR = yourdir PETSC_ARCH = arch-linux-mpich - -download-mpich ... 스위치 환경 변수 PETSC_ARCH에 의해 서로 다른 두 버전의 mpi를 링크하고 코드를 다시 컴파일 할 수 있습니다. –