@@ -43,130 +43,131 @@ void opdi::ImplicitTaskOmpLogic::internalFinalize() {
4343 this ->tapePool .finalize ();
4444}
4545
46- void * opdi::ImplicitTaskOmpLogic::onImplicitTaskBegin (bool initialImplicitTask , int actualParallelism , int index ,
46+ void * opdi::ImplicitTaskOmpLogic::onImplicitTaskBegin (bool isInitialImplicitTask , int actualSizeOfTeam , int indexInTeam ,
4747 void * parallelDataPtr) {
4848
49- ParallelData* parallelData = ( ParallelData*) parallelDataPtr;
49+ ParallelData* parallelData = static_cast < ParallelData*>( parallelDataPtr) ;
5050
5151 // check if the handling of the parallel region was skipped
52- if (parallelData != nullptr || initialImplicitTask ) {
52+ if (parallelData != nullptr || isInitialImplicitTask ) {
5353
54- Data* data = new Data ;
55- data-> initialImplicitTask = initialImplicitTask ;
56- data ->level = omp_get_level ();
57- data-> index = index ;
54+ ImplicitTaskData* implicitTaskData = new ImplicitTaskData ;
55+ implicitTaskData-> isInitialImplicitTask = isInitialImplicitTask ;
56+ implicitTaskData ->level = omp_get_level ();
57+ implicitTaskData-> indexInTeam = indexInTeam ;
5858
5959 // OpDiLib does not interfere with the initial implicit task AD-wise, e.g., does not track its tape / does not
6060 // assume that the tape does not change. OpDiLib uses the initial implicit task's data primarily to track its
6161 // adjoint access mode.
62- if (!initialImplicitTask ) {
63- if (index == 0 ) {
64- if (parallelData->maxThreads < actualParallelism ) {
62+ if (!isInitialImplicitTask ) {
63+ if (indexInTeam == 0 ) {
64+ if (parallelData->maximumSizeOfTeam < actualSizeOfTeam ) {
6565 OPDI_ERROR (" Actual number of threads exceeds maximum number of threads." );
6666 }
67- parallelData->actualThreads = actualParallelism ;
67+ parallelData->actualSizeOfTeam = actualSizeOfTeam ;
6868 }
6969
70- data ->oldTape = tool->getThreadLocalTape ();
71- data ->parallelData = parallelData;
70+ implicitTaskData ->oldTape = tool->getThreadLocalTape ();
71+ implicitTaskData ->parallelData = parallelData;
7272
73- void * newTape = this ->tapePool .getTape (parallelData->parentTape , index );
73+ void * newTape = this ->tapePool .getTape (parallelData->encounteringTaskTape , indexInTeam );
7474
75- if (parallelData->activeParallelRegion ) {
76- // most recent tape activity change *per thread* reflects the current activity
77- if (index == 0 ) {
78- tool->setActive (data ->oldTape , false ); // suspend recording on encountering task's tape
75+ if (parallelData->isActiveParallelRegion ) {
76+ // most recent tape activity change *per thread* reflects the current activity
77+ if (indexInTeam == 0 ) {
78+ tool->setActive (implicitTaskData ->oldTape , false ); // suspend recording on encountering task's tape
7979 }
8080 tool->setActive (newTape, true );
8181 }
8282
83- data-> tape = newTape;
83+ implicitTaskData-> newTape = newTape;
8484
85- data ->positions .push_back (tool->allocPosition ());
86- tool->getTapePosition (newTape, data ->positions .back ());
85+ implicitTaskData ->positions .push_back (tool->allocPosition ());
86+ tool->getTapePosition (newTape, implicitTaskData ->positions .back ());
8787
8888 tool->setThreadLocalTape (newTape);
8989
90- data ->adjointAccessModes .push_back (parallelData->parentAdjointAccessMode );
90+ implicitTaskData ->adjointAccessModes .push_back (parallelData->encounteringTaskAdjointAccessMode );
9191
92- parallelData->childTasks [index ] = data ;
92+ parallelData->childTaskData [indexInTeam ] = implicitTaskData ;
9393 }
9494 else {
95- data ->oldTape = nullptr ;
96- data-> tape = nullptr ;
97- data ->parallelData = nullptr ;
95+ implicitTaskData ->oldTape = nullptr ;
96+ implicitTaskData-> newTape = nullptr ;
97+ implicitTaskData ->parallelData = nullptr ;
9898
99- data ->adjointAccessModes .push_back (ImplicitTaskOmpLogic::defaultAdjointAccessMode);
99+ implicitTaskData ->adjointAccessModes .push_back (ImplicitTaskOmpLogic::defaultAdjointAccessMode);
100100 }
101101
102102 #if OPDI_OMP_LOGIC_INSTRUMENT
103103 for (auto & instrument : ompLogicInstruments) {
104- instrument->onImplicitTaskBegin (data );
104+ instrument->onImplicitTaskBegin (implicitTaskData );
105105 }
106106 #endif
107107
108- return data ;
108+ return static_cast < void *>(implicitTaskData) ;
109109 }
110110
111111 return nullptr ;
112112}
113113
114- void opdi::ImplicitTaskOmpLogic::onImplicitTaskEnd (void * dataPtr ) {
114+ void opdi::ImplicitTaskOmpLogic::onImplicitTaskEnd (void * implicitTaskDataPtr ) {
115115
116- if (dataPtr != nullptr ) {
117- Data* data = (Data*) dataPtr;
116+ if (implicitTaskDataPtr != nullptr ) {
117+
118+ ImplicitTaskData* implicitTaskData = static_cast <ImplicitTaskData*>(implicitTaskDataPtr);
118119
119120 #if OPDI_OMP_LOGIC_INSTRUMENT
120121 for (auto & instrument : ompLogicInstruments) {
121- instrument->onImplicitTaskEnd (data );
122+ instrument->onImplicitTaskEnd (implicitTaskData );
122123 }
123124 #endif
124125
125- if (!data-> initialImplicitTask ) {
126- tool->setThreadLocalTape (data ->oldTape );
126+ if (!implicitTaskData-> isInitialImplicitTask ) {
127+ tool->setThreadLocalTape (implicitTaskData ->oldTape );
127128
128- data ->positions .push_back (tool->allocPosition ());
129- tool->getTapePosition (data-> tape , data ->positions .back ());
129+ implicitTaskData ->positions .push_back (tool->allocPosition ());
130+ tool->getTapePosition (implicitTaskData-> newTape , implicitTaskData ->positions .back ());
130131
131- if (!data ->parallelData ->activeParallelRegion ) {
132- if (tool->comparePosition (data ->positions .front (), data ->positions .back ()) != 0 ) {
132+ if (!implicitTaskData ->parallelData ->isActiveParallelRegion ) {
133+ if (tool->comparePosition (implicitTaskData ->positions .front (), implicitTaskData ->positions .back ()) != 0 ) {
133134 OPDI_ERROR (" Something became active during a passive parallel region. This is not supported and will not be" ,
134135 " differentiated correctly." );
135136 }
136137 }
137138 else {
138- // most recent tape activity change *per thread* reflects the current activity
139- tool->setActive (data-> tape , false );
140- if (data-> index == 0 ) {
141- tool->setActive (data ->oldTape , true ); // resume recording on encountering task's tape
139+ // most recent tape activity change *per thread* reflects the current activity
140+ tool->setActive (implicitTaskData-> newTape , false );
141+ if (implicitTaskData-> indexInTeam == 0 ) {
142+ tool->setActive (implicitTaskData ->oldTape , true ); // resume recording on encountering task's tape
142143 }
143144 }
144145
145146 // do not delete data, it is deleted as part of parallel regions
146147 }
147148 else {
148149 // delete task data, there is no parallel region to do so
149- delete data ;
150+ delete implicitTaskData ;
150151 }
151152 }
152153}
153154
154155void opdi::ImplicitTaskOmpLogic::resetTask (void * position, opdi::LogicInterface::AdjointAccessMode mode) {
155156
156- void * taskDataPtr = backend->getTaskData ();
157+ void * implicitTaskDataPtr = backend->getTaskData ();
157158
158- if (taskDataPtr != nullptr ) {
159- opdi::ImplicitTaskOmpLogic::Data* taskData = reinterpret_cast <opdi::ImplicitTaskOmpLogic::Data *>(taskDataPtr );
159+ if (implicitTaskDataPtr != nullptr ) {
160+ ImplicitTaskData* implicitTaskData = static_cast <ImplicitTaskData *>(implicitTaskDataPtr );
160161
161- if (!taskData-> initialImplicitTask ) {
162- assert (tool->comparePosition (taskData ->positions .front (), position) <= 0 );
162+ if (!implicitTaskData-> isInitialImplicitTask ) {
163+ assert (tool->comparePosition (implicitTaskData ->positions .front (), position) <= 0 );
163164
164- while (tool->comparePosition (taskData ->positions .back (), position) > 0 ) {
165- taskData ->positions .pop_back ();
166- taskData ->adjointAccessModes .pop_back ();
165+ while (tool->comparePosition (implicitTaskData ->positions .back (), position) > 0 ) {
166+ implicitTaskData ->positions .pop_back ();
167+ implicitTaskData ->adjointAccessModes .pop_back ();
167168 }
168169 }
169170
170- taskData ->adjointAccessModes .back () = mode;
171+ implicitTaskData ->adjointAccessModes .back () = mode;
171172 }
172173}
0 commit comments