{-# LANGUAGE ViewPatterns #-}
module ArrayFire.Device where
import Control.Exception (finally)
import Foreign.C.String
import Foreign.Ptr (castPtr)
import ArrayFire.Internal.Device
import ArrayFire.FFI
foreign import ccall unsafe "af_notify_shutdown"
afNotifyShutdown :: IO ()
withArrayFire :: IO a -> IO a
withArrayFire :: forall a. IO a -> IO a
withArrayFire IO a
action = IO a
action IO a -> IO () -> IO a
forall a b. IO a -> IO b -> IO a
`finally` IO ()
afNotifyShutdown
info :: IO ()
info :: IO ()
info = IO AFErr -> IO ()
afCall IO AFErr
af_info
afInit :: IO ()
afInit :: IO ()
afInit = IO AFErr -> IO ()
afCall IO AFErr
af_init
getInfoString :: IO String
getInfoString :: IO String
getInfoString = do
strPtr <- (Ptr (Ptr CChar) -> IO AFErr) -> IO (Ptr CChar)
forall a. Storable a => (Ptr a -> IO AFErr) -> IO a
afCall1 ((Ptr (Ptr CChar) -> CBool -> IO AFErr)
-> CBool -> Ptr (Ptr CChar) -> IO AFErr
forall a b c. (a -> b -> c) -> b -> a -> c
flip Ptr (Ptr CChar) -> CBool -> IO AFErr
af_info_string CBool
1)
str <- peekCString strPtr
_ <- af_free_host (castPtr strPtr)
pure str
getDeviceCount :: IO Int
getDeviceCount :: IO Int
getDeviceCount = CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Ptr CInt -> IO AFErr) -> IO CInt
forall a. Storable a => (Ptr a -> IO AFErr) -> IO a
afCall1 Ptr CInt -> IO AFErr
af_get_device_count
setDevice :: Int -> IO ()
setDevice :: Int -> IO ()
setDevice (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
x) = IO AFErr -> IO ()
afCall (CInt -> IO AFErr
af_set_device CInt
x)
getDevice :: IO Int
getDevice :: IO Int
getDevice = CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Ptr CInt -> IO AFErr) -> IO CInt
forall a. Storable a => (Ptr a -> IO AFErr) -> IO a
afCall1 Ptr CInt -> IO AFErr
af_get_device
deviceGC :: IO ()
deviceGC :: IO ()
deviceGC = IO AFErr -> IO ()
afCall IO AFErr
af_device_gc