1. A computing device-implemented method, comprising: receiving a program, where the receiving of the program is performed by the computer device; analyzing the program, where the analyzing is performed by the computer device; generating one or more program portions based on the analysis of the program, where the generating is performed by the computer device; dynamically allocating the one or more program portions to two or more software units of execution for parallel programming, where the dynamically allocating is performed by the computer device, and where dynamically allocating the one or more program portions comprises: determining availability of the two or more software units of execution, selecting an allocation strategy based on the determined available software units of execution and the one or more program portions, and allocating the one or more program portions to the available software units of execution based on the selected allocation strategy; receiving one or more results associated with the one or more program portions from the two or more software units of execution, where the receiving of the one or more results is performed by the computer device; and providing the one or more results to the program, where the providing is performed by the computer device; where dynamically allocating the one or more program portions further comprises: changing the selected allocation strategy to a new allocation strategy; and allocating the one or more program portions to the available software units of execution based on the new allocation strategy.