IP Library Granted Patent US 9,038,041
Granted Patent B2
US 9,038,041 · App. 11/644,189 · Granted May 19, 2015

Stream processor with compiled programs

Inventors: Jonathan Salz (San Francisco, CA); Richard S. Tibbetts (Arlington, MA)
Assignee: TIBCO Software, Inc.
G06F8/34G06F8/41
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,038,041
App. No.
11/644,189
Granted
May 19, 2015
Kind
B2
Abstract

A stream processing platform that provides fast execution of stream processing applications within a safe runtime environment. The platform includes a stream compiler that converts a representation of a stream processing application into executable program modules for a safe environment. The platform allows users to specify aspects of the program that contribute to generation of modules that execute as intended. A user may specify aspects to control a type of implementation for loops, order of execution for parallel paths, whether multiple instances of an operation can be performed in parallel or whether certain operations should be executed in separate threads. In addition, the stream compiler may generate executable modules in a way that cause a safe runtime environment to allocate memory or otherwise operate efficiently.

Claims (30)

1. A method of generating machine-executable instructions for processing a stream of values, the method comprising:

generating machine-executable instructions to be executed in processing inputs of at least one input stream to generate outputs of at least one output stream, the machine-executable instructions defining at least one data path and each data path comprising at least one operation, wherein generating the machine-executable instructions comprises generating the instructions such that executing the machine-executable instructions to process each input of the at least one input stream comprises executing operations of the at least one data path in a same deterministic order for each input, the deterministic order incorporating each of the operations of the at least one data path, and wherein generating the machine-executable instructions comprises:

receiving a representation of processing to be performed on the at least one input stream to produce the at least one output stream, the representation including a plurality of operators and a data flow, wherein at least some of the plurality of operators are arranged in the data flow in at least one loop, wherein the data flow includes the at least one data path and the plurality of operators correspond to the operations of the at least one data path that are to be executed in the deterministic order for each input of the at least one input stream;

receiving a user input indicating at least one implementation type, corresponding to each of the at least one loop, that is to be used in compiling instructions for each of the at least one loop and in determining the deterministic order in which the plurality of operators, including operators of the at least one loop, will be executed for each input of the at least one input stream; and

compiling the representation into the machine-executable instructions, the compiling comprising at least (i) forming an intermediate representation of the plurality of operators, the data flow including the plurality of operators, and the at least one loop each having the corresponding implementation type indicated by the user input, (ii) forming an executable code model for stream processing based on the intermediate representation, and (iii) forming the machine-executable instructions based on the executable code model, wherein the executable code model defines the deterministic order in which the operations of the data flow will be executed for each input of the at least one input stream and forming the machine-executable instructions based on the executable code model comprises generating a sequence of instructions corresponding to the operations of one of the at least one data path, wherein the sequence specifies an order of execution of instructions of the sequence that matches the same deterministic order such that execution of the machine-executable instructions for each input of the at least one input data stream comprises executing the sequence of instructions corresponding to the operations in the same deterministic order, and wherein the sequence of instructions defines instructions for recursively executing instructions corresponding to operators of a loop of the at least one loop when a corresponding implementation type of the loop is a first type and defines instructions for non-recursively executing instructions corresponding to operators of a loop of the at least one loop when a corresponding implementation type of the loop is a second type.

2. The method of claim 1 , wherein receiving a representation comprises receiving the representation through a graphical user interface.

3. The method of claim 1 , wherein compiling the representation comprises:

generating a set of ordered statements in a source code for a computer programming language;

generating an executable representation of the ordered statements.

4. The method of claim 3 , wherein:

generating a set of ordered statements comprises generating a JAVA program; and

generating an executable representation comprises compiling the set of ordered statements in a JAVA compiler.

5. The method of claim 1 , wherein compiling the representation into machine-executable instructions comprises:

compiling the representation into machine-executable instructions that, in response to application of the input of an input data stream, perform the operations on the input of the input data stream in the same deterministic order, the operations producing a value of an output stream of the at least one output stream.

6. The method of claim 1 , wherein compiling the representation into machine-executable instructions comprises operating a plurality of code generators, each code generator associated with an operator of the plurality of operators.

7. The method of claim 1 , wherein the first type of loop is a recursive type and the second type of loop is a non-recursive type.

8. The method of claim 7 , wherein each of the at least one loop is one of the recursive type or the non-recursive type.

9. At least one non-transitory computer-readable storage medium having encoded thereon executable instructions that, when executed by at least one processor, cause the at least one processor to carry out a method of generating machine-executable instructions for processing a stream of values, the method comprising:

generating machine-executable instructions to be executed in processing inputs of at least one input stream to generate outputs of at least one output stream, the machine-executable instructions defining at least one data path and each data path comprising at least one operation, wherein generating the machine-executable instructions comprises generating the instructions such that executing the machine-executable instructions to process each input of the at least one input stream comprises executing operations of the at least one data path in a same deterministic order for each input, the deterministic order incorporating each of the operations of the at least one data path, and wherein generating the machine-executable instructions comprises:

receiving a representation of processing to be performed on the at least one input stream to produce the at least one output stream, the representation including a plurality of operators and a data flow, wherein at least some of the plurality of operators are arranged in the data flow in at least one loop, wherein the data flow includes the at least one data path and the plurality of operators correspond to the operations of the at least one data path that are to be executed in the deterministic order for each input of the at least one input stream;

receiving a user input indicating at least one implementation type, corresponding to each of the at least one loop, that is to be used in compiling instructions for each of the at least one loop and in determining the deterministic order in which the plurality of operators, including operators of the at least one loop, will be executed for each input of the at least one input stream, wherein each implementation type of the at least one implementation type is a recursive type or a non-recursive type; and

compiling the representation into the machine-executable instructions, the compiling comprising at least (i) forming an intermediate representation of the plurality of operators, the data flow including the plurality of operators, and the at least one loop each having the corresponding implementation type indicated by the user input, (ii) forming an executable code model for stream processing based on the intermediate representation, and (iii) forming the machine-executable instructions based on the executable code model, wherein the executable code model defines the deterministic order in which the operations of the data flow will be executed for each input of the at least one input stream and forming the machine-executable instructions based on the executable code model comprises generating a sequence of instructions corresponding to the operations of one of the at least one data path, wherein the sequence specifies an order of execution of instructions of the sequence that matches the same deterministic order such that execution of the machine-executable instructions for each input of the at least one input data stream comprises executing the sequence of instructions corresponding to the operations in the same deterministic order, and

wherein the sequence of instructions defines instructions for recursively executing instructions corresponding to operators of a loop of the at least one loop when a corresponding implementation type of the loop is a recursive type and defines instructions for non-recursively executing instructions corresponding to operators of a loop of the at least one loop when a corresponding implementation type of the loop is a non-recursive type.

10. An apparatus comprising:

at least one processor; and

at least one computer-readable storage medium having encoded thereon executable instructions that, when executed by at least one processor, cause the at least one processor to carry out a method of generating machine-executable instructions for processing a stream of values, the method comprising:

generating machine-executable instructions to be executed in processing inputs of at least one input stream to generate outputs of at least one output stream, the machine-executable instructions defining at least one data path and each data path comprising at least one operation, wherein generating the machine-executable instructions comprises generating the instructions such that executing the machine-executable instructions to process each input of the at least one input stream comprises executing operations of the at least one data path in a same deterministic order for each input, the deterministic order incorporating each of the operations of the at least one data path, and wherein generating the machine-executable instructions comprises:

receiving a representation of processing to be performed on the at least one input stream to produce the at least one output stream, the representation including a plurality of operators and a data flow, wherein at least some of the plurality of operators are arranged in the data flow in at least one loop, wherein the data flow includes the at least one data path and the plurality of operators correspond to the operations of the at least one data path that are to be executed in the deterministic order for each input of the at least one input stream;

receiving a user input indicating at least one implementation type, corresponding to each of the at least one loop, that is to be used in compiling instructions for each of the at least one loop and in determining the deterministic order in which the plurality of operators, including operators of the at least one loop, will be executed for each input of the at least one input stream, wherein each implementation type of the at least one implementation type is a recursive type or a non-recursive type; and

