1. A method for parallelizing execution of a computer program, comprising: scoping program variables of the program at compile time of the program, including scoping scalar variables that are involved in an inter-loop reduction dependence as shared; inserting code into the program at compile time, wherein the inserted code comprises instructions for causing a computer to perform actions at run time of the program including: determining loop boundaries at run time; issuing checkpoint instructions and commit instructions that encompass transaction regions in the program, wherein each transaction region comprises a function needed to perform work of the computer program and a spin-waiting loop with a non-transactional load, wherein the spin-waiting loop waits for a previous thread to commit before the spin-waiting loop commits; and storing the program including the inserted code.