Skip to content
Snippets Groups Projects
Commit 524483f7 authored by Tomáš Oberhuber's avatar Tomáš Oberhuber Committed by Jakub Klinkovský
Browse files

Added script for running traversers benchmark.

Fixing traversers benchmark.
parent 7dce286c
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.
Finish editing this message first!
Please register or to comment