Closely-coupled processors (or hardware resources) may include additional processors, threads in a particular processor, additional cores in a central processing unit, additional processors mounted on the same substrate or board, and/or such devices provided within computers connected by a network fabric into a cluster, a grid, or a collection of resources.
Certain computations (e.g., parallel processing or parallel programming) may benefit from the availability of such hardware resources. For example, a complex simulation may run faster if the simulation is divided into portions and the portions are simultaneously run on a number of processing devices in a parallel fashion. Parallel computing arrangements may include a controller that determines how an application should be divided and what application portions go to which parallel processors. For example, a host computer that is running a simulation may act as the controller for a number of parallel processors.
In a distributed (or batch) computing arrangement, a client may provide a job to a scheduler. The scheduler may distribute the job into one or more tasks, and may provide the tasks to one or more hardware resources. The hardware resources may execute the tasks, and may provide results to the scheduler. The scheduler may combine the results into a single result, and may provide the single result to the client.
However, hardware resources implement multiple heterogeneous server platforms, and some of the server platforms may be incompatible with a parallel and/or distributed program. Thus, the parallel and/or distributed program may execute on hardware resources with compatible server platforms, but hardware resources with incompatible server platforms will be unavailable to the parallel and/or distributed program. This will limit the amount of hardware resources available to the parallel and/or distributed program.
The accompanying drawings, which are incorporated in and constitute a part of this specification, illustrate one or more implementations described herein and, together with the description, explain these implementations. In the drawings:
The following detailed description refers to the accompanying drawings. The same reference numbers in different drawings may identify the same or similar elements. Also, the following detailed description does not limit the invention.
Implementations described herein may include systems and/or methods that produce a client program that may be executable on multiple heterogeneous server platforms. For example, in one implementation, the systems and/or methods may receive and/or create a program (e.g., a technical computing environment (TCE) program) with a parallel or distributed construct, and may create a target component from the program. The systems and/or methods may identify executable content of the program executable outside the TCE, and may associate license information with the identified executable content of the program. The systems and/or methods may also combine the identified executable content of the program and the associated license information into a platform-independent, redistributable program, and may integrate the target component and the platform-independent, redistributable program into a target environment to produce a client program executable on multiple heterogeneous server platforms. The systems and/or methods may provide the client program to the multiple heterogeneous server platforms for execution.
A technical computing environment (TCE) may include any hardware, software, and/or a combination of hardware and software based logic that provides a computing environment that allows users to perform tasks related to disciplines, such as, but not limited to, mathematics, science, engineering, medicine, business, etc., more efficiently than if the tasks were performed in another type of computing environment, such as an environment that required the user to develop code in a conventional programming language, such as C++, C, Fortran, Pascal, etc. In one implementation, a TCE may include a dynamically-typed programming language (e.g., the M language) that can be used to express problems and/or solutions in mathematical notations. For example, a TCE may use an array as a basic element, where the array may not require dimensioning. In addition, a TCE may be adapted to perform matrix and/or vector formulations that can be used for data analysis, data visualization, application development, simulation, modeling, algorithm development, etc. These matrix and/or vector formulations may be used in many areas, such as statistics, image processing, signal processing, control design, life sciences modeling, discrete event analysis and/or design, state based analysis and/or design, etc.
A TCE may further provide mathematical functions and/or graphical tools (e.g., for creating plots, surfaces, images, volumetric representations, etc.). In one implementation, a TCE may provide these functions and/or tools using toolboxes (e.g., toolboxes for signal processing, image processing, data plotting, parallel processing, etc.). In another implementation, a TCE may provide these functions as block sets. In still another implementation, a TCE may provide these functions in another way, such as via a library, etc.
A TCE may be implemented as a text-based environment (e.g., MATLAB® software; Octave; Python; Comsol Script; MATRIXx from National Instruments; Mathematica from Wolfram Research, Inc.; Mathcad from Mathsoft Engineering & Education Inc.; Maple from Maplesoft; Extend from Imagine That Inc.; Scilab from The French Institution for Research in Computer Science and Control (INRIA); Virtuoso from Cadence; Modelica or Dymola from Dynasim; etc.), a graphically-based environment (e.g., Simulink® software, Stateflow® software, SimEvents™ software, etc., by The MathWorks, Inc.; VisSim by Visual Solutions; LabView® by National Instruments; Dymola by Dynasim; SoftWIRE by Measurement Computing; WiT by DALSA Coreco; VEE Pro or SystemVue by Agilent; Vision Program Manager from PPT Vision; Khoros from Khoral Research; Gedae by Gedae, Inc.; Scicos from (INRIA); Virtuoso from Cadence; Rational Rose from IBM; Rhopsody or Tau from Telelogic; Ptolemy from the University of California at Berkeley; aspects of a Unified Modeling Language (UML) or SysML environment; etc.), or another type of environment, such as a hybrid environment that includes one or more of the above-referenced text-based environments and one or more of the above-referenced graphically-based environments.
A target environment may include an environment that supports a variety of programming languages. The target environment may include an environment that supports integration of a software component into a client program via one or more computer programming languages. Each of the one or more computer programming languages may be defined by a Type-0 grammar from the Chomsky hierarchy of formal languages. Each Type-0 grammar may define each of the one or more computer programming languages with a programming model, a type management model, and an instruction execution model. The programming model may be one of functional, object-oriented, procedural, rule based, logic based, or multi-paradigm. The type management model may be one of untyped, static, dynamic, or hybrid. The instruction execution model may be one of sequential or parallel. For example, in one implementation, a target environment may support one or more of a C programming language, a C++ programming language, a Csharp programming language, a Java programming language, a Visual Basic programming language, a .NET framework programming language, a Python programming language, a F++ programming language, a Fsharp programming language, a Fortress programming language, a Perl programming language, an X10 programming language, and/or a Chapel programming language.
Multiple heterogeneous server platforms may include a variety of server environments. The multiple heterogeneous server platforms may include a non-homogeneous set of Turing-complete computing resources capable of communicating with one another. Each member of the non-homogeneous set of Turing-complete computing resources may support server program execution via an operating system. For example, in one implementation, the multiple heterogeneous server platforms may support server program execution via one or more of a Linux operating system, a Windows operating system, a Solaris operating system, a Macintosh operating system, a UNIX-based operating system, and/or a real-time operating system (RTOS). In an exemplary implementation, servers containing multiple heterogeneous server platforms may include processing logic (e.g., labs, software or hardware units of execution, etc.), where the processing logic may be used to facilitate parallel or distributed processing.
A lab may include hardware, software, and/or combination of hardware and software that performs and/or participates in parallel and/or distributed processing activities. For example, a lab may perform and/or participate in parallel/distributed processing activities in response to a request and/or a task received from a client. In one example, a lab may be implemented as a software unit of execution and/or a hardware unit of execution. A lab may perform and/or participate in substantially any type of parallel processing (e.g., task, data, and/or stream processing). In one example, a lab may perform and/or participate in parallel processing activities in response to a receipt of a program and/or one or more portions of the program. A lab may support one or more threads (or processes) when performing processing operations.
A hardware unit of execution may include a device (e.g., a hardware resource) that performs and/or participates in parallel/distributed processing activities. For example, a hardware unit of execution may perform and/or participate in parallel/distributed processing activities in response to a request and/or a task received from a client. A hardware unit of execution may perform and/or participate in substantially any type of parallel processing (e.g., task, data, and/or stream processing) using one or more devices. For example, in one implementation, a hardware unit of execution may include a single processor that includes multiple cores and in another implementation, the hardware unit of execution may include a number of processors. Devices used in a hardware unit of execution may be arranged in substantially any configuration (or topology), such as a grid, ring, star, etc. A hardware unit of execution may support one or more threads (or processes) when performing processing operations.
A software unit of execution may include a software resource (e.g., a worker, a lab, etc.) that performs and/or participates in parallel/distributed processing activities. For example, a software unit of execution may perform and/or participate in parallel/distributed processing activities in response to receipt of a program and/or one or more portions of the program. A software unit of execution may perform and/or participate in substantially any type of parallel processing using one or more hardware units of execution. A software unit of execution may support one or more threads (or processes) when performing processing operations.
Client 110 may include a laptop, a personal computer, a workstation, a radiotelephone, a personal communications system (PCS) terminal (e.g., that may combine a cellular radiotelephone with data processing and data communications capabilities), a personal digital assistant (PDA) (e.g., that can include a radiotelephone, a pager, Internet/intranet access, etc.), or other types of computation or communication devices, threads or processes running on these devices, and/or objects executable by these devices. In one implementation, client 110 may produce a client program that may be executable on multiple heterogeneous server platforms (e.g., via servers 120-170), as described herein. Further details of client 110 are provided below in connection with, for example,
Windows server 120 may include one or more server entities, or other types of computation or communication devices, that gather, process, search, and/or provide information in a manner described herein. In one implementation, Windows server 120 may provide a Windows-based server platform (e.g., a Windows operating system) that is capable of executing one or more portions of the client program provided by client 110. Further details of Windows server 120 are provided below in connection with, for example,
Linux server 130 may include one or more server entities, or other types of computation or communication devices, that gather, process, search, and/or provide information in a manner described herein. In one implementation, Linux server 130 may provide a Linux-based server platform (e.g., a Linux operating system) that is capable of executing one or more portions of the client program generated client 110. Further details of Linux server 130 are provided below in connection with, for example,
Solaris server 140 may include one or more server entities, or other types of computation or communication devices, that gather, process, search, and/or provide information in a manner described herein. In one implementation, Solaris server 140 may provide a Solaris-based server platform (e.g., a Solaris operating system) that is capable of executing one or more portions of the client program provided by client 110. Further details of Solaris server 140 are provided below in connection with, for example,
Macintosh (MAC) server 150 may include one or more server entities, or other types of computation or communication devices, that gather, process, search, and/or provide information in a manner described herein. In one implementation, Macintosh server 150 may provide a Macintosh-based server platform (e.g., a Macintosh or Macintosh-compatible operating system) that is capable of executing one or more portions of the client program provided by client 110. Further details of Macintosh server 150 are provided below in connection with, for example,
Other platform server 160 may include one or more server entities, or other types of computation or communication devices, that gather, process, search, and/or provide information in a manner described herein. In one implementation, other platform server 160 may provide another server platform (e.g., a UNIX-based operating system) that is capable of executing one or more portions of the client program provided by client 110. Further details of other platform server 160 are provided below in connection with, for example,
Cache server 170 may include one or more server entities, or other types of computation or communication devices, that gather, process, search, and/or provide information in a manner described herein. In one implementation, cache server 170 may provide a distributed cache environment that is capable of receiving one or more portions of the client program provided by client 110. The distributed cache environment may distribute the one or more portions of the client program to one or more of servers 120-160. Further details of cache server 170 are provided below in connection with, for example,
Network 180 may include a local area network (LAN), a wide area network (WAN), a metropolitan area network (MAN), an intranet, the Internet, a Public Land Mobile Network (PLMN), a telephone network, such as the Public Switched Telephone Network (PSTN) or a cellular telephone network, or a combination of networks.
Processing logic 220 may include a processor, microprocessor, or other type of processing logic that may interpret and execute instructions. Main memory 230 may include a random access memory (RAM) or another type of dynamic storage device that may store information and instructions for execution by processing logic 220. ROM 240 may include a ROM device or another type of static storage device that may store static information and/or instructions for use by processing logic 220. Storage device 250 may include a magnetic and/or optical recording medium and its corresponding drive.
Input device 260 may include a mechanism that permits an operator to input information to device 200, such as a keyboard, a mouse, a pen, a microphone, voice recognition and/or biometric mechanisms, etc. Output device 270 may include a mechanism that outputs information to the operator, including a display, a printer, a speaker, etc. Communication interface 280 may include any transceiver-like mechanism that enables device 200 to communicate with other devices and/or systems. For example, communication interface 280 may include mechanisms for communicating with another device or system via a network, such as network 180.
As described herein, device 200 may perform certain operations in response to processing logic 220 executing software instructions contained in a computer-readable medium, such as main memory 230. A computer-readable medium may be defined as a physical or logical memory device. The software instructions may be read into main memory 230 from another computer-readable medium, such as storage device 250, or from another device via communication interface 280. The software instructions contained in main memory 230 may cause processing logic 220 to perform processes described herein. Alternatively, hardwired circuitry may be used in place of or in combination with software instructions to implement processes described herein. Thus, implementations described herein are not limited to any specific combination of hardware circuitry and software.
Although
Technical computing environment 300 may include any of the features described above with respect to the term “technical computing environment.”
Each of TCE programs 310 may include a program capable of being created with and/or generated by technical computing environment 300. For example, in one implementation, each of TCE programs 310 may include a program with one or more parallel processing constructs that enable the one or more portions of the program to be executed in parallel with multiple hardware resources (e.g., one or more of servers 120-160). In one example, the parallel processing construct may include a single program, multiple data (SPMD) command. Client 110 may implement the SPMD command to generate program portions. In another example, the parallel processing construct may include a PARFOR command. Client 110 may implement the PARFOR command to generate program portions. In still another example, the parallel processing construct may include a PARSECTION command. Client 110 may implement the PARSECTION command to generate program portions. In an exemplary implementation, the one or more parallel processing constructs may be executed serially (e.g., by client 110) if multiple hardware resources (e.g., servers 120-160) are unavailable, and/or in parallel (e.g., by one or more of servers 120-160) if multiple hardware resources (e.g., servers 120-160) are available. Such an arrangement may permit portability of a client program (e.g., may permit the client program to execute on multiple heterogeneous server platforms).
In another exemplary implementation, each of TCE programs may include a program with one or more distributed computing constructs that enable the one or more portions of the program to be executed in a distributed manner with multiple hardware resources (e.g., one or more of servers 120-160).
TCE compiler/builder logic 320 may include hardware, software, and/or a combination of hardware and software based logic that may receive TCE programs 310, and may process TCE programs 310 to create target components (e.g., plugins) for integration into client environment 330. For example, TCE compiler/builder logic 320 may receive one of TCE programs 310, may create a target component (e.g., an Excel plugin) based on the one TCE program 310, and may provide the Excel plugin to Excel program 340. In another example, TCE compiler/builder logic 320 may receive one of TCE programs 310, may create a target component (e.g., a Java plugin) based on the one TCE program 310, and may provide the Java plugin to Java program 350. In still another example, TCE compiler/builder logic 320 may receive one of TCE programs 310, may create a target component (e.g., a C/C++ plugin) based on the one TCE program 310, and may provide the C/C++ plugin to C/C++ program 360. In a further example, TCE compiler/builder logic 320 may receive one of TCE programs 310, may create a target component (e.g., a plugin for another server platform) based on the one TCE program 310, and may provide the plugin to other program 370. In one exemplary implementation, the target components may implement the parallel processing constructs and/or the distributed computing constructs provided by TCE programs 310.
Client environment 330 may include one or more target environments. In one exemplary implementation, client environment 330 may include target environments, such as Excel program 340, Java program 350, C/C++ program 360, and other program 370.
Excel program 340 may include a program that may receive a target component (e.g., an Excel plugin) from TCE compiler/builder logic 320, and may integrate the Excel plugin into a target environment (e.g., Microsoft Excel) to create a client program (e.g., an Excel-based program) capable of being executed on multiple heterogeneous server platforms (e.g., servers 120-160). The client program created by Excel program 340 may be provided to the multiple heterogeneous server platforms (e.g., servers 120-160) for execution.
Java program 350 may include a program that may receive a target component (e.g., an Java plugin) from TCE compiler/builder logic 320, and may integrate the Java plugin into a target environment (e.g., a Java class library) to create a client program (e.g., a Java-based program) capable of being executed on multiple heterogeneous server platforms (e.g., servers 120-160). The client program created by Java program 350 may be provided to the multiple heterogeneous server platforms (e.g., servers 120-160) for execution.
C/C++ program 360 may include a program that may receive a target component (e.g., a C/C++ plugin) from TCE compiler/builder logic 320, and may integrate the C/C++ plugin into a target environment (e.g., a C/C++ programming environment) to create a client program (e.g., a C/C++-based program) capable of being executed on multiple heterogeneous server platforms (e.g., servers 120-160). The client program created by C/C++ program 360 may be provided to the multiple heterogeneous server platforms (e.g., servers 120-160) for execution.
Other program 370 may include a program that may receive a target component (e.g., a plugin for another server platform) from TCE compiler/builder logic 320, and may integrate the other plugin into a target environment (e.g., another server platform) to create a client program (e.g., another server platform-based program) capable of being executed on multiple heterogeneous server platforms (e.g., servers 120-160). The client program created by Other program 370 may be provided to the multiple heterogeneous server platforms (e.g., servers 120-160) for execution.
In one exemplary implementation, the client programs created by Excel program 340, Java program 350, C/C++ program 360, and other program 370 may be executed in a parallel manner and/or a distributed manner based on the parallel processing constructs and/or the distributed computing constructs implemented by the target components. In another exemplary implementation, the client programs created by Excel program 340, Java program 350, C/C++ program 360, and other program 370 may be provided to an end user (e.g., via computer readable media, via a web service that allows machine-to-machine communications over a network, etc.), and the end user may execute the client programs in a parallel manner and/or a distributed manner.
Although
TCE program generator logic 400 may include hardware, software, and/or a combination of hardware and software based logic that may generate TCE program 310 (e.g., a parallel and/or distributed TCE program). For example, in one implementation, TCE program generator logic 400 may generate a program with one or more parallel processing constructs that enable the one or more portions of the program to be executed in parallel with multiple hardware resources (e.g., one or more of servers 120-160). In another implementation, TCE program generator logic 400 may generate a program with one or more distributed computing constructs that enable the one or more portions of the program to be executed in a distributed manner with multiple hardware resources (e.g., one or more of servers 120-160). TCE program generator logic 400 may provide TCE program 310 to TCE compiler/builder logic 320.
Target environment generator logic 410 may include hardware, software, and/or a combination of hardware and software based logic that may generate an interface 430 to invoke TCE program 310 and may generate a target environment 440. Target environment generator logic 410 may provide interface 430 to TCE compiler/builder 320, and may provide target environment 440 to target component integrator 420. Target environment 440 may include any of the features described above with respect to the term “target environment.”
TCE compiler/builder logic 320 may receive TCE program 310 from TCE program generator logic 400, and may receive interface 430 from target environment generator logic 410. TCE compiler/builder 320 may utilize TCE program 310 and interface 430 to generate a target component 450. Target component 450 may include a variety of target components (e.g., an Excel plugin, a Java plugin, a C/C++ plugin, etc.), and may include parallel processing constructs and/or the distributed computing constructs provided by TCE program 310. TCE compiler/builder 320 may provide target component 450 to target component integrator 420.
Target component integrator logic 420 may include hardware, software, and/or a combination of hardware and software based logic that may receive target environment 440 and target component 450, and may generate a client program 460 based on target environment 440 and target component 450. For example, in one implementation, target component integrator logic 420 may integrate target component 450 into target environment 440 to create client program 460 executable on multiple heterogeneous platform servers (e.g., servers 120-160). In one example, target component integrator logic 420 may reference interface 430 in target environment 440 and may invoke functions associated with interface 430 to create client program 460.
In one implementation, client program 460 may include an Excel-based program, a Java-based program, a C/C++-based program, etc. Client program 460 may be provided to multiple heterogeneous platform servers (e.g., servers 120-160), and may be executed in a parallel manner and/or a distributed manner by servers 120-160 based on the parallel processing constructs and/or the distributed computing constructs implemented by target component 450. Alternatively and/or additionally, client program 460 may be provided to an end user (e.g., via computer readable media, via a web service, etc.), and the end user may execute client program 460 in a parallel manner and/or a distributed manner with servers 120-160 based on the parallel processing constructs and/or the distributed computing constructs implemented by target component 450.
Although
Program structure computer logic 500 may include hardware, software, and/or a combination of hardware and software based logic that may receive TCE program 310, and may determine executable content of TCE program 310 that may be executed outside TCE 300, as indicate by reference number 540. In one example, program structure computer logic 500 may analyze TCE program 310, and may identify executable content (e.g., functions) that may be required to execute TCE program outside TCE 300. Program structure computer logic 500 may provide the identified executable content 540 to license information associator logic 510 and executable content packager logic 520.
Program structure computer logic 500 may determine, based on TCE program 310, a number, types, behavior (e.g., failover support, etc.), and/or communication information, as indicated by reference number 550, associated with available hardware resources (e.g., servers 120-160). In one example, program structure computer logic 500 may determine that a number (e.g., two) of hardware resources (e.g., Windows server 120 and Linux server 130) are available, and that the available hardware resources are certain types (e.g., a Windows-based server platform and Linux-based server platform). In another example, program structure computer logic 500 may determine mechanisms (e.g., network 180) by which client 110 may communicate with the available hardware resources. In still another example, information 550 may include configuration information (e.g., to determine what server scheduling environment and/or target environment to use) associated with TCE program 310. The configuration information may be provided by a user, and, if not provided by the user, may be automatically provided by program structure computer logic 500 based on TCE program 310. Program structure computer logic 500 may provide information 550 to executable content packager logic 520.
License information associator logic 510 may include hardware, software, and/or a combination of hardware and software based logic that may receive identified executable content 540, and may associate license information, as indicated by reference number 560, with identified executable content 540. For example, in one implementation, license information associator logic 510 may extract license information from TCE 300, and may create a function that returns names of licensed products associated with identified executable content 540. If identified executable content 540 is invoked, associated license information 560 may be referenced (e.g., for valid licenses) so that identified executable content 540 may be executed with valid licenses. License information associator logic 510 may provide associated license information 560 to executable content packager logic 520.
Executable content packager logic 520 may include hardware, software, and/or a combination of hardware and software based logic that may receive identified executable content 540, information 550, and associated license information 560, and may combine identified executable content 540, information 550, and associated license information 560 into a platform-independent, redistributable program 570. In one implementation, platform-independent, redistributable program 570 may include target component 450 described above in connection with
Although
Scheduler/job manager 610 may include one or more server entities, or other types of computation or communication devices, that gather, process, search, and/or provide information in a manner described herein. In one implementation, scheduler/job manager 610 may manage program state and/or task(s) 640 (e.g., associated with a client program) and/or may assign program state/task(s) 640 to servers 120-160. Scheduler/job manager 610 may enable program state/task(s) 640 to be distributed across networks (e.g., network 180) of widely varying topologies. In one example, scheduler/job manager 610 may include an industry-standard scheduler, such as Platform LSF®, Microsoft® Windows® Compute Cluster Server (CCS), PBS Pro®, and TORQUE schedulers. Program state/task(s) 640 may include functions associated with a client program, program state information (e.g., run time information, variable values, call stack state, location of program, etc.), etc.
Program structure cache 620 may include one or more cache memories that may be used by a central processing unit (CPU) of a single computing device (e.g., Windows server 120) to reduce the average time to access a main memory (e.g., of Windows server 120), which may be slower and/or larger than internal memory used for cache. For example, as shown in
Shared program cache 630 may include one or more cache memories that may be used by CPUs of multiple computing devices (e.g., Linux server 130 and Solaris server 140) to reduce the average time to access main memories (e.g., of Linux server 130 and Solaris server 140), which may be slower and/or larger than internal memory used for cache. For example, as shown in
As further shown in
Cache server 170 (e.g., program structure cache 620 and/or shared program cache 630) may reduce the cost of client (e.g., client 110) to server (e.g., servers 120-160) file transfer by requiring client 110 to transfer only executable content that is not present in cache server 170. The reduced client to server file transfer may also be beneficial if bandwidth (e.g., of network 180) is limited.
Although
As shown in
Client environment 330 (e.g., Excel program 340, Java program 350, C/C++ program 360, and/or other program 370) may provide resource and/or task processing requests 720 to scheduler/job manager 610 of server scheduling environment 600. Resource/task processing requests 720 may include requests for hardware resources (e.g., to execute client programs), requests to execute client programs, one or more portions of client programs, etc. Scheduler/job manager 610 may receive resource/task processing requests 720, and may determine an allocation strategy for resource/task processing requests 720 based on available hardware resources (e.g., servers 120-160) and resource/task processing requests 720. For example, scheduler/job manager 610 may allocate Excel tasks 730 (e.g., associated with an Excel-based client program) to Windows server 120 and Linux server 130, may allocate Java tasks 740 (e.g., associated with a Java-based client program) to Solaris server 140 and Macintosh server 150, may allocate C/C++ tasks 750 (e.g., associated with a C/C++-based client program) to Macintosh server 150, and may allocate other tasks 760 (e.g., associated with another client program) to other platform server 160.
As further shown in
The system depicted in
Although
As further shown in
Although
As illustrated in
As further shown in
Returning to
Process block 950 may include the process blocks illustrated in
Process block 970 may include the process blocks illustrated in
As illustrated in
As further shown in
Process block 1220 may include the process blocks illustrated in
As illustrated in
As further shown in
Implementations described herein may include systems and/or methods that produce a client program that may be executable on multiple heterogeneous server platforms. For example, in one implementation, the systems and/or methods may receive and/or create a program (e.g., a technical computing environment (TCE) program) with a parallel or distributed construct, and may create a target component from the program. The systems and/or methods may identify executable content of the program executable outside the TCE, and may associate license information with the identified executable content of the program. The systems and/or methods may also combine the identified executable content of the program and the associated license information into a platform-independent, redistributable program, and may integrate the target component and the platform-independent, redistributable program into a target environment to produce a client program executable on multiple heterogeneous server platforms. The systems and/or methods may provide the client program to the multiple heterogeneous server platforms for execution.
The foregoing description of implementations provides illustration and description, but is not intended to be exhaustive or to limit the invention to the precise form disclosed. Modifications and variations are possible in light of the above teachings or may be acquired from practice of the invention.
For example, while series of blocks have been described with regard to
It will be apparent that embodiments, as described herein, may be implemented in many different forms of software, firmware, and hardware in the implementations illustrated in the figures. The actual software code or specialized control hardware used to implement embodiments described herein is not limiting of the invention. Thus, the operation and behavior of the embodiments were described without reference to the specific software code—it being understood that one would be able to design software and control hardware to implement the embodiments based on the description herein.
Further, certain portions of the invention may be implemented as “logic” that performs one or more functions. This logic may include hardware, such as an application specific integrated circuit or a field programmable gate array, software, or a combination of hardware and software.
Even though particular combinations of features are recited in the claims and/or disclosed in the specification, these combinations are not intended to limit the invention. In fact, many of these features may be combined in ways not specifically recited in the claims and/or disclosed in the specification.
No element, act, or instruction used in the present application should be construed as critical or essential to the invention unless explicitly described as such. Also, as used herein, the article “a” is intended to include one or more items. Where only one item is intended, the term “one” or similar language is used. Further, the phrase “based on” is intended to mean “based, at least in part, on” unless explicitly stated otherwise.
This application is a continuation-in-part of U.S. patent application Ser. No. 11/748,938, filed May 15, 2007, which is a continuation-in-part of U.S. patent application Ser. No. 11/706,805, filed Feb. 14, 2007. This application is also a continuation-in-part of U.S. patent application Ser. No. 11/748,947, filed May 15, 2007, which is a continuation-in-part of U.S. patent application Ser. No. 11/706,805, filed Feb. 14, 2007. This application further claims priority under 35 U.S.C. §119 based on U.S. Provisional Patent Application No. 61/054,288, filed May 19, 2008. The entire contents of U.S. patent application Ser. Nos. 11/748,938, 11/748,947, and 11/706,805 and U.S. Provisional Patent Application No. 61/054,288 are hereby incorporated by reference.
Number | Name | Date | Kind |
---|---|---|---|
4961133 | Talati et al. | Oct 1990 | A |
5067072 | Talati et al. | Nov 1991 | A |
5355492 | Frankel et al. | Oct 1994 | A |
5999987 | O'Farrell et al. | Dec 1999 | A |
6092097 | Suzuoka | Jul 2000 | A |
6253369 | Cloud et al. | Jun 2001 | B1 |
6609248 | Srivastava et al. | Aug 2003 | B1 |
7103881 | Stone | Sep 2006 | B2 |
7111132 | Wilkerson | Sep 2006 | B2 |
7174381 | Gulko et al. | Feb 2007 | B2 |
7346898 | Tserng | Mar 2008 | B2 |
7640266 | Gestrelius et al. | Dec 2009 | B2 |
7673295 | Lin | Mar 2010 | B1 |
7689977 | Zhang et al. | Mar 2010 | B1 |
7739667 | Callahan et al. | Jun 2010 | B2 |
7765532 | Dutt et al. | Jul 2010 | B2 |
7797691 | Cockx et al. | Sep 2010 | B2 |
7810084 | Egetoft | Oct 2010 | B2 |
7840949 | Schumacher et al. | Nov 2010 | B2 |
7962906 | O'Brien et al. | Jun 2011 | B2 |
7975001 | Stefansson et al. | Jul 2011 | B1 |
7996827 | Vorbach et al. | Aug 2011 | B2 |
8006238 | Eichenberger et al. | Aug 2011 | B2 |
8010954 | Little et al. | Aug 2011 | B2 |
8037462 | Archambault et al. | Oct 2011 | B2 |
8108845 | Little et al. | Jan 2012 | B2 |
20090044179 | Luszczek et al. | Feb 2009 | A1 |
20090044180 | Luszczek et al. | Feb 2009 | A1 |
20090044196 | Stefansson et al. | Feb 2009 | A1 |
20090044197 | Stefansson et al. | Feb 2009 | A1 |
20090049435 | Luszczek et al. | Feb 2009 | A1 |
20090119677 | Stefansson et al. | May 2009 | A1 |
20090132867 | Stefansson et al. | May 2009 | A1 |
20110035736 | Stefansson et al. | Feb 2011 | A1 |
20110035737 | Stefansson et al. | Feb 2011 | A1 |
20120011347 | Little et al. | Jan 2012 | A1 |
Number | Date | Country | |
---|---|---|---|
61054288 | May 2008 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 11748938 | May 2007 | US |
Child | 12181815 | US | |
Parent | 11706805 | Feb 2007 | US |
Child | 11748938 | US | |
Parent | 11748947 | May 2007 | US |
Child | 11706805 | US | |
Parent | 11706805 | Feb 2007 | US |
Child | 11748947 | US |