cublas.f90 Source File


Source Code

module f77_blas_cublas
#if defined(MFI_EXTENSIONS) && defined(MFI_CUBLAS)
use iso_c_binding
implicit none
interface
!> sgemm GPU (cublas v2) version
pure function cublasSgemm(handle, transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc) result(stat) &
    bind(C,name="cublasSgemm_v2")
    import
    integer, parameter :: wp = c_float
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: transa
    integer(c_int),value, intent(in) :: transb
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: k
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: ldb
    integer(c_int),value, intent(in) :: ldc
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: b
    type(c_ptr), value, intent(in) :: beta
    type(c_ptr), value, intent(in) :: c
    integer(c_int) :: stat
end function
!> sgemv GPU (cublas v2) version
pure function cublasSgemv(handle, trans, m, n, alpha, a, lda, x, incx, beta, y, incy) result(stat) &
    bind(C,name="cublasSgemv_v2")
    import
    integer, parameter :: wp = c_float
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: trans
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: incx
    integer(c_int),value, intent(in) :: incy
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: x
    type(c_ptr), value, intent(in) :: beta
    type(c_ptr), value, intent(in) :: y
    integer(c_int) :: stat
end function
!> strmm GPU (cublas v2) version
pure function cublasStrmm(handle, side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) result(stat) &
    bind(C,name="cublasStrmm_v2")
    import
    integer, parameter :: wp = c_float
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: side
    integer(c_int),value, intent(in) :: uplo
    integer(c_int),value, intent(in) :: transa
    integer(c_int),value, intent(in) :: diag
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: ldb
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: b
    integer(c_int) :: stat
end function
!> strsm GPU (cublas v2) version
pure function cublasStrsm(handle, side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) result(stat) &
    bind(C,name="cublasStrsm_v2")
    import
    integer, parameter :: wp = c_float
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: side
    integer(c_int),value, intent(in) :: uplo
    integer(c_int),value, intent(in) :: transa
    integer(c_int),value, intent(in) :: diag
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: ldb
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: b
    integer(c_int) :: stat
end function
!> dgemm GPU (cublas v2) version
pure function cublasDgemm(handle, transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc) result(stat) &
    bind(C,name="cublasDgemm_v2")
    import
    integer, parameter :: wp = c_double
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: transa
    integer(c_int),value, intent(in) :: transb
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: k
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: ldb
    integer(c_int),value, intent(in) :: ldc
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: b
    type(c_ptr), value, intent(in) :: beta
    type(c_ptr), value, intent(in) :: c
    integer(c_int) :: stat
end function
!> dgemv GPU (cublas v2) version
pure function cublasDgemv(handle, trans, m, n, alpha, a, lda, x, incx, beta, y, incy) result(stat) &
    bind(C,name="cublasDgemv_v2")
    import
    integer, parameter :: wp = c_double
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: trans
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: incx
    integer(c_int),value, intent(in) :: incy
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: x
    type(c_ptr), value, intent(in) :: beta
    type(c_ptr), value, intent(in) :: y
    integer(c_int) :: stat
end function
!> dtrmm GPU (cublas v2) version
pure function cublasDtrmm(handle, side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) result(stat) &
    bind(C,name="cublasDtrmm_v2")
    import
    integer, parameter :: wp = c_double
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: side
    integer(c_int),value, intent(in) :: uplo
    integer(c_int),value, intent(in) :: transa
    integer(c_int),value, intent(in) :: diag
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: ldb
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: b
    integer(c_int) :: stat
end function
!> dtrsm GPU (cublas v2) version
pure function cublasDtrsm(handle, side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) result(stat) &
    bind(C,name="cublasDtrsm_v2")
    import
    integer, parameter :: wp = c_double
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: side
    integer(c_int),value, intent(in) :: uplo
    integer(c_int),value, intent(in) :: transa
    integer(c_int),value, intent(in) :: diag
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: ldb
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: b
    integer(c_int) :: stat
