# US 11,442,794 B1 · Event assignment for synchronization of concurrent execution engines

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 11,442,794 B1
- Document ID: US11442794B1
- Status: Granted
- Kind: B1
- Application number: 16/585,575
- Filed: 2019-09-27
- Granted: 2022-09-13
- Earliest claimed: 2019-09-27
- Assignees: Amazon Technologies, Inc.
- Applicants: Amazon Technologies, Inc.
- Inventors: Drazen Borkovic
- Web page: https://patentgrep.com/patent/US11442794B1

## CPC

- G06F 9/52: Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F 9/30087: {Synchronisation or serialisation instructions}
- G06F 9/30098: {Register arrangements}
- G06F 9/3838: {Dependency mechanisms, e.g. register scoreboarding}
- G06N 3/063: using electronic means
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- G06N: COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS

## Abstract

Techniques for synchronizing operations of execution engines of an integrated circuit device are disclosed. A description of a plurality of operations to be performed by the execution engines may be obtained. The plurality of operations may be connected through a plurality of edges. A dependency vector may be generated for each operation of the plurality of operations. The dependency vector of a corresponding operation may include a set of values that are calculated based on the set of values of one or more dependency vectors calculated for one or more immediately preceding operations of the plurality of operations. An event register of a plurality of event registers may be assigned, for each edge of one or more of the plurality of edges, to the corresponding edge based on the dependency vector generated for a start operation associated with the corresponding edge.

## Claims

### Claim 1

A method for synchronizing operations of execution engines of an integrated circuit device executing a neural network, the method comprising:
receiving, at a computing device, a description of the neural network;
obtaining, based on the description of the neural network, a plurality of operations to be performed by N execution engines of the integrated circuit device, wherein the plurality of operations are connected through a plurality of edges corresponding to data dependencies or resource dependencies between the plurality of operations;
generating a dependency vector for each operation of the plurality of operations, wherein the dependency vector of a corresponding operation includes N values that are calculated based on which execution engine of the N execution engines is to perform the corresponding operation and further based on the N values of one or more dependency vectors calculated for one or more immediately preceding operations of the plurality of operations; and
assigning, for each edge of one or more of the plurality of edges, an event register of a plurality of event registers to the corresponding edge based on a comparison between:
the dependency vector generated for a start operation associated with the corresponding edge; and
the dependency vector generated for an end operation associated with a previous edge of the plurality of edges, wherein the event register was previously assigned to the previous edge.

### Claim 2 (depends on 1)

The method of claim 1, further comprising:
for each edge of the one or more of the plurality of edges, determining that the N values of the dependency vector generated for the start operation associated with the corresponding edge are greater than or equal to the N values of the dependency vector generated for the end operation associated with the previous edge.

### Claim 3 (depends on 1)

The method of claim 1, wherein assigning the event register to the corresponding edge is further based on a second comparison between:
the dependency vector generated for a same-engine predecessor operation that immediately precedes an end operation associated with the corresponding edge; and
the dependency vector generated for the end operation associated with the previous edge.

### Claim 4 (depends on 3)

The method of claim 3, further comprising:
for each edge of the one or more of the plurality of edges, determining that the N values of the dependency vector generated for the same-engine predecessor operation are greater than or equal to the N values of the dependency vector generated for the end operation associated with the previous edge.

### Claim 5

A method comprising:
obtaining a description of a plurality of operations to be performed by multiple execution engines of an integrated circuit device, wherein the plurality of operations are connected through a plurality of edges;
generating a dependency vector for each operation of the plurality of operations, wherein the dependency vector of a corresponding operation includes a set of values that are calculated based on the set of values of one or more dependency vectors calculated for one or more immediately preceding operations of the plurality of operations; and
assigning, for each edge of one or more of the plurality of edges, an event register of a plurality of event registers in the integrated circuit device to the corresponding edge based on the dependency vector generated for a start operation associated with the corresponding edge.

### Claim 6 (depends on 5)

The method of claim 5, wherein the set of values are integers.

### Claim 7 (depends on 5)

The method of claim 5, wherein the integrated circuit device includes N number of execution engines to perform the plurality of operations, and wherein the dependency vector has N number of values.

### Claim 8 (depends on 5)

The method of claim 5, wherein the set of values are calculated further based on which execution engine of the multiple execution engines is to perform the corresponding operation.

### Claim 9 (depends on 5)

The method of claim 5, wherein the description of the plurality of operations is a description of a neural network.

### Claim 10 (depends on 5)

The method of claim 5, wherein assigning the event register to the corresponding edge is further based on the dependency vector generated for an end operation associated with a previous edge of the plurality of edges, wherein the event register was previously assigned to the previous edge.

### Claim 11 (depends on 10)

The method of claim 10, wherein assigning the event register to the corresponding edge is further based on a comparison between:
the dependency vector generated for the start operation associated with the corresponding edge; and
the dependency vector generated for the end operation associated with the previous edge.

### Claim 12 (depends on 11)

The method of claim 11, wherein assigning the event register to the corresponding edge is further based on a second comparison between:
the dependency vector generated for a same-engine predecessor operation that immediately precedes an end operation associated with the corresponding edge; and
the dependency vector generated for the end operation associated with the previous edge.

### Claim 13

A non-transitory computer-readable medium having stored therein instructions that, when executed by one or more processors, cause the one or more processors to execute a compiler, the compiler performing operations including:
obtaining a description of a plurality of operations to be performed by multiple execution engines of an integrated circuit device, wherein the plurality of operations are connected through a plurality of edges;
generating a dependency vector for each operation of the plurality of operations, wherein the dependency vector of a corresponding operation includes a set of values that are calculated based on the set of values of one or more dependency vectors calculated for one or more immediately preceding operations of the plurality of operations; and
assigning, for each edge of one or more of the plurality of edges, an event register of a plurality of event registers to the corresponding edge based on the dependency vector generated for a start operation associated with the corresponding edge.

### Claim 14 (depends on 13)

The non-transitory computer-readable medium of claim 13, wherein the set of values are integers.

### Claim 15 (depends on 13)

The non-transitory computer-readable medium of claim 13, wherein the integrated circuit device includes N number of execution engines to perform the plurality of operations, and wherein the dependency vector has N number of values.

### Claim 16 (depends on 13)

The non-transitory computer-readable medium of claim 13, wherein the set of values are calculated further based on which execution engine of the multiple execution engines is to perform the corresponding operation.

### Claim 17 (depends on 13)

The non-transitory computer-readable medium of claim 13, wherein the description of the plurality of operations is a description of a neural network.

### Claim 18 (depends on 13)

The non-transitory computer-readable medium of claim 13, wherein assigning the event register to the corresponding edge is further based on the dependency vector generated for an end operation associated with a previous edge of the plurality of edges, wherein the event register was previously assigned to the previous edge.

### Claim 19 (depends on 18)

The non-transitory computer-readable medium of claim 18, wherein assigning the event register to the corresponding edge is further based on a comparison between:
the dependency vector generated for the start operation associated with the corresponding edge; and
the dependency vector generated for the end operation associated with the previous edge.

### Claim 20 (depends on 19)

The non-transitory computer-readable medium of claim 19, wherein assigning the event register to the corresponding edge is further based on a second comparison between:
the dependency vector generated for a same-engine predecessor operation that immediately precedes an end operation associated with the corresponding edge; and
the dependency vector generated for the end operation associated with the previous edge.
