2017-12-27 11 views
0

Ich erhalte die folgenden Fehler von Valgrind.Probleme mit Valgrind beim Ausführen von Petsc

==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== 

und dieser Fehler wiederholt sich immer und immer wieder. Ich verstehe nicht, warum PetscInitialize mir eine harte Zeit geben würde. Es ist eines der ersten Dinge, die ich in meiner main.c Datei aufrufen, nachdem ich ints und Doppel initialisieren und etc.

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

Sind diese nur falsche Fehlermeldung? Jede Hilfe würde sehr geschätzt werden. Ein bisschen verzweifelt darüber. Vielen Dank.

Antwort

0

Es gibt Diskussionen here.

Es scheint, dass Sie Open MPI verwenden, die unter valgrind laut ist. Sie können versuchen, zwei PETSc-Versionen zu kompilieren (also zwei verschiedene PETS_ARCHs): Eine verwendet die optimierte MPI in Ihrem System und eine andere wird mit MPICH mit der Konfigurationsoption --download-mpich erstellt.

Zum Debuggen können Sie den mit mpich kompilierten PETSC_ARCH auswählen. Zur Leistungsbewertung können Sie einen anderen PETSC_ARCH auswählen, der mit optimierten MPI Ihrer Plattform kompiliert wurde.

Wenn Sie sowohl PETSc als auch SLEPc verwenden möchten, können Sie PetscInitialize oder SlepcInitialize für den Start ihrer Umgebung auswählen. Es macht keinen Sinn, zweimal zu wiederholen.

Ich hoffe, es ist hilfreich für Sie.

+0

Wie habe ich zwei verschiedene Builds, einen für mpich und einen für open-mpi? Ich habe mpich installiert, was mich gezwungen hat, open-mpi zu entfernen. Sobald ich das getan habe, habe ich versucht zu machen und dann konnte mein Programm mpi.h nicht finden. Ich habe versucht, mpich neu zu verbinden, damit mein Programm wieder funktioniert, aber es kann mpi.h nicht finden. Wie baue ich zwei verschiedene zwei verschiedene Versionen, wenn nur eine der beiden Open-MPI und MPich gleichzeitig verknüpft werden kann? – Yue

+0

Sorry für spät. Haben Sie versucht, mit der Konfigurationsoption --download-mpich zu installieren? oder du hast mpich selbst installiert. Meiner Meinung nach ist der sicherste Weg, diese Option direkt zu verwenden. –

+0

Für die Erstellung von zwei Versionen können Sie PETSc mit demselben PETSC_DIR konfigurieren, aber mit unterschiedlichem PETSC_ARCH. Zum Beispiel für die OpenMPI-Version: ./confugre PETSC_DIR = yourdir PETSC_ARCH = arch-linux-openmpi --mit-mpi-dir = ihr_openmpi_dir ... für mpich-version: ./confugre PETSC_DIR = yourdir PETSC_ARCH = arch-linux-mpich - -download-mpich ..., Sie können zwei verschiedene Versionen von mpi mit der Switch-Umgebungsvariablen PETSC_ARCH verknüpfen und Ihre Codes neu kompilieren. –

Verwandte Themen