From dfb67ee99355daca5914f43c346fbeb3d45501ef Mon Sep 17 00:00:00 2001 From: Christophe Favergeon Date: Wed, 1 Mar 2023 08:42:48 +0100 Subject: [PATCH] Started to rework the documentation for the ComputeGraph examples. --- ComputeGraph/README.md | 269 +------- ComputeGraph/documentation/Options.md | 221 ++++++- ComputeGraph/examples/README.md | 37 ++ ComputeGraph/examples/example1/README.md | 577 +++++++----------- .../examples/example1/docassets/graph1.PNG | Bin 16721 -> 5253 bytes .../examples/example1/generated/scheduler.cpp | 7 +- .../examples/example1/generated/scheduler.h | 3 +- ComputeGraph/examples/example1/graph.py | 27 +- ComputeGraph/examples/example1/main.cpp | 2 +- ComputeGraph/examples/example1/test.dot | 8 +- ComputeGraph/examples/example1/test.pdf | Bin 21247 -> 21040 bytes ComputeGraph/examples/example10/README.md | 38 +- ComputeGraph/examples/example10/graph.py | 2 +- ComputeGraph/examples/example2/README.md | 71 ++- ComputeGraph/examples/example3/README.md | 95 ++- ComputeGraph/examples/example3/debug.py | 20 + .../examples/example3/docassets/sine.png | Bin 0 -> 76071 bytes ComputeGraph/examples/example4/README.md | 31 +- ComputeGraph/examples/example4/debug.py | 20 - .../examples/example4/docassets/graph4.png | Bin 0 -> 24505 bytes .../examples/example4/docassets/sine.png | Bin 0 -> 51039 bytes ComputeGraph/examples/example5/README.md | 25 + .../examples/example5/docassets/graph5.png | Bin 0 -> 10923 bytes .../examples/example5/docassets/mfcc.png | Bin 0 -> 114518 bytes ComputeGraph/examples/example6/README.md | 15 + .../examples/example6/docassets/graph6.png | Bin 0 -> 7608 bytes ComputeGraph/examples/example7/PythonTest.mo | 2 +- ComputeGraph/examples/example7/README.md | 62 ++ .../examples/example7/docassets/graph7.png | Bin 0 -> 5124 bytes .../examples/example7/docassets/modelica.png | Bin 0 -> 32301 bytes .../example7/docassets/waveoutput.png | Bin 0 -> 59362 bytes ComputeGraph/examples/example7/graph.py | 9 +- ComputeGraph/examples/example7/output.wav | Bin 0 -> 32244 bytes ComputeGraph/examples/example8/README.md | 54 ++ .../examples/example8/docassets/graph8.png | Bin 0 -> 24705 bytes ComputeGraph/examples/example9/README.md | 7 + .../examples/example9/docassets/graph9.png | Bin 0 -> 20872 bytes ComputeGraph/examples/simple/README.md | 78 ++- 38 files changed, 924 insertions(+), 756 deletions(-) create mode 100644 ComputeGraph/examples/README.md create mode 100644 ComputeGraph/examples/example3/debug.py create mode 100644 ComputeGraph/examples/example3/docassets/sine.png delete mode 100644 ComputeGraph/examples/example4/debug.py create mode 100644 ComputeGraph/examples/example4/docassets/graph4.png create mode 100644 ComputeGraph/examples/example4/docassets/sine.png create mode 100644 ComputeGraph/examples/example5/README.md create mode 100644 ComputeGraph/examples/example5/docassets/graph5.png create mode 100644 ComputeGraph/examples/example5/docassets/mfcc.png create mode 100644 ComputeGraph/examples/example6/README.md create mode 100644 ComputeGraph/examples/example6/docassets/graph6.png create mode 100644 ComputeGraph/examples/example7/README.md create mode 100644 ComputeGraph/examples/example7/docassets/graph7.png create mode 100644 ComputeGraph/examples/example7/docassets/modelica.png create mode 100644 ComputeGraph/examples/example7/docassets/waveoutput.png create mode 100644 ComputeGraph/examples/example7/output.wav create mode 100644 ComputeGraph/examples/example8/README.md create mode 100644 ComputeGraph/examples/example8/docassets/graph8.png create mode 100644 ComputeGraph/examples/example9/README.md create mode 100644 ComputeGraph/examples/example9/docassets/graph9.png diff --git a/ComputeGraph/README.md b/ComputeGraph/README.md index 8e4c25a6..083c9e21 100644 --- a/ComputeGraph/README.md +++ b/ComputeGraph/README.md @@ -20,7 +20,7 @@ The FIFOs lengths are represented on each edge of the graph : 11 samples for the In blue, the amount of samples generated or consumed by a node each time it is called. -graph1 +graph1 When the processing is applied to a stream of samples then the problem to solve is : @@ -61,7 +61,7 @@ The tools will generate a schedule and the FIFOs. Even if you don't use this at Let's look at an (artificial) example: -graph1 +graph1 Without a tool, the user would probably try to modify the number of samples so that the number of sample produced is equal to the number of samples consumed. With the CG Tools we know that such a graph can be scheduled and that the FIFO sizes need to be 11 and 5. @@ -128,11 +128,11 @@ If you have declared new nodes in `graph.py` then you'll need to provide an impl More details and explanations can be found in the documentation for the examples. The first example is a deep dive giving all the details about the Python and C++ sides of the tool: -* [Example 1 : how to describe a simple graph](documentation/examples/example1/README.md) -* [Example 2 : More complex example with delay and CMSIS-DSP](documentation/examples/example2/README.md) -* [Example 3 : Working example with CMSIS-DSP and FFT](documentation/examples/example3/README.md) -* [Example 4 : Same as example 3 but with the CMSIS-DSP Python wrapper](documentation/examples/example4/README.md) -* [Example 10 : The asynchronous mode](documentation/examples/example10/README.md) +* [Example 1 : how to describe a simple graph](examples/example1/README.md) +* [Example 2 : More complex example with delay and CMSIS-DSP](examples/example2/README.md) +* [Example 3 : Working example with CMSIS-DSP and FFT](examples/example3/README.md) +* [Example 4 : Same as example 3 but with the CMSIS-DSP Python wrapper](examples/example4/README.md) +* [Example 10 : The asynchronous mode](examples/example10/README.md) Examples 5 and 6 are showing how to use the CMSIS-DSP MFCC with a synchronous data flow. @@ -146,262 +146,11 @@ There is a [FAQ](FAQ.md) document. ## Options -Several options can be used in the Python to control the schedule generation. Some options are used by the scheduling algorithm and other options are used by the code generators or graphviz generator: - -### Options for the graph - -Those options needs to be used on the graph object created with `Graph()`. - -For instance : - -```python -g = Graph() -g.defaultFIFOClass = "FIFO" -``` - -#### defaultFIFOClass (default = "FIFO") - -Class used for FIFO by default. Can also be customized for each connection (`connect` of `connectWithDelay` call) with something like: - -`g.connect(src.o,b.i,fifoClass="FIFOClassNameForThisConnection")` - -#### duplicateNodeClassName(default="Duplicate") - -Prefix used to generate the duplicate node classes like `Duplicate2`, `Duplicate3` ... - -### Options for the scheduling - -Those options needs to be used on a configuration objects passed as argument of the scheduling function. For instance: - -```python -conf = Configuration() -conf.debugLimit = 10 -sched = g.computeSchedule(config = conf) -``` - -Note that the configuration object also contain options for the code generators. - -#### memoryOptimization (default = False) - -When the amount of data written to a FIFO and read from the FIFO is the same, the FIFO is just an array. In this case, depending on the scheduling, the memory used by different arrays may be reused if those arrays are not needed at the same time. - -This option is enabling an analysis to optimize the memory usage by merging some buffers when it is possible. - -#### sinkPriority (default = True) - -Try to prioritize the scheduling of the sinks to minimize the latency between sources and sinks. - -When this option is enabled, the tool may not be able to find a schedule in all cases. If it can't find a schedule, it will raise a `DeadLock` exception. - -#### displayFIFOSizes (default = False) - -During computation of the schedule, the evolution of the FIFO sizes is generated on `stdout`. - -#### dumpSchedule (default = False) - -During computation of the schedule, the human readable schedule is generated on `stdout`. - -### Options for the code generator - -#### debugLimit (default = 0) - -When `debugLimit` is > 0, the number of iterations of the scheduling is limited to `debugLimit`. Otherwise, the scheduling is running forever or until an error has occured. - -#### dumpFIFO (default = False) - -When true, generate some code to dump the FIFO content at runtime. Only useful for debug. - -In C++ code generation, it is only available when using the mode `codeArray == False`. - -When this mode is enabled, the first line of the scheduler file is : - -`#define DEBUGSCHED 1` - -and it also enable some debug code in `GenericNodes.h` - -#### schedName (default = "scheduler") - -Name of the scheduler function used in the generated code. - -#### prefix (default = "") - -Prefix to add before the FIFO buffer definitions. Those buffers are not static and are global. If you want to use several schedulers in your code, the buffer names used by each should be different. - -Another possibility would be to make the buffer static by redefining the macro `CG_BEFORE_BUFFER` - -#### Options for C Code Generation only - -##### cOptionalArgs (default = "") - -Optional arguments to pass to the C API of the scheduler function - -It can either use a `string` or a list of `string` where an element is an argument of the function (and should be valid `C`). - -##### codeArray (default = True) - -When true, the scheduling is defined as an array. Otherwise, a list of function calls is generated. - -A list of function call may be easier to read but if the schedule is long, it is not good for code size. In that case, it is better to encode the schedule as an array rather than a list of functions. - -When `codeArray` is True, the option `switchCase`can also be used. - -##### switchCase (default = True) - -`codeArray` must be true or this option is ignored. - -When the schedule is encoded as an array, it can either be an array of function pointers (`switchCase` false) or an array of indexes for a state machine (`switchCase` true) - -##### eventRecorder (default = False) - -Enable the generation of `CMSIS EventRecorder` intrumentation in the code. The CMSIS-DSP Pack is providing definition of 3 events: - -* Schedule iteration -* Node execution -* Error - -##### customCName (default = "custom.h") - -Name of custom header in generated C code. If you use several scheduler, you may want to use different headers for each one. - -##### postCustomCName (default = "") - -Name of custom header in generated C code coming after all of the other includes. - -##### genericNodeCName (default = "GenericNodes.h") - -Name of GenericNodes header in generated C code. If you use several scheduler, you may want to use different headers for each one. - -##### appNodesCName (default = "AppNodes.h") - -Name of AppNodes header in generated C code. If you use several scheduler, you may want to use different headers for each one. - -##### schedulerCFileName (default = "scheduler") - -Name of scheduler cpp and header in generated C code. If you use several scheduler, you may want to use different headers for each one. - -If the option is set to `xxx`, the names generated will be `xxx.cpp` and `xxx.h` - -##### CAPI (default = True) - -By default, the scheduler function is callable from C. When false, it is a standard C++ API. - -##### CMSISDSP (default = True) - -If you don't use any of the datatypes or functions of the CMSIS-DSP, you don't need to include the `arm_math.h` in the scheduler file. This option can thus be set to `False`. - -##### asynchronous (default = False) - -When true, the scheduling is for a dynamic / asynchronous flow. A node may not always produce or consume the same amount of data. As consequence, a scheduling can fail. Each node needs to implement a `prepareForRunning` function to identify and recover from FIFO underflows and overflows. - -A synchronous schedule is used as start and should describe the average case. - -This implies `codeArray` and `switchCase`. This disables `memoryOptimizations`. - -Synchronous FIFOs that are just buffers will be considered as FIFOs in asynchronous mode. - -More info are available in the documentation for [this mode](Dynamic.md). - -##### FIFOIncrease (default 0) - -In case of dynamic / asynchronous scheduling, the FIFOs may need to be bigger than what is computed assuming a static / synchronous scheduling. This option is used to increase the FIFO size. It represents a percent increase. - -For instance, a value of 10 means the FIFO will have their size updated from `oldSize` to `1.1 * oldSize` which is ` (1 + 10%)* oldSize` - -If the value is a `float` instead of an `int` it will be used as is. For instance, `1.1` would increase the size by `1.1` and be equivalent to the setting `10` (for 10 percent). - -##### asyncDefaultSkip (default True) - -Behavior of a pure function (like CMSIS-DSP) in asynchronous mode. When `True`, the execution is skipped if the function can't be executed. If `False`, an error is raised. - -If another error recovery is needed, the function must be packaged into a C++ class to implement a `prepareForRun` function. - -#### Options for Python code generation only - -##### pyOptionalArgs (default = "") - -Optional arguments to pass to the Python version of the scheduler function - -##### customPythonName (default = "custom") - -Name of custom header in generated Python code. If you use several scheduler, you may want to use different headers for each one. - -##### appNodesPythonName (default = "appnodes") - -Name of AppNodes header in generated Python code. If you use several scheduler, you may want to use different headers for each one. - -##### schedulerPythonFileName (default = "sched") - -Name of scheduler file in generated Python code. If you use several scheduler, you may want to use different headers for each one. - -If the option is set to `xxx`, the name generated will be `xxx.py` - -### Options for the graphviz generator - -#### horizontal (default = True) - -Horizontal or vertical layout for the graph. - -#### displayFIFOBuf (default = False) - -By default, the graph is displaying the FIFO sizes. If you want to know with FIFO variable is used in the code, you can set this option to true and the graph will display the FIFO variable names. - -### Options for connections - -It is now possible to write something like: - -```python -g.connect(src.o,b.i,fifoClass="FIFOSource") -``` - -The `fifoClass` argument allows to choose a specific FIFO class in the generated C++ or Python. - -Only the `FIFO` class is provided by default. Any new implementation must inherit from `FIFObase` - -There is also an option to set the scaling factor when used in asynchronous mode: - -```python -g.connect(odd.o,debug.i,fifoScale=3.0) -``` - -When this option is set, it will be used (instead of the global setting). This must be a float. +There is a document describing the [list](documentation/Options.md) of available options ## How to build the examples -In folder `ComputeGraph/example/build`, type the `cmake` command: - -```bash -cmake -DHOST=YES \ - -DDOT="path to dot.EXE" \ - -DCMSISCORE="path to cmsis core include directory" \ - -G "Unix Makefiles" .. -``` - -The Graphviz dot tool is requiring a recent version supporting the HTML-like labels. - -If cmake is successful, you can type `make` to build the examples. It will also build CMSIS-DSP for the host. - -If you don't have graphviz, the option -DDOT can be removed. - -If for some reason it does not work, you can go into an example folder (for instance example1), and type the commands: - -```bash -python graph.py -dot -Tpdf -o test.pdf test.dot -``` - -It will generate the C++ files for the schedule and a pdf representation of the graph. - -Note that the Python code is relying on the CMSIS-DSP PythonWrapper which is now also containing the Python scripts for the Synchronous Data Flow. - -For `example3` which is using an input file, `cmake` should have copied the input test pattern `input_example3.txt` inside the build folder. The output file will also be generated in the build folder. - -`example4` is like `example3` but in pure Python and using the CMSIS-DSP Python wrapper (which must already be installed before trying the example). To run a Python example, you need to go into an example folder and type: - -```bash -python main.py -``` - -`example7` is communicating with `OpenModelica`. You need to install the VHTModelica blocks from the [VHT-SystemModeling](https://github.com/ARM-software/VHT-SystemModeling) project on our GitHub +There is a document explaining [how to build the examples](examples/README.md). ## Limitations diff --git a/ComputeGraph/documentation/Options.md b/ComputeGraph/documentation/Options.md index 04893bcb..54a4383c 100644 --- a/ComputeGraph/documentation/Options.md +++ b/ComputeGraph/documentation/Options.md @@ -1 +1,220 @@ -Options +## Options + +Several options can be used in the Python to control the schedule generation. Some options are used by the scheduling algorithm and other options are used by the code generators or graphviz generator: + +### Options for the graph + +Those options needs to be used on the graph object created with `Graph()`. + +For instance : + +```python +g = Graph() +g.defaultFIFOClass = "FIFO" +``` + +#### defaultFIFOClass (default = "FIFO") + +Class used for FIFO by default. Can also be customized for each connection (`connect` of `connectWithDelay` call) with something like: + +`g.connect(src.o,b.i,fifoClass="FIFOClassNameForThisConnection")` + +#### duplicateNodeClassName(default="Duplicate") + +Prefix used to generate the duplicate node classes like `Duplicate2`, `Duplicate3` ... + +### Options for the scheduling + +Those options needs to be used on a configuration objects passed as argument of the scheduling function. For instance: + +```python +conf = Configuration() +conf.debugLimit = 10 +sched = g.computeSchedule(config = conf) +``` + +Note that the configuration object also contain options for the code generators. + +#### memoryOptimization (default = False) + +When the amount of data written to a FIFO and read from the FIFO is the same, the FIFO is just an array. In this case, depending on the scheduling, the memory used by different arrays may be reused if those arrays are not needed at the same time. + +This option is enabling an analysis to optimize the memory usage by merging some buffers when it is possible. + +#### sinkPriority (default = True) + +Try to prioritize the scheduling of the sinks to minimize the latency between sources and sinks. + +When this option is enabled, the tool may not be able to find a schedule in all cases. If it can't find a schedule, it will raise a `DeadLock` exception. + +#### displayFIFOSizes (default = False) + +During computation of the schedule, the evolution of the FIFO sizes is generated on `stdout`. + +#### dumpSchedule (default = False) + +During computation of the schedule, the human readable schedule is generated on `stdout`. + +### Options for the code generator + +#### debugLimit (default = 0) + +When `debugLimit` is > 0, the number of iterations of the scheduling is limited to `debugLimit`. Otherwise, the scheduling is running forever or until an error has occured. + +#### dumpFIFO (default = False) + +When true, generate some code to dump the FIFO content at runtime. Only useful for debug. + +In C++ code generation, it is only available when using the mode `codeArray == False`. + +When this mode is enabled, the first line of the scheduler file is : + +`#define DEBUGSCHED 1` + +and it also enable some debug code in `GenericNodes.h` + +#### schedName (default = "scheduler") + +Name of the scheduler function used in the generated code. + +#### prefix (default = "") + +Prefix to add before the FIFO buffer definitions. Those buffers are not static and are global. If you want to use several schedulers in your code, the buffer names used by each should be different. + +Another possibility would be to make the buffer static by redefining the macro `CG_BEFORE_BUFFER` + +#### Options for C Code Generation only + +##### cOptionalArgs (default = "") + +Optional arguments to pass to the C API of the scheduler function + +It can either use a `string` or a list of `string` where an element is an argument of the function (and should be valid `C`). + +##### codeArray (default = True) + +When true, the scheduling is defined as an array. Otherwise, a list of function calls is generated. + +A list of function call may be easier to read but if the schedule is long, it is not good for code size. In that case, it is better to encode the schedule as an array rather than a list of functions. + +When `codeArray` is True, the option `switchCase`can also be used. + +##### switchCase (default = True) + +`codeArray` must be true or this option is ignored. + +When the schedule is encoded as an array, it can either be an array of function pointers (`switchCase` false) or an array of indexes for a state machine (`switchCase` true) + +##### eventRecorder (default = False) + +Enable the generation of `CMSIS EventRecorder` intrumentation in the code. The CMSIS-DSP Pack is providing definition of 3 events: + +* Schedule iteration +* Node execution +* Error + +##### customCName (default = "custom.h") + +Name of custom header in generated C code. If you use several scheduler, you may want to use different headers for each one. + +##### postCustomCName (default = "") + +Name of custom header in generated C code coming after all of the other includes. + +##### genericNodeCName (default = "GenericNodes.h") + +Name of GenericNodes header in generated C code. If you use several scheduler, you may want to use different headers for each one. + +##### appNodesCName (default = "AppNodes.h") + +Name of AppNodes header in generated C code. If you use several scheduler, you may want to use different headers for each one. + +##### schedulerCFileName (default = "scheduler") + +Name of scheduler cpp and header in generated C code. If you use several scheduler, you may want to use different headers for each one. + +If the option is set to `xxx`, the names generated will be `xxx.cpp` and `xxx.h` + +##### CAPI (default = True) + +By default, the scheduler function is callable from C. When false, it is a standard C++ API. + +##### CMSISDSP (default = True) + +If you don't use any of the datatypes or functions of the CMSIS-DSP, you don't need to include the `arm_math.h` in the scheduler file. This option can thus be set to `False`. + +##### asynchronous (default = False) + +When true, the scheduling is for a dynamic / asynchronous flow. A node may not always produce or consume the same amount of data. As consequence, a scheduling can fail. Each node needs to implement a `prepareForRunning` function to identify and recover from FIFO underflows and overflows. + +A synchronous schedule is used as start and should describe the average case. + +This implies `codeArray` and `switchCase`. This disables `memoryOptimizations`. + +Synchronous FIFOs that are just buffers will be considered as FIFOs in asynchronous mode. + +More info are available in the documentation for [this mode](Dynamic.md). + +##### FIFOIncrease (default 0) + +In case of dynamic / asynchronous scheduling, the FIFOs may need to be bigger than what is computed assuming a static / synchronous scheduling. This option is used to increase the FIFO size. It represents a percent increase. + +For instance, a value of 10 means the FIFO will have their size updated from `oldSize` to `1.1 * oldSize` which is ` (1 + 10%)* oldSize` + +If the value is a `float` instead of an `int` it will be used as is. For instance, `1.1` would increase the size by `1.1` and be equivalent to the setting `10` (for 10 percent). + +##### asyncDefaultSkip (default True) + +Behavior of a pure function (like CMSIS-DSP) in asynchronous mode. When `True`, the execution is skipped if the function can't be executed. If `False`, an error is raised. + +If another error recovery is needed, the function must be packaged into a C++ class to implement a `prepareForRun` function. + +#### Options for Python code generation only + +##### pyOptionalArgs (default = "") + +Optional arguments to pass to the Python version of the scheduler function + +##### customPythonName (default = "custom") + +Name of custom header in generated Python code. If you use several scheduler, you may want to use different headers for each one. + +##### appNodesPythonName (default = "appnodes") + +Name of AppNodes header in generated Python code. If you use several scheduler, you may want to use different headers for each one. + +##### schedulerPythonFileName (default = "sched") + +Name of scheduler file in generated Python code. If you use several scheduler, you may want to use different headers for each one. + +If the option is set to `xxx`, the name generated will be `xxx.py` + +### Options for the graphviz generator + +#### horizontal (default = True) + +Horizontal or vertical layout for the graph. + +#### displayFIFOBuf (default = False) + +By default, the graph is displaying the FIFO sizes. If you want to know with FIFO variable is used in the code, you can set this option to true and the graph will display the FIFO variable names. + +### Options for connections + +It is now possible to write something like: + +```python +g.connect(src.o,b.i,fifoClass="FIFOSource") +``` + +The `fifoClass` argument allows to choose a specific FIFO class in the generated C++ or Python. + +Only the `FIFO` class is provided by default. Any new implementation must inherit from `FIFObase` + +There is also an option to set the scaling factor when used in asynchronous mode: + +```python +g.connect(odd.o,debug.i,fifoScale=3.0) +``` + +When this option is set, it will be used (instead of the global setting). This must be a float. diff --git a/ComputeGraph/examples/README.md b/ComputeGraph/examples/README.md new file mode 100644 index 00000000..e85057fa --- /dev/null +++ b/ComputeGraph/examples/README.md @@ -0,0 +1,37 @@ +## How to build the examples + +In folder `ComputeGraph/example/build`, type the `cmake` command: + +```bash +cmake -DHOST=YES \ + -DDOT="path to dot.EXE" \ + -DCMSISCORE="path to cmsis core include directory" \ + -G "Unix Makefiles" .. +``` + +The Graphviz dot tool is requiring a recent version supporting the HTML-like labels. + +If cmake is successful, you can type `make` to build the examples. It will also build CMSIS-DSP for the host. + +If you don't have graphviz, the option -DDOT can be removed. + +If for some reason it does not work, you can go into an example folder (for instance example1), and type the commands: + +```bash +python graph.py +dot -Tpdf -o test.pdf test.dot +``` + +It will generate the C++ files for the schedule and a pdf representation of the graph. + +Note that the Python code is relying on the CMSIS-DSP PythonWrapper which is now also containing the Python scripts for the Synchronous Data Flow. + +For `example3` which is using an input file, `cmake` should have copied the input test pattern `input_example3.txt` inside the build folder. The output file will also be generated in the build folder. + +`example4` is like `example3` but in pure Python and using the CMSIS-DSP Python wrapper (which must already be installed before trying the example). To run a Python example, you need to go into an example folder and type: + +```bash +python main.py +``` + +`example7` is communicating with `OpenModelica`. You need to install the VHTModelica blocks from the [VHT-SystemModeling](https://github.com/ARM-software/VHT-SystemModeling) project on our GitHub \ No newline at end of file diff --git a/ComputeGraph/examples/example1/README.md b/ComputeGraph/examples/example1/README.md index cf3443a6..91aa5047 100644 --- a/ComputeGraph/examples/example1/README.md +++ b/ComputeGraph/examples/example1/README.md @@ -1,375 +1,65 @@ # Example 1 -In this example we will see how to describe the following graph: +Please refer to the [simple example](../simple/README.md) to have an overview of how to define a graph and it nodes and how to generate the C++ code for the static scheduler. This document is only explaining additional details: -graph1 +* How to define new arguments for the C implementation of the nodes +* How to define new arguments for the C API of the scheduler function +* More detailed description of the generated C++ scheduler -The framework is coming with some default blocks. But for this example, we will create new blocks. The blocks that you to create need must be described with a simple Python class and a corresponding simple C++ class. +The graph is is nearly the same as the one in the [simple example](../simple/README.md) but the processing node is just generating 5 samples in this example: -## The steps +graph1 -It looks complex because there is a lot of information but the process is always the same: +Contrary to the [simple example](../simple/README.md) , there is only one Python script `graph.py` and it is containing everything : nodes, graph description and C++ code generation. -1. You define new kind of nodes in the Python. They define the IOs, sample types and amount of data read/written on each IO -2. You create instance of those new kind of Nodes -3. You connect them in a graph and generate a schedule -4. In your AppNodes.h file , you implement the new kind of nodes with C++ templates: - 1. The class is generally not doing a lot : defining the IOs and the function to call when run -5. If you need more control on the initialization, it is possible to pass additional arguments to the node constructors and to the scheduler function. +## Defining new arguments for a node and the scheduler -## Python code +For `ProcessingNode`, we are adding additional arguments in this example to show how it is possible to do it for initializing a node in the generated code. -Let's analyze the file `graph.py` in the `example1` folder. This file is describing the graph and the node and is calling the Python functions to generate the dot and C++ files. - - - -First, we add some path so that the example can find the CG static packages when run from example1 folder. - -```python -from cmsisdsp.cg.scheduler import * -``` - - - -Then, we describe the new kind of blocks that we need : Source, ProcessingNode and Sink. - -```python -class Sink(GenericSink): - def __init__(self,name,theType,inLength): - GenericSink.__init__(self,name) - self.addInput("i",theType,inLength) - - @property - def typeName(self): - return "Sink" -``` - -When creating a new kind of node (here a sink) we always need to do 2 things: - -- Add a type in typeName. It will be used to create objects in C++ or Python. So it must be a valid C++ or Python class name ; -- Add inputs and outputs. The convention is that an input is named "i" and output "o". When there are several inputs they are named "ia", "ib" etc ... -- For a sink you can only add an input. So the function addOutput is not available. -- The constructor is taking a length and a type. It is used to create the io -- When there are several inputs or outputs, they are ordered using alphabetical order. -It is important to know what is the ID of the corresponding IO in the C code. - -The definition of a new kind of Source is very similar: - -```python -class Source(GenericSource): - def __init__(self,name,theType,inLength): - GenericSource.__init__(self,name) - self.addOutput("o",theType,inLength) - - @property - def typeName(self): - return "Source" -``` - - - -Then for the processing node, we could define it directly. But, often there will be several Nodes in a graph, so it is useful to create a new Node blocks and inherit from it. - -```python -class Node(GenericNode): - def __init__(self,name,theType,inLength,outLength): - GenericNode.__init__(self,name) - self.addInput("i",theType,inLength) - self.addOutput("o",theType,outLength) -``` - - - -Note that this new kind of block has no type. It just has an input and an output. - -Now we can define the Processing node: - -```python -class ProcessingNode(Node): - @property - def typeName(self): - return "ProcessingNode" -``` - -We just define its type. - -Once it is done, we can start creating instance of those nodes. We will also need to define the type for the samples (float32 in this example). The functions and constants are defined in `cg.types`. +If `processing` is the node, we can add arguments with the APIs `addLiteralArg` and `addVariableArg`. ```python -floatType=CType(F32) +processing.addLiteralArg(4,"testString") +processing.addVariableArg("someVariable") ``` -It is also possible to use a custom datatype, the `example8` is giving an example: +* `addLiteralArg(4,"testString")` will pass the value `4` as first additional argument of the C++ constructor (after the FIFOs) and the string `"testString"` as second additional argument of the C++ constructor (after the FIFOs) +* `addVariableArg("someVariable")` will pass the variable `someVariable` as third additional argument of the C++ constructor (after the FIFOs) -```python -complexType=CStructType("complex","MyComplex",8) -``` - -This is defining a new datatype that is mapped to the type `complex` in C/C++ and the class `MyComplex` in Python. The last argument is the size in bytes of the struct in C. - -The type complex may be defined with: - -```c -typedef struct { - float re; - float im; -} complex; -``` +The constructor API will look like: -**Note that:** - -- The value **must have** value semantic in C/C++. So avoid classes -- In Python, the classes have reference semantic which implies some constraints: - - You should never modify an object from the read buffer - - You should change the field of an object in the write buffer - - If you need a new object : copy or create a new object. Never use an object from the read buffer as it is if you intend to customize it - -Once a datatype has been defined and chosen, we can define the nodes for the graph: - -```python -src=Source("source",floatType,5) -b=ProcessingNode("filter",floatType,7,5) -sink=Sink("sink",floatType,5) -``` - -For each node, we define : - -- The name (name of variable in C++ or Python generated code) -- The type for the inputs and outputs -- The numbers of samples consumed / produced on the io -- Inputs are listed first for the number of samples - -For `ProcessingNode` we are adding additional arguments to show how it is possible to add other arguments for initializing a node in the generated code: - -```python -b.addLiteralArg(4) -b.addLiteralArg("Test") -b.addVariableArg("someVariable") -``` - - - -The C++ for object of type `ProcessingNode` are taking 3 arguments in addition to the io. For those, arguments we are passing an int, a string and a variable name. - -Now that the nodes have been created, we can create the graph and connect the nodes: - -```python -g = Graph() - -g.connect(src.o,b.i) -g.connect(b.o,sink.i) -``` - -Then, before we generate a schedule, we can define some configuration: - -```python -conf=Configuration() -conf.debugLimit=1 -``` - -Since it is streamed based processing, the schedule should run forever. For testing, we can limit the number of iterations. Here the generated code will run just one iteration of the schedule. - -This configuration object can be used as argument of the scheduling function (named parameter config) and must be used as argument of the code generating functions. - -There are other fields for the configuration: - -- `dumpFIFO` : Will dump the output FIFOs content after each execution of the node (the code generator is inserting calls to the FIFO dump function) -- `displayFIFOSizes` : During the computation of the schedule, the Python script is displaying the evolution of the FIFO lengths. -- `schedName` : The name of the scheduler function (`scheduler` by default) -- `cOptionalArgs` and pyOptionalArgs for passing additional arguments to the scheduling function -- `prefix` to prefix the same of the global buffers -- `memoryOptimization` : Experimental. It is attempting to reuse buffer memory and share it between several FIFOs -- `codeArray` : Experimental. When a schedule is very long, representing it as a sequence of function calls is not good for the code size of the generated solution. When this option is enabled, the schedule is described with an array. It implies that the pure function calls cannot be inlined any more and are replaced by new nodes which are automatically generated. -- `eventRecorder` : Enable the support for the CMSIS Event Recorder. - -In the example 1, we are passing a variable to initialize the node of type ProcessingNode. So, it would be great if this variable was an argument of the scheduler function. So we define: - -```python -conf.cOptionalArgs="int someVariable" +```C++ +ProcessingNode(FIFOBase &src,FIFOBase &dst,int,const char*,int) ``` -This will be added after the error argument of the scheduling function. +This API is defined in `AppNodes.h` by the developper. The types are not generated by the scripts. Here the variable `someVariable` is chosen to have type `int` hence the last argument of the constructor has type `int`. But it is not imposed by the Python script that is just declaring the existence of a variable. -Once we have a configuration object, we can start to compute the schedule and generate the code: +In the generated scheduler, the constructor is used as: -```python -sched = g.computeSchedule() -print("Schedule length = %d" % sched.scheduleLength) -print("Memory usage %d bytes" % sched.memory) +```C++ +ProcessingNode processing(fifo0,fifo1,4,"testString",someVariable); ``` -A schedule is computed. We also display: +This variable `someVariable` must come from somewhere. The API of the scheduler is: -- The length of the schedule -- The total amount of memory used by all the FIFOs - -We could also have used: - -```python -sched = g.computeSchedule(config=conf) +```C++ +extern uint32_t scheduler(int *error,int someVariable); ``` -to use the configuration object if we needed to dump the FIFOs lengths. - -Now, that we have a schedule, we can generate the graphviz and the C++ code: +This new argument to the scheduler is defined in the Python script: ```python -with open("test.dot","w") as f: - sched.graphviz(f) - -sched.ccode("generated",conf) +conf.cOptionalArgs=["int someVariable"] ``` -The C++ code will be generated in the `example1` folder `generated` : sched.cpp - ## The C++ code -The C++ code generated in`scheduler.cpp` and `scheduler.h` in `generated` folder is relying on some additional files which must be provided by the developer: - -- custom.h : to define some custom initialization or `#define` used by the code -- AppNodes.h to define the new C++ blocks - -Let's look at custom.h first: - -### custom.h - -```c++ -#ifndef _CUSTOM_H_ - - -#endif _CUSTOM_H_ -``` - -It is empty in `example1`. This file can be used to include or define some variables and constants used by the network. - -### AppNodes.h - -All the new nodes defined in the Python script must also be defined in the C++ code. They are very similar to the Python code but a bit more verbose. - -```c++ -template -class Sink: public GenericSink -{ -public: - Sink(FIFOBase &src):GenericSink(src){}; - - int prepareForRunning() override - { - if (this->willUnderflow()) - { - return(CG_SKIP_EXECUTION_ID_CODE); // Skip execution - } - - return(0); - }; - - int run() override - { - IN *b=this->getReadBuffer(); - printf("Sink\n"); - for(int i=0;i -class Source: GenericSource -{ -public: - Source(FIFOBase &dst):GenericSource(dst),mCounter(0){}; - - int prepareForRunning() override - { - if (this->willOverflow()) - { - return(CG_SKIP_EXECUTION_ID_CODE); // Skip execution - } - - return(0); - }; - - int run() override - { - OUT *b=this->getWriteBuffer(); - - printf("Source\n"); - for(int i=0;i -class ProcessingNode: public GenericNode -{ -public: - ProcessingNode(FIFOBase &src,FIFOBase &dst,int,const char*,int):GenericNode(src,dst){}; - - int prepareForRunning() override - { - if (this->willOverflow() || - this->willUnderflow() - ) - { - return(CG_SKIP_EXECUTION_ID_CODE); // Skip execution - } - - return(0); - }; - - int run() override - { - printf("ProcessingNode\n"); - IN *a=this->getReadBuffer(); - OUT *b=this->getWriteBuffer(); - b[0] =(OUT)a[3]; - return(0); - }; - -}; -``` - -The processing node is (very arbitrary) copying the value at index 3 to index 0 of the output. - -The processing node is taking 3 arguments after the FIFOs in the constructor because the Python script is defining 3 additional arguments for this node : `int`, `string` and another `int` but passed trough a variable in the scheduler. +The C++ code generated in`scheduler.cpp` and `scheduler.h` in `generated` folder ### scheduler.cpp +#### Included headers + The generated code is first including the needed headers: ```C++ @@ -386,22 +76,79 @@ The generated code is first including the needed headers: - Application nodes - scheduler API -Then, the generated code is defining the buffers for the FIFOs: +#### Macros + +The generated code is then including some macro definitions that can all be redefined to customize some aspects of the generated scheduler. By default those macros, except `CHECKERROR`, are doing nothing: + +* CHECKERROR + * Check for an error after each node executioin. Default action is to branch out of the scheduler loop and return an error +* CG_BEFORE_ITERATION + * Code to execute before each iteration of the scheduler +* CG_AFTER_ITERATION + * Code to executed after each iteration of the scheduler +* CG_BEFORE_SCHEDULE + * Code to execute before starting the scheduler loop +* CG_AFTER_SCHEDULE + * Code to execute after the end of the scheduler loop +* CG_BEFORE_BUFFER + * Code before any buffer definition. Can be used, for instance, to align a buffer or to put this buffer in a specific memory section +* CG_BEFORE_FIFO_BUFFERS + * Code included before the definitions of the globals FIFO buffers +* CG_BEFORE_FIFO_INIT + * Code to execute before the creation of the FIFO C++ objects +* CG_BEFORE_NODE_INIT + * Code to execute before the creation of the node C++ objects +* CG_AFTER_INCLUDES + * Code coming after the include files (useful to add other include files after the default ones) +* CG_BEFORE_SCHEDULER_FUNCTION + * Code defined before the scheduler function +* CG_BEFORE_NODE_EXECUTION + * Code executed before a node execution +* CG_AFTER_NODE_EXECUTION + * Code executed after a node execution and before the error checking + +#### Memory buffers and FIFOs + +Then, the generated code is defining the buffers for the FIFOs. First the size are defined: ```C++ +CG_BEFORE_FIFO_BUFFERS /*********** FIFO buffers ************/ - #define FIFOSIZE0 11 -float32_t buf0[FIFOSIZE0]={0}; - #define FIFOSIZE1 5 -float32_t buf1[FIFOSIZE1]={0}; ``` +The FIFOs may have size different from the buffer when a buffer is shared between different FIFOs. So, there are different defines for the buffer sizes: + +```C++ +#define BUFFERSIZE1 11 +CG_BEFORE_BUFFER +float32_t buf1[BUFFERSIZE1]={0}; + +#define BUFFERSIZE2 5 +CG_BEFORE_BUFFER +float32_t buf2[BUFFERSIZE2]={0}; +``` + +In case of buffer sharing, a shared buffer will be defined with `int8_t` type. It is **very important** to align such a buffer by defining `CG_BEFORE_BUFFER` See the [FAQ](../../FAQ.md) for more information about alignment issues. + +#### Description of the schedule + +```C++ +static unsigned int schedule[17]= +{ +2,2,0,1,2,0,1,2,2,0,1,2,0,1,2,0,1, +}; +``` + +There are different code generation modes in the compute graph. By default, the schedule is encoded as a list of numbers and a `switch/case` is used to execute the node corresponding to an identification number. + +#### Scheduler API + Then, the scheduling function is generated: ```C++ @@ -414,6 +161,8 @@ The returned valued is the number of schedules fully executed when the error occ The `someVariable` is defined in the Python script. The Python script can add as many arguments as needed with whatever type is needed. +#### Scheduler locals + The scheduling function is starting with a definition of some variables used for debug and statistics: ```C++ @@ -425,59 +174,147 @@ int32_t debugCounter=1; Then, it is followed with a definition of the FIFOs: ```C++ +CG_BEFORE_FIFO_INIT; /* Create FIFOs objects */ -FIFO fifo0(buf0); -FIFO fifo1(buf1); +FIFO fifo0(buf1); +FIFO fifo1(buf2); ``` +The FIFO template has type: + +```C++ +template +class FIFO; +``` + +`isArray` is set to `1` when the Python code can deduce that the FIFO is always used as an array. In this case, the memory buffer may be shared with other FIFO depending on the data flow dependencies of the graph. + +`isAsync` is set to 1 when the graph is an asynchronous one. + Then, the nodes are created and connected to the FIFOs: ```C++ /* Create node objects */ -ProcessingNode filter(fifo0,fifo1,4,"Test",someVariable); +ProcessingNode processing(fifo0,fifo1,4,"testString",someVariable); Sink sink(fifo1); Source source(fifo0); ``` -One can see that the processing nodes has 3 additional arguments in addition to the FIFOs. Those arguments are defined in the Python script. The third argument is `someVariable` and this variable must be in the scope. That's why the Python script is adding an argument `someVariable` to the scheduler API. So, one can pass information to nay node from the outside of the scheduler using those additional arguments. - And finally, the function is entering the scheduling loop: ```C++ - while((cgStaticError==0) && (debugCounter > 0)) - { - nbSchedule++; + /* Run several schedule iterations */ + CG_BEFORE_SCHEDULE; + while((cgStaticError==0) && (debugCounter > 0)) + { +``` + +The content of the loop is a `switch / case`: + +```C++ +CG_BEFORE_NODE_EXECUTION; + +switch(schedule[id]) +{ + case 0: + { + cgStaticError = processing.run(); + } + break; + + case 1: + { + cgStaticError = sink.run(); + } + break; - cgStaticError = source.run(); - CHECKERROR; + case 2: + { + cgStaticError = source.run(); + } + break; + + default: + break; +} +CG_AFTER_NODE_EXECUTION; +CHECKERROR; ``` -`CHECKERROR` is a macro defined in `Sched.h`. It is just testing if `cgStaticError< 0` and breaking out of the loop if it is the case. This can be redefined by the user. +#### Error handling -Since an application may want to use several SDF graphs, the name of the `sched` and `customInit` functions can be customized in the `configuration` object on the Python side: +In case of error, the code is branching out to the end of the function: -```python -config.schedName = "sched" +```C++ +errorHandling: + CG_AFTER_SCHEDULE; + *error=cgStaticError; + return(nbSchedule); ``` -A prefix can also be added before the name of the global FIFO buffers: +## Expected output -```python -config.prefix="bufferPrefix" +Output of the Python script: + +``` +Schedule length = 17 +Memory usage 64 bytes +``` + +Output of the execution: + +``` +Start +Source +Source +ProcessingNode +Sink +3 +0 +0 +0 +0 +Source +ProcessingNode +Sink +10 +0 +0 +0 +0 +Source +Source +ProcessingNode +Sink +17 +0 +0 +0 +0 +Source +ProcessingNode +Sink +24 +0 +0 +0 +0 +Source +ProcessingNode +Sink +31 +0 +0 +0 +0 ``` -## Summary +The source is incrementing a counter and generate 0,1,2,3 ... -It looks complex because there is a lot of information but the process is always the same: +The processing node is copying the 4th sample of the input to the first sample of the output. So there is a delta of 7 between each new value written to the output. -1. You define new kind of nodes in the Python. They define the IOs, type and amount of data read/written on each IO -2. You create Python instance of those new kind of Nodes -3. You connect them in a graph and generate a schedule -4. In you AppNodes.h, you implement the new kind of nodes with a C++ template: - 1. The template is generally defining the IO and the function to call when run - 1. It should be minimal. The template is just a wrapper. Don't forget those nodes are created on the stack in the scheduler function. So they should not be too big. They should just be simple wrappers -5. If you need more control on the initialization, it is possible to pass additional arguments to the nodes constructors and to the scheduler function. +The sink is displaying the 5 samples at the input. diff --git a/ComputeGraph/examples/example1/docassets/graph1.PNG b/ComputeGraph/examples/example1/docassets/graph1.PNG index ce1e3782d4b899432337a3c6c6d3d6ff29b690aa..0df797af8d46250056afc984048edf6160548712 100644 GIT binary patch literal 5253 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 literal 16721 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 Rg$}1mU)ShH`L%~({{?mIR7L;* diff --git a/ComputeGraph/examples/example1/generated/scheduler.cpp b/ComputeGraph/examples/example1/generated/scheduler.cpp index fa8918bd..5f7d6724 100644 --- a/ComputeGraph/examples/example1/generated/scheduler.cpp +++ b/ComputeGraph/examples/example1/generated/scheduler.cpp @@ -102,8 +102,7 @@ float32_t buf2[BUFFERSIZE2]={0}; CG_BEFORE_SCHEDULER_FUNCTION -uint32_t scheduler(int *error,const char *testString, - int someVariable) +uint32_t scheduler(int *error,int someVariable) { int cgStaticError=0; uint32_t nbSchedule=0; @@ -120,7 +119,7 @@ uint32_t scheduler(int *error,const char *testString, /* Create node objects */ - ProcessingNode filter(fifo0,fifo1,4,testString,someVariable); + ProcessingNode processing(fifo0,fifo1,4,"testString",someVariable); Sink sink(fifo1); Source source(fifo0); @@ -138,7 +137,7 @@ uint32_t scheduler(int *error,const char *testString, { case 0: { - cgStaticError = filter.run(); + cgStaticError = processing.run(); } break; diff --git a/ComputeGraph/examples/example1/generated/scheduler.h b/ComputeGraph/examples/example1/generated/scheduler.h index f595e01f..c1d5cb0d 100644 --- a/ComputeGraph/examples/example1/generated/scheduler.h +++ b/ComputeGraph/examples/example1/generated/scheduler.h @@ -16,8 +16,7 @@ extern "C" #endif -extern uint32_t scheduler(int *error,const char *testString, - int someVariable); +extern uint32_t scheduler(int *error,int someVariable); #ifdef __cplusplus } diff --git a/ComputeGraph/examples/example1/graph.py b/ComputeGraph/examples/example1/graph.py index e6d33116..048ca19b 100644 --- a/ComputeGraph/examples/example1/graph.py +++ b/ComputeGraph/examples/example1/graph.py @@ -36,42 +36,29 @@ class ProcessingNode(Node): ### Define nodes floatType=CType(F32) src=Source("source",floatType,5) -b=ProcessingNode("filter",floatType,7,5) -b.addLiteralArg(4) -b.addVariableArg("testString","someVariable") +processing=ProcessingNode("processing",floatType,7,5) +processing.addLiteralArg(4,"testString") +processing.addVariableArg("someVariable") sink=Sink("sink",floatType,5) g = Graph() -g.connect(src.o,b.i) -g.connect(b.o,sink.i) +g.connect(src.o,processing.i) +g.connect(processing.o,sink.i) print("Generate graphviz and code") conf=Configuration() conf.debugLimit=1 -conf.cOptionalArgs=["const char *testString" - ,"int someVariable" +conf.cOptionalArgs=["int someVariable" ] -#conf.displayFIFOSizes=True -# Prefix for global FIFO buffers -#conf.prefix="sched1" -#conf.dumpSchedule = True sched = g.computeSchedule(config=conf) -#print(sched.schedule) + print("Schedule length = %d" % sched.scheduleLength) print("Memory usage %d bytes" % sched.memory) -# - -#conf.postCustomCName = "post.h" -#conf.CAPI = True -#conf.prefix="global" -#conf.dumpFIFO = True -#conf.CMSISDSP = False -#conf.switchCase = False sched.ccode("generated",conf) with open("test.dot","w") as f: diff --git a/ComputeGraph/examples/example1/main.cpp b/ComputeGraph/examples/example1/main.cpp index 8e26aa31..b0cb113f 100644 --- a/ComputeGraph/examples/example1/main.cpp +++ b/ComputeGraph/examples/example1/main.cpp @@ -6,6 +6,6 @@ int main(int argc, char const *argv[]) { int error; printf("Start\n"); - uint32_t nbSched=scheduler(&error,"Test",1); + uint32_t nbSched=scheduler(&error,1); return 0; } \ No newline at end of file diff --git a/ComputeGraph/examples/example1/test.dot b/ComputeGraph/examples/example1/test.dot index 96de529c..a481dc2c 100644 --- a/ComputeGraph/examples/example1/test.dot +++ b/ComputeGraph/examples/example1/test.dot @@ -9,10 +9,10 @@ digraph structs { fontname="times" -filter [label=< +processing [label=< - +
filter
(ProcessingNode)
processing
(ProcessingNode)
>]; @@ -32,13 +32,13 @@ source [label=< -source:i -> filter:i [label="f32(11)" +source:i -> processing:i [label="f32(11)" ,headlabel=<
7
> ,taillabel=<
5
>] -filter:i -> sink:i [label="f32(5)" +processing:i -> sink:i [label="f32(5)" ,headlabel=<
5
> ,taillabel=<
5 diff --git a/ComputeGraph/examples/example1/test.pdf b/ComputeGraph/examples/example1/test.pdf index 821662125bd0b35b9546c238f3d5ac107d619ab1..e8c8524359816480774f35274d3177eec5d9928b 100644 GIT binary patch delta 19547 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 delta 19834 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 iq5StIDlm18zbC7}kSYk;#~WxaBof9YBZD$E -class CFFT: public GenericNode +class CFFT; +``` + +There are only specific implementations for specific datatype. No generic implementation is provided. + +For, float we have: + +```C++ +template +class CFFT: public GenericNode { public: - CFFT(FIFOBase &src,FIFOBase &dst): - GenericNode(src,dst){ + CFFT(FIFOBase &src,FIFOBase &dst):GenericNode(src,dst) + { arm_status status; status=arm_cfft_init_f32(&sfft,inputSize>>1); }; - + int prepareForRunning() override { if (this->willOverflow() || - this->willUnderflow() - ) + this->willUnderflow()) { return(CG_SKIP_EXECUTION_ID_CODE); // Skip execution } @@ -89,10 +95,11 @@ public: return(0); }; - int run() override { - IN *a=this->getReadBuffer(); - OUT *b=this->getWriteBuffer(); - memcpy((void*)b,(void*)a,outputSize*sizeof(IN)); + int run() override + { + float32_t *a=this->getReadBuffer(); + float32_t *b=this->getWriteBuffer(); + memcpy((void*)b,(void*)a,inputSize*sizeof(float32_t)); arm_cfft_f32(&sfft,b,0,1); return(0); }; @@ -104,11 +111,9 @@ public: It is verbose but not difficult. The constructor is initializing the CMSIS-DSP FFT instance and connecting to the FIFO (through GenericNode). - - The run function is applying the `arm_cfft_f32`. Since this function is modifying the input buffer, there is a `memcpy`. It is not really needed here. The read buffer can be modified by the CFFT. It will just make it more difficult to debug if you'd like to inspect the content of the FIFOs. - +THe function `prepareForRunning` is only used in asynchronous mode. Please refer to the documentation for the asynchronous mode. This node is provided in `cg/nodes/cpp` so no need to define it. You can just use it by including the right headers. @@ -125,3 +130,43 @@ from cmsisdsp.cg.scheduler import * ``` The scheduler module is automatically including the default nodes. + +## Expected output + +Output of Python script: + +``` +Schedule length = 25 +Memory usage 11264 bytes +``` + +Output of execution: + +``` +Start +Nb = 40 +``` + +It is running for 40 iterations of the scheduler without errors. + +The python script `debug.py` can be used to display the content of `input_example3.txt` and `../build/output_example3.txt` + +It should display the same sinusoid but it is delayed in `output_example3.txt` by a few samples because of the sliding buffer. The sliding buffer will generate 256 samples in output each time 128 samples are received in input. As consequence, at start, 256 samples with the half set to zero are generated. + +We can check it in the debug script by comparing a delayed version of the original to the output. + +You should get something like: + +![sine](docassets/sine.png) + +We have 40 execution of the schedule iteration. In each schedule iteration we have two sinks. A sink is producing 192 samples. + +So, the execution is producing `40 * 2 * 192 == 15360` so a bit less than the `16000` samples in input. + +If we compare the input and output taking into account this length difference and the delay of 128 samples, we get (by running `debug.py`): + +``` +Comparison of input and output : max absolute error +6.59404862823898e-07 +``` + diff --git a/ComputeGraph/examples/example3/debug.py b/ComputeGraph/examples/example3/debug.py new file mode 100644 index 00000000..5cd13e05 --- /dev/null +++ b/ComputeGraph/examples/example3/debug.py @@ -0,0 +1,20 @@ +import numpy as np +from pylab import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show,semilogx, semilogy +from numpy import genfromtxt +ref_data = genfromtxt('input_example3.txt', delimiter=',') + +figure() +plot(ref_data) + +output_data = genfromtxt('../build/output_example3.txt', delimiter=',') + +plot(output_data) +show() + +print(ref_data.shape) +print(output_data.shape) +nb = output_data.shape[0] - 128 + +print("Comparison of input and output : max absolute error") +diff = output_data[128:] - ref_data[:nb] +print(np.max(np.abs(diff))) diff --git a/ComputeGraph/examples/example3/docassets/sine.png b/ComputeGraph/examples/example3/docassets/sine.png new file mode 100644 index 0000000000000000000000000000000000000000..5f2b5d721fc9debc120e8c1e790beb0d3247cf98 GIT binary patch literal 76071 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�apUYk5r0ff)Kk);E$(thO6RlS0Sl{&A*4J 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≶E>ULOx+a}P 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%0D6E~@8ixy?o{{kgbZcHlWJp_yF5KSQT;E7 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 JD8FPM{U3xv)oB0# literal 0 HcmV?d00001 diff --git a/ComputeGraph/examples/example4/README.md b/ComputeGraph/examples/example4/README.md index 91bde327..0921aee8 100644 --- a/ComputeGraph/examples/example4/README.md +++ b/ComputeGraph/examples/example4/README.md @@ -2,6 +2,8 @@ It is exactly the same example as example 3 but the code generation is generating Python code instead of C++. +![graph4](docassets/graph4.png) + The Python code is generated with: ```python @@ -12,6 +14,12 @@ and it will generate a `sched.py` file. A file `custom.py` and `appnodes.py` are also required. +The example can be run with: + +`python main.py` + +Do not confuse `graph.py,` which is used to describe the graph, with the other Python files that are used to execute the graph. + ## custom.py ```python @@ -25,7 +33,7 @@ An array HANN is defined for the Hann window. ## appnodes.py -This file is defining the new nodes which were used in `graph.py`. In `graph.py` which are just defining new kind of nodes for scheduling purpose : type and sizes. +This file is defining the new nodes which were used in `graph.py`. In `appnodes.py` we including new kind of nodes for simulation purpose: @@ -33,8 +41,6 @@ In `appnodes.py` we including new kind of nodes for simulation purpose: from cmsisdsp.cg.scheduler import * ``` - - The CFFT is very similar to the C++ version of example 3. But there is no `prepareForRunning`. Dynamic / asynchronous mode is not implemented for Python. ```python @@ -110,3 +116,22 @@ DISPBUF = np.zeros(16000) nb,error = s.scheduler(DISPBUF) ``` +The example can be run with: + +`python main.py` + + + +## Expected outputs + +``` +Generate graphviz and code +Schedule length = 25 +Memory usage 11264 bytes +``` + +And when executed: + +![sine](docassets/sine.png) + +As you can see at the beginning, there is a small delay during which the output signal is zero. diff --git a/ComputeGraph/examples/example4/debug.py b/ComputeGraph/examples/example4/debug.py deleted file mode 100644 index becd1195..00000000 --- a/ComputeGraph/examples/example4/debug.py +++ /dev/null @@ -1,20 +0,0 @@ -import numpy as np -from cmsisdsp.cg.static.nodes.simu import * - -a=np.zeros(10) -f=FIFO(10,a) - -f.dump() - -nb = 1 -for i in range(4): - w=f.getWriteBuffer(2) - w[0:2]=nb*np.ones(2) - nb = nb + 1 - f.dump() - -print(a) - -for i in range(4): - w=f.getReadBuffer(2) - print(w) \ No newline at end of file diff --git a/ComputeGraph/examples/example4/docassets/graph4.png b/ComputeGraph/examples/example4/docassets/graph4.png new file mode 100644 index 0000000000000000000000000000000000000000..815ad3f17d2c03d2ad613e0f36c549371b6d0f42 GIT binary patch literal 24505 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

SwS*&Z6&mNK`Se@7LO|hxWb; zCI=tMDeaw(yVp@>aLX#ZHbcrWx;8Ih@B7n=PimH*4mQcl4;^v{j!z76n(jW8Q8)eY z-shqpx`LHdDZ(VumEWg<(v{xX<>E(E@fwVx^g{oPp5>dnVkgiA01H6YiRpbdU^d73 z`xkDaemXjVD8xm(^Zj0mo=;4cVuORI%Q}dv7%QW3M{Q#xTfVJHspKW@+yAsQS)vz` znGCzaH=N_e^V{BAEIGFdlXr4la$tmjojNdn6FRK0Q8CF5gi}Rq7y{8YK3?82+ym&= zPO{)d*rQ-NQ|Eh=p^vhjMJ3cFx3sljcB}+|D5L~a8#Zh>Ib4nNVVil!R5}%9Sfyhkep((j_)- zeCGGtx9K`JyHy;EvT+Q&El3EY0^fwGDxUeGd#Ed`?S)0K&UYpRRfm#5FGMthz9g zxcwm@e`^NGs|=u&X-C%Zrvoy7liQHSy&(F)raX5EQ^Yu9c;|%%>;7vn$*!edIP}$aA+th2~g~pV}~29 z69P7L?~$!*E}HJyurI);$btsXkq!M!gz2%F^r>g8Y`DFCAT@%6o7d`+xAxX=)v+3~ zG~^@Y*;(6U6Y|t~D*a9MatLJ$w3W} z`IVdNT#H%X*UkfMq$Srm@(dgP&r}3J87B`P?*4_FFOrIcchB3^8g-}%Ryn|X#Cqit zR#gPz>J(DOm7azzi~e;<^z`3O^b~}s2q!vt?K$Q~0{W08#m!GgmM@`x0+$JVlThAJ zjfsrknGXJ&H&@~M)p5DI9TdCye14VnZ=)(8B)n!cWu}^$l8=0X6jTc&Y8#&YJ>}hf z^{K2muCbwoZ)7UNzzU^g15H?Ofz z=g&-zEdTCWZuE4fi5>#TfSKXILJQXuHVyLNr^dv@JkS$+4huIjGRiJ2OaoHI!N%qY z)(E1o91e$dKz8#TCvWdFctUIh7}tyQYMYf*|7C1sGzv@S(}zleBDpNUU_(q%I`fth;yOX7u?vAwm8ySzI8T!X`*NycjB zSioq{hne{uhLtGsV(u-bx5v(!-=vqWSlHW|`nAlJq*roj+S*NP32Qe`X&<#d% z}D_#lLa466k~?4;qQ~j zDk>_DQr70Xb=)|hvH4EqNdJvIB|_H~6M$jC80C0Gb_-P~n|27W5U6ArxFhTqCd$E+ zN^fGKymbn>0}V(-?#ixjU;}AJR`)RkYT^Nb$GBP{;T3AOZpq3-sx86+6_1{~1f7&y z(0+mpO;`MZD_8GAs8JIwj*5FOSsXVLB%6NK)MUXhQ^DA&^_&C}3c_);@}5>%n+W#_ zz%x7sS`HU@=T}E}4>frA7E264 z@6-YmoyS^c-`~K}&j*($c}=i=6bL%^-v`&jhYy*ZWW!SI3@GQVzop%vw|EaLOO%1i zTQWJqhro(74Z4|kh&QxXaOA$e1eMnJ9d39@_3?NEaE z1N9Ibqb#9Kmhgd~jd#{q3L3qCH+kGauR_w^hVa3^?7{r(A8H8bj%h^2hp6X4i`dV^fqCvIa%+$1VWO5WkvMmzkO%W&3!HKxRm(wn5zc~>kl7TyH#^kH5o!uA??_Cjke-y&upwO_m ze$^^7{>9ZX>Z#zKty;aBpVMwxzSun}9OJmca7DxhgpqrR2V6DO(cy|HKk4Vy@HeaV*&Yt%0?Z>K?-^^IDEAJS359o)OFTzgprE!jW5SiZ=+~aj`kBB)(;_)rk>ru-KC2 z{^Qwx`?rA=5il&axRSeYtQMPQkehU9nRSkYP~1U~+li2UVruEP|JIDqQ!*@AO6n`^ z?6l5_{Pq|lSo-t-`O;iH*JRIcXDjhBO$Wk%TWp#^lK)*V!jC-s|2IAb>VphVsl~4G cE@hQ-TQUXKS!A{Jx5RVW5q<3pt#eoZ4Y0K8WdHyG literal 0 HcmV?d00001 diff --git a/ComputeGraph/examples/example4/docassets/sine.png b/ComputeGraph/examples/example4/docassets/sine.png new file mode 100644 index 0000000000000000000000000000000000000000..6b2bc8bc92af1d9590b5e6770ad6a774189afb54 GIT binary patch literal 51039 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 Iebcx91K`CjSO5S3 literal 0 HcmV?d00001 diff --git a/ComputeGraph/examples/example5/README.md b/ComputeGraph/examples/example5/README.md new file mode 100644 index 00000000..979bd9c4 --- /dev/null +++ b/ComputeGraph/examples/example5/README.md @@ -0,0 +1,25 @@ +# Example 5 + +This is a pure python example. It is computing a sequence of MFCC with an overlap of 0.5 s and it is creating an animation. + +It can be run with: + +`python main.py` + +The `NumPy` sink at the end is just recording all the MFCC outputs as a list of buffers. This list is used to create an animation. + +graph5 + +## Expected output + +``` +Generate graphviz and code +Schedule length = 292 +Memory usage 6614 bytes +``` + +And when executed you should get an animation looking like this: + +![mfcc](docassets/mfcc.png) + +The Python `main.py` contains a line which can be uncommented to record the animation as a `.mp4` video. \ No newline at end of file diff --git a/ComputeGraph/examples/example5/docassets/graph5.png b/ComputeGraph/examples/example5/docassets/graph5.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0eb769d815fbffc8a8b74623dc860b4650b75f GIT binary patch literal 10923 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 E0_RIwVgLXD literal 0 HcmV?d00001 diff --git a/ComputeGraph/examples/example5/docassets/mfcc.png b/ComputeGraph/examples/example5/docassets/mfcc.png new file mode 100644 index 0000000000000000000000000000000000000000..f1890194a7739f4bae50c31fba3205cad211675e GIT binary patch literal 114518 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�|oKe%d*_|;yp-s;kQV6 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 Jji^!3{{VK5UrGP~ literal 0 HcmV?d00001 diff --git a/ComputeGraph/examples/example6/README.md b/ComputeGraph/examples/example6/README.md new file mode 100644 index 00000000..74b4fb82 --- /dev/null +++ b/ComputeGraph/examples/example6/README.md @@ -0,0 +1,15 @@ +# Example 6 + +This example is similar to example 5 but with C code generation instead of Python. + +![graph6](docassets/graph6.png) + +## Expected output + +``` +nbMFCCOutputs = 126 +Generate graphviz and code +Schedule length = 17 +Memory usage 2204 bytes +``` + diff --git a/ComputeGraph/examples/example6/docassets/graph6.png b/ComputeGraph/examples/example6/docassets/graph6.png new file mode 100644 index 0000000000000000000000000000000000000000..caf7ea9cc2ed9c40397bdb491cc85a4eb2c9c2e7 GIT binary patch literal 7608 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 literal 0 HcmV?d00001 diff --git a/ComputeGraph/examples/example7/PythonTest.mo b/ComputeGraph/examples/example7/PythonTest.mo index 778cdf66..0611783b 100644 --- a/ComputeGraph/examples/example7/PythonTest.mo +++ b/ComputeGraph/examples/example7/PythonTest.mo @@ -13,7 +13,7 @@ model PythonTest Placement(visible = true, transformation(origin = {-82, 8}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); inner Modelica.Blocks.Noise.GlobalSeed globalSeed annotation( Placement(visible = true, transformation(origin = {-86, -28}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); - ARM.Sound.WaveOutput waveOutput annotation( + ARM.Sound.WaveOutput waveOutput(path = "C:\\benchresults\\cmsis\\CMSIS-DSP\\ComputeGraph\\examples\\example7\\output.wav") annotation( Placement(visible = true, transformation(origin = {24, -32}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); equation connect(vht.y, transferFunction.u) annotation( diff --git a/ComputeGraph/examples/example7/README.md b/ComputeGraph/examples/example7/README.md new file mode 100644 index 00000000..574046c2 --- /dev/null +++ b/ComputeGraph/examples/example7/README.md @@ -0,0 +1,62 @@ +# Example 7 + +This is an example showing how a graph in in Python (not C) can interact with an [OpenModelica](https://openmodelica.org/) model. + +![graph7](docassets/graph7.png) + +First you need to get the project [AVH-SystemModeling](https://github.com/ARM-software/AVH-SystemModeling) from our ARM-Software repository. + +Then, you need launch `OpenModelica` and choose `Open Model`. + +Select `AVH-SystemModeling/VHTModelicaBlock/ARM/package.mo` + +Then choose `Open Model` again and select `PythonTest.mo`. + +You should see something like that in `Open Modelica`: + +![modelica](docassets/modelica.png) + +Customize the output path in the `Wave` node. + +Refer to the `Open Modelica` documentation to know who to build and run this simulation. Once it is started in Modelica, launch the Python script in `example7`: + +`python main.py` + +You should see : + +``` +Connecting as INPUT +Connecting as OUTPUT +``` + +In Modelica window, the simulation should continue to `100%`. + +In the simulation window, you should be able to plot the output wav and get something like: + +![waveoutput](docassets/waveoutput.png) + +A `.wav` should have been generated so that you can listen to the result : A Larsen effect ! + +The `Processing` node in the compute graph is implemented in `custom.py` and is a gain computed with `CMSIS-DSP` Python wrapper + +```python +class Processing(GenericNode): + def __init__(self,inputSize,outputSize,fifoin,fifoout): + GenericNode.__init__(self,inputSize,outputSize,fifoin,fifoout) + + def run(self): + + i=self.getReadBuffer() + o=self.getWriteBuffer() + + b=dsp.arm_scale_q15(i,0x6000,1) + + o[:]=b[:] + + return(0) +``` + + + +The gain has been chosen to create an instability. + diff --git a/ComputeGraph/examples/example7/docassets/graph7.png b/ComputeGraph/examples/example7/docassets/graph7.png new file mode 100644 index 0000000000000000000000000000000000000000..83ee74c5883647b699af980fdd8614af2cad4a66 GIT binary patch literal 5124 zcma)A2UJttmX3uYNKyIesDOe6L5iRhLq`OHfb`y5sM14%h$0;kA+!LBke?1Bolpc4 z>1ybqC?T{2FhJ;KuJhiTnYCuEH*@Y?_ui9}yZ1hOpZ%Th?${>~EfywTCJ+e3qWwtS z5Cl3M2t4aB(gRmcZohosM(?1br4BmzbL3;tsUXm$Ms0PKry)73)B0`%mn#gvD^(|K z#`8Gnm+h>Rrk#J{&HTqTwRi$_z1g(0IK##tz5c=-5T7jjo}(#V4aV(R)oC}7fpUWO zyP!wxof#IZz}xn(xlMfC*n(hHa@>y7`z^022F~W6ocq$9NC%P1P^Gt*4?+=Pmvxda z-&AEhB?L5HcSnTl^BAB_Iiiz*+l{m1#lpY<)2X19KR>HJN67=-5A1gTe)#^p3u$7) zJbaIYjOt~kW4t1xih_E3&-G_YBV41xx*Ccg92!&w=CgJ#F7%d`mhf_Ni4gn~Z#y)m}16o+;6#CKiPf_=sOlinJ6*zP}N7 zT;I^(mRSMF2@T~bDUqK!o|(DK$;Cxm_4e_xEb3d_jL|H3!a?`ljbj38VjDEqbuI@S zahVo2y{sk5bR8?h();Dh>A_s3`0$78!6wl<4R@ubg4iYuhW=(*8rY_e1pvTD nBq%_yi| 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 literal 0 HcmV?d00001 diff --git a/ComputeGraph/examples/example7/docassets/modelica.png b/ComputeGraph/examples/example7/docassets/modelica.png new file mode 100644 index 0000000000000000000000000000000000000000..616707c46b238617fb2532e7146fd9e70f2c8912 GIT binary patch literal 32301 zcmeFZdpy(s`#;`ENl8U=RtYJll$=Q?F_KYekX2$Shsa^b7D5O) zPMDcvEatS0&FuFa)vMS0{d&JY-|z2_-|hFu=Z|W-+2e6t*W-S_9@lj}uE!(d!g&LJ zJ~6&EYu4}^o;wX$vt|Qo&6>3_yc>c4Irx200{CYw9Aa>CO>VQqIPk-U8~P^tYu4n) zZdtPD0e;>LJ9h=XW{t2c_s?2G$o}ayYmiljr}ZuTY$q%98;3tX%VW_4GN&&enV(>9 z^QD@2vTcKT@-oR^Q%4#Vw{AjQE{P`Jc|is>TsY>7q74@u!-V2a;+GE1Yj3}OF%!b4!#pI!EK;G2-@2-cWZq&69{5-ymFikqB8;Fc zh6gW%Q_v^Ys^;>Ltfq4|jRAl0kOHoag@O01Ck4P(|2rIJxaEI;3nG_t|RD|mD{ibOfGJ+_#UK$#o|Ir_) z%klc?%CK5m93xOt_6AAXgR=!1>>qWm2zm

YmuD%)hkBpPQnyu@Z0AAhGkQys+F! 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 Uun-?-Ig5_*WpjfH{hJT|2Lj~{TmS$7 literal 0 HcmV?d00001 diff --git a/ComputeGraph/examples/example7/graph.py b/ComputeGraph/examples/example7/graph.py index 93f45b9b..f546a684 100644 --- a/ComputeGraph/examples/example7/graph.py +++ b/ComputeGraph/examples/example7/graph.py @@ -33,18 +33,11 @@ print("Generate graphviz and code") conf=Configuration() -#conf.dumpSchedule = True sched = g.computeSchedule(conf) -#print(sched.schedule) print("Schedule length = %d" % sched.scheduleLength) print("Memory usage %d bytes" % sched.memory) -# -# Pass the source and sink objects used to communicate with the VHT Modelica block -#conf.pyOptionalArgs="" -conf.pathToSDFModule="C:\\\\benchresults\\\\cmsis_docker\\\\CMSIS\\\\DSP\\\\SDFTools" -#conf.dumpFIFO=True -#conf.prefix="sched1" + sched.pythoncode(".",config=conf) with open("test.dot","w") as f: diff --git a/ComputeGraph/examples/example7/output.wav b/ComputeGraph/examples/example7/output.wav new file mode 100644 index 0000000000000000000000000000000000000000..1485d01b611972e794a852558af585a879a7329f GIT binary patch literal 32244 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 AkN^Mx literal 0 HcmV?d00001 diff --git a/ComputeGraph/examples/example8/README.md b/ComputeGraph/examples/example8/README.md new file mode 100644 index 00000000..4b995a64 --- /dev/null +++ b/ComputeGraph/examples/example8/README.md @@ -0,0 +1,54 @@ +# Example 8 + +This example is illustrating : + +* The `Duplicate` node to have a one-to-many connection at an output +* A structured datatype for the samples in the connections + +![graph8](docassets/graph8.png) + +## Structured datatype + +It is possible to use a custom datatype: + +```python +complexType=CStructType("complex","MyComplex",8) +``` + +This is defining a new datatype that is mapped to the type `complex` in C/C++ and the class `MyComplex` in Python. The last argument is the size in bytes of the struct in C. + +The type complex may be defined with: + +```c +typedef struct { + float re; + float im; +} complex; +``` + +**Note that:** + +- The value **must have** value semantic in C/C++. So avoid classes +- In Python, the classes have reference semantic which implies some constraints: + - You should never modify an object from the read buffer + - You should change the field of an object in the write buffer but not the object itself + - If you need a new object : copy or create a new object. Never use an object from the read buffer as it is if you intend to customize it + +The size of the C structure should take into account the padding that may be added to the struct. + +When no buffer sharing is used, the size of buffers is always expressed in number of samples. + +But in case of buffer sharing, the datatype of the buffer is `int8_t` and the size of the buffer must be computed by the Compute Graph taking into account ay padding that may exist. + +## Duplicate node + +In case of a one-to-many connections, the Python code will automatically add `Duplicate` nodes in the graph. Those `Duplicate` nodes do not appear directly in the graphviz but only as a stylized way : a dot. + +Currently it is limited to 3. If you need more that 3 outputs on an IO you'll have to insert the `Duplicate` nodes explicitly in the graph. + +In the generated code, you'll see the `Duplicate` nodes. For instance, in this example: + +```C++ +Duplicate3 dup0(fifo2,fifo3,fifo4,fifo5); +``` + diff --git a/ComputeGraph/examples/example8/docassets/graph8.png b/ComputeGraph/examples/example8/docassets/graph8.png new file mode 100644 index 0000000000000000000000000000000000000000..db3dd4cd1e49b264e987ee9b4a3404605d7760aa GIT binary patch literal 24705 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 OO*Xm=5=Une`bCCnCS`ov)9)Jk;6I|yq5B^ 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 literal 0 HcmV?d00001 diff --git a/ComputeGraph/examples/example9/README.md b/ComputeGraph/examples/example9/README.md new file mode 100644 index 00000000..0e9ae908 --- /dev/null +++ b/ComputeGraph/examples/example9/README.md @@ -0,0 +1,7 @@ +# Example 9 + +Thsi example is just checking that duplicate node insertion and delay on a connection are working well together. + +The Python script is able to schedule the graph. + +![graph9](docassets/graph9.png) \ No newline at end of file diff --git a/ComputeGraph/examples/example9/docassets/graph9.png b/ComputeGraph/examples/example9/docassets/graph9.png new file mode 100644 index 0000000000000000000000000000000000000000..56f92fb0b7ed799a154ba6a2383d74f8745ca814 GIT binary patch literal 20872 zcmbWfbzGJE*DbneP#Wn@k#3MKK@brY3F$`Z?nXjNMM_EpL`6yj77bD&jY>BnB1lO0 zna|$u@4WZiKkhl_y4Odxi?yEk#++l0G3FDiqpePKf$jndg(A|pu6hTB!o)(MFa+^& z;hiy)PtouL*YbwCD(W2h?`30AG780l(oj{>_03wF4lvfWIm6o=a3y=%qsV1{^i`y- zf&aN5EC0o{1)EM2B7L!k#Y0hlpJ^CM@YSXp5}91Ve|^(NpX(3TBBx}B7*WH^-eOLi z4$6jay{WySG1PO1r}H^qvuayVSawl|O=g0o?)|dcSsR3lva{Q=16PwGg*z4TStCiy zme{>fk)+D_WYnBk@G~YY-#Qfjx#j+x5PqLGXhu@f7Pu_-m#XC=-6Xx)#??97d`v ziwmFTl9gqsv>Tw3iPzpAz9AUPhzUn0q~rR};r`FAC8np~^=me9@$V~t)$+;imr%La zHc;fVMUoEF)eWG?5|r~owTmcZ2;o}%;fB&QZryUZdl(*$d7a~#_TwnH-%9)R|J?5r ziSEyzLsi+7oSg;Y)!0L9UF6PO8cV*euspralGbzE#NudMMg%JeH;#Bi9&J23v+ps7C7*kH8IHetgC8hXw>HjKD}-(M021vVK2reB0@f; z9wU?N^Ktq2 z$OCg}^Ir+9Mf>inQ1}rnD5B5WB zjuRgV$YZfHC7c$b@!8nf4@KZ!!~c|*3$-@$r(E^>%Yia)4af1!g+;r3f3>(DV9F}kOzskj+hog2IY0&4E=A{^ud&ytgG8yMhMj!(^J zVqLj(frE=nx#;UvK2g8F)*PIi1nc*&!!{F#8B*$<(uI+? z7NH#;9%e|r{Z>~%h6!dx1`dkyNoEb`RtyZ34H;D`jn^y2**yM^n`*bMmVdk4>98U7 z%k{!L*0#26GBWhFwYA|i=pM4JM8?T8YPfV&@bL5J>#g1f2I+INsb8{W{m4<}5M5e>aM5VA6a)p&tlTjS z(tUC=GK{MG38%;V7uOX(o2)WZQa*a~hPyXcVRn6+e}iByM$~3uVPP$Gvd)Y5+rz3p z&S;p?i6npA7@|kYVR8X`=;`?2MpF`aJyK@%=7!-b(GgK}gd4FJqkC`KIPr6@&GPM= zH;Ufg5@K{jA!SGwDpl%6Rq(R0Vfy*`jn#S-jpd=xO|M(Or0_oQg{>@&(MQWdtWkIe zLX_5;5URy#fhF?EdW`@7J7sMukCvKH$Y8@EonbZv@0ge*+%3|c|NNBQG8)Nt2|6N! zed1zbiupt42b=Q{OwHqmrjH?7;}3qvp8hsoX}2{W&CCWXh+5E8)x$#+2J>itL(tnE z?sJNe6KlG6Yq9Go1d6hzqYLu#@+T*#kdP4A&+}8Y9@np5C%yWmU%iK!LOEueoA#IO z(e7$A%z{v-BiDugTm|Oiy+0IJK9q{ve7Q6geEi2US_z+(N$FFTp?H+^nzBMOi`$M{jk~cMvE2^D&EX=T~pv65NvA!j^EJ ziW!hUCKR>pMWGm^J@MP3h*Vr%%RiGrPr#6A%HO}lBnySs}|OswpCKs44ABr|RJgjD%@y^hFS9)!J5p9;c*cG5Ut zIWUQ7&4oR5aM+rQAbAyXjv?i}CPh=9gKsdvh(LraB_Ea@AsGDj=U48!?yVWFjaTBS zL=nz2FOp;aWHfsj(xPvgC;;kPxf9~w5qVO8;3o^ zknG^Z#KFNCt9GJaZ`?P{6!~^Q0b_`xi97Y})1!-9OKE118Z02uZa%lfwfT;dbI^m~iSmI1z)aFX`6SR=Thi z?ns##2{ZHWa#&TvUfi^#6o= z>>W=huKCY!knT6E=s*C6T+90O`jf0I!ba1Lzg7S)V0TE}lVE4ZvaPIb>+1ddx#f7H zIjQ;lbR#A%Zq+piMl6OGZ6cy$U=Ra=y5Zz+k9j;Y1HMNqMX-%8#HwP#t3=OXyW#im zhf0``%YSXs0Oow~;K7q_>l67#(}B@}@2wfKej?AFJu?@hn>?+PaGHpuHVY(sSVgz} zv(Ldt4mnMauw=e2Plk;FZbTR*CFR!S;o%`6>TdD(6Zz!scF5%iv$Y~q@;A7WW4odzPAX0c|{O2<4LDuZPKLY&EuXCVK z0`CFw#WO23b%;o3YrCeplo4Krd*@0fSXo&KKi&IXo|=^v&#DrIAS3PO90X4;w8y3k zSztCD{pLM5I+8v$h9eg6qWgp}M&(=@owD&=t@e3R9?venA=Bqc33q}Z^!)jysgU#2 z@YC<#zdz|&x_hCn3aO$~A@m1`ku%9rud$SS2I?)=xP{49F!F7jYtc9#Stv zKoZBvYNAH}-G{qZ8HIf}&0DkZjvh=7zzL;yH(=we_gV??zb`HAe5n+1;FPVsTwdQ) zP=F1%cYh|J%>2AH0uKX)g-3j8Ev?&HC__sM5U~9DiO2ipQxl?sG z*1;^cyt?L%8yT8~mM8;l?Zj!3JuZCdyONhLUykm!{@~rwMPqd%mCpiFqV@6qhRd!& zse2E9P5G!c7!322l$3uG(<`@33rxFf>gwAn*cYkz%KeN1fpR5}_ln!c zK|oR|`dYPGOP7GV(R?lsS#!PVc-^}TsoOj$lWyRmSa^88tV7yO`tU&{bN#gXnP#Cx zGD&uYRTnYG<;#mMA;&PDVR=jP9qi04+ngIJXPQP!doV_4~qvf(VSj)=#o=(t%kpQEdwnr z?VHk4T-U}tz2fgWZ*|i}?TABHV?&km5SV2i<*TI?Kld23RJ~P%78Xl*J*A$$J`!TR zU8s9IguK@bTF=aa4{>0TbTFT7;=MPi*K>{Kfb%S@PjS)C(Yf>w=BdEG7YaEGgrdWI z@TC&K(?NT&bP1;yFY#EQ0-2{dhtC|&b|ui`p`=32WSa%Kx$z;|!3UA$d-G;O+cA~v zz~XO=QbF~TB85|erlzKYg*ZV{QqsXh{abKbFB5fhK7bEOn^2q zVVlDgE?=hkV*NpHb=h&cjuPI2LNCzxmi!?H4-b!yu5KjMSyJ~%kjvJddTsZznETQN z$X!JpGDH*kqpNxF(&0V`5^UTdhZA3ff~R}FKn=#TecI1Nge65YZ^*tJ)_hT#TIqko zqs6=`htY+SnwfC5{JfAYrpN$C0c!Sl|d$-l5Cv_`U z5$amo{;XKQgqbNM1a6O@D25tk0TLIk6=5>h%}-x%DI|RRrhBGI``;nc!Y?IW91i~R zqgbo8A+nh0y8eEc>Q254QNDZSS{*)XPKQHs*q*(;eam~p%E5XcmmkZ^KK1wTMMXrQ z27i*72^VMY5nBMIwqEfP{l!v-t`Dqk9|!EkAYnqDZ*!Djzj~GS?c2BfOl@>NYP|mx z?naI~vO}+LW};4-qSTCy8D@g^O$v&NB7~z(P6DA0yU_o;&sKEDU+%+)59T5nLJx*H z+Pk_Y8^3fqN~q-N%mG56?)91a1x}PAqN9_<6yQ!;9Lv@(I8!1g|Ul z0F(}kjKmh|6bjgL4BTwRldyppr=zcr*9j#KmZx;~OE)1JLWzO5@7|F+@?N^|dCC2k zr!<3%HzAbo&1Xl&b2O0lPTr-cCo+(6T%3~Q1awK#Ns|+>eig3GM^m!S04Y-@i?p-J zr%W^Jo7JFtXm)|^a$?w|%d^x2N6b7Drz3)L&&hdwy2i!qEXXc?+}Khk_{4W-W0sjN z;WbuSBI!b^ssTwWd*k0PyuGutxqoIFjn;J5e*aRwhDvWWpQ|CljWAbwZBp+&{`?B0 zACy6GaMMes)ufbNdFM%M5rQvE%gd8;QA@9G8`G{H-Q&4uWF}(O+epQ;Fhjk{?7)@W z{dSZv^h%0mtNi*#ox`X=>)E?^JWbjGae;1YLBufUP!(it9xmrv?f(A$xwp4HXn*>$ zw^X+BTU~_s08YoYk`^{m__3g?$>`J+0g6V#kp^WB`16nSYp;z9`bkT|P~s-R*k_82 zw2=T5dZ-Ql6$n7j(DjrCqyC@O>A;tF_limB=`YqAJNpEq z_GL?%l&|kAb}RBGGF%PsVh&*d09jS9Y3WnpxpL>TwFoR1Ha@;y+tgaGQSr?HtC<-} zrjo07N%W%(J?$nP#Om__9uU%r#oP+K@87JcsmYSu?Yhype__vK8xwtq&j96Pa(CqL z@SQihJTT>sGY#XfP1jxerv1_kfwzxa8n6zns`OqgWKxS1X6{C zg<5ZQMNnELdfUe~A{o=`76x9|@`>88N6=Qlwn)b(1vtZY&os-FTNl%6aoag_{a*`a{;A7%?w+C zjEV|3Ry7>*CL>H4<#UYEBqt9WpomOTpZH!-uW24x-R0)xZG)sPquUHSMkzPkK@k$>ax{xUoE`zI*xU1qaJ3BxfI2j1oBkQ77PS zCwk)mVj{Dyk<@K%$&;cv$U;wuD^E~)HvdedlZKa@+Z=^Wpo{Fx`7($ovR&jp1h4YD z2v~DsqX_u2u6p2#+V!`8dwX~5AF7pjO9ZA?SXlUE@BbrZ&UudkxFzm7h$d$IaxVWL z3gIwFNl7UtDJdF=(uWUu9zJ~N=q%MfpVReS1%HL9ZvQ=60v&iL0+q-kdS^7o>PSgt zEu|o9c0!e_pY@F-3`IRXDhRaq<$R!}L*LrSg2aVq zVds8(<92R;e`p{@NnTza)I)V+yk!mHgM&K3ci3Em$g`6McKa)zJR!x##%2){yVTm+ zicd(Wdi^@SvWf~B4Nc6;mn^Lw(;0v=?%W~g(n=qE%}WfS9$tU{{*@M%R*s?JrbTT+ zfnoJ$qH1u(Q^LoVeP+HlLlhq$pOo*@-Me?&&YeXvTwx=A`~JPk;FhbakTZH7_pHcg zW9HX%eNA6eQ_!&`kSdTi*Z$&^0b&H~1q|Ns*RMc@PXG3R%>N`inh=Qr_JPu&ZFF!|0+5_I3H8Vxvk$AszG%;bMqoZ@(TDbOYWaL#|9tKp*z~#Ov zDd~80k=k|s6V3?~od{}$X8GDHt4q&$%8`z z&XocVmxq@ZsJ=v}$!dfxIVorc0^RDz=ch4=iJfn5=Wj+UoM1rs_waMUWGy)UJ7L{o zbeWJYL9L*$kYN3{zOiw<*Xjr>uwjr)2?z*i5_HEc=<2bAfQX=T&(}t_UV%l zltG*B;j0ZI zw3{OY5fB?MJi_GFdq3x5X9OpO!V&PwcG~Ne-6N{BE-yRyl0k(f4lD(@^{Kk(m+by~ zYq4bPYUb@RWZ|a?2?>CR)eH@3Ay4Ssxf8y&=6JHKaE@U`czU$k)*eeCZ1D+OD@%&Z zXUYvPqyw9^JpeFZ%T1cVKUJd*&YxH$4SWB(e}J3CKmp6xwh@<@sOIlq*Cn7U`rldJ zi1^XR_JM(<+*{^;i!Wz`kBOp5m^%@c6qble;hp(~jyNdDyQY0+6Y4jb=qb3gTA=zL zEY=q!Gs9q2B{cQYgmY#|IMJmFnhAJInS23Ff|CSAq{Jhp<8NeY?`49W3+JA7_ zBUQGre?*j0^DS2A<|PKg)gUO8f$N1T0LHAlyBn~!(-zI1=`C0b|MJNfE?&e*y3E1B z!pT|K@#txT1|XTOK@}2DG%+uK%5dGf+GxO2W{+6fg>e$`kL-vsnTh7l;TWQ)n2IQg-4t$lA z+Zwgkz3RhN*-o~sgM)+7+x;>KM+bBa5{n@O=EBS5bvU}}Dzku!!x%0ch`vA}@ zV3DWEK{4>&ZXl<3bTn-`V51STOl9)rTaOu;Slb^pEby+ws;~k6(h=ggW%Tfa`!{gc z#0N*Mafz-mr|;z<-c1WzD5)( z{mxr!+=x~S>ZVrn@(hZXx;%$rED4iz)_kfGZHwrEcI^7-BVtZN+0V|eKGwlICRPBSWUa_?XmnsPe3fdu9 ztL@#Lx7bAGHgc&;YbJg=_wLz2vBjvmoJ({X+pTABov-y z=U1~=C#oDi4-9kxI7P4tlmwO?k13%lNgvB2Qy%R5Nhl^JHa8G*CJMaKS|W3R%)gq) zOElVGO-DM#v@9B4%6Y$@A6+4{mmxioxc46~0B8iVdt+7yD@D1R-}TM%-oGbgS5IsQ zg22gH^BVq&|1=M+@6QZ7*Q1>Wfq;z=j3UEO!~Wm2fbD9)tH+Noz|v63A3{4mWm}aY zxx+RX40{+rq!irI*;Z1>9N<10`9LYS)!X{|m%V)>eM^9s3q0BCGH4E#J3AZ*Sx7Z< zCWB*B{)-jXrfToP#Xr(6Y6DPUQm0$CTllD8F)%O?A;mx%TZHRHgj=}ha*HC9~+xJ&q zw2qlkQAAfd-!_4sK%)8J?D!J2@M9`qDAem8q^7!p*V-f4r4T<*JNiG0QLnQ5ax z0#<+rM#w4=n+pQQXcljSNKYB2G(s^63Cq2;aj49|mQadZQC$lpkR|+CWNXkGoNtFk` zeTziuaDsQofrkL?p0}Y+$vg%Lhp#pcjuh zPzQ7rw*co9LfP|^?a$rat$8ZZLXKlX$hi5I!#Nn_{4Xh-?ojye{9=X6LW|dAD59Zi zYk;T=EWs<)P|{%w7%&M$4np)5SRyf#9&tHgz?-viap8uXEHVRyi3m=^HxY3Pwgjhk zj;uyoV&q4~9qX4B6=eIIaC~y=49yKWqXm_(^@X@YIRGj* zOjw)&x%$Gf@>&S-{PN?+OZ1Y?1;|whkazD2-tA#V{TeM}1`HBfGvj~p=FOW6xEi0& zrH&dNYkadd2c1=?_#f73bH1&E@DW@SzcHE=08vLGqf9&TBhnhq387ZNxUOA{KIUJZ zUooh0&Zc37U5H^nh)*WpEnQ@7fG!*8L zbh6rsLgte4)SWb93P|o#Ze5HBWmfGxeIZt+Km{(O%XAb;VtKkeTdQTwfT#_!TJS5{ z7^5!KeYBg)u**?WQNfZw-MOoYJ!SmA6V%3+gh@Aqy?*N&*LxGy`)p7l=hjZ+!~!8A zH)xL*$u}$_A|Hy0Z%pKsmy=dhR3K6`;N=31wxx)eRiVC=_$>0jn+#C8PmGm6S+>Upp4zh>UnyJF5j`mRm3>4F5kx zIpsE-0+V(0A~CEB-Fx?9885Ip7v4<{1BPuef#1+TYz>@t_<-Q6S9<0A5MIxGRUGBsCPWpx!$rCXoif*4tc6 zQg~Hcn=xBsH^7t`nL_IF?MinG?5af2IRej5_h}@ZvxE`C<&rkihI%!~)HU}+zp){`Z zjGZklDOpNOaDMnu*~y9je5~+Bnk)P&80h$|^V~Ai#>Y^3wN~)0{(e(eCk+5XI#8CI z`?^qb-|Xz{Pp*6O^Yf@s1az>lpdg8F?(eJH+j9p71tA=&nVA`waDsE|Jr0Fh!?5t4 zq^3rRJB;YC4JLqDYJ9qEboI8Lo~=irq7gW4GP|QAJ==k#sc;+@0Z&{@R~H^Q?3j}A zjT?N)5SNYEb3h%aP`D!FMt@3prwxiJAaT*|3C`eN`ThGh%J|mD%*@Q8!NE|Vp)b-s zEFG%aPhYAq?)%WXv%7oE-u}&;8&JDo@=Ie(a_Ie2p)HHv54SqZkva|rhy#2)A>2}U z2n6#ur3lJN~4nT&-IZKXB?0F9m^D)!du~@bbaA z3o9!tvMLo7QE-_!3JMCqpV6QWM2**lSJl#slK{`pFM0$q)#c{qnqMFLOE_7_RC=}^ zzUnl0He)QJclU0@#Ke7Myn#1^n&*7lTxjmsP(FYGs*~*Fos|e6IpS$WaiQeA=IF?G z&g8?D#)UN?x6c4z`j>YbQ}5sEHrOXIj~|B{3v@vse)8l=C`|V!ki1ItfE7Xvrl``( zn80wsf(LtFxHNy)X)O~@kF{d)cQ%kaVV+T?w{*X)?s^OAgUpVL0$<3;qp}yibuV7f zHIXg#kMQlgC5XD7_LkPx(gKT&$bx-oHO?*k&4abLQ-&kcUB+0w;yEyTf$Y861Rm2v zsR=y#@~)(iAD0mo>y$(g1R*8~p(0~(mmN8lY=0K?I*@5R)!>A-T2F`idBw$zF`uHt6N ze65oA;A*D@GMnbAJBL~#!iVIw-2Bs2~;!*gq4~UE&jadnR?B1i8USS58h&=2llPLL4|aK5m2k z931?~BL|oeN=VEIla=l7@~*hpLLyW6;kP&5jWv-5#bsq(NeX8%GV5q8DCY!<_uEJm zRN+s3&g6U!2FRAa3j~0I=7CCHxA$tl2q6wUuNI#o2_({(s#VKIRbc-K3YJmid$^j?c*myvS4*JY zyA{1!{Pt}tR2iF{^e!J|Xn(m5{Nob>(R&{JLM~saWwxBB7$P8XtE#Kl+;4(-zR|Ev z46^$8I!S>3BArtY?$qD?RHn-PW5E8{X;$NH;?=O0f6zMxG}r8;?{4I{KKKSKiLh-i zjjo>F-{g5?o0Eer#D(T0;KN?f2niDr<>!HkMevcdaW1d?Ipc5Ie<%S^Z&<~}Q^+xf zxj+&9+|v`GmhZ+x3#vu-GkoKwzzhW$?>)XcSX|!)c2iv`+5tKqR{lWb5g0olPC=MP zXXJs(L@5)f=U=GDDb7+7O)eUodI&mTmm0F#^yOdu%(Lp-QDupTc|^AGgP2klcnF?ny>->qBkK}ABPK>hJp;-vZzmgI zZ-X^a4Fn#L3l1uO&&`?dtd1rrTqJ>afry36bgZrw`F2kmA+-9s6~WpK)%{8^rhvI0 zmD5J=L`D#Z_YQF;%ZdH(z!D;4Kgd$lU)R>wHW_%8igjI$?djlxUZm9EYikxkK@tQV z11f(!(-`2Rr{x@1FId}cO`a7y`u+Qs)x^j#dbYL;9h9iox8Q6-M@7|{WaVKsJB604 z5rl<)=j|nULH-U868m{Gh7@WBsh^%Au0MNe`3yf`BeDLqR>r4|GT59@7-!eXYVjp@ zwoKLyxM$pSNGx4i|5`+XOU%GMW>?10Cw4g!oeZwA_eM3uAn1ZU1YuJFSA)fz7)%@B z@NgU}S1RAb-!k@24&&7?Wr2tlu(zfJYhi1xa$uo$IY$N5pv?(~G7MBAvqB=Y00aU7 zlP>N+1;zRD-#K)}ABaR}J^-*Q$N9#(68t>u)>4o8(`G-~`bqRfdZr*T%4c}U_-7wIo$|}2F8GxK`Io%y}+b&!3@lA zYz&kU+s0--?-cJf#&VuUdk~=;)tU+S4cD2x>}`y z`{m1*%|6N5%}KyR5kPhzO(IwBzHTuWY8f4+ju#HDDhCS}6I86c&E6h&?i{14-XDJXL!MZblG5^@X4%UGxJn+tGT^fVkq>lqzTn9g$vUqKyXp{ z*O2~?=cJt|td>P0=j_10;e?2bO8LaMkTq41I6GF&Jp&a?9UeTCe0jr!Vp5akw?K9N<{R z=f>&WzYiT2x=sDyOjLTSTV1Ojj!x`*>yNB8D7)G~tWZd12L3X~?S$6@Oka^O_(s+YT6e6pQ^BYO@ia0SM2firV_pvp{Kv_U5HjBO#x4V{q|oOP2Wo z)ma{L9t^HQK^lc%S-6J_b4SnKBSuk9XPOr2!&lh7ryu>)W`T!8C_N-qAwEq=6VmJg zU<;eZ-esz9_P)8%48Co|$;W5fKm*BGDku2p!I_8(d;}YXs0+r;DUIWfxUNBWETG>f z-GWSJBB&%6Vb0zgMnD$^9XM@ZTn?b5GNGjhSFgb9(bdD*T2cS}q0fj5P+}5=RN_vh z6^QF1bkzeJP2YG;O^uC}RY?br%q&{)B&}x&5w@XhM`&|k_VwGZfsHgygM+-iy?t{M zik~HVS8Z$Sf<6h<*%^vCa1#TJQ79B-vp4VFg=-dKqPSBup)$1q_+mfO<^6a~Oc-X6}6l!!>I`GJ5Bm3ENZi?q{5U=9!Vu372UOGh8Z*4f{jc z`2F3ZEf8E1o;@R%-5FFtn6gwpLuGw>q+`hW-Pd)hOXTF?Af+S4#n7v3h_?u#8bMR= z8DS-0HT^wSVTB4ca%rr(`@87yR(s0XcJ4U}g%G7_BLN`Vde>BB2d}nV&hf4svPQh(?1^u6z&*1^5&n1ggRLBe0c$ zcr^t4i}&ad=RR4}>E5K3*G%TtZv^X z1FOBs{mWaPk)qdMcXf-{2}}jz15vl5)l!R0~tR5cLL1#^rE(e$bNF2R|XM) z5bpXUTpjF?-T#yA!RFmHJOiK(;CGnuAPY>{pPOA0pAiOZxT%8)iWOqMnf+UF&?%8l zDE0H3*D@%-R@&Wa*qd;W^55ac#Kc5+V%hyE4>19C{4Iljm3m}XfI87a69L9H=4HLr zp59(nARIuPte?h|-*XoDMg}`TC_@WTcfc67#)X}_QQ2zl+T9lqmX!%zd1+}n&;r1- zx;e&#dAsOyB8@O+z&`kZz5ijDC!OnwGBPsk9UU);@*xcmpd2w{D|7L1wumkgRfk`r$mw#fyo_AuX7L`ecs8A+S}OKZ4ZpDctVr~ z@5ps+ZK^Ds%syLCLYnBOhJ+#--S;f}K7XEz=KDu^_egTD8L+fNVRk#yOUuNKcje&#xO>#>DJD5;s z>G?Fgo!o6L5kdjYcfg=Emq7p5a9cX0=Z~uWtD+wkD8j6%_o23K#CaVL<`cc-;h*L z$c3Uc@thpHC4|)wL|JkU(t7Vd?!JT(tt~)M@(Kzr@53!!Xo}=-E(cTte54hquaC;U zc}@Ja8KdnE^~!$`B-^9b_JM4PPO-;*gotwAuRL%g4h#VDc*a<^CfeW!e_oN8bc5!7 zu8R(qZ~(?k~9@?e3{aMLbUVe77k^xI=9fK1Aqj%OuxM}T+fJv%` z24gA)hF(Cgp8;BS0kwxHY}yv5HkQ-&le|`CLq0o&1<)vGC(8fb;^tdjX}OPcnh+ap zVRu3|j+HmF%b%XXzm4T5qZ#cj_qr7w7*agEn?<`GlxX?+)xI36JTt1<^9^{0QL6q} z#%Q^kahK3QA?b!rw$t{$v5Wk+{nK{t{Y`FN^!gD zexKy}UR3K^qogr)bE5^F-E2)Y7gkB54>V+tAEgqfKcHxyY6eOXtNG0cI4 zb~T9h8VKDDR?pJFMMw2!ly0XkRO%1*$fNy(}nzKY%Fv@vU9UOt8ANyLi}=>c>?7yJ#kQbvdOeKHt(r zuo%=g%8x8gj3le_Cs`e~b@Yi_PkBS&>C0%&@8VyTpdk!*TKBNuICb6exyO?dNLwnP zzLD2BP*u4>zkjaDmAq9Jw~A4@cFq1zW99p}QZ7=ZyLTxjq1lpN)>mkCC?C(L+#JKi zPf_;1gWa2i7r7;ROlbpljkGsC z#li;6g*J1Ez@%EU|M`QD2KZ^|L`z$j{H52jccuNOhE}Trr}y^U^xsKo;%5bs$oy?G zG>f(Jqs_Cy93Bqn8r#t4{U{Ny)~$HC&VA{^@d0EAIJqGd%SKIswMPB^Tm|C&V%1Aa zOT<0k3763#&vN?w=jP{!4vbC}z>V)g*MaDqe@!#A!hj`XnYkGblYE_n5EU02YXRc- z8YogHi~ZUxA4j>XI^i}dR#k8;wMut9;h5eV11&+FajvT(glI2+c3_3zV<<}`ff!=}R|6V)f1gjELi;+{>C+WLf}?+@X%<3t%lNL17Wm>e zx&5gKjbyHQkdl#pJOrJwfUbrB)t=p7Lx>$=tlmcusV!jjKoxUHIW~Sif@6MO4?J)+ z@4wv}cpV)b0>zc}UmsQhqxuQTBqyf0_;^(aYxuXTlKx}(AeDLUy&}<#x(rPxKy|AF zk4Yt995ZSfKy>@|ZID~@#7VB#wDLnArp*H}x(bhF?N()BxOlM4om2xpmu)UQg6=8? z`O-UYCnzPCq0ji>YwlTOz4A&ymMYUv>l!@R*G2@zFBFXiO@UXD4qTAT;{hWAZwov~YFnv>a@_?7i<7#-uF%!h zGMP%;fd6(u3s&(acV{ul%>LUn{nbtpkxPnlgCB$YtqkqCLY@?DgD4;+-0PD7_X&Rv`km!lKtE2g_48WS-4py#5kU@r3Rfhjm*}clFq$q&q z1QO_G2dMyQ7Dn7EUwV4BMvPqMqv)MorPX4w&9(kLTqdC_E(udSpl%wdkkg?tGAC%y zuhu_D0_zk(OF0nKywT zT?E@3$bkk8zW+Q(15`m0Fkq0$$SNCa|HpG|Qtg<*LWcI=O_%t6O{9pL76 zTN&mA1`ETkKdZI4tm!emOGAZ;o0|%zn5^RU(XAH*k^OatKQp&x0ygHM1n!!2X--Hp z^(R2Q49Kv{p6-181$|m$tmJHufpSMoGY3$$SJ?DW0rwKmBu9r#GWc4K_WrCsTQndc za8<$WhoF+#Be+rLI*$o!rowGeEp6mR!zc_N3I%v1s@43LYY;T?{B~s||G6e+DG27! zN1(UO0bg?sO1#aJ?Ex!j(gj|UN=8gsdK$#Oa_FK#9)y9o6MwI+l0o}QhE^2Vm=>xh zomZbp-M@iP%q$-dZHb;5e39s4u&)6ngEko`v~JOWTnaTiE}m`U6rgXJ7P>DH3&^$RN;*!gNKXMc z%nIT%2MQ5+G6QhpmY^_Szj31tf)aRNdt7Hh38y!!0~Q_S(t!=%N*7yEE&sawHQUvfDr-#p*oO}gJnBZbc^|H?K}*R z$+d^z1GJ|OA9B;W=D~`Y2iHzZD!-8{Sfwn19zYCCAdo`)yzkr2PBk$5Sb?z!X$*8- zpSn5)ivbEPI8nOT19D)7I*9MK9JwnWMX?oZ-xe7pKzbZ5u+q0e&i6wsqp#z;SpfjVh-eK3CKetKu>d}A#0mu_ z?nLmQ!_xw`%pog|eXzOcDa{ysFpr0b1Ofv6PNgW8NMB-2+&WSpoKIl2K`1=ntE?dK zBMb-`4rMCj4`tB zkYXQVx@z15pr+8kLl%8kaGDT9d`0(9O3x_w-V%zREMbZX!k*K}qF*TgUn(N0>+qe_7oX zF+q2+7c%%)C_A41VpgiXntGc5*;@MC@te=?VNj4k?rfU>RR1=XVE@?6wsEc9#?|GZ zltc~Hc9AF7*`DH;nl&d@S4%YbZeapK4{w`qf%E~~z=t=6*h(z`%EA-QWsco>S7u+I z`>aoO_sFS!{83KG@p5CfxovqnucU-XK9>Xp=c=kIgvo)NMa>z(f?q!Q2f9MjN8M}; zJ7K8FUlRr%?-5~PVQu<1!t03*EzmOQh9^bfY5sZ+$K1NCi8*X9#tqM58eQ!GmCL+x z9BHY6wy_r5N~LEUh3s5aPoI)`dV0=*2@kQ7g5z*#W`-E{OKGV<;MoanjmshX@UT+1Wt}Z zNFuOxpFhOAN)gsf5*2@cvAHiz`t%5HI2OukB-WXmqdxHE!xNUM1&rZQRmc;gm=uEF zd$vcCC#bP%kTVeD!RADmJ+PWXTP|XvfM6ZY*Mn?1V9c1YI9^3|iad#g|2Gz(o@ok- zOHHMc_1#2)hp-i@<9Y9TVR`vd&vwo$G=!i2c&l8x2Eo7*ushmkg9(X(v$IJ_%nCp| zVgX3{{Q0wvv;f&qg9Yt%OL$xWjJ)sB&J}CJC=jKgkc1}OI8a|?1NO95VjjQ9%8KOB zfT;;JEmH?a1!CtwIXOA`ZvP~*HdKR{e;ez4V?sd*AqJqK+>PdEs`&Y6?J zpALU^J+^!qx_4SMxG#lI{)y_dRe=UE2!+xzGN3Wf?;me1^-%lDGL8N5hRNe*OpCF< zT~7E$3z8TNj%jl+QS&T`5-Ad+fG_+s@5(|$c(!@g->>~VEzQc^{Z3wcvz@;`U1MV- zf_eUJ{Bng>{q{vSkW6VooWsY)L?*7=TKVC_cfcjbP)#qC>Z;u6{9w}q4Z-l*JUb0Q z>}`NI!oIGkLO5IVmU*wo3nRWh(-=2DZ{g|VBRCV`EYY`w2;*XYsa~SyF4OlBbuK1>`BDI}zlg!O>AXl<&bND@-UZ z9^SI-I`Et?hwN?7Ahl9)oVT}Q2g);pV=@+~BsKuQ5H{0ua*(kOZ)L#@L%}tv-nJ%V zVLQU>Cmf6i=xtD<2QTahC5U3|48-hIajZ;9&}oT0zhZiN+JkNbcw7aBwCB%zjYiCc z@HL*XXplq8Ld10rOeInfV=feZjYV3US18E($a+wHnnhppnwyy`3><$}`N}53$CA6n ziquy>-v84u9SBsU+xc10^=Fam>&^{s^ z;S8;@N;?vl19r9-czjqpH!2JWt*oqIEIJPkq~J58u!A160oCjZwjV<~0{Aij04Wc? z$7~amlTTApc6+u@4ROIcA|H4V3ZSdSvI0E%G*od*W(v1dRnHj(DFy`#U%&1@vdIM- z6cN3|$&Py%_v3@3U0&rpQs}P)U1C|pWr-Tc7Nk?!@3>8feia#B^ z0zjF;3rSu~Np}4TiLp}#myKI6Jy&dq8NwRI)Mk$>|$Yi zWmrx)_=<*+u>%|fDTzv|s+H!nFa3NLJBfDo_WBv3+bqB!1)fTsR$W!q9Z^0ku?-N@ z9)a)zjYU~<0aWbl?4;LjuNc5@DFR=F{>o*n8W IW%Ka=0f!#=E&u=k literal 0 HcmV?d00001 diff --git a/ComputeGraph/examples/simple/README.md b/ComputeGraph/examples/simple/README.md index fdb0d85a..d9489949 100644 --- a/ComputeGraph/examples/simple/README.md +++ b/ComputeGraph/examples/simple/README.md @@ -383,13 +383,20 @@ The first line is the important one: OUT *b=this->getWriteBuffer(); ``` -We get a pointer to be able to write in the output FIFO. This pointer has the datatype OUT coming from the template so can be anything. +We get a pointer to be able to write in the output FIFO. This pointer has the datatype OUT coming from the template so can be anything. **Those functions (`getWriteBuffer` and/or `getReadBuffer`) must always be used even if the node is doing nothing because FIFOs are only updated when those functions are used.** The code in the loop is casting an `int` (the loop index) into the `OUT` datatype. If it is not possible it won't typecheck and build. +```C++ +for(int i=0;i