Reference documentation for deal.II version 9.1.1
\(\newcommand{\dealcoloneq}{\mathrel{\vcenter{:}}=}\)
cuda_precondition.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2018 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE.md at
12 // the top level directory of deal.II.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii_cuda_precondition_h
17 #define dealii_cuda_precondition_h
18 
19 #include <deal.II/base/config.h>
20 
21 #include <deal.II/base/cuda.h>
22 #include <deal.II/base/smartpointer.h>
23 
24 #include <memory>
25 
26 #ifdef DEAL_II_COMPILER_CUDA_AWARE
27 
28 DEAL_II_NAMESPACE_OPEN
29 
30 // forward-definition
31 namespace LinearAlgebra
32 {
33  namespace CUDAWrappers
34  {
35  template <typename Number>
36  class Vector;
37  }
38 } // namespace LinearAlgebra
39 
40 namespace CUDAWrappers
41 {
42  // forward definition
43  template <typename Number>
44  class SparseMatrix;
45 
61  template <typename Number>
63  {
64  public:
68  using size_type = int;
69 
75  {
82 
91  };
92 
97 
101  PreconditionIC(const PreconditionIC<Number> &) = delete;
102 
107  operator=(const PreconditionIC<Number> &) = delete;
108 
112  ~PreconditionIC();
113 
123  void
124  initialize(const SparseMatrix<Number> &matrix,
125  const AdditionalData & additional_data = AdditionalData());
126 
130  void
133 
138  void
141 
149  size_type
150  m() const;
151 
159  size_type
160  n() const;
161 
162  private:
166  cusparseHandle_t cusparse_handle;
167 
171  cusparseMatDescr_t descr_M;
172 
176  cusparseMatDescr_t descr_L;
177 
181  csric02Info_t info_M;
182 
186  csrsv2Info_t info_L;
187 
191  csrsv2Info_t info_Lt;
192 
197 
202  std::unique_ptr<Number[], void (*)(Number *)> P_val_dev;
203 
208  const int *P_row_ptr_dev;
209 
214  const int *P_column_index_dev;
215 
220  std::unique_ptr<Number[], void (*)(Number *)> tmp_dev;
221 
226  std::unique_ptr<void, void (*)(void *)> buffer_dev;
227 
233  cusparseSolvePolicy_t policy_L;
234 
240  cusparseSolvePolicy_t policy_Lt;
241 
246  cusparseSolvePolicy_t policy_M;
247 
252  int n_rows;
253 
259  };
260 
276  template <typename Number>
278  {
279  public:
283  using size_type = int;
284 
290  {
296  AdditionalData(bool use_level_analysis = true);
297 
306  };
307 
312 
316  PreconditionILU(const PreconditionILU<Number> &) = delete;
317 
322  operator=(const PreconditionILU<Number> &) = delete;
323 
328 
338  void
339  initialize(const SparseMatrix<Number> &matrix,
340  const AdditionalData & additional_data = AdditionalData());
341 
345  void
348 
352  void
355 
363  size_type
364  m() const;
365 
373  size_type
374  n() const;
375 
376  private:
380  cusparseHandle_t cusparse_handle;
381 
385  cusparseMatDescr_t descr_M;
386 
390  cusparseMatDescr_t descr_L;
391 
395  cusparseMatDescr_t descr_U;
396 
400  csrilu02Info_t info_M;
401 
405  csrsv2Info_t info_L;
406 
410  csrsv2Info_t info_U;
411 
416 
421  std::unique_ptr<Number[], void (*)(Number *)> P_val_dev;
422 
427  const int *P_row_ptr_dev;
428 
433  const int *P_column_index_dev;
434 
439  std::unique_ptr<Number[], void (*)(Number *)> tmp_dev;
440 
445  std::unique_ptr<void, void (*)(void *)> buffer_dev;
446 
452  cusparseSolvePolicy_t policy_L;
453 
459  cusparseSolvePolicy_t policy_U;
460 
465  cusparseSolvePolicy_t policy_M;
466 
471  int n_rows;
472 
478  };
479 
480  /*--------------------------- inline functions ----------------------------*/
481 
482 # ifndef DOXYGEN
483  template <typename Number>
484  inline typename PreconditionIC<Number>::size_type
486  {
487  return n_rows;
488  }
489 
490 
491 
492  template <typename Number>
493  inline typename PreconditionIC<Number>::size_type
495  {
496  return n_rows;
497  }
498 
499 
500 
501  template <typename Number>
502  inline typename PreconditionILU<Number>::size_type
504  {
505  return n_rows;
506  }
507 
508 
509 
510  template <typename Number>
511  inline typename PreconditionILU<Number>::size_type
513  {
514  return n_rows;
515  }
516 # endif // DOXYGEN
517 
518 } // namespace CUDAWrappers
519 
520 DEAL_II_NAMESPACE_CLOSE
521 
522 #endif // DEAL_II_WITH_CUDA
523 
524 #endif // dealii_cuda_precondition_h
CUDAWrappers::PreconditionILU::descr_M
cusparseMatDescr_t descr_M
Definition: cuda_precondition.h:385
Utilities::CUDA::Handle
Definition: cuda.h:43
CUDAWrappers::PreconditionIC::AdditionalData::use_level_analysis
bool use_level_analysis
Definition: cuda_precondition.h:90
CUDAWrappers::PreconditionILU::descr_L
cusparseMatDescr_t descr_L
Definition: cuda_precondition.h:390
CUDAWrappers::PreconditionIC::policy_Lt
cusparseSolvePolicy_t policy_Lt
Definition: cuda_precondition.h:240
CUDAWrappers::SparseMatrix
Definition: cuda_precondition.h:44
CUDAWrappers::PreconditionILU
Definition: cuda_precondition.h:277
CUDAWrappers::PreconditionILU::n_nonzero_elements
int n_nonzero_elements
Definition: cuda_precondition.h:477
CUDAWrappers::PreconditionILU::PreconditionILU
PreconditionILU(const Utilities::CUDA::Handle &handle)
CUDAWrappers::PreconditionILU::Tvmult
void Tvmult(LinearAlgebra::CUDAWrappers::Vector< Number > &dst, const LinearAlgebra::CUDAWrappers::Vector< Number > &src) const
LinearAlgebra
Definition: communication_pattern_base.h:27
CUDAWrappers::PreconditionIC::n
size_type n() const
CUDAWrappers::PreconditionILU::info_L
csrsv2Info_t info_L
Definition: cuda_precondition.h:405
CUDAWrappers::PreconditionIC::AdditionalData::AdditionalData
AdditionalData(bool use_level_analysis=true)
CUDAWrappers::PreconditionILU::descr_U
cusparseMatDescr_t descr_U
Definition: cuda_precondition.h:395
CUDAWrappers::PreconditionILU::buffer_dev
std::unique_ptr< void, void(*)(void *)> buffer_dev
Definition: cuda_precondition.h:445
CUDAWrappers::PreconditionIC::m
size_type m() const
CUDAWrappers::PreconditionILU::policy_M
cusparseSolvePolicy_t policy_M
Definition: cuda_precondition.h:465
CUDAWrappers::PreconditionIC::P_val_dev
std::unique_ptr< Number[], void(*)(Number *)> P_val_dev
Definition: cuda_precondition.h:202
CUDAWrappers::PreconditionIC::policy_L
cusparseSolvePolicy_t policy_L
Definition: cuda_precondition.h:233
CUDAWrappers::PreconditionILU::~PreconditionILU
~PreconditionILU()
CUDAWrappers::PreconditionIC::~PreconditionIC
~PreconditionIC()
CUDAWrappers::PreconditionIC::initialize
void initialize(const SparseMatrix< Number > &matrix, const AdditionalData &additional_data=AdditionalData())
CUDAWrappers::PreconditionILU::AdditionalData::AdditionalData
AdditionalData(bool use_level_analysis=true)
CUDAWrappers::PreconditionILU::n_rows
int n_rows
Definition: cuda_precondition.h:471
CUDAWrappers::PreconditionILU::m
size_type m() const
LinearAlgebra::CUDAWrappers::Vector
Definition: cuda_precondition.h:36
CUDAWrappers::PreconditionILU::P_column_index_dev
const int * P_column_index_dev
Definition: cuda_precondition.h:433
CUDAWrappers::PreconditionILU::operator=
PreconditionILU & operator=(const PreconditionILU< Number > &)=delete
CUDAWrappers::PreconditionIC::AdditionalData
Definition: cuda_precondition.h:74
CUDAWrappers::PreconditionILU::P_val_dev
std::unique_ptr< Number[], void(*)(Number *)> P_val_dev
Definition: cuda_precondition.h:421
CUDAWrappers::PreconditionIC::PreconditionIC
PreconditionIC(const Utilities::CUDA::Handle &handle)
CUDAWrappers::PreconditionIC::n_rows
int n_rows
Definition: cuda_precondition.h:252
CUDAWrappers::PreconditionIC::cusparse_handle
cusparseHandle_t cusparse_handle
Definition: cuda_precondition.h:166
CUDAWrappers
Definition: cuda_size.h:23
CUDAWrappers::PreconditionIC::n_nonzero_elements
int n_nonzero_elements
Definition: cuda_precondition.h:258
CUDAWrappers::PreconditionIC::info_Lt
csrsv2Info_t info_Lt
Definition: cuda_precondition.h:191
CUDAWrappers::PreconditionILU::size_type
int size_type
Definition: cuda_precondition.h:283
CUDAWrappers::PreconditionILU::tmp_dev
std::unique_ptr< Number[], void(*)(Number *)> tmp_dev
Definition: cuda_precondition.h:439
CUDAWrappers::PreconditionIC::policy_M
cusparseSolvePolicy_t policy_M
Definition: cuda_precondition.h:246
CUDAWrappers::PreconditionIC
Definition: cuda_precondition.h:62
CUDAWrappers::PreconditionILU::initialize
void initialize(const SparseMatrix< Number > &matrix, const AdditionalData &additional_data=AdditionalData())
CUDAWrappers::PreconditionIC::descr_M
cusparseMatDescr_t descr_M
Definition: cuda_precondition.h:171
CUDAWrappers::PreconditionIC::vmult
void vmult(LinearAlgebra::CUDAWrappers::Vector< Number > &dst, const LinearAlgebra::CUDAWrappers::Vector< Number > &src) const
SmartPointer
Definition: smartpointer.h:68
CUDAWrappers::PreconditionILU::n
size_type n() const
CUDAWrappers::PreconditionIC::Tvmult
void Tvmult(LinearAlgebra::CUDAWrappers::Vector< Number > &dst, const LinearAlgebra::CUDAWrappers::Vector< Number > &src) const
CUDAWrappers::PreconditionILU::matrix_pointer
SmartPointer< const SparseMatrix< Number > > matrix_pointer
Definition: cuda_precondition.h:415
CUDAWrappers::PreconditionILU::info_M
csrilu02Info_t info_M
Definition: cuda_precondition.h:400
CUDAWrappers::PreconditionILU::P_row_ptr_dev
const int * P_row_ptr_dev
Definition: cuda_precondition.h:427
CUDAWrappers::PreconditionIC::P_row_ptr_dev
const int * P_row_ptr_dev
Definition: cuda_precondition.h:208
CUDAWrappers::PreconditionIC::operator=
PreconditionIC & operator=(const PreconditionIC< Number > &)=delete
CUDAWrappers::PreconditionILU::policy_U
cusparseSolvePolicy_t policy_U
Definition: cuda_precondition.h:459
CUDAWrappers::PreconditionILU::policy_L
cusparseSolvePolicy_t policy_L
Definition: cuda_precondition.h:452
CUDAWrappers::PreconditionILU::AdditionalData::use_level_analysis
bool use_level_analysis
Definition: cuda_precondition.h:305
CUDAWrappers::PreconditionILU::vmult
void vmult(LinearAlgebra::CUDAWrappers::Vector< Number > &dst, const LinearAlgebra::CUDAWrappers::Vector< Number > &src) const
CUDAWrappers::PreconditionIC::buffer_dev
std::unique_ptr< void, void(*)(void *)> buffer_dev
Definition: cuda_precondition.h:226
CUDAWrappers::PreconditionIC::info_M
csric02Info_t info_M
Definition: cuda_precondition.h:181
CUDAWrappers::PreconditionILU::info_U
csrsv2Info_t info_U
Definition: cuda_precondition.h:410
CUDAWrappers::PreconditionIC::tmp_dev
std::unique_ptr< Number[], void(*)(Number *)> tmp_dev
Definition: cuda_precondition.h:220
CUDAWrappers::PreconditionILU::cusparse_handle
cusparseHandle_t cusparse_handle
Definition: cuda_precondition.h:380
CUDAWrappers::PreconditionILU::AdditionalData
Definition: cuda_precondition.h:289
CUDAWrappers::PreconditionIC::P_column_index_dev
const int * P_column_index_dev
Definition: cuda_precondition.h:214
CUDAWrappers::PreconditionIC::size_type
int size_type
Definition: cuda_precondition.h:68
CUDAWrappers::PreconditionIC::info_L
csrsv2Info_t info_L
Definition: cuda_precondition.h:186
CUDAWrappers::PreconditionIC::matrix_pointer
SmartPointer< const SparseMatrix< Number > > matrix_pointer
Definition: cuda_precondition.h:196
CUDAWrappers::PreconditionIC::descr_L
cusparseMatDescr_t descr_L
Definition: cuda_precondition.h:176