diff --git a/src/Benchmarks/LinearSolvers/benchmarks.h b/src/Benchmarks/LinearSolvers/benchmarks.h
index e100bba02c6d2dd09238bad6bf100fe579480d51..032ed74ed2f708d65063e2356411ccfd39e51d23 100644
--- a/src/Benchmarks/LinearSolvers/benchmarks.h
+++ b/src/Benchmarks/LinearSolvers/benchmarks.h
@@ -48,6 +48,7 @@ benchmarkPreconditionerUpdate( Benchmark& benchmark,
    barrier( matrix );
    const char* performer = getPerformer< typename Matrix::DeviceType >();
    Preconditioner< Matrix > preconditioner;
+   preconditioner.setup( parameters );
 
    auto reset = []() {};
    auto compute = [&]() {
@@ -78,6 +79,7 @@ benchmarkSolver( Benchmark& benchmark,
    solver.setSolverMonitor( benchmark.getMonitor() );
 
    auto pre = std::make_shared< Preconditioner< Matrix > >();
+   pre->setup( parameters );
    solver.setPreconditioner( pre );
    // preconditioner update may throw if it's not implemented for CUDA
    try {