1. A computer program product comprising a computer readable storage medium having a computer readable program stored therein, wherein the computer readable program, when executed on a computing device, causes the computing device to: divide an application into application threads to be scheduled on a plurality of processors; divide the application into serial regions and parallel regions; decompose each application thread into compute tasks and memory tasks, wherein a compute task comprises a group of instructions that perform computational functions and wherein a memory task is a group of instructions that perform memory access operations; for each parallel region, determine a corresponding number of application threads and a corresponding number of concurrent memory tasks, wherein the number of application threads and the number of concurrent memory tasks are less than the number of hardware threads of the plurality of processors; for each parallel region, schedule the application threads, and the compute tasks and the memory tasks within each application thread, on the number of hardware threads of the plurality of processors based on the corresponding number of application threads and the corresponding number of concurrent memory tasks; and apply power management to the plurality of processors based on the corresponding number of application threads and the corresponding number of concurrent memory tasks.