3535#include " implicitTaskOmpLogic.hpp"
3636#include " parallelOmpLogic.hpp"
3737
38- int opdi::ParallelOmpLogic::skipParallelHandling = 0 ;
38+ int opdi::ParallelOmpLogic::skipParallelRegion = 0 ;
3939
4040void opdi::ParallelOmpLogic::reverseFunc (void * parallelDataPtr) {
4141
@@ -47,7 +47,7 @@ void opdi::ParallelOmpLogic::reverseFunc(void* parallelDataPtr) {
4747 }
4848 #endif
4949
50- ++ ParallelOmpLogic::skipParallelHandling ;
50+ ParallelOmpLogic::internalBeginSkippedParallelRegion () ;
5151
5252 #pragma omp parallel num_threads(parallelData->actualSizeOfTeam)
5353 {
@@ -94,7 +94,7 @@ void opdi::ParallelOmpLogic::reverseFunc(void* parallelDataPtr) {
9494 #endif
9595 }
9696
97- -- ParallelOmpLogic::skipParallelHandling ;
97+ ParallelOmpLogic::internalEndSkippedParallelRegion () ;
9898
9999 #if OPDI_OMP_LOGIC_INSTRUMENT
100100 for (auto & instrument : ompLogicInstruments) {
@@ -107,7 +107,7 @@ void opdi::ParallelOmpLogic::deleteFunc(void* parallelDataPtr) {
107107
108108 ParallelData* parallelData = static_cast <ParallelData*>(parallelDataPtr);
109109
110- ++ ParallelOmpLogic::skipParallelHandling ;
110+ ParallelOmpLogic::internalBeginSkippedParallelRegion () ;
111111
112112 // this triggers possibly pending implicit task end events
113113 #pragma omp parallel num_threads(parallelData->actualSizeOfTeam)
@@ -134,7 +134,9 @@ void opdi::ParallelOmpLogic::deleteFunc(void* parallelDataPtr) {
134134 delete implicitTaskData;
135135 }
136136
137- --ParallelOmpLogic::skipParallelHandling;
137+ ParallelOmpLogic::internalEndSkippedParallelRegion ();
138+
139+ tool->freePosition (parallelData->encounteringTaskTapePosition );
138140
139141 // delete data of the parallel region
140142 delete parallelData;
@@ -167,7 +169,7 @@ void opdi::ParallelOmpLogic::internalSetAdjointAccessMode(ImplicitTaskData* impl
167169
168170void * opdi::ParallelOmpLogic::onParallelBegin (void * encounteringTaskDataPtr, int maximumSizeOfTeam) {
169171
170- if (tool->getThreadLocalTape () != nullptr && ParallelOmpLogic::skipParallelHandling == 0 ) {
172+ if (tool->getThreadLocalTape () != nullptr && ParallelOmpLogic::skipParallelRegion == 0 ) {
171173
172174 ImplicitTaskData* encounteringTaskData = static_cast <ImplicitTaskData*>(encounteringTaskDataPtr);
173175
@@ -180,6 +182,8 @@ void* opdi::ParallelOmpLogic::onParallelBegin(void* encounteringTaskDataPtr, int
180182 parallelData->isActiveParallelRegion = tool->isActive (tool->getThreadLocalTape ());
181183 parallelData->encounteringTaskData = encounteringTaskData;
182184 parallelData->encounteringTaskTape = tool->getThreadLocalTape ();
185+ parallelData->encounteringTaskTapePosition = tool->allocPosition ();
186+ tool->getTapePosition (parallelData->encounteringTaskTape , parallelData->encounteringTaskTapePosition );
183187 parallelData->encounteringTaskAdjointAccessMode = internalGetAdjointAccessMode (encounteringTaskData);
184188 parallelData->childTaskData .resize (maximumSizeOfTeam);
185189
@@ -270,3 +274,18 @@ opdi::LogicInterface::AdjointAccessMode opdi::ParallelOmpLogic::getAdjointAccess
270274 }
271275}
272276
277+ void opdi::ParallelOmpLogic::internalBeginSkippedParallelRegion () {
278+ ++ParallelOmpLogic::skipParallelRegion;
279+ }
280+
281+ void opdi::ParallelOmpLogic::internalEndSkippedParallelRegion () {
282+ --ParallelOmpLogic::skipParallelRegion;
283+ }
284+
285+ void opdi::ParallelOmpLogic::beginSkippedParallelRegion () {
286+ ParallelOmpLogic::internalBeginSkippedParallelRegion ();
287+ }
288+
289+ void opdi::ParallelOmpLogic::endSkippedParallelRegion () {
290+ ParallelOmpLogic::internalEndSkippedParallelRegion ();
291+ }
0 commit comments