|
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.
|