Skip to content

Commit

Permalink
- added a mapping for variables to storage positions, to support effi…
Browse files Browse the repository at this point in the history
…cient code generation that keeps array-variables as arrays

- a new HashTable is now part of the code, that maps a ComponentReference to an array of Integers and a list of Integers
- HpcOm memory optimization disabled
- initAliasArray-interface extended in SimVars-Class
- some typo fixes

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@25804 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Marcus Walther committed Apr 29, 2015
1 parent 5165884 commit 1a2bb57
Show file tree
Hide file tree
Showing 20 changed files with 689 additions and 205 deletions.
5 changes: 3 additions & 2 deletions Compiler/BackEnd/BackendQSS.mo
Expand Up @@ -1017,6 +1017,7 @@ algorithm
list<SimCode.SimEqSystem> eqs;
list<BackendDAE.TimeEvent> timeEvents;
HpcOmSimCode.HpcOmData hpcomData;
HashTableCrIListArray.HashTable varToArrayIndexMapping;
Option<SimCode.FmiModelStructure> modelStruct;
list<SimCodeVar.SimVar> mixedArrayVars;
Option<SimCode.BackendMapping> backendMapping;
Expand All @@ -1025,7 +1026,7 @@ algorithm
algebraicEquations,useSymbolicInitialization,useHomotopy,initialEquations,removedInitialEquations,startValueEquations,nominalValueEquations,minValueEquations,maxValueEquations,
parameterEquations,removedEquations,algorithmAndEquationAsserts,equationsForZeroCrossings,jacobianEquations,stateSets,constraints,classAttributes,zeroCrossings,relations,
timeEvents,whenClauses,discreteModelVars,extObjInfo,makefileParams,
delayedExps,jacobianMatrixes,simulationSettingsOpt,fileNamePrefix,hpcomData,crefToSimVarHT,backendMapping, modelStruct),_)
delayedExps,jacobianMatrixes,simulationSettingsOpt,fileNamePrefix,hpcomData,varToArrayIndexMapping,crefToSimVarHT,backendMapping, modelStruct),_)
equation
{eqs} = odeEquations;
eqs = List.map1(eqs,replaceZC,zc_exps);
Expand All @@ -1034,7 +1035,7 @@ algorithm
initialEquations, removedInitialEquations, startValueEquations, nominalValueEquations, minValueEquations, maxValueEquations, parameterEquations,
removedEquations, algorithmAndEquationAsserts, equationsForZeroCrossings, jacobianEquations, stateSets, constraints, classAttributes,
zeroCrossings, relations, timeEvents, whenClauses, discreteModelVars, extObjInfo,
makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcomData, crefToSimVarHT,backendMapping, modelStruct);
makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcomData, varToArrayIndexMapping, crefToSimVarHT,backendMapping, modelStruct);

