Skip to content

Commit 744b28c

Browse files
committed
Instrumentation for actions always uses AD data.
Adapt order of functions in instrument. Consolidations in SyncRegionOmpLogic. Merge branch 'revisit/instrumentation' into develop
2 parents 2c43691 + b90b93b commit 744b28c

7 files changed

Lines changed: 148 additions & 135 deletions

File tree

include/opdi/logic/omp/instrument/ompLogicInstrumentInterface.hpp

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,33 +43,43 @@ namespace opdi {
4343

4444
virtual ~OmpLogicInstrumentInterface() {}
4545

46-
virtual void reverseFlush() {}
46+
/* instrumentation of forward actions */
4747

48-
virtual void reverseImplicitTaskBegin(ImplicitTaskData* /*data*/) {}
49-
virtual void reverseImplicitTaskEnd(ImplicitTaskData* /*data*/) {}
50-
virtual void reverseImplicitTaskPart(ImplicitTaskData* /*data*/, std::size_t /*part*/) {}
48+
virtual void onParallelBegin(ParallelData* /*data*/) {}
49+
virtual void onParallelEnd(ParallelData* /*data*/) {}
5150
virtual void onImplicitTaskBegin(ImplicitTaskData* /*data*/) {}
5251
virtual void onImplicitTaskEnd(ImplicitTaskData* /*data*/) {}
5352

54-
virtual void reverseMutexWait(MutexOmpLogic::Data* /*data*/) {}
55-
virtual void reverseMutexDecrement(MutexOmpLogic::Data* /*data*/) {}
56-
virtual void onMutexDestroyed(LogicInterface::MutexKind /*kind*/, std::size_t /*waitId*/) {}
5753
virtual void onMutexAcquired(MutexOmpLogic::Data* /*data*/) {}
5854
virtual void onMutexReleased(MutexOmpLogic::Data* /*data*/) {}
55+
virtual void onMutexDestroyed(MutexOmpLogic::Data* /*data*/) {}
56+
57+
virtual void onSyncRegion(SyncRegionOmpLogic::Data* /*data*/) {}
58+
59+
virtual void onMasked(MaskedOmpLogic::Data* /*data*/) {}
60+
61+
virtual void onWork(WorkOmpLogic::Data* /*data*/) {}
62+
63+
/* instrumentation of reverse actions */
5964

6065
virtual void reverseParallelBegin(ParallelData* /*data*/) {}
6166
virtual void reverseParallelEnd(ParallelData* /*data*/) {}
62-
virtual void onParallelBegin(ParallelData* /*data*/) {}
63-
virtual void onParallelEnd(ParallelData* /*data*/) {}
67+
virtual void reverseImplicitTaskBegin(ImplicitTaskData* /*data*/) {}
68+
virtual void reverseImplicitTaskEnd(ImplicitTaskData* /*data*/) {}
69+
virtual void reverseImplicitTaskPart(ImplicitTaskData* /*data*/, std::size_t /*part*/) {}
70+
71+
virtual void reverseMutexWait(MutexOmpLogic::Data* /*data*/) {}
72+
virtual void reverseMutexDecrement(MutexOmpLogic::Data* /*data*/) {}
6473

6574
virtual void reverseSyncRegion(SyncRegionOmpLogic::Data* /*data*/) {}
66-
virtual void onSyncRegion(LogicInterface::SyncRegionKind /*kind*/, LogicInterface::ScopeEndpoint /*endpoint*/) {}
75+
76+
virtual void reverseMasked(MaskedOmpLogic::Data* /*data*/) {}
6777

6878
virtual void reverseWork(WorkOmpLogic::Data* /*data*/) {}
69-
virtual void onWork(LogicInterface::WorksharingKind /*kind*/, LogicInterface::ScopeEndpoint /*endpoint*/) {}
7079

71-
virtual void reverseMasked(MaskedOmpLogic::Data* /*data*/) {}
72-
virtual void onMasked(LogicInterface::ScopeEndpoint /*endpoint*/) {}
80+
virtual void reverseFlush() {}
81+
82+
/* instrumentation of other functionality */
7383

7484
virtual void onSetAdjointAccessMode(LogicInterface::AdjointAccessMode /*adjointAccess*/) {}
7585
};

