2 "$schema": "https://json-schema.org/draft/2020-12/schema",
3 "$id": "https://nvidia.com/dw/app.schema.json",
4 "title": "DW Application Descriptor",
5 "description": "The descriptor of a DriveWorks application. The keys in JSON should appear in the same order as the properties are documented in the schema.",
7 "required": [ "name", "logSpec", "subcomponents", "processes" ],
8 "additionalProperties": false,
11 "description": "An optional description of the application",
15 "description": "The unique name of the application",
17 "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$"
20 "description": "The log specification for the application. For details about the possible values and their format see apps/roadrunner-2.0/logger/README.",
24 "description": "The parameters which are exposed as command line arguments of the application. The order is user defined.",
26 "additionalProperties": false,
27 "patternProperties": {
28 "^[a-z][a-zA-Z0-9_]*(\\.[a-z][a-zA-Z0-9_]*)?$": {
29 "description": "The key is the name of the parameter (in camelCase) which must be unique within the collection of parameters in this application. The value describes the parameter itself.",
30 "$ref": "#/$defs/parameter"
35 "description": "The (relative) path of the .sensors.json file",
37 "pattern": "^.+\\.sensors\\.json$"
40 "description": "The subcomponents. The order should be alphabetical.",
42 "additionalProperties": false,
43 "patternProperties": {
44 "^[a-z][a-zA-Z0-9]*$": {
45 "description": "The key is the name of the component instance (in camelCase() which must be unique within the collection of subcomponents in this application. The value describes the component instance itself.",
46 "$ref": "#/$defs/subcomponent"
51 "description": "The connections. The order should be alphabetical based on the source and the connection parameter names.",
54 "$ref": "#/$defs/connection"
57 "namedParameterSets": {
58 "description": "The key is the fully qualified name of the subcomponent (in the form of 1 or multiple 'subcomponentInstanceName' separated by dots). An empty key matches all subcomponents.",
60 "additionalProperties": false,
61 "patternProperties": {
62 "^([a-z][a-zA-Z0-9]*(\\.[a-z][a-zA-Z0-9]*)*)?": {
63 "description": "The names of parameter value sets to be applied to all nodes under the subcomponent as default in the order they are specified (parameter values from later sets overwrite parameter values from previous sets).",
73 "description": "The key is the fully qualified name of the subcomponent (in the form of 1 or multiple 'subcomponentInstanceName' separated by dots). An empty key matches all subcomponents.",
75 "additionalProperties": false,
76 "patternProperties": {
77 "^([a-z][a-zA-Z0-9]*(\\.[a-z][a-zA-Z0-9]*)*)?": {
78 "description": "The names of WCET sets to be applied to all nodes under the subcomponent in the order they are specified (parameWCETslues from later sets overwrite WCETs from previous sets).",
88 "description": "The key is unique name matching the state name from SSM, value object that contains a STM schedule identifier.",
90 "additionalProperties": false,
91 "patternProperties": {
93 "description": "STM schedule identifier.",
95 "required": [ "stmScheduleKey" ],
96 "additionalProperties": false,
100 "pattern": "^[a-z][a-zA-Z0-9_]*"
103 "description": "The flag if this SSM state should be selected by default (only one state should have this set).",
111 "description": "The key is a STM schedule identifier, value is the STM schedule. If none of the processes uses STM this key is optional.",
113 "additionalProperties": false,
114 "patternProperties": {
115 "^[a-z][a-zA-Z0-9_]*": {
116 "description": "The information needed to define the STM schedule.",
118 "required": [ "hyperepochs" ],
119 "additionalProperties": false,
122 "description": "DEPRECATED! The (relative) path of the .yaml file. This YAML is a temporary workaround as the .node-wcets.json is not ready yet and currently all wcets of RR passes are specified by this file (we are going to manage the WCET info along with each node descriptor, by then this entry will be removed). The key is the name of the each pass of a process. The naming rule of the key is to separate the process and pass with a full stop. The value is the corresponding wcet of the pass.",
124 "pattern": "^.+\\.yaml$"
127 "description": "The hyperepochs. The order should be alphabetical.",
129 "additionalProperties": false,
130 "patternProperties": {
131 "^[a-z][a-zA-Z0-9_]*$": {
132 "description": "The key is the name of the hyperepoch (in camelCase) which must be unique within the collection of hyperepochs in this schedule. The value describes the hyperepoch itself.",
134 "required": [ "epochs" ],
135 "additionalProperties": false,
138 "description": "The period length of the hyperepoch (in nanoseconds). If not set the maximum of all contained epochs is used (their 'period' multiplied with their 'frames').",
143 "description": "The epochs. The order should be alphabetical.",
145 "additionalProperties": false,
146 "patternProperties": {
147 "^[a-z][a-zA-Z0-9_]*$": {
148 "description": "The key is the name of the epoch (in camelCase) which must be unique within the hyperepoch. The value describes the epoch itself.",
150 "required": [ "period", "passes" ],
151 "additionalProperties": false,
154 "description": "The period length of the epoch (in nanoseconds)",
159 "description": "The number of times the epoch is scheduled per hyperepoch (default: 1)",
164 "description": "2-Dimension array of passes. Position in array determines the Phase when pipeline execution is enabled. (0 - Unchanged, 1 - Phase1, 2 - Phase2 and so on) If user specifies Phase1 and Phase2 passes, then list of 0-Unchanged should be empty.",
167 "description": "The fully qualified names of passes. Refering to a component implicitly refers to all recursive passes. The order should be alphabetical.",
171 "pattern": "^[a-z][a-zA-Z0-9]*(\\.[a-z][a-zA-Z0-9]*)*(\\.[A-Z][A-Z0-9_]*)?$"
181 "description": "The resource names usable by the hyperepoch with optionally enumerating passes for a specific affinity. The order should be alphabetical.",
183 "additionalProperties": false,
184 "patternProperties": {
185 "^([a-zA-Z][a-zA-Z0-9_]*\\.)*[a-zA-Z][a-zA-Z0-9_:]*$": {
186 "description": "The key is the resource name which may be prefixed by a machine name separate by a dot. The machine name must match the runOn attribute of a process which runs components also part of this hyperepoch. Omitting the machine name is only valid if the process doesn't specify a runOn attribute. The value contains an array of fully qualified passes which should have affinity to this resource. The order of the passes should be alphabetical.",
190 "pattern": "^[a-z][a-zA-Z0-9]*(\\.[a-z][a-zA-Z0-9]*)*(\\.[A-Z][A-Z0-9_]*)?$"
200 "passDependencies": {
201 "description": "The additional inter pass dependencies. The order should be alphabetical.",
203 "additionalProperties": false,
204 "patternProperties": {
205 "^([a-z][a-zA-Z0-9]*\\.)+[A-Z][A-Z0-9_]*": {
206 "description": "The key is the fully qualified name of the pass (in the form of 1 or multiple 'subcomponentInstanceName.' followed by the pass name 'PASS_NAME'). The value contains an array of passes which the key pass depends on.",
210 "pattern": "^([a-z][a-zA-Z0-9]*\\.)+[A-Z][A-Z0-9_]*$"
220 "stmExternalRunnables": {
221 "description": "Additional runnables marked as EXTERN in the STM schedule",
223 "additionalProperties": false,
224 "patternProperties": {
225 "^[A-Z][A-Z0-9_]*": {
226 "description": "The key is the runnable name. The value contains the WCET and optional pass dependencies.",
228 "required": [ "processorTypes", "wcet" ],
229 "additionalProperties": false,
232 "description": "The processor types used by the pass (support is limited to a single processor type atm)",
237 "enum": [ "CPU", "GPU"]
241 "description": "The WCET in nanoseconds",
245 "passDependencies": {
246 "description": "The array of passes the runnable depends on (in the form of 1 or multiple 'subcomponentInstanceName.' followed by the pass name 'PASS_NAME').",
250 "pattern": "^([a-z][a-zA-Z0-9]*\\.)+[A-Z][A-Z0-9_]*$"
259 "description": "The processes. The order is user defined.",
261 "additionalProperties": false,
262 "patternProperties": {
263 "^[a-zA-Z][a-zA-Z0-9_]*$": {
264 "description": "The key is the name of the process (in snake_case) which must be unique within the collection of processes. The value describes the process itself.",
266 "required": [ "executable" ],
267 "additionalProperties": false,
270 "description": "The name of the executable",
275 "description": "The command line arguments passed to the executable",
277 "additionalProperties": false,
278 "patternProperties": {
279 "^[a-zA-Z0-9_-]+$": {
280 "description": "The key is one command line argument. The value is not used (if it is the boolean value true), a second argument (if it is a string), multiple additional arguments (if it is an array of strings).",
300 "description": "The machine identifier the process should run on (default: same machine the application is invoked on)",
302 "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$"
305 "description": "The log specification for this process (if supported by the executable). If not specified, the logSpec specified for the application is used as a default (in that case the application should not use 'file:' with a hard coded path)",
309 "description": "The subcomponent names which should be run in this process (if supported by the executable). This can be either a fully quallified node name or a fully qualified graphlet name which implies that all nodes recursively under that graphlet should be selected.",
321 "description": "DEPRECATED! The (relative) path of the additional .json file. This extraInfo JSON is a temporary workaround as the loader code depends on this, and we need to cleanup this after RR migration. The key is the parameters and configurations which are required by the loader code. The value is an object which corresponds to the various unique attributes of the key.",
323 "pattern": "^.+\\.json$"
329 "required": [ "type" ],
330 "additionalProperties": false,
333 "description": "The C++ type name of the parameter",
338 "description": "The array size if this is an array of parameter values (default: a single-value parameter)",
343 "description": "The default value (default: none)",
344 "type": ["array", "boolean", "number", "string"],
346 "type": ["boolean", "number", "string"]
353 "required": [ "componentType" ],
354 "additionalProperties": false,
357 "description": "The (relative) path of a component ending in .node.json / .graphlet.json. During the transition from GDL the second extension might also be prefixed with 'gdl-'.",
359 "pattern": "^.+\\.(gdl-)?(node|graphlet)\\.json$"
362 "description": "The parameters passed to the subcomponent. The order should be alphabetical.",
364 "additionalProperties": false,
365 "patternProperties": {
366 "^([a-z][a-zA-Z0-9_]*(\\.[a-z][a-zA-Z0-9_]*)?|\\*)$": {
367 "description": "The key is the name of the parameter and must match a parameter declared in the descriptor of the referenced component. The parameter value can either be of primitive type or an homongeneous array of a primitive type. A string value as well as string values in an array are subject to substition. The string can be either the literal value or a placeholder referencing a parameter of this application. The placeholder must have the form of '$paramName' or if the application parameter is an array and only a single value should be passed '$paramName[N]' where N is an index within the array. To pass a literal '$' character it needs to be escaped using another '$' character. As a wildcard the key can be the string '*'. The corresponding value must be '$*'. If it is present all parameters of the application are passed to the component if it has a parameter with a matching name. Additional explicit parameter can be present beside the wildcard and override the application parameter values.",
368 "type": ["array", "boolean", "number", "string"],
370 "type": ["boolean", "number", "string"]
379 "required": [ "src", "dests" ],
380 "additionalProperties": false,
383 "description": "The name of an output port of a subcomponent (in the form 'subcomponentInstanceName.OUTPUT_PORT_NAME') optionally followed by a non-negative array index wrapped in brackets. If an empty string is provided, it means the connection is an INBOUND connection and the src comes outside of the DAG.",
385 "pattern": "^$|^([a-z][a-zA-Z0-9]*\\.)?[A-Z][A-Z0-9_]*(\\[[0-9]+\\])?$"
388 "description": "The collection of ports receiving the data",
390 "additionalProperties": false,
391 "patternProperties": {
392 "^$|^([a-z][a-zA-Z0-9]*\\.)?[A-Z][A-Z0-9_]*(\\[[0-9]+\\])?$": {
393 "description": "The key is the name of an input port of a subcomponent (in the form 'subcomponentInstanceName.INPUT_PORT_NAME') optionally followed by a non-negative array index wrapped in brackets. The value contains parameters specific to this destination port. The order of the parameters should be alphabetical. If an empty string is provided, it means the connection is an OUTBOUND connection and the dest goes outside of the DAG.",
395 "additionalProperties": false,
396 "patternProperties": {
397 "^[a-z][a-zA-Z0-9_-]*$": {
398 "description": "The key is the name of the parameter and the value can either be any primitive type",
399 "type": ["boolean", "number", "string"]
406 "description": "Parameters for multicast connections. The order should be alphabetical.",
408 "additionalProperties": false,
409 "patternProperties": {
410 "^[a-z][a-zA-Z0-9_-]*$": {
411 "description": "The key is the name of the parameter and the value can any primitive type",
412 "type": ["boolean", "number", "string"]