diff --git a/benchmark/utils/preconditioners.hpp b/benchmark/utils/preconditioners.hpp index 63fd22708e6..ea8594e7446 100644 --- a/benchmark/utils/preconditioners.hpp +++ b/benchmark/utils/preconditioners.hpp @@ -22,7 +22,7 @@ DEFINE_string(preconditioners, "none", "A comma-separated list of preconditioners to use. " "Supported values are: none, jacobi, paric, parict, parilu, " "parilut, ic, ilu, paric-isai, parict-isai, parilu-isai, " - "parilut-isai, ic-isai, ilu-isai, overhead"); + "parilut-isai, ic-isai, ilu-isai, sor, overhead"); DEFINE_uint32(parilu_iterations, 5, "The number of iterations for ParIC(T)/ParILU(T)"); @@ -49,6 +49,12 @@ DEFINE_double(jacobi_accuracy, 1e-1, DEFINE_uint32(jacobi_max_block_size, 32, "Maximal block size of the block-Jacobi preconditioner"); +DEFINE_double(sor_relaxation_factor, 1.0, + "The relaxation factor for the SOR preconditioner"); + +DEFINE_bool(sor_symmetric, false, + "Apply the SOR preconditioner symmetrically, i.e. use SSOR"); + // parses the Jacobi storage optimization command line argument gko::precision_reduction parse_storage_optimization(const std::string& flag) @@ -292,6 +298,15 @@ const std::map( .with_sparsity_power(FLAGS_isai_power) .on(exec); }}, + {"sor", + [](std::shared_ptr exec) { + return gko::preconditioner::Sor::build() + .with_relaxation_factor( + static_cast>( + FLAGS_sor_relaxation_factor)) + .with_symmetric(FLAGS_sor_symmetric) + .on(exec); + }}, {"overhead", [](std::shared_ptr exec) { return gko::Overhead::build() .with_criteria(gko::stop::ResidualNorm::build()