You may also want to run your program through a memory-checking debugger such as valgrind to see if it turns up any other problems.
AFIK, ptmalloc should be fine for use with STL vector allocation. On Mar 15, 2011, at 4:00 AM, Belaid MOA wrote: > Hi Jack, > I may need to see the whole code to decide but my quick look suggest that > ptmalloc is causing a problem with STL-vector allocation. ptmalloc is the > openMPI internal malloc library. Could you try to build openMPI without > memory management (using --without-memory-manager) and let us know the > outcome. ptmalloc is not needed if you are not using an RDMA interconnect. > > With best regards, > -Belaid. > > From: dtustud...@hotmail.com > To: belaid_...@hotmail.com; us...@open-mpi.org > Subject: RE: [OMPI users] OMPI seg fault by a class with weird address. > Date: Tue, 15 Mar 2011 00:30:19 -0600 > > Hi, > > Because the code is very long, I just show the calling relationship of > functions. > > main() > { > scheduler(); > > } > scheduler() > { > ImportIndices(); > } > > ImportIndices() > { > Index IdxNode ; > IdxNode = ReadFile("fileName"); > } > > Index ReadFile(const char* fileinput) > { > Index TempIndex; > ......... > > } > > vector<int> Index::GetPosition() const { return Position; } > vector<int> Index::GetColumn() const { return Column; } > vector<int> Index::GetYear() const { return Year; } > vector<string> Index::GetName() const { return Name; } > int Index::GetPosition(const int idx) const { return Position[idx]; } > int Index::GetColumn(const int idx) const { return Column[idx]; } > int Index::GetYear(const int idx) const { return Year[idx]; } > string Index::GetName(const int idx) const { return Name[idx]; } > int Index::GetSize() const { return Position.size(); } > > The sequential code works well, and there is no scheduler(). > > The parallel code output from gdb: > ---------------------------------------------- > Breakpoint 1, myNeplanTaskScheduler(CNSGA2 *, int, int, int, ._85 *, char, > int, message_para_to_workers_VecT &, MPI_Datatype, int &, int &, > std::vector<std::vector<double, std::allocator<double> >, > std::allocator<std::vector<double, std::allocator<double> > > > &, > std::vector<std::vector<double, std::allocator<double> >, > std::allocator<std::vector<double, std::allocator<double> > > > &, > std::vector<double, std::allocator<double> > &, int, > std::vector<std::vector<double, std::allocator<double> >, > std::allocator<std::vector<double, std::allocator<double> > > > &, > MPI_Datatype, int, MPI_Datatype, int) (nsga2=0x118c490, > popSize=<value optimized out>, nodeSize=<value optimized out>, > myRank=<value optimized out>, myChildpop=0x1208d80, genCandTag=65 'A', > generationNum=1, myPopParaVec=std::vector of length 4, capacity 4 = > {...}, > message_to_master_type=0x7fffffffd540, myT1Flag=@0x7fffffffd68c, > myT2Flag=@0x7fffffffd688, > resultTaskPackageT1=std::vector of length 4, capacity 4 = {...}, > resultTaskPackageT2Pr=std::vector of length 4, capacity 4 = {...}, > xdataV=std::vector of length 4, capacity 4 = {...}, objSize=7, > resultTaskPackageT12=std::vector of length 4, capacity 4 = {...}, > xdata_to_workers_type=0x121c410, myGenerationNum=1, > Mpara_to_workers_type=0x121b9b0, nconNum=0) > at src/nsga2/myNetplanScheduler.cpp:109 > 109 ImportIndices(); > (gdb) c > Continuing. > > Breakpoint 2, ImportIndices () at src/index.cpp:120 > 120 IdxNode = ReadFile("prepdata/idx_node.csv"); > (gdb) c > Continuing. > > Breakpoint 4, ReadFile (fileinput=0xd8663d "prepdata/idx_node.csv") > at src/index.cpp:86 > 86 Index TempIndex; > (gdb) c > Continuing. > > Breakpoint 5, Index::Index (this=0x7fffffffcb80) at src/index.cpp:20 > 20 Name(0) {} > (gdb) c > Continuing. > > Program received signal SIGSEGV, Segmentation fault. > 0x00002aaaab3b0b81 in opal_memory_ptmalloc2_int_malloc () > from /opt/openmpi-1.3.4-gnu/lib/libopen-pal.so.0 > > --------------------------------------- > the backtrace output from the above parallel OpenMPI code: > > (gdb) bt > #0 0x00002aaaab3b0b81 in opal_memory_ptmalloc2_int_malloc () > from /opt/openmpi-1.3.4-gnu/lib/libopen-pal.so.0 > #1 0x00002aaaab3b2bd3 in opal_memory_ptmalloc2_malloc () > from /opt/openmpi-1.3.4-gnu/lib/libopen-pal.so.0 > #2 0x0000003f7c8bd1dd in operator new(unsigned long) () > from /usr/lib64/libstdc++.so.6 > #3 0x00000000004646a7 in __gnu_cxx::new_allocator<int>::allocate ( > this=0x7fffffffcb80, __n=0) > at > /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/ext/new_allocator.h:88 > #4 0x00000000004646cf in std::_Vector_base<int, std::allocator<int> > >::_M_allocate (this=0x7fffffffcb80, __n=0) > at > /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:127 > #5 0x0000000000464701 in std::_Vector_base<int, std::allocator<int> > >::_Vector_base (this=0x7fffffffcb80, __n=0, __a=...) > at > /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:113 > #6 0x0000000000464d0b in std::vector<int, std::allocator<int> >::vector ( > this=0x7fffffffcb80, __n=0, __value=@0x7fffffffc968, __a=...) > at > /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:216 > #7 0x00000000004890d7 in Index::Index (this=0x7fffffffcb80) > ---Type <return> to continue, or q <return> to quit--- > at src/index.cpp:20 > #8 0x000000000048927a in ReadFile (fileinput=0xd8663d > "prepdata/idx_node.csv") > at src/index.cpp:86 > #9 0x0000000000489533 in ImportIndices () at src/index.cpp:120 > #10 0x0000000000445e0e in myNeplanTaskScheduler(CNSGA2 *, int, int, int, ._85 > *, char, int, message_para_to_workers_VecT &, MPI_Datatype, int &, int &, > std::vector<std::vector<double, std::allocator<double> >, > std::allocator<std::vector<double, std::allocator<double> > > > &, > std::vector<std::vector<double, std::allocator<double> >, > std::allocator<std::vector<double, std::allocator<double> > > > &, > std::vector<double, std::allocator<double> > &, int, > std::vector<std::vector<double, std::allocator<double> >, > std::allocator<std::vector<double, std::allocator<double> > > > &, > MPI_Datatype, int, MPI_Datatype, int) (nsga2=0x118c490, > popSize=<value optimized out>, nodeSize=<value optimized out>, > myRank=<value optimized out>, myChildpop=0x1208d80, genCandTag=65 'A', > generationNum=1, myPopParaVec=std::vector of length 4, capacity 4 = > {...}, > message_to_master_type=0x7fffffffd540, myT1Flag=@0x7fffffffd68c, > myT2Flag=@0x7fffffffd688, > resultTaskPackageT1=std::vector of length 4, capacity 4 = {...}, > resultTaskPackageT2Pr=std::vector of length 4, capacity 4 = {...}, > xdataV=std::vector of length 4, capacity 4 = {...}, objSize=7, > resultTaskPackageT12=std::vector of length 4, capacity 4 = {...}, > xdata_to_workers_type=0x121c410, myGenerationNum=1, > Mpara_to_workers_type=0x121b9b0, nconNum=0) > ---Type <return> to continue, or q <return> to quit--- > at src/nsga2/myNetplanScheduler.cpp:109 > #11 0x000000000044f44b in main (argc=1, argv=0x7fffffffd998) > at src/nsga2/main-parallel2.cpp:216 > ---------------------------------------------------- > > What is "opal_memory_ptmalloc2_int_malloc ()" ? > > The gdb output from sequential code: > ------------------------------------- > Breakpoint 1, main (argc=<value optimized out>, argv=<value optimized out>) > at src/nsga2/main-seq.cpp:32 > 32 ImportIndices(); > (gdb) c > Continuing. > > Breakpoint 2, ImportIndices () at src/index.cpp:115 > 115 IdxNode = ReadFile("prepdata/idx_node.csv"); > (gdb) c > Continuing. > > Breakpoint 4, ReadFile (fileinput=0xd6bb9d "prepdata/idx_node.csv") > at src/index.cpp:86 > 86 Index TempIndex; > (gdb) c > Continuing. > > Breakpoint 5, Index::Index (this=0x7fffffffd6d0) at src/index.cpp:20 > 20 Name(0) {} > (gdb) c > Continuing. > > Breakpoint 4, ReadFile (fileinput=0xd6bbb3 "prepdata/idx_ud.csv") > at src/index.cpp:86 > 86 Index TempIndex; > (gdb) bt > #0 ReadFile (fileinput=0xd6bbb3 "prepdata/idx_ud.csv") at src/index.cpp:86 > #1 0x0000000000471cc9 in ImportIndices () at src/index.cpp:116 > #2 0x000000000043bba6 in main (argc=<value optimized out>, > argv=<value optimized out>) at src/nsga2/main-seq.cpp:32 > > -------------------------------------- > thanks > > > From: belaid_...@hotmail.com > To: us...@open-mpi.org; dtustud...@hotmail.com > Subject: RE: [OMPI users] OMPI seg fault by a class with weird address. > Date: Tue, 15 Mar 2011 06:16:35 +0000 > > Hi Jack, > 1- Where is your main function to see how you called your class? > 2- I do not see the implementation of GetPosition, GetName, etc.? > > With best regards, > -Belaid. > > > From: dtustud...@hotmail.com > To: us...@open-mpi.org > Date: Mon, 14 Mar 2011 19:04:12 -0600 > Subject: [OMPI users] OMPI seg fault by a class with weird address. > > Hi, > > I got a run-time error of a Open MPI C++ program. > > The following output is from gdb: > > -------------------------------------------------------------------------- > Program received signal SIGSEGV, Segmentation fault. > 0x00002aaaab3b0b81 in opal_memory_ptmalloc2_int_malloc () > from /opt/openmpi-1.3.4-gnu/lib/libopen-pal.so.0 > > At the point > > Breakpoint 9, Index::Index (this=0x7fffffffcb80) at src/index.cpp:20 > 20 Name(0) {} > > The Index has been called before this point and no problem: > ------------------------------------------------------- > Breakpoint 9, Index::Index (this=0x117d800) at src/index.cpp:20 > 20 Name(0) {} > (gdb) c > Continuing. > > Breakpoint 9, Index::Index (this=0x117d860) at src/index.cpp:20 > 20 Name(0) {} > (gdb) c > Continuing. > ---------------------------------------------------------------------------- > > It seems that the 0x7fffffffcb80 address is a problem. > > But, I donot know the reason and how to remove the bug. > > Any help is really appreciated. > > thanks > > the following is the index definition. > > --------------------------------------------------------- > class Index { > public: > Index(); > Index(const Index& rhs); > ~Index(); > Index& operator=(const Index& rhs); > > vector<int> GetPosition() const; > vector<int> GetColumn() const; > vector<int> GetYear() const; > vector<string> GetName() const; > int GetPosition(const int idx) const; > int GetColumn(const int idx) const; > int GetYear(const int idx) const; > string GetName(const int idx) const; > int GetSize() const; > > void Add(const int idx, const int col, const string& name); > void Add(const int idx, const int col, const int year, const > string& name); > void Add(const int idx, const Step& col, const string& name); > void WriteFile(const char* fileinput) const; > > private: > vector<int> Position; > vector<int> Column; > vector<int> Year; > vector<string> Name; > }; > // Contructors and destructor for the Index class > Index::Index() : > Position(0), > Column(0), > Year(0), > Name(0) {} > > Index::Index(const Index& rhs) : > Position(rhs.GetPosition()), > Column(rhs.GetColumn()), > Year(rhs.GetYear()), > Name(rhs.GetName()) {} > > Index::~Index() {} > > Index& Index::operator=(const Index& rhs) { > Position = rhs.GetPosition(); > Column = rhs.GetColumn(), > Year = rhs.GetYear(), > Name = rhs.GetName(); > return *this; > } > ---------------------------------------------------------- > > > > _______________________________________________ users mailing list > us...@open-mpi.org http://www.open-mpi.org/mailman/listinfo.cgi/users > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users -- Jeff Squyres jsquy...@cisco.com For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/