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;