Skip to content
Snippets Groups Projects

Draft: Test convolution

Files

+ 52
0
#include <benchmark/benchmark.h>
#include <convolution.h>
#include <memory>
#include <vector>
namespace {
class InitializeInput : public benchmark::Fixture {
public:
void SetUp(::benchmark::State& state) {
size_t width = state.range(0);
size_t height = state.range(1);
image = std::make_unique<std::vector<float>>(width * height);
kernel = std::make_unique<std::vector<float>>(width * height);
Initialize(image->data(), width, height);
Initialize(kernel->data(), width, height);
}
void TearDown(::benchmark::State& state) {
image.reset();
kernel.reset();
}
std::unique_ptr<std::vector<float>> image;
std::unique_ptr<std::vector<float>> kernel;
};
} // namespace
// Reference standard
BENCHMARK_DEFINE_F(InitializeInput, ConvolveReference)
(benchmark::State& state) {
for (auto _ : state) {
ConvolveReference(image->data(), kernel->data(), state.range(0),
state.range(1));
}
}
BENCHMARK_REGISTER_F(InitializeInput, ConvolveReference)
->Args({2048, 1000})
->Args({4096, 5000});
// FFTW serial standard
BENCHMARK_DEFINE_F(InitializeInput, ConvolveSerial)
(benchmark::State& state) {
for (auto _ : state) {
ConvolveSerial(image->data(), kernel->data(), state.range(0),
state.range(1));
}
}
BENCHMARK_REGISTER_F(InitializeInput, ConvolveSerial)
->Args({2048, 1000})
->Args({4096, 5000});
Loading