1

我从 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 文件中调用的第一件事。

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

这些只是错误的错误吗?任何帮助将不胜感激。对此有些绝望。谢谢你。

4

1 回答 1

0

这里有讨论。

看来您使用的是在 valgrind 下嘈杂的 Open MPI。您可以尝试编译两个版本的 PETSc(因此有两个不同的 PETS_ARCH):一个使用系统中优化的 MPI,另一个使用 MPICH 和配置选项 --download-mpich 构建。

对于调试,您可以选择使用 mpich 编译的 PETSC_ARCH。对于性能评估,您可以选择另一个使用您平台的优化 MPI 编译的 PETSC_ARCH。

另外,如果您想同时使用 PETSc 和 SLEPc,您可以选择 PetscInitialize 或 SlepcInitialize 来启动它们的环境。重复两次是没有意义的。

我希望它对你有帮助。

于 2017-12-28T13:15:51.067 回答