getfem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Getfem-commits] r4571 - /trunk/getfem/src/getfem_mesh_region.cc


From: andriy . andreykiv
Subject: [Getfem-commits] r4571 - /trunk/getfem/src/getfem_mesh_region.cc
Date: Mon, 31 Mar 2014 09:01:53 -0000

Author: andrico
Date: Mon Mar 31 11:01:52 2014
New Revision: 4571

URL: http://svn.gna.org/viewcvs/getfem?rev=4571&view=rev
Log:
 - extra provision for partitioning of small regions: if the regions is too 
small, 
placing all its entries into the partition of zero's thread

Modified:
    trunk/getfem/src/getfem_mesh_region.cc

Modified: trunk/getfem/src/getfem_mesh_region.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_mesh_region.cc?rev=4571&r1=4570&r2=4571&view=diff
==============================================================================
--- trunk/getfem/src/getfem_mesh_region.cc      (original)
+++ trunk/getfem/src/getfem_mesh_region.cc      Mon Mar 31 11:01:52 2014
@@ -141,26 +141,32 @@
     mesh_region::partition_begin( ) const
   {
     size_type region_size = rp().m.size();
+    if (region_size < num_threads()) 
+    { //for small regions: put the whole region into zero thread
+      if (this_thread() == 0) return rp().m.begin();
+      else return rp().m.end();
+    }
     size_type partition_size 
       = std::ceil(static_cast<scalar_type>(region_size)/
       static_cast<scalar_type >(num_threads()));
     size_type index_begin = partition_size * this_thread();
-    itbegin = rp().m.begin(); size_type i;
-    for (size_type i=0;i<index_begin;++i) ++itbegin.thrd_cast();
-    return itbegin;
+    const_iterator it = rp().m.begin(); size_type i;
+    for (size_type i=0;i<index_begin;++i) ++it;
+    return it;
   }
 
   mesh_region::const_iterator 
     mesh_region::partition_end( ) const
   {
     size_type region_size = rp().m.size();
+    if (region_size < num_threads()) return rp().m.end(); 
     size_type partition_size 
       = std::ceil(static_cast<scalar_type>(region_size)/
       static_cast<scalar_type >(num_threads()));
     size_type index_end = partition_size * (this_thread() + 1);
-    itend = rp().m.begin(); size_type i;
-    for (size_type i=0;i<index_end && itend.thrd_cast() !=rp().m.end();++i) 
++itend.thrd_cast();
-    return itend;
+    const_iterator it = rp().m.begin(); size_type i;
+    for (size_type i=0;i<index_end && it!=rp().m.end();++i) ++it;
+    return it;
   }
 
   mesh_region::const_iterator mesh_region::begin( ) const 
@@ -477,4 +483,4 @@
 
       return os;
   }
-}
+}




reply via email to

[Prev in Thread] Current Thread [Next in Thread]