QMCPACK
hipblasTypeMapping.hpp
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////////////////
2 // This file is distributed under the University of Illinois/NCSA Open Source License.
3 // See LICENSE file in top directory for details.
4 //
5 // Copyright (c) 2021 QMCPACK developers.
6 //
7 // File developed by: Peter Doak, doakpw@ornl.gov, Oak Ridge National Laboratory
8 // Ye Luo, yeluo@anl.gov, Argonne National Laboratory
9 //
10 // File created by: Peter Doak, doakpw@ornl.gov, Oak Ridge National Laboratory
11 //////////////////////////////////////////////////////////////////////////////////////
12 
13 
14 #ifndef QMCPLUSPLUS_HIPBLAS_TYPE_MAPPING_HPP
15 #define QMCPLUSPLUS_HIPBLAS_TYPE_MAPPING_HPP
16 
17 #include <type_traits>
19 #include <hipblas/hipblas.h>
20 
21 namespace qmcplusplus
22 {
23 
24 // This saves us writing specific overloads with reinterpret casts for different std::complex to hipblasComplex types.
25 template<typename T>
26 using hipblasTypeMap =
27  typename std::disjunction<OnTypesEqual<T, float, float>,
28  OnTypesEqual<T, double, double>,
29  OnTypesEqual<T, float*, float*>,
30  OnTypesEqual<T, double*, double*>,
31  OnTypesEqual<T, float**, float**>,
32  OnTypesEqual<T, double**, double**>,
33  OnTypesEqual<T, std::complex<double>, hipblasDoubleComplex>,
34  OnTypesEqual<T, std::complex<float>, hipblasComplex>,
35  OnTypesEqual<T, std::complex<double>*, hipblasDoubleComplex*>,
36  OnTypesEqual<T, std::complex<float>**, hipblasComplex**>,
37  OnTypesEqual<T, std::complex<double>**, hipblasDoubleComplex**>,
38  OnTypesEqual<T, std::complex<float>*, hipblasComplex*>,
39  OnTypesEqual<T, const std::complex<double>*, const hipblasDoubleComplex*>,
40  OnTypesEqual<T, const std::complex<float>*, const hipblasComplex*>,
41  OnTypesEqual<T, const std::complex<float>**, const hipblasComplex**>,
42  OnTypesEqual<T, const std::complex<double>**, const hipblasDoubleComplex**>,
43  OnTypesEqual<T, const std::complex<float>* const*, const hipblasComplex* const*>,
44  OnTypesEqual<T, const std::complex<double>* const*, const hipblasDoubleComplex* const*>,
46 
47 template<typename T>
49 {
50  return reinterpret_cast<hipblasTypeMap<T>>(var);
51 }
52 
53 } // namespace qmcplusplus
54 
55 #endif // QMCPLUSPLUS_HIPBLAS_TYPE_MAPPING_HPP
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
typename std::disjunction< OnTypesEqual< T, float, float >, OnTypesEqual< T, double, double >, OnTypesEqual< T, float *, float * >, OnTypesEqual< T, double *, double * >, OnTypesEqual< T, float **, float ** >, OnTypesEqual< T, double **, double ** >, OnTypesEqual< T, std::complex< double >, hipblasDoubleComplex >, OnTypesEqual< T, std::complex< float >, hipblasComplex >, OnTypesEqual< T, std::complex< double > *, hipblasDoubleComplex * >, OnTypesEqual< T, std::complex< float > **, hipblasComplex ** >, OnTypesEqual< T, std::complex< double > **, hipblasDoubleComplex ** >, OnTypesEqual< T, std::complex< float > *, hipblasComplex * >, OnTypesEqual< T, const std::complex< double > *, const hipblasDoubleComplex * >, OnTypesEqual< T, const std::complex< float > *, const hipblasComplex * >, OnTypesEqual< T, const std::complex< float > **, const hipblasComplex ** >, OnTypesEqual< T, const std::complex< double > **, const hipblasDoubleComplex ** >, OnTypesEqual< T, const std::complex< float > *const *, const hipblasComplex *const * >, OnTypesEqual< T, const std::complex< double > *const *, const hipblasDoubleComplex *const * >, default_type< void > >::type hipblasTypeMap
hipblasTypeMap< T > casthipblasType(T var)