@@ -133,24 +133,17 @@ void opdi::ParallelOmpLogic::deleteFunc(void* dataPtr) {
133133}
134134
135135opdi::LogicInterface::AdjointAccessMode opdi::ParallelOmpLogic::internalGetAdjointAccessMode (void * taskDataPtr) const {
136- if (taskDataPtr == nullptr ) { // initial implicit task
137- return InitialImplicitTaskAdjointAccessControl::currentMode ();
138- }
139- else {
140- ImplicitTaskOmpLogic::Data* taskData = reinterpret_cast <ImplicitTaskOmpLogic::Data*>(taskDataPtr);
141-
142- return taskData->adjointAccessModes .back ();
143- }
136+ ImplicitTaskOmpLogic::Data* taskData = reinterpret_cast <ImplicitTaskOmpLogic::Data*>(taskDataPtr);
137+ return taskData->adjointAccessModes .back ();
144138}
145139
146140void opdi::ParallelOmpLogic::internalSetAdjointAccessMode (void * taskDataPtr, AdjointAccessMode mode) {
141+ ImplicitTaskOmpLogic::Data* taskData = reinterpret_cast <ImplicitTaskOmpLogic::Data*>(taskDataPtr);
147142
148- if (taskDataPtr == nullptr ) { // initial implicit task
149- InitialImplicitTaskAdjointAccessControl::currentMode () = mode;
143+ if (taskData-> initialImplicitTask ) {
144+ taskData-> adjointAccessModes . back () = mode;
150145 }
151146 else {
152- ImplicitTaskOmpLogic::Data* taskData = reinterpret_cast <ImplicitTaskOmpLogic::Data*>(taskDataPtr);
153-
154147 taskData->adjointAccessModes .push_back (mode);
155148 taskData->positions .push_back (tool->allocPosition ());
156149 tool->getTapePosition (taskData->tape , taskData->positions .back ());
@@ -245,31 +238,15 @@ void opdi::ParallelOmpLogic::setAdjointAccessMode(opdi::LogicInterface::AdjointA
245238 }
246239 #endif
247240
248- void * parallelDataPtr = backend->getParallelData ();
249- void * taskDataPtr = nullptr ;
250-
251- if (parallelDataPtr != nullptr ) { // not initial implicit task
252- Data* parallelData = reinterpret_cast <Data*>(parallelDataPtr);
253- taskDataPtr = parallelData->childTasks [omp_get_thread_num ()];
254- }
255-
256- assert (taskDataPtr == nullptr || ((ImplicitTaskOmpLogic::Data*)taskDataPtr)->tape == tool->getThreadLocalTape ());
257-
241+ void * taskDataPtr = backend->getTaskData ();
242+ assert (taskDataPtr != nullptr );
258243 internalSetAdjointAccessMode (taskDataPtr, mode);
259244 #endif
260245}
261246
262247opdi::LogicInterface::AdjointAccessMode opdi::ParallelOmpLogic::getAdjointAccessMode () const {
263- void * parallelDataPtr = backend->getParallelData ();
264- void * taskDataPtr = nullptr ;
265-
266- if (parallelDataPtr != nullptr ) { // not initial implicit task
267- Data* parallelData = reinterpret_cast <Data*>(parallelDataPtr);
268- taskDataPtr = parallelData->childTasks [omp_get_thread_num ()];
269- }
270-
271- assert (taskDataPtr == nullptr || ((ImplicitTaskOmpLogic::Data*)taskDataPtr)->tape == tool->getThreadLocalTape ());
272-
248+ void * taskDataPtr = backend->getTaskData ();
249+ assert (taskDataPtr != nullptr );
273250 return internalGetAdjointAccessMode (taskDataPtr);
274251}
275252
0 commit comments