Skip to content

Commit 66191e3

Browse files
committed
Assign proper tapes also in passive parallel regions.
1 parent 3d8f4ab commit 66191e3

3 files changed

Lines changed: 19 additions & 9 deletions

File tree

include/opdi/logic/omp/implicitTaskOmpLogic.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@ void* opdi::ImplicitTaskOmpLogic::onImplicitTaskBegin(int actualParallelism, int
5555
data->parallelData = parallelData;
5656

5757
void* newTape = this->tapePool.getTape(parallelData->masterTape, index);
58-
tool->setActive(newTape, true);
58+
59+
if (parallelData->activeParallelRegion) {
60+
tool->setActive(newTape, true);
61+
}
5962

6063
data->parallelData->tapes[index] = newTape;
6164

@@ -102,7 +105,7 @@ void opdi::ImplicitTaskOmpLogic::onImplicitTaskEnd(void* dataPtr) {
102105

103106
tool->setActive(data->parallelData->tapes[data->index], false);
104107

105-
if (data->oldTape == data->parallelData->masterTape) {
108+
if (data->oldTape == data->parallelData->masterTape && data->parallelData->activeParallelRegion) {
106109
tool->setActive(data->oldTape, true);
107110
}
108111

include/opdi/logic/omp/parallelOmpLogic.cpp

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,12 @@ void opdi::ParallelOmpLogic::deleteFunc(void* dataPtr) {
114114

115115
void* opdi::ParallelOmpLogic::onParallelBegin(int maxThreads) {
116116

117-
if (tool->getThreadLocalTape() != nullptr && tool->isActive(tool->getThreadLocalTape())) {
117+
if (tool->getThreadLocalTape() != nullptr) {
118118

119119
Data* data = new Data;
120120

121121
data->maxThreads = maxThreads;
122+
data->activeParallelRegion = tool->isActive(tool->getThreadLocalTape());
122123
data->masterTape = tool->getThreadLocalTape();
123124
data->tapes = new void*[maxThreads]();
124125
data->positions.resize(maxThreads);
@@ -155,14 +156,19 @@ void opdi::ParallelOmpLogic::onParallelEnd(void* dataPtr) {
155156
}
156157
#endif
157158

158-
Handle* handle = new Handle;
159-
handle->data = (void*) data;
160-
handle->reverseFunc = ParallelOmpLogic::reverseFunc;
161-
handle->deleteFunc = ParallelOmpLogic::deleteFunc;
159+
if (data->activeParallelRegion) {
162160

163-
tool->pushExternalFunction(data->masterTape, handle);
161+
Handle* handle = new Handle;
162+
handle->data = (void*) data;
163+
handle->reverseFunc = ParallelOmpLogic::reverseFunc;
164+
handle->deleteFunc = ParallelOmpLogic::deleteFunc;
164165

165-
// do not delete data, it is deleted with the handle
166+
tool->pushExternalFunction(data->masterTape, handle);
167+
168+
// do not delete data, it is deleted with the handle
169+
} else {
170+
delete data;
171+
}
166172
}
167173
#if OPDI_OMP_LOGIC_INSTRUMENT
168174
else {

include/opdi/logic/omp/parallelOmpLogic.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ namespace opdi {
4747
public:
4848
int maxThreads;
4949
int actualThreads;
50+
bool activeParallelRegion;
5051
void* masterTape;
5152
void** tapes;
5253
std::vector<std::deque<void*>> positions;

0 commit comments

Comments
 (0)