end match;
end replaceDiscontsInOde;
Expand Down
5 changes: 3 additions & 2 deletions Compiler/BackEnd/HpcOmScheduler.mo
Expand Up @@ -3400,6 +3400,7 @@ protected
list<SimCode.Function> functions;
SimCode.Files files;
HpcOmSimCode.HpcOmData hpcomData;
HashTableCrIListArray.HashTable varToArrayIndexMapping;
Option<SimCode.BackendMapping> backendMapping;
//modelinfo stuff
SimCode.ModelInfo modelInfo;
Expand All @@ -3416,7 +3417,7 @@ algorithm
SimCode.SIMCODE(modelInfo, literals, recordDecls, externalFunctionIncludes, allEquations, odeEquations, algebraicEquations, useSymbolicInitialization, useHomotopy,
initialEquations, removedInitialEquations, startValueEquations, nominalValueEquations, minValueEquations, maxValueEquations, parameterEquations, removedEquations,
algorithmAndEquationAsserts,equationsForZeroCrossings, jacobianEquations, stateSets, constraints, classAttributes, zeroCrossings, relations, timeEvents, whenClauses, discreteModelVars, extObjInfo,
makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcomData, crefToSimVarHT, backendMapping, modelStruct):=simCodeIn;
makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcomData, varToArrayIndexMapping, crefToSimVarHT, backendMapping, modelStruct):=simCodeIn;
SimCode.MODELINFO(name=name,description=description,directory=directory,varInfo=varInfo,vars=vars,functions=functions,labels=labels) := modelInfo;
SimCode.VARINFO(numZeroCrossings=numZeroCrossings, numTimeEvents=numTimeEvents, numRelations=numRelations, numMathEventFunctions=numMathEventFunctions, numStateVars=numStateVars,
numAlgVars=numAlgVars, numDiscreteReal=numDiscreteReal, numIntAlgVars=numIntAlgVars, numBoolAlgVars=numBoolAlgVars, numAlgAliasVars=numAlgAliasVars, numIntAliasVars=numIntAliasVars,
Expand Down Expand Up @@ -3451,7 +3452,7 @@ algorithm
modelInfo := SimCode.MODELINFO(name,description,directory,varInfo,vars,functions,labels);
simCodeOut := SimCode.SIMCODE(modelInfo, literals, recordDecls, externalFunctionIncludes, allEquations, odeEquations, algebraicEquations, useSymbolicInitialization, useHomotopy, initialEquations, removedInitialEquations, startValueEquations, nominalValueEquations, minValueEquations, maxValueEquations,
parameterEquations, removedEquations, algorithmAndEquationAsserts, equationsForZeroCrossings, jacobianEquations, stateSets, constraints, classAttributes, zeroCrossings, relations, timeEvents, whenClauses,
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcomData, crefToSimVarHT,backendMapping, modelStruct);
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcomData, varToArrayIndexMapping, crefToSimVarHT,backendMapping, modelStruct);
idxAssOut := ass;
end TDS_assignNewSimEqSysIdxs;

Expand Down
17 changes: 17 additions & 0 deletions Compiler/FrontEnd/DAEUtil.mo
Expand Up @@ -6997,5 +6997,22 @@ algorithm
end match;
end getAssertConditionCrefs;

public function getSubscriptIndex "author: marcusw
Get the index of the given subscript as Integer. If the subscript is not a constant integer, the function returns 0."
input DAE.Subscript iSubscript;
output Integer oIndex;
protected
Integer index;
algorithm
oIndex := match(iSubscript)
case(DAE.INDEX(DAE.ICONST(integer=index)))
then index;
else
equation
Error.addMessage(Error.INTERNAL_ERROR, {"GetSubscriptIndex: Only constant index subsripts are supported at the moment!."});
then 0;
end match;
end getSubscriptIndex;

annotation(__OpenModelica_Interface="frontend");
end DAEUtil;
7 changes: 4 additions & 3 deletions Compiler/SimCode/HpcOmSimCodeMain.mo
Expand Up @@ -181,6 +181,7 @@ algorithm
Option<SimCode.FmiModelStructure> modelStruct;
list<SimCodeVar.SimVar> mixedArrayVars;
HpcOmSimCode.HpcOmData hpcomData;
HashTableCrIListArray.HashTable varToArrayIndexMapping;

case (BackendDAE.DAE(eqs=eqs), _, _, _, _,_, _, _, _, _, _, _, _) equation
//Initial System
Expand All @@ -195,7 +196,7 @@ algorithm
(simCode,(lastEqMappingIdx,equationSccMapping)) = SimCodeUtil.createSimCode(inBackendDAE, inClassName, filenamePrefix, inString11, functions, externalFunctionIncludes, includeDirs, libs,libPaths, simSettingsOpt, recordDecls, literals, args);
SimCode.SIMCODE(modelInfo, simCodeLiterals, simCodeRecordDecls, simCodeExternalFunctionIncludes, allEquations, odeEquations, algebraicEquations, useSymbolicInitialization, useHomotopy, initialEquations, removedInitialEquations, startValueEquations, nominalValueEquations, minValueEquations, maxValueEquations,
parameterEquations, removedEquations, algorithmAndEquationAsserts, zeroCrossingsEquations, jacobianEquations, stateSets, constraints, classAttributes, zeroCrossings, relations, timeEvents, whenClauses,
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, _, crefToSimVarHT, backendMapping) = simCode;
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, _, varToArrayIndexMapping, crefToSimVarHT, backendMapping) = simCode;

