Summations and other reductions are parallelized through the use of locks or critical regions. Interprocedural Analysis for Parallel Calls. Automatic recognition of parallel cases. Parallel optimizations can be done to outer loops while inner loops are optimized for efficient execution on one thread. Choice of static or dynamic partitioning of loop iterations.
Load balancing can tradeoff with loop overhead.
Use dynamic partitioning when you need more load balancing, static partioning when you are concerned about overhead. Number of threads can be set with an environment variable. This allows degree of parallelism to be changed from run to run. When the system is busy you can run with two threads, when it is empty you can run with eight threads, without recompiling your program. Choice of thread waiting strategy.