From 10d2d333c51c887c7fbd3555754d369891894ba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Oberhuber?= <oberhuber.tomas@gmail.com> Date: Fri, 4 Jan 2019 12:00:53 +0100 Subject: [PATCH] Traversers benchmark tests can be configures as list of tests. --- .../Traversers/tnl-benchmark-traversers.h | 56 ++++--------------- 1 file changed, 12 insertions(+), 44 deletions(-) diff --git a/src/Benchmarks/Traversers/tnl-benchmark-traversers.h b/src/Benchmarks/Traversers/tnl-benchmark-traversers.h index 96a131f483..fd14ba25cb 100644 --- a/src/Benchmarks/Traversers/tnl-benchmark-traversers.h +++ b/src/Benchmarks/Traversers/tnl-benchmark-traversers.h @@ -20,6 +20,7 @@ #include <TNL/Devices/Host.h> #include <TNL/Devices/Cuda.h> #include <TNL/ParallelFor.h> +#include <TNL/Containers/List.h> using namespace TNL; using namespace TNL::Benchmarks; @@ -33,7 +34,7 @@ bool runBenchmark( const Config::ParameterContainer& parameters, Benchmark& benchmark, Benchmark::MetadataMap& metadata ) { - const String tests = parameters.getParameter< String >( "tests" ); + const Containers::List< String >& tests = parameters.getParameter< Containers::List< String > >( "tests" ); // FIXME: getParameter< std::size_t >() does not work with parameters added with addEntry< int >(), // which have a default value. The workaround below works for int values, but it is not possible // to pass 64-bit integer values @@ -77,7 +78,7 @@ bool runBenchmark( const Config::ParameterContainer& parameters, /**** * Write one using C for */ - if( tests == "all" || tests == "no-bc-pure-c") + if( tests.containsValue( "all" ) || tests.containsValue( "no-bc-pure-c" ) ) { benchmark.setOperation( "Pure C", pow( ( double ) size, ( double ) Dimension ) * sizeof( Real ) / oneGB ); @@ -95,19 +96,12 @@ bool runBenchmark( const Config::ParameterContainer& parameters, if( withCuda ) benchmark.time< Devices::Cuda >( "GPU", cudaWriteOneUsingPureC ); #endif - /*benchmark.setOperation( "Pure C RST", pow( ( double ) size, ( double ) Dimension ) * sizeof( Real ) / oneGB ); - benchmark.time< Devices::Host >( hostReset, "CPU", hostWriteOneUsingPureC ); - -#ifdef HAVE_CUDA - if( withCuda ) - benchmark.time< Devices::Cuda >( cudaReset, "GPU", cudaWriteOneUsingPureC ); -#endif*/ } /**** * Write one using parallel for */ - if( tests == "all" || tests == "no-bc-parallel-for" ) + if( tests.containsValue( "all" ) || tests.containsValue( "no-bc-parallel-for" ) ) { benchmark.setOperation( "parallel for", pow( ( double ) size, ( double ) Dimension ) * sizeof( Real ) / oneGB ); @@ -125,18 +119,12 @@ bool runBenchmark( const Config::ParameterContainer& parameters, if( withCuda ) benchmark.time< Devices::Cuda >( cudaReset, "GPU", cudaWriteOneUsingParallelFor ); #endif - /*benchmark.setOperation( "parallel for RST", pow( ( double ) size, ( double ) Dimension ) * sizeof( Real ) / oneGB ); - benchmark.time< Devices::Host >( hostReset, "CPU", hostWriteOneUsingParallelFor ); -#ifdef HAVE_CUDA - if( withCuda ) - benchmark.time< Devices::Cuda >( cudaReset, "GPU", cudaWriteOneUsingParallelFor ); -#endif*/ } /**** * Write one using parallel for with grid entity */ - if( tests == "all" || tests == "no-bc-parallel-for-and-grid-entity" ) + if( tests.containsValue( "all" ) || tests.containsValue( "no-bc-parallel-for-and-grid-entity" ) ) { auto hostWriteOneUsingParallelForAndGridEntity = [&] () { @@ -153,19 +141,12 @@ bool runBenchmark( const Config::ParameterContainer& parameters, if( withCuda ) benchmark.time< Devices::Cuda >( cudaReset, "GPU", cudaWriteOneUsingParallelForAndGridEntity ); #endif - - /*benchmark.setOperation( "par.for+grid ent. RST", pow( ( double ) size, ( double ) Dimension ) * sizeof( Real ) / oneGB ); - benchmark.time< Devices::Host >( hostReset, "CPU", hostWriteOneUsingParallelForAndGridEntity ); -#ifdef HAVE_CUDA - if( withCuda ) - benchmark.time< Devices::Cuda >( cudaReset, "GPU", cudaWriteOneUsingParallelForAndGridEntity ); -#endif*/ } /**** * Write one using parallel for with mesh function */ - if( tests == "all" || tests == "no-bc-parallel-for-and-mesh-function" ) + if( tests.containsValue( "all" ) || tests.containsValue( "no-bc-parallel-for-and-mesh-function" ) ) { auto hostWriteOneUsingParallelForAndMeshFunction = [&] () { @@ -180,21 +161,15 @@ bool runBenchmark( const Config::ParameterContainer& parameters, cudaTraverserBenchmark.writeOneUsingParallelForAndMeshFunction(); }; if( withCuda ) - benchmark.time< Devices::Cuda >( cudaReset, "GPU", cudaWriteOneUsingParallelForAndGridMeshFunction ); + benchmark.time< Devices::Cuda >( cudaReset, "GPU", cudaWriteOneUsingParallelForAndMeshFunction ); #endif - /*benchmark.setOperation( "par.for+mesh fc. RST", pow( ( double ) size, ( double ) Dimension ) * sizeof( Real ) / oneGB ); - benchmark.time< Devices::Host >( hostReset, "CPU", hostWriteOneUsingParallelForAndMeshFunction ); -#ifdef HAVE_CUDA - if( withCuda ) - benchmark.time< Devices::Cuda >( cudaReset, "GPU", cudaWriteOneUsingParallelForAndMeshFunction ); -#endif*/ } /**** * Write one using traverser */ - if( tests == "all" || tests == "no-bc-traverser" ) + if( tests.containsValue( "all" ) || tests.containsValue( "no-bc-traverser" ) ) { benchmark.setOperation( "traverser", pow( ( double ) size, ( double ) Dimension ) * sizeof( Real ) / oneGB ); auto hostWriteOneUsingTraverser = [&] () @@ -211,13 +186,6 @@ bool runBenchmark( const Config::ParameterContainer& parameters, if( withCuda ) benchmark.time< Devices::Cuda >( cudaReset, "GPU", cudaWriteOneUsingTraverser ); #endif -/* - benchmark.setOperation( "traverser RST", pow( ( double ) size, ( double ) Dimension ) * sizeof( Real ) / oneGB ); - benchmark.time< Devices::Host >( hostReset, "CPU", hostWriteOneUsingTraverser ); -#ifdef HAVE_CUDA - if( withCuda ) - benchmark.time< Devices::Cuda >( "GPU", cudaWriteOneUsingTraverser ); -#endif*/ } std::cout << "--------------------------------------------------------------------------------------------------------" << std::endl; } @@ -262,7 +230,7 @@ bool runBenchmark( const Config::ParameterContainer& parameters, }; #endif - if( tests == "all" || tests == "bc-pure-c" ) + if( tests.containsValue( "all" ) || tests.containsValue( "bc-pure-c" ) ) { benchmark.setOperation( "Pure C", pow( ( double ) size, ( double ) Dimension ) * sizeof( Real ) / oneGB ); benchmark.time< Devices::Host >( "CPU", hostTraverseUsingPureC ); @@ -294,7 +262,7 @@ bool runBenchmark( const Config::ParameterContainer& parameters, }; #endif - if( tests == "all" || tests == "bc-parallel-for" ) + if( tests.containsValue( "all" ) || tests.containsValue( "bc-parallel-for" ) ) { benchmark.setOperation( "parallel for", pow( ( double ) size, ( double ) Dimension ) * sizeof( Real ) / oneGB ); benchmark.time< Devices::Host >( "CPU", hostTraverseUsingParallelFor ); @@ -326,7 +294,7 @@ bool runBenchmark( const Config::ParameterContainer& parameters, }; #endif - if( tests == "all" || tests == "bc-traverser" ) + if( tests.containsValue( "all" ) || tests.containsValue( "bc-traverser" ) ) { benchmark.setOperation( "traverser", pow( ( double ) size, ( double ) Dimension ) * sizeof( Real ) / oneGB ); benchmark.time< Devices::Host >( hostReset, "CPU", hostTraverseUsingTraverser ); @@ -346,7 +314,7 @@ bool runBenchmark( const Config::ParameterContainer& parameters, void setupConfig( Config::ConfigDescription& config ) { - config.addEntry< String >( "tests", "Tests to be performed.", "all" ); + config.addList< String >( "tests", "Tests to be performed.", "all" ); config.addEntryEnum( "all" ); config.addEntryEnum( "no-bc-pure-c" ); config.addEntryEnum( "no-bc-parallel-for" ); -- GitLab