Intel® Advisor Help
This topic explains the steps needed to implement parallelism proposed by the Intel Advisor annotations by adding Intel® Threading Building Blocks (Intel® TBB) parallel framework code.
Add Intel TBB code to add appropriate synchronization of shared resources, using the LOCK annotations as a guide. The following topics cover the Intel TBB synchronization options:
Add code to create Intel TBB tasks, using the SITE/TASK annotations as a guide. The following topics cover the Intel TBB task creation options:
This is the recommended order of tasks for replacing the annotations with Intel TBB code:
The Intel TBB parallel framework creates worker threads automatically. In general, you should concern yourself only with the tasks, and leave it to the framework to create and destroy the worker threads.
If you do need some control over creation and destruction of worker threads, read about task_scheduler_init in the Intel TBB Reference manual.
The table below shows the serial, annotated program code in the left column and the equivalent Intel TBB parallel code in the right column for some typical code to which parallelism can be applied.
Serial Code with Intel Advisor Annotations | Parallel Code using Intel TBB |
---|---|
// Locking ANNOTATE_LOCK_ACQUIRE(); Body(); ANNOTATE_LOCK_RELEASE(): |
// Locking can use various mutex types provided // by Intel TBB. For example: #include <tbb/tbb.h> ... tbb::mutex g_Mutex; ... { tbb::mutex::scoped_lock lock(g_Mutex); Body(); } |
// Do-All Counted loops, one task ANNOTATE_SITE_BEGIN(site); For (I = 0; I < N; ++) { ANNOTATE_ITERATION_TASK(task); {statement;} } ANNOTATE_SITE_END(); |
// Do-All Counted loops, using lambda // expressions #include <tbb/tbb.h> ... tbb::parallel_for(0,N,[&](int I) { statement; }); |
// Create Multiple Tasks ANNOTATE_SITE_BEGIN(site); ANNOTATE_TASK_BEGIN(task1); statement-or-task1; ANNOTATE_TASK_END(); ANNOTATE_TASK_BEGIN(task2); statement-or-task2; ANNOTATE_TASK_END(); ANNOTATE_SITE_END(); |
// Create Multiple tasks, using lambda // expressions #include <tbb/tbb.h> ... tbb::parallel_invoke( [&]{statement-or-task1;}, [&]{statement-or-task2;} ); |
For information about common parallel programming patterns and how to implement them in Intel TBB, see the Intel TBB help topic Design Patterns.