@@ -16,9 +16,13 @@ BM_ReverseModeAddArrayAndMultiplyWithScalarsExecute(benchmark::State& state) {
1616 double darr[5 ] = {0 };
1717 for (auto _ : state) {
1818 grad.execute (arr, x, y, 5 , darr, &dx, &dy, &dn);
19+ benchmark::DoNotOptimize (dx);
20+ benchmark::DoNotOptimize (dy);
21+ benchmark::DoNotOptimize (dn);
1922 dx = 0 ;
2023 dy = 0 ;
2124 for (int i = 0 ; i < n; i++) {
25+ benchmark::DoNotOptimize (darr[i]);
2226 darr[i] = 0 ;
2327 }
2428 }
@@ -39,10 +43,15 @@ static void BM_VectorForwardModeAddArrayAndMultiplyWithScalarsExecute(
3943 clad::array_ref<double > d_arr_ref (darr, 5 );
4044 for (auto _ : state) {
4145 grad.execute (arr, x, y, 5 , d_arr_ref, &dx, &dy, &dn);
46+ benchmark::DoNotOptimize (dx);
47+ benchmark::DoNotOptimize (dy);
48+ benchmark::DoNotOptimize (dn);
4249 dx = 0 ;
4350 dy = 0 ;
44- for (int i = 0 ; i < n; i++)
51+ for (int i = 0 ; i < n; i++) {
52+ benchmark::DoNotOptimize (darr[i]);
4553 darr[i] = 0 ;
54+ }
4655 }
4756}
4857
@@ -60,9 +69,13 @@ static void BM_ReverseModeAddArrayAndMultiplyWithScalarsExecuteEnzyme(
6069 double darr[5 ] = {0 };
6170 for (auto _ : state) {
6271 grad.execute (arr, x, y, 5 , darr, &dx, &dy, &dn);
72+ benchmark::DoNotOptimize (dx);
73+ benchmark::DoNotOptimize (dy);
74+ benchmark::DoNotOptimize (dn);
6375 dx = 0 ;
6476 dy = 0 ;
6577 for (int i = 0 ; i < n; i++) {
78+ benchmark::DoNotOptimize (darr[i]);
6679 darr[i] = 0 ;
6780 }
6881 }
@@ -77,6 +90,7 @@ static void BM_ReverseModeSumExecute(benchmark::State& state) {
7790 for (auto _ : state) {
7891 grad.execute (inputs, /* dim*/ 5 , result);
7992 for (int i = 0 ; i < 5 ; i++) {
93+ benchmark::DoNotOptimize (result[i]);
8094 result[i] = 0 ;
8195 }
8296 }
@@ -90,8 +104,10 @@ static void BM_VectorForwardModeSumExecute(benchmark::State& state) {
90104 clad::array_ref<double > d_arr_ref (result, 5 );
91105 for (auto _ : state) {
92106 grad.execute (inputs, /* dim*/ 5 , d_arr_ref);
93- for (int i = 0 ; i < 5 ; i++)
107+ for (int i = 0 ; i < 5 ; i++) {
108+ benchmark::DoNotOptimize (result[i]);
94109 result[i] = 0 ;
110+ }
95111 }
96112}
97113BENCHMARK (BM_VectorForwardModeSumExecute);
@@ -103,6 +119,7 @@ static void BM_ReverseModeSumExecuteWithEnzyme(benchmark::State& state) {
103119 for (auto _ : state) {
104120 grad.execute (inputs, /* dim*/ 5 , result);
105121 for (int i = 0 ; i < 5 ; i++) {
122+ benchmark::DoNotOptimize (result[i]);
106123 result[i] = 0 ;
107124 }
108125 }
@@ -116,6 +133,7 @@ static void BM_ReverseModeProductExecute(benchmark::State& state) {
116133 for (auto _ : state) {
117134 grad.execute (inputs, /* dim*/ 5 , result);
118135 for (int i = 0 ; i < 5 ; i++) {
136+ benchmark::DoNotOptimize (result[i]);
119137 result[i] = 0 ;
120138 }
121139 }
@@ -129,8 +147,10 @@ static void BM_VectorForwardModeProductExecute(benchmark::State& state) {
129147 clad::array_ref<double > d_arr_ref (result, 5 );
130148 for (auto _ : state) {
131149 grad.execute (inputs, /* dim*/ 5 , d_arr_ref);
132- for (int i = 0 ; i < 5 ; i++)
150+ for (int i = 0 ; i < 5 ; i++) {
151+ benchmark::DoNotOptimize (result[i]);
133152 result[i] = 0 ;
153+ }
134154 }
135155}
136156BENCHMARK (BM_VectorForwardModeProductExecute);
@@ -142,6 +162,7 @@ static void BM_ReverseModeProductExecuteEnzyme(benchmark::State& state) {
142162 for (auto _ : state) {
143163 grad.execute (inputs, /* dim*/ 5 , result);
144164 for (int i = 0 ; i < 5 ; i++) {
165+ benchmark::DoNotOptimize (result[i]);
145166 result[i] = 0 ;
146167 }
147168 }
@@ -161,7 +182,11 @@ static void BM_ReverseGaus(benchmark::State& state) {
161182
162183 for (auto _ : state) {
163184 dfdp_grad.execute (x, p, /* sigma*/ 2 , dim, dx, dp, &ds, &ddim);
185+ benchmark::DoNotOptimize (ds);
186+ benchmark::DoNotOptimize (ddim);
164187 for (int i = 0 ; i < dim; i++) {
188+ benchmark::DoNotOptimize (dx[i]);
189+ benchmark::DoNotOptimize (dp[i]);
165190 dx[i] = 0 ; // clear for the next benchmark iteration
166191 dp[i] = 0 ; // clear for the next benchmark iteration
167192 }
@@ -185,7 +210,11 @@ static void BM_ReverseGausEnzyme(benchmark::State& state) {
185210
186211 for (auto _ : state) {
187212 dfdp_grad.execute (x, p, /* sigma*/ 2 , dim, dx, dp, &ds, &ddim);
213+ benchmark::DoNotOptimize (ds);
214+ benchmark::DoNotOptimize (ddim);
188215 for (int i = 0 ; i < dim; i++) {
216+ benchmark::DoNotOptimize (dx[i]);
217+ benchmark::DoNotOptimize (dp[i]);
189218 dx[i] = 0 ; // clear for the next benchmark iteration
190219 dp[i] = 0 ; // clear for the next benchmark iteration
191220 }
0 commit comments