The best performance improvements from adding parallel execution (parallelism) to a program occur when many cores are busy most of the time doing useful work. Achieving this requires a lot of analysis, knowledge, and testing.
Because your serial program was not designed to allow parallel execution, as you convert parts of it to use parallel execution, you may encounter unexpected errors that occur only during parallel execution. Instead of wasting effort on portions of a program that use almost no CPU time, you must focus on the hotspots, and the functions between the main entry point and each hotspot.
If you naively add parallel execution to a program without proper preparation, unpredictable crashes, program hangs, and wrong answers can result from incorrect parallel task interactions. For example, you may need to add synchronization to avoid incorrect parallel task interactions, but this must be done carefully because locking overhead and serial synchronization can reduce the benefits of the parallel execution.
Intel Advisor helps you:
Find the possible code regions where you could add parallel execution.
Choose the code regions best-suited for parallel execution. This includes measuring approximate parallel performance so you can experiment with different possible parallel code regions.
Find and eliminate potential data sharing problems before parallel execution is introduced.