-
Notifications
You must be signed in to change notification settings - Fork 97
BLAS::gesv
Vinh Dang edited this page Feb 19, 2020
·
3 revisions
Header File: KokkosBlas_gesv.hpp
Usage: KokkosBlas::gesv (A, B, IPIV);
Solves a dense linear equation system with multiple right-hand sides using LU factorization A*X = B
(partial pivoting variant and no pivoting variant).
template <class AMatrix,
class BXMV,
class IPIVV>
void
gesv (const AMatrix& A,
const BXMV& B,
const IPIVV& IPIV)
- AMatrix: 2-D
Kokkos::View
- BXMV: 1-D or 2-D
Kokkos::View
- IPIVV: 1-D
Kokkos::View
- A [in,out] On entry, the N-by-N matrix to be solved.
On exit, the factors L and U from the factorization
A = P*L*U
; the unit diagonal elements of L are not stored. - B [in,out] On entry, the right hand side (multi)vector B. On exit, the solution (multi)vector X.
- IPIV [out] On exit, the pivot indices (for partial pivoting). If the View extents are zero and its data pointer is NULL, pivoting is not used.
- The dimensions of the matrices A and B must match for linear system solve.
- The dimension of IPIV must match dimensions of A and B (for partial pivoting) or IPIV is zero-extent 1-D view (no pivoting case). Note: TPL BLAS does not support no pivoting case.
#include<Kokkos_Core.hpp>
#include<Kokkos_Random.hpp>
#include<KokkosBlas_gesv.hpp>
int main(int argc, char* argv[]) {
Kokkos::initialize();
int N = atoi(argv[1]);
int NRHS = atoi(argv[2]);
using ViewType = Kokkos::View<double**>;
using Scalar = typename ViewType::value_type;
using ViewTypeP = Kokkos::View<int*, Kokkos::LayoutLeft, Kokkos::HostSpace>;
ViewType A("A", N, N);
ViewType B("B", N, NRHS);
ViewTypeP IPIV("IPIV", N);
Kokkos::Random_XorShift64_Pool<typename ViewType::device_type::execution_space> rand_pool(13718);
Kokkos::fill_random(A,rand_pool,Scalar(10));
Kokkos::fill_random(B,rand_pool,Scalar(10));
KokkosBlas::gesv(A, B, IPIV);
Kokkos::finalize();
}
#include<Kokkos_Core.hpp>
#include<Kokkos_Random.hpp>
#include<KokkosBlas_gesv.hpp>
int main(int argc, char* argv[]) {
Kokkos::initialize();
int N = atoi(argv[1]);
int NRHS = atoi(argv[2]);
using ViewType = Kokkos::View<double**>;
using Scalar = typename ViewType::value_type;
using ViewTypeP = Kokkos::View<int*, Kokkos::LayoutLeft, Kokkos::HostSpace>;
ViewType A("A", N, N);
ViewType B("B", N, NRHS);
ViewTypeP IPIV("IPIV", 0);
Kokkos::Random_XorShift64_Pool<typename ViewType::device_type::execution_space> rand_pool(13718);
Kokkos::fill_random(A,rand_pool,Scalar(10));
Kokkos::fill_random(B,rand_pool,Scalar(10));
KokkosBlas::gesv(A, B, IPIV);
Kokkos::finalize();
}