diff --git a/configure.ac b/configure.ac index 282707e4809cbfaf658abef7b7dbe2ba7e1f341e..5113ba78f3fb76b05f4aaddf14de10a0eef1be08 100755 --- a/configure.ac +++ b/configure.ac @@ -7,7 +7,7 @@ AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) AC_CANONICAL_SYSTEM AC_CONFIG_SRCDIR([src/main.cpp]) AM_INIT_AUTOMAKE -AC_CONFIG_HEADER([src/config.h]) +AC_CONFIG_HEADER([src/config/config.h]) m4_ifdef([MYSQL_FOUND],,[m4_include([m4/ax_lib_mysql.m4])]) m4_ifdef([AX_CHECK_COMPILER_FLAGS],,[m4_include([m4/ax_check_compiler_flags.m4])]) m4_ifdef([ACX_PTHREAD],,[m4_include([m4/acx_pthread.m4])]) @@ -83,7 +83,7 @@ fi ####### include OpenFPM_devices include path -INCLUDES_PATH+="-I. -I../../metis_install/include -I../../OpenFPM_IO/src -I../../OpenFPM_data/src -I../../OpenFPM_devices/src -I../../OpenFPM_vcluster/src/" +INCLUDES_PATH+="-I. -Isrc/config/ -I../../metis_install/include -I../../OpenFPM_IO/src -I../../OpenFPM_data/src -I../../OpenFPM_devices/src -I../../OpenFPM_vcluster/src/" ####### Checking for GPU support diff --git a/src/.deps/pdata-HeapMemory.Po b/src/.deps/pdata-HeapMemory.Po index e6f47bb5c8f711e4691fcbdb9101546c7379437a..0706e43c51600c003e028e8c4ed69cf8d0826c70 100644 --- a/src/.deps/pdata-HeapMemory.Po +++ b/src/.deps/pdata-HeapMemory.Po @@ -1,7 +1,7 @@ pdata-HeapMemory.o: ../../OpenFPM_devices/src/memory/HeapMemory.cpp \ /usr/include/stdc-predef.h \ ../../OpenFPM_devices/src/memory/HeapMemory.hpp config.h \ - ../../OpenFPM_data/src/memory.hpp ../../OpenFPM_data/src/config.h \ + ../../OpenFPM_data/src/memory.hpp \ /usr/lib/gcc/x86_64-redhat-linux/4.8.3/include/stddef.h \ /usr/include/c++/4.8.3/cstddef \ /usr/include/c++/4.8.3/x86_64-redhat-linux/bits/c++config.h \ @@ -95,7 +95,15 @@ pdata-HeapMemory.o: ../../OpenFPM_devices/src/memory/HeapMemory.cpp \ /usr/include/c++/4.8.3/bits/basic_ios.tcc \ /usr/include/c++/4.8.3/bits/ostream.tcc /usr/include/c++/4.8.3/istream \ /usr/include/c++/4.8.3/bits/istream.tcc /usr/include/c++/4.8.3/cstring \ - /usr/include/string.h + /usr/include/string.h ../../OpenFPM_data/src/Memleak_check.hpp \ + /usr/include/c++/4.8.3/map /usr/include/c++/4.8.3/bits/stl_tree.h \ + /usr/include/c++/4.8.3/bits/alloc_traits.h \ + /usr/include/c++/4.8.3/bits/ptr_traits.h \ + /usr/include/c++/4.8.3/bits/stl_map.h /usr/include/c++/4.8.3/tuple \ + /usr/include/c++/4.8.3/utility /usr/include/c++/4.8.3/bits/stl_relops.h \ + /usr/include/c++/4.8.3/array /usr/include/c++/4.8.3/stdexcept \ + /usr/include/c++/4.8.3/bits/uses_allocator.h \ + /usr/include/c++/4.8.3/bits/stl_multimap.h /usr/include/stdc-predef.h: @@ -105,8 +113,6 @@ config.h: ../../OpenFPM_data/src/memory.hpp: -../../OpenFPM_data/src/config.h: - /usr/lib/gcc/x86_64-redhat-linux/4.8.3/include/stddef.h: /usr/include/c++/4.8.3/cstddef: @@ -362,3 +368,29 @@ config.h: /usr/include/c++/4.8.3/cstring: /usr/include/string.h: + +../../OpenFPM_data/src/Memleak_check.hpp: + +/usr/include/c++/4.8.3/map: + +/usr/include/c++/4.8.3/bits/stl_tree.h: + +/usr/include/c++/4.8.3/bits/alloc_traits.h: + +/usr/include/c++/4.8.3/bits/ptr_traits.h: + +/usr/include/c++/4.8.3/bits/stl_map.h: + +/usr/include/c++/4.8.3/tuple: + +/usr/include/c++/4.8.3/utility: + +/usr/include/c++/4.8.3/bits/stl_relops.h: + +/usr/include/c++/4.8.3/array: + +/usr/include/c++/4.8.3/stdexcept: + +/usr/include/c++/4.8.3/bits/uses_allocator.h: + +/usr/include/c++/4.8.3/bits/stl_multimap.h: diff --git a/src/.deps/pdata-Memleak_check.Po b/src/.deps/pdata-Memleak_check.Po index 5ade6cb7e0eabafcc4e61b458302b7097345577d..e3f40118b47199b47e7f00efae9c6d8ac10fb0a7 100644 --- a/src/.deps/pdata-Memleak_check.Po +++ b/src/.deps/pdata-Memleak_check.Po @@ -1,6 +1,6 @@ pdata-Memleak_check.o: ../../OpenFPM_data/src/Memleak_check.cpp \ - /usr/include/stdc-predef.h ../../OpenFPM_data/src/Memleak_check.hpp \ - /usr/include/c++/4.8.3/iostream \ + /usr/include/stdc-predef.h config.h \ + ../../OpenFPM_data/src/Memleak_check.hpp /usr/include/c++/4.8.3/iostream \ /usr/include/c++/4.8.3/x86_64-redhat-linux/bits/c++config.h \ /usr/include/bits/wordsize.h \ /usr/include/c++/4.8.3/x86_64-redhat-linux/bits/os_defines.h \ @@ -103,6 +103,8 @@ pdata-Memleak_check.o: ../../OpenFPM_data/src/Memleak_check.cpp \ /usr/include/stdc-predef.h: +config.h: + ../../OpenFPM_data/src/Memleak_check.hpp: /usr/include/c++/4.8.3/iostream: diff --git a/src/.deps/pdata-VCluster.Po b/src/.deps/pdata-VCluster.Po index 4de2a75bfeaff4058c22d98cee59d48326111c60..aae231be0c9ed71bd803a0c45328058ef26c1440 100644 --- a/src/.deps/pdata-VCluster.Po +++ b/src/.deps/pdata-VCluster.Po @@ -939,8 +939,8 @@ pdata-VCluster.o: ../../OpenFPM_vcluster/src/VCluster.cpp \ /usr/include/boost/detail/call_traits.hpp \ ../../OpenFPM_data/src/ct_array.hpp \ ../../OpenFPM_data/src/memory_array.hpp \ - ../../OpenFPM_data/src/memory.hpp ../../OpenFPM_data/src/config.h \ - ../../OpenFPM_data/src/memory.hpp ../../OpenFPM_data/src/meta_copy.hpp \ + ../../OpenFPM_data/src/memory.hpp ../../OpenFPM_data/src/memory.hpp \ + ../../OpenFPM_data/src/meta_copy.hpp \ ../../OpenFPM_data/src/Memleak_check.hpp \ ../../OpenFPM_data/src/for_each_ref.hpp \ ../../OpenFPM_data/src/Grid/grid_sm.hpp \ @@ -3023,8 +3023,6 @@ config.h: ../../OpenFPM_data/src/memory.hpp: -../../OpenFPM_data/src/config.h: - ../../OpenFPM_data/src/memory.hpp: ../../OpenFPM_data/src/meta_copy.hpp: diff --git a/src/.deps/pdata-main.Po b/src/.deps/pdata-main.Po index a26f8d32f96a7468676b81c0088ced7937e77f15..a45efb54360899b4417ab89034201c0ad4631f40 100644 --- a/src/.deps/pdata-main.Po +++ b/src/.deps/pdata-main.Po @@ -901,8 +901,8 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \ /usr/include/boost/detail/call_traits.hpp \ ../../OpenFPM_data/src/ct_array.hpp \ ../../OpenFPM_data/src/memory_array.hpp \ - ../../OpenFPM_data/src/memory.hpp ../../OpenFPM_data/src/config.h \ - ../../OpenFPM_data/src/memory.hpp ../../OpenFPM_data/src/meta_copy.hpp \ + ../../OpenFPM_data/src/memory.hpp ../../OpenFPM_data/src/memory.hpp \ + ../../OpenFPM_data/src/meta_copy.hpp \ ../../OpenFPM_data/src/Memleak_check.hpp /usr/include/c++/4.8.3/map \ /usr/include/c++/4.8.3/bits/stl_tree.h \ /usr/include/c++/4.8.3/bits/stl_map.h \ @@ -1293,6 +1293,7 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \ SubdomainGraphNodes.hpp metis_util.hpp \ ../../metis_install/include/metis.h /usr/include/inttypes.h \ ../../OpenFPM_IO/src/VTKWriter.hpp dec_optimizer.hpp \ + ../../OpenFPM_data/src/NN/CellList/CellDecomposer.hpp \ ../../OpenFPM_data/src/util.hpp Decomposition/ORB_unit_test.hpp \ Decomposition/ORB.hpp ../../OpenFPM_data/src/data_type/scalar.hpp \ Graph/CartesianGraphFactory_unit_test.hpp \ @@ -1301,7 +1302,11 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \ Grid/grid_dist_id_unit_test.hpp Grid/grid_dist_id.hpp \ Vector/vector_dist_unit_test.hpp Vector/vector_dist.hpp \ Vector/vector_dist_iterator.hpp Vector/vector_dist_key.hpp \ - Vector/vector_dist_key.hpp Decomposition/CartDecomposition_unit_test.hpp \ + Vector/vector_dist_key.hpp \ + ../../OpenFPM_devices/src/memory/PreAllocHeapMemory.hpp \ + ../../OpenFPM_devices/src/memory/HeapMemory.hpp \ + ../../OpenFPM_devices/src/memory/PtrMemory.hpp \ + Decomposition/CartDecomposition_unit_test.hpp \ Decomposition/CartDecomposition.hpp /usr/include/stdc-predef.h: @@ -3286,8 +3291,6 @@ config.h: ../../OpenFPM_data/src/memory.hpp: -../../OpenFPM_data/src/config.h: - ../../OpenFPM_data/src/memory.hpp: ../../OpenFPM_data/src/meta_copy.hpp: @@ -4174,6 +4177,8 @@ metis_util.hpp: dec_optimizer.hpp: +../../OpenFPM_data/src/NN/CellList/CellDecomposer.hpp: + ../../OpenFPM_data/src/util.hpp: Decomposition/ORB_unit_test.hpp: @@ -4208,6 +4213,12 @@ Vector/vector_dist_key.hpp: Vector/vector_dist_key.hpp: +../../OpenFPM_devices/src/memory/PreAllocHeapMemory.hpp: + +../../OpenFPM_devices/src/memory/HeapMemory.hpp: + +../../OpenFPM_devices/src/memory/PtrMemory.hpp: + Decomposition/CartDecomposition_unit_test.hpp: Decomposition/CartDecomposition.hpp: diff --git a/src/Decomposition/CartDecomposition.hpp b/src/Decomposition/CartDecomposition.hpp index 91c187d82b184ae0021fec176c65ef17a3533374..a9f7ae4a92704518cd62fb3b41660a737fdc49c4 100644 --- a/src/Decomposition/CartDecomposition.hpp +++ b/src/Decomposition/CartDecomposition.hpp @@ -19,6 +19,7 @@ #include "dec_optimizer.hpp" #include "Space/Shape/Box.hpp" #include "Space/Shape/Point.hpp" +#include "NN/CellList/CellDecomposer.hpp" /** * \brief This class decompose a space into subspaces @@ -43,6 +44,7 @@ template<unsigned int dim, typename T, template<typename> class device_l=openfpm class CartDecomposition { public: + //! Type of the domain we are going to decompose typedef T domain_type; @@ -51,7 +53,7 @@ public: private: - //! This is the key type toaccess data_s, for example in the case of vector + //! This is the key type to access data_s, for example in the case of vector //! acc_key is size_t typedef typename data_s<SpaceBox<dim,T>,device_l<SpaceBox<dim,T>>,Memory,openfpm::vector_grow_policy_default,openfpm::vect_isel<SpaceBox<dim,T>>::value >::access_key acc_key; @@ -69,11 +71,12 @@ private: //! exist for efficient global communication openfpm::vector<size_t> fine_s; - //! number of total sub-domain - size_t N_tot; + //! Structure that store the cartesian grid information + grid_sm<dim,void> gr; - //! number of sub-domain on each dimension - size_t div[dim]; + //! Structure that decompose your structure into cell without creating them + //! useful to convert positions to CellId or sub-domain id in this case + CellDecomposer_sm<dim,T> cd; //! rectangular domain to decompose Domain<dim,T> domain; @@ -94,8 +97,6 @@ private: // Calculate the total number of box and and the spacing // on each direction - N_tot = 1; - // Get the box containing the domain SpaceBox<dim,T> bs = domain.getBox(); @@ -103,8 +104,7 @@ private: { // Calculate the spacing - spacing[i] = (bs.getHigh(i) - bs.getLow(i)) / div[i]; - N_tot *= div[i]; + spacing[i] = (bs.getHigh(i) - bs.getLow(i)) / gr.size(i); } // Here we use METIS @@ -114,7 +114,7 @@ private: // Processor graph - Graph_CSR<nm_part_v,nm_part_e> gp = g_factory_part.template construct<NO_EDGE,T,dim-1>(div,domain); + Graph_CSR<nm_part_v,nm_part_e> gp = g_factory_part.template construct<NO_EDGE,T,dim-1>(gr.getSize(),domain); // Get the number of processing units size_t Np = v_cl.getProcessingUnits(); @@ -131,12 +131,12 @@ private: // fill the structure that store the processor id for each sub-domain - fine_s.resize(N_tot); + fine_s.resize(gr.size()); // Optimize the decomposition creating bigger spaces // And reducing Ghost over-stress - dec_optimizer<dim,Graph_CSR<nm_part_v,nm_part_e>> d_o(gp,div); + dec_optimizer<dim,Graph_CSR<nm_part_v,nm_part_e>> d_o(gp,gr.getSize()); // set of Boxes produced by the decomposition optimizer openfpm::vector<::Box<dim,size_t>> loc_box; @@ -155,6 +155,19 @@ private: // add the sub-domain sub_domains.add(sub_d); } + + // fill fine_s structure + auto it = gp.getVertexIterator(); + + while (it.isNext()) + { + size_t key = it.get(); + + // fill with the fine decomposition + fine_s.get(key) = gp.template vertex_p<nm_part_v::id>(key); + + ++it; + } } /*! \brief Create the subspaces that decompose your domain @@ -210,7 +223,7 @@ public: * */ CartDecomposition(CartDecomposition<dim,T,device_l,Memory,Domain,data_s> && cd) - :sub_domain(cd.sub_domain),N_tot(cd.N_tot),domain(cd.domain),v_cl(cd.v_cl) + :sub_domain(cd.sub_domain),gr(cd.gr),cd(cd.cd),domain(cd.domain),v_cl(cd.v_cl) { //! Subspace selected //! access_key in case of grid is just the set of the index to access the grid @@ -221,8 +234,6 @@ public: for (int i = 0 ; i < dim ; i++) { - this->div[i] = div[dim]; - //! Box Spacing this->spacing[i] = spacing[i]; } @@ -234,7 +245,7 @@ public: * */ CartDecomposition(Vcluster & v_cl) - :id_sub(0),N_tot(0),v_cl(v_cl) + :id_sub(0),v_cl(v_cl) {} /*! \brief Cartesian decomposition constructor, it divide the space in boxes @@ -245,7 +256,7 @@ public: * */ CartDecomposition(std::vector<size_t> dec, Domain<dim,T> domain, Vcluster & v_cl) - :id_sub(0),div(dec),domain(domain),v_cl(v_cl) + :id_sub(0),gr(dec),cd(domain,dec),domain(domain),v_cl(v_cl) { // Create the decomposition @@ -264,14 +275,7 @@ public: template<typename Mem> size_t inline processorID(encapc<1, Point<dim,T>, Mem> p) { - size_t pid = 0; - - for (size_t i = 0 ; i < dim ; i++) - { - pid += p.template get<Point<dim,T>::x>()[i]; - } - - return pid; + return fine_s.get(cd.getCell(p)); } /*! \brief processorID return in which processor the particle should go @@ -282,14 +286,7 @@ public: size_t inline processorID(T (&p)[dim]) { - size_t pid = 0; - - for (size_t i = 0 ; i < dim ; i++) - { - pid += p[i]; - } - - return pid; + return fine_s.get(cd.getCell(p)); } /*! \brief Set the parameter of the decomposition @@ -316,14 +313,13 @@ public: * \param domain_ domain to decompose * */ - void setParameters(size_t div_[dim], Domain<dim,T> domain_) + void setParameters(const size_t (& div_)[dim], Domain<dim,T> domain_) { // Set the decomposition parameters - for (int i = 0 ; i < dim ; i++) - div[i] = div_[i]; - + gr.setDimensions(div_); domain = domain_; + cd.setDimensions(domain,div_); //! Create the decomposition @@ -429,7 +425,7 @@ public: { #ifdef DEBUG // Check if this subspace exist - if (id >= N_tot) + if (id >= gr.size()) { std::cerr << "Error CartDecomposition: id > N_tot"; } @@ -453,7 +449,7 @@ public: size_t getNHyperCube() { - return N_tot; + return gr.size(); } /*! \brief produce an hyper-cube approximation of the space decomposition diff --git a/src/Decomposition/ORB_unit_test.hpp b/src/Decomposition/ORB_unit_test.hpp index 5dbbd9c7370877d7412bf05940e4cd249fd604d4..5b6fa75a7c122ab8bb38e3aee4aa01a6bfebf0fc 100644 --- a/src/Decomposition/ORB_unit_test.hpp +++ b/src/Decomposition/ORB_unit_test.hpp @@ -49,7 +49,7 @@ BOOST_AUTO_TEST_CASE( ORB_test_use) // Orthogonal Recursive Bisection Box<3,float> dom({0.0,0.0,0.0},{1.0,1.0,1.0}); - ORB<3,float> orb(dom,16,vp); +// ORB<3,float> orb(dom,16,vp); // } diff --git a/src/Grid/grid_dist_id_unit_test.hpp b/src/Grid/grid_dist_id_unit_test.hpp index 2bb9530e3b667b34919520ac55540310648618a0..43c7293c0b0dcb12b750331cb00ed2d721013388 100644 --- a/src/Grid/grid_dist_id_unit_test.hpp +++ b/src/Grid/grid_dist_id_unit_test.hpp @@ -107,7 +107,7 @@ BOOST_AUTO_TEST_CASE( grid_dist_id_iterator_test_use) BOOST_AUTO_TEST_CASE( grid_dist_id_poisson_test_use) { // grid size - size_t sz[2] = {1024,1024}; +/* size_t sz[2] = {1024,1024}; // Distributed grid with id decomposition @@ -115,7 +115,7 @@ BOOST_AUTO_TEST_CASE( grid_dist_id_poisson_test_use) // Create the grid on memory - g_dist.Create(); + g_dist.Create();*/ /* auto g_it = g_dist.getIteratorBulk(); diff --git a/src/Makefile b/src/Makefile index 710db5fa703388db7603aba85669e40c61278f9e..5caa50694257308cf217eb478314df08c16508f1 100644 --- a/src/Makefile +++ b/src/Makefile @@ -82,7 +82,7 @@ target_triplet = x86_64-unknown-linux-gnu bin_PROGRAMS = pdata$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(srcdir)/config.h.in $(top_srcdir)/depcomp + $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_mysql.m4 \ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ @@ -97,13 +97,14 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_mysql.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = config.h +CONFIG_HEADER = $(top_builddir)/src/config/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_pdata_OBJECTS = pdata-main.$(OBJEXT) pdata-HeapMemory.$(OBJEXT) \ - pdata-VCluster.$(OBJEXT) pdata-Memleak_check.$(OBJEXT) + pdata-PtrMemory.$(OBJEXT) pdata-VCluster.$(OBJEXT) \ + pdata-Memleak_check.$(OBJEXT) pdata_OBJECTS = $(am_pdata_OBJECTS) am__DEPENDENCIES_1 = am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) @@ -122,7 +123,7 @@ AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ am__v_at_1 = -DEFAULT_INCLUDES = -I. +DEFAULT_INCLUDES = -I. -I$(top_builddir)/src/config depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f @@ -150,8 +151,7 @@ am__can_run_installinfo = \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ - $(LISP)config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -194,7 +194,7 @@ ECHO_C = ECHO_N = -n ECHO_T = EXEEXT = -INCLUDES_PATH = -I. -I../../metis_install/include -I../../OpenFPM_IO/src -I../../OpenFPM_data/src -I../../OpenFPM_devices/src -I../../OpenFPM_vcluster/src/ +INCLUDES_PATH = -I. -Isrc/config/ -I../../metis_install/include -I../../OpenFPM_IO/src -I../../OpenFPM_data/src -I../../OpenFPM_devices/src -I../../OpenFPM_vcluster/src/ INSTALL = /usr/bin/install -c INSTALL_DATA = ${INSTALL} -m 644 INSTALL_PROGRAM = ${INSTALL} @@ -279,12 +279,11 @@ top_build_prefix = ../ top_builddir = .. top_srcdir = .. LINKLIBS = $(PTHREAD_LIBS) $(OPT_LIBS) $(BOOST_LDFLAGS) $(BOOST_PROGRAM_OPTIONS_LIB) $(CUDA_LIBS) $(BOOST_THREAD_LIB) -pdata_SOURCES = main.cpp ../../OpenFPM_devices/src/memory/HeapMemory.cpp ../../OpenFPM_vcluster/src/VCluster.cpp ../../OpenFPM_data/src/Memleak_check.cpp +pdata_SOURCES = main.cpp ../../OpenFPM_devices/src/memory/HeapMemory.cpp ../../OpenFPM_devices/src/memory/PtrMemory.cpp ../../OpenFPM_vcluster/src/VCluster.cpp ../../OpenFPM_data/src/Memleak_check.cpp pdata_CXXFLAGS = $(CUDA_CFLAGS) $(INCLUDES_PATH) pdata_CFLAGS = $(CUDA_CFLAGS) pdata_LDADD = $(LINKLIBS) -L/usr/lib64/nvidia-bumblebee/ -L../../metis_install/lib -lmetis -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-am +all: all-am .SUFFIXES: .SUFFIXES: .cpp .cu .o .obj @@ -318,21 +317,6 @@ $(top_srcdir)/configure: $(am__configure_deps) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): - -config.h: stamp-h1 - @if test ! -f $@; then rm -f stamp-h1; else :; fi - @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status src/config.h -$(srcdir)/config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ @@ -388,6 +372,7 @@ distclean-compile: include ./$(DEPDIR)/pdata-HeapMemory.Po include ./$(DEPDIR)/pdata-Memleak_check.Po +include ./$(DEPDIR)/pdata-PtrMemory.Po include ./$(DEPDIR)/pdata-VCluster.Po include ./$(DEPDIR)/pdata-main.Po @@ -433,6 +418,20 @@ pdata-HeapMemory.obj: ../../OpenFPM_devices/src/memory/HeapMemory.cpp # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(AM_V_CXX_no)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdata_CXXFLAGS) $(CXXFLAGS) -c -o pdata-HeapMemory.obj `if test -f '../../OpenFPM_devices/src/memory/HeapMemory.cpp'; then $(CYGPATH_W) '../../OpenFPM_devices/src/memory/HeapMemory.cpp'; else $(CYGPATH_W) '$(srcdir)/../../OpenFPM_devices/src/memory/HeapMemory.cpp'; fi` +pdata-PtrMemory.o: ../../OpenFPM_devices/src/memory/PtrMemory.cpp + $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdata_CXXFLAGS) $(CXXFLAGS) -MT pdata-PtrMemory.o -MD -MP -MF $(DEPDIR)/pdata-PtrMemory.Tpo -c -o pdata-PtrMemory.o `test -f '../../OpenFPM_devices/src/memory/PtrMemory.cpp' || echo '$(srcdir)/'`../../OpenFPM_devices/src/memory/PtrMemory.cpp + $(AM_V_at)$(am__mv) $(DEPDIR)/pdata-PtrMemory.Tpo $(DEPDIR)/pdata-PtrMemory.Po +# $(AM_V_CXX)source='../../OpenFPM_devices/src/memory/PtrMemory.cpp' object='pdata-PtrMemory.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(AM_V_CXX_no)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdata_CXXFLAGS) $(CXXFLAGS) -c -o pdata-PtrMemory.o `test -f '../../OpenFPM_devices/src/memory/PtrMemory.cpp' || echo '$(srcdir)/'`../../OpenFPM_devices/src/memory/PtrMemory.cpp + +pdata-PtrMemory.obj: ../../OpenFPM_devices/src/memory/PtrMemory.cpp + $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdata_CXXFLAGS) $(CXXFLAGS) -MT pdata-PtrMemory.obj -MD -MP -MF $(DEPDIR)/pdata-PtrMemory.Tpo -c -o pdata-PtrMemory.obj `if test -f '../../OpenFPM_devices/src/memory/PtrMemory.cpp'; then $(CYGPATH_W) '../../OpenFPM_devices/src/memory/PtrMemory.cpp'; else $(CYGPATH_W) '$(srcdir)/../../OpenFPM_devices/src/memory/PtrMemory.cpp'; fi` + $(AM_V_at)$(am__mv) $(DEPDIR)/pdata-PtrMemory.Tpo $(DEPDIR)/pdata-PtrMemory.Po +# $(AM_V_CXX)source='../../OpenFPM_devices/src/memory/PtrMemory.cpp' object='pdata-PtrMemory.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(AM_V_CXX_no)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdata_CXXFLAGS) $(CXXFLAGS) -c -o pdata-PtrMemory.obj `if test -f '../../OpenFPM_devices/src/memory/PtrMemory.cpp'; then $(CYGPATH_W) '../../OpenFPM_devices/src/memory/PtrMemory.cpp'; else $(CYGPATH_W) '$(srcdir)/../../OpenFPM_devices/src/memory/PtrMemory.cpp'; fi` + pdata-VCluster.o: ../../OpenFPM_vcluster/src/VCluster.cpp $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdata_CXXFLAGS) $(CXXFLAGS) -MT pdata-VCluster.o -MD -MP -MF $(DEPDIR)/pdata-VCluster.Tpo -c -o pdata-VCluster.o `test -f '../../OpenFPM_vcluster/src/VCluster.cpp' || echo '$(srcdir)/'`../../OpenFPM_vcluster/src/VCluster.cpp $(AM_V_at)$(am__mv) $(DEPDIR)/pdata-VCluster.Tpo $(DEPDIR)/pdata-VCluster.Po @@ -545,7 +544,7 @@ distdir: $(DISTFILES) done check-am: all-am check: check-am -all-am: Makefile $(PROGRAMS) config.h +all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ @@ -588,7 +587,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-tags + distclean-tags dvi: dvi-am @@ -649,21 +648,21 @@ ps-am: uninstall-am: uninstall-binPROGRAMS -.MAKE: all install-am install-strip +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ - distclean distclean-compile distclean-generic distclean-hdr \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-binPROGRAMS install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-binPROGRAMS + distclean distclean-compile distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-binPROGRAMS install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-binPROGRAMS .cu.o : diff --git a/src/Makefile.am b/src/Makefile.am index f6364629a4078023ff49e1a78b3b18e0c99c8e11..0b3679871bb8bbab62d7561681df3420880fbd41 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,7 +2,7 @@ LINKLIBS = $(PTHREAD_LIBS) $(OPT_LIBS) $(BOOST_LDFLAGS) $(BOOST_PROGRAM_OPTIONS_LIB) $(CUDA_LIBS) $(BOOST_THREAD_LIB) bin_PROGRAMS = pdata -pdata_SOURCES = main.cpp ../../OpenFPM_devices/src/memory/HeapMemory.cpp ../../OpenFPM_vcluster/src/VCluster.cpp ../../OpenFPM_data/src/Memleak_check.cpp +pdata_SOURCES = main.cpp ../../OpenFPM_devices/src/memory/HeapMemory.cpp ../../OpenFPM_devices/src/memory/PtrMemory.cpp ../../OpenFPM_vcluster/src/VCluster.cpp ../../OpenFPM_data/src/Memleak_check.cpp pdata_CXXFLAGS = $(CUDA_CFLAGS) $(INCLUDES_PATH) pdata_CFLAGS = $(CUDA_CFLAGS) pdata_LDADD = $(LINKLIBS) -L/usr/lib64/nvidia-bumblebee/ -L../../metis_install/lib -lmetis diff --git a/src/Makefile.in b/src/Makefile.in index 70c35de5df2e2bcef9cf31c7be5356414219d025..04001187bd0c239da3bf2fa1a1bc87d16815d56c 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -82,7 +82,7 @@ target_triplet = @target@ bin_PROGRAMS = pdata$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(srcdir)/config.h.in $(top_srcdir)/depcomp + $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_mysql.m4 \ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ @@ -97,13 +97,14 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_mysql.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = config.h +CONFIG_HEADER = $(top_builddir)/src/config/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_pdata_OBJECTS = pdata-main.$(OBJEXT) pdata-HeapMemory.$(OBJEXT) \ - pdata-VCluster.$(OBJEXT) pdata-Memleak_check.$(OBJEXT) + pdata-PtrMemory.$(OBJEXT) pdata-VCluster.$(OBJEXT) \ + pdata-Memleak_check.$(OBJEXT) pdata_OBJECTS = $(am_pdata_OBJECTS) am__DEPENDENCIES_1 = am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) @@ -122,7 +123,7 @@ AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/config depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f @@ -150,8 +151,7 @@ am__can_run_installinfo = \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ - $(LISP)config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -279,12 +279,11 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ LINKLIBS = $(PTHREAD_LIBS) $(OPT_LIBS) $(BOOST_LDFLAGS) $(BOOST_PROGRAM_OPTIONS_LIB) $(CUDA_LIBS) $(BOOST_THREAD_LIB) -pdata_SOURCES = main.cpp ../../OpenFPM_devices/src/memory/HeapMemory.cpp ../../OpenFPM_vcluster/src/VCluster.cpp ../../OpenFPM_data/src/Memleak_check.cpp +pdata_SOURCES = main.cpp ../../OpenFPM_devices/src/memory/HeapMemory.cpp ../../OpenFPM_devices/src/memory/PtrMemory.cpp ../../OpenFPM_vcluster/src/VCluster.cpp ../../OpenFPM_data/src/Memleak_check.cpp pdata_CXXFLAGS = $(CUDA_CFLAGS) $(INCLUDES_PATH) pdata_CFLAGS = $(CUDA_CFLAGS) pdata_LDADD = $(LINKLIBS) -L/usr/lib64/nvidia-bumblebee/ -L../../metis_install/lib -lmetis -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-am +all: all-am .SUFFIXES: .SUFFIXES: .cpp .cu .o .obj @@ -318,21 +317,6 @@ $(top_srcdir)/configure: $(am__configure_deps) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): - -config.h: stamp-h1 - @if test ! -f $@; then rm -f stamp-h1; else :; fi - @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status src/config.h -$(srcdir)/config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ @@ -388,6 +372,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdata-HeapMemory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdata-Memleak_check.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdata-PtrMemory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdata-VCluster.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdata-main.Po@am__quote@ @@ -433,6 +418,20 @@ pdata-HeapMemory.obj: ../../OpenFPM_devices/src/memory/HeapMemory.cpp @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdata_CXXFLAGS) $(CXXFLAGS) -c -o pdata-HeapMemory.obj `if test -f '../../OpenFPM_devices/src/memory/HeapMemory.cpp'; then $(CYGPATH_W) '../../OpenFPM_devices/src/memory/HeapMemory.cpp'; else $(CYGPATH_W) '$(srcdir)/../../OpenFPM_devices/src/memory/HeapMemory.cpp'; fi` +pdata-PtrMemory.o: ../../OpenFPM_devices/src/memory/PtrMemory.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdata_CXXFLAGS) $(CXXFLAGS) -MT pdata-PtrMemory.o -MD -MP -MF $(DEPDIR)/pdata-PtrMemory.Tpo -c -o pdata-PtrMemory.o `test -f '../../OpenFPM_devices/src/memory/PtrMemory.cpp' || echo '$(srcdir)/'`../../OpenFPM_devices/src/memory/PtrMemory.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pdata-PtrMemory.Tpo $(DEPDIR)/pdata-PtrMemory.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='../../OpenFPM_devices/src/memory/PtrMemory.cpp' object='pdata-PtrMemory.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdata_CXXFLAGS) $(CXXFLAGS) -c -o pdata-PtrMemory.o `test -f '../../OpenFPM_devices/src/memory/PtrMemory.cpp' || echo '$(srcdir)/'`../../OpenFPM_devices/src/memory/PtrMemory.cpp + +pdata-PtrMemory.obj: ../../OpenFPM_devices/src/memory/PtrMemory.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdata_CXXFLAGS) $(CXXFLAGS) -MT pdata-PtrMemory.obj -MD -MP -MF $(DEPDIR)/pdata-PtrMemory.Tpo -c -o pdata-PtrMemory.obj `if test -f '../../OpenFPM_devices/src/memory/PtrMemory.cpp'; then $(CYGPATH_W) '../../OpenFPM_devices/src/memory/PtrMemory.cpp'; else $(CYGPATH_W) '$(srcdir)/../../OpenFPM_devices/src/memory/PtrMemory.cpp'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pdata-PtrMemory.Tpo $(DEPDIR)/pdata-PtrMemory.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='../../OpenFPM_devices/src/memory/PtrMemory.cpp' object='pdata-PtrMemory.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdata_CXXFLAGS) $(CXXFLAGS) -c -o pdata-PtrMemory.obj `if test -f '../../OpenFPM_devices/src/memory/PtrMemory.cpp'; then $(CYGPATH_W) '../../OpenFPM_devices/src/memory/PtrMemory.cpp'; else $(CYGPATH_W) '$(srcdir)/../../OpenFPM_devices/src/memory/PtrMemory.cpp'; fi` + pdata-VCluster.o: ../../OpenFPM_vcluster/src/VCluster.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdata_CXXFLAGS) $(CXXFLAGS) -MT pdata-VCluster.o -MD -MP -MF $(DEPDIR)/pdata-VCluster.Tpo -c -o pdata-VCluster.o `test -f '../../OpenFPM_vcluster/src/VCluster.cpp' || echo '$(srcdir)/'`../../OpenFPM_vcluster/src/VCluster.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pdata-VCluster.Tpo $(DEPDIR)/pdata-VCluster.Po @@ -545,7 +544,7 @@ distdir: $(DISTFILES) done check-am: all-am check: check-am -all-am: Makefile $(PROGRAMS) config.h +all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ @@ -588,7 +587,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-tags + distclean-tags dvi: dvi-am @@ -649,21 +648,21 @@ ps-am: uninstall-am: uninstall-binPROGRAMS -.MAKE: all install-am install-strip +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ - distclean distclean-compile distclean-generic distclean-hdr \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-binPROGRAMS install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-binPROGRAMS + distclean distclean-compile distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-binPROGRAMS install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-binPROGRAMS .cu.o : diff --git a/src/Vector/vector_dist.hpp b/src/Vector/vector_dist.hpp index c68da5ab26981a37797a2c8947f41e2bd91a69f2..930eeba3e0baf9f82a1dd4938303d0a0b486a247 100644 --- a/src/Vector/vector_dist.hpp +++ b/src/Vector/vector_dist.hpp @@ -13,6 +13,8 @@ #include "Vector/vector_dist_iterator.hpp" #include "Space/Shape/Box.hpp" #include "Vector/vector_dist_key.hpp" +#include "memory/PreAllocHeapMemory.hpp" +#include "memory/PtrMemory.hpp" #define NO_ID false #define ID true @@ -94,21 +96,39 @@ public: return v_prp.get(vec_key.v_c).template get<id>(vec_key.key); } + /*! \brief It store for each processor the position and properties vector of the particles + * + * + */ + struct pos_prop + { + //! position vector + openfpm::vector<point,openfpm::device_cpu<point>,PreAllocHeapMemory<2>,openfpm::grow_policy_identity> pos; + //! properties vector + openfpm::vector<prop,openfpm::device_cpu<prop>,PreAllocHeapMemory<2>,openfpm::grow_policy_identity> prp; + }; + /*! \brief It communicate the particle to the respective processor * */ void map() { - // Unassigned particle vector, is always the last one + // outgoing particles-id + openfpm::vector<size_t> opart; + + // Processor communication size + openfpm::vector<size_t> prc_sz(v_cl.getProcessingUnits()); + + // Unassigned particle vector, is always the last vector size_t up_v = v_pos.size()-1; - // Contain the map of the processor should communicate - openfpm::vector<unsigned char> p_map; + // Contain the map of the processors, this processors should communicate with + openfpm::vector<size_t> p_map(v_cl.getProcessingUnits()); // Contain the processor id of each particle (basically where they have to go) - openfpm::vector<size_t> lbl_p(v_pos.size()); + openfpm::vector<size_t> lbl_p(v_pos.get(up_v).size()); - // It contain the list of the processors it should to communicate + // It contain the list of the processors this processor should to communicate with openfpm::vector<size_t> p_list; auto it = v_pos.get(up_v).getIterator(); @@ -123,12 +143,194 @@ public: lbl_p.get(key) = p_id; // It has to communicate - p_map.get(p_id) = 1; + if (p_id != v_cl.getProcessUnitID()) + { + p_map.get(p_id) = 1; + prc_sz.get(p_id)++; + + opart.add(key); + } + + // Add processors and add size + + ++it; + } + + // Create the sz and prc buffer + + openfpm::vector<size_t> prc_sz_r; + openfpm::vector<size_t> prc_r; + + for (size_t i = 0 ; i < v_cl.getProcessingUnits() ; i++) + { + if (p_map.get(i) == 1) + { + prc_r.add(i); + prc_sz_r.add(prc_sz.get(i)); + } + } + + // Allocate all the buffers + + openfpm::vector<pos_prop> pb(prc_r.size()); + + for (size_t i = 0 ; i < prc_r.size() ; i++) + { + // Create the size required to store the particles position and properties to communicate + size_t s1 = openfpm::vector<point>::calculateMem(prc_sz_r.get(i),0); + size_t s2 = openfpm::vector<prop>::calculateMem(prc_sz_r.get(i),0); + + // Preallocate the memory + size_t sz[2] = {s1,s2}; + PreAllocHeapMemory<2> * mem = new PreAllocHeapMemory<2>(sz); + + // Set the memory allocator + pb.get(i).pos.setMemory(*mem); + pb.get(i).prp.setMemory(*mem); + + // set the size and allocate, using mem warant that pos and prp is contiguous + pb.get(i).pos.resize(prc_sz_r.get(i)); + pb.get(i).prp.resize(prc_sz_r.get(i)); + } + + + // Run through all the particles and fill pb, the sending buffer + + openfpm::vector<size_t> prc_cnt(prc_r.size()); + prc_cnt.fill(0); + + it = lbl_p.getIterator(); + + while (it.isNext()) + { + auto key = it.get(); + + size_t lbl = lbl_p.get(key); + if (lbl == v_cl.getProcessUnitID()) + { + ++it; + continue; + } + + lbl = (lbl > v_cl.getProcessUnitID())?lbl-1:lbl; + + pb.get(lbl).pos.set(prc_cnt.get(lbl),v_pos.get(up_v).get(key)); + pb.get(lbl).prp.set(prc_cnt.get(lbl),v_prp.get(up_v).get(key)); + + prc_cnt.get(lbl)++; + + // Add processors and add size ++it; } + + // Create the set of pointers + + openfpm::vector<void *> ptr(prc_r.size()); + for (size_t i = 0 ; i < prc_r.size() ; i++) + { + ptr.get(i) = pb.get(i).pos.getPointer(); + } + + // convert the particle number to buffer size + + for (size_t i = 0 ; i < v_cl.getProcessingUnits() ; i++) + { + prc_sz_r.get(i) = prc_sz_r.get(i)*(sizeof(prop) + sizeof(point)); + } + + // Send and receive the particles + + recv_cnt = 0; + v_cl.sendrecvMultipleMessages(prc_sz_r.size(),&p_map.get(0), &prc_sz_r.get(0), &prc_r.get(0) , &ptr.get(0) , vector_dist::message_alloc, this ,NEED_ALL_SIZE); + + // overwrite the outcoming particle with the incoming particle + + size_t o_p_id = 0; + + for (size_t i = 0 ; i < v_proc.size() ; i++) + { + // Get the number of elements + + size_t n_ele = v_proc.get(i) / (sizeof(point) + sizeof(prop)); + + PtrMemory ptr1(hp_recv.getPointer(),n_ele * sizeof(point)); + PtrMemory ptr2((unsigned char *)hp_recv.getPointer() + n_ele * sizeof(point),n_ele * sizeof(prop)); + + // create vector representation to a piece of memory already allocated + + openfpm::vector<point,openfpm::device_cpu<point>,PtrMemory,openfpm::grow_policy_identity> vpos; + openfpm::vector<prop,openfpm::device_cpu<prop>,PtrMemory,openfpm::grow_policy_identity> vprp; + + vpos.setMemory(ptr1); + vprp.setMemory(ptr2); + + vpos.resize(n_ele); + vprp.resize(n_ele); + + // Add the received particles to v_pos and v_prp + + size_t j = 0; + for ( ; j < vpos.size() && o_p_id < opart.size() ; j++, o_p_id++) + { + v_pos.get(0).set(opart.get(o_p_id),vpos.get(j)); + v_prp.get(0).set(opart.get(o_p_id),vprp.get(j)); + } + + for ( ; j < vpos.size(); j++) + { + v_pos.get(0).add(); + v_pos.get(0).set(v_pos.get(0).size()-1,vpos.get(j)); + v_prp.get(0).add(); + v_prp.get(0).set(v_prp.get(0).size()-1,vprp.get(j)); + } + } + + // Add the remaining incoming particle + } + + // Heap memory receiver + HeapMemory hp_recv; + + // vector v_proc + openfpm::vector<size_t> v_proc; + + // Receive counter + size_t recv_cnt; + + /*! \brief Message allocation + * + * \param message size required to receive from i + * \param total message size to receive from all the processors + * \param the total number of processor want to communicate with you + * \param i processor id + * \param ptr a pointer to the vector_dist structure + * + * \return the pointer where to store the message + * + */ + static void * message_alloc(size_t msg_i ,size_t total_msg, size_t total_p, size_t i, void * ptr) + { + // cast the pointer + vector_dist<point,prop,Box,Decomposition,Memory,with_id> * vd = static_cast<vector_dist<point,prop,Box,Decomposition,Memory,with_id> *>(ptr); + + // Resize the memory and + vd->hp_recv.resize(total_msg); + vd->v_proc.resize(total_p); + + // Return the receive pointer + void * recv_ptr = (unsigned char *)vd->hp_recv.getPointer() + vd->recv_cnt; + + // increment the receive pointer + vd->recv_cnt += msg_i; + + // Save the processor message size + vd->v_proc.get(i) = msg_i; + + return recv_ptr; } + /*! \brief Get the iterator across the position of the particles * * \return an iterator @@ -158,7 +360,6 @@ public: { return dec; } - }; diff --git a/src/Vector/vector_dist_unit_test.hpp b/src/Vector/vector_dist_unit_test.hpp index 2a301fb9663a13b19281f62d7e79dd5316b02b94..6c0b15e79a41f1f4c368c0041fbf82721fd2154c 100644 --- a/src/Vector/vector_dist_unit_test.hpp +++ b/src/Vector/vector_dist_unit_test.hpp @@ -13,7 +13,7 @@ BOOST_AUTO_TEST_SUITE( vector_dist_test ) -BOOST_AUTO_TEST_CASE( vector_dist_iterator_test_use) +BOOST_AUTO_TEST_CASE( vector_dist_iterator_test_use ) { typedef Point<2,float> s; diff --git a/src/config.h b/src/config.h index b43e389fe76978d450f92bae20d6a088f41d96e0..59b07e08919ecf70f41b2a070397ff17bce9dcf3 100644 --- a/src/config.h +++ b/src/config.h @@ -14,7 +14,7 @@ #define HAVE_MPI /**/ /* Memory check, corruption and leak */ -/* #undef MEMLEAK_CHECK */ +#define MEMLEAK_CHECK /**/ /* NVCC compiling */ #define NVCC /**/