2727
2828#include " util.h"
2929
30+ #ifdef _OPENMP
31+ #define SUFFIX " _omp"
32+ #else
33+ #define SUFFIX " "
34+ #endif
35+
36+ static void DoSetup (const benchmark::State& state) {
37+ #ifdef _OPENMP
38+ #ifdef HAVE_FFTW_THREADS
39+ FFTW (init_threads)();
40+ #endif
41+ #endif
42+ }
43+
44+ static void DoTeardown (const benchmark::State& state) {
45+ #ifdef _OPENMP
46+ #ifdef HAVE_FFTW_THREADS
47+ FFTW (cleanup_threads)();
48+ #endif
49+ #endif
50+ }
51+
3052// Helper function to initialize random data
31- static void NFFT ( init_random_data) (NFFT(plan)* plan) {
53+ static void init_random_data (NFFT(plan)* plan) {
3254 NFFT (vrand_shifted_unit_double)(plan->x , plan->d * plan->M_total );
3355 NFFT (vrand_unit_complex)(plan->f_hat , plan->N_total );
3456 NFFT (vrand_unit_complex)(plan->f , plan->M_total );
@@ -41,7 +63,7 @@ static void nfft_forward_direct_1d(benchmark::State& state) {
4163
4264 NFFT (plan) plan;
4365 NFFT (init_1d)(&plan, N, M);
44- NFFT ( init_random_data) (&plan);
66+ init_random_data (&plan);
4567
4668 for (auto _ : state) {
4769 NFFT (trafo_direct)(&plan);
@@ -58,7 +80,7 @@ static void nfft_adjoint_direct_1d(benchmark::State& state) {
5880
5981 NFFT (plan) plan;
6082 NFFT (init_1d)(&plan, N, M);
61- NFFT ( init_random_data) (&plan);
83+ init_random_data (&plan);
6284
6385 for (auto _ : state) {
6486 NFFT (adjoint_direct)(&plan);
@@ -76,7 +98,7 @@ static void nfft_forward_direct_2d(benchmark::State& state) {
7698
7799 NFFT (plan) plan;
78100 NFFT (init_2d)(&plan, N1, N2, M);
79- NFFT ( init_random_data) (&plan);
101+ init_random_data (&plan);
80102
81103 for (auto _ : state) {
82104 NFFT (trafo_direct)(&plan);
@@ -94,7 +116,7 @@ static void nfft_adjoint_direct_2d(benchmark::State& state) {
94116
95117 NFFT (plan) plan;
96118 NFFT (init_2d)(&plan, N1, N2, M);
97- NFFT ( init_random_data) (&plan);
119+ init_random_data (&plan);
98120
99121 for (auto _ : state) {
100122 NFFT (adjoint_direct)(&plan);
@@ -113,7 +135,7 @@ static void nfft_forward_direct_3d(benchmark::State& state) {
113135
114136 NFFT (plan) plan;
115137 NFFT (init_3d)(&plan, N1, N2, N3, M);
116- NFFT ( init_random_data) (&plan);
138+ init_random_data (&plan);
117139
118140 for (auto _ : state) {
119141 NFFT (trafo_direct)(&plan);
@@ -132,7 +154,7 @@ static void nfft_adjoint_direct_3d(benchmark::State& state) {
132154
133155 NFFT (plan) plan;
134156 NFFT (init_3d)(&plan, N1, N2, N3, M);
135- NFFT ( init_random_data) (&plan);
157+ init_random_data (&plan);
136158
137159 for (auto _ : state) {
138160 NFFT (adjoint_direct)(&plan);
@@ -143,44 +165,56 @@ static void nfft_adjoint_direct_3d(benchmark::State& state) {
143165}
144166
145167// Register benchmarks for direct transforms
146- BENCH (nfft_forward_direct_1d)
168+ BENCH (nfft_forward_direct_1d, SUFFIX )
147169 ->Args({32 , 100 })
148170 ->Args({64 , 200 })
149171 ->Args({128 , 400 })
150172 ->Args({256 , 800 })
151173 ->Args({512 , 1600 })
174+ ->Setup(DoSetup)
175+ ->Teardown(DoTeardown)
152176 ->Complexity();
153177
154- BENCH (nfft_adjoint_direct_1d)
178+ BENCH (nfft_adjoint_direct_1d, SUFFIX )
155179 ->Args({32 , 100 })
156180 ->Args({64 , 200 })
157181 ->Args({128 , 400 })
158182 ->Args({256 , 800 })
159183 ->Args({512 , 1600 })
184+ ->Setup(DoSetup)
185+ ->Teardown(DoTeardown)
160186 ->Complexity();
161187
162- BENCH (nfft_forward_direct_2d)
188+ BENCH (nfft_forward_direct_2d, SUFFIX )
163189 ->Args({16 , 16 , 500 })
164190 ->Args({32 , 32 , 1000 })
165191 ->Args({64 , 64 , 2000 })
192+ ->Setup(DoSetup)
193+ ->Teardown(DoTeardown)
166194 ->Complexity();
167195
168- BENCH (nfft_adjoint_direct_2d)
196+ BENCH (nfft_adjoint_direct_2d, SUFFIX )
169197 ->Args({16 , 16 , 500 })
170198 ->Args({32 , 32 , 1000 })
171199 ->Args({64 , 64 , 2000 })
200+ ->Setup(DoSetup)
201+ ->Teardown(DoTeardown)
172202 ->Complexity();
173203
174- BENCH (nfft_forward_direct_3d)
204+ BENCH (nfft_forward_direct_3d, SUFFIX )
175205 ->Args({4 , 4 , 4 , 250 })
176206 ->Args({8 , 8 , 8 , 500 })
177207 ->Args({16 , 16 , 16 , 1000 })
208+ ->Setup(DoSetup)
209+ ->Teardown(DoTeardown)
178210 ->Complexity();
179211
180- BENCH (nfft_adjoint_direct_3d)
212+ BENCH (nfft_adjoint_direct_3d, SUFFIX )
181213 ->Args({4 , 4 , 4 , 250 })
182214 ->Args({8 , 8 , 8 , 500 })
183215 ->Args({16 , 16 , 16 , 1000 })
216+ ->Setup(DoSetup)
217+ ->Teardown(DoTeardown)
184218 ->Complexity();
185219
186220// Main function.
0 commit comments