packages feed

cusolver-0.2.0.0: Foreign/CUDA/Solver/Dense/Analysis.chs

{-# LANGUAGE CPP                      #-}
{-# LANGUAGE EmptyDataDecls           #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE TemplateHaskell          #-}
-- |
-- Module      : Foreign.CUDA.Solver.Dense.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.Dense.Analysis (

  Info_gesvdj(..), createInfo_gesvdj, destroyInfo_gesvdj,
  Info_syevj(..), createInfo_syevj, destroyInfo_syevj,

) 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" #}


#if CUDA_VERSION >= 9000
newtype Info_gesvdj = Info_gesvdj { useInfo_gesvdj :: {# type gesvdjInfo_t #}}

{-# INLINEABLE createInfo_gesvdj #-}
{# fun unsafe cusolverDnCreateGesvdjInfo as createInfo_gesvdj
  { alloca- `Info_gesvdj' peekI* } -> `()' checkStatus*- #}
  where
    peekI = liftM Info_gesvdj . peek

{-# INLINEABLE destroyInfo_gesvdj #-}
{# fun unsafe cusolverDnDestroyGesvdjInfo as destroyInfo_gesvdj
  { useInfo_gesvdj `Info_gesvdj' } -> `()' checkStatus* #}

#else
data Info_gesvdj

createInfo_gesvdj :: IO Info_gesvdj
createInfo_gesvdj = requireSDK 'createInfo_gesvdj 9.0

destroyInfo_gesvdj :: Info_gesvdj -> IO ()
destroyInfo_gesvdj _ = requireSDK 'destroyInfo_gesvdj 9.0
#endif

#if CUDA_VERSION >= 9000
newtype Info_syevj = Info_syevj { useInfo_syevj :: {# type syevjInfo_t #}}

{-# INLINEABLE createInfo_syevj #-}
{# fun unsafe cusolverDnCreateSyevjInfo as createInfo_syevj
  { alloca- `Info_syevj' peekI* } -> `()' checkStatus*- #}
  where
    peekI = liftM Info_syevj . peek

{-# INLINEABLE destroyInfo_syevj #-}
{# fun unsafe cusolverDnDestroySyevjInfo as destroyInfo_syevj
  { useInfo_syevj `Info_syevj' } -> `()' checkStatus* #}

#else
data Info_syevj

createInfo_syevj :: IO Info_syevj
createInfo_syevj = requireSDK 'createInfo_syevj 9.0

destroyInfo_syevj :: Info_syevj -> IO ()
destroyInfo_syevj _ = requireSDK 'destroyInfo_syevj 9.0
#endif