DESCRIPTION OF BRACKET NOTATION USED IN COMMENTING DATA QUEUES

A convenient way of commenting data queues as to there shape and size is to use the bracket notation. For example [i0]z(i1)[k] describes a family of data queues of size i0 each queue having i1 tokens time multiplexed onto it and each token having dimensionality k. These terms will be explained in more detail below.

RANGE VARIABLES:
The following range variables and constants are defined for use in the descriptions below.


const int P0=4
const int P1=4
const int Q=4
range i0=0..P0-1
range i1=0..P1-1
range i=0..P-1
range k=0..Q-1
const int P=P0*P1

 


 

PREINDEXING

A data queue comment containing a preindex, (e.g [i]x) describes a family of data queues. The family [i]x has whose range i=0..P-1 is said to have size P and the family is said to range over the variable i. We also say that the size of the family [i]x is i or P interchangably. Using i to describe the size causes no confusion as range variables always range from 0 to their size-1. Using the range variable to describe the size is necessary as it may be imported from a higher level graph or its size may be calculated from a complex expression.

DIMENSIONS:
A data queue comment containing post indecies (e.g x[i][k]) describes a data queue whose tokens have dimensionality described by the post indecies. The data queue x[i][k] is a matrix with P rows and Q columns and whose row dimension ranges over i and column dimension ranges over k. Again as in the case of the preindecies we often say the the matrix has i rows and k columns again interchanging the range variable name with its size.

TIME MULTIPLEXING:
A data queue comment containing a single post index in rounded brackets (e.g. x(i)) indicates a queue on which tokens are time multiplexed. This is used to describe the effect of using function boxes whose decimate rates or interpolate rates are not zero. For example a mux box may take in a family of data queues [i]x and output them onto one time multiplexed queue x(i). This means that for every firing of the mux box that takes in one token on each of the i input queues i tokens are produced on the output queue.

For data queues that are both time multiplexed and have multiple dimensions the time multiplex index always comes first (e.g. x(i)[k]). This is because the natural layout of time multiplexed data in memory is to concatinate the i vectors of size k into one memory block of size i times k where the k dimension is the fast moving dimension.

EXPRESSIONS IN BRACKETS
Frequently the value in brackets used to describe families, dimensions or time multiplexing will not be simple range variables but linear combinations of range variables (e.g k*P+i). The linear combination k*P+i means that the bracketed value ranges over all the values that k*P+i can take given the ranges of k and i. In this example (given the definitions of k, P and i above) the value of k*P+i is a unique integer in the range 0..P*Q-1 for each possible value of i and k. This is not an accident as i has size P. And in general valid expressions of this type must have the property that each range variable is multiplied by a constant whose value is the product of the size of the range variables that follow. For example, using the given range variables and constants k*P + i1*P0 + i0 is also a valid expression to appear within brackets in a data queue comment

EXAMPLE GRAPH: appnotes/identity_transforms