Stokhos Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
src
cusp
detail
device
detail/device/MVmultiply.h
Go to the documentation of this file.
1
/*
2
* Copyright 2008-2009 NVIDIA Corporation
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
17
#pragma once
18
19
#include <cusp/format.h>
20
#include <cusp/csr_matrix.h>
21
#include <cusp/detail/functional.h>
22
#include <iostream>
23
24
// SpMM
25
#include <
cusp/detail/device/spmm/csr_vector.h
>
26
#include <
cusp/detail/device/spmm/array2d.h
>
27
28
#include "Teuchos_TimeMonitor.hpp"
29
30
namespace
cusp
31
{
32
namespace
detail
33
{
34
namespace
device
35
{
36
38
// Sparse Matrix-BlockVector Multiply //
40
template
<
typename
Matrix,
41
typename
Vector1,
42
typename
Vector2>
43
void
MVmultiply
(
const
Matrix& A,
44
const
Vector1& B,
45
Vector2& C,
46
cusp::sparse_format,
47
cusp::array2d_format,
48
cusp::array2d_format
49
)
50
{
51
TEUCHOS_FUNC_TIME_MONITOR(
"CUSP Matrix block-apply"
);
52
cusp::detail::device::spmm_csr_vector
(A,B,C);
53
cudaDeviceSynchronize();
54
}
55
57
// Sparse Matrix-BlockVector Multiply //
59
template
<
typename
Matrix,
60
typename
Vector1,
61
typename
Vector2>
62
void
OVmultiply
(
const
Matrix& A,
63
const
Vector1& B,
64
Vector2& C,
65
cusp::sparse_format,
66
cusp::array2d_format,
67
cusp::array2d_format
68
)
69
{
70
TEUCHOS_FUNC_TIME_MONITOR(
"CUSP Operator block-apply"
);
71
cusp::detail::device::spmm_csr_vector
(A,B,C);
72
cudaDeviceSynchronize();
73
}
74
78
template
<
typename
Matrix1,
79
typename
Matrix2,
80
typename
Matrix3>
81
void
MVmultiply
(
const
Matrix1& A,
82
const
Matrix2& B,
83
Matrix3& C,
84
cusp::array2d_format,
85
cusp::array1d_format,
86
cusp::array2d_format)
87
{
88
TEUCHOS_FUNC_TIME_MONITOR(
"CUSP Dense-diag"
);
89
cusp::detail::device::spmm_dense_diag
(A,B,C);
90
cudaDeviceSynchronize();
91
}
92
94
// Dot Product: Computes C[i] = A[i] ^ T * B[i] where A[i] and B[i] are the i-th columns of A and B
96
97
98
template
<
typename
MV,
99
typename
MV1,
100
typename
MV2>
101
void
MVdot
(
const
MV& A,
102
const
MV1& B,
103
MV2& C)
104
{
105
TEUCHOS_FUNC_TIME_MONITOR(
"CUSP dot"
);
106
cusp::detail::device::spmm_MVdot
(A,B,C);
107
cudaDeviceSynchronize();
108
}
109
113
template
<
typename
ValueType,
114
typename
MV1,
115
typename
MV2>
116
void
axpby
(
const
ValueType& A,
const
MV1& X,
const
ValueType& B,
117
const
MV1& Y,
118
MV2& Z)
119
{
120
TEUCHOS_FUNC_TIME_MONITOR(
"CUSP axpby"
);
121
cusp::detail::device::spmm_axpby
(A,X,B,Y,Z);
122
cudaDeviceSynchronize();
123
}
124
125
127
// Entry Point //
129
template
<
typename
Matrix,
130
typename
MatrixOrVector1,
131
typename
MatrixOrVector2>
132
void
MVmultiply
(
const
Matrix& A,
133
const
MatrixOrVector1& B,
134
MatrixOrVector2& C)
135
{
136
cusp::detail::device::MVmultiply
(A, B, C,
137
typename
Matrix::format(),
138
typename
MatrixOrVector1::format(),
139
typename
MatrixOrVector2::format());
140
}
141
142
template
<
typename
Matrix,
143
typename
MatrixOrVector1,
144
typename
MatrixOrVector2>
145
void
OVmultiply
(
const
Matrix& A,
146
const
MatrixOrVector1& B,
147
MatrixOrVector2& C)
148
{
149
cusp::detail::device::OVmultiply
(A, B, C,
150
typename
Matrix::format(),
151
typename
MatrixOrVector1::format(),
152
typename
MatrixOrVector2::format());
153
}
154
155
}
// end namespace device
156
}
// end namespace detail
157
}
// end namespace cusp
array2d.h
csr_vector.h
cusp::detail::device
Definition
detail/device/MVmultiply.h:35
cusp::detail::device::spmm_csr_vector
void spmm_csr_vector(const Matrix &A, const Vector2 &x, Vector3 &y)
Definition
csr_vector.h:474
cusp::detail::device::MVdot
void MVdot(const MV &A, const MV1 &B, MV2 &C)
Definition
detail/device/MVmultiply.h:101
cusp::detail::device::spmm_MVdot
void spmm_MVdot(const Vector1 &A, const Vector2 &x, Vector3 &y)
Definition
array2d.h:473
cusp::detail::device::MVmultiply
void MVmultiply(const Matrix &A, const Vector1 &B, Vector2 &C, cusp::sparse_format, cusp::array2d_format, cusp::array2d_format)
Definition
detail/device/MVmultiply.h:43
cusp::detail::device::spmm_dense_diag
void spmm_dense_diag(const Vector1 &A, const Vector2 &x, Vector3 &y)
Definition
array2d.h:484
cusp::detail::device::spmm_axpby
void spmm_axpby(const ValueType &a, const Vector1 &x, const ValueType &b, const Vector1 &y, Vector2 &z)
Definition
array2d.h:495
cusp::detail::device::axpby
void axpby(const ValueType &A, const MV1 &X, const ValueType &B, const MV1 &Y, MV2 &Z)
Definition
detail/device/MVmultiply.h:116
cusp::detail::device::OVmultiply
void OVmultiply(const Matrix &A, const Vector1 &B, Vector2 &C, cusp::sparse_format, cusp::array2d_format, cusp::array2d_format)
Definition
detail/device/MVmultiply.h:62
cusp::detail
Definition
block_lu.h:28
cusp
Definition
block_monitor.h:38
Generated by
1.17.0