-
Notifications
You must be signed in to change notification settings - Fork 1
Formal Workload description
Andre Merzky edited this page Oct 22, 2013
·
1 revision
Workloads are specified using TASKs and RELATIONs among these TASKs. TASKs can have a cardinality > 1, in which case multiple instances of a TASK should be started. The RELATIONs have properties that define the temporal and spatial constraints of the TASKs amongst each other. When a TASK has multiple inputs, the RELATIONs can be defined on so-called ports instead of the TASK itself. This allow for more complex DAG structures.
A formal specification of the workload description follows in the next section.
This spec uses the EBNF notation.
#
# Characters
#
LETTER = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m"
| "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" ;
DIGIT = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "-" ;
SYMBOL = "[" | "]" | "{" | "}" | "(" | ")" | "<" | ">" | "'" | '"' | "="
| "|" | "." | "," | ";" | ":" | "_" | "-" | "+" | "&" | "*" | "%"
| "@" | "!" | "?" | "~" | "`" | "#" | "$" | "^" ;
WHITESPACE = " " ;
#
# Positive and negative numbers
#
NUMBER = DIGIT, { DIGIT } ;
#
# Free text strings
#
STRING = "'", { LETTER | DIGIT | SYMBOL | WHITESPACE }, "'" ;
#
# Unique identifiers for objects
#
IDENTIFIER = LETTER, {LETTER | DIGIT | "_" | "-" } ;
#
# Key-Value pair
#
KEYVAL = IDENTIFIER, "=", STRING ;
#
# Specification of RELATION of TASKs in the time dimension.
#
RELATION_TIME = 'CONCURRENT' # Start TAIL and HEAD concurrently.
| 'SEQUENTIAL_START' # Start TAIL when HEAD is started.
| 'SEQUENTIAL_END' # Start TAIL when HEAD is finished.
| 'NONE'
;
#
# Specification of the RELATION of TASKs in the space dimension.
#
RELATION_SPACE = 'COMMUNICATION' # Communication between TAIL and HEAD.
| 'INPUT-OUTPUT' # Output of TAIL is input of HEAD.
| 'NONE' # No communication beteen TAIL and HEAD.
;
#
# Task Ports and Links
#
PORT_NAME = IDENTIFIER ;
PORT_TYPE = "URI" # Location of file
| "STRING" # Text
| "INTEGER" # e.g. Return value
;
PORT_VALUE = STRING ; # The actual value
INPUT_PORT = { PORT_NAME, PORT_TYPE, PORT_VALUE } ;
OUTPUT_PORT = { PORT_NAME, PORT_TYPE } ;
#
# Tasks
#
TASK_ID = IDENTIFIER ;
CARDINALITY = NUMBER ; # Number of instances. 0 = unspecified.
PROPERTY = KEYVAL ; # EXECUTABLE, ARGUMENTS, etc.
TASK = TASK_ID, CARDINALITY, RELATION_TIME, RELATION_SPACE,
[ { INPUT_PORT } ], [ { OUTPUT_PORT } ], [ { PROPERTY } ] ;
#
# Relationships between tasks
#
TAIL = TASK_ID ; # Tail of the arc (source, from, etc.)
TAIL_PORT = PORT_NAME ;
HEAD = TASK_ID ; # Head of the arc (dest, to, etc.)
HEAD_PORT = PORT_NAME ;
PROPERTY = KEYVAL ; # Weight, distance, cost, etc.
RELATION = TAIL, [ TAIL_PORT ], HEAD, [ HEAD_PORT ],
RELATION_TIME, RELATION_SPACE, [ { PROPERTY } ] ;
#
# Workload description
#
WORKLOAD_DESCRIPTION = { TASK } , { RELATION } ;