Skip to content

Commit c319a2a

Browse files
committed
sampling tests
1 parent 90434e6 commit c319a2a

1 file changed

Lines changed: 44 additions & 35 deletions

File tree

src/sampling/test/test_samplers_performance.cpp

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
63104
template <std::size_t N, typename T, typename RandomEngine>
64105
void 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

Comments
 (0)