Skip to content

Commit 9506e76

Browse files
committed
Revise macros for the single construct.
Generate both endpoints for barrier-related events. Clear distinction betweeen implicit and broadcast-related barrier. Erase instead of reset when delaying the barrier. Add comments.
1 parent d41c56c commit 9506e76

1 file changed

Lines changed: 16 additions & 5 deletions

File tree

include/opdi/backend/macro/macros.hpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,41 +66,52 @@
6666
bool constexpr opdiInternalBarrierIndicator = true; \
6767
void* opdiInternalTapePosition1 = opdi::tool->allocPosition(); \
6868
opdi::tool->getTapePosition(opdi::tool->getThreadLocalTape(), opdiInternalTapePosition1); \
69+
/* broadcast-related barrier */ \
6970
opdi::logic->onSyncRegion(opdi::LogicInterface::SyncRegionKind::BarrierImplementation, \
7071
opdi::LogicInterface::ScopeEndpoint::Begin); \
72+
opdi::logic->onSyncRegion(opdi::LogicInterface::SyncRegionKind::BarrierImplementation, \
73+
opdi::LogicInterface::ScopeEndpoint::End); \
7174
void* opdiInternalTapePosition2 = opdi::tool->allocPosition(); \
7275
opdi::tool->getTapePosition(opdi::tool->getThreadLocalTape(), opdiInternalTapePosition2); \
7376
opdi::ImplicitBarrierTools::beginRegionWithImplicitBarrier(); \
7477
{ \
75-
opdi::SingleProbe localSingleProbe; \
78+
opdi::SingleProbe localSingleProbe; /* worksharing events */ \
7679
OPDI_PRAGMA(omp single __VA_ARGS__) \
7780
{ \
81+
/* delay broadcast-related barrier for executor */ \
7882
opdi::tool->erase(opdi::tool->getThreadLocalTape(), opdiInternalTapePosition1, opdiInternalTapePosition2);
7983

8084
#define OPDI_SINGLE_NOWAIT(...) \
8185
{ \
8286
bool constexpr opdiInternalBarrierIndicator = false; \
8387
void* opdiInternalTapePosition1 = opdi::tool->allocPosition(); \
84-
void* opdiInternalTapePosition2 = opdi::tool->allocPosition(); /* for consistency with the end macro */ \
8588
opdi::tool->getTapePosition(opdi::tool->getThreadLocalTape(), opdiInternalTapePosition1); \
89+
/* broadcast-related barrier */ \
8690
opdi::logic->onSyncRegion(opdi::LogicInterface::SyncRegionKind::BarrierImplementation, \
8791
opdi::LogicInterface::ScopeEndpoint::Begin); \
92+
opdi::logic->onSyncRegion(opdi::LogicInterface::SyncRegionKind::BarrierImplementation, \
93+
opdi::LogicInterface::ScopeEndpoint::End); \
94+
void* opdiInternalTapePosition2 = opdi::tool->allocPosition(); \
95+
opdi::tool->getTapePosition(opdi::tool->getThreadLocalTape(), opdiInternalTapePosition2); \
8896
opdi::ImplicitBarrierTools::beginRegionWithImplicitBarrier(); \
8997
{ \
9098
opdi::SingleProbe localSingleProbe; \
9199
OPDI_PRAGMA(omp single nowait __VA_ARGS__) \
92100
{ \
93-
opdi::tool->reset(opdi::tool->getThreadLocalTape(), opdiInternalTapePosition1);
101+
/* delay broadcast-related barrier for executor */ \
102+
opdi::tool->erase(opdi::tool->getThreadLocalTape(), opdiInternalTapePosition1, opdiInternalTapePosition2);
94103

95104
#define OPDI_END_SINGLE \
105+
/* broadcast-related barrier */ \
96106
opdi::logic->onSyncRegion(opdi::LogicInterface::SyncRegionKind::BarrierImplementation, \
97107
opdi::LogicInterface::ScopeEndpoint::Begin); \
108+
opdi::logic->onSyncRegion(opdi::LogicInterface::SyncRegionKind::BarrierImplementation, \
109+
opdi::LogicInterface::ScopeEndpoint::End); \
98110
} \
99-
opdi::logic->onSyncRegion(opdi::LogicInterface::SyncRegionKind::BarrierImplementation, \
100-
opdi::LogicInterface::ScopeEndpoint::End); \
101111
} \
102112
opdi::tool->freePosition(opdiInternalTapePosition1); \
103113
opdi::tool->freePosition(opdiInternalTapePosition2); \
114+
/* implicit barrier */ \
104115
opdi::ImplicitBarrierTools::implicitBarrierStack.top() = opdiInternalBarrierIndicator; \
105116
opdi::ImplicitBarrierTools::endRegionWithImplicitBarrier(); \
106117
}

0 commit comments

Comments
 (0)