IP Library Granted Patent US 9,009,660
Granted Patent B1
US 9,009,660 · App. 11/564,723 · Granted Apr 14, 2015

Programming in a multiprocessor environment

Inventors: Patrick Robert Griffin (Framingham, MA); Walter Lee (Framingham, MA); Anant Agarwal (Weston, MA); David Wentzlaff (Cambridge, MA)
Assignee: Tilera Corporation
G06F9/48
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 9,009,660
App. No.
11/564,723
Granted
Apr 14, 2015
Kind
B1
Abstract

Programming in a multiprocessor environment includes accepting a program specification that defines a plurality of processing modules and one or more channels for sending data between ports of the modules, mapping each of the processing modules to run on a set of one or more processing engines of a network of interconnected processing engines, and for at least some of the channels, assigning one or more elements of one or more processing engines in the network to the channel for sending data between respective processing modules.

Claims (62)

1. A method for programming in a multiprocessor environment, the method comprising:

accepting by a computer a program specification that defines a plurality of processing modules and plural channels for sending data between ports of the modules with a first portion of the channels mapped at compile time and a second portion of the channels mapped at runtime and at least one of the plural channels being bi-directional and at least a different one of the channels being unidirectional;

mapping by the computer the first portion the processing modules of the program specification to run on a set of one or more processing engines of a network of interconnected processing engines and implementing for the second portion of the channels mapped at runtime a channel library routine that accesses a channel library that includes functional elements for defining the channels that are mapped at runtime to a set of physical paths in the network of interconnected processing engines; and

assigning by the computer according to the program specification and mapping to the one or more processing engines, the channels to one or more elements of the one or more of the interconnected processing engines to send data between respective processing modules.

2. The method of claim 1 , further comprising providing information for at least one destination processing engine for processing data arriving at the destination processing engine from a first port and data arriving at the destination processing engine from a second port.

3. The method of claim 1 , wherein at least one of the processing engines is used to execute more than one of the processing modules.

4. The method of claim 3 , wherein at least one channel between processing modules executing on the same processing engine is assigned memory associated with the processing engine for sending data between respective processing modules.

5. The method of claim 1 , wherein the one or more elements of one or more processing engines in the network assigned to a channel include one or more of:

a buffer within a processing engine for storing data sent over a channel;

buffer space in memory within a processing engine for storing data sent over a channel; and

buffer space in memory coupled to at least one processing engine for storing data sent over a channel.

6. The method of claim 1 , wherein the one or more elements of one or more processing engines in the network assigned to a channel include one or more of:

switches of processing engines along a route through the network between processing engines of respective processing modules; and

ports of processing engines coupled to data paths between processing engines along a route through the network between processing engines of respective processing modules.

7. The method of claim 1 , further comprising generating configuration specifying instructions for the processing modules to communicate over the mapped channels.

8. The method of claim 7 , further comprising executing the configuration specifying instructions on the sets of processing engines on which the processing modules are mapped.

9. The method of claim 1 , wherein a remaining portion of the processing modules and the channels are mapped during runtime.

10. The method of claim 1 , further comprising, for each of at least some of the channels, selecting memory resources for providing a buffer for storing data associated with the channel.

11. The method of claim 10 , wherein selecting memory resources comprises selecting among:

a buffer in a destination processing engine dedicated to storing only data associated with the channel; and

a buffer in a destination processing engine for storing data associated with multiple channels.

12. The method of claim 11 , wherein selecting memory resources further comprises selecting among

a buffer in a destination processing engine; and

buffer space in memory external to the destination processing engine.

13. The method of claim 12 , wherein the buffer space in memory external to the destination processing engine comprises an external memory module coupled to at least one processing engine along a route between processing engines of respective processing modules.

14. The method of claim 12 , wherein the buffer space in memory external to the destination processing engine comprises memory within at least one processing engine along a route between processing engines of respective processing modules.

15. The method of claim 2 , wherein the information for the destination processing engine comprises identifiers to distinguish data associated with a first channel from data associated with a second channel.

16. The method of claim 15 , wherein the identifiers comprise a tag for the first channel for matching received data to a buffer associated with the first channel, and a tag for the second channel for matching received data to a buffer associated with the second channel.

17. The method of claim 16 , wherein the processing engines match a tag in an incoming packet to a buffer dedicated to storing data associated with the channel identified by the tag.

18. The method of claim 1 , further comprising, for at least one channel between a port of a first processing module and a port of a second processing module, mapping the channel to a queue stored in shared memory accessible to a processing engine of the first processing module and a processing engine of the second processing module.

19. The method of claim 18 , further comprising allocating space for storing the queue in the shared memory according to a minimum buffer size indicated in the program specification.

20. The method of claim 1 , further comprising, for a channel mapped to a route between a first processing engine and a second processing engine, selecting memory resources for providing a buffer for storing data arriving at the second processing engine.

21. The method of claim 20 , further comprising selecting memory resources for providing a buffer for storing acknowledgement information arriving at the first processing engine from the second processing engine.

22. The method of claim 20 , wherein the memory resources comprise:

a buffer in the second processing engine for storing data that arrives at the second processing engine while the buffer has available storage space; and

memory external to the second processing engine for storing data that arrives at the second processing engine while the buffer does not have available storage space.

23. The method of claim 22 , wherein storing data that arrives at the second processing engine while the buffer does not have available storage space comprises causing the processing engine to send the received data and data in the buffer to the external memory.

24. The method of claim 22 , wherein the second processing engine reads data from the buffer if the buffer is not empty, and from the external memory if the buffer is empty.

25. The method of claim 22 , wherein the second processing engine reads data from the external memory if the external memory is not empty, and from the buffer if the external memory is empty.

26. The method of claim 2 , wherein at least one of the channels for sending data from one or more ports of any of multiple sender modules to a port of a receiver module is mapped to routes through the network from respective processing engines of the sender modules to the destination processing engine.

27. The method of claim 26 , wherein the information for the destination processing engine comprises an identifier to recognize data associated with a channel arriving from the first port and data associated with the channel arriving from the second port.

28. The method of claim 27 , wherein the identifier comprises a tag for the channel for inserting into packets sent from the first port and into packets sent from the second port.

29. The method of claim 27 , wherein the identifier comprises a tag for the channel for matching data received from the first port and data received from the second port to a buffer associated with the channel.

30. The method of claim 2 , wherein at least one of the channels for sending data from one or more ports of any of multiple sender modules to one or more ports of any of multiple receiver modules is mapped to routes through the network from respective processing engines of the sender modules to respective destination processing engines of the receiver modules.

31. The method of claim 30 , wherein the information for respective destination processing engines comprises an identifier to recognize data associated with a channel arriving from the first port and data associated with the channel arriving from the second port.

32. The method of claim 31 , wherein the identifier comprises a tag for the channel for inserting into packets sent from the first port and into packets sent from the second port.

33. The method of claim 31 , wherein the identifier comprises a tag for the channel for matching data received from the first port and data received from the second port to a buffer associated with the channel.

34. The method of claim 1 , wherein at least one of the channels for sending data from a port of a sender module to one or more ports of any of multiple receiver modules is mapped to routes through the network from a processing engine of the sender module to respective destination processing engines of the receiver modules.

35. A computer program product embodied on a computer-readable memory device, storing instructions for generating instructions to be executed in a network of interconnected processing engines, the computer program comprising instructions for causing a computer system to:

accept a program specification that defines a plurality of processing modules and plural channels for sending data between ports of the modules, with a first portion of the channels mapped at compile time and a second portion of the channels mapped at runtime and at least one of the plural channels being bi-directional and at least a different one of the channels being unidirectional;