//print("Number of literals pre: " + intString(listLength(simCodeLiterals)) + "\n");

Expand Down Expand Up @@ -338,7 +339,7 @@ algorithm

SimCode.SIMCODE(modelInfo, simCodeLiterals, simCodeRecordDecls, simCodeExternalFunctionIncludes, allEquations, odeEquations, algebraicEquations, useSymbolicInitialization, useHomotopy, initialEquations, removedInitialEquations, startValueEquations, nominalValueEquations, minValueEquations, maxValueEquations,
parameterEquations, removedEquations, algorithmAndEquationAsserts, zeroCrossingsEquations, jacobianEquations, stateSets, constraints, classAttributes, zeroCrossings, relations, timeEvents, whenClauses,
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, _, crefToSimVarHT, backendMapping, modelStruct) = simCode;
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, _, varToArrayIndexMapping, crefToSimVarHT, backendMapping, modelStruct) = simCode;

//(schedule,numProc) = repeatScheduleWithOtherNumProc(taskGraphSimplified,taskGraphDataSimplified,sccSimEqMapping,filenamePrefix,cpCostsWoC,schedule,numProc,numFixed);
numProc = Flags.getConfigInt(Flags.NUM_PROC);
Expand Down Expand Up @@ -372,7 +373,7 @@ algorithm
hpcomData = HpcOmSimCode.HPCOMDATA(SOME(scheduleDae), SOME(scheduleOde), optTmpMemoryMap);
simCode = SimCode.SIMCODE(modelInfo, simCodeLiterals, simCodeRecordDecls, simCodeExternalFunctionIncludes, allEquations, odeEquations, algebraicEquations, useSymbolicInitialization, useHomotopy, initialEquations, removedInitialEquations, startValueEquations, nominalValueEquations, minValueEquations, maxValueEquations,
parameterEquations, removedEquations, algorithmAndEquationAsserts, zeroCrossingsEquations, jacobianEquations, stateSets, constraints, classAttributes, zeroCrossings, relations, timeEvents, whenClauses,
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcomData, crefToSimVarHT, backendMapping, modelStruct);
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcomData, varToArrayIndexMapping, crefToSimVarHT, backendMapping, modelStruct);

//print("Number of literals post: " + intString(listLength(simCodeLiterals)) + "\n");

Expand Down
6 changes: 5 additions & 1 deletion Compiler/SimCode/SimCode.mo
Expand Up @@ -55,8 +55,9 @@ encapsulated package SimCode
public import Absyn;
public import BackendDAE;
public import DAE;
public import SimCodeVar;
public import HashTableCrIListArray;
public import HpcOmSimCode;
public import SimCodeVar;
public import SCode;

public
Expand Down Expand Up @@ -116,6 +117,9 @@ uniontype SimCode
Option<SimulationSettings> simulationSettingsOpt;
String fileNamePrefix;
HpcOmSimCode.HpcOmData hpcomData;
//maps each variable to an array of storage indices (with this information, arrays must not be unrolled) and a list for the array-dimensions
//if the variable is not part of an array (if it is a scalar value), then the array has size 1
HashTableCrIListArray.HashTable varToArrayIndexMapping;
//*** a protected section *** not exported to SimCodeTV
HashTableCrefToSimVar crefToSimVarHT "hidden from typeview - used by cref2simvar() for cref -> SIMVAR lookup available in templates.";
Option<BackendMapping> backendMapping;
Expand Down

0 comments on commit 1a2bb57

Please sign in to comment.