Patent ID: 8387033

Claim:
A system for optimizing the operation of a program in a multiple-processing element computing system, the system comprising: a computer system comprising at least one processor and a plurality of processing elements; a target program written to run on the computer system; a target program written to run on the computer system; a program having coded therein a means for: (a) wrapping the target program with a run-time analyzer; (b) selecting one parallelization strategy from a plurality of parallelization strategies; (c) parallelizing the target program according to the selected one parallelization strategy; (d) executing the target program on the processing elements; (e) recording execution results of the target program; and (f) if there are further parallelization strategies in the plurality of parallelization strategies, changing the selected one parallelization strategy to a next parallelization strategy from the plurality of parallelization strategies and repeat steps a-f; (g) comparing the execution results and selecting a best parallelization strategy having a best execution result; (h) parallelizing the target application using the best parallelization strategy with the best execution result; (i) analyzing a target data on which the target program is designed to operate; (j) if the target data is a contiguous dataset then: determining a number of available processing elements; copying at least part of the target program onto the available processing elements; dividing the target data into a number of data segments; executing the at least part of the target program on the available processing elements, each operating upon one of the data segments; combining the results from the available processing elements; (k) if the target data is burst data then: measuring an interval between bursts; measuring a computation time of the target program; if the interval between bursts is less than the computation time then determining the number of the available processing elements and distributing at least part of the target program over the available processing elements; if the interval between bursts is not less than the computation time then executing the program on one of the available processing elements; (l) if the target data is a continuous data stream then: determining the number of the available processing elements; duplicating at least part of the target program onto the available processing elements; and demultiplex the target data into the number of sub-streams, where the number of sub-streams matches the number of the available processing elements.