From 9f8627be773edc68ef69874b46ac8758dea27d6f Mon Sep 17 00:00:00 2001 From: Matthias Jung Date: Wed, 16 Sep 2015 13:34:02 +0200 Subject: [PATCH] trace analyzer repaired --- .../analyzer/businessObjects/pythoncaller.cpp | 9 +++- DRAMSys/analyzer/scripts/tests.py | 46 +++++++++---------- DRAMSys/analyzer/traceAnalyzer.pro | 2 - 3 files changed, 30 insertions(+), 27 deletions(-) diff --git a/DRAMSys/analyzer/businessObjects/pythoncaller.cpp b/DRAMSys/analyzer/businessObjects/pythoncaller.cpp index c767cb78..c300431b 100644 --- a/DRAMSys/analyzer/businessObjects/pythoncaller.cpp +++ b/DRAMSys/analyzer/businessObjects/pythoncaller.cpp @@ -46,7 +46,11 @@ using namespace std; PythonCaller::PythonCaller() : - testModuleName("tests"), testFunctionName("runTests"), metricModuleName("metrics"), metricFunctionName("calculateMetrics"), pathToScripts(QApplication::applicationDirPath().toStdString() +"/scripts") + testModuleName("tests"), + testFunctionName("runTests"), + metricModuleName("metrics"), + metricFunctionName("calculateMetrics"), + pathToScripts(QApplication::applicationDirPath().toStdString() + "/../../DRAMSys/analyzer/scripts/") { Py_Initialize(); PyObject *sysPath = PySys_GetObject((char*)"path"); @@ -55,6 +59,7 @@ PythonCaller::PythonCaller() : Py_DECREF(path); qDebug() << testModuleName.c_str() << testFunctionName.c_str(); + qDebug() << "XXX: " << pathToScripts.c_str(); pRunTestsFunction = loadFunctionFromModule(testModuleName, testFunctionName); pCalculateMetricsFunction = loadFunctionFromModule(metricModuleName, metricFunctionName); @@ -105,7 +110,7 @@ PyObject* PythonCaller::callFunctionWithStringArgument(PyObject* function, QStri if(!pResult) { PyErr_Print(); - throw runtime_error(string("Error in calling " + testFunctionName + "in module " + testModuleName)); + throw runtime_error(string("Error in calling " + testFunctionName + " in module " + testModuleName)); } return pResult; diff --git a/DRAMSys/analyzer/scripts/tests.py b/DRAMSys/analyzer/scripts/tests.py index 955f455b..da1369f6 100644 --- a/DRAMSys/analyzer/scripts/tests.py +++ b/DRAMSys/analyzer/scripts/tests.py @@ -210,7 +210,7 @@ def commandbus_slots_are_used_once(connection): if dramconfig.bankwiseLogic: excludedPhases = "('REQ','RESP','PRE_ALL')" else: - excludedPhases = "('REQ','RESP','PRE_ALL','PDNA','PDNP','SREF','AUTO_REFRESH')" + excludedPhases = "('REQ','RESP','PRE_ALL','PDNA','PDNP','SREF','REFA')" query = """SELECT PhaseBegin,count FROM (SELECT phaseBegin,count(phasebegin) AS count FROM Phases WHERE PhaseName NOT IN """ + excludedPhases + """ AND phasebegin>0 GROUP BY phaseBegin) WHERE count>1""" @@ -229,35 +229,35 @@ def phase_transitions_are_valid(connection): cursor = connection.cursor() validTransitions = {} - if(dramconfig.bankwiseLogic): - validTransitions['PRE'] = set(['ACT', 'AUTO_REFRESH']) + if(dramconfig.bankwiseLogic == 1): + validTransitions['PRE'] = set(['ACT', 'REFA']) validTransitions['ACT'] = set(['RD', 'RDA', 'WR', 'WRA', 'PRE', 'PRE_ALL']) validTransitions['RD'] = set(['PRE','RD','RDA', 'WR', 'WRA', 'PDNA']) validTransitions['WR'] = set(['PRE', 'RD','RDA', 'WR', 'WRA', 'PDNA']) - validTransitions['RDA'] = set(['ACT', 'AUTO_REFRESH', 'PDNP']) - validTransitions['WRA'] = set(['ACT', 'AUTO_REFRESH', 'PDNP']) + validTransitions['RDA'] = set(['ACT', 'REFA', 'PDNP']) + validTransitions['WRA'] = set(['ACT', 'REFA', 'PDNP']) - validTransitions['AUTO_REFRESH'] = set(['ACT', 'PDNP', 'SREF']) + validTransitions['REFA'] = set(['ACT', 'PDNP', 'SREF']) - validTransitions['PDNA'] = set(['PRE', 'RD','RDA', 'WR', 'WRA', 'AUTO_REFRESH']) - validTransitions['PDNP'] = set(['ACT', 'AUTO_REFRESH']) + validTransitions['PDNA'] = set(['PRE', 'RD','RDA', 'WR', 'WRA', 'REFA']) + validTransitions['PDNP'] = set(['ACT', 'REFA']) validTransitions['SREF'] = set(['ACT']) else: validTransitions['PRE'] = set(['ACT']) - validTransitions['PRE_ALL'] = set(['AUTO_REFRESH']) - validTransitions['ACT'] = set(['RD', 'RDA', 'WR', 'WRA', 'PRE_ALl']) + validTransitions['PRE_ALL'] = set(['REFA']) + validTransitions['ACT'] = set(['RD', 'RDA', 'WR', 'WRA', 'PRE_ALL']) validTransitions['RD'] = set(['PRE', 'PRE_ALL','RD','RDA', 'WR', 'WRA', 'PDNA']) validTransitions['WR'] = set(['PRE', 'PRE_ALL','RD','RDA', 'WR', 'WRA', 'PDNA']) - validTransitions['RDA'] = set(['PRE_ALL', 'ACT', 'AUTO_REFRESH', 'PDNA', 'PDNP']) - validTransitions['WRA'] = set(['PRE_ALL', 'ACT', 'AUTO_REFRESH', 'PDNA', 'PDNP']) + validTransitions['RDA'] = set(['PRE_ALL', 'ACT', 'REFA', 'PDNA', 'PDNP']) + validTransitions['WRA'] = set(['PRE_ALL', 'ACT', 'REFA', 'PDNA', 'PDNP']) - validTransitions['AUTO_REFRESH'] = set(['PRE_ALL', 'ACT','AUTO_REFRESH', 'PDNA', 'PDNP', 'SREF']) + validTransitions['REFA'] = set(['PRE_ALL', 'ACT','REFA', 'PDNA', 'PDNP', 'SREF']) - validTransitions['PDNA'] = set(['PRE','PRE_ALL','ACT', 'RD', 'RDA', 'WR', 'WRA', 'AUTO_REFRESH', 'PDNA', 'PDNP']) - validTransitions['PDNP'] = set(['PRE_ALL', 'ACT', 'AUTO_REFRESH', 'PDNA', 'PDNP']) - validTransitions['SREF'] = set(['PRE_ALL', 'ACT', 'AUTO_REFRESH', 'PDNA', 'PDNP']) + validTransitions['PDNA'] = set(['PRE','PRE_ALL','ACT', 'RD', 'RDA', 'WR', 'WRA', 'REFA', 'PDNA', 'PDNP']) + validTransitions['PDNP'] = set(['PRE_ALL', 'ACT', 'REFA', 'PDNA', 'PDNP']) + validTransitions['SREF'] = set(['PRE_ALL', 'ACT', 'REFA', 'PDNA', 'PDNP']) query = """SELECT PhaseName, phases.ID FROM phases INNER JOIN transactions ON phases.transact=transactions.ID WHERE TBank=:bank @@ -269,6 +269,7 @@ def phase_transitions_are_valid(connection): for currentRow in cursor: currentPhase = currentRow[0] lastPhase = lastRow[0] + if(currentPhase not in validTransitions[lastPhase]): return TestFailed("Phase {0}({1}) is not allowed to follow phase {2}({3})".format(currentRow[1],currentPhase,lastRow[1],lastPhase)) lastRow = currentRow @@ -305,18 +306,18 @@ def timing_constraint(FirstPhase, SecondPhase): return max(dramconfig.tCCD_L, burstlength/dramconfig.dataRate) elif(FirstPhaseName == "RDA"): - if(SecondPhaseName in ["ACT", "PRE_ALL", "AUTO_REFRESH"]): + if(SecondPhaseName in ["ACT", "PRE_ALL", "REFA"]): return dramconfig.tRTP + dramconfig.tRP elif(SecondPhaseName in ["PDNA","PDNP"]): return dramconfig.tRL + getReadAccessTime() + dramconfig.clk elif(FirstPhaseName == "WRA"): - if(SecondPhaseName in ["ACT", "PRE_ALL", "AUTO_REFRESH"]): + if(SecondPhaseName in ["ACT", "PRE_ALL", "REFA"]): return dramconfig.tWL + getWriteAccessTime() + dramconfig.tWR + dramconfig.tRP elif(SecondPhaseName in ["PDNA","PDNP"]): return dramconfig.tWL + dramconfig.getWriteAccessTime() + dramconfig.tWR + dramconfig.clk - elif(FirstPhaseName == "AUTO_REFRESH"): + elif(FirstPhaseName == "REFA"): return dramconfig.tRFC elif(FirstPhaseName in ["PDNA","PDNP"]): @@ -364,7 +365,7 @@ def row_buffer_is_used_correctly(connection): accessingPhases = set(['RD','RDA', 'WR', 'WRA', 'PRE']) #phases that require the bank to be in precharged state and the robuffer to be closed - idlePhases = set(['ACT', 'PDNP', 'AUTO_REFRESH', 'SREF']) + idlePhases = set(['ACT', 'PDNP', 'REFA', 'SREF']) for bankNumber in range(dramconfig.numberOfBanks): cursor.execute(query,{"bank": bankNumber}) @@ -528,7 +529,7 @@ def write_to_read_and_read_to_write_hold(connection): return TestSuceeded() - +# TODO: Check if this test still is correct! @test def read_holds_dll_constraint_after_sref(connection): """Checks that all read operations are delayed long enough after the end of the self refresh powerdown state""" @@ -537,7 +538,6 @@ def read_holds_dll_constraint_after_sref(connection): query = """SELECT Phases.ID,PhaseBegin,PhaseName,TBankGroup from Phases INNER JOIN Transactions ON Phases.Transact = Transactions.ID AND TBank = :bank WHERE PhaseName IN ('RD', 'RDA', 'SREF') ORDER BY PhaseBegin""" - for bankNumber in range(dramconfig.numberOfBanks): cursor.execute(query,{"bank": bankNumber}) lastRow = cursor.fetchone() @@ -547,7 +547,7 @@ def read_holds_dll_constraint_after_sref(connection): if(srefEndToRead < dramconfig.tXSRDLL ): return TestFailed("Read {0} starts {1} after end of sref {2}. Minimum time is {3}". format(currentRow[0],formatTime(srefEndToRead),lastRow[0], formatTime(dramconfig.tXSRDLL))) - lastRow = currentRow + lastRow = currentRow return TestSuceeded() @test diff --git a/DRAMSys/analyzer/traceAnalyzer.pro b/DRAMSys/analyzer/traceAnalyzer.pro index 3c5834d0..e32a37de 100644 --- a/DRAMSys/analyzer/traceAnalyzer.pro +++ b/DRAMSys/analyzer/traceAnalyzer.pro @@ -99,8 +99,6 @@ FORMS += \ OTHER_FILES += \ common/static/createTraceDB.sql \ - tests.py \ - metrics.py \ scripts/metrics.py \ scripts/tests.py