map the first portion of the processing modules of the program specification to run on a set of one or more of the processing engines and implementing for the second portion of the channels mapped at runtime a channel library routine that accesses a channel library that includes functional elements for defining the channels that are mapped at runtime; and

assign according to the program specification and the mappings the channels to one or more elements of the one or more of the interconnected processing engines to send data between respective processing modules.

36. The computer program of claim 35 , further comprising instructions for causing a computer system to provide information for at least one destination processing engine for processing data arriving at the destination processing engine from a first port and data arriving at the destination processing engine from a second port.

37. The computer program of claim 35 , wherein at least one of the processing engines is used to execute more than one of the processing modules.

38. The computer program of claim 37 , wherein at least one channel between processing modules executing on the same processing engine is assigned memory associated with the processing engine for sending data between respective processing modules.

39. The computer program of claim 35 , wherein the one or more elements of one or more processing engines in the network assigned to a channel include one or more of:

a buffer within a processing engine for storing data sent over a channel;

buffer space in memory within a processing engine for storing data sent over a channel; and

buffer space in memory coupled to at least one processing engine for storing data sent over a channel.

40. The computer program of claim 35 , wherein the one or more elements of one or more processing engines in the network assigned to a channel include one or more of:

switches of processing engines along a route through the network between processing engines of respective processing modules; and

ports of processing engines coupled to data paths between processing engines along a route through the network between processing engines of respective processing modules.

Assignments (9)
RELEASE OF SECURITY INTEREST IN PATENT COLLATERAL AT REEL/FRAME NO. 42962/0859 Recorded Jul 13, 2018
From: JPMORGAN CHASE BANK, N.A., AS ADMINISTRATIVE AGENT
To: MELLANOX TECHNOLOGIES, LTD.; MELLANOX TECHNOLOGIES TLV LTD.; MELLANOX TECHNOLOGIES SILICON PHOTONICS INC.
Reel/Frame 046551/0459 →
SECURITY INTEREST Recorded Jun 23, 2017
From: MELLANOX TECHNOLOGIES, LTD.; MELLANOX TECHNOLOGIES TLV LTD.; MELLANOX TECHNOLOGIES SILICON PHOTONICS INC.
To: JPMORGAN CHASE BANK, N.A., AS ADMINISTRATIVE AGENT
Reel/Frame 042962/0859 →
DIVIDEND DECLARATION FROM EZCHIP SEMICONDUCTOR INC. TO THE STOCKHOLDER OF RECORD ON 6/2/2015 (EZCHIP INC., A DELAWARE CORPORATION) Recorded Feb 16, 2017
From: EZCHIP SEMICONDUCTOR INC.
To: EZCHIP, INC.
Reel/Frame 041736/0013 →
PURCHASE AGREEMENT Recorded Feb 16, 2017
From: EZCHIP, INC.
To: EZCHIP SEMICONDUCTOR LTD.
Reel/Frame 041736/0151 →
MERGER Recorded Feb 16, 2017
From: EZCHIP TECHNOLOGIES LTD.
To: EZCHIP SEMICONDUCTOR LTD.
Reel/Frame 041736/0321 →
MERGER Recorded Feb 16, 2017
From: EZCHIP SEMICONDUCTOR LTD.
To: MELLANOX TECHNOLOGIES, LTD.
Reel/Frame 041870/0455 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 16, 2017
From: EZCHIP SEMICONDUCTOR LTD.
To: EZCHIP TECHNOLOGIES, LTD.
Reel/Frame 041736/0253 →
MERGER Recorded Feb 16, 2017
From: TILERA CORPORATION
To: EZCHIP SEMICONDUCTOR INC.
Reel/Frame 041735/0792 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 5, 2006
From: GRIFFIN, PATRICK ROBERT; LEE, WALTER; AGARWAL, ANANT; WENTZLAFF, DAVID
To: TILERA CORPORATION
Reel/Frame 018583/0930 →
Continuity (1)
Provisional Application 60740692 · Nov 29, 2005