From ee66db5efde31451f7673bf05bbb40fe482c9055 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Tue, 21 May 2024 11:25:38 +0200 Subject: [PATCH] Refactor interface to cusparse in preparation for CSR Adaptive --- cuda/ccusparse.c | 59 +-------------------------- cuda/ccusparse.h | 100 ++++++++++++++++++++++++++++++++++++++++++++++ cuda/dcusparse.c | 59 +-------------------------- cuda/dcusparse.h | 101 ++++++++++++++++++++++++++++++++++++++++++++++ cuda/scusparse.c | 58 +-------------------------- cuda/scusparse.h | 102 +++++++++++++++++++++++++++++++++++++++++++++++ cuda/zcusparse.c | 59 +-------------------------- cuda/zcusparse.h | 101 ++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 408 insertions(+), 231 deletions(-) create mode 100644 cuda/ccusparse.h create mode 100644 cuda/dcusparse.h create mode 100644 cuda/scusparse.h create mode 100644 cuda/zcusparse.h diff --git a/cuda/ccusparse.c b/cuda/ccusparse.c index bab6ede0..3a6556ce 100644 --- a/cuda/ccusparse.c +++ b/cuda/ccusparse.c @@ -38,62 +38,5 @@ #include "cintrf.h" #include "fcusparse.h" - -/* Double precision real */ -#define TYPE float complex -#define CUSPARSE_BASE_TYPE CUDA_C_32F -#define T_CSRGDeviceMat c_CSRGDeviceMat -#define T_Cmat c_Cmat -#define T_spmvCSRGDevice c_spmvCSRGDevice -#define T_spsvCSRGDevice c_spsvCSRGDevice -#define T_CSRGDeviceAlloc c_CSRGDeviceAlloc -#define T_CSRGDeviceFree c_CSRGDeviceFree -#define T_CSRGHost2Device c_CSRGHost2Device -#define T_CSRGDevice2Host c_CSRGDevice2Host -#define T_CSRGDeviceSetMatFillMode c_CSRGDeviceSetMatFillMode -#define T_CSRGDeviceSetMatDiagType c_CSRGDeviceSetMatDiagType -#define T_CSRGDeviceGetParms c_CSRGDeviceGetParms - -#if CUDA_SHORT_VERSION <= 10 -#define T_CSRGDeviceSetMatType c_CSRGDeviceSetMatType -#define T_CSRGDeviceSetMatIndexBase c_CSRGDeviceSetMatIndexBase -#define T_CSRGDeviceCsrsmAnalysis c_CSRGDeviceCsrsmAnalysis -#define cusparseTcsrmv cusparseCcsrmv -#define cusparseTcsrsv_solve cusparseCcsrsv_solve -#define cusparseTcsrsv_analysis cusparseCcsrsv_analysis -#define T_HYBGDeviceMat c_HYBGDeviceMat -#define T_Hmat c_Hmat -#define T_HYBGDeviceFree c_HYBGDeviceFree -#define T_spmvHYBGDevice c_spmvHYBGDevice -#define T_HYBGDeviceAlloc c_HYBGDeviceAlloc -#define T_HYBGDeviceSetMatDiagType c_HYBGDeviceSetMatDiagType -#define T_HYBGDeviceSetMatIndexBase c_HYBGDeviceSetMatIndexBase -#define T_HYBGDeviceSetMatType c_HYBGDeviceSetMatType -#define T_HYBGDeviceSetMatFillMode c_HYBGDeviceSetMatFillMode -#define T_HYBGDeviceHybsmAnalysis c_HYBGDeviceHybsmAnalysis -#define T_spsvHYBGDevice c_spsvHYBGDevice -#define T_HYBGHost2Device c_HYBGHost2Device -#define cusparseThybmv cusparseChybmv -#define cusparseThybsv_solve cusparseChybsv_solve -#define cusparseThybsv_analysis cusparseChybsv_analysis -#define cusparseTcsr2hyb cusparseCcsr2hyb - -#elif CUDA_VERSION < 11030 - -#define T_CSRGDeviceSetMatType c_CSRGDeviceSetMatType -#define T_CSRGDeviceSetMatIndexBase c_CSRGDeviceSetMatIndexBase -#define T_CSRGDeviceCsrsv2Analysis c_CSRGDeviceCsrsv2Analysis -#define cusparseTcsrsv2_bufferSize cusparseCcsrsv2_bufferSize -#define cusparseTcsrsv2_analysis cusparseCcsrsv2_analysis -#define cusparseTcsrsv2_solve cusparseCcsrsv2_solve -#else - -#define T_CSRGIsNullSvBuffer c_CSRGIsNullSvBuffer -#define T_CSRGIsNullSvDescr c_CSRGIsNullSvDescr -#define T_CSRGIsNullMvDescr c_CSRGIsNullMvDescr -#define T_CSRGCreateSpMVDescr c_CSRGCreateSpMVDescr - -#endif - +#include "ccusparse.h" #include "fcusparse_fct.h" - diff --git a/cuda/ccusparse.h b/cuda/ccusparse.h new file mode 100644 index 00000000..f101c73d --- /dev/null +++ b/cuda/ccusparse.h @@ -0,0 +1,100 @@ + /* Parallel Sparse BLAS GPU plugin */ + /* (C) Copyright 2013 */ + + /* Salvatore Filippone */ + /* Alessandro Fanfarillo */ + + /* Redistribution and use in source and binary forms, with or without */ + /* modification, are permitted provided that the following conditions */ + /* are met: */ + /* 1. Redistributions of source code must retain the above copyright */ + /* notice, this list of conditions and the following disclaimer. */ + /* 2. Redistributions in binary form must reproduce the above copyright */ + /* notice, this list of conditions, and the following disclaimer in the */ + /* documentation and/or other materials provided with the distribution. */ + /* 3. The name of the PSBLAS group or the names of its contributors may */ + /* not be used to endorse or promote products derived from this */ + /* software without specific written permission. */ + + /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ + /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ + /* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ + /* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS */ + /* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR */ + /* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF */ + /* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS */ + /* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ + /* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) */ + /* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ + /* POSSIBILITY OF SUCH DAMAGE. */ + +#ifndef CCUSPARSE_ +#define CCUSPARSE_ + + +#include +#include + +#include +#include +#include "cintrf.h" +#include "fcusparse.h" + + +/* Double precision real */ +#define TYPE float complex +#define CUSPARSE_BASE_TYPE CUDA_C_32F +#define T_CSRGDeviceMat c_CSRGDeviceMat +#define T_Cmat c_Cmat +#define T_spmvCSRGDevice c_spmvCSRGDevice +#define T_spsvCSRGDevice c_spsvCSRGDevice +#define T_CSRGDeviceAlloc c_CSRGDeviceAlloc +#define T_CSRGDeviceFree c_CSRGDeviceFree +#define T_CSRGHost2Device c_CSRGHost2Device +#define T_CSRGDevice2Host c_CSRGDevice2Host +#define T_CSRGDeviceSetMatFillMode c_CSRGDeviceSetMatFillMode +#define T_CSRGDeviceSetMatDiagType c_CSRGDeviceSetMatDiagType +#define T_CSRGDeviceGetParms c_CSRGDeviceGetParms + +#if CUDA_SHORT_VERSION <= 10 +#define T_CSRGDeviceSetMatType c_CSRGDeviceSetMatType +#define T_CSRGDeviceSetMatIndexBase c_CSRGDeviceSetMatIndexBase +#define T_CSRGDeviceCsrsmAnalysis c_CSRGDeviceCsrsmAnalysis +#define cusparseTcsrmv cusparseCcsrmv +#define cusparseTcsrsv_solve cusparseCcsrsv_solve +#define cusparseTcsrsv_analysis cusparseCcsrsv_analysis +#define T_HYBGDeviceMat c_HYBGDeviceMat +#define T_Hmat c_Hmat +#define T_HYBGDeviceFree c_HYBGDeviceFree +#define T_spmvHYBGDevice c_spmvHYBGDevice +#define T_HYBGDeviceAlloc c_HYBGDeviceAlloc +#define T_HYBGDeviceSetMatDiagType c_HYBGDeviceSetMatDiagType +#define T_HYBGDeviceSetMatIndexBase c_HYBGDeviceSetMatIndexBase +#define T_HYBGDeviceSetMatType c_HYBGDeviceSetMatType +#define T_HYBGDeviceSetMatFillMode c_HYBGDeviceSetMatFillMode +#define T_HYBGDeviceHybsmAnalysis c_HYBGDeviceHybsmAnalysis +#define T_spsvHYBGDevice c_spsvHYBGDevice +#define T_HYBGHost2Device c_HYBGHost2Device +#define cusparseThybmv cusparseChybmv +#define cusparseThybsv_solve cusparseChybsv_solve +#define cusparseThybsv_analysis cusparseChybsv_analysis +#define cusparseTcsr2hyb cusparseCcsr2hyb + +#elif CUDA_VERSION < 11030 + +#define T_CSRGDeviceSetMatType c_CSRGDeviceSetMatType +#define T_CSRGDeviceSetMatIndexBase c_CSRGDeviceSetMatIndexBase +#define T_CSRGDeviceCsrsv2Analysis c_CSRGDeviceCsrsv2Analysis +#define cusparseTcsrsv2_bufferSize cusparseCcsrsv2_bufferSize +#define cusparseTcsrsv2_analysis cusparseCcsrsv2_analysis +#define cusparseTcsrsv2_solve cusparseCcsrsv2_solve +#else + +#define T_CSRGIsNullSvBuffer c_CSRGIsNullSvBuffer +#define T_CSRGIsNullSvDescr c_CSRGIsNullSvDescr +#define T_CSRGIsNullMvDescr c_CSRGIsNullMvDescr +#define T_CSRGCreateSpMVDescr c_CSRGCreateSpMVDescr + +#endif + +#endif diff --git a/cuda/dcusparse.c b/cuda/dcusparse.c index 657ca5be..6bb726c9 100644 --- a/cuda/dcusparse.c +++ b/cuda/dcusparse.c @@ -38,62 +38,5 @@ #include "cintrf.h" #include "fcusparse.h" - -/* Double precision real */ -#define TYPE double -#define CUSPARSE_BASE_TYPE CUDA_R_64F -#define T_CSRGDeviceMat d_CSRGDeviceMat -#define T_Cmat d_Cmat -#define T_spmvCSRGDevice d_spmvCSRGDevice -#define T_spsvCSRGDevice d_spsvCSRGDevice -#define T_CSRGDeviceAlloc d_CSRGDeviceAlloc -#define T_CSRGDeviceFree d_CSRGDeviceFree -#define T_CSRGHost2Device d_CSRGHost2Device -#define T_CSRGDevice2Host d_CSRGDevice2Host -#define T_CSRGDeviceSetMatFillMode d_CSRGDeviceSetMatFillMode -#define T_CSRGDeviceSetMatDiagType d_CSRGDeviceSetMatDiagType -#define T_CSRGDeviceGetParms d_CSRGDeviceGetParms - -#if CUDA_SHORT_VERSION <= 10 -#define T_CSRGDeviceSetMatType d_CSRGDeviceSetMatType -#define T_CSRGDeviceSetMatIndexBase d_CSRGDeviceSetMatIndexBase -#define T_CSRGDeviceCsrsmAnalysis d_CSRGDeviceCsrsmAnalysis -#define cusparseTcsrmv cusparseDcsrmv -#define cusparseTcsrsv_solve cusparseDcsrsv_solve -#define cusparseTcsrsv_analysis cusparseDcsrsv_analysis -#define T_HYBGDeviceMat d_HYBGDeviceMat -#define T_Hmat d_Hmat -#define T_HYBGDeviceFree d_HYBGDeviceFree -#define T_spmvHYBGDevice d_spmvHYBGDevice -#define T_HYBGDeviceAlloc d_HYBGDeviceAlloc -#define T_HYBGDeviceSetMatDiagType d_HYBGDeviceSetMatDiagType -#define T_HYBGDeviceSetMatIndexBase d_HYBGDeviceSetMatIndexBase -#define T_HYBGDeviceSetMatType d_HYBGDeviceSetMatType -#define T_HYBGDeviceSetMatFillMode d_HYBGDeviceSetMatFillMode -#define T_HYBGDeviceHybsmAnalysis d_HYBGDeviceHybsmAnalysis -#define T_spsvHYBGDevice d_spsvHYBGDevice -#define T_HYBGHost2Device d_HYBGHost2Device -#define cusparseThybmv cusparseDhybmv -#define cusparseThybsv_solve cusparseDhybsv_solve -#define cusparseThybsv_analysis cusparseDhybsv_analysis -#define cusparseTcsr2hyb cusparseDcsr2hyb - -#elif CUDA_VERSION < 11030 - -#define T_CSRGDeviceSetMatType d_CSRGDeviceSetMatType -#define T_CSRGDeviceSetMatIndexBase d_CSRGDeviceSetMatIndexBase -#define T_CSRGDeviceCsrsv2Analysis d_CSRGDeviceCsrsv2Analysis -#define cusparseTcsrsv2_bufferSize cusparseDcsrsv2_bufferSize -#define cusparseTcsrsv2_analysis cusparseDcsrsv2_analysis -#define cusparseTcsrsv2_solve cusparseDcsrsv2_solve -#else - -#define T_CSRGIsNullSvBuffer d_CSRGIsNullSvBuffer -#define T_CSRGIsNullSvDescr d_CSRGIsNullSvDescr -#define T_CSRGIsNullMvDescr d_CSRGIsNullMvDescr -#define T_CSRGCreateSpMVDescr d_CSRGCreateSpMVDescr - -#endif - +#include "dcusparse.h" #include "fcusparse_fct.h" - diff --git a/cuda/dcusparse.h b/cuda/dcusparse.h new file mode 100644 index 00000000..d7875650 --- /dev/null +++ b/cuda/dcusparse.h @@ -0,0 +1,101 @@ + /* Parallel Sparse BLAS GPU plugin */ + /* (C) Copyright 2013 */ + + /* Salvatore Filippone */ + /* Alessandro Fanfarillo */ + + /* Redistribution and use in source and binary forms, with or without */ + /* modification, are permitted provided that the following conditions */ + /* are met: */ + /* 1. Redistributions of source code must retain the above copyright */ + /* notice, this list of conditions and the following disclaimer. */ + /* 2. Redistributions in binary form must reproduce the above copyright */ + /* notice, this list of conditions, and the following disclaimer in the */ + /* documentation and/or other materials provided with the distribution. */ + /* 3. The name of the PSBLAS group or the names of its contributors may */ + /* not be used to endorse or promote products derived from this */ + /* software without specific written permission. */ + + /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ + /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ + /* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ + /* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS */ + /* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR */ + /* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF */ + /* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS */ + /* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ + /* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) */ + /* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ + /* POSSIBILITY OF SUCH DAMAGE. */ + +#ifndef DCUSPARSE_ +#define DCUSPARSE_ + + +#include +#include + +#include +#include +#include "cintrf.h" +#include "fcusparse.h" + + +/* Double precision real */ +#define TYPE double +#define CUSPARSE_BASE_TYPE CUDA_R_64F +#define T_CSRGDeviceMat d_CSRGDeviceMat +#define T_Cmat d_Cmat +#define T_spmvCSRGDevice d_spmvCSRGDevice +#define T_spsvCSRGDevice d_spsvCSRGDevice +#define T_CSRGDeviceAlloc d_CSRGDeviceAlloc +#define T_CSRGDeviceFree d_CSRGDeviceFree +#define T_CSRGHost2Device d_CSRGHost2Device +#define T_CSRGDevice2Host d_CSRGDevice2Host +#define T_CSRGDeviceSetMatFillMode d_CSRGDeviceSetMatFillMode +#define T_CSRGDeviceSetMatDiagType d_CSRGDeviceSetMatDiagType +#define T_CSRGDeviceGetParms d_CSRGDeviceGetParms + +#if CUDA_SHORT_VERSION <= 10 +#define T_CSRGDeviceSetMatType d_CSRGDeviceSetMatType +#define T_CSRGDeviceSetMatIndexBase d_CSRGDeviceSetMatIndexBase +#define T_CSRGDeviceCsrsmAnalysis d_CSRGDeviceCsrsmAnalysis +#define cusparseTcsrmv cusparseDcsrmv +#define cusparseTcsrsv_solve cusparseDcsrsv_solve +#define cusparseTcsrsv_analysis cusparseDcsrsv_analysis +#define T_HYBGDeviceMat d_HYBGDeviceMat +#define T_Hmat d_Hmat +#define T_HYBGDeviceFree d_HYBGDeviceFree +#define T_spmvHYBGDevice d_spmvHYBGDevice +#define T_HYBGDeviceAlloc d_HYBGDeviceAlloc +#define T_HYBGDeviceSetMatDiagType d_HYBGDeviceSetMatDiagType +#define T_HYBGDeviceSetMatIndexBase d_HYBGDeviceSetMatIndexBase +#define T_HYBGDeviceSetMatType d_HYBGDeviceSetMatType +#define T_HYBGDeviceSetMatFillMode d_HYBGDeviceSetMatFillMode +#define T_HYBGDeviceHybsmAnalysis d_HYBGDeviceHybsmAnalysis +#define T_spsvHYBGDevice d_spsvHYBGDevice +#define T_HYBGHost2Device d_HYBGHost2Device +#define cusparseThybmv cusparseDhybmv +#define cusparseThybsv_solve cusparseDhybsv_solve +#define cusparseThybsv_analysis cusparseDhybsv_analysis +#define cusparseTcsr2hyb cusparseDcsr2hyb + +#elif CUDA_VERSION < 11030 + +#define T_CSRGDeviceSetMatType d_CSRGDeviceSetMatType +#define T_CSRGDeviceSetMatIndexBase d_CSRGDeviceSetMatIndexBase +#define T_CSRGDeviceCsrsv2Analysis d_CSRGDeviceCsrsv2Analysis +#define cusparseTcsrsv2_bufferSize cusparseDcsrsv2_bufferSize +#define cusparseTcsrsv2_analysis cusparseDcsrsv2_analysis +#define cusparseTcsrsv2_solve cusparseDcsrsv2_solve +#else + +#define T_CSRGIsNullSvBuffer d_CSRGIsNullSvBuffer +#define T_CSRGIsNullSvDescr d_CSRGIsNullSvDescr +#define T_CSRGIsNullMvDescr d_CSRGIsNullMvDescr +#define T_CSRGCreateSpMVDescr d_CSRGCreateSpMVDescr + +#endif + +#endif + diff --git a/cuda/scusparse.c b/cuda/scusparse.c index d4db9b7c..f54a35fd 100644 --- a/cuda/scusparse.c +++ b/cuda/scusparse.c @@ -38,62 +38,6 @@ #include "cintrf.h" #include "fcusparse.h" - -/* Double precision real */ -#define TYPE float -#define CUSPARSE_BASE_TYPE CUDA_R_32F -#define T_CSRGDeviceMat s_CSRGDeviceMat -#define T_Cmat s_Cmat -#define T_spmvCSRGDevice s_spmvCSRGDevice -#define T_spsvCSRGDevice s_spsvCSRGDevice -#define T_CSRGDeviceAlloc s_CSRGDeviceAlloc -#define T_CSRGDeviceFree s_CSRGDeviceFree -#define T_CSRGHost2Device s_CSRGHost2Device -#define T_CSRGDevice2Host s_CSRGDevice2Host -#define T_CSRGDeviceSetMatFillMode s_CSRGDeviceSetMatFillMode -#define T_CSRGDeviceSetMatDiagType s_CSRGDeviceSetMatDiagType -#define T_CSRGDeviceGetParms s_CSRGDeviceGetParms - -#if CUDA_SHORT_VERSION <= 10 -#define T_CSRGDeviceSetMatType s_CSRGDeviceSetMatType -#define T_CSRGDeviceSetMatIndexBase s_CSRGDeviceSetMatIndexBase -#define T_CSRGDeviceCsrsmAnalysis s_CSRGDeviceCsrsmAnalysis -#define cusparseTcsrmv cusparseScsrmv -#define cusparseTcsrsv_solve cusparseScsrsv_solve -#define cusparseTcsrsv_analysis cusparseScsrsv_analysis -#define T_HYBGDeviceMat s_HYBGDeviceMat -#define T_Hmat s_Hmat -#define T_HYBGDeviceFree s_HYBGDeviceFree -#define T_spmvHYBGDevice s_spmvHYBGDevice -#define T_HYBGDeviceAlloc s_HYBGDeviceAlloc -#define T_HYBGDeviceSetMatDiagType s_HYBGDeviceSetMatDiagType -#define T_HYBGDeviceSetMatIndexBase s_HYBGDeviceSetMatIndexBase -#define T_HYBGDeviceSetMatType s_HYBGDeviceSetMatType -#define T_HYBGDeviceSetMatFillMode s_HYBGDeviceSetMatFillMode -#define T_HYBGDeviceHybsmAnalysis s_HYBGDeviceHybsmAnalysis -#define T_spsvHYBGDevice s_spsvHYBGDevice -#define T_HYBGHost2Device s_HYBGHost2Device -#define cusparseThybmv cusparseShybmv -#define cusparseThybsv_solve cusparseShybsv_solve -#define cusparseThybsv_analysis cusparseShybsv_analysis -#define cusparseTcsr2hyb cusparseScsr2hyb - -#elif CUDA_VERSION < 11030 - -#define T_CSRGDeviceSetMatType s_CSRGDeviceSetMatType -#define T_CSRGDeviceSetMatIndexBase s_CSRGDeviceSetMatIndexBase -#define T_CSRGDeviceCsrsv2Analysis s_CSRGDeviceCsrsv2Analysis -#define cusparseTcsrsv2_bufferSize cusparseScsrsv2_bufferSize -#define cusparseTcsrsv2_analysis cusparseScsrsv2_analysis -#define cusparseTcsrsv2_solve cusparseScsrsv2_solve -#else - -#define T_CSRGIsNullSvBuffer s_CSRGIsNullSvBuffer -#define T_CSRGIsNullSvDescr s_CSRGIsNullSvDescr -#define T_CSRGIsNullMvDescr s_CSRGIsNullMvDescr -#define T_CSRGCreateSpMVDescr s_CSRGCreateSpMVDescr - -#endif - +#include "scusparse.h" #include "fcusparse_fct.h" diff --git a/cuda/scusparse.h b/cuda/scusparse.h new file mode 100644 index 00000000..724bdc2a --- /dev/null +++ b/cuda/scusparse.h @@ -0,0 +1,102 @@ + /* Parallel Sparse BLAS GPU plugin */ + /* (C) Copyright 2013 */ + + /* Salvatore Filippone */ + /* Alessandro Fanfarillo */ + + /* Redistribution and use in source and binary forms, with or without */ + /* modification, are permitted provided that the following conditions */ + /* are met: */ + /* 1. Redistributions of source code must retain the above copyright */ + /* notice, this list of conditions and the following disclaimer. */ + /* 2. Redistributions in binary form must reproduce the above copyright */ + /* notice, this list of conditions, and the following disclaimer in the */ + /* documentation and/or other materials provided with the distribution. */ + /* 3. The name of the PSBLAS group or the names of its contributors may */ + /* not be used to endorse or promote products derived from this */ + /* software without specific written permission. */ + + /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ + /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ + /* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ + /* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS */ + /* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR */ + /* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF */ + /* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS */ + /* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ + /* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) */ + /* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ + /* POSSIBILITY OF SUCH DAMAGE. */ + +#ifndef SCUSPARSE_ +#define SCUSPARSE_ + + + +#include +#include + +#include +#include +#include "cintrf.h" +#include "fcusparse.h" + + +/* Double precision real */ +#define TYPE float +#define CUSPARSE_BASE_TYPE CUDA_R_32F +#define T_CSRGDeviceMat s_CSRGDeviceMat +#define T_Cmat s_Cmat +#define T_spmvCSRGDevice s_spmvCSRGDevice +#define T_spsvCSRGDevice s_spsvCSRGDevice +#define T_CSRGDeviceAlloc s_CSRGDeviceAlloc +#define T_CSRGDeviceFree s_CSRGDeviceFree +#define T_CSRGHost2Device s_CSRGHost2Device +#define T_CSRGDevice2Host s_CSRGDevice2Host +#define T_CSRGDeviceSetMatFillMode s_CSRGDeviceSetMatFillMode +#define T_CSRGDeviceSetMatDiagType s_CSRGDeviceSetMatDiagType +#define T_CSRGDeviceGetParms s_CSRGDeviceGetParms + +#if CUDA_SHORT_VERSION <= 10 +#define T_CSRGDeviceSetMatType s_CSRGDeviceSetMatType +#define T_CSRGDeviceSetMatIndexBase s_CSRGDeviceSetMatIndexBase +#define T_CSRGDeviceCsrsmAnalysis s_CSRGDeviceCsrsmAnalysis +#define cusparseTcsrmv cusparseScsrmv +#define cusparseTcsrsv_solve cusparseScsrsv_solve +#define cusparseTcsrsv_analysis cusparseScsrsv_analysis +#define T_HYBGDeviceMat s_HYBGDeviceMat +#define T_Hmat s_Hmat +#define T_HYBGDeviceFree s_HYBGDeviceFree +#define T_spmvHYBGDevice s_spmvHYBGDevice +#define T_HYBGDeviceAlloc s_HYBGDeviceAlloc +#define T_HYBGDeviceSetMatDiagType s_HYBGDeviceSetMatDiagType +#define T_HYBGDeviceSetMatIndexBase s_HYBGDeviceSetMatIndexBase +#define T_HYBGDeviceSetMatType s_HYBGDeviceSetMatType +#define T_HYBGDeviceSetMatFillMode s_HYBGDeviceSetMatFillMode +#define T_HYBGDeviceHybsmAnalysis s_HYBGDeviceHybsmAnalysis +#define T_spsvHYBGDevice s_spsvHYBGDevice +#define T_HYBGHost2Device s_HYBGHost2Device +#define cusparseThybmv cusparseShybmv +#define cusparseThybsv_solve cusparseShybsv_solve +#define cusparseThybsv_analysis cusparseShybsv_analysis +#define cusparseTcsr2hyb cusparseScsr2hyb + +#elif CUDA_VERSION < 11030 + +#define T_CSRGDeviceSetMatType s_CSRGDeviceSetMatType +#define T_CSRGDeviceSetMatIndexBase s_CSRGDeviceSetMatIndexBase +#define T_CSRGDeviceCsrsv2Analysis s_CSRGDeviceCsrsv2Analysis +#define cusparseTcsrsv2_bufferSize cusparseScsrsv2_bufferSize +#define cusparseTcsrsv2_analysis cusparseScsrsv2_analysis +#define cusparseTcsrsv2_solve cusparseScsrsv2_solve +#else + +#define T_CSRGIsNullSvBuffer s_CSRGIsNullSvBuffer +#define T_CSRGIsNullSvDescr s_CSRGIsNullSvDescr +#define T_CSRGIsNullMvDescr s_CSRGIsNullMvDescr +#define T_CSRGCreateSpMVDescr s_CSRGCreateSpMVDescr + +#endif + +#endif + diff --git a/cuda/zcusparse.c b/cuda/zcusparse.c index a70a6573..2ae0c04e 100644 --- a/cuda/zcusparse.c +++ b/cuda/zcusparse.c @@ -38,62 +38,5 @@ #include "cintrf.h" #include "fcusparse.h" - -/* Double precision real */ -#define TYPE double complex -#define CUSPARSE_BASE_TYPE CUDA_C_64F -#define T_CSRGDeviceMat z_CSRGDeviceMat -#define T_Cmat z_Cmat -#define T_spmvCSRGDevice z_spmvCSRGDevice -#define T_spsvCSRGDevice z_spsvCSRGDevice -#define T_CSRGDeviceAlloc z_CSRGDeviceAlloc -#define T_CSRGDeviceFree z_CSRGDeviceFree -#define T_CSRGHost2Device z_CSRGHost2Device -#define T_CSRGDevice2Host z_CSRGDevice2Host -#define T_CSRGDeviceSetMatFillMode z_CSRGDeviceSetMatFillMode -#define T_CSRGDeviceSetMatDiagType z_CSRGDeviceSetMatDiagType -#define T_CSRGDeviceGetParms z_CSRGDeviceGetParms - -#if CUDA_SHORT_VERSION <= 10 -#define T_CSRGDeviceSetMatType z_CSRGDeviceSetMatType -#define T_CSRGDeviceSetMatIndexBase z_CSRGDeviceSetMatIndexBase -#define T_CSRGDeviceCsrsmAnalysis z_CSRGDeviceCsrsmAnalysis -#define cusparseTcsrmv cusparseZcsrmv -#define cusparseTcsrsv_solve cusparseZcsrsv_solve -#define cusparseTcsrsv_analysis cusparseZcsrsv_analysis -#define T_HYBGDeviceMat z_HYBGDeviceMat -#define T_Hmat z_Hmat -#define T_HYBGDeviceFree z_HYBGDeviceFree -#define T_spmvHYBGDevice z_spmvHYBGDevice -#define T_HYBGDeviceAlloc z_HYBGDeviceAlloc -#define T_HYBGDeviceSetMatDiagType z_HYBGDeviceSetMatDiagType -#define T_HYBGDeviceSetMatIndexBase z_HYBGDeviceSetMatIndexBase -#define T_HYBGDeviceSetMatType z_HYBGDeviceSetMatType -#define T_HYBGDeviceSetMatFillMode z_HYBGDeviceSetMatFillMode -#define T_HYBGDeviceHybsmAnalysis z_HYBGDeviceHybsmAnalysis -#define T_spsvHYBGDevice z_spsvHYBGDevice -#define T_HYBGHost2Device z_HYBGHost2Device -#define cusparseThybmv cusparseZhybmv -#define cusparseThybsv_solve cusparseZhybsv_solve -#define cusparseThybsv_analysis cusparseZhybsv_analysis -#define cusparseTcsr2hyb cusparseZcsr2hyb - -#elif CUDA_VERSION < 11030 - -#define T_CSRGDeviceSetMatType z_CSRGDeviceSetMatType -#define T_CSRGDeviceSetMatIndexBase z_CSRGDeviceSetMatIndexBase -#define T_CSRGDeviceCsrsv2Analysis z_CSRGDeviceCsrsv2Analysis -#define cusparseTcsrsv2_bufferSize cusparseZcsrsv2_bufferSize -#define cusparseTcsrsv2_analysis cusparseZcsrsv2_analysis -#define cusparseTcsrsv2_solve cusparseZcsrsv2_solve -#else - -#define T_CSRGIsNullSvBuffer z_CSRGIsNullSvBuffer -#define T_CSRGIsNullSvDescr z_CSRGIsNullSvDescr -#define T_CSRGIsNullMvDescr z_CSRGIsNullMvDescr -#define T_CSRGCreateSpMVDescr z_CSRGCreateSpMVDescr - -#endif - +#include "zcusparse.h" #include "fcusparse_fct.h" - diff --git a/cuda/zcusparse.h b/cuda/zcusparse.h new file mode 100644 index 00000000..364e8ecc --- /dev/null +++ b/cuda/zcusparse.h @@ -0,0 +1,101 @@ + /* Parallel Sparse BLAS GPU plugin */ + /* (C) Copyright 2013 */ + + /* Salvatore Filippone */ + /* Alessandro Fanfarillo */ + + /* Redistribution and use in source and binary forms, with or without */ + /* modification, are permitted provided that the following conditions */ + /* are met: */ + /* 1. Redistributions of source code must retain the above copyright */ + /* notice, this list of conditions and the following disclaimer. */ + /* 2. Redistributions in binary form must reproduce the above copyright */ + /* notice, this list of conditions, and the following disclaimer in the */ + /* documentation and/or other materials provided with the distribution. */ + /* 3. The name of the PSBLAS group or the names of its contributors may */ + /* not be used to endorse or promote products derived from this */ + /* software without specific written permission. */ + + /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ + /* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ + /* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ + /* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS */ + /* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR */ + /* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF */ + /* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS */ + /* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ + /* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) */ + /* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ + /* POSSIBILITY OF SUCH DAMAGE. */ + +#ifndef ZCUSPARSE_ +#define ZCUSPARSE_ + + +#include +#include + +#include +#include +#include "cintrf.h" +#include "fcusparse.h" + + +/* Double precision real */ +#define TYPE double complex +#define CUSPARSE_BASE_TYPE CUDA_C_64F +#define T_CSRGDeviceMat z_CSRGDeviceMat +#define T_Cmat z_Cmat +#define T_spmvCSRGDevice z_spmvCSRGDevice +#define T_spsvCSRGDevice z_spsvCSRGDevice +#define T_CSRGDeviceAlloc z_CSRGDeviceAlloc +#define T_CSRGDeviceFree z_CSRGDeviceFree +#define T_CSRGHost2Device z_CSRGHost2Device +#define T_CSRGDevice2Host z_CSRGDevice2Host +#define T_CSRGDeviceSetMatFillMode z_CSRGDeviceSetMatFillMode +#define T_CSRGDeviceSetMatDiagType z_CSRGDeviceSetMatDiagType +#define T_CSRGDeviceGetParms z_CSRGDeviceGetParms + +#if CUDA_SHORT_VERSION <= 10 +#define T_CSRGDeviceSetMatType z_CSRGDeviceSetMatType +#define T_CSRGDeviceSetMatIndexBase z_CSRGDeviceSetMatIndexBase +#define T_CSRGDeviceCsrsmAnalysis z_CSRGDeviceCsrsmAnalysis +#define cusparseTcsrmv cusparseZcsrmv +#define cusparseTcsrsv_solve cusparseZcsrsv_solve +#define cusparseTcsrsv_analysis cusparseZcsrsv_analysis +#define T_HYBGDeviceMat z_HYBGDeviceMat +#define T_Hmat z_Hmat +#define T_HYBGDeviceFree z_HYBGDeviceFree +#define T_spmvHYBGDevice z_spmvHYBGDevice +#define T_HYBGDeviceAlloc z_HYBGDeviceAlloc +#define T_HYBGDeviceSetMatDiagType z_HYBGDeviceSetMatDiagType +#define T_HYBGDeviceSetMatIndexBase z_HYBGDeviceSetMatIndexBase +#define T_HYBGDeviceSetMatType z_HYBGDeviceSetMatType +#define T_HYBGDeviceSetMatFillMode z_HYBGDeviceSetMatFillMode +#define T_HYBGDeviceHybsmAnalysis z_HYBGDeviceHybsmAnalysis +#define T_spsvHYBGDevice z_spsvHYBGDevice +#define T_HYBGHost2Device z_HYBGHost2Device +#define cusparseThybmv cusparseZhybmv +#define cusparseThybsv_solve cusparseZhybsv_solve +#define cusparseThybsv_analysis cusparseZhybsv_analysis +#define cusparseTcsr2hyb cusparseZcsr2hyb + +#elif CUDA_VERSION < 11030 + +#define T_CSRGDeviceSetMatType z_CSRGDeviceSetMatType +#define T_CSRGDeviceSetMatIndexBase z_CSRGDeviceSetMatIndexBase +#define T_CSRGDeviceCsrsv2Analysis z_CSRGDeviceCsrsv2Analysis +#define cusparseTcsrsv2_bufferSize cusparseZcsrsv2_bufferSize +#define cusparseTcsrsv2_analysis cusparseZcsrsv2_analysis +#define cusparseTcsrsv2_solve cusparseZcsrsv2_solve +#else + +#define T_CSRGIsNullSvBuffer z_CSRGIsNullSvBuffer +#define T_CSRGIsNullSvDescr z_CSRGIsNullSvDescr +#define T_CSRGIsNullMvDescr z_CSRGIsNullMvDescr +#define T_CSRGCreateSpMVDescr z_CSRGCreateSpMVDescr + +#endif + +#endif +