Newer
Older
/***************************************************************************
-------------------
begin : Nov 8, 2012
copyright : (C) 2012 by Tomas Oberhuber
email : tomas.oberhuber@fjfi.cvut.cz
***************************************************************************/
/* See Copyright Notice in tnl/Copyright */
Jakub Klinkovský
committed
#pragma once
#include <TNL/Containers/Algorithms/PrefixSum.h>
#include <TNL/Containers/Algorithms/Reduction.h>
#include <TNL/Devices/Host.h>
#include <TNL/Devices/Cuda.h>
Jakub Klinkovský
committed
namespace Containers {
Jakub Klinkovský
committed
namespace Algorithms {
class VectorOperations< Devices::Host >
Jakub Klinkovský
committed
public:
template< typename Vector, typename ResultType = typename Vector::RealType >
static ResultType getVectorSum( const Vector& v );
template< Algorithms::PrefixSumType Type,
typename Vector >
static void prefixSum( Vector& v,
const typename Vector::IndexType begin,
const typename Vector::IndexType end );
template< Algorithms::PrefixSumType Type, typename Vector, typename Flags >
static void segmentedPrefixSum( Vector& v,
Flags& f,
const typename Vector::IndexType begin,
const typename Vector::IndexType end );
class VectorOperations< Devices::Cuda >
Jakub Klinkovský
committed
public:
template< typename Vector, typename ResultType = typename Vector::RealType >
static ResultType getVectorSum( const Vector& v );
template< Algorithms::PrefixSumType Type,
typename Vector >
static void prefixSum( Vector& v,
const typename Vector::IndexType begin,
const typename Vector::IndexType end );
template< Algorithms::PrefixSumType Type, typename Vector, typename Flags >
static void segmentedPrefixSum( Vector& v,
Flags& f,
const typename Vector::IndexType begin,
const typename Vector::IndexType end );

Vít Hanousek
committed
Jakub Klinkovský
committed
} // namespace Algorithms
#include <TNL/Containers/Algorithms/VectorOperationsHost_impl.h>
#include <TNL/Containers/Algorithms/VectorOperationsCuda_impl.h>