packages feed

cusolver-0.1.0.0: Foreign/CUDA/Solver/Sparse/Analysis.chs

{-# LANGUAGE CPP                      #-}
{-# LANGUAGE EmptyDataDecls           #-}
{-# LANGUAGE ForeignFunctionInterface #-}
-- |
-- Module      : Foreign.CUDA.Solver.Sparse.Analysis
-- Copyright   : [2017] Trevor L. McDonell
-- License     : BSD3
--
-- Maintainer  : Trevor L. McDonell <tmcdonell@cse.unsw.edu.au>
-- Stability   : experimental
-- Portability : non-portable (GHC extensions)
--

module Foreign.CUDA.Solver.Sparse.Analysis (

  Info_csrqr(..), createInfo_csrqr, destroyInfo_csrqr,
  Info_csrchol(..), createInfo_csrchol, destroyInfo_csrchol,

) where

-- friends
import Foreign.CUDA.Solver.Error
import Foreign.CUDA.Solver.Internal.C2HS

-- system
import Foreign
import Foreign.C
import Control.Monad                                      ( liftM )

#include "cbits/stubs.h"
{# context lib="cusolver" #}


newtype Info_csrqr = Info_csrqr { useInfo_csrqr :: {# type csrqrInfo_t #}}

{-# INLINEABLE createInfo_csrqr #-}
{# fun unsafe cusolverSpCreateCsrqrInfo as createInfo_csrqr
  { alloca- `Info_csrqr' peekI* } -> `()' checkStatus*- #}
  where
    peekI = liftM Info_csrqr . peek

{-# INLINEABLE destroyInfo_csrqr #-}
{# fun unsafe cusolverSpDestroyCsrqrInfo as destroyInfo_csrqr
  { useInfo_csrqr `Info_csrqr' } -> `()' checkStatus* #}


#if CUDA_VERSION >= 7500
newtype Info_csrchol = Info_csrchol { useInfo_csrchol :: {# type csrcholInfo_t #}}

{-# INLINEABLE createInfo_csrchol #-}
{# fun unsafe cusolverSpCreateCsrcholInfo as createInfo_csrchol
  { alloca- `Info_csrchol' peekI* } -> `()' checkStatus*- #}
  where
    peekI = liftM Info_csrchol . peek

{-# INLINEABLE destroyInfo_csrchol #-}
{# fun unsafe cusolverSpDestroyCsrcholInfo as destroyInfo_csrchol
  { useInfo_csrchol `Info_csrchol' } -> `()' checkStatus* #}

#else
data Info_csrchol

createInfo_csrchol :: IO Info_csrchol
createInfo_csrchol = cusolverError "'createInfo_csrchol requires at least cuda-7.5"

destroyInfo_csrchol :: Info_csrchol -> IO ()
destroyInfo_csrchol _ = cusolverError "'destroyInfo_csrchol requires at least cuda-7.5"
#endif