1. A method of dynamic parallelization for programs in systems having at least two processors, the method comprising the steps of: examining computer code of a program to be performed by the system; determining a largest possible parallel region in the computer code using profiling to identify a high-level phase structure of the program and using dependence profiling to find a phase with a largest portion of run-time instructions that can be executed in parallel, wherein the profiling and dependence profiling include examining both the computer code and at least one training execution of the computer code; classifying data to be used by the program based on a usage pattern obtained during the profiling; and initiating multiple, concurrent processes to perform the program, the multiple concurrent processes comprising a lead process executing the program non-speculatively, an understudy process executing the program non-speculatively and providing correct processing when a speculation process fails, and each speculation process executing at least a portion of the program speculatively in parallel with the lead and understudy processes and providing faster processing than the lead and understudy processes when the speculation process does not fail; wherein the multiple, concurrent processes ensure a baseline performance that is at least as efficient as a sequential performance of the computer code.