1. A method for efficiently executing an application program using one or more processing elements that can execute instructions comprising the application program, comprising the steps of: (a) dividing a control flow graph of the application program into a plurality of waves, wherein each wave comprises a connected, directed acyclic portion of the control flow graph, with a single entrance; (b) providing wave number tags to be used in identifying each individual dynamic instance of data used when executing the application program; (c) adding wave management instructions to the instructions comprising the application program to manage the wave number tags and the wave numbers associated with the waves, in accordance with a predefined instruction set architecture; (d) within each wave, annotating each memory operation with its location in the wave and in regard to its ordering relationship with other memory operations in the wave, to define a wave-ordered memory; and (e) executing the plurality of waves with said one or more processing elements, using the wave number tags, wave management instructions, and annotations of the memory operations to control the execution of the instructions comprising the application program, so that the execution of the instructions occurs in a desired order within each wave.