Skip to content

Commit

Permalink
- fixed HPCOM measure time functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
Marcus Walther authored and OpenModelica-Hudson committed Nov 25, 2015
1 parent d8fb057 commit b9f455e
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 21 deletions.
5 changes: 5 additions & 0 deletions Compiler/BackEnd/HpcOmScheduler.mo
Expand Up @@ -5670,6 +5670,11 @@ algorithm
array<list<HpcOmSimCode.Task>> threadTasks;
Real cpCosts, cpCostsWoC, serTime, parTime, speedUp, speedUpMax;
String criticalPathInfo;
case(HpcOmSimCode.EMPTYSCHEDULE(_),_,_,_,_)
equation
((criticalPaths,cpCosts),(criticalPathsWoC,cpCostsWoC)) = HpcOmTaskGraph.getCriticalPaths(taskGraphIn,taskGraphMetaIn);
criticalPathInfo = HpcOmTaskGraph.dumpCriticalPathInfo((criticalPaths,cpCosts),(criticalPathsWoC,cpCostsWoC));
then criticalPathInfo;
case(HpcOmSimCode.LEVELSCHEDULE(tasksOfLevels=tasksOfLevels, useFixedAssignments=false),_,_,_,_)
equation
criticalPathInfo = analyseScheduledTaskGraphLevel(tasksOfLevels, numProcIn, taskGraphIn,taskGraphMetaIn, getLevelParallelTime);
Expand Down
21 changes: 14 additions & 7 deletions Compiler/Template/CodegenCpp.tpl
Expand Up @@ -12805,13 +12805,7 @@ template createEvaluateAll( list<SimEqSystem> allEquationsPlusWhen, SimCode simC
{
<%if createMeasureTime then generateMeasureTimeStartCode("measuredFunctionStartValues", "evaluateAll", "MEASURETIME_MODELFUNCTIONS") else ""%>

// treatment of clocks in model as time events
for (int i = <%timeEventLength(simCode)%>; i < _dimTimeEvent; i++) {
if (_time_conditions[i]) {
evaluateClocked(i - <%timeEventLength(simCode)%> + 1);
_time_conditions[i] = false; // reset clock after one evaluation
}
}
<%createTimeConditionTreatments(timeEventLength(simCode))%>

// Evaluate Equations
<%equation_all_func_calls%>
Expand All @@ -12823,6 +12817,19 @@ template createEvaluateAll( list<SimEqSystem> allEquationsPlusWhen, SimCode simC
>>
end createEvaluateAll;

template createTimeConditionTreatments(String numberOfTimeEvents)
::=
<<
// treatment of clocks in model as time events
for (int i = <%numberOfTimeEvents%>; i < _dimTimeEvent; i++) {
if (_time_conditions[i]) {
evaluateClocked(i - <%numberOfTimeEvents%> + 1);
_time_conditions[i] = false; // reset clock after one evaluation
}
}
>>
end createTimeConditionTreatments;

template createEvaluateConditions( list<SimEqSystem> allEquationsPlusWhen, SimCode simCode ,Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace, Context context, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
::=
let className = lastIdentOfPathFromSimCode(simCode , &extraFuncs , &extraFuncsDecl, extraFuncsNamespace)
Expand Down
33 changes: 20 additions & 13 deletions Compiler/Template/CodegenCppHpcom.tpl
Expand Up @@ -67,9 +67,16 @@ template translateModel(SimCode simCode)
let &complexStartExpressions = buffer ""
let() = textFile(modelInitXMLFile(simCode, numRealVars, numIntVars, numBoolVars, numStringVars, "", "", "", false, "", complexStartExpressions, stateDerVectorName),'OMCpp<%fileNamePrefix%>Init.xml')
let() = textFile(simulationInitCppFile(simCode ,&extraFuncsInit, &extraFuncsDeclInit, "", dummyTypeElemCreation, stateDerVectorName, false, complexStartExpressions), 'OMCpp<%fileNamePrefix%>Initialize.cpp')
let() = textFile(simulationInitParameterCppFile(simCode, &extraFuncsInit, &extraFuncsDeclInit, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>InitializeParameter.cpp')
let() = textFile(simulationInitAliasVarsCppFile(simCode, &extraFuncsInit, &extraFuncsDeclInit, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>InitializeAliasVars.cpp')
let() = textFile(simulationInitAlgVarsCppFile(simCode, &extraFuncsInit, &extraFuncsDeclInit, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>InitializeAlgVars.cpp')

let _ = match boolOr(Flags.isSet(Flags.HARDCODED_START_VALUES), Flags.isSet(Flags.GEN_DEBUG_SYMBOLS))
case true then
let()= textFile(simulationInitParameterCppFile(simCode, &extraFuncsInit, &extraFuncsDeclInit, '<%className%>Initialize', stateDerVectorName, false),'OMCpp<%fileNamePrefix%>InitializeParameter.cpp')
let()= textFile(simulationInitAliasVarsCppFile(simCode, &extraFuncsInit, &extraFuncsDeclInit, '<%className%>Initialize', stateDerVectorName, false),'OMCpp<%fileNamePrefix%>InitializeAliasVars.cpp')
let()= textFile(simulationInitAlgVarsCppFile(simCode , &extraFuncsInit , &extraFuncsDeclInit, '<%className%>Initialize', stateDerVectorName, false),'OMCpp<%fileNamePrefix%>InitializeAlgVars.cpp')
""
else
""

let()= textFile(simulationInitExtVarsCppFile(simCode, &extraFuncsInit, &extraFuncsDeclInit, '<%className%>Initialize', stateDerVectorName, false),'OMCpp<%fileNamePrefix%>InitializeExtVars.cpp')
let() = textFile(simulationInitHeaderFile(simCode, &extraFuncsInit, &extraFuncsDeclInit, ""), 'OMCpp<%fileNamePrefix%>Initialize.h')

Expand All @@ -82,9 +89,6 @@ template translateModel(SimCode simCode)
let()= textFile(simulationMixedSystemCppFile(simCode , &extraFuncs , &extraFuncsDecl, "", stateDerVectorName, false),'OMCpp<%fileNamePrefix%>Mixed.cpp')
let() = textFile(simulationWriteOutputHeaderFile(simCode, &extraFuncs, &extraFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>WriteOutput.h')
let() = textFile(simulationWriteOutputCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>WriteOutput.cpp')
let() = textFile(simulationWriteOutputAlgVarsCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>WriteOutputAlgVars.cpp')
let() = textFile(simulationWriteOutputParameterCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", false), 'OMCpp<%fileNamePrefix%>WriteOutputParameter.cpp')
let() = textFile(simulationWriteOutputAliasVarsCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>WriteOutputAliasVars.cpp')
let() = textFile(simulationFactoryFile(simCode, &extraFuncs, &extraFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>FactoryExport.cpp')

let() = textFile(simulationMainRunScript(simCode, &extraFuncs, &extraFuncsDecl, ""), '<%fileNamePrefix%><%simulationMainRunScriptSuffix(simCode, &extraFuncs, &extraFuncsDecl, "")%>')
Expand Down Expand Up @@ -463,19 +467,19 @@ template additionalHpcomConstructorBodyStatements(Option<tuple<Schedule,Schedule
<<
#ifdef MEASURETIME_MODELFUNCTIONS
measureTimeSchedulerArrayHpcom_evaluateODE = new std::vector<MeasureTimeData*>(size_t(<%listLength(odeSchedule.tasksOfLevels)%>), NULL);
MeasureTime::addResultContentBlock("<%fullModelName%>","functions_HPCOM_Sections",measureTimeSchedulerArrayHpcom_evaluateODE);
MeasureTime::addResultContentBlock("<%fullModelName%>","functions_HPCOM_Sections_ODE",measureTimeSchedulerArrayHpcom_evaluateODE);
measuredSchedulerStartValues = MeasureTime::getZeroValues();
measuredSchedulerEndValues = MeasureTime::getZeroValues();
<%List.intRange(listLength(odeSchedule.tasksOfLevels)) |> levelIdx => '(*measureTimeSchedulerArrayHpcom_evaluateODE)[<%intSub(levelIdx,1)%>] = new MeasureTimeData("evaluateODE_level_<%levelIdx%>");'; separator="\n"%>

measureTimeSchedulerArrayHpcom_evaluateDAE = new std::vector<MeasureTimeData*>(size_t(<%listLength(daeSchedule.tasksOfLevels)%>), NULL);
MeasureTime::addResultContentBlock("<%fullModelName%>","functions_HPCOM_Sections",measureTimeSchedulerArrayHpcom_evaluateDAE);
MeasureTime::addResultContentBlock("<%fullModelName%>","functions_HPCOM_Sections_DAE",measureTimeSchedulerArrayHpcom_evaluateDAE);
measuredSchedulerStartValues = MeasureTime::getZeroValues();
measuredSchedulerEndValues = MeasureTime::getZeroValues();
<%List.intRange(listLength(daeSchedule.tasksOfLevels)) |> levelIdx => '(*measureTimeSchedulerArrayHpcom_evaluateDAE)[<%intSub(levelIdx,1)%>] = new MeasureTimeData("evaluateDAE_level_<%levelIdx%>");'; separator="\n"%>

measureTimeSchedulerArrayHpcom_evaluateZeroFuncs = new std::vector<MeasureTimeData*>(size_t(<%listLength(odeSchedule.tasksOfLevels)%>), NULL);
MeasureTime::addResultContentBlock("<%fullModelName%>","functions_HPCOM_Sections",measureTimeSchedulerArrayHpcom_evaluateZeroFuncs);
measureTimeSchedulerArrayHpcom_evaluateZeroFuncs = new std::vector<MeasureTimeData*>(size_t(<%listLength(zeroFuncSchedule.tasksOfLevels)%>), NULL);
MeasureTime::addResultContentBlock("<%fullModelName%>","functions_HPCOM_Sections_ZeroFuncs",measureTimeSchedulerArrayHpcom_evaluateZeroFuncs);
measuredSchedulerStartValues = MeasureTime::getZeroValues();
measuredSchedulerEndValues = MeasureTime::getZeroValues();
<%List.intRange(listLength(zeroFuncSchedule.tasksOfLevels)) |> levelIdx => '(*measureTimeSchedulerArrayHpcom_evaluateZeroFuncs)[<%intSub(levelIdx,1)%>] = new MeasureTimeData("evaluateZeroFunc_level_<%levelIdx%>");'; separator="\n"%>
Expand Down Expand Up @@ -739,6 +743,8 @@ template updateHpcom(list<SimEqSystem> allEquationsPlusWhen, SimCode simCode, Te

<%createEvaluateConditions(allEquations, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, contextOther, stateDerVectorName, useFlatArrayNotation)%>

<%clockedFunctions(getSubPartitions(clockedPartitions), simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, contextSimulationDiscrete, stateDerVectorName, useFlatArrayNotation, boolNot(stringEq(getConfigString(PROFILING_LEVEL), "none")))%>

<%parCode%>

<%extraFuncsPar%>
Expand Down Expand Up @@ -778,13 +784,14 @@ template generateParallelEvaluate(list<SimEqSystem> allEquationsPlusWhen, Absyn.
{
<%measureTimeEvaluateAllStart%>
bool state_var_reinitialized = false;
<%createTimeConditionTreatments(timeEventLength(simCode))%>
<%varDecls%>
evaluateParallel(command, -1);
<%measureTimeEvaluateAllEnd%>
return state_var_reinitialized;
return _state_var_reinitialized;
}

void <%lastIdentOfPath(name)%>::evaluateODE(const UPDATETYPE command)
Expand Down Expand Up @@ -1317,7 +1324,7 @@ template generateLevelFixedCodeForThreadLevel(list<SimEqSystem> allEquationsPlus

<%if intEq(iThreadIdx, 0) then
<<
<%generateMeasureTimeEndCode("measuredSchedulerStartValues", "measuredSchedulerEndValues", 'measureTimeSchedulerArrayHpcom_<%functionName%>[<%iLevelIdx%>]', '<%functionName%>_level_<%intAdd(iLevelIdx,1)%>', "MEASURETIME_MODELFUNCTIONS")%>
<%generateMeasureTimeEndCode("measuredSchedulerStartValues", "measuredSchedulerEndValues", '(*measureTimeSchedulerArrayHpcom_<%functionName%>)[<%iLevelIdx%>]', '<%functionName%>_level_<%intAdd(iLevelIdx,1)%>', "MEASURETIME_MODELFUNCTIONS")%>
>>
%>
//End of Level <%iLevelIdx%>
Expand Down
9 changes: 8 additions & 1 deletion SimulationRuntime/cpp/Core/Utils/extension/measure_time.cpp
@@ -1,6 +1,8 @@
#include <Core/ModelicaDefine.h>
#include <Core/Modelica.h>
#include <Core/Utils/extension/measure_time.hpp>
#include <Core/Utils/extension/FactoryExport.h>
#include <Core/Utils/extension/logger.hpp>

MeasureTime * MeasureTime::_instance = NULL;
MeasureTime::file_map MeasureTime::_valuesToWrite;
Expand Down Expand Up @@ -223,8 +225,13 @@ void MeasureTime::writeToJson()
os << "\"" << block->first << "\":[\n";

//write data
for (unsigned i = 0; i < data->size()-1; ++i)
for (unsigned i = 0; i < (data->size() == 0 ? 1 : data->size()) - 1; ++i)
{
if((*data)[i] == NULL)
{
LOGGER_WRITE("Skipped a measured block in '" + block->first + "' because it is null.", LC_OUT, LL_ERROR);
continue;
}
tmpS = (*data)[i]->serializeToJson();
if(tmpS != "")
os << "{\"id\":\"" << (*data)[i]->_id << "\"," << tmpS << "},\n";
Expand Down

0 comments on commit b9f455e

Please sign in to comment.