Skip to content
Snippets Groups Projects
Commit f3cd95a7 authored by Nelson Tavares de Sousa's avatar Nelson Tavares de Sousa
Browse files

added color testing and recursive call to traverse through all stages

parent ba4f287d
No related branches found
No related tags found
No related merge requests found
...@@ -134,7 +134,7 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught ...@@ -134,7 +134,7 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught
} }
initialized = true; initialized = true;
instantiatePipes(); prototypeInstantiatePipes();
final Set<Stage> threadableStageJobs = this.configuration.getThreadableStageJobs(); final Set<Stage> threadableStageJobs = this.configuration.getThreadableStageJobs();
if (threadableStageJobs.isEmpty()) { if (threadableStageJobs.isEmpty()) {
...@@ -204,25 +204,38 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught ...@@ -204,25 +204,38 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught
Map<Stage, Integer> colors = new HashMap<Stage, Integer>(); Map<Stage, Integer> colors = new HashMap<Stage, Integer>();
Set<Stage> threadableStageJobs = configuration.getThreadableStageJobs(); Set<Stage> threadableStageJobs = configuration.getThreadableStageJobs();
for (Stage threadableStage : threadableStageJobs) { for (Stage threadableStage : threadableStageJobs) {
i++;
colors.put(threadableStage, i); // Markiere den threadHead colors.put(threadableStage, i); // Markiere den threadHead
for (Connection connection : configuration.getConnections()) { colorAndConnectStages(i, colors, threadableStage);
// Die Connection gehört zu der Stage }
if (connection.getSourcePort().getOwningStage() == threadableStage) { }
Stage targetStage = connection.getTargetPort().getOwningStage();
if (threadableStageJobs.contains(targetStage) /* colors.get(targetStage) == i */) { // Auch auf Farbe prüfen public void colorAndConnectStages(final Integer i, final Map<Stage, Integer> colors, final Stage threadableStage) {
if (connection.getCapacity() != 0) { Set<Stage> threadableStageJobs = configuration.getThreadableStageJobs();
interBoundedThreadPipeFactory.create(connection.getSourcePort(), connection.getTargetPort(), connection.getCapacity()); for (Connection connection : configuration.getConnections()) {
} else { // Die Connection gehört zu der Stage
interUnboundedThreadPipeFactory.create(connection.getSourcePort(), connection.getTargetPort(), 4); if (connection.getSourcePort().getOwningStage() == threadableStage) {
} Stage targetStage = connection.getTargetPort().getOwningStage();
Integer targetColor = new Integer(0);
if (colors.containsKey(targetStage)) {
targetColor = colors.get(targetStage);
}
if (threadableStageJobs.contains(targetStage) && targetColor.compareTo(i) != 0) { // Auch auf Farbe prüfen
if (connection.getCapacity() != 0) {
interBoundedThreadPipeFactory.create(connection.getSourcePort(), connection.getTargetPort(), connection.getCapacity());
} else { } else {
intraThreadPipeFactory.create(connection.getSourcePort(), connection.getTargetPort()); interUnboundedThreadPipeFactory.create(connection.getSourcePort(), connection.getTargetPort(), 4);
colors.put(targetStage, i);
} }
// configuration.getConnections().remove(connection); remove connection to increase performance } else {
if (colors.containsKey(targetStage)) {
throw new IllegalStateException("Crossing threads");
}
intraThreadPipeFactory.create(connection.getSourcePort(), connection.getTargetPort());
colors.put(targetStage, i);
} }
// configuration.getConnections().remove(connection); remove connection to increase performance
colorAndConnectStages(i, colors, targetStage);
} }
i++;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment