DSS now keeps layouts (avoids excessive cell mapping), frequent GC in DRC tests for heavy GC load testing

This commit is contained in:
Matthias Koefferlein 2022-11-24 20:41:19 +01:00
parent e04875b4e0
commit 53d6e8d3cb
7 changed files with 53 additions and 7 deletions

View File

@ -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 ());

View File

@ -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;

View File

@ -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

View File

@ -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"

View File

@ -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);

View File

@ -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);

View File

@ -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);