Skip to content

Formal Workload description

Andre Merzky edited this page Oct 22, 2013 · 1 revision

Introduction

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.

Specification of Workload Description

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 } ;
Clone this wiki locally