【发布时间】:2023-04-11 02:20:01
【问题描述】:
我正在尝试在我的一个使用电子围栏的程序中查找一些内存错误。我的程序使用 OpenMPI,当我尝试运行它时,它会出现以下回溯:
Program received signal SIGSEGV, Segmentation fault.
2001 ../sysdeps/x86_64/multiarch/memcpy-ssse3-back.S: No such file or directory.
__memcpy_ssse3_back () at ../sysdeps/x86_64/multiarch/memcpy-ssse3-back.S:2001
(gdb) bt
#0 __memcpy_ssse3_back ()
at ../sysdeps/x86_64/multiarch/memcpy-ssse3-back.S:2001
#1 0x00007ffff72d6b7f in ompi_ddt_copy_content_same_ddt ()
from /usr/lib/libmpi.so.0
#2 0x00007ffff72d4d0d in ompi_ddt_sndrcv () from /usr/lib/libmpi.so.0
#3 0x00007ffff72dd5b3 in PMPI_Allgather () from /usr/lib/libmpi.so.0
#4 0x00000000004394f1 in ppl::gvec<unsigned int>::gvec (this=0x7fffffffdd60,
length=1) at qppl/gvec.h:32
#5 0x0000000000434a35 in TreeBuilder::TreeBuilder (this=0x7fffffffdc60,
octree=..., mygbodytab=..., mylbodytab=..., cellpool=0x7fffef705fc8,
---Type <return> to continue, or q <return> to quit---
leafpool=0x7fffef707fc8, bodypool=0x7fffef6bdfc0) at treebuild.cxx:93
#6 0x000000000042fb6b in BarnesHut::BuildOctree (this=0x7fffffffde50)
at barnes.cxx:155
#7 0x000000000042af52 in BarnesHut::Run (this=0x7fffffffde50)
at barnes.cxx:386
#8 0x000000000042b164 in main (argc=1, argv=0x7fffffffe118) at barnes.cxx:435
我的代码的相关部分是:
me = spr_locale_id();
world_size = spr_num_locales();
my_elements = std::shared_ptr<T>(new T[1]);
world_element_pointers = std::shared_ptr<T*>(new T*[world_size]);
MPI_Allgather(my_elements.get(), sizeof(T*), MPI_BYTE,
world_element_pointers.get(), sizeof(T*), MPI_BYTE,
MPI_COMM_WORLD);
我不确定为什么 __memcpy_ssse3_back 会导致段错误。当我在没有电围栏的情况下运行时,这部分程序不会出现段错误。有谁知道发生了什么?我正在使用 openmpi 1.4.3 版
【问题讨论】:
-
您的代码对我来说毫无意义 - 您从本地
my_elements数组发送总共 4 或 8 个数据字节(取决于架构中指针的大小)并收集所有这些字节变成一个指针数组?!没关系,如果您至少可以提供正在使用的 Open MPI 库的版本,那将会有所帮助。 -
@HristoIliev 我已经更新了我的答案以包含我正在使用的 OpenMPI 版本。我正在转移我的指针,因为我稍后会做 RDMA,最坏的情况是每个人都必须知道其他人的起始地址。
-
现在更有意义了。这是旧 Open MPI 版本中的一个已知错误 - 这里是 ticket。我建议您安装更新版本的 Open MPI 或使用票证中的补丁来修补您的 1.4.3 版本。
-
@HristoIliev 您应该将其发布为答案,以便我可以标记为正确并给您信用。
标签: segmentation-fault mpi openmpi electric-fence