diff --git a/src/db/db/dbHierNetworkProcessor.cc b/src/db/db/dbHierNetworkProcessor.cc index 0ef16ef41..c20e9c9d1 100644 --- a/src/db/db/dbHierNetworkProcessor.cc +++ b/src/db/db/dbHierNetworkProcessor.cc @@ -2945,10 +2945,23 @@ template void hier_clusters::build_hier_connections_for_cells (cell_clusters_box_converter &cbc, const db::Layout &layout, const std::vector &cells, const db::Connectivity &conn, const std::set *breakout_cells, tl::RelativeProgress &progress, instance_interaction_cache_type &instance_interaction_cache, bool separate_attributes) { +#if defined(_OPENMP) + #pragma omp parallel for schedule(dynamic) + for (long long i = 0; i < (long long)cells.size (); ++i) { + db::cell_index_type c = cells[i]; + build_hier_connections (cbc, layout, layout.cell (c), conn, breakout_cells, instance_interaction_cache, separate_attributes); + + #pragma omp critical + { + ++progress; + } + } +#else for (std::vector::const_iterator c = cells.begin (); c != cells.end (); ++c) { build_hier_connections (cbc, layout, layout.cell (*c), conn, breakout_cells, instance_interaction_cache, separate_attributes); ++progress; } +#endif } namespace { diff --git a/src/db/db/dbHierNetworkProcessor.h b/src/db/db/dbHierNetworkProcessor.h index e24605270..2176d1e07 100644 --- a/src/db/db/dbHierNetworkProcessor.h +++ b/src/db/db/dbHierNetworkProcessor.h @@ -1110,6 +1110,7 @@ public: size_t size () const { + tl::MutexLocker lock (&m_mutex); MemStatisticsSimple ms; ms << m_map; return ms.used (); @@ -1127,6 +1128,7 @@ public: const Value *find (db::cell_index_type ci1, db::cell_index_type ci2, const Key &key) const { + tl::MutexLocker lock (&m_mutex); typename std::map , std::list > >::iterator i1 = m_map.find (std::make_pair (ci1, ci2)); if (i1 == m_map.end ()) { ++m_misses; @@ -1156,6 +1158,7 @@ public: { const size_t instance_cache_variant_threshold = 20; + tl::MutexLocker lock (&m_mutex); std::list > &m = m_map [std::make_pair (ci1, ci2)]; if (m.size () >= instance_cache_variant_threshold) { m.pop_back (); @@ -1166,6 +1169,7 @@ public: } private: + mutable tl::Mutex m_mutex; mutable size_t m_hits, m_misses; mutable std::map , std::list > > m_map; };