IP Library Granted Patent US 11,755,382
Granted Patent B2
US 11,755,382 · App. 16/177,680 · Granted Sep 12, 2023

Programming flow for multi-processor system

Inventors: Michael L. Purnell (Scotts Valley, CA); Geoffrey N. Ellis (Santa Cruz, CA); Teng-I Wang (Yorba Linda, CA)
Assignee: Coherent Logix, Incorporated
G06F9/5077G06F8/443G06F9/3877G06F9/5038G06F9/5066G06F13/28
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 11,755,382
App. No.
16/177,680
Granted
Sep 12, 2023
Kind
B2
Abstract

Various embodiments are disclosed of a compilation with optimization for multi-processor system with processing elements optimized for high performance and low power dissipation and an associated method of programming the processing elements. Application source code may be initially compiled into an intermediate representation. Following the initial compilation, resources may be mapped and communication synthesis performed. Simulation and debug may be performed prior to loading an executable image onto the multi-processor system. At each step, checks may be performed for possible optimizations, and one or more steps repeated using results of the checks.

Claims (69)

1. A method, comprising:

performing a front-end compilation using application source code to generate a plurality of intermediate representations and connectivity information, wherein a particular intermediate representation of the plurality of intermediate representations corresponds to a particular task of a plurality of tasks, wherein the connectivity information includes a plurality of connections, and wherein a particular connection specifies a communication between a first task of the plurality of tasks and a second task of the plurality of tasks;

mapping logical objects included in the application source code to physical resources included in a multi-processor array using the plurality of intermediate representations and the connectivity information to generate a resource map, wherein the multi-processor array includes a plurality of processors and a plurality of data memory routers arranged in an interspersed fashion, wherein the plurality of data memory routers includes a given data memory router configured to transfer instructions and data to a different data memory router;

selecting a respective implementation for each connection in the plurality of connections;

performing a first optimization operation using the plurality of intermediate representations to generate a plurality of optimized intermediate representations;

re-mapping the logical objects based on results of the first optimization operation;

performing a first back-end compilation and communication synthesis using the plurality of optimized intermediate representations to generate assembler code, wherein performing the communication synthesis includes selecting an implementation for a communication between a plurality of variants based on relative location of the plurality of variables and on the hardware resources available;

performing a second optimization operation using the assembler code to generate optimized assembler code;

generating executable code using the optimized assembler code;

simulating the executable code to generate test results;

performing a second back-end compilation in response to determining further optimization is possible based on the test results; and

loading the executable code onto the multi-processor array.

2. The method of claim 1 , wherein performing the front-end compilation includes:

parsing the application source code to generate an initial intermediate representation;

performing at least one second optimization operation using the initial intermediate representation to generate the plurality of intermediate representations;

identifying, using the plurality of intermediate representations, connectivity between the plurality of tasks to generate the plurality of connections; and

storing the plurality of intermediate representations and connectivity information in a project database.

3. The method of claim 1 , wherein mapping the logical objects includes:

assigning the particular task of the plurality of tasks to a particular processor of the plurality of processors; and

assigning a variable associated with the particular task to a particular data memory router of the plurality of data memory routers.

4. The method of claim 1 , wherein selecting the respective implementation for each connection in the plurality of connections includes selecting a direct memory access for transferring data from a sender to a receiver included in the particular connection of the plurality of connections.

5. The method of claim 1 , wherein performing the first optimization operation using the plurality of intermediate representations to generate the plurality of optimized intermediate representations includes vectoring a loop of multiple instructions to utilize a subset of the of the plurality of processors.

6. A computer system, comprising:

one or more memories configured to store instructions; and

one or more processors configured to receive instructions from the one or more memories and execute the instructions to cause the computer system to perform operations including:

performing a front-end compilation using application source code to generate a plurality of intermediate representations and connectivity information, wherein a particular intermediate representation of the plurality of intermediate representations corresponds to a particular task of a plurality of tasks, wherein the connectivity information includes a plurality of connections, and wherein a particular connection specifies a communication between a first task of the plurality of tasks and a second task of the plurality of tasks;

mapping logical objects included in the application source code to physical resources included in a multi-processor array using the plurality of intermediate representations and the connectivity information to generate a resource map, wherein the multi-processor array includes a plurality of processors and a plurality of data memory routers arranged in an interspersed fashion, wherein the plurality of data memory routers includes a given data memory router configured to transfer instructions and data to a different data memory router;

selecting a respective implementation for each connection in the plurality of connections;

performing a first optimization operation using the plurality of intermediate representations to generate a plurality of optimized intermediate representations;

performing a back-end compilation and communication synthesis using the plurality of optimized intermediate representations to generate assembler code, wherein performing the communication synthesis includes selecting an implementation for a communication between a plurality of variants based on relative location of the plurality of variables and on the hardware resources available;

performing a second optimization operation using the assembler code;

generating executable code using the optimized assembler code;

simulating the executable code to generate a simulation result that includes performance information;

in response to determining performance optimizations are possible based on the performance information included in the simulation result, re-mapping the logical objects based on the performance information; and

