Parallel Programming Guide for HP-UX Systems

Troubleshooting
False cache line sharing
Chapter 9 179
REAL*4 S(8,8)
C$DIR LOOP_PARALLEL
DO I = 1, N
.
.
.
S(1,MY_THREAD()+1) = ... ! EACH THREAD ASSIGNS
ONE ELEMENT OF S
.
.
.
ENDDO
C$DIR NO_PARALLEL
DO J = 1, NUM_THREADS()
= ...S(1,J) ! THREAD 0 POST-PROCESSES
S
ENDDO
Scalars sharing a cache line
Sometimes parallel tasks assign unique scalar variables that are in the
same cache line, as in the following code:
COMMON /RESULTS/ SUM, PRODUCT
C$DIR BEGIN_TASKS
DO I = 1, N
.
.
.
SUM = SUM + ...
.
.
.
ENDDO
C$DIR NEXT_TASK
DO J = 1, M
.
.
.
PRODUCT = PRODUCT * ...
.
.