From: <jhs...@us...> - 2009-04-12 15:50:37
|
Revision: 152 http://flexotask.svn.sourceforge.net/flexotask/?rev=152&view=rev Author: jhspring Date: 2009-04-12 15:50:34 +0000 (Sun, 12 Apr 2009) Log Message: ----------- Initial import. Added Paths: ----------- trunk/flexotask-streaming-examples/.classpath trunk/flexotask-streaming-examples/.project trunk/flexotask-streaming-examples/src/ trunk/flexotask-streaming-examples/src/common/ trunk/flexotask-streaming-examples/src/common/DummyTask.java trunk/flexotask-streaming-examples/src/common/MiddleTask.java trunk/flexotask-streaming-examples/src/common/ParallelizingWorkEstimator.java trunk/flexotask-streaming-examples/src/common/SinkTask.java trunk/flexotask-streaming-examples/src/common/SourceTask.java trunk/flexotask-streaming-examples/src/complex/ trunk/flexotask-streaming-examples/src/complex/ComplexDuoMain.java trunk/flexotask-streaming-examples/src/complex/ComplexUniMain.java trunk/flexotask-streaming-examples/src/complex/flexotaskGraphComplex.ftg trunk/flexotask-streaming-examples/src/fft2/ trunk/flexotask-streaming-examples/src/fft2/CombineDFT.java trunk/flexotask-streaming-examples/src/fft2/FFT2Main.java trunk/flexotask-streaming-examples/src/fft2/FFTReorderSimple.java trunk/flexotask-streaming-examples/src/fft2/FFTTestSource.java trunk/flexotask-streaming-examples/src/fft2/FloatPrinter.java trunk/flexotask-streaming-examples/src/simple/ trunk/flexotask-streaming-examples/src/simple/SimpleDuoMain.java trunk/flexotask-streaming-examples/src/simple/SimpleUniMain.java trunk/flexotask-streaming-examples/src/simple/flexotaskGraphSimple.ftg trunk/flexotask-streaming-examples/src/splitjoindup/ trunk/flexotask-streaming-examples/src/splitjoindup/SplitJoinDupDuoMain.java trunk/flexotask-streaming-examples/src/splitjoindup/SplitJoinDupUniMain.java trunk/flexotask-streaming-examples/src/splitjoindup/flexotaskGraphSJ.ftg trunk/flexotask-streaming-examples/src/splitjoinrr/ trunk/flexotask-streaming-examples/src/splitjoinrr/SplitJoinRRDuoMain.java trunk/flexotask-streaming-examples/src/splitjoinrr/SplitJoinRRUniMain.java trunk/flexotask-streaming-examples/src/splitjoinrr/flexotaskGraphSJ.ftg Added: trunk/flexotask-streaming-examples/.classpath =================================================================== --- trunk/flexotask-streaming-examples/.classpath (rev 0) +++ trunk/flexotask-streaming-examples/.classpath 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="con" path="com.ibm.realtime.flexotask.editor.classpath/1.0"/> + <classpathentry kind="output" path="bin"/> +</classpath> Added: trunk/flexotask-streaming-examples/.project =================================================================== --- trunk/flexotask-streaming-examples/.project (rev 0) +++ trunk/flexotask-streaming-examples/.project 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>flexotask-streaming-examples</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>FlexotaskBuilder.builder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>FlexotaskBuilder.nature</nature> + </natures> +</projectDescription> Added: trunk/flexotask-streaming-examples/src/common/DummyTask.java =================================================================== --- trunk/flexotask-streaming-examples/src/common/DummyTask.java (rev 0) +++ trunk/flexotask-streaming-examples/src/common/DummyTask.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,28 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package common; + +import com.ibm.realtime.flexotask.Flexotask; +import com.ibm.realtime.flexotask.FlexotaskInputPort; +import com.ibm.realtime.flexotask.FlexotaskOutputPort; + +public class DummyTask implements Flexotask { + public void execute() { + } + + public void initialize(FlexotaskInputPort[] arg0, FlexotaskOutputPort[] arg1, Object arg2) { + } +} Added: trunk/flexotask-streaming-examples/src/common/MiddleTask.java =================================================================== --- trunk/flexotask-streaming-examples/src/common/MiddleTask.java (rev 0) +++ trunk/flexotask-streaming-examples/src/common/MiddleTask.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,49 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package common; + +import com.ibm.realtime.flexotask.Flexotask; +import com.ibm.realtime.flexotask.FlexotaskInputPort; +import com.ibm.realtime.flexotask.FlexotaskOutputPort; +import com.ibm.realtime.flexotask.util.ESystem; + +public class MiddleTask implements Flexotask { + private int mult = 1; + private FlexotaskOutputPort output; + private FlexotaskInputPort input; + + public void execute() { + Object o = input.getValue(); + ESystem.out.println("Relaying: " + o); + if (o == null) + throw new Error("Relaying null!"); + output.setValue(o); + } + + public void initialize(FlexotaskInputPort[] arg0, FlexotaskOutputPort[] arg1, Object arg2) { + if ((arg0 == null) || (arg0.length != 1)) + throw new RuntimeException("Expected single intput port is not present!"); + input = arg0[0]; + if ((arg1 == null) || (arg1.length != 1)) + throw new RuntimeException("Expected single output port is not present!"); + output = arg1[0]; + if (arg2 != null) { + if (!(arg2 instanceof Integer)) + throw new RuntimeException("Expected integer value not provided!"); + mult = ((Integer) arg2).intValue(); + } + } +} \ No newline at end of file Added: trunk/flexotask-streaming-examples/src/common/ParallelizingWorkEstimator.java =================================================================== --- trunk/flexotask-streaming-examples/src/common/ParallelizingWorkEstimator.java (rev 0) +++ trunk/flexotask-streaming-examples/src/common/ParallelizingWorkEstimator.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,34 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package common; + +import at.dms.kjc.JPhylum; +import at.dms.kjc.sir.SIRFilter; +import at.dms.kjc.sir.lowering.partition.WorkEstimate.WorkVisitorIntf; + +public class ParallelizingWorkEstimator implements WorkVisitorIntf { + + public long getWork(SIRFilter theFilter) { + // TODO Auto-generated method stub + return 10000; + } + + public long getWork(SIRFilter theFilter, JPhylum node) { + // TODO Auto-generated method stub + return 10000; + } + +} Added: trunk/flexotask-streaming-examples/src/common/SinkTask.java =================================================================== --- trunk/flexotask-streaming-examples/src/common/SinkTask.java (rev 0) +++ trunk/flexotask-streaming-examples/src/common/SinkTask.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,44 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package common; + +import com.ibm.realtime.flexotask.Flexotask; +import com.ibm.realtime.flexotask.FlexotaskInputPort; +import com.ibm.realtime.flexotask.FlexotaskOutputPort; +import com.ibm.realtime.flexotask.util.ESystem; + +public class SinkTask implements Flexotask { + private int mult = 1; + private FlexotaskInputPort input; + + public void execute() { + for (int i = 0; i < mult; i++) { + Integer ival = (Integer) input.getValue(); + ESystem.out.println("Received: " + ival.intValue()); + } + } + + public void initialize(FlexotaskInputPort[] arg0, FlexotaskOutputPort[] arg1, Object arg2) { + if ((arg0 == null) || (arg0.length != 1)) + throw new RuntimeException("Expected single intput port is not present!"); + input = arg0[0]; + if (arg2 != null) { + if (!(arg2 instanceof Integer)) + throw new RuntimeException("Expected integer value not provided!"); + mult = ((Integer) arg2).intValue(); + } + } +} \ No newline at end of file Added: trunk/flexotask-streaming-examples/src/common/SourceTask.java =================================================================== --- trunk/flexotask-streaming-examples/src/common/SourceTask.java (rev 0) +++ trunk/flexotask-streaming-examples/src/common/SourceTask.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,44 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package common; + +import com.ibm.realtime.flexotask.Flexotask; +import com.ibm.realtime.flexotask.FlexotaskInputPort; +import com.ibm.realtime.flexotask.FlexotaskOutputPort; +import com.ibm.realtime.flexotask.util.ESystem; + +public class SourceTask implements Flexotask { + private int mult = 1; + private FlexotaskOutputPort output; + private int count = 0; + + public void execute() { + count++; + ESystem.out.println("Outputting: " + count); + output.setValue(new Integer(count)); + } + + public void initialize(FlexotaskInputPort[] arg0, FlexotaskOutputPort[] arg1, Object arg2) { + if ((arg1 == null) || (arg1.length != 1)) + throw new RuntimeException("Expected single output port is not present!"); + output = arg1[0]; + if (arg2 != null) { + if (!(arg2 instanceof Integer)) + throw new RuntimeException("Expected integer value not provided!"); + mult = ((Integer) arg2).intValue(); + } + } +} \ No newline at end of file Added: trunk/flexotask-streaming-examples/src/complex/ComplexDuoMain.java =================================================================== --- trunk/flexotask-streaming-examples/src/complex/ComplexDuoMain.java (rev 0) +++ trunk/flexotask-streaming-examples/src/complex/ComplexDuoMain.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,52 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package complex; + +import java.io.InputStream; +import java.util.HashMap; + +import com.ibm.realtime.flexotask.FlexotaskGraph; +import com.ibm.realtime.flexotask.scheduling.FlexotaskGlobalSchedulingElement; +import com.ibm.realtime.flexotask.scheduling.FlexotaskSchedulingData; +import com.ibm.realtime.flexotask.template.FlexotaskTemplate; +import com.ibm.realtime.flexotask.timing.streaming.StreamBasedGlobalTimingData; +import com.ibm.realtime.flexotask.tools.FlexotaskXMLParser; + +public class ComplexDuoMain { + private static final int HEAP_SIZE = 10 * 1024 * 1024; + private static final int NUM_CORES = 2; + + public static void main(String[] argv) throws Exception { + + // build the graph + InputStream in = ComplexDuoMain.class.getResourceAsStream("flexotaskGraphComplex.ftg"); + FlexotaskTemplate spec = FlexotaskXMLParser.parseStream(in); + // use work estimator forcing distribution on cores + ((StreamBasedGlobalTimingData) spec.getTimingData()).setWorkEstimator("common.ParallelizingWorkEstimator"); + + FlexotaskGlobalSchedulingElement globalData = new FlexotaskGlobalSchedulingElement(HEAP_SIZE, HEAP_SIZE, NUM_CORES); + FlexotaskSchedulingData systemData = new FlexotaskSchedulingData(spec, HEAP_SIZE/20, globalData); + + try { + FlexotaskGraph graph = spec.validate("StreamScheduler", systemData, new HashMap()); + graph.getRunner().start(); + } + catch (Throwable e) { + e.printStackTrace(); + } + Thread.sleep(10000); + } +} Added: trunk/flexotask-streaming-examples/src/complex/ComplexUniMain.java =================================================================== --- trunk/flexotask-streaming-examples/src/complex/ComplexUniMain.java (rev 0) +++ trunk/flexotask-streaming-examples/src/complex/ComplexUniMain.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,50 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package complex; + +import java.io.InputStream; +import java.util.HashMap; + +import com.ibm.realtime.flexotask.FlexotaskGraph; +import com.ibm.realtime.flexotask.scheduling.FlexotaskGlobalSchedulingElement; +import com.ibm.realtime.flexotask.scheduling.FlexotaskSchedulingData; +import com.ibm.realtime.flexotask.template.FlexotaskTemplate; +import com.ibm.realtime.flexotask.tools.FlexotaskXMLParser; + +public class ComplexUniMain { + private static final int HEAP_SIZE = 10 * 1024 * 1024; + private static final int NUM_CORES = 1; + + public static void main(String[] argv) throws Exception { + + // build the graph + InputStream in = ComplexUniMain.class.getResourceAsStream("flexotaskGraphComplex.ftg"); + FlexotaskTemplate spec = FlexotaskXMLParser.parseStream(in); + + FlexotaskGlobalSchedulingElement globalData = new FlexotaskGlobalSchedulingElement(HEAP_SIZE, HEAP_SIZE, NUM_CORES); + FlexotaskSchedulingData systemData = new FlexotaskSchedulingData(spec, HEAP_SIZE/20, globalData); + + try { + FlexotaskGraph graph = spec.validate("StreamScheduler", systemData, new HashMap()); + Thread.sleep(5000); + graph.getRunner().start(); + } + catch (Throwable e) { + e.printStackTrace(); + } + Thread.sleep(10000); + } +} Added: trunk/flexotask-streaming-examples/src/complex/flexotaskGraphComplex.ftg =================================================================== --- trunk/flexotask-streaming-examples/src/complex/flexotaskGraphComplex.ftg (rev 0) +++ trunk/flexotask-streaming-examples/src/complex/flexotaskGraphComplex.ftg 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,63 @@ +<FlexotaskTemplate> + <TimingProvider kind='streambased' parser='com.ibm.realtime.flexotask.timing.streaming.StreamBasedTimingDataParser' graphics='60 60 37 21' period='1s'/> + <Task id='task1' implementation='common.SourceTask' isolation='strong' graphics='60 60 165 299'> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task20' implementation='common.MiddleTask' isolation='strong' graphics='60 60 678 96'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task18' implementation='common.MiddleTask' isolation='strong' graphics='60 60 523 182'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task17' implementation='common.MiddleTask' isolation='strong' graphics='60 60 523 96'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task7' implementation='common.SinkTask' isolation='strong' graphics='60 60 899 304'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task2' implementation='common.MiddleTask' isolation='strong' graphics='60 60 322 182'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task19' implementation='common.MiddleTask' isolation='strong' graphics='60 60 523 261'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task21' implementation='common.MiddleTask' isolation='strong' graphics='60 60 779 182'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Connection id='task20_task21' source='task20' target='task21' mode='deepclone'> + </Connection> + <Connection id='task18_task21' source='task18' target='task21' mode='deepclone'> + </Connection> + <Connection id='task2_task18' source='task2' target='task18' mode='deepclone'> + </Connection> + <Connection id='task2_task19' source='task2' target='task19' mode='deepclone'> + </Connection> + <Connection id='task19_task21' source='task19' target='task21' mode='deepclone'> + </Connection> + <Connection id='task21_task7' source='task21' target='task7' mode='deepclone'> + </Connection> + <Connection id='task2_task17' source='task2' target='task17' mode='deepclone'> + </Connection> + <Connection id='task1_task2' source='task1' target='task2' mode='deepclone'> + </Connection> + <Connection id='task17_task20' source='task17' target='task20' mode='deepclone'> + </Connection> + <Allocation allow='true'></Allocation> + <Synchronization allow='true'></Synchronization> + <Stable mode='default'> + </Stable> +</FlexotaskTemplate> Added: trunk/flexotask-streaming-examples/src/fft2/CombineDFT.java =================================================================== --- trunk/flexotask-streaming-examples/src/fft2/CombineDFT.java (rev 0) +++ trunk/flexotask-streaming-examples/src/fft2/CombineDFT.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,70 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package fft2; + +import com.ibm.realtime.flexotask.Flexotask; +import com.ibm.realtime.flexotask.FlexotaskInputPort; +import com.ibm.realtime.flexotask.FlexotaskOutputPort; + +public class CombineDFT implements Flexotask { + private FlexotaskInputPort<Float> input; + private FlexotaskOutputPort<Float> output; + private int N; + private float wn_r, wn_i; + private float results[]; + + public void execute() { + int i; + float w_r = 1; + float w_i = 0; + for (i = 0; i < N; i += 2) { + float y0_r = input.peek(i); + float y0_i = input.peek(i+1); + float y1_r = input.peek(N + i); + float y1_i = input.peek(N + i + 1); + + float y1w_r = y1_r * w_r - y1_i * w_i; + float y1w_i = y1_r * w_i + y1_i * w_r; + + results[i] = y0_r + y1w_r; + results[i + 1] = y0_i + y1w_i; + + results[N + i] = y0_r - y1w_r; + results[N + i + 1] = y0_i - y1w_i; + + float w_r_next = w_r * wn_r - w_i * wn_i; + float w_i_next = w_r * wn_i + w_i * wn_r; + w_r = w_r_next; + w_i = w_i_next; + } + + for (i = 0; i < 2 * N; i++) { + input.getValue(); + output.setValue(results[i]); + } + } + + public void initialize(FlexotaskInputPort[] inputPorts, + FlexotaskOutputPort[] outputPorts, Object parameter) { + input = inputPorts[0]; + output = outputPorts[0]; + N = ((Integer) parameter).intValue(); + wn_r = (float) Math.cos(2 * 3.141592654 / ((double) N)); + wn_i = (float) Math.sin(2 * 3.141592654 / ((double) N)); + results = new float[2 * N]; + } + +} Added: trunk/flexotask-streaming-examples/src/fft2/FFT2Main.java =================================================================== --- trunk/flexotask-streaming-examples/src/fft2/FFT2Main.java (rev 0) +++ trunk/flexotask-streaming-examples/src/fft2/FFT2Main.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,145 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package fft2; + +import java.util.HashMap; + +import com.ibm.realtime.flexotask.FlexotaskGraph; +import com.ibm.realtime.flexotask.scheduling.FlexotaskGlobalSchedulingElement; +import com.ibm.realtime.flexotask.scheduling.FlexotaskSchedulingData; +import com.ibm.realtime.flexotask.template.FlexotaskConnectionTemplate; +import com.ibm.realtime.flexotask.template.FlexotaskTaskTemplate; +import com.ibm.realtime.flexotask.template.FlexotaskTemplate; +import com.ibm.realtime.flexotask.timing.streaming.FlexotaskTaskIORate; +import com.ibm.realtime.flexotask.timing.streaming.FlexotaskTaskPortMuxMode; +import com.ibm.realtime.flexotask.timing.streaming.StreamBasedGlobalTimingData; +import com.ibm.realtime.flexotask.timing.streaming.StreamBasedTimingAnnotation; + +import common.ParallelizingWorkEstimator; + +/** + * This example is taken from the Streamit benchmark code available at: + * <p> + * http://www.cag.lcs.mit.edu/streamit/apps/benchmarks/fft/streamit/FFT2.str + * <p> + * and: + * <p> + * http://www.cag.lcs.mit.edu/streamit/results/fft/code/streamit/index.html + * <p> + * The code demonstrates a fast fourier transform. + */ +public class FFT2Main { + private static final int HEAP_SIZE = 10 * 1024 * 1024; + private static final int NUM_CORES = 2; // number of cores + private static final long PERIOD = 1000 * 1000 * 1000; // use 1sec period to 'see' the output + + private static final int N = 64; + + public static void main(String argv[]) throws Exception { + + FlexotaskTemplate spec = new FlexotaskTemplate(); + spec.setTimingData(new StreamBasedGlobalTimingData(PERIOD, ParallelizingWorkEstimator.class.getName())); + + HashMap parameters = new HashMap(); + + // create task: fftTestSource (global splitter) + FlexotaskTaskTemplate fftTestSource = new FlexotaskTaskTemplate(); + fftTestSource.setName("fftTestSource"); + fftTestSource.setImplementationClass(FFTTestSource.class.getName()); + fftTestSource.setOutputPorts(new String[]{Float.class.getName()}, new boolean[]{true}, new String[]{"out"}); + fftTestSource.setTimingData(new StreamBasedTimingAnnotation(null, null, new FlexotaskTaskIORate(N * 2), FlexotaskTaskPortMuxMode.ROUNDROBIN, false)); + spec.getTasks().add(fftTestSource); + parameters.put(fftTestSource.getName(), new Integer(N)); + + // create task: floatPrinter (global joiner) + FlexotaskTaskTemplate floatPrinter = new FlexotaskTaskTemplate(); + floatPrinter.setName("floatPrinter"); + floatPrinter.setImplementationClass(FloatPrinter.class.getName()); + floatPrinter.setInputPorts(new String[]{Float.class.getName()}, new boolean[]{true}, new String[]{"in"}); + floatPrinter.setTimingData(new StreamBasedTimingAnnotation(new FlexotaskTaskIORate(N * 2), null, null, null, false)); + spec.getTasks().add(floatPrinter); + + for (int i = 0; i < 2; i++) { + FlexotaskTaskTemplate previousTask = fftTestSource; + for (int k = 1; k < (N/2); k *= 2) { + // create task: fftTestSource + FlexotaskTaskTemplate fftReorderSimple = new FlexotaskTaskTemplate(); + fftReorderSimple.setName("fftReorderSimple-" + i + "-" + k); + fftReorderSimple.setImplementationClass(FFTReorderSimple.class.getName()); + fftReorderSimple.setInputPorts(new String[]{Float.class.getName()}, new boolean[]{true}, new String[]{"in"}); + fftReorderSimple.setOutputPorts(new String[]{Float.class.getName()}, new boolean[]{true}, new String[]{"out"}); + fftReorderSimple.setTimingData(new StreamBasedTimingAnnotation(new FlexotaskTaskIORate((N / k) * 2), null, new FlexotaskTaskIORate((N / k) * 2), null, false)); + spec.getTasks().add(fftReorderSimple); + parameters.put(fftReorderSimple.getName(), new Integer(N / k)); + + // create connection + FlexotaskConnectionTemplate conn = new FlexotaskConnectionTemplate(); + conn.setName("conn-" + fftReorderSimple.getName()); + conn.setInput(previousTask); + conn.setInputPortToWrite(0); + conn.setOutput(fftReorderSimple); + conn.setOutputPortToRead(0); + spec.getConnections().add(conn); + + previousTask = fftReorderSimple; + } + + for (int j = 2; j <= N; j *= 2) { + // create task: combineDFT + FlexotaskTaskTemplate combineDFT = new FlexotaskTaskTemplate(); + combineDFT.setName("combineDFT-" + i + "-" + j); + combineDFT.setImplementationClass(CombineDFT.class.getName()); + combineDFT.setInputPorts(new String[]{Float.class.getName()}, new boolean[]{true}, new String[]{"in"}); + combineDFT.setOutputPorts(new String[]{Float.class.getName()}, new boolean[]{true}, new String[]{"out"}); + combineDFT.setTimingData(new StreamBasedTimingAnnotation(new FlexotaskTaskIORate(j * 2), null, new FlexotaskTaskIORate(j * 2), null, false)); + spec.getTasks().add(combineDFT); + parameters.put(combineDFT.getName(), new Integer(j)); + + // create connection + FlexotaskConnectionTemplate conn = new FlexotaskConnectionTemplate(); + conn.setName("conn-" + combineDFT.getName()); + conn.setInput(previousTask); + conn.setInputPortToWrite(0); + conn.setOutput(combineDFT); + conn.setOutputPortToRead(0); + spec.getConnections().add(conn); + + previousTask = combineDFT; + } + + // create connection + FlexotaskConnectionTemplate conn = new FlexotaskConnectionTemplate(); + conn.setName("conn-" + previousTask.getName() + i + "-floatPrinter"); + conn.setInput(previousTask); + conn.setInputPortToWrite(0); + conn.setOutput(floatPrinter); + conn.setOutputPortToRead(0); + spec.getConnections().add(conn); + } + + try { + FlexotaskGlobalSchedulingElement globalData = new FlexotaskGlobalSchedulingElement(HEAP_SIZE, HEAP_SIZE, NUM_CORES); + FlexotaskSchedulingData systemData = new FlexotaskSchedulingData(spec, HEAP_SIZE/N, globalData); + FlexotaskGraph graph = spec.validate("StreamScheduler", systemData, parameters); + graph.getRunner().start(); + } + catch (Throwable e) { + e.printStackTrace(); + } + Thread.sleep(10000 * 10000); + + } +} Added: trunk/flexotask-streaming-examples/src/fft2/FFTReorderSimple.java =================================================================== --- trunk/flexotask-streaming-examples/src/fft2/FFTReorderSimple.java (rev 0) +++ trunk/flexotask-streaming-examples/src/fft2/FFTReorderSimple.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,54 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package fft2; + +import com.ibm.realtime.flexotask.Flexotask; +import com.ibm.realtime.flexotask.FlexotaskInputPort; +import com.ibm.realtime.flexotask.FlexotaskOutputPort; + +public class FFTReorderSimple implements Flexotask { + private FlexotaskInputPort<Float> input; + private FlexotaskOutputPort<Float> output; + private int N, totalData; + + public void execute() { + int i; + for (i = 0; i < totalData; i+=4) { + output.setValue(input.peek(i)); + output.setValue(input.peek(i+1)); + } + + for (i = 2; i < totalData; i+=4) { + output.setValue(input.peek(i)); + output.setValue(input.peek(i+1)); + } + + for (i = 0; i < N; i++) { + input.getValue(); + input.getValue(); + } + + } + + public void initialize(FlexotaskInputPort[] inputPorts, + FlexotaskOutputPort[] outputPorts, Object parameter) { + input = inputPorts[0]; + output = outputPorts[0]; + N = ((Integer) parameter).intValue(); + totalData = N * 2; + } + +} Added: trunk/flexotask-streaming-examples/src/fft2/FFTTestSource.java =================================================================== --- trunk/flexotask-streaming-examples/src/fft2/FFTTestSource.java (rev 0) +++ trunk/flexotask-streaming-examples/src/fft2/FFTTestSource.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,41 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package fft2; + +import com.ibm.realtime.flexotask.Flexotask; +import com.ibm.realtime.flexotask.FlexotaskInputPort; +import com.ibm.realtime.flexotask.FlexotaskOutputPort; + +public class FFTTestSource implements Flexotask { + private FlexotaskOutputPort<Float> output; + private int N; + + public void execute() { + output.setValue(0.0f); + output.setValue(0.0f); + output.setValue(1.0f); + output.setValue(0.0f); + for (int i = 0; i < 2 * (N - 2); i++) + output.setValue(0.0f); + } + + public void initialize(FlexotaskInputPort[] inputPorts, + FlexotaskOutputPort[] outputPorts, Object parameter) { + output = outputPorts[0]; + N = ((Integer) parameter).intValue(); + } + +} Added: trunk/flexotask-streaming-examples/src/fft2/FloatPrinter.java =================================================================== --- trunk/flexotask-streaming-examples/src/fft2/FloatPrinter.java (rev 0) +++ trunk/flexotask-streaming-examples/src/fft2/FloatPrinter.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,35 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package fft2; + +import com.ibm.realtime.flexotask.Flexotask; +import com.ibm.realtime.flexotask.FlexotaskInputPort; +import com.ibm.realtime.flexotask.FlexotaskOutputPort; +import com.ibm.realtime.flexotask.util.ESystem; + +public class FloatPrinter implements Flexotask { + private FlexotaskInputPort<Float> input; + + public void execute() { + float value = input.getValue().floatValue(); + //ESystem.err.println("Value: " + value); + } + + public void initialize(FlexotaskInputPort[] inputPorts, + FlexotaskOutputPort[] outputPorts, Object parameter) { + input = inputPorts[0]; + } +} Added: trunk/flexotask-streaming-examples/src/simple/SimpleDuoMain.java =================================================================== --- trunk/flexotask-streaming-examples/src/simple/SimpleDuoMain.java (rev 0) +++ trunk/flexotask-streaming-examples/src/simple/SimpleDuoMain.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,52 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package simple; + +import java.io.InputStream; +import java.util.HashMap; + +import com.ibm.realtime.flexotask.FlexotaskGraph; +import com.ibm.realtime.flexotask.scheduling.FlexotaskGlobalSchedulingElement; +import com.ibm.realtime.flexotask.scheduling.FlexotaskSchedulingData; +import com.ibm.realtime.flexotask.template.FlexotaskTemplate; +import com.ibm.realtime.flexotask.timing.streaming.StreamBasedGlobalTimingData; +import com.ibm.realtime.flexotask.tools.FlexotaskXMLParser; + +public class SimpleDuoMain { + private static final int HEAP_SIZE = 8 * 1024 * 1024; + private static final int NUM_CORES = 2; + + public static void main(String[] argv) throws Exception { + + // build the graph + InputStream in = SimpleUniMain.class.getResourceAsStream("flexotaskGraphSimple.ftg"); + FlexotaskTemplate spec = FlexotaskXMLParser.parseStream(in); + // use work estimator forcing distribution on cores + ((StreamBasedGlobalTimingData) spec.getTimingData()).setWorkEstimator("common.ParallelizingWorkEstimator"); + + FlexotaskGlobalSchedulingElement globalData = new FlexotaskGlobalSchedulingElement(HEAP_SIZE, HEAP_SIZE, NUM_CORES); + FlexotaskSchedulingData systemData = new FlexotaskSchedulingData(spec, HEAP_SIZE/10, globalData); + + try { + FlexotaskGraph graph = spec.validate("StreamScheduler", systemData, new HashMap()); + graph.getRunner().start(); + } + catch (Throwable e) { + e.printStackTrace(); + } + Thread.sleep(10000); + } +} Added: trunk/flexotask-streaming-examples/src/simple/SimpleUniMain.java =================================================================== --- trunk/flexotask-streaming-examples/src/simple/SimpleUniMain.java (rev 0) +++ trunk/flexotask-streaming-examples/src/simple/SimpleUniMain.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,49 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package simple; + +import java.io.InputStream; +import java.util.HashMap; + +import com.ibm.realtime.flexotask.FlexotaskGraph; +import com.ibm.realtime.flexotask.scheduling.FlexotaskGlobalSchedulingElement; +import com.ibm.realtime.flexotask.scheduling.FlexotaskSchedulingData; +import com.ibm.realtime.flexotask.template.FlexotaskTemplate; +import com.ibm.realtime.flexotask.tools.FlexotaskXMLParser; + +public class SimpleUniMain { + private static final int HEAP_SIZE = 8 * 1024 * 1024; + private static final int NUM_CORES = 1; + + public static void main(String[] argv) throws Exception { + + // build the graph + InputStream in = SimpleUniMain.class.getResourceAsStream("flexotaskGraphSimple.ftg"); + FlexotaskTemplate spec = FlexotaskXMLParser.parseStream(in); + + FlexotaskGlobalSchedulingElement globalData = new FlexotaskGlobalSchedulingElement(HEAP_SIZE, HEAP_SIZE, NUM_CORES); + FlexotaskSchedulingData systemData = new FlexotaskSchedulingData(spec, HEAP_SIZE/10, globalData); + + try { + FlexotaskGraph graph = spec.validate("StreamScheduler", systemData, new HashMap()); + graph.getRunner().start(); + } + catch (Throwable e) { + e.printStackTrace(); + } + Thread.sleep(10000); + } +} Added: trunk/flexotask-streaming-examples/src/simple/flexotaskGraphSimple.ftg =================================================================== --- trunk/flexotask-streaming-examples/src/simple/flexotaskGraphSimple.ftg (rev 0) +++ trunk/flexotask-streaming-examples/src/simple/flexotaskGraphSimple.ftg 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,24 @@ +<FlexotaskTemplate> + <TimingProvider kind='streambased' parser='com.ibm.realtime.flexotask.timing.streaming.StreamBasedTimingDataParser' graphics='60 60 457 116' period='1s'/> + <Task id='task1' implementation='common.SourceTask' isolation='strong' graphics='60 60 202 261'> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task3' implementation='common.SinkTask' isolation='strong' graphics='60 60 705 261'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task2' implementation='common.MiddleTask' isolation='strong' graphics='60 60 457 261'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Connection id='task1_task2' source='task1' target='task2' mode='deepclone'> + </Connection> + <Connection id='task2_task3' source='task2' target='task3' mode='deepclone'> + </Connection> + <Allocation allow='true'></Allocation> + <Synchronization allow='true'></Synchronization> + <Stable mode='default'> + </Stable> +</FlexotaskTemplate> Added: trunk/flexotask-streaming-examples/src/splitjoindup/SplitJoinDupDuoMain.java =================================================================== --- trunk/flexotask-streaming-examples/src/splitjoindup/SplitJoinDupDuoMain.java (rev 0) +++ trunk/flexotask-streaming-examples/src/splitjoindup/SplitJoinDupDuoMain.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,54 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package splitjoindup; + +import java.io.InputStream; +import java.util.HashMap; + + +import com.ibm.realtime.flexotask.FlexotaskGraph; +import com.ibm.realtime.flexotask.scheduling.FlexotaskGlobalSchedulingElement; +import com.ibm.realtime.flexotask.scheduling.FlexotaskSchedulingData; +import com.ibm.realtime.flexotask.template.FlexotaskTemplate; +import com.ibm.realtime.flexotask.timing.streaming.StreamBasedGlobalTimingData; +import com.ibm.realtime.flexotask.tools.FlexotaskXMLParser; + +public class SplitJoinDupDuoMain { + private static final int HEAP_SIZE = 8 * 1024 * 1024; + private static final int NUM_CORES = 2; + + public static void main(String[] argv) throws Exception { + + // build the graph + InputStream in = SplitJoinDupUniMain.class.getResourceAsStream("flexotaskGraphSJ.ftg"); + FlexotaskTemplate spec = FlexotaskXMLParser.parseStream(in); + // use work estimator forcing distribution on cores + ((StreamBasedGlobalTimingData) spec.getTimingData()).setWorkEstimator("common.ParallelizingWorkEstimator"); + + FlexotaskGlobalSchedulingElement globalData = new FlexotaskGlobalSchedulingElement(HEAP_SIZE, HEAP_SIZE, NUM_CORES); + FlexotaskSchedulingData systemData = new FlexotaskSchedulingData(spec, HEAP_SIZE/10, globalData); + + try { + FlexotaskGraph graph = spec.validate("StreamScheduler", systemData, new HashMap()); + graph.getRunner().start(); + } + catch (Throwable e) { + e.printStackTrace(); + } + Thread.sleep(10000); + + } +} Added: trunk/flexotask-streaming-examples/src/splitjoindup/SplitJoinDupUniMain.java =================================================================== --- trunk/flexotask-streaming-examples/src/splitjoindup/SplitJoinDupUniMain.java (rev 0) +++ trunk/flexotask-streaming-examples/src/splitjoindup/SplitJoinDupUniMain.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,51 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package splitjoindup; + +import java.io.InputStream; +import java.util.HashMap; + +import com.ibm.realtime.flexotask.FlexotaskGraph; +import com.ibm.realtime.flexotask.scheduling.FlexotaskGlobalSchedulingElement; +import com.ibm.realtime.flexotask.scheduling.FlexotaskSchedulingData; +import com.ibm.realtime.flexotask.template.FlexotaskTemplate; +import com.ibm.realtime.flexotask.template.FlexotaskValidationException; +import com.ibm.realtime.flexotask.tools.FlexotaskXMLParser; + + +public class SplitJoinDupUniMain { + private static final int HEAP_SIZE = 8 * 1024 * 1024; + private static final int NUM_CORES = 1; + + public static void main(String[] argv) throws Exception { + + // build the graph + InputStream in = SplitJoinDupUniMain.class.getResourceAsStream("flexotaskGraphSJ.ftg"); + FlexotaskTemplate spec = FlexotaskXMLParser.parseStream(in); + + FlexotaskGlobalSchedulingElement globalData = new FlexotaskGlobalSchedulingElement(HEAP_SIZE, HEAP_SIZE, NUM_CORES); + FlexotaskSchedulingData systemData = new FlexotaskSchedulingData(spec, HEAP_SIZE/10, globalData); + + try { + FlexotaskGraph graph = spec.validate("StreamScheduler", systemData, new HashMap()); + graph.getRunner().start(); + } + catch (Throwable e) { + e.printStackTrace(); + } + Thread.sleep(10000 * 10000); + } +} Added: trunk/flexotask-streaming-examples/src/splitjoindup/flexotaskGraphSJ.ftg =================================================================== --- trunk/flexotask-streaming-examples/src/splitjoindup/flexotaskGraphSJ.ftg (rev 0) +++ trunk/flexotask-streaming-examples/src/splitjoindup/flexotaskGraphSJ.ftg 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,47 @@ +<FlexotaskTemplate> + <TimingProvider kind='streambased' parser='com.ibm.realtime.flexotask.timing.streaming.StreamBasedTimingDataParser' graphics='60 60 440 13' period='1s'/> + <Task id='task1' implementation='common.SourceTask' isolation='strong' graphics='60 60 80 238'> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task3' implementation='common.MiddleTask' isolation='strong' graphics='60 60 532 233'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task2r' implementation='common.MiddleTask' isolation='strong' graphics='60 60 394 156'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task4' implementation='common.SinkTask' isolation='strong' graphics='60 60 663 233'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task2l' implementation='common.MiddleTask' isolation='strong' graphics='60 60 392 336'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task2' implementation='common.MiddleTask' isolation='strong' graphics='60 60 203 238'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Connection id='task2r_task3' source='task2r' target='task3' mode='deepclone'> + </Connection> + <Connection id='task1_task2' source='task1' target='task2' mode='deepclone'> + </Connection> + <Connection id='task2l_task3' source='task2l' target='task3' mode='deepclone'> + </Connection> + <Connection id='task3_task4' source='task3' target='task4' mode='deepclone'> + </Connection> + <Connection id='task2_task2l' source='task2' target='task2l' mode='deepclone'> + </Connection> + <Connection id='task2_task2r' source='task2' target='task2r' mode='deepclone'> + </Connection> + <Allocation allow='true'></Allocation> + <Synchronization allow='true'></Synchronization> + <Stable mode='default'> + </Stable> +</FlexotaskTemplate> Added: trunk/flexotask-streaming-examples/src/splitjoinrr/SplitJoinRRDuoMain.java =================================================================== --- trunk/flexotask-streaming-examples/src/splitjoinrr/SplitJoinRRDuoMain.java (rev 0) +++ trunk/flexotask-streaming-examples/src/splitjoinrr/SplitJoinRRDuoMain.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,54 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package splitjoinrr; + +import java.io.InputStream; +import java.util.HashMap; + + +import com.ibm.realtime.flexotask.FlexotaskGraph; +import com.ibm.realtime.flexotask.scheduling.FlexotaskGlobalSchedulingElement; +import com.ibm.realtime.flexotask.scheduling.FlexotaskSchedulingData; +import com.ibm.realtime.flexotask.template.FlexotaskTemplate; +import com.ibm.realtime.flexotask.timing.streaming.StreamBasedGlobalTimingData; +import com.ibm.realtime.flexotask.tools.FlexotaskXMLParser; + +public class SplitJoinRRDuoMain { + private static final int HEAP_SIZE = 8 * 1024 * 1024; + private static final int NUM_CORES = 2; + + public static void main(String[] argv) throws Exception { + + // build the graph + InputStream in = SplitJoinRRUniMain.class.getResourceAsStream("flexotaskGraphSJ.ftg"); + FlexotaskTemplate spec = FlexotaskXMLParser.parseStream(in); + // use work estimator forcing distribution on cores + ((StreamBasedGlobalTimingData) spec.getTimingData()).setWorkEstimator("common.ParallelizingWorkEstimator"); + + FlexotaskGlobalSchedulingElement globalData = new FlexotaskGlobalSchedulingElement(HEAP_SIZE, HEAP_SIZE, NUM_CORES); + FlexotaskSchedulingData systemData = new FlexotaskSchedulingData(spec, HEAP_SIZE/10, globalData); + + try { + FlexotaskGraph graph = spec.validate("StreamScheduler", systemData, new HashMap()); + graph.getRunner().start(); + } + catch (Throwable e) { + e.printStackTrace(); + } + Thread.sleep(10000); + + } +} Added: trunk/flexotask-streaming-examples/src/splitjoinrr/SplitJoinRRUniMain.java =================================================================== --- trunk/flexotask-streaming-examples/src/splitjoinrr/SplitJoinRRUniMain.java (rev 0) +++ trunk/flexotask-streaming-examples/src/splitjoinrr/SplitJoinRRUniMain.java 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,51 @@ +/* +* This file is part of Flexible Task Graphs +* (http://sourceforge.net/projects/flexotasks) +* +* Copyright (c) 2006 - 2008 IBM Corporation and Ecole Polytechnique +* Federale de Lausanne (EPFL). +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation +* EPFL +*/ +package splitjoinrr; + +import java.io.InputStream; +import java.util.HashMap; + +import com.ibm.realtime.flexotask.FlexotaskGraph; +import com.ibm.realtime.flexotask.scheduling.FlexotaskGlobalSchedulingElement; +import com.ibm.realtime.flexotask.scheduling.FlexotaskSchedulingData; +import com.ibm.realtime.flexotask.template.FlexotaskTemplate; +import com.ibm.realtime.flexotask.template.FlexotaskValidationException; +import com.ibm.realtime.flexotask.tools.FlexotaskXMLParser; + + +public class SplitJoinRRUniMain { + private static final int HEAP_SIZE = 8 * 1024 * 1024; + private static final int NUM_CORES = 1; + + public static void main(String[] argv) throws Exception { + + // build the graph + InputStream in = SplitJoinRRUniMain.class.getResourceAsStream("flexotaskGraphSJ.ftg"); + FlexotaskTemplate spec = FlexotaskXMLParser.parseStream(in); + + FlexotaskGlobalSchedulingElement globalData = new FlexotaskGlobalSchedulingElement(HEAP_SIZE, HEAP_SIZE, NUM_CORES); + FlexotaskSchedulingData systemData = new FlexotaskSchedulingData(spec, HEAP_SIZE/10, globalData); + + try { + FlexotaskGraph graph = spec.validate("StreamScheduler", systemData, new HashMap()); + graph.getRunner().start(); + } + catch (Throwable e) { + e.printStackTrace(); + } + Thread.sleep(10000); + } +} Added: trunk/flexotask-streaming-examples/src/splitjoinrr/flexotaskGraphSJ.ftg =================================================================== --- trunk/flexotask-streaming-examples/src/splitjoinrr/flexotaskGraphSJ.ftg (rev 0) +++ trunk/flexotask-streaming-examples/src/splitjoinrr/flexotaskGraphSJ.ftg 2009-04-12 15:50:34 UTC (rev 152) @@ -0,0 +1,47 @@ +<FlexotaskTemplate> + <TimingProvider kind='streambased' parser='com.ibm.realtime.flexotask.timing.streaming.StreamBasedTimingDataParser' graphics='60 60 440 13' period='1s'/> + <Task id='task1' implementation='common.SourceTask' isolation='strong' graphics='60 60 91 234'> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task2r' implementation='common.MiddleTask' isolation='strong' graphics='60 60 378 141'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task3' implementation='common.MiddleTask' isolation='strong' graphics='60 60 524 231'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task4' implementation='common.SinkTask' isolation='strong' graphics='60 60 671 231'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task2' implementation='common.MiddleTask' isolation='strong' graphics='60 60 210 234'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Task id='task2l' implementation='common.MiddleTask' isolation='strong' graphics='60 60 387 345'> + <Input id='in0' type='java.lang.Integer' isBuffered='true'/> + <Output id='out0' type='java.lang.Integer' isBuffered='true'/> + <Timing popRate='1' pushRate='1' outputPortMuxMode='roundrobin' isStateless='false' ></Timing> + </Task> + <Connection id='task2r_task3' source='task2r' target='task3' mode='deepclone'> + </Connection> + <Connection id='task2_task2r' source='task2' target='task2r' mode='deepclone'> + </Connection> + <Connection id='task3_task4' source='task3' target='task4' mode='deepclone'> + </Connection> + <Connection id='task2_task2l' source='task2' target='task2l' mode='deepclone'> + </Connection> + <Connection id='task2l_task3' source='task2l' target='task3' mode='deepclone'> + </Connection> + <Connection id='task1_task2' source='task1' target='task2' mode='deepclone'> + </Connection> + <Allocation allow='true'></Allocation> + <Synchronization allow='true'></Synchronization> + <Stable mode='default'> + </Stable> +</FlexotaskTemplate> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |