Loading src/Benchmarks/Benchmarks.h +1 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ timeFunction( ComputeFunction compute, int i; for( i = 0; i < loops && ( ! minTime || timer.getRealTime() < ( double ) minTime ); i < loops || timer.getRealTime() < ( double ) minTime; ++i) { // abuse the monitor's "time" for loops Loading src/Benchmarks/Traversers/GridTraversersBenchmark.h 0 → 100644 +137 −0 Original line number Diff line number Diff line /*************************************************************************** WriteOne.h - description ------------------- begin : Dec 19, 2018 copyright : (C) 2018 by oberhuber email : tomas.oberhuber@fjfi.cvut.cz ***************************************************************************/ /* See Copyright Notice in tnl/Copyright */ // Implemented by: Tomas Oberhuber #pragma once #include <TNL/ParallelFor.h> #include <TNL/Devices/Host.h> #include <TNL/Devices/Cuda.h> #include <TNL/Containers/Vector.h> namespace TNL { namespace Benchmarks { template< int Dimension, typename Device, typename Real, typename Index > class GridTraversersBenchmark{}; template< typename Device, typename Real, typename Index > class GridTraversersBenchmark< 1, Device, Real, Index > { public: using Vector = Containers::Vector< Real, Device, Index >; GridTraversersBenchmark( Index size ) :v( size ), size( size ) {} void writeOne() { auto f = [] __cuda_callable__ ( Index i, Real* data ) { data[ i ] = i; }; ParallelFor< Device >::exec( ( Index ) 0, size, f, v.getData() ); } protected: Index size; Vector v; }; template< typename Device, typename Real, typename Index > class GridTraversersBenchmark< 2, Device, Real, Index > { public: using Vector = Containers::Vector< Real, Device, Index >; GridTraversersBenchmark( Index size ) :size( size ), v( size * size ) { } void writeOne() { Index _size = this->size; auto f = [=] __cuda_callable__ ( Index i, Index j, Real* data ) { data[ i * _size + j ] = i + j; }; ParallelFor2D< Device >::exec( ( Index ) 0, ( Index ) 0, this->size, this->size, f, v.getData() ); } protected: Index size; Vector v; }; template< typename Device, typename Real, typename Index > class GridTraversersBenchmark< 3, Device, Real, Index > { public: using Vector = Containers::Vector< Real, Device, Index >; GridTraversersBenchmark( Index size ) : size( size ), v( size * size * size ) {} void writeOne() { Index _size = this->size; auto f = [=] __cuda_callable__ ( Index i, Index j, Index k, Real* data ) { data[ ( i * _size + j ) * _size + k ] = i + j + k; }; ParallelFor3D< Device >::exec( ( Index ) 0, ( Index ) 0, ( Index ) 0, this->size, this->size, this->size, f, v.getData() ); } protected: Index size; Vector v; }; } // namespace Benchmarks } // namespace TNL src/Benchmarks/Traversers/tnl-benchmark-traversers.h +1 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,7 @@ bool setupBenchmark( const Config::ParameterContainer& parameters ) Benchmark benchmark; //( loops, verbose ); benchmark.setup( parameters ); Benchmark::MetadataMap metadata = getHardwareMetadata(); runBenchmark< Dimension >( parameters, benchmark, metadata ); Loading src/Benchmarks/scripts/run-tnl-benchmark-traversers 0 → 100644 +5 −0 Original line number Diff line number Diff line #!/bin/bash tnl-benchmark-traversers --dimension 1 --loops 1 --min-size 16 --max-size 100000 --min-time 1 tnl-benchmark-traversers --dimension 2 --loops 1 --min-size 16 --max-size 10000 --min-time 1 --output-mode append tnl-benchmark-traversers --dimension 3 --loops 1 --min-size 16 --max-size 1000 --min-time 1 --output-mode append Loading
src/Benchmarks/Benchmarks.h +1 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ timeFunction( ComputeFunction compute, int i; for( i = 0; i < loops && ( ! minTime || timer.getRealTime() < ( double ) minTime ); i < loops || timer.getRealTime() < ( double ) minTime; ++i) { // abuse the monitor's "time" for loops Loading
src/Benchmarks/Traversers/GridTraversersBenchmark.h 0 → 100644 +137 −0 Original line number Diff line number Diff line /*************************************************************************** WriteOne.h - description ------------------- begin : Dec 19, 2018 copyright : (C) 2018 by oberhuber email : tomas.oberhuber@fjfi.cvut.cz ***************************************************************************/ /* See Copyright Notice in tnl/Copyright */ // Implemented by: Tomas Oberhuber #pragma once #include <TNL/ParallelFor.h> #include <TNL/Devices/Host.h> #include <TNL/Devices/Cuda.h> #include <TNL/Containers/Vector.h> namespace TNL { namespace Benchmarks { template< int Dimension, typename Device, typename Real, typename Index > class GridTraversersBenchmark{}; template< typename Device, typename Real, typename Index > class GridTraversersBenchmark< 1, Device, Real, Index > { public: using Vector = Containers::Vector< Real, Device, Index >; GridTraversersBenchmark( Index size ) :v( size ), size( size ) {} void writeOne() { auto f = [] __cuda_callable__ ( Index i, Real* data ) { data[ i ] = i; }; ParallelFor< Device >::exec( ( Index ) 0, size, f, v.getData() ); } protected: Index size; Vector v; }; template< typename Device, typename Real, typename Index > class GridTraversersBenchmark< 2, Device, Real, Index > { public: using Vector = Containers::Vector< Real, Device, Index >; GridTraversersBenchmark( Index size ) :size( size ), v( size * size ) { } void writeOne() { Index _size = this->size; auto f = [=] __cuda_callable__ ( Index i, Index j, Real* data ) { data[ i * _size + j ] = i + j; }; ParallelFor2D< Device >::exec( ( Index ) 0, ( Index ) 0, this->size, this->size, f, v.getData() ); } protected: Index size; Vector v; }; template< typename Device, typename Real, typename Index > class GridTraversersBenchmark< 3, Device, Real, Index > { public: using Vector = Containers::Vector< Real, Device, Index >; GridTraversersBenchmark( Index size ) : size( size ), v( size * size * size ) {} void writeOne() { Index _size = this->size; auto f = [=] __cuda_callable__ ( Index i, Index j, Index k, Real* data ) { data[ ( i * _size + j ) * _size + k ] = i + j + k; }; ParallelFor3D< Device >::exec( ( Index ) 0, ( Index ) 0, ( Index ) 0, this->size, this->size, this->size, f, v.getData() ); } protected: Index size; Vector v; }; } // namespace Benchmarks } // namespace TNL
src/Benchmarks/Traversers/tnl-benchmark-traversers.h +1 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,7 @@ bool setupBenchmark( const Config::ParameterContainer& parameters ) Benchmark benchmark; //( loops, verbose ); benchmark.setup( parameters ); Benchmark::MetadataMap metadata = getHardwareMetadata(); runBenchmark< Dimension >( parameters, benchmark, metadata ); Loading
src/Benchmarks/scripts/run-tnl-benchmark-traversers 0 → 100644 +5 −0 Original line number Diff line number Diff line #!/bin/bash tnl-benchmark-traversers --dimension 1 --loops 1 --min-size 16 --max-size 100000 --min-time 1 tnl-benchmark-traversers --dimension 2 --loops 1 --min-size 16 --max-size 10000 --min-time 1 --output-mode append tnl-benchmark-traversers --dimension 3 --loops 1 --min-size 16 --max-size 1000 --min-time 1 --output-mode append