-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathBackend.hs
More file actions
80 lines (73 loc) · 1.83 KB
/
Backend.hs
File metadata and controls
80 lines (73 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
--------------------------------------------------------------------------------
-- |
-- Module : ArrayFire.Backend
-- Copyright : David Johnson (c) 2019-2020
-- License : BSD 3
-- Maintainer : David Johnson <djohnson.m@gmail.com>
-- Stability : Experimental
-- Portability : GHC
--
-- Set and get available ArrayFire 'Backend's.
--
-- @
-- module Main where
--
-- import ArrayFire
--
-- main :: IO ()
-- main = print =<< getAvailableBackends
-- @
--
-- @
-- [CPU,OpenCL]
-- @
--------------------------------------------------------------------------------
module ArrayFire.Backend where
import ArrayFire.FFI
import ArrayFire.Internal.Backend
import ArrayFire.Internal.Types
-- | Set specific 'Backend' to use
--
-- >>> setBackend OpenCL
-- ()
setBackend
:: Backend
-- ^ 'Backend' to use for 'Array' construction
-> IO ()
setBackend = afCall . af_set_backend . toAFBackend
-- | Retrieve count of Backends available
--
-- >>> getBackendCount
-- 2
--
getBackendCount :: IO Int
getBackendCount =
fromIntegral <$>
afCall1 af_get_backend_count
-- | Retrieve available 'Backend's
--
-- >>> mapM_ print =<< getAvailableBackends
-- CPU
-- OpenCL
getAvailableBackends :: IO [Backend]
getAvailableBackends =
toBackends . fromIntegral <$>
afCall1 af_get_available_backends
-- | Retrieve 'Backend' that specific 'Array' was created from
--
-- >>> getBackend (scalar @Double 2.0)
-- OpenCL
getBackend :: Array a -> Backend
getBackend = toBackend . flip infoFromArray af_get_backend_id
-- | Retrieve active 'Backend'
--
-- >>> getActiveBackend
-- OpenCL
getActiveBackend :: IO Backend
getActiveBackend = toBackend <$> afCall1 af_get_active_backend
-- | Retrieve Device ID that 'Array' was created from
--
-- >>> getDeviceID (scalar \@Double 2.0)
-- 1
getDeviceID :: Array a -> Int
getDeviceID = fromIntegral . flip infoFromArray af_get_device_id