My Project
Loading...
Searching...
No Matches
Opm::cuistl::detail Namespace Reference

Contains wrappers to make the CuBLAS library behave as a modern C++ library with function overlading. More...

Classes

class  CuBlasHandle
 The CuBlasHandle class provides a singleton for the simulator universal cuBlasHandle. More...
 
class  CuSparseHandle
 The CuSparseHandle class provides a singleton for the simulator universal cuSparseHandle. More...
 
class  CuSparseResource
 The CuSparseResource class wraps a CuSparse resource in a proper RAII pattern. More...
 
class  has_communication
 The has_communication class checks if the type has the member function getCommunication. More...
 
class  has_should_call_post
 The has_should_call_post class detects the presence of the method shouldCallPost. More...
 
class  has_should_call_pre
 The has_should_call_pre class detects the presence of the method shouldCallPre. More...
 
class  is_a_well_operator
 The is_a_well_operator class tries to guess if the operator is a well type operator. More...
 

Typedefs

using CuSparseMatrixDescription = CuSparseResource< cusparseMatDescr_t >
 CuSparseMatrixDescription holder.
 
using CuSparseMatrixDescriptionPtr = std::shared_ptr< CuSparseResource< cusparseMatDescr_t > >
 Pointer to CuSparseMatrixDescription holder.
 

Functions

