Skip to content
Snippets Groups Projects
Commit 2ad04b20 authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Added script for running traversers benchmark.

Fixing traversers benchmark.
parent a167d1b5
No related branches found
No related tags found
1 merge request!20Traversers optimizations
......@@ -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
......
/***************************************************************************
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
......@@ -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 );
......
#!/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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment