From 53d6e8d3cb67d719a75c43b0b765b3f300a51825 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 24 Nov 2022 20:41:19 +0100 Subject: [PATCH] DSS now keeps layouts (avoids excessive cell mapping), frequent GC in DRC tests for heavy GC load testing --- src/buddies/src/bd/strmxor.cc | 1 - src/db/db/dbDeepShapeStore.cc | 4 +-- src/drc/drc/built-in-macros/_drc_engine.rb | 12 ++++++++- src/drc/unit_tests/drcBasicTests.cc | 2 ++ src/drc/unit_tests/drcGenericTests.cc | 5 +++- src/drc/unit_tests/drcSimpleTests.cc | 31 +++++++++++++++++++++- src/drc/unit_tests/drcSuiteTests.cc | 5 +++- 7 files changed, 53 insertions(+), 7 deletions(-) diff --git a/src/buddies/src/bd/strmxor.cc b/src/buddies/src/bd/strmxor.cc index 1e5cf7722..6bed6fa16 100644 --- a/src/buddies/src/bd/strmxor.cc +++ b/src/buddies/src/bd/strmxor.cc @@ -707,7 +707,6 @@ bool run_deep_xor (const XORData &xor_data) { db::DeepShapeStore dss; dss.set_threads (xor_data.threads); - dss.set_keep_layouts (true); // avoids excessive cell mapping double dbu = std::min (xor_data.layout_a->dbu (), xor_data.layout_b->dbu ()); diff --git a/src/db/db/dbDeepShapeStore.cc b/src/db/db/dbDeepShapeStore.cc index ddda1ee2c..c22f1ba70 100644 --- a/src/db/db/dbDeepShapeStore.cc +++ b/src/db/db/dbDeepShapeStore.cc @@ -426,13 +426,13 @@ static unsigned int init_layer (db::Layout &layout, const db::RecursiveShapeIter } DeepShapeStore::DeepShapeStore () - : m_keep_layouts (false) + : m_keep_layouts (true) { ++s_instance_count; } DeepShapeStore::DeepShapeStore (const std::string &topcell_name, double dbu) - : m_keep_layouts (false) + : m_keep_layouts (true) { ++s_instance_count; diff --git a/src/drc/drc/built-in-macros/_drc_engine.rb b/src/drc/drc/built-in-macros/_drc_engine.rb index 7dce0a451..321d3ee79 100644 --- a/src/drc/drc/built-in-macros/_drc_engine.rb +++ b/src/drc/drc/built-in-macros/_drc_engine.rb @@ -29,6 +29,8 @@ module DRC cv = RBA::CellView::active + @time = Time::now + @force_gc = ($drc_force_gc == true) # for testing, $drc_force_gc can be set to true @generator = "" @rdb_index = nil @l2ndb_index = nil @@ -73,6 +75,11 @@ module DRC end + # for testing + def force_gc(f) + @force_gc = f + end + def both DRCBothEdges::new end @@ -2125,7 +2132,10 @@ CODE t = RBA::Timer::new t.start self._process_events - GC.start # force a garbage collection before the operation to free unused memory + if @force_gc || Time::now - @time > 0.5 + GC.start # force a garbage collection before the operation to free unused memory + @time = Time::now + end res = yield t.stop diff --git a/src/drc/unit_tests/drcBasicTests.cc b/src/drc/unit_tests/drcBasicTests.cc index 3e2adf02d..ea8917a0b 100644 --- a/src/drc/unit_tests/drcBasicTests.cc +++ b/src/drc/unit_tests/drcBasicTests.cc @@ -36,6 +36,7 @@ TEST(1) lym::Macro drc; drc.set_text (tl::sprintf ( + "force_gc true\n" "source('%s', \"TOP\")\n" "target('%s', \"TOP\")\n" "l1 = input(1, 0)\n" @@ -70,6 +71,7 @@ TEST(2) { lym::Macro drc; drc.set_text ( + "force_gc true\n" "dbu 0.001\n" "def compare(a, b, ex)\n" " a = a.to_s\n" diff --git a/src/drc/unit_tests/drcGenericTests.cc b/src/drc/unit_tests/drcGenericTests.cc index 10eccd418..ca6ac8d5f 100644 --- a/src/drc/unit_tests/drcGenericTests.cc +++ b/src/drc/unit_tests/drcGenericTests.cc @@ -30,6 +30,8 @@ static void run_test (tl::TestBase *_this, const std::string &number, bool deep) { + std::string force_gc = "true"; + std::string rs = tl::testdata (); rs += "/drc/drcGenericTests_" + number + ".drc"; @@ -45,10 +47,11 @@ static void run_test (tl::TestBase *_this, const std::string &number, bool deep) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = %s\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" "$drc_test_deep = %s\n" - , input, output, deep ? "true" : "false") + , force_gc, input, output, deep ? "true" : "false") ); config.set_interpreter (lym::Macro::Ruby); EXPECT_EQ (config.run (), 0); diff --git a/src/drc/unit_tests/drcSimpleTests.cc b/src/drc/unit_tests/drcSimpleTests.cc index 741646c9e..de1bfd6de 100644 --- a/src/drc/unit_tests/drcSimpleTests.cc +++ b/src/drc/unit_tests/drcSimpleTests.cc @@ -42,6 +42,7 @@ TEST(1) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = nil\n" "$drc_test_target = '%s'\n" , output) @@ -82,6 +83,7 @@ TEST(2) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -122,6 +124,7 @@ TEST(3_Flat) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -162,6 +165,7 @@ TEST(4_Hierarchical) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -202,6 +206,7 @@ TEST(5_FlatAntenna) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -242,6 +247,7 @@ TEST(5_FlatAntennaIncremental) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -282,6 +288,7 @@ TEST(6_HierarchicalAntenna) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -322,6 +329,7 @@ TEST(7_AntennaWithDiodes) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -362,6 +370,7 @@ TEST(8_TextsAndPolygons) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -427,6 +436,7 @@ TEST(9_NetlistExtraction) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" "$drc_test_target_simplified = '%s'\n" @@ -471,6 +481,7 @@ TEST(10_NetlistExtractionFlat) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" "$drc_test_target_simplified = '%s'\n" @@ -515,6 +526,7 @@ TEST(11_CustomDevices) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" "$drc_test_target_simplified = '%s'\n" @@ -555,6 +567,7 @@ TEST(12_NetlistJoinLabels) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" "$drc_test_target_simplified = nil\n" @@ -591,6 +604,7 @@ TEST(13a_KissingCorners) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -634,6 +648,7 @@ TEST(13b_KissingCornersDeep) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -681,6 +696,7 @@ TEST(14_SwitchingTargets) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" "$drc_test_target2 = '%s'\n" @@ -732,6 +748,7 @@ TEST(15_issue548) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -773,6 +790,7 @@ TEST(16_issue570) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -814,6 +832,7 @@ TEST(17_issue570) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -854,6 +873,7 @@ TEST(18_forget) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -894,6 +914,7 @@ TEST(19_shielding) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -934,6 +955,7 @@ TEST(20_interact_with_count) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -974,6 +996,7 @@ TEST(21_breaking) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -1014,6 +1037,7 @@ TEST(22_opposite_filter) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -1054,6 +1078,7 @@ TEST(23_rect_filter) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -1094,6 +1119,7 @@ TEST(24_enclosing) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" , input, output) @@ -1119,6 +1145,8 @@ TEST(24_enclosing) static void run_test (tl::TestBase *_this, const std::string &number, bool deep, bool oasis = false) { + std::string force_gc = "true"; + std::string rs = tl::testdata (); rs += "/drc/drcSimpleTests_" + number + ".drc"; @@ -1134,10 +1162,11 @@ static void run_test (tl::TestBase *_this, const std::string &number, bool deep, // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = '%s'\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" "$drc_test_deep = %s\n" - , input, output, deep ? "true" : "false") + , force_gc, input, output, deep ? "true" : "false") ); config.set_interpreter (lym::Macro::Ruby); EXPECT_EQ (config.run (), 0); diff --git a/src/drc/unit_tests/drcSuiteTests.cc b/src/drc/unit_tests/drcSuiteTests.cc index 3cfde1b3d..a329905e2 100644 --- a/src/drc/unit_tests/drcSuiteTests.cc +++ b/src/drc/unit_tests/drcSuiteTests.cc @@ -27,6 +27,8 @@ void runtest (tl::TestBase *_this, int mode) { + std::string force_gc = "true"; + std::string rs = tl::testdata (); rs += "/drc/drcSuiteTests.drc"; @@ -44,10 +46,11 @@ void runtest (tl::TestBase *_this, int mode) // Set some variables lym::Macro config; config.set_text (tl::sprintf ( + "$drc_force_gc = %s\n" "$drc_test_source = '%s'\n" "$drc_test_target = '%s'\n" "$drc_test_mode = %d\n" - , input, output, mode) + , force_gc, input, output, mode) ); config.set_interpreter (lym::Macro::Ruby); EXPECT_EQ (config.run (), 0);