Intel® Cilk™ Plus is a parallel programming framework for C or C++ code that helps you harness the performance of multi-core processors. Intel Cilk Plus provides many advantages, including:
Requires few source changes.
Preserves the serial semantics of your program.
Provides powerful hyperobjects, so you can avoid using locks, which can slow parallel execution.
After you add Intel TBB synchronization code (such as mutexes), but before adding the constructs that cause the program to use parallel execution, you should test your serial program. The synchronization code may introduce problems if you have inadvertently used a non-recursive mutex in a recursive context, or if your edits accidentally changed some other piece of program behavior.
It is much easier to find these problems in the serial version of your program than it will be in the parallel version.
Use OpenMP atomic operations to allow multiple threads to safely update a shared numeric variable, such as on hardware platforms that support atomic operation use. An atomic operation applies only to the single assignment statement that immediately follows it, so atomic operations are useful for code that requires fine-grain synchronization.
Before the statement to be protected, use:
#pragma omp atomic for C/C++.
The Intel Advisor saves a result in a subdirectory of each project's directory. The project directory is the directory specified when creating the Intel Advisor GUI project. Instead of saving results within each project's directory, you can specify a custom, central location for saving all new results.
To save results to a custom location when using the Intel Advisor GUI:
All Intel Advisor special-purpose annotations are recognized by the Dependencies tool, which observes memory accesses in great detail. Some of these annotations prevent the Dependencies tool from reporting all or specific data sharing problems, while one (Observe Uses of Storage) provides more detail about memory accesses.
When running Intel Advisor Dependencies tool analysis, you see unmatched problems reported that are caused by unmatched annotations execution that you did not expect.
Occurs when a task execution accesses a memory location more than once, under the control of different locks.
To open the Source View for the Memory Access Patterns, double-click an entry in the Memory Access Patterns Report tab of the Refine Reports Window.