Intel® Advisor Help

Site and Task Annotations for Simple Loops With One Task

Parallel site annotations mark the beginning and end of the parallel site. In contrast, to mark an entire simple loop body as a task, you only need a single iteration task annotation in the common case where the Survey tool identifies a single simple loop that consumes much of an application's time. In many cases, a single time-consuming simple loop structure may be the only task needed within a parallel site. This annotation form is also the easiest to convert to parallel code.

Note

If the task's code does not include the entire loop body, or if you need multiple tasks in one parallel site or for complex loops, use the task begin-end annotation pair to mark each task, as described in the help topic Site and Task Annotations with Multiple Tasks (use the link below under See Also).

Use the general site/task annotation form for time-consuming code not in a loop, for complex loops containing task(s), or cases that require multiple tasks within a parallel site.

Syntax: Simple Loops With One Task

Parallel site annotations mark the parallel site that wraps the loop:

C/C++:

ANNOTATE_SITE_BEGIN(sitename); and ANNOTATE_SITE_END();

Fortran:

call annotate_site_begin(sitename) and call annotate_site_end

C#:

Annotate.SiteBegin(sitename); and Annotate.SiteEnd();

The iteration task annotation occurs within the parallel site. Place this annotation near the start of the loop body to mark an entire simple loop body as a task:

C/C++:

ANNOTATE_ITERATION_TASK(taskname);

Fortran:

call annotate_iteration_task(taskname)

C#:

Annotate.IterationTask(taskname);

For the C/C++ ANNOTATE_SITE_END(); annotation, the sitename argument is optional.

The sitename and taskname must follow the rules for annotation name arguments:

Examples: Simple Loops With One Task

The following C/C++ code fragment shows a parallel site for a loop with a single task, where the task includes the entire simple loop body:

 ...
   ANNOTATE_SITE_BEGIN(sitename);
   for (i=0; i<N; i++) {
     ANNOTATE_ITERATION_TASK(taskname);
     func(i);
   }
   ANNOTATE_SITE_END();
 ...

The following Fortran code fragment shows a parallel site for a loop with a single task, where the task includes the entire simple loop body:

 ...
 call annotate_site_begin("sitename")
   do i=1,size
     call annotate_iteration_task("taskname")
     call func(i)
   end do
 call annotate_site_end
 ...

The nqueens_Advisor C++ sample and the nqueens_Fortran Fortran sample demonstrate this form of site/task annotations. For example, the C++ annotated code in nqueens_annotated.cpp:

ANNOTATE_SITE_BEGIN(solve);
for(int i=0; i<size; i++) {
  // try all positions in first row
  // create separate array for each recursion
   ANNOTATE_ITERATION_TASK(setQueen);
   // int * queens = new int[size]; //array representing queens placed on a chess ...
   // ADVISOR COMMENT: This is incidental sharing because all the tasks are using ...
   setQueen(queens, 0, i);
}
ANNOTATE_SITE_END();

The help topic Annotating Parallel Sites and Tasks describes adding parallel sites and tasks.

See Also