diff --git a/src/for_2D_build/meshes/mesh_iterators.hpp b/src/for_2D_build/meshes/mesh_iterators.hpp index 2926b87c52..96ed7a52eb 100644 --- a/src/for_2D_build/meshes/mesh_iterators.hpp +++ b/src/for_2D_build/meshes/mesh_iterators.hpp @@ -70,6 +70,7 @@ namespace SPH template void mesh_parallel_for(const MeshRange &mesh_range, const LocalFunction &local_function, Args &&...args) { + static tbb::affinity_partitioner ap; parallel_for( IndexRange2d((mesh_range.first)[0], (mesh_range.second)[0], (mesh_range.first)[1], (mesh_range.second)[1]), diff --git a/src/for_3D_build/meshes/mesh_iterators.hpp b/src/for_3D_build/meshes/mesh_iterators.hpp index 6404a167dc..90be08068a 100644 --- a/src/for_3D_build/meshes/mesh_iterators.hpp +++ b/src/for_3D_build/meshes/mesh_iterators.hpp @@ -78,6 +78,7 @@ namespace SPH template void mesh_parallel_for(const MeshRange &mesh_range, const LocalFunction &local_function, Args &&...args) { + static tbb::affinity_partitioner ap; parallel_for( IndexRange3d((mesh_range.first)[0], (mesh_range.second)[0], (mesh_range.first)[1], (mesh_range.second)[1], diff --git a/src/shared/body_relations/base_body_relation.cpp b/src/shared/body_relations/base_body_relation.cpp index 940c582177..a5dc05abd5 100644 --- a/src/shared/body_relations/base_body_relation.cpp +++ b/src/shared/body_relations/base_body_relation.cpp @@ -33,6 +33,7 @@ namespace SPH //=================================================================================================// void BaseInnerRelation::resetNeighborhoodCurrentSize() { + static tbb::affinity_partitioner ap; parallel_for( IndexRange(0, base_particles_.total_real_particles_), [&](const IndexRange &r) @@ -63,6 +64,7 @@ namespace SPH //=================================================================================================// void BaseContactRelation::resetNeighborhoodCurrentSize() { + static tbb::affinity_partitioner ap; for (size_t k = 0; k != contact_bodies_.size(); ++k) { parallel_for( diff --git a/src/shared/common/large_data_containers.h b/src/shared/common/large_data_containers.h index 5bc5a272c4..8087f2e42b 100644 --- a/src/shared/common/large_data_containers.h +++ b/src/shared/common/large_data_containers.h @@ -43,7 +43,6 @@ namespace SPH { - static tbb::affinity_partitioner ap; typedef tbb::blocked_range IndexRange; typedef tbb::blocked_range2d IndexRange2d; typedef tbb::blocked_range3d IndexRange3d; diff --git a/src/shared/meshes/cell_linked_list.cpp b/src/shared/meshes/cell_linked_list.cpp index 7ae3668920..a6e6da8d6e 100644 --- a/src/shared/meshes/cell_linked_list.cpp +++ b/src/shared/meshes/cell_linked_list.cpp @@ -33,6 +33,7 @@ namespace SPH clearCellLists(); StdLargeVec &pos_n = base_particles.pos_; size_t total_real_particles = base_particles.total_real_particles_; + static tbb::affinity_partitioner ap; parallel_for( IndexRange(0, total_real_particles), [&](const IndexRange &r) @@ -105,6 +106,7 @@ namespace SPH StdLargeVec &pos_n = base_particles.pos_; size_t total_real_particles = base_particles.total_real_particles_; // rebuild the corresponding particle list. + static tbb::affinity_partitioner ap; parallel_for( IndexRange(0, total_real_particles), [&](const IndexRange &r) diff --git a/src/shared/meshes/mesh_with_data_packages.h b/src/shared/meshes/mesh_with_data_packages.h index 159e934e66..81a6a70f3a 100644 --- a/src/shared/meshes/mesh_with_data_packages.h +++ b/src/shared/meshes/mesh_with_data_packages.h @@ -55,6 +55,7 @@ namespace SPH void package_parallel_for(const ConcurrentVec &data_pkgs, const LocalFunction &local_function, Args &&...args) { + static tbb::affinity_partitioner ap; parallel_for( IndexRange(0, data_pkgs.size()), [&](const IndexRange &r) diff --git a/src/shared/particle_dynamics/particle_iterators.h b/src/shared/particle_dynamics/particle_iterators.h index 34ca23805b..197843a388 100644 --- a/src/shared/particle_dynamics/particle_iterators.h +++ b/src/shared/particle_dynamics/particle_iterators.h @@ -62,6 +62,7 @@ namespace SPH inline void particle_for(const ParallelPolicy &par, const size_t &all_real_particles, const LocalDynamicsFunction &local_dynamics_function) { + static tbb::affinity_partitioner ap; parallel_for( IndexRange(0, all_real_particles), [&](const IndexRange &r) @@ -88,6 +89,7 @@ namespace SPH inline void particle_for(const ParallelPolicy &par, const IndexVector &body_part_particles, const LocalDynamicsFunction &local_dynamics_function) { + static tbb::affinity_partitioner ap; parallel_for( IndexRange(0, body_part_particles.size()), [&](const IndexRange &r) @@ -120,6 +122,7 @@ namespace SPH inline void particle_for(const ParallelPolicy &par, const ConcurrentCellLists &body_part_cells, const LocalDynamicsFunction &local_dynamics_function) { + static tbb::affinity_partitioner ap; parallel_for( IndexRange(0, body_part_cells.size()), [&](const IndexRange &r) @@ -150,6 +153,7 @@ namespace SPH inline void particle_for(const ParallelPolicy &par, const DataListsInCells &body_part_cells, const LocalDynamicsFunction &local_dynamics_function) { + static tbb::affinity_partitioner ap; parallel_for( IndexRange(0, body_part_cells.size()), [&](const IndexRange &r) @@ -201,6 +205,7 @@ namespace SPH inline void particle_for(const ParallelPolicy &par, const SplitCellLists &split_cell_lists, const LocalDynamicsFunction &local_dynamics_function) { + static tbb::affinity_partitioner ap; // forward sweeping for (size_t k = 0; k != split_cell_lists.size(); ++k) { diff --git a/src/shared/particles/particle_sorting.cpp b/src/shared/particles/particle_sorting.cpp index 8c31f4f41c..d8a6c86882 100644 --- a/src/shared/particles/particle_sorting.cpp +++ b/src/shared/particles/particle_sorting.cpp @@ -33,6 +33,7 @@ namespace SPH { quick_sort_particle_range_.begin_ = begin; quick_sort_particle_range_.size_ = size; + static tbb::affinity_partitioner ap; parallel_for(quick_sort_particle_range_, quick_sort_particle_body_, ap); updateSortedId(); } @@ -42,6 +43,7 @@ namespace SPH const StdLargeVec &unsorted_id = base_particles_.unsorted_id_; StdLargeVec &sorted_id = base_particles_.sorted_id_; size_t total_real_particles = base_particles_.total_real_particles_; + static tbb::affinity_partitioner ap; parallel_for( IndexRange(0, total_real_particles), [&](const IndexRange &r)