Skip to content

Commit

Permalink
Formatting
Browse files Browse the repository at this point in the history
  • Loading branch information
eeprude committed May 20, 2024
1 parent 51279f8 commit 541955c
Show file tree
Hide file tree
Showing 7 changed files with 300 additions and 296 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,12 @@
//
//@HEADER


#define KOKKOSKERNELS_IMPL_COMPILE_LIBRARY true
#include "KokkosKernels_config.h"
#include "KokkosLapack_geqrf_spec.hpp"

namespace KokkosLapack {
namespace Impl {
@LAPACK_GEQRF_ETI_INST_BLOCK@
} //IMPL
} //Kokkos
@LAPACK_GEQRF_ETI_INST_BLOCK @
} // namespace Impl
} // namespace KokkosLapack
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
#define KOKKOSLAPACK_GEQRF_ETI_SPEC_AVAIL_HPP_
namespace KokkosLapack {
namespace Impl {
@LAPACK_GEQRF_ETI_AVAIL_BLOCK@
} //IMPL
} //Kokkos
@LAPACK_GEQRF_ETI_AVAIL_BLOCK @
} // namespace Impl
} // namespace KokkosLapack
#endif
96 changes: 49 additions & 47 deletions lapack/impl/KokkosLapack_geqrf_spec.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,20 +42,20 @@ struct geqrf_eti_spec_avail {
// We may spread out definitions (see _INST macro below) across one or
// more .cpp files.
//
#define KOKKOSLAPACK_GEQRF_ETI_SPEC_AVAIL(SCALAR_TYPE, LAYOUT_TYPE, \
EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \
template <> \
struct geqrf_eti_spec_avail< \
EXEC_SPACE_TYPE, \
Kokkos::View<SCALAR_TYPE **, LAYOUT_TYPE, \
Kokkos::Device<EXEC_SPACE_TYPE, MEM_SPACE_TYPE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<SCALAR_TYPE *, LAYOUT_TYPE, \
Kokkos::Device<EXEC_SPACE_TYPE, MEM_SPACE_TYPE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<int, Kokkos::LayoutRight, Kokkos::HostSpace, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>> { \
enum : bool { value = true }; \
#define KOKKOSLAPACK_GEQRF_ETI_SPEC_AVAIL(SCALAR_TYPE, LAYOUT_TYPE, \
EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \
template <> \
struct geqrf_eti_spec_avail< \
EXEC_SPACE_TYPE, \
Kokkos::View<SCALAR_TYPE **, LAYOUT_TYPE, \
Kokkos::Device<EXEC_SPACE_TYPE, MEM_SPACE_TYPE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<SCALAR_TYPE *, LAYOUT_TYPE, \
Kokkos::Device<EXEC_SPACE_TYPE, MEM_SPACE_TYPE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<int, Kokkos::LayoutRight, Kokkos::HostSpace, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>> { \
enum : bool { value = true }; \
};

// Include the actual specialization declarations
Expand All @@ -66,24 +66,26 @@ namespace KokkosLapack {
namespace Impl {

// Unification layer
template <class ExecutionSpace, class AMatrix, class TWArray, class RType,
bool tpl_spec_avail =
geqrf_tpl_spec_avail<ExecutionSpace, AMatrix, TWArray, RType>::value,
bool eti_spec_avail =
geqrf_eti_spec_avail<ExecutionSpace, AMatrix, TWArray, RType>::value>
template <
class ExecutionSpace, class AMatrix, class TWArray, class RType,
bool tpl_spec_avail =
geqrf_tpl_spec_avail<ExecutionSpace, AMatrix, TWArray, RType>::value,
bool eti_spec_avail =
geqrf_eti_spec_avail<ExecutionSpace, AMatrix, TWArray, RType>::value>
struct GEQRF {
static void geqrf(const ExecutionSpace &space, const AMatrix &A, const TWArray &Tau,
const TWArray &Work, const RType &R);
static void geqrf(const ExecutionSpace &space, const AMatrix &A,
const TWArray &Tau, const TWArray &Work, const RType &R);
};

#if !defined(KOKKOSKERNELS_ETI_ONLY) || KOKKOSKERNELS_IMPL_COMPILE_LIBRARY
//! Full specialization of geqrf for multi vectors.
// Unification layer
template <class ExecutionSpace, class AMatrix, class TWArray, class RType>
struct GEQRF<ExecutionSpace, AMatrix, TWArray, RType, false,
KOKKOSKERNELS_IMPL_COMPILE_LIBRARY> {
KOKKOSKERNELS_IMPL_COMPILE_LIBRARY> {
static void geqrf(const ExecutionSpace & /* space */, const AMatrix & /* A */,
const TWArray & /* Tau */, const TWArray & /* Work */, const RType & /* R */) {
const TWArray & /* Tau */, const TWArray & /* Work */,
const RType & /* R */) {
// NOTE: Might add the implementation of KokkosLapack::geqrf later
throw std::runtime_error(
"No fallback implementation of GEQRF (general QR factorization) "
Expand All @@ -102,32 +104,32 @@ struct GEQRF<ExecutionSpace, AMatrix, TWArray, RType, false,
// We may spread out definitions (see _DEF macro below) across one or
// more .cpp files.
//
#define KOKKOSLAPACK_GEQRF_ETI_SPEC_DECL(SCALAR_TYPE, LAYOUT_TYPE, \
EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \
extern template struct GEQRF< \
EXEC_SPACE_TYPE, \
Kokkos::View<SCALAR_TYPE **, LAYOUT_TYPE, \
Kokkos::Device<EXEC_SPACE_TYPE, MEM_SPACE_TYPE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<SCALAR_TYPE *, LAYOUT_TYPE, \
Kokkos::Device<EXEC_SPACE_TYPE, MEM_SPACE_TYPE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<int, Kokkos::LayoutRight, Kokkos::HostSpace, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
#define KOKKOSLAPACK_GEQRF_ETI_SPEC_DECL(SCALAR_TYPE, LAYOUT_TYPE, \
EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \
extern template struct GEQRF< \
EXEC_SPACE_TYPE, \
Kokkos::View<SCALAR_TYPE **, LAYOUT_TYPE, \
Kokkos::Device<EXEC_SPACE_TYPE, MEM_SPACE_TYPE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<SCALAR_TYPE *, LAYOUT_TYPE, \
Kokkos::Device<EXEC_SPACE_TYPE, MEM_SPACE_TYPE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<int, Kokkos::LayoutRight, Kokkos::HostSpace, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
false, true>;

#define KOKKOSLAPACK_GEQRF_ETI_SPEC_INST(SCALAR_TYPE, LAYOUT_TYPE, \
EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \
template struct GEQRF< \
EXEC_SPACE_TYPE, \
Kokkos::View<SCALAR_TYPE **, LAYOUT_TYPE, \
Kokkos::Device<EXEC_SPACE_TYPE, MEM_SPACE_TYPE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<SCALAR_TYPE *, LAYOUT_TYPE, \
Kokkos::Device<EXEC_SPACE_TYPE, MEM_SPACE_TYPE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<int, Kokkos::LayoutRight, Kokkos::HostSpace, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
#define KOKKOSLAPACK_GEQRF_ETI_SPEC_INST(SCALAR_TYPE, LAYOUT_TYPE, \
EXEC_SPACE_TYPE, MEM_SPACE_TYPE) \
template struct GEQRF< \
EXEC_SPACE_TYPE, \
Kokkos::View<SCALAR_TYPE **, LAYOUT_TYPE, \
Kokkos::Device<EXEC_SPACE_TYPE, MEM_SPACE_TYPE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<SCALAR_TYPE *, LAYOUT_TYPE, \
Kokkos::Device<EXEC_SPACE_TYPE, MEM_SPACE_TYPE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<int, Kokkos::LayoutRight, Kokkos::HostSpace, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
false, true>;

#include <KokkosLapack_geqrf_tpl_spec_decl.hpp>
Expand Down
21 changes: 12 additions & 9 deletions lapack/src/KokkosLapack_geqrf.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ int geqrf(const ExecutionSpace& space, const AMatrix& A, const TWArray& Tau,
int64_t work0 = Work.extent(0);

// Check validity of dimensions
if (tau0 != std::min(m,n)) {
if (tau0 != std::min(m, n)) {
std::ostringstream os;
os << "KokkosLapack::geqrf: length of Tau must be equal to min(m,n): "
<< " A: " << m << " x " << n << ", Tau length = " << tau0;
Expand All @@ -103,15 +103,16 @@ int geqrf(const ExecutionSpace& space, const AMatrix& A, const TWArray& Tau,
if ((m == 0) || (n == 0)) {
if (work0 < 1) {
std::ostringstream os;
os << "KokkosLapack::geqrf: In case min(m,n) == 0, then Work must have length >= 1: "
os << "KokkosLapack::geqrf: In case min(m,n) == 0, then Work must have "
"length >= 1: "
<< " A: " << m << " x " << n << ", Work length = " << work0;
KokkosKernels::Impl::throw_runtime_exception(os.str());
}
}
else {
} else {
if (work0 < n) {
std::ostringstream os;
os << "KokkosLapack::geqrf: In case min(m,n) != 0, then Work must have length >= n: "
os << "KokkosLapack::geqrf: In case min(m,n) != 0, then Work must have "
"length >= n: "
<< " A: " << m << " x " << n << ", Work length = " << work0;
KokkosKernels::Impl::throw_runtime_exception(os.str());
}
Expand All @@ -121,9 +122,9 @@ int geqrf(const ExecutionSpace& space, const AMatrix& A, const TWArray& Tau,
typename AMatrix::non_const_value_type**, typename AMatrix::array_layout,
typename AMatrix::device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> >
AMatrix_Internal;
typedef Kokkos::View<typename TWArray::non_const_value_type*,
typename TWArray::array_layout, typename TWArray::device_type,
Kokkos::MemoryTraits<Kokkos::Unmanaged> >
typedef Kokkos::View<
typename TWArray::non_const_value_type*, typename TWArray::array_layout,
typename TWArray::device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> >
TWArray_Internal;
AMatrix_Internal A_i = A;
TWArray_Internal Tau_i = Tau;
Expand All @@ -137,7 +138,9 @@ int geqrf(const ExecutionSpace& space, const AMatrix& A, const TWArray& Tau,
int result;
RViewInternalType R = RViewInternalType(&result);

KokkosLapack::Impl::GEQRF<ExecutionSpace, AMatrix_Internal, TWArray_Internal, RViewInternalType>::geqrf(space, A_i, Tau_i, Work_i, R);
KokkosLapack::Impl::GEQRF<ExecutionSpace, AMatrix_Internal, TWArray_Internal,
RViewInternalType>::geqrf(space, A_i, Tau_i, Work_i,
R);

return result;
}
Expand Down
60 changes: 32 additions & 28 deletions lapack/tpls/KokkosLapack_geqrf_tpl_spec_avail.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,13 @@ struct geqrf_tpl_spec_avail {
};

KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_LAPACK(double, Kokkos::LayoutLeft,
Kokkos::HostSpace)
Kokkos::HostSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_LAPACK(float, Kokkos::LayoutLeft,
Kokkos::HostSpace)
Kokkos::HostSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_LAPACK(Kokkos::complex<double>,
Kokkos::LayoutLeft, Kokkos::HostSpace)
Kokkos::LayoutLeft, Kokkos::HostSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_LAPACK(Kokkos::complex<float>,
Kokkos::LayoutLeft, Kokkos::HostSpace)
Kokkos::LayoutLeft, Kokkos::HostSpace)
#endif
} // namespace Impl
} // namespace KokkosLapack
Expand All @@ -64,20 +64,20 @@ namespace Impl {
struct geqrf_tpl_spec_avail< \
Kokkos::Cuda, \
Kokkos::View<SCALAR**, LAYOUT, Kokkos::Device<Kokkos::Cuda, MEMSPACE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<SCALAR*, LAYOUT, Kokkos::Device<Kokkos::Cuda, MEMSPACE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged> > > { \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>> { \
enum : bool { value = true }; \
};

KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_MAGMA(double, Kokkos::LayoutLeft,
Kokkos::CudaSpace)
Kokkos::CudaSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_MAGMA(float, Kokkos::LayoutLeft,
Kokkos::CudaSpace)
Kokkos::CudaSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_MAGMA(Kokkos::complex<double>,
Kokkos::LayoutLeft, Kokkos::CudaSpace)
Kokkos::LayoutLeft, Kokkos::CudaSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_MAGMA(Kokkos::complex<float>,
Kokkos::LayoutLeft, Kokkos::CudaSpace)
Kokkos::LayoutLeft, Kokkos::CudaSpace)
} // namespace Impl
} // namespace KokkosLapack
#endif // KOKKOSKERNELS_ENABLE_TPL_MAGMA
Expand All @@ -92,32 +92,34 @@ namespace Impl {
struct geqrf_tpl_spec_avail< \
Kokkos::Cuda, \
Kokkos::View<SCALAR**, LAYOUT, Kokkos::Device<Kokkos::Cuda, MEMSPACE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<SCALAR*, LAYOUT, Kokkos::Device<Kokkos::Cuda, MEMSPACE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged> > > { \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>> { \
enum : bool { value = true }; \
};

KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_CUSOLVER(double, Kokkos::LayoutLeft,
Kokkos::CudaSpace)
Kokkos::CudaSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_CUSOLVER(float, Kokkos::LayoutLeft,
Kokkos::CudaSpace)
Kokkos::CudaSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_CUSOLVER(Kokkos::complex<double>,
Kokkos::LayoutLeft, Kokkos::CudaSpace)
Kokkos::LayoutLeft,
Kokkos::CudaSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_CUSOLVER(Kokkos::complex<float>,
Kokkos::LayoutLeft, Kokkos::CudaSpace)
Kokkos::LayoutLeft,
Kokkos::CudaSpace)

#if defined(KOKKOSKERNELS_INST_MEMSPACE_CUDAUVMSPACE)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_CUSOLVER(double, Kokkos::LayoutLeft,
Kokkos::CudaUVMSpace)
Kokkos::CudaUVMSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_CUSOLVER(float, Kokkos::LayoutLeft,
Kokkos::CudaUVMSpace)
Kokkos::CudaUVMSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_CUSOLVER(Kokkos::complex<double>,
Kokkos::LayoutLeft,
Kokkos::CudaUVMSpace)
Kokkos::LayoutLeft,
Kokkos::CudaUVMSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_CUSOLVER(Kokkos::complex<float>,
Kokkos::LayoutLeft,
Kokkos::CudaUVMSpace)
Kokkos::LayoutLeft,
Kokkos::CudaUVMSpace)
#endif

} // namespace Impl
Expand All @@ -135,20 +137,22 @@ namespace Impl {
struct geqrf_tpl_spec_avail< \
Kokkos::HIP, \
Kokkos::View<SCALAR**, LAYOUT, Kokkos::Device<Kokkos::HIP, MEMSPACE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>, \
Kokkos::View<SCALAR*, LAYOUT, Kokkos::Device<Kokkos::HIP, MEMSPACE>, \
Kokkos::MemoryTraits<Kokkos::Unmanaged> > > { \
Kokkos::MemoryTraits<Kokkos::Unmanaged>>> { \
enum : bool { value = true }; \
};

KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_ROCSOLVER(double, Kokkos::LayoutLeft,
Kokkos::HIPSpace)
Kokkos::HIPSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_ROCSOLVER(float, Kokkos::LayoutLeft,
Kokkos::HIPSpace)
Kokkos::HIPSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_ROCSOLVER(Kokkos::complex<double>,
Kokkos::LayoutLeft, Kokkos::HIPSpace)
Kokkos::LayoutLeft,
Kokkos::HIPSpace)
KOKKOSLAPACK_GEQRF_TPL_SPEC_AVAIL_ROCSOLVER(Kokkos::complex<float>,
Kokkos::LayoutLeft, Kokkos::HIPSpace)
Kokkos::LayoutLeft,
Kokkos::HIPSpace)

} // namespace Impl
} // namespace KokkosLapack
Expand Down
Loading

0 comments on commit 541955c

Please sign in to comment.