@@ -60,6 +60,47 @@ constexpr int one_dimension_sample_count()
6060 }
6161}
6262
63+ template <std::size_t N, typename T, typename RandomEngine, int ITER_COUNT, int SAMPLE_COUNT, long long COUNT>
64+ long long test_sjs (const bool shuffle, RandomEngine& engine)
65+ {
66+ std::vector<numerical::Vector<N, T>> data;
67+ const StratifiedJitteredSampler<N, T> sampler (0 , 1 , SAMPLE_COUNT, shuffle);
68+ const Clock::time_point start_time = Clock::now ();
69+ for (int i = 0 ; i < ITER_COUNT; ++i)
70+ {
71+ sampler.generate (engine, &data);
72+ }
73+ return std::llround (COUNT / duration_from (start_time));
74+ }
75+
76+ template <std::size_t N, typename T, typename RandomEngine, int ITER_COUNT, int SAMPLE_COUNT, long long COUNT>
77+ long long test_lhs (const bool shuffle, RandomEngine& engine)
78+ {
79+ std::vector<numerical::Vector<N, T>> data;
80+ const LatinHypercubeSampler<N, T> sampler (0 , 1 , SAMPLE_COUNT, shuffle);
81+ const Clock::time_point start_time = Clock::now ();
82+ for (int i = 0 ; i < ITER_COUNT; ++i)
83+ {
84+ sampler.generate (engine, &data);
85+ }
86+ return std::llround (COUNT / duration_from (start_time));
87+ }
88+
89+ template <std::size_t N, typename T, int ITER_COUNT, int SAMPLE_COUNT, long long COUNT>
90+ long long test_hs ()
91+ {
92+ HaltonSampler<N, T> sampler;
93+ const Clock::time_point start_time = Clock::now ();
94+ for (int i = 0 ; i < ITER_COUNT; ++i)
95+ {
96+ for (int j = 0 ; j < SAMPLE_COUNT; ++j)
97+ {
98+ do_not_optimize (sampler.generate ());
99+ }
100+ }
101+ return std::llround (COUNT / duration_from (start_time));
102+ }
103+
63104template <std::size_t N, typename T, typename RandomEngine>
64105void test_performance (const bool shuffle)
65106{
@@ -69,43 +110,11 @@ void test_performance(const bool shuffle)
69110 constexpr int SAMPLE_COUNT = power<N>(one_dimension_sample_count<N>());
70111 constexpr long long COUNT = static_cast <long long >(ITER_COUNT) * SAMPLE_COUNT;
71112
72- const long long sjs = [&]
73- {
74- std::vector<numerical::Vector<N, T>> data;
75- const StratifiedJitteredSampler<N, T> sampler (0 , 1 , SAMPLE_COUNT, shuffle);
76- const Clock::time_point start_time = Clock::now ();
77- for (int i = 0 ; i < ITER_COUNT; ++i)
78- {
79- sampler.generate (engine, &data);
80- }
81- return std::llround (COUNT / duration_from (start_time));
82- }();
113+ const long long sjs = test_sjs<N, T, RandomEngine, ITER_COUNT, SAMPLE_COUNT, COUNT>(shuffle, engine);
83114
84- const long long lhs = [&]
85- {
86- std::vector<numerical::Vector<N, T>> data;
87- const LatinHypercubeSampler<N, T> sampler (0 , 1 , SAMPLE_COUNT, shuffle);
88- const Clock::time_point start_time = Clock::now ();
89- for (int i = 0 ; i < ITER_COUNT; ++i)
90- {
91- sampler.generate (engine, &data);
92- }
93- return std::llround (COUNT / duration_from (start_time));
94- }();
115+ const long long lhs = test_lhs<N, T, RandomEngine, ITER_COUNT, SAMPLE_COUNT, COUNT>(shuffle, engine);
95116
96- const long long hs = [&]
97- {
98- HaltonSampler<N, T> sampler;
99- const Clock::time_point start_time = Clock::now ();
100- for (int i = 0 ; i < ITER_COUNT; ++i)
101- {
102- for (int j = 0 ; j < SAMPLE_COUNT; ++j)
103- {
104- do_not_optimize (sampler.generate ());
105- }
106- }
107- return std::llround (COUNT / duration_from (start_time));
108- }();
117+ const long long hs = test_hs<N, T, ITER_COUNT, SAMPLE_COUNT, COUNT>();
109118
110119 std::ostringstream oss;
111120 oss << " Samplers <" << N << " , " << type_name<T>() << " , " << random_engine_name<RandomEngine>() << " >" ;
0 commit comments