34 cusolverStatus_t status = CUSOLVER_STATUS_SUCCESS;
35 cudaError_t error = cudaSuccess;
36 if ((status = cusolverDnCreate(&
mCusolverHandle)) != CUSOLVER_STATUS_SUCCESS)
37 std::cerr <<
"cusolverDnCreate() failed (initializing cusolver-library)"
39 if ((error = cudaStreamCreateWithFlags(&
mStream, cudaStreamNonBlocking)) !=
41 std::cerr << cudaGetErrorString(error) << std::endl;
43 CUSOLVER_STATUS_SUCCESS)
44 std::cerr <<
"cusolverDnSetStream() failed" << std::endl;
63 int workSpaceSize = 0;
64 cusolverStatus_t status = CUSOLVER_STATUS_SUCCESS;
65 if ((status = cusolverDnDgetrf_bufferSize(
68 CUSOLVER_STATUS_SUCCESS)
69 std::cerr <<
"cusolverDnDgetrf_bufferSize() failed (calculating required "
70 "space for LU-factorization)"
76 auto *
data = systemMatrix.data();
80 cudaMemcpyHostToDevice))
85 cusolverStatus_t status = CUSOLVER_STATUS_SUCCESS;
96 if (status != CUSOLVER_STATUS_SUCCESS) {
97 std::cerr <<
"cusolverDnDgetrf() failed (calculating LU-factorization)"
101 cudaMemcpyDeviceToHost))
103 std::cerr << -info <<
"-th parameter is wrong" << std::endl;
109 std::vector<std::pair<UInt, UInt>> &listVariableSystemMatrixEntries) {
145 std::vector<std::pair<UInt, UInt>> &listVariableSystemMatrixEntries) {
155 Matrix leftSideVector = mRightHandSideVector;
159 cudaMemcpyHostToDevice))
161 cusolverStatus_t status = cusolverDnDgetrs(
168 if (status != CUSOLVER_STATUS_SUCCESS)
169 std::cerr <<
"cusolverDnDgetrs() failed (Solving A*x = b)" << std::endl;
172 cudaMemcpyDeviceToHost))
174 std::cerr << -info <<
"-th parameter is wrong" << std::endl;
179 cudaMemcpyDeviceToHost))
182 return leftSideVector;
#define CUDA_ERROR_HANDLER(func)
struct DPsim::GpuDenseAdapter::GpuData mDeviceCopy
GpuDenseAdapter()
Constructor.
cusolverDnHandle_t mCusolverHandle
Solver-Handle.
virtual Matrix solve(Matrix &rightSideVector) override
solution function for a right hand side
cudaStream_t mStream
Stream.
virtual void factorize(SparseMatrix &systemMatrix) override
factorization function with partial pivoting
void allocateDeviceMemory()
void copySystemMatrixToDevice(Matrix systemMatrix)
virtual ~GpuDenseAdapter()
Destructor.
virtual void partialRefactorize(SparseMatrix &systemMatrix, std::vector< std::pair< UInt, UInt > > &listVariableSystemMatrixEntries) override
partial refactorization withouth partial pivoting
virtual void preprocessing(SparseMatrix &systemMatrix, std::vector< std::pair< UInt, UInt > > &listVariableSystemMatrixEntries) override
preprocessing function pre-ordering and scaling the matrix
virtual void refactorize(SparseMatrix &systemMatrix) override
refactorization without partial pivoting
struct dps_magma_data data
CPS::SparseMatrixRow SparseMatrix