Stokhos Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
src
sacado
kokkos
vector
KokkosBlas3_gemm_MP_Vector.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Stokhos Package
5
// Copyright (2009) Sandia Corporation
6
//
7
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8
// license for use of this work by or on behalf of the U.S. Government.
9
//
10
// Redistribution and use in source and binary forms, with or without
11
// modification, are permitted provided that the following conditions are
12
// met:
13
//
14
// 1. Redistributions of source code must retain the above copyright
15
// notice, this list of conditions and the following disclaimer.
16
//
17
// 2. Redistributions in binary form must reproduce the above copyright
18
// notice, this list of conditions and the following disclaimer in the
19
// documentation and/or other materials provided with the distribution.
20
//
21
// 3. Neither the name of the Corporation nor the names of the
22
// contributors may be used to endorse or promote products derived from
23
// this software without specific prior written permission.
24
//
25
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
//
37
// Questions? Contact Eric T. Phipps (etphipp@sandia.gov).
38
//
39
// ***********************************************************************
40
// @HEADER
41
42
#ifndef KOKKOSBLAS3_GEMM_MP_VECTOR_HPP
43
#define KOKKOSBLAS3_GEMM_MP_VECTOR_HPP
44
45
#include <type_traits>
46
#include "Sacado_ConfigDefs.h"
47
48
#include "
Stokhos_ViewStorage.hpp
"
49
#include "
Sacado_MP_Vector.hpp
"
50
#include "
Kokkos_View_MP_Vector.hpp
"
51
#include "
Kokkos_ArithTraits_MP_Vector.hpp
"
52
#include "KokkosBlas.hpp"
53
54
namespace
KokkosBlas
55
{
56
template
<
typename
DA,
typename
... PA,
57
typename
DB,
typename
... PB,
58
typename
DC,
typename
... PC>
59
typename
std::enable_if<Kokkos::is_view_mp_vector<Kokkos::View<DA, PA...>>::value &&
60
Kokkos::is_view_mp_vector<Kokkos::View<DB, PB...>>::value &&
61
Kokkos::is_view_mp_vector<Kokkos::View<DC, PC...>>::value>::type
62
gemm
(
const
char
transA[],
63
const
char
transB[],
64
typename
Kokkos::View<DA, PA...>::const_value_type &alpha,
65
const
Kokkos::View<DA, PA...> &A,
66
const
Kokkos::View<DB, PB...> &B,
67
typename
Kokkos::View<DC, PC...>::const_value_type &beta,
68
const
Kokkos::View<DC, PC...> &C)
69
{
70
// Assert that A, B, and C are in fact matrices
71
static_assert
(Kokkos::View<DA, PA...>::rank == 2,
"GEMM: A must have rank 2 (be a matrix)."
);
72
static_assert
(Kokkos::View<DB, PB...>::rank == 2,
"GEMM: B must have rank 2 (be a matrix)."
);
73
static_assert
(Kokkos::View<DC, PC...>::rank == 2,
"GEMM: C must have rank 2 (be a matrix)."
);
74
75
if
(B.extent(1) == 1 && C.extent(1) == 1)
76
{
77
auto
x = Kokkos::subview(B, Kokkos::ALL, 0);
78
auto
y = Kokkos::subview(C, Kokkos::ALL, 0);
79
KokkosBlas::gemv
(transA, alpha, A, x, beta, y);
80
}
81
else
82
TEUCHOS_TEST_FOR_EXCEPTION(
true
, std::logic_error,
"GEMM: Not implemented for Sacado::MP::Vector scalar type!"
);
83
}
84
}
// namespace KokkosBlas
85
86
#endif
Kokkos_ArithTraits_MP_Vector.hpp
Kokkos_View_MP_Vector.hpp
Sacado_MP_Vector.hpp
Stokhos_ViewStorage.hpp
KokkosBlas
Definition
Kokkos_Blas1_UQ_PCE.hpp:54
KokkosBlas::gemm
std::enable_if< Kokkos::is_view_mp_vector< Kokkos::View< DA, PA... > >::value &&Kokkos::is_view_mp_vector< Kokkos::View< DB, PB... > >::value &&Kokkos::is_view_mp_vector< Kokkos::View< DC, PC... > >::value >::type gemm(const char transA[], const char transB[], typename Kokkos::View< DA, PA... >::const_value_type &alpha, const Kokkos::View< DA, PA... > &A, const Kokkos::View< DB, PB... > &B, typename Kokkos::View< DC, PC... >::const_value_type &beta, const Kokkos::View< DC, PC... > &C)
Definition
KokkosBlas3_gemm_MP_Vector.hpp:62
KokkosBlas::gemv
std::enable_if< Kokkos::is_view_mp_vector< Kokkos::View< DA, PA... > >::value &&Kokkos::is_view_mp_vector< Kokkos::View< DX, PX... > >::value &&Kokkos::is_view_mp_vector< Kokkos::View< DY, PY... > >::value >::type gemv(const char trans[], typename Kokkos::View< DA, PA... >::const_value_type &alpha, const Kokkos::View< DA, PA... > &A, const Kokkos::View< DX, PX... > &x, typename Kokkos::View< DY, PY... >::const_value_type &beta, const Kokkos::View< DY, PY... > &y)
Definition
KokkosBlas2_gemv_MP_Vector.hpp:280
Generated by
1.17.0