Skip to content

Commit 9a4c116

Browse files
committed
Assert expected adjoint access mode in tests.
1 parent 8f48e7a commit 9a4c116

5 files changed

Lines changed: 66 additions & 0 deletions

tests/tests/TestAdjointAccessControlGlobal.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,12 @@ struct TestAdjointAccessControlGlobal : public TestBase<4, 1, 3, TestAdjointAcce
4141
T* b = new T[N];
4242
T* c = new T[N];
4343

44+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
45+
4446
OPDI_PARALLEL()
4547
{
48+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
49+
4650
// shared reading of in
4751
OPDI_FOR()
4852
for (int i = 0; i < N; ++i) {
@@ -52,12 +56,18 @@ struct TestAdjointAccessControlGlobal : public TestBase<4, 1, 3, TestAdjointAcce
5256
}
5357
OPDI_END_PARALLEL
5458

59+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
60+
5561
#if _OPENMP
5662
opdi::logic->setAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
5763
#endif
5864

65+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
66+
5967
OPDI_PARALLEL()
6068
{
69+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
70+
6171
// no shared reading
6272
OPDI_FOR()
6373
for (int i = 0; i < N; ++i) {
@@ -70,6 +80,8 @@ struct TestAdjointAccessControlGlobal : public TestBase<4, 1, 3, TestAdjointAcce
7080
opdi::logic->addReverseBarrier();
7181
#endif
7282

83+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
84+
7385
// shared reading on a
7486
OPDI_FOR()
7587
for (int i = 0; i < N; ++i) {
@@ -83,6 +95,8 @@ struct TestAdjointAccessControlGlobal : public TestBase<4, 1, 3, TestAdjointAcce
8395
}
8496
OPDI_END_PARALLEL
8597

98+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
99+
86100
for (int i = 0; i < N; ++i) {
87101
out[0] += c[i];
88102
}

tests/tests/TestAdjointAccessControlLocal.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,11 @@ struct TestAdjointAccessControlLocal : public TestBase<4, 1, 3, TestAdjointAcces
4141
T* b = new T[N];
4242
T* c = new T[N];
4343

44+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
45+
4446
OPDI_PARALLEL()
4547
{
48+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
4649

4750
// shared reading of in
4851
OPDI_FOR()
@@ -55,6 +58,8 @@ struct TestAdjointAccessControlLocal : public TestBase<4, 1, 3, TestAdjointAcces
5558
opdi::logic->setAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
5659
#endif
5760

61+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
62+
5863
// reading from a, no shared reading
5964
OPDI_FOR()
6065
for (int i = 0; i < N; ++i) {
@@ -67,6 +72,8 @@ struct TestAdjointAccessControlLocal : public TestBase<4, 1, 3, TestAdjointAcces
6772
opdi::logic->addReverseBarrier();
6873
#endif
6974

75+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
76+
7077
// shared reading on a
7178
OPDI_FOR(schedule(static, 1))
7279
for (int i = 0; i < N; ++i) {
@@ -80,6 +87,8 @@ struct TestAdjointAccessControlLocal : public TestBase<4, 1, 3, TestAdjointAcces
8087
}
8188
OPDI_END_PARALLEL
8289

90+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
91+
8392
for (int i = 0; i < N; ++i) {
8493
out[0] += c[i];
8594
}

tests/tests/TestAdjointAccessControlNested.hpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,12 @@ struct TestAdjointAccessControlNested : public TestBase<4, 1, 3, TestAdjointAcce
4141
T* b = new T[N];
4242
T* c = new T[N];
4343

44+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
45+
4446
OPDI_PARALLEL()
4547
{
48+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
49+
4650
int outerNThreads = omp_get_num_threads();
4751
int outerStart = ((N - 1) / outerNThreads + 1) * omp_get_thread_num();
4852
int outerEnd = std::min(N, ((N - 1) / outerNThreads + 1) * (omp_get_thread_num() + 1));
@@ -56,6 +60,8 @@ struct TestAdjointAccessControlNested : public TestBase<4, 1, 3, TestAdjointAcce
5660
opdi::logic->setAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
5761
#endif
5862

63+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
64+
5965
// no shared reading
6066
for (int i = outerStart; i < outerEnd; ++i) {
6167
b[i] = sin(exp(a[i]));
@@ -65,6 +71,8 @@ struct TestAdjointAccessControlNested : public TestBase<4, 1, 3, TestAdjointAcce
6571

6672
OPDI_PARALLEL()
6773
{
74+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
75+
6876
int innerNThreads = omp_get_num_threads();
6977
int innerStart = outerStart + (((outerEnd - outerStart) - 1) / innerNThreads + 1) * omp_get_thread_num();
7078
int innerEnd = std::min(outerEnd, outerStart + (((outerEnd - outerStart) - 1) / innerNThreads + 1)
@@ -74,6 +82,8 @@ struct TestAdjointAccessControlNested : public TestBase<4, 1, 3, TestAdjointAcce
7482
opdi::logic->setAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
7583
#endif
7684

85+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
86+
7787
// shared reading on a
7888
for (int j = innerStart; j < innerEnd; ++j) {
7989
T arg = b[j];
@@ -87,6 +97,8 @@ struct TestAdjointAccessControlNested : public TestBase<4, 1, 3, TestAdjointAcce
8797
opdi::logic->setAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
8898
#endif
8999

100+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
101+
90102
// no shared reading
91103
for (int j = innerStart; j < innerEnd; ++j) {
92104
c[j] = sin(exp(c[j]));
@@ -96,11 +108,15 @@ struct TestAdjointAccessControlNested : public TestBase<4, 1, 3, TestAdjointAcce
96108
}
97109
OPDI_END_PARALLEL
98110

111+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
112+
99113
#if _OPENMP
100114
opdi::logic->setAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
101115
opdi::logic->addReverseBarrier();
102116
#endif
103117

118+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
119+
104120
// shared reading on a
105121
for (int i = outerStart; i < outerEnd; ++i) {
106122
T arg = c[i];
@@ -113,6 +129,8 @@ struct TestAdjointAccessControlNested : public TestBase<4, 1, 3, TestAdjointAcce
113129
}
114130
OPDI_END_PARALLEL
115131

132+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
133+
116134
for (int i = 0; i < N; ++i) {
117135
out[0] += c[i];
118136
}

tests/tests/TestAdjointAccessControlNested2.hpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,12 @@ struct TestAdjointAccessControlNested2 : public TestBase<4, 1, 3, TestAdjointAcc
4141
T* b = new T[N];
4242
T* c = new T[N];
4343

44+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
45+
4446
OPDI_PARALLEL()
4547
{
48+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
49+
4650
int outerNThreads = omp_get_num_threads();
4751
int outerStart = ((N - 1) / outerNThreads + 1) * omp_get_thread_num();
4852
int outerEnd = std::min(N, ((N - 1) / outerNThreads + 1) * (omp_get_thread_num() + 1));
@@ -56,6 +60,8 @@ struct TestAdjointAccessControlNested2 : public TestBase<4, 1, 3, TestAdjointAcc
5660
opdi::logic->setAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
5761
#endif
5862

63+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
64+
5965
// no shared reading
6066
for (int i = outerStart; i < outerEnd; ++i) {
6167
b[i] = sin(exp(a[i]));
@@ -65,6 +71,8 @@ struct TestAdjointAccessControlNested2 : public TestBase<4, 1, 3, TestAdjointAcc
6571

6672
OPDI_PARALLEL()
6773
{
74+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
75+
6876
int innerNThreads = omp_get_num_threads();
6977
int innerStart = outerStart + (((outerEnd - outerStart) - 1) / innerNThreads + 1) * omp_get_thread_num();
7078
int innerEnd = std::min(outerEnd, outerStart + (((outerEnd - outerStart) - 1) / innerNThreads + 1)
@@ -74,6 +82,8 @@ struct TestAdjointAccessControlNested2 : public TestBase<4, 1, 3, TestAdjointAcc
7482
opdi::logic->setAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
7583
#endif
7684

85+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
86+
7787
// shared reading on a
7888
for (int j = innerStart; j < innerEnd; ++j) {
7989
T arg = b[j];
@@ -87,6 +97,8 @@ struct TestAdjointAccessControlNested2 : public TestBase<4, 1, 3, TestAdjointAcc
8797
}
8898
OPDI_END_PARALLEL
8999

100+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
101+
90102
// shared reading on a
91103
for (int i = outerStart; i < outerEnd; ++i) {
92104
T arg = c[i];
@@ -101,6 +113,8 @@ struct TestAdjointAccessControlNested2 : public TestBase<4, 1, 3, TestAdjointAcc
101113
opdi::logic->addReverseBarrier();
102114
#endif
103115

116+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Classical);
117+
104118
// no shared reading
105119
for (int i = outerStart; i < outerEnd; ++i) {
106120
c[i] += sin(exp(c[i]));
@@ -111,6 +125,8 @@ struct TestAdjointAccessControlNested2 : public TestBase<4, 1, 3, TestAdjointAcc
111125
opdi::logic->addReverseBarrier();
112126
#endif
113127

128+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
129+
114130
// shared reading on a
115131
for (int i = outerStart; i < outerEnd; ++i) {
116132
T arg = c[i];
@@ -123,6 +139,8 @@ struct TestAdjointAccessControlNested2 : public TestBase<4, 1, 3, TestAdjointAcc
123139
}
124140
OPDI_END_PARALLEL
125141

142+
assertAdjointAccessMode(opdi::LogicInterface::AdjointAccessMode::Atomic);
143+
126144
for (int i = 0; i < N; ++i) {
127145
out[0] += c[i];
128146
}

tests/tests/testBase.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#pragma once
2727

2828
#include <array>
29+
#include <cassert>
2930

3031
#ifndef _OPENMP
3132

@@ -98,6 +99,12 @@ int omp_test_nest_lock(int*) {
9899

99100
#endif
100101

102+
#if _OPENMP
103+
#define assertAdjointAccessMode(mode) assert(opdi::logic->getAdjointAccessMode() == mode)
104+
#else
105+
#define assertAdjointAccessMode(mode) /* */
106+
#endif
107+
101108
template<int _nIn, int _nOut, int _nPoints, typename _Test>
102109
struct TestBase {
103110
public:

0 commit comments

Comments
 (0)