phase 1: normal execution with no memory optimization. phase 2: parallelized execution with no memory optimization. phase 3: parallelized execution with memory optimization.