Specialise CUDA API variant scalars into proper scalars. More...
#include <VariantScalar.hpp>
Static Public Member Functions | |
template<typename T > | |
static constexpr bool | test () |
template<typename TargetType , typename Tensors , typename... Scalars> | |
constexpr static bool | checkScalarTypes (sp::TypeList< Scalars... > &&) |
template<typename... O, typename ScalarType , sp::PtrLocation Loc, typename Fn , typename... Stuff> | |
static auto | runWithType (const sp::PtrScalar< ScalarType, Loc > &thisArg, Fn &f, std::tuple< O &&... >, Stuff &&... stuff) |
template<sp::PtrLocation Loc, typename... Stuff> | |
static auto | run (const CudaVariantScalar< Loc > &thisArg, Stuff &&... stuff) |
Static Public Member Functions inherited from sp::Specialiser | |
template<typename T > | |
static constexpr bool | test () |
Return true iff the specialiser is able to specialise arguments of type T. More... | |
template<typename... O, typename ArgType , typename... Stuff> | |
static auto | run (const ArgType &thisArg, Stuff &&... stuff) |
Specialise an argument. More... | |
Specialise CUDA API variant scalars into proper scalars.
Some APIs pass scalars as a void*
and a cudaDataType_t
enumerant. This Specialiser
converts those (encapsulated as CudaVariantScalars
) into proper Scalar
s, which are then sent to PtrScalarSpecialiser
for further refinement.
Since this Specialiser
is inferring the type of arguments, it has a hook which calls the validScalarTypes
predicate on the target functor type, giving the functor an opportunity to prune invalid specialisation branches.