compiling the representation into the machine-executable instructions, the compiling comprising at least (i) forming an intermediate representation of the plurality of operators, the data flow including the plurality of operators, and the at least one loop each having the corresponding implementation type indicated by the user input, (ii) forming an executable code model for stream processing based on the intermediate representation, and (iii) forming the machine-executable instructions based on the executable code model, wherein the executable code model defines the deterministic order in which the operations of the data flow will be executed for each input of the at least one input stream and forming the machine-executable instructions based on the executable code model comprises generating a sequence of instructions corresponding to the operations of one of the at least one data path, wherein the sequence specifies an order of execution of instructions of the sequence that matches the same deterministic order such that execution of the machine-executable instructions for each input of the at least one input data stream comprises executing the sequence of instructions corresponding to the operations in the same deterministic order, and wherein the sequence of instructions defines instructions for recursively executing instructions corresponding to operators of a loop of the at least one loop when a corresponding implementation type of the loop is a recursive type and defines instructions for non-recursively executing instructions corresponding to operators of a loop of the at least one loop when a corresponding implementation type of the loop is a non-recursive type.

Assignments (19)
PATENT SECURITY AGREEMENT Recorded Aug 15, 2025
From: CLOUD SOFTWARE GROUP, INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 072488/0172 →
SECURITY INTEREST Recorded May 24, 2024
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 067662/0568 →
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
CHANGE OF NAME Recorded Feb 7, 2023
From: TIBCO SOFTWARE INC.
To: CLOUD SOFTWARE GROUP, INC.
Reel/Frame 062714/0634 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
RELEASE REEL 052115 / FRAME 0318 Recorded Oct 3, 2022
From: KKR LOAN ADMINISTRATION SERVICES LLC
To: TIBCO SOFTWARE INC.
Reel/Frame 061588/0511 →
RELEASE (REEL 034536 / FRAME 0438) Recorded Sep 30, 2022
From: JPMORGAN CHASE BANK, N.A.
To: TIBCO SOFTWARE INC.
Reel/Frame 061574/0963 →
RELEASE (REEL 054275 / FRAME 0975) Recorded May 7, 2021
From: JPMORGAN CHASE BANK, N.A.
To: TIBCO SOFTWARE INC.
Reel/Frame 056176/0398 →
SECURITY AGREEMENT Recorded Nov 2, 2020
From: TIBCO SOFTWARE INC.
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 054275/0975 →
SECURITY AGREEMENT Recorded Mar 6, 2020
From: TIBCO SOFTWARE INC.
To: KKR LOAN ADMINISTRATION SERVICES LLC, AS COLLATERAL AGENT
Reel/Frame 052115/0318 →
SECURITY INTEREST Recorded Dec 5, 2014
From: TIBCO SOFTWARE INC.; TIBCO KABIRA LLC; NETRICS.COM LLC
To: JPMORGAN CHASE BANK., N.A., AS COLLATERAL AGENT
Reel/Frame 034536/0438 →
CHANGE OF NAME Recorded Jul 22, 2014
From: TIBCO STREAMBASE, INC.
To: TIBCO STREAMBASE LLC
Reel/Frame 033379/0866 →
NUNC PRO TUNC ASSIGNMENT Recorded Jul 22, 2014
From: TIBCO STREAMBASE LLC
To: TIBCO SOFTWARE INC.
Reel/Frame 033364/0073 →
MERGER AND CHANGE OF NAME Recorded Jul 22, 2014
From: STREAMBASE SYSTEMS, INC.; STROBELIGHT ACQUISITION CORP.
To: TIBCO STREAMBASE INC.
Reel/Frame 033363/0950 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 6, 2007
From: SALZ, JONATHAN; TIBBETTS, RICHARD S.
To: STREAMBASE SYSTEMS, INC.
Reel/Frame 018963/0081 →
CORRECT THE ASSIGNOR: TIBBETS, RICHARD S DOC DATE; 2/28/2007 PREVIOUSLY RECORDED ON REEL 018983 FRAME 0081. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNOR: TIBBETS, RICHARD S. DOC DATE: 12/26/2006. Recorded Mar 6, 2007
From: JONATHAN, SALZ; TIBBETTS, RICHARD S.
To: STREAMBASE SYSTEMS, INC.
Reel/Frame 019032/0694 →
Continuity (2)
Provisional Application 60873006 · Dec 4, 2006
Related Publication 20080134158A1 · Jun 5, 2008