Task Oriented Flows
Summary of procedures reviewed in this section:
- Procedure
- Description
- PARALLEL
- The tasks described within the script are to be considered parallel, meaning that they can be executed in any order and also concurrently.
- SERIAL
- The tasks described within the script are to be executed in the specified order.
- TASK
- Describe a task in a SERIAL or PARALLEL context
Keep it Simple
The idea behind the flows using parallel and serial tasks is to allow quick implementation of simple flows. These flows are based on a serial/parallel description of the relationships between tasks. It is the user's responsibility to make sure that such relationships are correct. Although these flows do not use any form of Tool Integration, they still offer visualization, resource management, and parallel execution of tasks. These flows are not the most efficient that can be written, but may be an easy way to begin using FlowTracer.
Here are some examples of task-oriented flows:
SERIAL {
TASK ./configure
TASK make clean
TASK make install
}
PARALLEL {
foreach dir { dir1 dir2 dir3 } {
indir $dir {
TASK make install
}
}
}
SERIAL and PARALLEL can be deeply nested and
are fully compatible with all other FDL directives including S,
J , T, etc, as in this
example:
PARALLEL {
foreach dir { dir1 dir2 dir3 } {
indir $dir {
SERIAL {
TASK make clean
TASK make install
S "PostInstall" {
PARALLEL {
J vw run_script1.csh
T vw run_script2.csh
}
}
}
}
}
}
or in this other example of File:
TaskComplex.tcl:
PARALLEL {
SERIAL {
N "PS1"
TASK cal 2001
TASK cal 2002
TASK cal 2003
TASK cal 2004
}
SERIAL {
N "PS2"
TASK cal 2011
TASK cal 2012
TASK cal 2013
TASK cal 2014
}
}
Adding Resources
Regular FDL procedures can be used to enhance the TASK oriented flows. For example,
the procedure R can be used to specify the resource requirements
for a task (and all subsequent tasks):
SERIAL {
R "License:Synthesis RAM/2000"
TASK doSynthesis ALU
foreach test $listOfTests {
R "License:Simulator RAM/1500"
TASK doSimulation ALU $test
}
}
Using S (setname) and N (name)
In the following flow, you can see the use of S to collect the
tasks in this flow into a set and the use of N to give names to
each task.
S "MainTasks" {
SERIAL {
R "pseudotasks !unix"
N "Builds"
TASK vsr -set "All:vovbuild"
N "Headers"
TASK vsr -cb -f -recompute -set All:include -timeout 30m
N "Libraries"
TASK vsr -cb -f -recompute -set All:libraries -timeout 30m
N "AllTheRest"
TASK vsr -all -nowait
}
}