FIG. 8 is a flowchart illustrating an example computer-implemented method 800 for generating program code for an integrated circuit device. In various examples, the method 800 can be performed by a computing device that includes a processor and a memory operable to store instructions that can be executed by the processor, the instructions including ones for performing the steps of the method 800. In various examples, the method 800 may be embodied on a non-transitory computer readable medium.
Referring to FIG. 8, a compiler may generate an input data set that describes the operations to be performed by an integrated circuit device. The integrated circuit may receive the input data set (block 810). The input data set may be organized in a graph, for example a dataflow graph, having connections between nodes. The nodes in the graph may represent operations to be performed by an execution engine, for example, a first execution engine or a second execution engine, of an integrated circuit device and the connections between the nodes may represent data and/or resource dependencies between the nodes. Because of the dependencies, operations between the execution engines may need to be synchronized.