1. A system for optimizing the operation of a program in a multiple-processor computing system, the system comprising: a computer system comprising a plurality of processors; a target program written to run on the computer system; a Veil program having coded therein a means to: (a) wrap the target program with a run-time analyzer; (b) select one parallelization strategy from a plurality of parallelization strategies; (c) parallelize the target program according to the one parallelization strategy; (d) execute the target program; (e) record execution results of the target program; and (f) if there are further parallelization strategies in the plurality of parallelization strategies, change the one parallelization strategy to a next parallelization strategy from the plurality of parallelization strategies and repeat steps a-f; (g) compare the execution results and select a best parallelization strategy having a best execution result; (h) parallelize the target application using the best parallelization strategy with the best execution result; (i) analyze a target data on which the target program is designed to operate; (j) if the target data is a contiguous dataset then: determine a number n of available processors; copy at least part of the target program onto n available processors; divide the target data into the number n segments of data; run the at least part of the target program on the available processors, each operating upon one of the number n segments of data; combine the results from the available processors; (k) if the target data is burst data then: measure an interval between bursts; measure a computational time of the target program; if the interval between bursts is less than the computational time then determine the number n of the available processors and distribute at least part of the target program over the available processors; if the interval between bursts is not less than the computational time then execute the program on one available processor; (l) if the target data is a continuous data stream then: determine the number n of the available processors; duplicate at least part of the target program onto the available processors; and demultiplex the target data into the number n sub-streams, where the number n sub-streams matches the number n of the available processors.