updated slg linux code to support LocalModeCondition
diff --git a/load_generator/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/RunnableTransformer.java b/load_generator/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/RunnableTransformer.java index dfb4eb1..a52ff89 100644 --- a/load_generator/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/RunnableTransformer.java +++ b/load_generator/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/RunnableTransformer.java
@@ -154,9 +154,9 @@ } public boolean processCustomProperties(boolean extOverwrite, final List<String> calls, - final List<String> callsOverwrite, final ActivityGraph activityGraph) { + final List<String> callsOverwrite, final EObject parentOfActivityGraphItem) { - for (EObject item : activityGraph.eContents()) { + for (EObject item : parentOfActivityGraphItem.eContents()) { if (item instanceof CustomPropertyImpl) // custom property: {
diff --git a/load_generator/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/customization/CustomRunnableTransformer.java b/load_generator/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/customization/CustomRunnableTransformer.java index 7de1295..d34d2de 100644 --- a/load_generator/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/customization/CustomRunnableTransformer.java +++ b/load_generator/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/customization/CustomRunnableTransformer.java
@@ -19,6 +19,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -26,14 +27,26 @@ import java.util.Properties; import org.eclipse.app4mc.amalthea.model.ActivityGraphItem; +import org.eclipse.app4mc.amalthea.model.ConditionDisjunction; +import org.eclipse.app4mc.amalthea.model.ConditionDisjunctionEntry; +import org.eclipse.app4mc.amalthea.model.ILocalModeValueSource; import org.eclipse.app4mc.amalthea.model.InterProcessTrigger; +import org.eclipse.app4mc.amalthea.model.LocalModeCondition; +import org.eclipse.app4mc.amalthea.model.LocalModeLabel; +import org.eclipse.app4mc.amalthea.model.ModeLiteral; +import org.eclipse.app4mc.amalthea.model.ModeLiteralConst; import org.eclipse.app4mc.amalthea.model.Process; import org.eclipse.app4mc.amalthea.model.Runnable; +import org.eclipse.app4mc.amalthea.model.Switch; +import org.eclipse.app4mc.amalthea.model.SwitchEntry; import org.eclipse.app4mc.amalthea.model.Ticks; import org.eclipse.app4mc.slg.commons.m2t.CustomObjectsStore; import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGTranslationUnit; import org.eclipse.app4mc.slg.commons.m2t.transformers.sw.ActivityGraphItemTransformer; import org.eclipse.app4mc.slg.commons.m2t.transformers.sw.RunnableTransformer; +import org.eclipse.app4mc.util.sessionlog.SessionLogger; +import org.eclipse.emf.common.util.BasicEList; +import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import com.google.inject.Inject; @@ -105,95 +118,62 @@ @Override protected void genFiles(final SLGTranslationUnit tu, final Runnable runnable) { - boolean extOverwrite = false; // enabling codehook overwriting + boolean extOverwriteAtActivityGraph = false; // enabling codehook overwriting if (isSrcFileEmpty(tu)) { srcAppend(tu, "#include \"" + getIncFile(tu) + "\"\n"); srcAppend(tu, "#include \"ticksUtils.h\"\n"); } + + customObjsStore.indexData(tu.getCall(), runnable); final HashSet<String> includes = new LinkedHashSet<>(); final List<String> calls = new ArrayList<>(); final List<String> callsOverwrite = new ArrayList<>(); //overwrite codehook fct + + final Map<SwitchEntry,List<String>> switchBasedCalls = new LinkedHashMap<SwitchEntry, List<String>>(); + + final Map<SwitchEntry,List<String>> switchBasedCallsOverwrite = new LinkedHashMap<SwitchEntry, List<String>>(); //overwrite codehook fct + + final List<SwitchEntry> switchEntries=new ArrayList<SwitchEntry>(); + + + final Map<SwitchEntry, Boolean> switchEntryOverwriteActivityGraph=new LinkedHashMap<SwitchEntry, Boolean>(); + + final List<Process> processedTasks = new ArrayList<>(); + final List<ActivityGraphItem> defaultActivityGraphItems=new ArrayList<ActivityGraphItem>(); + if (runnable != null && runnable.getActivityGraph() != null) { - - extOverwrite = processCustomProperties(extOverwrite, calls, callsOverwrite, runnable.getActivityGraph()); - - // ************ Looping through all the elements inside ActivityGraph object - for (final EObject item : runnable.getActivityGraph().eContents()) { - - if (item instanceof Ticks) { - Ticks ticks = (Ticks) item; - final Map<String, SLGTranslationUnit> translationUnits = activityGraphItemTransformer - .transformAllItems(ticks); // Mc: move method to TicksTransformer ? - - SLGTranslationUnit defaultTicksTU = null; - boolean ticksAssociatedToPUs = false; - - for (final Entry<String, SLGTranslationUnit> entry : translationUnits.entrySet()) { - String puName = entry.getKey(); - SLGTranslationUnit tmpTU = entry.getValue(); - - if (puName.equals("default")) { - defaultTicksTU = tmpTU; - } else { - final String tmpIncFile = getIncFile(tmpTU); - if (tmpIncFile != null && !tmpIncFile.isEmpty() && !getIncFile(tu).equals(tmpIncFile)) { - includes.add(tmpIncFile); - } - final String call = tmpTU.getCall(); - if (call != null && !call.isEmpty()) { - calls.add(ticksAssociatedToPUs ? "else if(strcmp(coreName,\"" + puName + "\")==0){" - : " if(strcmp(coreName,\"" + puName + "\")==0){"); - calls.add(call); - calls.add("}"); - ticksAssociatedToPUs = true; - } - } - } - - if ((defaultTicksTU != null)) { - if (ticksAssociatedToPUs) { - calls.add("else "); - calls.add("{"); - } - - if (defaultTicksTU.getCall() != null && !defaultTicksTU.getCall().isEmpty()) { - calls.add(defaultTicksTU.getCall()); - } - - if (ticksAssociatedToPUs) { - calls.add("}"); - } - - } - } else if (item instanceof ActivityGraphItem) { - if ((item instanceof InterProcessTrigger)) { - InterProcessTrigger trigger = (InterProcessTrigger) item; - // final ConfigModel configModel = - // customObjsStore.<ConfigModel>getInstance(ConfigModel.class); - final String value = CustomRunnableGenerator.handleInterProcessTrigger(trigger.getStimulus(), - processedTasks); - if (value != null && !value.trim().isEmpty()) { - calls.add(value); - } - } else { - final SLGTranslationUnit tmpTU = activityGraphItemTransformer - .transform((ActivityGraphItem) item); - - final String tmpIncFile = getIncFile(tmpTU); - if (tmpIncFile != null && !tmpIncFile.isEmpty() && !getIncFile(tu).equals(tmpIncFile)) { - includes.add(tmpIncFile); - } - final String call = tmpTU.getCall(); - if (call != null && !call.isEmpty()) { - calls.add(call); - } - } + + EList<ActivityGraphItem> activityGraphItems = runnable.getActivityGraph().getItems(); + + for (ActivityGraphItem activityGraphItem : activityGraphItems) { + + if(activityGraphItem instanceof Switch) { + + for(SwitchEntry entry: ((Switch)activityGraphItem).getEntries()) { + switchBasedCalls.put(entry, new ArrayList<String>()); + switchBasedCallsOverwrite.put(entry, new ArrayList<String>()); + switchEntries.add(entry); + } + }else { + defaultActivityGraphItems.add(activityGraphItem); } + } + extOverwriteAtActivityGraph = extracted(tu, new BasicEList<ActivityGraphItem>(defaultActivityGraphItems), extOverwriteAtActivityGraph, includes, calls, callsOverwrite, processedTasks); + + for(SwitchEntry switchEntry: switchEntries) { + + Boolean extOverwriteActivityGraph_switch = extracted(tu, switchEntry.getItems(), extOverwriteAtActivityGraph, includes, switchBasedCalls.get(switchEntry), switchBasedCallsOverwrite.get(switchEntry), processedTasks); + + switchEntryOverwriteActivityGraph.put(switchEntry, extOverwriteActivityGraph_switch); + + } + + } String runnableName = runnable.getName(); @@ -206,7 +186,7 @@ //------------------------ write body with overwrite codehook function - if (extOverwrite) { + if (extOverwriteAtActivityGraph) { String call_overwrite = "run_" + runnable.getName(); srcAppend(tu, "void " + call_overwrite + "(char* coreName){\n" + "\n"); @@ -215,15 +195,176 @@ srcAppend(tu, call + ";" + "\n"); } srcAppend(tu, "\n" + "}" + "\n"); + + if(runnable.getLocalLabels().size()>0) { + + //additional method for switch + srcAppend(tu, "void " + call_overwrite+"_Context" + "(char* coreName,"+getParamNames(runnable.getLocalLabels())+" ){\n" + "\n"); + + for(SwitchEntry switchEntry: switchEntries) { + + if(switchEntryOverwriteActivityGraph.get(switchEntry)) { + + srcAppend(tu, getConditionString(switchEntry) + "\n"); + + for (String call : switchBasedCallsOverwrite.get(switchEntry)) { + srcAppend(tu, call + ";" + "\n"); + } + + }else { + for (String call : switchBasedCalls.get(switchEntry)) { + srcAppend(tu, call + ";" + "\n"); + } + } + + } + srcAppend(tu, "\n" + "}" + "\n"); + } + } // ------------------------ else { - toCpp(tu, calls); // write body without overwriting the codehook function + toCustomCpp(tu, calls,switchEntries,switchBasedCalls,runnable); // write body without overwriting the codehook function } } + private String getConditionString(SwitchEntry switchEntry) { + + ConditionDisjunction condition = switchEntry.getCondition(); + + if(condition !=null) { + + EList<ConditionDisjunctionEntry> entries = condition.getEntries(); + + for (ConditionDisjunctionEntry conditionDisjunctionEntry : entries) { + + if(conditionDisjunctionEntry instanceof LocalModeCondition) { + LocalModeLabel localLabel = ((LocalModeCondition) conditionDisjunctionEntry).getLabel(); + + if(localLabel !=null) { + + String localVariableName = localLabel.getName(); + + + ILocalModeValueSource valueSource = ((LocalModeCondition) conditionDisjunctionEntry).getValueSource(); + + if(valueSource !=null && valueSource instanceof ModeLiteralConst) { + ModeLiteral value = ((ModeLiteralConst)valueSource).getValue(); + + String caseName= value.getName(); + + return "strcmp("+localVariableName+",\""+caseName+"\")==0"; + } + } + } + } + } + + + + return "false"; + } + + private String getParamNames(EList<LocalModeLabel> localLabels) { + + List<String> ls=new ArrayList<String>(); + + for (LocalModeLabel localModeLabel : localLabels) { + ls.add("char* "+localModeLabel.getName()); + } + + return String.join(",", ls); + } + + private boolean extracted(final SLGTranslationUnit tu, final EList<ActivityGraphItem> activityGraphItems, boolean extOverwrite, + final HashSet<String> includes, final List<String> calls, final List<String> callsOverwrite, + final List<Process> processedTasks) { + + if(activityGraphItems.size()==0) { + return false; + } + + extOverwrite = processCustomProperties(extOverwrite, calls, callsOverwrite,activityGraphItems.get(0).eContainer()); + + // ************ Looping through all the elements inside ActivityGraph object + for (final EObject item : activityGraphItems) { + + if (item instanceof Ticks) { + Ticks ticks = (Ticks) item; + final Map<String, SLGTranslationUnit> translationUnits = activityGraphItemTransformer + .transformAllItems(ticks); // Mc: move method to TicksTransformer ? + + SLGTranslationUnit defaultTicksTU = null; + boolean ticksAssociatedToPUs = false; + + for (final Entry<String, SLGTranslationUnit> entry : translationUnits.entrySet()) { + String puName = entry.getKey(); + SLGTranslationUnit tmpTU = entry.getValue(); + + if (puName.equals("default")) { + defaultTicksTU = tmpTU; + } else { + final String tmpIncFile = getIncFile(tmpTU); + if (tmpIncFile != null && !tmpIncFile.isEmpty() && !getIncFile(tu).equals(tmpIncFile)) { + includes.add(tmpIncFile); + } + final String call = tmpTU.getCall(); + if (call != null && !call.isEmpty()) { + calls.add(ticksAssociatedToPUs ? "else if(strcmp(coreName,\"" + puName + "\")==0){" + : " if(strcmp(coreName,\"" + puName + "\")==0){"); + calls.add(call); + calls.add("}"); + ticksAssociatedToPUs = true; + } + } + } + + if ((defaultTicksTU != null)) { + if (ticksAssociatedToPUs) { + calls.add("else "); + calls.add("{"); + } + + if (defaultTicksTU.getCall() != null && !defaultTicksTU.getCall().isEmpty()) { + calls.add(defaultTicksTU.getCall()); + } + + if (ticksAssociatedToPUs) { + calls.add("}"); + } + + } + } else if (item instanceof ActivityGraphItem) { + if ((item instanceof InterProcessTrigger)) { + InterProcessTrigger trigger = (InterProcessTrigger) item; + // final ConfigModel configModel = + // customObjsStore.<ConfigModel>getInstance(ConfigModel.class); + final String value = CustomRunnableGenerator.handleInterProcessTrigger(trigger.getStimulus(), + processedTasks); + if (value != null && !value.trim().isEmpty()) { + calls.add(value); + } + } else { + final SLGTranslationUnit tmpTU = activityGraphItemTransformer + .transform((ActivityGraphItem) item); + + final String tmpIncFile = getIncFile(tmpTU); + if (tmpIncFile != null && !tmpIncFile.isEmpty() && !getIncFile(tu).equals(tmpIncFile)) { + includes.add(tmpIncFile); + } + final String call = tmpTU.getCall(); + if (call != null && !call.isEmpty()) { + calls.add(call); + } + } + } + } + return extOverwrite; + } + + @Override @@ -238,6 +379,57 @@ srcAppend(tu, "}\n\n"); + + + + } + + protected void toCustomCpp(final SLGTranslationUnit tu, final List<String> calls, List<SwitchEntry> switchEntries, Map<SwitchEntry, List<String>> switchBasedCalls, Runnable runnable) { + + + srcAppend(tu, "void " + tu.getCall() + "(char* coreName){\n"); + + for (String call : calls) { + srcAppend(tu, "\t" + call + (call.endsWith(")") ? ";" : "") + "\n"); + } + + srcAppend(tu, "}\n\n"); + + if(runnable.getLocalLabels().size()>0) { + + //additional method for switch + srcAppend(tu, "void " + tu.getCall()+"_Context" + "(char* coreName,"+getParamNames(runnable.getLocalLabels())+" ){\n" + "\n"); + + for(SwitchEntry switchEntry: switchEntries) { + + { + srcAppend(tu, "if("+getConditionString(switchEntry)+"){" + "\n"); + + for (String call : switchBasedCalls.get(switchEntry)) { + srcAppend(tu, call + ";" + "\n"); + } + srcAppend(tu, "\n" + "}" + "\n"); + } + + } + srcAppend(tu, "\n" + "}" + "\n"); + } + + + } + + @Override + protected void toH(SLGTranslationUnit tu, String runnableName, HashSet<String> includes) { + // TODO Auto-generated method stub + super.toH(tu, runnableName, includes); + + Object data = customObjsStore.getData(tu.getCall()); + EList<LocalModeLabel> localLabels = ((Runnable)data).getLocalLabels(); + if(localLabels.size()>0) + incAppend(tu, "void " + tu.getCall()+"_Context" + "(char* coreName"+","+getParamNames(localLabels)+" );\n"); + + + } }
diff --git a/load_generator/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRunnableTransformer.java b/load_generator/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRunnableTransformer.java index c439a20..039cf1e 100644 --- a/load_generator/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRunnableTransformer.java +++ b/load_generator/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRunnableTransformer.java
@@ -153,55 +153,8 @@ incAppend(tu, "\n//Runnable " + runnable.getName() + "----\n"); incAppend(tu, "void " + "run_"+runnable.getName() + "(char* coreName);\n"); - Calculation calc = new Calculation(); - calc.ticksSumMap.put(DEFAULT, Integer.valueOf(0)); - if (runnable != null && runnable.getActivityGraph() != null) { - for (ActivityGraphItem item : runnable.getActivityGraph().getItems()) { - if (item instanceof Ticks) { - Ticks ticks = (Ticks) item; - if (ticks.getDefault() != null && ticks.getDefault().getAverage() != null) { - calc.ticksSumMap.put(DEFAULT, calc.ticksSumMap.get(DEFAULT)+ticks.getDefault().getAverage().intValue()); - } - Set<ProcessingUnitDefinition> puDefinitions = ticks.getExtended().keySet(); - for (ProcessingUnitDefinition puDef : puDefinitions) { - if (puDef != null) { - String puDefName = puDef.getName(); - if (!calc.ticksSumMap.containsKey(puDefName)) { - calc.ticksSumMap.put(puDefName, 0); - } - calc.ticksSumMap.put(puDefName, calc.ticksSumMap.get(puDefName) - + ticks.getExtended().get(puDef).getAverage().intValue()); - } - } - } else if (item instanceof LabelAccess) { - LabelAccess la = (LabelAccess) item; - Float value = Float - .parseFloat(properties.getOrDefault("labelAccessStatisticValueDefault", "1.0F").toString()); - - LabelAccessStatistic labelStatistic = la.getStatistic(); - if (labelStatistic != null) { - NumericStatistic labelStatisticValue = labelStatistic.getValue(); - - if (labelStatisticValue instanceof SingleValueStatistic) { - value = ((SingleValueStatistic) labelStatisticValue).getValue(); - } else if (labelStatisticValue instanceof MinAvgMaxStatistic) { - // TODO: provide a configuration option, to select appropriate value - // from labelStatistic (min/max/avg) - // right now considering the average value - value = ((MinAvgMaxStatistic) labelStatisticValue).getAvg(); - } - } - - if (la.getAccess() == LabelAccessEnum.READ) { - calc.readsSum += value.intValue(); - } else if (la.getAccess() == LabelAccessEnum.WRITE) { - calc.writesSum += value.intValue(); - } - } - } - } boolean useExperimental = Boolean.parseBoolean(properties.getProperty("experimentalCodeSnippetMatching")); boolean enableExtCode = Boolean.parseBoolean(properties.getProperty("enableExternalCode"));
diff --git a/load_generator/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTaskTransformer.java b/load_generator/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTaskTransformer.java index a7c9ead..94a85a0 100644 --- a/load_generator/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTaskTransformer.java +++ b/load_generator/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTaskTransformer.java
@@ -26,8 +26,11 @@ import org.eclipse.app4mc.amalthea.model.Amalthea; import org.eclipse.app4mc.amalthea.model.AmaltheaServices; import org.eclipse.app4mc.amalthea.model.Group; +import org.eclipse.app4mc.amalthea.model.ILocalModeValueSource; import org.eclipse.app4mc.amalthea.model.InterProcessStimulus; import org.eclipse.app4mc.amalthea.model.InterProcessTrigger; +import org.eclipse.app4mc.amalthea.model.LocalModeLabelAssignment; +import org.eclipse.app4mc.amalthea.model.ModeLiteralConst; import org.eclipse.app4mc.amalthea.model.Process; import org.eclipse.app4mc.amalthea.model.ProcessingUnit; import org.eclipse.app4mc.amalthea.model.ProcessingUnitDefinition; @@ -47,6 +50,7 @@ import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer; import org.eclipse.app4mc.transformation.TransformationConstants; import org.eclipse.app4mc.util.sessionlog.SessionLogger; +import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import com.google.inject.Inject; @@ -181,12 +185,43 @@ final Runnable runnable = ((RunnableCall) item).getRunnable(); if ((runnable != null)) { + List<String> contextParameters=new ArrayList<String>(); + + EList<LocalModeLabelAssignment> context = ((RunnableCall)item).getContext(); + + for (LocalModeLabelAssignment localModeLabelAssignment : context) { + + ILocalModeValueSource valueSource = localModeLabelAssignment.getValueSource(); + + if(valueSource !=null && valueSource instanceof ModeLiteralConst) { + + contextParameters.add("\""+((ModeLiteralConst)valueSource).getValue().getName()+"\""); + } + } + + + + if (enableInstrumentation_R) { statements.add("instr_start();"); - statements.add("run_" + runnable.getName() + "(\"" + puDefinition.toString() + "\");"); + if(contextParameters.size()>0) { + + statements.add("run_" + runnable.getName()+"_Context" + "(\"" + puDefinition.toString() + "\","+String.join(",", contextParameters)+");"); + }else { + statements.add("run_" + runnable.getName() + "(\"" + puDefinition.toString() + "\");"); + + } statements.add("instr_stop();"); } else { - statements.add("run_" + runnable.getName() + "(\"" + puDefinition.toString() + "\");"); + + if(contextParameters.size()>0) { + + statements.add("run_" + runnable.getName()+"_Context" + "(\"" + puDefinition.toString() + "\","+String.join(",", contextParameters)+");"); + }else { + statements.add("run_" + runnable.getName() + "(\"" + puDefinition.toString() + "\");"); + + } + } } } else if (item instanceof InterProcessTrigger) {
diff --git a/load_generator/releng/org.eclipse.app4mc.slg.linux.product/input/req/ModeLabelConditons.amxmi b/load_generator/releng/org.eclipse.app4mc.slg.linux.product/input/req/ModeLabelConditons.amxmi index 7dc06da..4d24c59 100644 --- a/load_generator/releng/org.eclipse.app4mc.slg.linux.product/input/req/ModeLabelConditons.amxmi +++ b/load_generator/releng/org.eclipse.app4mc.slg.linux.product/input/req/ModeLabelConditons.amxmi
@@ -15,7 +15,9 @@ <activityGraph> <items xsi:type="am:Switch"> <entries name="CPU"> - <items xsi:type="am:Ticks"/> + <items xsi:type="am:Ticks"> + <default xsi:type="am:DiscreteValueConstant" value="100"/> + </items> <condition> <entries xsi:type="am:LocalModeCondition" label="RunnableA/localContextA?type=LocalModeLabel" relation="EQUAL"> <valueSource xsi:type="am:ModeLiteralConst" value="Variants/cpu?type=ModeLiteral"/> @@ -23,7 +25,9 @@ </condition> </entries> <entries name="CUDA"> - <items xsi:type="am:Ticks"/> + <items xsi:type="am:Ticks"> + <default xsi:type="am:DiscreteValueConstant" value="100"/> + </items> <condition> <entries xsi:type="am:LocalModeCondition" label="RunnableA/localContextA?type=LocalModeLabel" relation="EQUAL"> <valueSource xsi:type="am:ModeLiteralConst" value="Variants/cuda?type=ModeLiteral"/> @@ -31,7 +35,9 @@ </condition> </entries> <entries name="openMP"> - <items xsi:type="am:Ticks"/> + <items xsi:type="am:Ticks"> + <default xsi:type="am:DiscreteValueConstant" value="100"/> + </items> <condition> <entries xsi:type="am:LocalModeCondition" label="RunnableA/localContextA?type=LocalModeLabel" relation="EQUAL"> <valueSource xsi:type="am:ModeLiteralConst" value="Variants/openMP?type=ModeLiteral"/>