Visible to Intel only — GUID: GUID-14BFC586-9020-45A0-8D06-E8BC0306F694
Visible to Intel only — GUID: GUID-14BFC586-9020-45A0-8D06-E8BC0306F694
Memory Watch
Occurs when a task accesses a memory location marked by an ANNOTATE_OBSERVE_USES annotation. In this case, this problem provides informational feedback only and no action is required. This is useful for finding uses of specified memory locations while a task is executing.
One of the following has occurred:
ID |
Code Location |
Description |
---|---|---|
1 |
Parallel site |
If present, represents the location and associated call stack of the parallel site containing the Memory Watch problem. |
2 |
Watch start |
Represents the location and its associated call stack where an ANNOTATE_OBSERVE_USES() annotation marks a memory location. |
3 |
Read |
Represents the location and associated call stack where a task read the watched memory location. |
4 |
Write |
Represents the location and associated call stack where a task wrote the watched memory location. |
5 |
Update |
Represents the location and associated call stack where a task read and wrote the watched memory location. |
Example
void watch_memory() { ANNOTATE_OBSERVE_USES(&watch, sizeof(watch)); // Watch start ANNOTATE_SITE_BEGIN(watch_site); // Parallel site { ANNOTATE_TASK_BEGIN(watch_task1); { ANNOTATE_LOCK_ACQUIRE(&watch); watch++; /* watch memory */ // Read and/or Write ANNOTATE_LOCK_RELEASE(&watch); } ANNOTATE_TASK_END(); ANNOTATE_TASK_BEGIN(watch_task2); { ANNOTATE_LOCK_ACQUIRE(&watch); watch++; /* watch memory */ // Read and/or Write ANNOTATE_LOCK_RELEASE(&watch); } ANNOTATE_TASK_END(); } ANNOTATE_SITE_END(); ANNOTATE_CLEAR_USES(&watch); }
This example reports all places that use the memory location referenced by watch during the call to watch_memory().
Possible Correction Strategies
To use ANNOTATE_OBSERVE_USES to help you correct an incidental sharing problem, do the following to mark places where you may be able replace uses of a shared memory location with uses of a non-shared memory location:
Add an ANNOTATE_OBSERVE_USES annotation to the task.
Find all uses of the shared memory location in the dynamic extent of the task.