Memory Reuse, Child Task

Occurs when two tasks write to a shared memory location, where a parent task overwrites a variable with a new value that was read by a previously executed child task. A child task is a task nested inside another task .

Problem type: Memory reuse

ID

Code Location

Description

1

Allocation site

If present, and if the memory involved is heap memory, represents the location and associated call stack when the memory was allocated.

2

Parallel site

If present, represents the location and associated call stack of the parallel site containing the Memory Reuse, Child Task problem.

3

Read

Represents the instruction and associated call stack of the first access if it is a memory read.

4

Write

Represents the instruction and associated call stack of the second access if it is a memory write.

Example

int global;
void main()
{
    ANNOTATE_SITE_BEGIN(reuse_site);   // Begin parallel site
        ANNOTATE_TASK_BEGIN(task111);
            assert(global == 111);     // Read 
        ANNOTATE_TASK_END();
        global = 222;                  // Write
    ANNOTATE_SITE_END();
}

In this example, a parent task is writing to a shared variable after a task that reads that same variable.

Some Possible Correction Strategies

Create a private copy of the variable before executing the child task. Use the private copy in the child task.

For more complete information about compiler optimizations, see our Optimization Notice.