end function
!> cgemm GPU (cublas v2) version
pure function cublasCgemm(handle, transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc) result(stat) &
    bind(C,name="cublasCgemm_v2")
    import
    integer, parameter :: wp = c_float
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: transa
    integer(c_int),value, intent(in) :: transb
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: k
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: ldb
    integer(c_int),value, intent(in) :: ldc
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: b
    type(c_ptr), value, intent(in) :: beta
    type(c_ptr), value, intent(in) :: c
    integer(c_int) :: stat
end function
!> cgemv GPU (cublas v2) version
pure function cublasCgemv(handle, trans, m, n, alpha, a, lda, x, incx, beta, y, incy) result(stat) &
    bind(C,name="cublasCgemv_v2")
    import
    integer, parameter :: wp = c_float
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: trans
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: incx
    integer(c_int),value, intent(in) :: incy
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: x
    type(c_ptr), value, intent(in) :: beta
    type(c_ptr), value, intent(in) :: y
    integer(c_int) :: stat
end function
!> ctrmm GPU (cublas v2) version
pure function cublasCtrmm(handle, side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) result(stat) &
    bind(C,name="cublasCtrmm_v2")
    import
    integer, parameter :: wp = c_float
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: side
    integer(c_int),value, intent(in) :: uplo
    integer(c_int),value, intent(in) :: transa
    integer(c_int),value, intent(in) :: diag
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: ldb
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: b
    integer(c_int) :: stat
end function
!> ctrsm GPU (cublas v2) version
pure function cublasCtrsm(handle, side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) result(stat) &
    bind(C,name="cublasCtrsm_v2")
    import
    integer, parameter :: wp = c_float
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: side
    integer(c_int),value, intent(in) :: uplo
    integer(c_int),value, intent(in) :: transa
    integer(c_int),value, intent(in) :: diag
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: ldb
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: b
    integer(c_int) :: stat
end function
!> zgemm GPU (cublas v2) version
pure function cublasZgemm(handle, transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc) result(stat) &
    bind(C,name="cublasZgemm_v2")
    import
    integer, parameter :: wp = c_double
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: transa
    integer(c_int),value, intent(in) :: transb
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: k
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: ldb
    integer(c_int),value, intent(in) :: ldc
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: b
    type(c_ptr), value, intent(in) :: beta
    type(c_ptr), value, intent(in) :: c
    integer(c_int) :: stat
end function
!> zgemv GPU (cublas v2) version
pure function cublasZgemv(handle, trans, m, n, alpha, a, lda, x, incx, beta, y, incy) result(stat) &
    bind(C,name="cublasZgemv_v2")
    import
    integer, parameter :: wp = c_double
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: trans
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: incx
    integer(c_int),value, intent(in) :: incy
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: x
    type(c_ptr), value, intent(in) :: beta
    type(c_ptr), value, intent(in) :: y
    integer(c_int) :: stat
end function
!> ztrmm GPU (cublas v2) version
pure function cublasZtrmm(handle, side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) result(stat) &
    bind(C,name="cublasZtrmm_v2")
    import
    integer, parameter :: wp = c_double
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: side
    integer(c_int),value, intent(in) :: uplo
    integer(c_int),value, intent(in) :: transa
    integer(c_int),value, intent(in) :: diag
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: ldb
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: b
    integer(c_int) :: stat
end function
!> ztrsm GPU (cublas v2) version
pure function cublasZtrsm(handle, side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) result(stat) &
    bind(C,name="cublasZtrsm_v2")
    import
    integer, parameter :: wp = c_double
    type(c_ptr), value, intent(in) :: handle
    integer(c_int),value, intent(in) :: side
    integer(c_int),value, intent(in) :: uplo
    integer(c_int),value, intent(in) :: transa
    integer(c_int),value, intent(in) :: diag
    integer(c_int),value, intent(in) :: m
    integer(c_int),value, intent(in) :: n
    integer(c_int),value, intent(in) :: lda
    integer(c_int),value, intent(in) :: ldb
    type(c_ptr), value, intent(in) :: alpha
    type(c_ptr), value, intent(in) :: a
    type(c_ptr), value, intent(in) :: b
    integer(c_int) :: stat
end function
end interface
#endif
end module