in response to determining that there is a behavioral issue with executable code based on the simulation result, modifying at least the application source code based on the simulation result, otherwise, loading the executable code onto the multi-processor array.

7. The computer system of claim 6 , wherein performing the front-end compilation includes:

parsing the application source code to generate an initial intermediate representation;

performing at least one second optimization operation using the initial intermediate representation to generate the plurality of intermediate representations;

identifying, using the plurality of intermediate representations, connectivity between the plurality of tasks to generate the plurality of connections; and

storing the plurality of intermediate representations and connectivity information in a project database.

8. The computer system of claim 6 , wherein mapping the logical objects includes:

assigning the particular task of the plurality of tasks to a particular processor of the plurality of processors; and

assigning a variable associated with the particular task to a particular data memory router of the plurality of data memory routers.

9. The computer system of claim 6 , wherein selecting the respective implementation for each connection in the plurality of connections includes selecting a direct memory access for transferring data from a sender to a receiver included in the particular connection of the plurality of connections.

10. The computer system of claim 6 , wherein performing the first optimization operation using the plurality of intermediate representations to generate the plurality of optimized intermediate representations includes vectoring a loop of multiple instructions to utilize a subset of the plurality of processors.

11. The computer system of claim 6 , wherein generating the executable code using the plurality of optimized intermediate representations includes generating a respective object code for each task of the plurality of tasks using a corresponding optimized intermediate representation of the plurality of optimized intermediate representations.

12. A non-transitory computer-accessible storage medium having programming instructions stored therein that, in response to execution by a computer system, causes the computer system to perform operations comprising:

performing a front-end compilation using application source code to generate a plurality of intermediate representations and connectivity information, wherein a particular intermediate representation of the plurality of intermediate representations corresponds to a particular task of a plurality of tasks, wherein the connectivity information includes a plurality of connections, and wherein a particular connection specifies a communication between a first task of the plurality of tasks and a second task of the plurality of tasks;

mapping logical objects included in the application source code to physical resources included in a multi-processor array using the plurality of intermediate representations and the connectivity information to generate a resource map, wherein the multi-processor array includes a plurality of processors and a plurality of data memory routers arranged in an interspersed fashion, wherein the plurality of data memory routers includes a given data memory router configured to transfer instructions and data to a different data memory router;

selecting a respective implementation for each connection in the plurality of connections;

performing a first optimization operation using the plurality of intermediate representations to generate a plurality of optimized intermediate representations;

re-mapping the logical objects based on results of the first optimization operation;

performing a first back-end compilation and communication synthesis using the plurality of optimized intermediate representations to generate assembler code, wherein performing the communication synthesis includes selecting an implementation for a communication between a plurality of variants based on relative location of the plurality of variables and on the hardware resources available;

performing a second optimization operation using the assembler code to generate optimized assembler code;

generating executable code using the optimized assembler code;

simulating the executable code to generate test results that include performance information;

performing a second back-end compilation in response to determining, based on the performance information, a performance optimization is possible; and

loading the executable code onto the multi-processor array.

13. The non-transitory computer-accessible storage medium of claim 12 , wherein performing the front-end compilation includes:

parsing the application source code to generate an initial intermediate representation;

performing at least one second optimization operation using the initial intermediate representation to generate the plurality of intermediate representations;

identifying, using the plurality of intermediate representations, connectivity between the plurality of tasks to generate the plurality of connections; and

storing the plurality of intermediate representations and connectivity information in a project database.

14. The non-transitory computer-accessible storage medium of claim 12 , wherein mapping the logical objects includes:

assigning the particular task of the plurality of tasks to a particular processor of the plurality of processors; and

assigning a variable associated with the particular task to a particular data memory.

15. The non-transitory computer-accessible storage medium of claim 12 , wherein selecting the respective implementation for each connection in the plurality of connections includes selecting a direct memory access for transferring data from a sender to a receiver included in the particular connection of the plurality of connections.

16. The non-transitory computer-accessible storage medium of claim 12 , wherein performing the first optimization operation using the plurality of intermediate representations to generate the plurality of optimized intermediate representations includes vectoring a loop of multiple instructions to utilize a subset of the plurality of processors.

17. The non-transitory computer-accessible storage medium of claim 12 , wherein generating the executable code using the plurality of optimized intermediate representations includes generating a respective object code for each task of the plurality of tasks using a corresponding optimized intermediate representation of the plurality of optimized intermediate representations.

Assignments (4)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 8, 2025
From: PACIFIC CAP ACQUISITION FUND, LLC
To: HYPERX HOLDINGS LLC
Reel/Frame 072342/0090 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 6, 2025
From: COHERENT LOGIX, INC.
To: PACIFIC CAP ACQUISITION FUND, LLC
Reel/Frame 072370/0394 →
SECURITY INTEREST Recorded Apr 11, 2024
From: COHERENT LOGIX, INCORPORATED
To: ACP POST OAK CREDIT I LLC
Reel/Frame 067097/0363 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 21, 2019
From: PURNELL, MICHAEL L.; ELLIS, GEOFFREY N.; WANG, TENG-I
To: COHERENT LOGIX, INCORPORATED
Reel/Frame 048075/0940 →