Input format
The visualiser takes an XML
file as input. The input file must follow the below schema.
Schema
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
targetNamespace="https://www.york.ac.uk/physics-engineering-technology/ManycoreSystems"
xmlns="https://www.york.ac.uk/physics-engineering-technology/ManycoreSystems"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<!-- Types -->
<xs:simpleType name="nonZeroUnsignedByte">
<xs:annotation>
<xs:documentation>A number between 1 and 255, both inclusive.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:unsignedByte">
<xs:minInclusive value="1" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="computationStepsRange">
<xs:annotation>
<xs:documentation>Valid range of steps for a Task's computation cost.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:unsignedByte">
<xs:minInclusive value="10" />
<xs:maxInclusive value="200" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="communicationCostRange">
<xs:annotation>
<xs:documentation>Valid range of number of times a packet can be transmitted across an
edge of the task graph.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="10" />
<!-- RegExp pattern for effectively geeting a multiple of 10 -->
<!-- xs:pattern always anchored at start and end: ^[1-9][0-9]*0$ -->
<xs:pattern value="[1-9][0-9]*0" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="direction">
<xs:annotation>
<xs:documentation>Enum values for an router channel's direction.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="North" />
<xs:enumeration value="South" />
<xs:enumeration value="East" />
<xs:enumeration value="West" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="SinkSourceType">
<xs:attribute name="coreID" type="xs:unsignedShort" use="required">
<xs:annotation>
<xs:documentation>The ID of the core (router) connected to this edge router.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="direction" type="direction" use="required">
<xs:annotation>
<xs:documentation>The link used to communicate with the router.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="taskid" type="xs:unsignedShort" use="required">
<xs:annotation>
<xs:documentation>The ID of the task allocated to this edge router.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Structure -->
<xs:element name="ManycoreSystem">
<xs:annotation>
<xs:documentation>Encloses the required information to describe a manycore system at a
given instant.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="TaskGraph" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>GraphML-like representation of the system's task graph.
Each Task is a node and each Edge symbolises interdependencies between
tasks.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Task" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>A node in the system's task graph.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="id" type="xs:unsignedShort" use="required">
<xs:annotation>
<xs:documentation>A unique number identifier assigned to
each task.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="computationCost"
type="computationStepsRange" use="required">
<xs:annotation>
<xs:documentation>The computational cost associated with
this task.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Edge" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>An Edge represents a directional connection
between two nodes in the graph.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="from" type="xs:unsignedShort" use="required">
<xs:annotation>
<xs:documentation>The unique numerical identifier of the
starting node (Task) this Edge departs from.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="to" type="xs:unsignedShort" use="required">
<xs:annotation>
<xs:documentation>The unique numerical identifier of the
destination node (Task) this Edge arrives to.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="communicationCost"
type="communicationCostRange"
use="required">
<xs:annotation>
<xs:documentation>The number of times packets will be
transmitted across this Edge.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Cores" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>The Cores element is a container for each core in the
system.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Core" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>A physical core.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Router" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>The Router associated with this
physical core.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:anyAttribute processContents="lax" />
</xs:complexType>
</xs:element>
<xs:element name="Channels" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>The Channels element wraps each
Channel associated with this core's router.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Channel" minOccurs="4"
maxOccurs="4">
<xs:annotation>
<xs:documentation>A specific Channel. A
Core might have a maximum of 4
channels, one for each possible
communication direction.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="direction"
type="direction"
use="required">
<xs:annotation>
<xs:documentation>The direction
of this channel.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="actualComCost"
type="xs:unsignedLong"
use="required">
<xs:annotation>
<xs:documentation>The actual
communication cost.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="bandwidth"
type="xs:unsignedLong"
use="required">
<xs:annotation>
<xs:documentation>The bandwidth
of this channel.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:unsignedShort" use="required">
<xs:annotation>
<xs:documentation>A unique number identifier assigned to
each Core.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="allocatedTask" type="xs:unsignedShort"
use="optional">
<xs:annotation>
<xs:documentation>The Task currently being processed by
the Core.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Borders" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>The Borders element is a container for each Sink/Source
(border or edge routers) in the system.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Source" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:annotation>
<xs:documentation>A source.</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="SinkSourceType">
<xs:attribute name="actualComCost"
type="xs:unsignedLong"
use="optional">
<xs:annotation>
<xs:documentation>The actual communication cost.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Sink" minOccurs="0" maxOccurs="unbounded"
type="SinkSourceType">
<xs:annotation>
<xs:documentation>A sink.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="rows" type="nonZeroUnsignedByte" use="required">
<xs:annotation>
<xs:documentation>The manycore system's number of rows.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="columns" type="nonZeroUnsignedByte" use="required">
<xs:annotation>
<xs:documentation>The manycore system's number of columns.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="routingAlgo" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>The routing algorithm currently in use by the system.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>