include/opdi/logic/omp/instrument/ompLogicOutputInstrument.hpp

Lines changed: 99 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -36,34 +36,48 @@ namespace opdi {
3636

3737
virtual ~OmpLogicOutputInstrument() {}
3838

39-
virtual void reverseFlush() {
40-
TapedOutput::print("R FLSH l", omp_get_level(), "t", omp_get_thread_num());
41-
}
42-
43-
virtual void reverseImplicitTaskBegin(ImplicitTaskData* data) {
44-
assert(tool != nullptr);
45-
TapedOutput::print("R IMTB l", data->level,
46-
"t", data->indexInTeam,
47-
"tape", data->newTape,
48-
"pos", tool->positionToString(data->positions.back()));
49-
}
39+
/* instrumentation of forward actions */
5040

51-
virtual void reverseImplicitTaskEnd(ImplicitTaskData* data) {
52-
assert(tool != nullptr);
53-
TapedOutput::print("R IMTE l", data->level,
54-
"t", data->indexInTeam,
55-
"tape", data->newTape,
56-
"pos", tool->positionToString(data->positions.front()));
41+
virtual void onParallelBegin(ParallelData* data) {
42+
if (data == nullptr) {
43+
TapedOutput::print("F PARB l", omp_get_level(),
44+
"t", omp_get_thread_num(),
45+
"(skipped)");
46+
}
47+
else if (!data->isActiveParallelRegion) {
48+
TapedOutput::print("F PARB l", omp_get_level(),
49+
"t", omp_get_thread_num(),
50+
"parent", data->encounteringTaskTape,
51+
"mode", data->encounteringTaskAdjointAccessMode,
52+
"(passive)");
53+
}
54+
else {
55+
TapedOutput::print("F PARB l", omp_get_level(),
56+
"t", omp_get_thread_num(),
57+
"parent", data->encounteringTaskTape,
58+
"mode", data->encounteringTaskAdjointAccessMode);
59+
}
5760
}
5861

59-
virtual void reverseImplicitTaskPart(ImplicitTaskData* data, std::size_t part) {
60-
assert(tool != nullptr);
61-
TapedOutput::print("R IMTP l", data->level,
62-
"t", data->indexInTeam,
63-
"tape", data->newTape,
64-
"start", tool->positionToString(data->positions[part]),
65-
"end", tool->positionToString(data->positions[part - 1]),
66-
"mode", data->adjointAccessModes[part - 1]);
62+
virtual void onParallelEnd(ParallelData* data) {
63+
if (data == nullptr) {
64+
TapedOutput::print("F PARE l", omp_get_level(),
65+
"t", omp_get_thread_num(),
66+
"(skipped)");
67+
}
68+
else if (!data->isActiveParallelRegion) {
69+
TapedOutput::print("F PARE l", omp_get_level(),
70+
"t", omp_get_thread_num(),
71+
"parent", data->encounteringTaskTape,
72+
"mode", data->encounteringTaskAdjointAccessMode,
73+
"(passive)");
74+
}
75+
else {
76+
TapedOutput::print("F PARE l", omp_get_level(),
77+
"t", omp_get_thread_num(),
78+
"parent", data->encounteringTaskTape,
79+
"mode", data->encounteringTaskAdjointAccessMode);
80+
}
6781
}
6882

6983
virtual void onImplicitTaskBegin(ImplicitTaskData* data) {
@@ -94,41 +108,40 @@ namespace opdi {
94108
}
95109
}
96110

97-
virtual void reverseMutexWait(MutexOmpLogic::Data* data) {
98-
TapedOutput::print("R MWAI l", omp_get_level(),
99-
"t", omp_get_thread_num(),
111+
virtual void onMutexAcquired(MutexOmpLogic::Data* data) {
112+
TapedOutput::print("F MACQ t", omp_get_thread_num(),
100113
"kind", data->mutexKind,
101114
"id", data->waitId,
102-
"until", data->counter);
115+
"at", data->counter);
103116
}
104117

105-
virtual void reverseMutexDecrement(MutexOmpLogic::Data* data) {
106-
TapedOutput::print("R MDEC t", omp_get_thread_num(),
118+
virtual void onMutexReleased(MutexOmpLogic::Data* data) {
119+
TapedOutput::print("F MREL t", omp_get_thread_num(),
107120
"kind", data->mutexKind,
108121
"id", data->waitId,
109-
"to", data->counter);
122+
"at", data->counter);
110123
}
111124

112-
virtual void onMutexDestroyed(LogicInterface::MutexKind kind, std::size_t waitId) {
125+
virtual void onMutexDestroyed(MutexOmpLogic::Data* data) {
113126
TapedOutput::print("F MDES t", omp_get_thread_num(),
114-
"kind", kind,
115-
"id", waitId);
127+
"kind", data->mutexKind,
128+
"id", data->waitId);
116129
}
117130

118-
virtual void onMutexAcquired(MutexOmpLogic::Data* data) {
119-
TapedOutput::print("F MACQ t", omp_get_thread_num(),
120-
"kind", data->mutexKind,
121-
"id", data->waitId,
122-
"at", data->counter);
131+
virtual void onSyncRegion(SyncRegionOmpLogic::Data* data) {
132+
TapedOutput::print("F SYNC t", omp_get_thread_num(), "kind", data->kind, "endp", data->endpoint);
123133
}
124134

125-
virtual void onMutexReleased(MutexOmpLogic::Data* data) {
126-
TapedOutput::print("F MREL t", omp_get_thread_num(),
127-
"kind", data->mutexKind,
128-
"id", data->waitId,
129-
"at", data->counter);
135+
virtual void onMasked(MaskedOmpLogic::Data* data) {
136+
TapedOutput::print("F MASK t", omp_get_thread_num(), "endp", data->endpoint);
137+
}
138+
139+
virtual void onWork(WorkOmpLogic::Data* data) {
140+
TapedOutput::print("F WORK t", omp_get_thread_num(), "kind", data->kind, "endp", data->endpoint);
130141
}
131142

143+
/* instrumentation of reverse actions */
144+
132145
virtual void reverseParallelBegin(ParallelData* data) {
133146
TapedOutput::print("R PARB l", omp_get_level(),
134147
"t", omp_get_thread_num(),
@@ -141,72 +154,65 @@ namespace opdi {
141154
"parent", data->encounteringTaskTape);
142155
}
143156

144-
virtual void onParallelBegin(ParallelData* data) {
145-
if (data == nullptr) {
146-
TapedOutput::print("F PARB l", omp_get_level(),
147-
"t", omp_get_thread_num(),
148-
"(skipped)");
149-
}
150-
else if (!data->isActiveParallelRegion) {
151-
TapedOutput::print("F PARB l", omp_get_level(),
152-
"t", omp_get_thread_num(),
153-
"parent", data->encounteringTaskTape,
154-
"mode", data->encounteringTaskAdjointAccessMode,
155-
"(passive)");
156-
}
157-
else {
158-
TapedOutput::print("F PARB l", omp_get_level(),
159-
"t", omp_get_thread_num(),
160-
"parent", data->encounteringTaskTape,
161-
"mode", data->encounteringTaskAdjointAccessMode);
162-
}
157+
virtual void reverseImplicitTaskBegin(ImplicitTaskData* data) {
158+
assert(tool != nullptr);
159+
TapedOutput::print("R IMTB l", data->level,
160+
"t", data->indexInTeam,
161+
"tape", data->newTape,
162+
"pos", tool->positionToString(data->positions.back()));
163163
}
164164

165-
virtual void onParallelEnd(ParallelData* data) {
166-
if (data == nullptr) {
167-
TapedOutput::print("F PARE l", omp_get_level(),
168-
"t", omp_get_thread_num(),
169-
"(skipped)");
170-
}
171-
else if (!data->isActiveParallelRegion) {
172-
TapedOutput::print("F PARE l", omp_get_level(),
173-
"t", omp_get_thread_num(),
174-
"parent", data->encounteringTaskTape,
175-
"mode", data->encounteringTaskAdjointAccessMode,
176-
"(passive)");
177-
}
178-
else {
179-
TapedOutput::print("F PARE l", omp_get_level(),
180-
"t", omp_get_thread_num(),
181-
"parent", data->encounteringTaskTape,
182-
"mode", data->encounteringTaskAdjointAccessMode);
183-
}
165+
virtual void reverseImplicitTaskEnd(ImplicitTaskData* data) {
166+
assert(tool != nullptr);
167+
TapedOutput::print("R IMTE l", data->level,
168+
"t", data->indexInTeam,
169+
"tape", data->newTape,
170+
"pos", tool->positionToString(data->positions.front()));
184171
}
185172

186-
virtual void reverseSyncRegion(SyncRegionOmpLogic::Data* data) {
187-
TapedOutput::print("R SYNC l", omp_get_level(), "t", omp_get_thread_num(), "kind", data->kind, "endp", data->endpoint);
173+
virtual void reverseImplicitTaskPart(ImplicitTaskData* data, std::size_t part) {
174+
assert(tool != nullptr);
175+
TapedOutput::print("R IMTP l", data->level,
176+
"t", data->indexInTeam,
177+
"tape", data->newTape,
178+
"start", tool->positionToString(data->positions[part]),
179+
"end", tool->positionToString(data->positions[part - 1]),
180+
"mode", data->adjointAccessModes[part - 1]);
188181
}
189182

190-
virtual void onSyncRegion(LogicInterface::SyncRegionKind kind, LogicInterface::ScopeEndpoint endpoint) {
191-
TapedOutput::print("F SYNC t", omp_get_thread_num(), "kind", kind, "endp", endpoint);
183+
virtual void reverseMutexWait(MutexOmpLogic::Data* data) {
184+
TapedOutput::print("R MWAI l", omp_get_level(),
185+
"t", omp_get_thread_num(),
186+
"kind", data->mutexKind,
187+
"id", data->waitId,
188+
"until", data->counter);
192189
}
193190

194-
virtual void reverseWork(WorkOmpLogic::Data* data) {
195-
TapedOutput::print("R WORK t", omp_get_thread_num(), "kind", data->kind, "endp", data->endpoint);
191+
virtual void reverseMutexDecrement(MutexOmpLogic::Data* data) {
192+
TapedOutput::print("R MDEC t", omp_get_thread_num(),
193+
"kind", data->mutexKind,
194+
"id", data->waitId,
195+
"to", data->counter);
196196
}
197197

198-
virtual void onWork(LogicInterface::WorksharingKind kind, LogicInterface::ScopeEndpoint endpoint) {
199-
TapedOutput::print("F WORK t", omp_get_thread_num(), "kind", kind, "endp", endpoint);
198+
virtual void reverseSyncRegion(SyncRegionOmpLogic::Data* data) {
199+
TapedOutput::print("R SYNC l", omp_get_level(), "t", omp_get_thread_num(), "kind", data->kind, "endp", data->endpoint);
200200
}
201201

202202
virtual void reverseMasked(MaskedOmpLogic::Data* data) {
203203
TapedOutput::print("R MASK t", omp_get_thread_num(), "endp", data->endpoint);
204204
}
205205

206-
virtual void onMasked(LogicInterface::ScopeEndpoint endpoint) {
207-
TapedOutput::print("F MASK t", omp_get_thread_num(), "endp", endpoint);
206+
virtual void reverseWork(WorkOmpLogic::Data* data) {
207+
TapedOutput::print("R WORK t", omp_get_thread_num(), "kind", data->kind, "endp", data->endpoint);
208+
}
209+
210+
virtual void reverseFlush() {
211+
TapedOutput::print("R FLSH l", omp_get_level(), "t", omp_get_thread_num());
208212
}
209213

214+
/* instrumentation of other functionality */
215+
210216
virtual void onSetAdjointAccessMode(LogicInterface::AdjointAccessMode adjointAccess) {
211217
TapedOutput::print("F SAAM t", omp_get_thread_num(), "mode", adjointAccess);
212218
}

include/opdi/logic/omp/maskedOmpLogic.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@ void opdi::MaskedOmpLogic::onMasked(ScopeEndpoint endpoint) {
5656
#if OPDI_OMP_LOGIC_INSTRUMENT
5757
if (tool != nullptr && tool->getThreadLocalTape() != nullptr && tool->isActive(tool->getThreadLocalTape())) {
5858

59-
for (auto& instrument : ompLogicInstruments) {
60-
instrument->onMasked(endpoint);
61-
}
62-
6359
Data* data = new Data;
6460
data->endpoint = endpoint;
6561

62+
for (auto& instrument : ompLogicInstruments) {
63+
instrument->onMasked(data);
64+
}
65+
6666
Handle* handle = new Handle;
6767
handle->data = static_cast<void*>(data);
6868
handle->reverseFunc = MaskedOmpLogic::reverseFunc;

include/opdi/logic/omp/mutexOmpLogic.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,9 @@ void opdi::MutexOmpLogic::internalFinalize() {
118118
void opdi::MutexOmpLogic::onMutexDestroyed(MutexKind mutexKind, WaitId waitId) {
119119

120120
#if OPDI_OMP_LOGIC_INSTRUMENT
121+
Data data = {mutexKind, waitId, 0};
121122
for (auto& instrument : ompLogicInstruments) {
122-
instrument->onMutexDestroyed(mutexKind, waitId);
123+
instrument->onMutexDestroyed(&data);
123124
}
124125
#endif
125126

include/opdi/logic/omp/syncRegionOmpLogic.cpp

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,6 @@ void opdi::SyncRegionOmpLogic::deleteFunc(void* dataPtr) {
5050
delete data;
5151
}
5252

53-
void opdi::SyncRegionOmpLogic::internalPushHandle(SyncRegionKind kind, ScopeEndpoint endpoint) {
54-
55-
Data* data = new Data;
56-
data->kind = kind;
57-
data->endpoint = endpoint;
58-
59-
Handle* handle = new Handle;
60-
handle->data = static_cast<void*>(data);
61-
handle->reverseFunc = SyncRegionOmpLogic::reverseFunc;
62-
handle->deleteFunc = SyncRegionOmpLogic::deleteFunc;
63-
64-
tool->pushExternalFunction(tool->getThreadLocalTape(), handle);
65-
}
66-
6753
bool opdi::SyncRegionOmpLogic::requiresReverseBarrier(SyncRegionKind kind, ScopeEndpoint endpoint) {
6854

6955
static std::size_t constexpr syncRegionBehaviour[] = {
@@ -84,14 +70,26 @@ void opdi::SyncRegionOmpLogic::onSyncRegion(SyncRegionKind kind, ScopeEndpoint e
8470

8571
if (tool != nullptr && tool->getThreadLocalTape() != nullptr && tool->isActive(tool->getThreadLocalTape())) {
8672

73+
Data* data = new Data;
74+
data->kind = kind;
75+
data->endpoint = endpoint;
76+
8777
#if OPDI_OMP_LOGIC_INSTRUMENT
88-
for (auto& instrument : ompLogicInstruments) {
89-
instrument->onSyncRegion(kind, endpoint);
90-
}
78+
for (auto& instrument : ompLogicInstruments) {
79+
instrument->onSyncRegion(data);
80+
}
9181
#endif
9282

9383
if (requiresReverseBarrier(kind, endpoint)) {
94-
internalPushHandle(kind, endpoint);
84+
Handle* handle = new Handle;
85+
handle->data = static_cast<void*>(data);
86+
handle->reverseFunc = SyncRegionOmpLogic::reverseFunc;
87+
handle->deleteFunc = SyncRegionOmpLogic::deleteFunc;
88+
89+
tool->pushExternalFunction(tool->getThreadLocalTape(), handle);
90+
}
91+
else {
92+
delete data;
9593
}
9694
}
9795
}

include/opdi/logic/omp/syncRegionOmpLogic.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ namespace opdi {
5050
static void reverseFunc(void* dataPtr);
5151
static void deleteFunc(void* dataPtr);
5252

53-
void internalPushHandle(SyncRegionKind kind, ScopeEndpoint endpoint);
54-
5553
public:
5654

5755
virtual void onSyncRegion(SyncRegionKind kind, ScopeEndpoint endpoint);

0 commit comments

Comments
 (0)