diff --git a/tests/benchmarks/tnl-cuda-benchmarks.h b/tests/benchmarks/tnl-cuda-benchmarks.h
index fa9f5bf9dd561b41d08a84d827e393c393aa7408..15d268c99d74317aae9c67dfb2132c818ca3fa3e 100644
--- a/tests/benchmarks/tnl-cuda-benchmarks.h
+++ b/tests/benchmarks/tnl-cuda-benchmarks.h
@@ -194,6 +194,7 @@ runCudaBenchmarks( Benchmark & benchmark,
                    Benchmark::MetadataMap metadata,
                    const unsigned & minSize,
                    const unsigned & maxSize,
+                   const double & sizeStepFactor,
                    const unsigned & loops,
                    const unsigned & elementsPerRow )
 {
@@ -213,7 +214,7 @@ runCudaBenchmarks( Benchmark & benchmark,
     // Vector operations
     benchmark.newBenchmark( tnlString("Vector operations (") + precision + ")",
                             metadata );
-    for( unsigned size = minSize; size <= maxSize; size *= 2 ) {
+    for( unsigned size = minSize; size <= maxSize; size *= sizeStepFactor ) {
         benchmark.setMetadataColumns( Benchmark::MetadataColumns({
            {"size", size},
         } ));
@@ -247,9 +248,10 @@ setupConfig( tnlConfigDescription & config )
     config.addEntryEnum( "float" );
     config.addEntryEnum( "double" );
     config.addEntryEnum( "all" );
-    config.addEntry< int >( "min-size", "Minimum size of arrays/vectors used in the benchmark (next size is 2*min-size and so on, up to max-size).", 100000 );
-    config.addEntry< int >( "max-size", "Minimum size of arrays/vectors used in the benchmark (next size is 2*min-size and so on, up to max-size).", 10000000 );
-    config.addEntry< int >( "loops", "Number of iterations for every computation.", 1.0 );
+    config.addEntry< int >( "min-size", "Minimum size of arrays/vectors used in the benchmark.", 100000 );
+    config.addEntry< int >( "max-size", "Minimum size of arrays/vectors used in the benchmark.", 10000000 );
+    config.addEntry< int >( "size-step-factor", "Factor determining the size of arrays/vectors used in the benchmark. First size is min-size and each following size is stepFactor*previousSize, up to max-size.", 2 );
+    config.addEntry< int >( "loops", "Number of iterations for every computation.", 10 );
     config.addEntry< int >( "elements-per-row", "Number of elements per row of the sparse matrix used in the matrix-vector multiplication benchmark.", 5 );
     config.addEntry< int >( "verbose", "Verbose mode.", 1 );
 }
@@ -272,10 +274,16 @@ main( int argc, char* argv[] )
     const tnlString & precision = parameters.getParameter< tnlString >( "precision" );
     const unsigned minSize = parameters.getParameter< unsigned >( "min-size" );
     const unsigned maxSize = parameters.getParameter< unsigned >( "max-size" );
+    const unsigned sizeStepFactor = parameters.getParameter< unsigned >( "size-step-factor" );
     const unsigned loops = parameters.getParameter< unsigned >( "loops" );
     const unsigned elementsPerRow = parameters.getParameter< unsigned >( "elements-per-row" );
     const unsigned verbose = parameters.getParameter< unsigned >( "verbose" );
 
+    if( sizeStepFactor <= 1 ) {
+        cerr << "The value of --size-step-factor must be greater than 1." << endl;
+        return EXIT_FAILURE;
+    }
+
     // init benchmark and common metadata
     Benchmark benchmark( loops, verbose );
     // TODO: add hostname, CPU info, GPU info, date, ...
@@ -284,9 +292,9 @@ main( int argc, char* argv[] )
     };
 
     if( precision == "all" || precision == "float" )
-        runCudaBenchmarks< float >( benchmark, metadata, minSize, maxSize, loops, elementsPerRow );
+        runCudaBenchmarks< float >( benchmark, metadata, minSize, maxSize, sizeStepFactor, loops, elementsPerRow );
     if( precision == "all" || precision == "double" )
-        runCudaBenchmarks< double >( benchmark, metadata, minSize, maxSize, loops, elementsPerRow );
+        runCudaBenchmarks< double >( benchmark, metadata, minSize, maxSize, sizeStepFactor, loops, elementsPerRow );
 
     if( ! benchmark.save( logFile ) ) {
         cerr << "Failed to write the benchmark results to file '" << parameters.getParameter< tnlString >( "log-file" ) << "'." << endl;