std::string getCublasErrorMessage (cublasStatus_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
 getCublasErrorMessage generates the error message to display for a given error.
 
void cublasSafeCall (cublasStatus_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
 cublasSafeCall checks the return type of the CUBLAS expression (function call) and throws an exception if it does not equal CUBLAS_STATUS_SUCCESS.
 
cublasStatus_t cublasWarnIfError (cublasStatus_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
 cublasWarnIfError checks the return type of the CUBLAS expression (function call) and issues a warning if it does not equal CUBLAS_STATUS_SUCCESS.
 
cublasStatus_t cublasScal (cublasHandle_t handle, int n, const double *alpha, double *x, int incx)
 
cublasStatus_t cublasScal (cublasHandle_t handle, int n, const float *alpha, float *x, int incx)
 
cublasStatus_t cublasScal (cublasHandle_t handle, int n, const int *alpha, int *x, int incx)
 
cublasStatus_t cublasAxpy (cublasHandle_t handle, int n, const double *alpha, const double *x, int incx, double *y, int incy)
 
cublasStatus_t cublasAxpy (cublasHandle_t handle, int n, const float *alpha, const float *x, int incx, float *y, int incy)
 
cublasStatus_t cublasAxpy (cublasHandle_t handle, int n, const int *alpha, const int *x, int incx, int *y, int incy)
 
cublasStatus_t cublasDot (cublasHandle_t handle, int n, const double *x, int incx, const double *y, int incy, double *result)
 
cublasStatus_t cublasDot (cublasHandle_t handle, int n, const float *x, int incx, const float *y, int incy, float *result)
 
cublasStatus_t cublasDot (cublasHandle_t handle, int n, const int *x, int incx, const int *y, int incy, int *result)
 
cublasStatus_t cublasNrm2 (cublasHandle_t handle, int n, const double *x, int incx, double *result)
 
cublasStatus_t cublasNrm2 (cublasHandle_t handle, int n, const float *x, int incx, float *result)
 
cublasStatus_t cublasNrm2 (cublasHandle_t handle, int n, const int *x, int incx, int *result)
 
std::string getCudaErrorMessage (cudaError_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
 getCudaErrorMessage generates the error message to display for a given error.
 
void cudaSafeCall (cudaError_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
 cudaSafeCall checks the return type of the CUDA expression (function call) and throws an exception if it does not equal cudaSuccess.
 
cudaError_t cudaWarnIfError (cudaError_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
 cudaWarnIfError checks the return type of the CUDA expression (function call) and issues a warning if it does not equal cudaSuccess.
 
CuSparseMatrixDescriptionPtr createMatrixDescription ()
 createMatrixDescription creates a default matrix description
 
CuSparseMatrixDescriptionPtr createLowerDiagonalDescription ()
 createLowerDiagonalDescription creates a lower diagonal matrix description
 
CuSparseMatrixDescriptionPtr createUpperDiagonalDescription ()
 createUpperDiagonalDescription creates an upper diagonal matrix description
 
std::string getCusparseErrorCodeToString (int code)
 getCusparseErrorCodeToString Converts an error code returned from a cusparse function a human readable string.
 
std::string getCusparseErrorMessage (cusparseStatus_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
 getCusparseErrorMessage generates the error message to display for a given error.
 
void cusparseSafeCall (cusparseStatus_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
 cusparseSafeCall checks the return type of the CUSPARSE expression (function call) and throws an exception if it does not equal CUSPARSE_STATUS_SUCCESS.
 
cusparseStatus_t cusparseWarnIfError (cusparseStatus_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
 cusparseWarnIfError checks the return type of the CUSPARSE expression (function call) and issues a warning if it does not equal CUSPARSE_STATUS_SUCCESS.
 
cusparseStatus_t cusparseBsrilu02_analysis (cusparseHandle_t handle, cusparseDirection_t dirA, int mb, int nnzb, const cusparseMatDescr_t descrA, double *bsrSortedVal, const int *bsrSortedRowPtr, const int *bsrSortedColInd, int blockDim, bsrilu02Info_t info, cusparseSolvePolicy_t policy, void *pBuffer)
 
cusparseStatus_t cusparseBsrsv2_analysis (cusparseHandle_t handle, cusparseDirection_t dirA, cusparseOperation_t transA, int mb, int nnzb, const cusparseMatDescr_t descrA, const double *bsrSortedValA, const int *bsrSortedRowPtrA, const int *bsrSortedColIndA, int blockDim, bsrsv2Info_t info, cusparseSolvePolicy_t policy, void *pBuffer)
 
cusparseStatus_t cusparseBsrsv2_analysis (cusparseHandle_t handle, cusparseDirection_t dirA, cusparseOperation_t transA, int mb, int nnzb, const cusparseMatDescr_t descrA, const float *bsrSortedValA, const int *bsrSortedRowPtrA, const int *bsrSortedColIndA, int blockDim, bsrsv2Info_t info, cusparseSolvePolicy_t policy, void *pBuffer)
 
cusparseStatus_t cusparseBsrilu02_analysis (cusparseHandle_t handle, cusparseDirection_t dirA, int mb, int nnzb, const cusparseMatDescr_t descrA, float *bsrSortedVal, const int *bsrSortedRowPtr, const int *bsrSortedColInd, int blockDim, bsrilu02Info_t info, cusparseSolvePolicy_t policy, void *pBuffer)
 
cusparseStatus_t cusparseBsrsv2_solve (cusparseHandle_t handle, cusparseDirection_t dirA, cusparseOperation_t transA, int mb, int nnzb, const double *alpha, const cusparseMatDescr_t descrA, const double *bsrSortedValA, const int *bsrSortedRowPtrA, const int *bsrSortedColIndA, int blockDim, bsrsv2Info_t info, const double *f, double *x, cusparseSolvePolicy_t policy, void *pBuffer)
 
cusparseStatus_t cusparseBsrsv2_solve (cusparseHandle_t handle, cusparseDirection_t dirA, cusparseOperation_t transA, int mb, int nnzb, const float *alpha, const cusparseMatDescr_t descrA, const float *bsrSortedValA, const int *bsrSortedRowPtrA, const int *bsrSortedColIndA, int blockDim, bsrsv2Info_t info, const float *f, float *x, cusparseSolvePolicy_t policy, void *pBuffer)
 
cusparseStatus_t cusparseBsrilu02_bufferSize (cusparseHandle_t handle, cusparseDirection_t dirA, int mb, int nnzb, const cusparseMatDescr_t descrA, double *bsrSortedVal, const int *bsrSortedRowPtr, const int *bsrSortedColInd, int blockDim, bsrilu02Info_t info, int *pBufferSizeInBytes)
 
cusparseStatus_t cusparseBsrilu02_bufferSize (cusparseHandle_t handle, cusparseDirection_t dirA, int mb, int nnzb, const cusparseMatDescr_t descrA, float *bsrSortedVal, const int *bsrSortedRowPtr, const int *bsrSortedColInd, int blockDim, bsrilu02Info_t info, int *pBufferSizeInBytes)
 
cusparseStatus_t cusparseBsrsv2_bufferSize (cusparseHandle_t handle, cusparseDirection_t dirA, cusparseOperation_t transA, int mb, int nnzb, const cusparseMatDescr_t descrA, double *bsrSortedValA, const int *bsrSortedRowPtrA, const int *bsrSortedColIndA, int blockDim, bsrsv2Info_t info, int *pBufferSizeInBytes)
 
cusparseStatus_t cusparseBsrsv2_bufferSize (cusparseHandle_t handle, cusparseDirection_t dirA, cusparseOperation_t transA, int mb, int nnzb, const cusparseMatDescr_t descrA, float *bsrSortedValA, const int *bsrSortedRowPtrA, const int *bsrSortedColIndA, int blockDim, bsrsv2Info_t info, int *pBufferSizeInBytes)
 
cusparseStatus_t cusparseBsrilu02 (cusparseHandle_t handle, cusparseDirection_t dirA, int mb, int nnzb, const cusparseMatDescr_t descrA, double *bsrSortedVal, const int *bsrSortedRowPtr, const int *bsrSortedColInd, int blockDim, bsrilu02Info_t info, cusparseSolvePolicy_t policy, void *pBuffer)
 
cusparseStatus_t cusparseBsrilu02 (cusparseHandle_t handle, cusparseDirection_t dirA, int mb, int nnzb, const cusparseMatDescr_t descrA, float *bsrSortedVal, const int *bsrSortedRowPtr, const int *bsrSortedColInd, int blockDim, bsrilu02Info_t info, cusparseSolvePolicy_t policy, void *pBuffer)
 
cusparseStatus_t cusparseBsrmv (cusparseHandle_t handle, cusparseDirection_t dirA, cusparseOperation_t transA, int mb, int nb, int nnzb, const double *alpha, const cusparseMatDescr_t descrA, const double *bsrSortedValA, const int *bsrSortedRowPtrA, const int *bsrSortedColIndA, int blockDim, const double *x, const double *beta, double *y)
 
cusparseStatus_t cusparseBsrmv (cusparseHandle_t handle, cusparseDirection_t dirA, cusparseOperation_t transA, int mb, int nb, int nnzb, const float *alpha, const cusparseMatDescr_t descrA, const float *bsrSortedValA, const int *bsrSortedRowPtrA, const int *bsrSortedColIndA, int blockDim, const float *x, const float *beta, float *y)
 
template<class Matrix >
const Matrix makeMatrixWithNonzeroDiagonal (const Matrix &matrix, const typename Matrix::field_type replacementValue=std::numeric_limits< typename Matrix::field_type >::epsilon())
 makeMatrixWithNonzeroDiagonal creates a new matrix with the zero diagonal elements (when viewed as a matrix of scalrars) set to replacementValue
 
template<class PreconditionerType >
constexpr bool shouldCallPreconditionerPre ()
 Tests (compile time) if the preconditioner type needs to call pre() before a call to apply()
 
template<class PreconditionerType >
constexpr bool shouldCallPreconditionerPost ()
 Tests (compile time) if the preconditioner type needs to call post() after a call to apply(...)
 
int to_int (std::size_t s)
 to_int converts a (on most relevant platforms) 64 bits unsigned size_t to a signed 32 bits signed int
 
std::size_t to_size_t (int i)
 to_size_t converts a (on most relevant platforms) a 32 bit signed int to a 64 bits unsigned int
 
template<class T >
void setVectorValue (T *deviceData, size_t numberOfElements, const T &value)
 setVectorValue sets every element of deviceData to value
 
template<class T >
void setZeroAtIndexSet (T *deviceData, size_t numberOfElements, const int *indices)
 setZeroAtIndexSet sets deviceData to zero in the indices of contained in indices
 
template<class T >
innerProductAtIndices (const T *deviceA, const T *deviceB, T *buffer, size_t numberOfElements, const int *indices)
 innerProductAtIndices computes the inner product between deviceA[indices] and deviceB[indices]
 

Variables

const constexpr auto CUSPARSE_MATRIX_ORDER = CUSPARSE_DIRECTION_ROW
 

Detailed Description

Contains wrappers to make the CuBLAS library behave as a modern C++ library with function overlading.

Provides various utilities for doing signed to unsigned conversion, unsigned to signed, 32 bits to 64 bits and 64 bits to 32 bits.

Simple utility structs to test for the existence of functions in types.

Contains wrappers to make the CuSPARSE library behave as a modern C++ library with function overlading.

In simple terms, this allows one to call say cublasScal on both double and single precisision, instead of calling cublasDscal and cublasSscal respectively.

In simple terms, this allows one to call say cusparseBsrilu02_analysis on both double and single precisision, instead of calling cusparseDbsrilu02_analysis and cusparseDbsrilu02_analysis respectively.

Note that there are alternatives to this, see for instance https://stackoverflow.com/questions/257288/templated-check-for-the-existence-of-a-class-member-function , however, this is by far the cleanest approach for where this is going to be used for now.

TODO: Use the requires-keyword once C++20 becomes availble (https://en.cppreference.com/w/cpp/language/constraints ). With C++20 this file can be removed.

The main use case within cuistl is that the cusparse library requires signed int for all its size parameters, while Dune::BlockVector (and relatives) use unsigned size_t.

Typedef Documentation

◆ CuSparseMatrixDescription

CuSparseMatrixDescription holder.

This is internal information needed for most calls to the CuSparse API.

◆ CuSparseMatrixDescriptionPtr

Pointer to CuSparseMatrixDescription holder.

This is internal information needed for most calls to the CuSparse API.

Function Documentation

◆ createLowerDiagonalDescription()

CuSparseMatrixDescriptionPtr Opm::cuistl::detail::createLowerDiagonalDescription ( )
inline

createLowerDiagonalDescription creates a lower diagonal matrix description

Returns
a lower diagonal matrix description overlapped with options from Opm::cuistl::detail::createMatrixDescription()
Note
This will assume it has a unit diagonal

◆ createMatrixDescription()

CuSparseMatrixDescriptionPtr Opm::cuistl::detail::createMatrixDescription ( )
inline

createMatrixDescription creates a default matrix description

Returns
a matrix description to a general sparse matrix with zero based indexing.

◆ createUpperDiagonalDescription()

CuSparseMatrixDescriptionPtr Opm::cuistl::detail::createUpperDiagonalDescription ( )
inline

createUpperDiagonalDescription creates an upper diagonal matrix description

Returns
an upper diagonal matrix description overlapped with options from Opm::cuistl::detail::createMatrixDescription()
Note
This will assume it has a non-unit diagonal.

◆ cublasSafeCall()

void Opm::cuistl::detail::cublasSafeCall ( cublasStatus_t  error,
const std::string_view &  expression,
const std::string_view &  filename,
const std::string_view &  functionName,
size_t  lineNumber 
)
inline

cublasSafeCall checks the return type of the CUBLAS expression (function call) and throws an exception if it does not equal CUBLAS_STATUS_SUCCESS.

Parameters
errorthe error code from cublas
expressionthe expresison (say "cublasCreate(&handle)")
filenamethe code file the error occured in (typically FILE)
functionNamename of the function the error occured in (typically func)
lineNumberthe line number the error occured in (typically LINE)

Example usage:

#include <opm/simulators/linalg/cuistl/detail/cublas_safe_call.hpp>
#include <cublas_v2.h>
void some_function() {
cublasHandle_t cublasHandle;
cudaSafeCall(cublasCreate(&cublasHandle), "cublasCreate(&cublasHandle)", __FILE__, __func__, __LINE__);
}
Definition AquiferInterface.hpp:35
void cudaSafeCall(cudaError_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
cudaSafeCall checks the return type of the CUDA expression (function call) and throws an exception if...
Definition cuda_safe_call.hpp:82
Note
It is probably easier to use the macro OPM_CUBLAS_SAFE_CALL
Todo:
Refactor to use std::source_location once we shift to C++20

◆ cublasWarnIfError()

cublasStatus_t Opm::cuistl::detail::cublasWarnIfError ( cublasStatus_t  error,
const std::string_view &  expression,
const std::string_view &  filename,
const std::string_view &  functionName,
size_t  lineNumber 
)
inline

cublasWarnIfError checks the return type of the CUBLAS expression (function call) and issues a warning if it does not equal CUBLAS_STATUS_SUCCESS.

Parameters
errorthe error code from cublas
expressionthe expresison (say "cublasCreate(&handle)")
filenamethe code file the error occured in (typically FILE)
functionNamename of the function the error occured in (typically func)
lineNumberthe line number the error occured in (typically LINE)
Returns
the error sent in (for convenience).

Example usage:

#include <opm/simulators/linalg/cuistl/detail/cublas_safe_call.hpp>
#include <cublas_v2.h>
void some_function() {
cublasHandle_t cublasHandle;
cublasWarnIfError(cublasCreate(&cublasHandle), "cublasCreate(&cublasHandle)", __FILE__, __func__, __LINE__);
}
cublasStatus_t cublasWarnIfError(cublasStatus_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
cublasWarnIfError checks the return type of the CUBLAS expression (function call) and issues a warnin...
Definition cublas_safe_call.hpp:165
Note
It is probably easier to use the macro OPM_CUBLAS_WARN_IF_ERROR
Prefer the cublasSafeCall/OPM_CUBLAS_SAFE_CALL counterpart unless you really don't want to throw an exception.
Todo:
Refactor to use std::source_location once we shift to C++20

◆ cudaSafeCall()

void Opm::cuistl::detail::cudaSafeCall ( cudaError_t  error,
const std::string_view &  expression,
const std::string_view &  filename,
const std::string_view &  functionName,
size_t  lineNumber 
)
inline

cudaSafeCall checks the return type of the CUDA expression (function call) and throws an exception if it does not equal cudaSuccess.

Example usage:

#include <opm/simulators/linalg/cuistl/detail/cuda_safe_call.hpp>
#include <cuda_runtime.h>
void some_function() {
void* somePointer;
cudaSafeCall(cudaMalloc(&somePointer, 1), "cudaMalloc(&somePointer, 1)", __FILE__, __func__, __LINE__);
}
Note
It is probably easier to use the macro OPM_CUDA_SAFE_CALL
Todo:
Refactor to use std::source_location once we shift to C++20

◆ cudaWarnIfError()

cudaError_t Opm::cuistl::detail::cudaWarnIfError ( cudaError_t  error,
const std::string_view &  expression,
const std::string_view &  filename,
const std::string_view &  functionName,
size_t  lineNumber 
)
inline

cudaWarnIfError checks the return type of the CUDA expression (function call) and issues a warning if it does not equal cudaSuccess.

Parameters
errorthe error code from cublas
expressionthe expresison (say "cudaMalloc(&pointer, 1)")
filenamethe code file the error occured in (typically FILE)
functionNamename of the function the error occured in (typically func)
lineNumberthe line number the error occured in (typically LINE)
Returns
the error sent in (for convenience).

Example usage:

#include <opm/simulators/linalg/cuistl/detail/cuda_safe_call.hpp>
#include <cuda_runtime.h>
void some_function() {
void* somePointer;
cudaWarnIfError(cudaMalloc(&somePointer, 1), "cudaMalloc(&somePointer, 1)", __FILE__, __func__, __LINE__);
}
cudaError_t cudaWarnIfError(cudaError_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
cudaWarnIfError checks the return type of the CUDA expression (function call) and issues a warning if...
Definition cuda_safe_call.hpp:123
Note
It is probably easier to use the macro OPM_CUDA_WARN_IF_ERROR
Prefer the cudaSafeCall/OPM_CUDA_SAFE_CALL counterpart unless you really don't want to throw an exception.
Todo:
Refactor to use std::source_location once we shift to C++20

◆ cusparseSafeCall()

void Opm::cuistl::detail::cusparseSafeCall ( cusparseStatus_t  error,
const std::string_view &  expression,
const std::string_view &  filename,
const std::string_view &  functionName,
size_t  lineNumber 
)
inline

cusparseSafeCall checks the return type of the CUSPARSE expression (function call) and throws an exception if it does not equal CUSPARSE_STATUS_SUCCESS.

Example usage:

#include <opm/simulators/linalg/cuistl/detail/cusparse_safe_call.hpp>
#include <cublas_v2.h>
void some_function() {
cusparseHandle_t cusparseHandle;
cusparseSafeCall(cusparseCreate(&cusparseHandle), "cusparseCreate(&cusparseHandle)", __FILE__, __func__,
}
void cusparseSafeCall(cusparseStatus_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
cusparseSafeCall checks the return type of the CUSPARSE expression (function call) and throws an exce...
Definition cusparse_safe_call.hpp:111
Note
It is probably easier to use the macro OPM_CUBLAS_SAFE_CALL
Todo:
Refactor to use std::source_location once we shift to C++20

◆ cusparseWarnIfError()

cusparseStatus_t Opm::cuistl::detail::cusparseWarnIfError ( cusparseStatus_t  error,
const std::string_view &  expression,
const std::string_view &  filename,
const std::string_view &  functionName,
size_t  lineNumber 
)
inline

cusparseWarnIfError checks the return type of the CUSPARSE expression (function call) and issues a warning if it does not equal CUSPARSE_STATUS_SUCCESS.

Parameters
errorthe error code from cublas
expressionthe expresison (say "cublasCreate(&handle)")
filenamethe code file the error occured in (typically FILE)
functionNamename of the function the error occured in (typically func)
lineNumberthe line number the error occured in (typically LINE)
Returns
the error sent in (for convenience).

Example usage:

#include <opm/simulators/linalg/cuistl/detail/cusparse_safe_call.hpp>
#include <cublas_v2.h>
void some_function() {
cusparseHandle_t cusparseHandle;
cusparseWarnIfError(cusparseCreate(&cusparseHandle), "cusparseCreate(&cusparseHandle)", __FILE__, __func__,
}
cusparseStatus_t cusparseWarnIfError(cusparseStatus_t error, const std::string_view &expression, const std::string_view &filename, const std::string_view &functionName, size_t lineNumber)
cusparseWarnIfError checks the return type of the CUSPARSE expression (function call) and issues a wa...
Definition cusparse_safe_call.hpp:152
Note
It is probably easier to use the macro OPM_CUSPARSE_WARN_IF_ERROR
Prefer the cusparseSafeCall/OPM_CUSPARSE_SAFE_CALL counterpart unless you really don't want to throw an exception.
Todo:
Refactor to use std::source_location once we shift to C++20

◆ getCublasErrorMessage()

std::string Opm::cuistl::detail::getCublasErrorMessage ( cublasStatus_t  error,
const std::string_view &  expression,
const std::string_view &  filename,
const std::string_view &  functionName,
size_t  lineNumber 
)
inline

getCublasErrorMessage generates the error message to display for a given error.

Parameters
errorthe error code from cublas
expressionthe expresison (say "cublasCreate(&handle)")
filenamethe code file the error occured in (typically FILE)
functionNamename of the function the error occured in (typically func)
lineNumberthe line number the error occured in (typically LINE)
Todo:
Refactor to use std::source_location once we shift to C++20
Returns
An error message to be displayed.
Note
This function is mostly for internal use.

◆ getCudaErrorMessage()

std::string Opm::cuistl::detail::getCudaErrorMessage ( cudaError_t  error,
const std::string_view &  expression,
const std::string_view &  filename,
const std::string_view &  functionName,
size_t  lineNumber 
)
inline

getCudaErrorMessage generates the error message to display for a given error.

Parameters
errorthe error code from cublas
expressionthe expresison (say "cudaMalloc(&pointer, 1)")
filenamethe code file the error occured in (typically FILE)
functionNamename of the function the error occured in (typically func)
lineNumberthe line number the error occured in (typically LINE)
Todo:
Refactor to use std::source_location once we shift to C++20
Returns
An error message to be displayed.
Note
This function is mostly for internal use.

◆ getCusparseErrorCodeToString()

std::string Opm::cuistl::detail::getCusparseErrorCodeToString ( int  code)
inline

getCusparseErrorCodeToString Converts an error code returned from a cusparse function a human readable string.

Parameters
codean error code from a cusparse routine
Returns
a human readable string.

◆ getCusparseErrorMessage()

std::string Opm::cuistl::detail::getCusparseErrorMessage ( cusparseStatus_t  error,
const std::string_view &  expression,
const std::string_view &  filename,
const std::string_view &  functionName,
size_t  lineNumber 
)
inline

getCusparseErrorMessage generates the error message to display for a given error.

Parameters
errorthe error code from cublas
expressionthe expresison (say "cusparseCreate(&handle)")
filenamethe code file the error occured in (typically FILE)
functionNamename of the function the error occured in (typically func)
lineNumberthe line number the error occured in (typically LINE)
Todo:
Refactor to use std::source_location once we shift to C++20
Returns
An error message to be displayed.
Note
This function is mostly for internal use.

◆ innerProductAtIndices()

template<class T >
T Opm::cuistl::detail::innerProductAtIndices ( const T *  deviceA,
const T *  deviceB,
T *  buffer,
size_t  numberOfElements,
const int indices 
)

innerProductAtIndices computes the inner product between deviceA[indices] and deviceB[indices]

Parameters
deviceAdata A (device memory)
deviceBdata B (device memory)
buffera buffer with number of elements equal to numberOfElements (device memory)
numberOfElementsnumber of indices
indicesthe indices to compute the inner product over (device memory)
Returns
the result of the inner product
Note
This is equivalent to projecting the vectors to the indices contained in indices, then doing the inner product of those projected vectors.

◆ makeMatrixWithNonzeroDiagonal()

template<class Matrix >
const Matrix Opm::cuistl::detail::makeMatrixWithNonzeroDiagonal ( const Matrix &  matrix,
const typename Matrix::field_type  replacementValue = std::numeric_limits<typename Matrix::field_type>::epsilon() 
)

makeMatrixWithNonzeroDiagonal creates a new matrix with the zero diagonal elements (when viewed as a matrix of scalrars) set to replacementValue

Parameters
matrixthe matrix to replace
replacementValuethe value to set in the diagonal elements that are zero
Returns
a new matrix with non non-zero diagonal elements.
Note
This modification is needed for the CuSparse implementation of ILU0. While the the algorithm operates on block matrices, it still requires that the scalar matrix has no zero diagonal elements.

◆ setVectorValue()

template<class T >
void Opm::cuistl::detail::setVectorValue ( T *  deviceData,
size_t  numberOfElements,
const T &  value 
)

setVectorValue sets every element of deviceData to value

Parameters
deviceDatapointer to GPU memory
numberOfElementsnumber of elements to set to value
valuethe value to use

◆ setZeroAtIndexSet()

template<class T >
void Opm::cuistl::detail::setZeroAtIndexSet ( T *  deviceData,
size_t  numberOfElements,
const int indices 
)

setZeroAtIndexSet sets deviceData to zero in the indices of contained in indices

Parameters
deviceDatathe data to operate on (device memory)
numberOfElementsnumber of indices
indicesthe indices to use (device memory)

◆ shouldCallPreconditionerPost()

template<class PreconditionerType >
constexpr bool Opm::cuistl::detail::shouldCallPreconditionerPost ( )
constexpr

Tests (compile time) if the preconditioner type needs to call post() after a call to apply(...)

Note
This is mostly used to avoid unneeded copying back and front to the GPU, as well as avoiding communication.

◆ shouldCallPreconditionerPre()

template<class PreconditionerType >
constexpr bool Opm::cuistl::detail::shouldCallPreconditionerPre ( )
constexpr

Tests (compile time) if the preconditioner type needs to call pre() before a call to apply()

Note
This is mostly used to avoid unneeded copying back and front to the GPU, as well as avoiding communication.

◆ to_int()

int Opm::cuistl::detail::to_int ( std::size_t  s)
inline

to_int converts a (on most relevant platforms) 64 bits unsigned size_t to a signed 32 bits signed int

Parameters
sthe unsigned integer
Exceptions
std::invalid_argumentexception if s is out of range for an int
Returns
converted s to int if s is within the range of int
Todo:
This can be done for more generic types, but then it is probably wise to wait for C++20's cmp-functions

◆ to_size_t()

std::size_t Opm::cuistl::detail::to_size_t ( int  i)
inline

to_size_t converts a (on most relevant platforms) a 32 bit signed int to a 64 bits unsigned int

Parameters
ithe signed integer
Returns
converted i to size_t if it is a non-negative integer.
Exceptions
std::invalid_argumentif i is negative.
Todo:
This can be done for more generic types, but then it is probably wise to wait for C++20's cmp-functions