运行 Petsc 时 Valgrind 的问题
Issues with Valgrind when running Petsc
我从 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 会给我带来困难。这是我在 main.c 文件中调用的第一件事,在我初始化 ints 和 double 等之后
PetscInitialize(&argc, &argv, NULL, NULL);
SlepcInitialize(&argc, &argv, NULL, NULL);
PetscViewerPushFormat(PETSC_VIEWER_STDOUT_SELF, PETSC_VIEWER_ASCII_MATLAB);
这些只是错误的错误吗?任何帮助将不胜感激。对此有点绝望。谢谢你。
有讨论here。
看来您使用的 Open MPI 在 valgrind 下很吵。您可以尝试编译两个版本的 PETSc(所以两个不同 PETS_ARCHs):一个在您的系统中使用优化的 MPI,另一个使用带有配置选项 --download-mpich 的 MPICH 构建。
为了调试,您可以select PETSC_ARCH 用 mpich 编译。对于性能评估,您可以 select 另一个 PETSC_ARCH 使用您平台的优化 MPI 编译。
此外,如果您想同时使用 PETSc 和 SLEPc,您可以 select PetscInitialize 或 SlepcInitialize 来启动它们的环境。重复两次没有意义
希望对你有所帮助
我从 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 会给我带来困难。这是我在 main.c 文件中调用的第一件事,在我初始化 ints 和 double 等之后
PetscInitialize(&argc, &argv, NULL, NULL);
SlepcInitialize(&argc, &argv, NULL, NULL);
PetscViewerPushFormat(PETSC_VIEWER_STDOUT_SELF, PETSC_VIEWER_ASCII_MATLAB);
这些只是错误的错误吗?任何帮助将不胜感激。对此有点绝望。谢谢你。
有讨论here。
看来您使用的 Open MPI 在 valgrind 下很吵。您可以尝试编译两个版本的 PETSc(所以两个不同 PETS_ARCHs):一个在您的系统中使用优化的 MPI,另一个使用带有配置选项 --download-mpich 的 MPICH 构建。
为了调试,您可以select PETSC_ARCH 用 mpich 编译。对于性能评估,您可以 select 另一个 PETSC_ARCH 使用您平台的优化 MPI 编译。
此外,如果您想同时使用 PETSc 和 SLEPc,您可以 select PetscInitialize 或 SlepcInitialize 来启动它们的环境。重复两次没有意义
希望对你有所帮助