  We compare automatically and manually parallelized NAS Benchmarks in order to
identify code sections that differ. We discuss opportunities for advancing
automatic parallelizers. We find ten patterns that pose challenges for current
parallelization technology. We also measure the potential impact of advanced
techniques that could perform the needed transformations automatically. While
some of our findings are not surprising and difficult to attain -- compilers
need to get better at identifying parallelism in outermost loops and in loops
containing function calls -- other opportunities are within reach and can make
a difference. They include combining loops into parallel regions, avoiding load
imbalance, and improving reduction parallelization.
  Advancing compilers through the study of hand-optimized code is a necessary
path to move the forefront of compiler research. Very few recent papers have
pursued this goal, however. The present work tries to fill this void.
