Skip to content

Commit c4a368d

Browse files
committed
WIP towards resetting adjoint access mode.
1 parent 76f9f84 commit c4a368d

3 files changed

Lines changed: 30 additions & 0 deletions

File tree

include/opdi/logic/logicInterface.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,13 @@ namespace opdi {
8585
virtual void setAdjointAccessMode(AdjointAccessMode adjointAccess) = 0;
8686
virtual AdjointAccessMode getAdjointAccessMode() const = 0;
8787

88+
/** @brief Complement positional tape resets by OpDiLib-specific cleanup.
89+
*
90+
* Cleanup performed for the task of the calling thread. Reverts changes of the adjoint access mode, up to the
91+
* last adjoint access mode that was set at this position.
92+
*/
93+
virtual void resetTask(void* position) = 0;
94+
8895
virtual void addReverseBarrier() = 0;
8996
virtual void addReverseFlush() = 0;
9097
};

include/opdi/logic/omp/implicitTaskOmpLogic.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
*
2424
*/
2525

26+
#include <cassert>
27+
28+
#include "../../backend/backendInterface.hpp"
2629
#include "../../config.hpp"
2730
#include "../../helpers/exceptions.hpp"
2831
#include "../../tool/toolInterface.hpp"
@@ -117,3 +120,21 @@ void opdi::ImplicitTaskOmpLogic::onImplicitTaskEnd(void* dataPtr) {
117120
// do not delete data, it is deleted as part of parallel regions
118121
}
119122
}
123+
124+
void opdi::ImplicitTaskOmpLogic::resetTask(void* position) {
125+
126+
void* parallelDataPtr = backend->getParallelData();
127+
128+
if (parallelDataPtr) {
129+
opdi::ParallelOmpLogic::Data* parallelData = reinterpret_cast<opdi::ParallelOmpLogic::Data*>(parallelDataPtr);
130+
131+
Data* taskData = reinterpret_cast<Data*>(parallelData->childTasks[omp_get_thread_num()]);
132+
133+
assert(tool->comparePosition(taskData->positions.front(), position) <= 0);
134+
135+
while (tool->comparePosition(taskData->positions.back(), position) > 0) {
136+
taskData->positions.pop_back();
137+
taskData->adjointAccessModes.pop_back();
138+
}
139+
}
140+
}

include/opdi/logic/omp/implicitTaskOmpLogic.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,7 @@ namespace opdi {
6161

6262
virtual void* onImplicitTaskBegin(int actualParallelism, int index, void* parallelDataPtr);
6363
virtual void onImplicitTaskEnd(void* dataPtr);
64+
65+
virtual void resetTask(void* position);
6466
};
6567
}

0 commit comments

Comments
 (0)