99// //////////////////////////////////////////////////////////
1010// / Générateur d'intervalles réguliers (adapté de benchmark_search.cpp)
1111
12+ constexpr int DEFAULT_X_INTERVALS = 5 ; // nombre d'intervalles en X pour les cas 2D/3D
13+
1214template <unsigned int dim>
13- auto gen_regular_intervals = [](int64_t size , unsigned int level = 0 )
15+ auto gen_regular_intervals = [](int max_index , unsigned int level = 0 , int x_intervals = DEFAULT_X_INTERVALS )
1416{
1517 samurai::CellList<dim> cl;
1618
17- for (int64_t i = 0 ; i < size; i++)
18- {
19- int index = static_cast <int >(i);
20-
21- // Calcul des paramètres selon le niveau :
22- // Niveau L : taille = 2^L, espacement = 2^(L+1)
23- int interval_size = 1 << level; // 2^level
24- int spacing = 1 << (level + 1 ); // 2^(level+1)
25- int start = index * spacing;
26- int end = start + interval_size;
19+ int interval_size = 1 << level; // 2^level
20+ int spacing = 1 << (level + 1 ); // 2^(level+1)
2721
28- if constexpr (dim == 1 )
22+ if constexpr (dim == 1 )
23+ {
24+ // En 1D on garde le comportement précédent : un intervalle par abscisse.
25+ for (int x = 0 ; x < max_index; ++x)
2926 {
30- cl[level][{}].add_interval ({start, end});
27+ int start = x * spacing;
28+ cl[level][{}].add_interval ({start, start + interval_size});
3129 }
32- else if constexpr (dim == 2 )
30+ }
31+ else if constexpr (dim == 2 )
32+ {
33+ int nx = x_intervals;
34+ for (int x = 0 ; x < nx; ++x)
3335 {
34- for (int y = 0 ; y < size; ++y)
36+ int start = x * spacing;
37+ int end = start + interval_size;
38+ for (int y = 0 ; y < max_index; ++y)
3539 {
3640 xt::xtensor_fixed<int , xt::xshape<1 >> coord{y};
3741 cl[level][coord].add_interval ({start, end});
3842 }
3943 }
40- else if constexpr (dim == 3 )
44+ }
45+ else if constexpr (dim == 3 )
46+ {
47+ int nx = x_intervals;
48+ for (int x = 0 ; x < nx; ++x)
4149 {
42- for (int y = 0 ; y < size; ++y)
50+ int start = x * spacing;
51+ int end = start + interval_size;
52+ for (int y = 0 ; y < max_index; ++y)
4353 {
44- for (int z = 0 ; z < size ; ++z)
54+ for (int z = 0 ; z < max_index ; ++z)
4555 {
4656 xt::xtensor_fixed<int , xt::xshape<2 >> coord{y, z};
4757 cl[level][coord].add_interval ({start, end});
@@ -119,13 +129,14 @@ void CELLLIST_default(benchmark::State& state)
119129template <unsigned int dim>
120130void CELLLIST_add_interval_begin (benchmark::State& state)
121131{
132+ int max_index = static_cast <int >(state.range (0 ));
122133 // Calculer une seule fois pour les métriques
123- auto cl_sample = gen_regular_intervals<dim>(state. range ( 0 ) , 0 );
134+ auto cl_sample = gen_regular_intervals<dim>(max_index , 0 , DEFAULT_X_INTERVALS );
124135 std::size_t total_intervals = count_intervals<dim>(cl_sample);
125136
126137 for (auto _ : state)
127138 {
128- auto cl = gen_regular_intervals<dim>(state. range ( 0 ) , 0 );
139+ auto cl = gen_regular_intervals<dim>(max_index , 0 , DEFAULT_X_INTERVALS );
129140 benchmark::DoNotOptimize (cl);
130141 }
131142
@@ -139,7 +150,8 @@ void CELLLIST_add_interval_begin(benchmark::State& state)
139150template <unsigned int dim>
140151void CELLLIST_copy_assignment (benchmark::State& state)
141152{
142- auto source_cl = gen_regular_intervals<dim>(state.range (0 ), 0 );
153+ int max_index = static_cast <int >(state.range (0 ));
154+ auto source_cl = gen_regular_intervals<dim>(max_index, 0 , DEFAULT_X_INTERVALS);
143155 std::size_t total_intervals = count_intervals<dim>(source_cl);
144156
145157 for (auto _ : state)
@@ -163,11 +175,11 @@ BENCHMARK_TEMPLATE(CELLLIST_default, 1);
163175BENCHMARK_TEMPLATE (CELLLIST_default, 2 );
164176BENCHMARK_TEMPLATE (CELLLIST_default, 3 );
165177
166- // Générateur avec intervalles réguliers (toutes dimensions)
167- BENCHMARK_TEMPLATE (CELLLIST_add_interval_begin, 1 )->RangeMultiplier(64 )->Range(1 << 1 , 1 << 16 );
168- BENCHMARK_TEMPLATE (CELLLIST_add_interval_begin, 2 )->RangeMultiplier(8 )->Range(1 << 1 , 1 << 8 );
169- BENCHMARK_TEMPLATE (CELLLIST_add_interval_begin, 3 )->RangeMultiplier(4 )->Range(1 << 1 , 1 << 5 );
178+ // Générateur avec intervalles réguliers (toutes dimensions) - Ajusté pour ~10k intervalles max
179+ BENCHMARK_TEMPLATE (CELLLIST_add_interval_begin, 1 )->RangeMultiplier(64 )->Range(1 << 1 , 10000 );
180+ BENCHMARK_TEMPLATE (CELLLIST_add_interval_begin, 2 )->RangeMultiplier(8 )->Range(1 << 1 , 2000 );
181+ BENCHMARK_TEMPLATE (CELLLIST_add_interval_begin, 3 )->RangeMultiplier(4 )->Range(1 << 1 , 45 );
170182
171- BENCHMARK_TEMPLATE (CELLLIST_copy_assignment, 1 )->RangeMultiplier(64 )->Range(1 << 1 , 1 << 16 );
172- BENCHMARK_TEMPLATE (CELLLIST_copy_assignment, 2 )->RangeMultiplier(8 )->Range(1 << 1 , 1 << 8 );
173- BENCHMARK_TEMPLATE (CELLLIST_copy_assignment, 3 )->RangeMultiplier(4 )->Range(1 << 1 , 1 << 5 );
183+ BENCHMARK_TEMPLATE (CELLLIST_copy_assignment, 1 )->RangeMultiplier(64 )->Range(1 << 1 , 10000 );
184+ BENCHMARK_TEMPLATE (CELLLIST_copy_assignment, 2 )->RangeMultiplier(8 )->Range(1 << 1 , 2000 );
185+ BENCHMARK_TEMPLATE (CELLLIST_copy_assignment, 3 )->RangeMultiplier(4 )->Range(1 << 1 , 45 );
0 commit comments