{-# LINE 1 "src/Foreign/CUDA/Driver/Error.chs" #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE ForeignFunctionInterface #-}
module Foreign.CUDA.Driver.Error (
Status(..), CUDAException(..),
describe,
cudaError, cudaErrorIO, requireSDK,
resultIfOk, nothingIfOk, checkStatus,
) where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
import qualified System.IO.Unsafe as C2HSImp
import Foreign.CUDA.Internal.C2HS
import Text.Show.Describe
import Control.Exception
import Control.Monad
import Data.Typeable
import Foreign.C
import Foreign.Marshal
import Foreign.Ptr
import Foreign.Storable
import Language.Haskell.TH
import System.IO.Unsafe
import Text.Printf
{-# LINE 42 "src/Foreign/CUDA/Driver/Error.chs" #-}
data Status = Success
| InvalidValue
| OutOfMemory
| NotInitialized
| Deinitialized
| ProfilerDisabled
| ProfilerNotInitialized
| ProfilerAlreadyStarted
| ProfilerAlreadyStopped
| StubLibrary
| DeviceUnavailable
| NoDevice
| InvalidDevice
| DeviceNotLicensed
| InvalidImage
| InvalidContext
| ContextAlreadyCurrent
| MapFailed
| UnmapFailed
| ArrayIsMapped
| AlreadyMapped
| NoBinaryForGPU
| AlreadyAcquired
| NotMapped
| NotMappedAsArray
| NotMappedAsPointer
| EccUncorrectable
| UnsupportedLimit
| ContextAlreadyInUse
| PeerAccessUnsupported
| InvalidPTX
| InvalidGraphicsContext
| NvlinkUncorrectable
| JitCompilerNotFound
| UnsupportedPtxVersion
| JitCompilationDisabled
| UnsupportedExecAffinity
| InvalidSource
| FileNotFound
| SharedObjectSymbolNotFound
| SharedObjectInitFailed
| OperatingSystem
| InvalidHandle
| IllegalState
| NotFound
| NotReady
| IllegalAddress
| LaunchOutOfResources
| LaunchTimeout
| LaunchIncompatibleTexturing
| PeerAccessAlreadyEnabled
| PeerAccessNotEnabled
| PrimaryContextActive
| ContextIsDestroyed
| Assert
| TooManyPeers
| HostMemoryAlreadyRegistered
| HostMemoryNotRegistered
| HardwareStackError
| IllegalInstruction
| MisalignedAddress
| InvalidAddressSpace
| InvalidPC
| LaunchFailed
| CooperativeLaunchTooLarge
| NotPermitted
| NotSupported
| SystemNotReady
| SystemDriverMismatch
| CompatNotSupportedOnDevice
| MpsConnectionFailed
| MpsRpcFailure
| MpsServerNotReady
| MpsMaxClientsReached
| MpsMaxConnectionsReached
| MpsClientTerminated
| StreamCaptureUnsupported
| StreamCaptureInvalidated
| StreamCaptureMerge
| StreamCaptureUnmatched
| StreamCaptureUnjoined
| StreamCaptureIsolation
| StreamCaptureImplicit
| CapturedEvent
| StreamCaptureWrongThread
| Timeout
| GraphExecUpdateFailure
| ExternalDevice
| InvalidClusterSize
| Unknown
deriving (Eq,Show)
instance Enum Status where
succ :: Status -> Status
succ Status
Success = Status
InvalidValue
succ Status
InvalidValue = Status
OutOfMemory
succ Status
OutOfMemory = Status
NotInitialized
succ Status
NotInitialized = Status
Deinitialized
succ Status
Deinitialized = Status
ProfilerDisabled
succ Status
ProfilerDisabled = Status
ProfilerNotInitialized
succ ProfilerNotInitialized = ProfilerAlreadyStarted
succ ProfilerAlreadyStarted = ProfilerAlreadyStopped
succ Status
ProfilerAlreadyStopped = Status
StubLibrary
succ Status
StubLibrary = Status
DeviceUnavailable
succ Status
DeviceUnavailable = Status
NoDevice
succ Status
NoDevice = Status
InvalidDevice
succ Status
InvalidDevice = Status
DeviceNotLicensed
succ Status
DeviceNotLicensed = Status
InvalidImage
succ Status
InvalidImage = Status
InvalidContext
succ Status
InvalidContext = Status
ContextAlreadyCurrent
succ Status
ContextAlreadyCurrent = Status
MapFailed
succ Status
MapFailed = Status
UnmapFailed
succ Status
UnmapFailed = Status
ArrayIsMapped
succ Status
ArrayIsMapped = Status
AlreadyMapped
succ Status
AlreadyMapped = Status
NoBinaryForGPU
succ Status
NoBinaryForGPU = Status
AlreadyAcquired
succ Status
AlreadyAcquired = Status
NotMapped
succ Status
NotMapped = Status
NotMappedAsArray
succ Status
NotMappedAsArray = Status
NotMappedAsPointer
succ Status
NotMappedAsPointer = Status
EccUncorrectable
succ Status
EccUncorrectable = Status
UnsupportedLimit
succ Status
UnsupportedLimit = Status
ContextAlreadyInUse
succ Status
ContextAlreadyInUse = Status
PeerAccessUnsupported
succ Status
PeerAccessUnsupported = Status
InvalidPTX
succ Status
InvalidPTX = Status
InvalidGraphicsContext
succ Status
InvalidGraphicsContext = Status
NvlinkUncorrectable
succ Status
NvlinkUncorrectable = Status
JitCompilerNotFound
succ Status
JitCompilerNotFound = Status
UnsupportedPtxVersion
succ Status
UnsupportedPtxVersion = Status
JitCompilationDisabled
succ Status
JitCompilationDisabled = Status
UnsupportedExecAffinity
succ Status
UnsupportedExecAffinity = Status
InvalidSource
succ Status
InvalidSource = Status
FileNotFound
succ Status
FileNotFound = Status
SharedObjectSymbolNotFound
succ Status
SharedObjectSymbolNotFound = Status
SharedObjectInitFailed
succ Status
SharedObjectInitFailed = Status
OperatingSystem
succ Status
OperatingSystem = Status
InvalidHandle
succ Status
InvalidHandle = Status
IllegalState
succ Status
IllegalState = Status
NotFound
succ Status
NotFound = Status
NotReady
succ Status
NotReady = Status
IllegalAddress
succ Status
IllegalAddress = Status
LaunchOutOfResources
succ Status
LaunchOutOfResources = Status
LaunchTimeout
succ Status
LaunchTimeout = Status
LaunchIncompatibleTexturing
succ Status
LaunchIncompatibleTexturing = Status
PeerAccessAlreadyEnabled
succ Status
PeerAccessAlreadyEnabled = Status
PeerAccessNotEnabled
succ Status
PeerAccessNotEnabled = Status
PrimaryContextActive
succ Status
PrimaryContextActive = Status
ContextIsDestroyed
succ Status
ContextIsDestroyed = Status
Assert
succ Status
Assert = Status
TooManyPeers
succ Status
TooManyPeers = Status
HostMemoryAlreadyRegistered
succ Status
HostMemoryAlreadyRegistered = Status
HostMemoryNotRegistered
succ Status
HostMemoryNotRegistered = Status
HardwareStackError
succ Status
HardwareStackError = Status
IllegalInstruction
succ Status
IllegalInstruction = Status
MisalignedAddress
succ Status
MisalignedAddress = Status
InvalidAddressSpace
succ Status
InvalidAddressSpace = Status
InvalidPC
succ Status
InvalidPC = Status
LaunchFailed
succ Status
LaunchFailed = Status
CooperativeLaunchTooLarge
succ Status
CooperativeLaunchTooLarge = Status
NotPermitted
succ Status
NotPermitted = Status
NotSupported
succ Status
NotSupported = Status
SystemNotReady
succ Status
SystemNotReady = Status
SystemDriverMismatch
succ Status
SystemDriverMismatch = Status
CompatNotSupportedOnDevice
succ Status
CompatNotSupportedOnDevice = Status
MpsConnectionFailed
succ Status
MpsConnectionFailed = Status
MpsRpcFailure
succ Status
MpsRpcFailure = Status
MpsServerNotReady
succ Status
MpsServerNotReady = Status
MpsMaxClientsReached
succ Status
MpsMaxClientsReached = Status
MpsMaxConnectionsReached
succ Status
MpsMaxConnectionsReached = Status
MpsClientTerminated
succ Status
MpsClientTerminated = Status
StreamCaptureUnsupported
succ Status
StreamCaptureUnsupported = Status
StreamCaptureInvalidated
succ Status
StreamCaptureInvalidated = Status
StreamCaptureMerge
succ Status
StreamCaptureMerge = Status
StreamCaptureUnmatched
succ Status
StreamCaptureUnmatched = Status
StreamCaptureUnjoined
succ Status
StreamCaptureUnjoined = Status
StreamCaptureIsolation
succ Status
StreamCaptureIsolation = Status
StreamCaptureImplicit
succ Status
StreamCaptureImplicit = Status
CapturedEvent
succ Status
CapturedEvent = Status
StreamCaptureWrongThread
succ Status
StreamCaptureWrongThread = Status
Timeout
succ Status
Timeout = Status
GraphExecUpdateFailure
succ Status
GraphExecUpdateFailure = Status
ExternalDevice
succ Status
ExternalDevice = Status
InvalidClusterSize
succ Status
InvalidClusterSize = Status
Unknown
succ Status
Unknown = String -> Status
forall a. HasCallStack => String -> a
error String
"Status.succ: Unknown has no successor"
pred :: Status -> Status
pred Status
InvalidValue = Status
Success
pred Status
OutOfMemory = Status
InvalidValue
pred Status
NotInitialized = Status
OutOfMemory
pred Status
Deinitialized = Status
NotInitialized
pred Status
ProfilerDisabled = Status
Deinitialized
pred Status
ProfilerNotInitialized = Status
ProfilerDisabled
pred Status
ProfilerAlreadyStarted = Status
ProfilerNotInitialized
pred Status
ProfilerAlreadyStopped = Status
ProfilerAlreadyStarted
pred Status
StubLibrary = Status
ProfilerAlreadyStopped
pred Status
DeviceUnavailable = Status
StubLibrary
pred Status
NoDevice = Status
DeviceUnavailable
pred Status
InvalidDevice = Status
NoDevice
pred Status
DeviceNotLicensed = Status
InvalidDevice
pred Status
InvalidImage = Status
DeviceNotLicensed
pred Status
InvalidContext = Status
InvalidImage
pred Status
ContextAlreadyCurrent = Status
InvalidContext
pred Status
MapFailed = Status
ContextAlreadyCurrent
pred Status
UnmapFailed = Status
MapFailed
pred Status
ArrayIsMapped = Status
UnmapFailed
pred Status
AlreadyMapped = Status
ArrayIsMapped
pred Status
NoBinaryForGPU = Status
AlreadyMapped
pred Status
AlreadyAcquired = Status
NoBinaryForGPU
pred Status
NotMapped = Status
AlreadyAcquired
pred Status
NotMappedAsArray = Status
NotMapped
pred Status
NotMappedAsPointer = Status
NotMappedAsArray
pred Status
EccUncorrectable = Status
NotMappedAsPointer
pred Status
UnsupportedLimit = Status
EccUncorrectable
pred Status
ContextAlreadyInUse = Status
UnsupportedLimit
pred Status
PeerAccessUnsupported = Status
ContextAlreadyInUse
pred Status
InvalidPTX = Status
PeerAccessUnsupported
pred Status
InvalidGraphicsContext = Status
InvalidPTX
pred Status
NvlinkUncorrectable = Status
InvalidGraphicsContext
pred Status
JitCompilerNotFound = Status
NvlinkUncorrectable
pred Status
UnsupportedPtxVersion = Status
JitCompilerNotFound
pred Status
JitCompilationDisabled = Status
UnsupportedPtxVersion
pred Status
UnsupportedExecAffinity = Status
JitCompilationDisabled
pred Status
InvalidSource = Status
UnsupportedExecAffinity
pred Status
FileNotFound = Status
InvalidSource
pred Status
SharedObjectSymbolNotFound = Status
FileNotFound
pred Status
SharedObjectInitFailed = Status
SharedObjectSymbolNotFound
pred Status
OperatingSystem = Status
SharedObjectInitFailed
pred Status
InvalidHandle = Status
OperatingSystem
pred Status
IllegalState = Status
InvalidHandle
pred Status
NotFound = Status
IllegalState
pred Status
NotReady = Status
NotFound
pred Status
IllegalAddress = Status
NotReady
pred Status
LaunchOutOfResources = Status
IllegalAddress
pred Status
LaunchTimeout = Status
LaunchOutOfResources
pred Status
LaunchIncompatibleTexturing = Status
LaunchTimeout
pred Status
PeerAccessAlreadyEnabled = Status
LaunchIncompatibleTexturing
pred Status
PeerAccessNotEnabled = Status
PeerAccessAlreadyEnabled
pred Status
PrimaryContextActive = Status
PeerAccessNotEnabled
pred Status
ContextIsDestroyed = Status
PrimaryContextActive
pred Status
Assert = Status
ContextIsDestroyed
pred Status
TooManyPeers = Status
Assert
pred Status
HostMemoryAlreadyRegistered = Status
TooManyPeers
pred Status
HostMemoryNotRegistered = Status
HostMemoryAlreadyRegistered
pred Status
HardwareStackError = Status
HostMemoryNotRegistered
pred Status
IllegalInstruction = Status
HardwareStackError
pred Status
MisalignedAddress = Status
IllegalInstruction
pred Status
InvalidAddressSpace = Status
MisalignedAddress
pred Status
InvalidPC = Status
InvalidAddressSpace
pred Status
LaunchFailed = Status
InvalidPC
pred Status
CooperativeLaunchTooLarge = Status
LaunchFailed
pred Status
NotPermitted = Status
CooperativeLaunchTooLarge
pred Status
NotSupported = Status
NotPermitted
pred Status
SystemNotReady = Status
NotSupported
pred Status
SystemDriverMismatch = Status
SystemNotReady
pred Status
CompatNotSupportedOnDevice = Status
SystemDriverMismatch
pred Status
MpsConnectionFailed = Status
CompatNotSupportedOnDevice
pred Status
MpsRpcFailure = Status
MpsConnectionFailed
pred Status
MpsServerNotReady = Status
MpsRpcFailure
pred Status
MpsMaxClientsReached = Status
MpsServerNotReady
pred Status
MpsMaxConnectionsReached = Status
MpsMaxClientsReached
pred Status
MpsClientTerminated = Status
MpsMaxConnectionsReached
pred Status
StreamCaptureUnsupported = Status
MpsClientTerminated
pred Status
StreamCaptureInvalidated = Status
StreamCaptureUnsupported
pred Status
StreamCaptureMerge = Status
StreamCaptureInvalidated
pred Status
StreamCaptureUnmatched = Status
StreamCaptureMerge
pred Status
StreamCaptureUnjoined = Status
StreamCaptureUnmatched
pred Status
StreamCaptureIsolation = Status
StreamCaptureUnjoined
pred Status
StreamCaptureImplicit = Status
StreamCaptureIsolation
pred Status
CapturedEvent = Status
StreamCaptureImplicit
pred Status
StreamCaptureWrongThread = Status
CapturedEvent
pred Status
Timeout = Status
StreamCaptureWrongThread
pred Status
GraphExecUpdateFailure = Status
Timeout
pred Status
ExternalDevice = Status
GraphExecUpdateFailure
pred Status
InvalidClusterSize = Status
ExternalDevice
pred Status
Unknown = Status
InvalidClusterSize
pred Status
Success = String -> Status
forall a. HasCallStack => String -> a
error String
"Status.pred: Success has no predecessor"
enumFromTo :: Status -> Status -> [Status]
enumFromTo Status
from Status
to = Status -> [Status]
forall {t}. Enum t => t -> [t]
go Status
from
where
end :: Int
end = Status -> Int
forall a. Enum a => a -> Int
fromEnum Status
to
go :: t -> [t]
go t
v = case Int -> Int -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (t -> Int
forall a. Enum a => a -> Int
fromEnum t
v) Int
end of
Ordering
LT -> t
v t -> [t] -> [t]
forall a. a -> [a] -> [a]
: t -> [t]
go (t -> t
forall a. Enum a => a -> a
succ t
v)
Ordering
EQ -> [t
v]
Ordering
GT -> []
enumFrom :: Status -> [Status]
enumFrom Status
from = Status -> Status -> [Status]
forall a. Enum a => a -> a -> [a]
enumFromTo Status
from Status
Unknown
fromEnum :: Status -> Int
fromEnum Status
Success = Int
0
fromEnum Status
InvalidValue = Int
1
fromEnum Status
OutOfMemory = Int
2
fromEnum Status
NotInitialized = Int
3
fromEnum Status
Deinitialized = Int
4
fromEnum Status
ProfilerDisabled = Int
5
fromEnum Status
ProfilerNotInitialized = Int
6
fromEnum Status
ProfilerAlreadyStarted = Int
7
fromEnum Status
ProfilerAlreadyStopped = Int
8
fromEnum Status
StubLibrary = Int
34
fromEnum Status
DeviceUnavailable = Int
46
fromEnum Status
NoDevice = Int
100
fromEnum Status
InvalidDevice = Int
101
fromEnum Status
DeviceNotLicensed = Int
102
fromEnum Status
InvalidImage = Int
200
fromEnum Status
InvalidContext = Int
201
fromEnum Status
ContextAlreadyCurrent = Int
202
fromEnum Status
MapFailed = Int
205
fromEnum Status
UnmapFailed = Int
206
fromEnum Status
ArrayIsMapped = Int
207
fromEnum Status
AlreadyMapped = Int
208
fromEnum Status
NoBinaryForGPU = Int
209
fromEnum Status
AlreadyAcquired = Int
210
fromEnum Status
NotMapped = Int
211
fromEnum Status
NotMappedAsArray = Int
212
fromEnum Status
NotMappedAsPointer = Int
213
fromEnum Status
EccUncorrectable = Int
214
fromEnum Status
UnsupportedLimit = Int
215
fromEnum Status
ContextAlreadyInUse = Int
216
fromEnum Status
PeerAccessUnsupported = Int
217
fromEnum Status
InvalidPTX = Int
218
fromEnum Status
InvalidGraphicsContext = Int
219
fromEnum Status
NvlinkUncorrectable = Int
220
fromEnum Status
JitCompilerNotFound = Int
221
fromEnum Status
UnsupportedPtxVersion = Int
222
fromEnum Status
JitCompilationDisabled = Int
223
fromEnum Status
UnsupportedExecAffinity = Int
224
fromEnum Status
InvalidSource = Int
300
fromEnum Status
FileNotFound = Int
301
fromEnum Status
SharedObjectSymbolNotFound = Int
302
fromEnum Status
SharedObjectInitFailed = Int
303
fromEnum Status
OperatingSystem = Int
304
fromEnum Status
InvalidHandle = Int
400
fromEnum Status
IllegalState = Int
401
fromEnum Status
NotFound = Int
500
fromEnum Status
NotReady = Int
600
fromEnum Status
IllegalAddress = Int
700
fromEnum Status
LaunchOutOfResources = Int
701
fromEnum Status
LaunchTimeout = Int
702
fromEnum Status
LaunchIncompatibleTexturing = Int
703
fromEnum Status
PeerAccessAlreadyEnabled = Int
704
fromEnum Status
PeerAccessNotEnabled = Int
705
fromEnum Status
PrimaryContextActive = Int
708
fromEnum Status
ContextIsDestroyed = Int
709
fromEnum Status
Assert = Int
710
fromEnum Status
TooManyPeers = Int
711
fromEnum Status
HostMemoryAlreadyRegistered = Int
712
fromEnum Status
HostMemoryNotRegistered = Int
713
fromEnum Status
HardwareStackError = Int
714
fromEnum Status
IllegalInstruction = Int
715
fromEnum Status
MisalignedAddress = Int
716
fromEnum Status
InvalidAddressSpace = Int
717
fromEnum Status
InvalidPC = Int
718
fromEnum Status
LaunchFailed = Int
719
fromEnum Status
CooperativeLaunchTooLarge = Int
720
fromEnum Status
NotPermitted = Int
800
fromEnum Status
NotSupported = Int
801
fromEnum Status
SystemNotReady = Int
802
fromEnum Status
SystemDriverMismatch = Int
803
fromEnum Status
CompatNotSupportedOnDevice = Int
804
fromEnum Status
MpsConnectionFailed = Int
805
fromEnum Status
MpsRpcFailure = Int
806
fromEnum Status
MpsServerNotReady = Int
807
fromEnum Status
MpsMaxClientsReached = Int
808
fromEnum Status
MpsMaxConnectionsReached = Int
809
fromEnum Status
MpsClientTerminated = Int
810
fromEnum Status
StreamCaptureUnsupported = Int
900
fromEnum Status
StreamCaptureInvalidated = Int
901
fromEnum Status
StreamCaptureMerge = Int
902
fromEnum Status
StreamCaptureUnmatched = Int
903
fromEnum Status
StreamCaptureUnjoined = Int
904
fromEnum Status
StreamCaptureIsolation = Int
905
fromEnum Status
StreamCaptureImplicit = Int
906
fromEnum Status
CapturedEvent = Int
907
fromEnum Status
StreamCaptureWrongThread = Int
908
fromEnum Status
Timeout = Int
909
fromEnum Status
GraphExecUpdateFailure = Int
910
fromEnum Status
ExternalDevice = Int
911
fromEnum Status
InvalidClusterSize = Int
912
fromEnum Status
Unknown = Int
999
toEnum :: Int -> Status
toEnum Int
0 = Status
Success
toEnum Int
1 = Status
InvalidValue
toEnum Int
2 = Status
OutOfMemory
toEnum Int
3 = Status
NotInitialized
toEnum Int
4 = Status
Deinitialized
toEnum Int
5 = Status
ProfilerDisabled
toEnum Int
6 = Status
ProfilerNotInitialized
toEnum Int
7 = Status
ProfilerAlreadyStarted
toEnum Int
8 = Status
ProfilerAlreadyStopped
toEnum Int
34 = Status
StubLibrary
toEnum Int
46 = Status
DeviceUnavailable
toEnum Int
100 = Status
NoDevice
toEnum Int
101 = Status
InvalidDevice
toEnum Int
102 = Status
DeviceNotLicensed
toEnum Int
200 = Status
InvalidImage
toEnum Int
201 = Status
InvalidContext
toEnum Int
202 = Status
ContextAlreadyCurrent
toEnum Int
205 = Status
MapFailed
toEnum Int
206 = Status
UnmapFailed
toEnum Int
207 = Status
ArrayIsMapped
toEnum Int
208 = Status
AlreadyMapped
toEnum Int
209 = Status
NoBinaryForGPU
toEnum Int
210 = Status
AlreadyAcquired
toEnum Int
211 = Status
NotMapped
toEnum Int
212 = Status
NotMappedAsArray
toEnum Int
213 = Status
NotMappedAsPointer
toEnum Int
214 = Status
EccUncorrectable
toEnum Int
215 = Status
UnsupportedLimit
toEnum Int
216 = Status
ContextAlreadyInUse
toEnum Int
217 = Status
PeerAccessUnsupported
toEnum Int
218 = Status
InvalidPTX
toEnum Int
219 = Status
InvalidGraphicsContext
toEnum Int
220 = Status
NvlinkUncorrectable
toEnum Int
221 = Status
JitCompilerNotFound
toEnum Int
222 = Status
UnsupportedPtxVersion
toEnum Int
223 = Status
JitCompilationDisabled
toEnum Int
224 = Status
UnsupportedExecAffinity
toEnum Int
300 = Status
InvalidSource
toEnum Int
301 = Status
FileNotFound
toEnum Int
302 = Status
SharedObjectSymbolNotFound
toEnum Int
303 = Status
SharedObjectInitFailed
toEnum Int
304 = Status
OperatingSystem
toEnum Int
400 = Status
InvalidHandle
toEnum Int
401 = Status
IllegalState
toEnum Int
500 = Status
NotFound
toEnum Int
600 = Status
NotReady
toEnum Int
700 = Status
IllegalAddress
toEnum Int
701 = Status
LaunchOutOfResources
toEnum Int
702 = Status
LaunchTimeout
toEnum Int
703 = Status
LaunchIncompatibleTexturing
toEnum Int
704 = Status
PeerAccessAlreadyEnabled
toEnum Int
705 = Status
PeerAccessNotEnabled
toEnum Int
708 = Status
PrimaryContextActive
toEnum Int
709 = Status
ContextIsDestroyed
toEnum Int
710 = Status
Assert
toEnum Int
711 = Status
TooManyPeers
toEnum Int
712 = Status
HostMemoryAlreadyRegistered
toEnum Int
713 = Status
HostMemoryNotRegistered
toEnum Int
714 = Status
HardwareStackError
toEnum Int
715 = Status
IllegalInstruction
toEnum Int
716 = Status
MisalignedAddress
toEnum Int
717 = Status
InvalidAddressSpace
toEnum Int
718 = Status
InvalidPC
toEnum Int
719 = Status
LaunchFailed
toEnum Int
720 = Status
CooperativeLaunchTooLarge
toEnum Int
800 = Status
NotPermitted
toEnum Int
801 = Status
NotSupported
toEnum Int
802 = Status
SystemNotReady
toEnum Int
803 = Status
SystemDriverMismatch
toEnum Int
804 = Status
CompatNotSupportedOnDevice
toEnum Int
805 = Status
MpsConnectionFailed
toEnum Int
806 = Status
MpsRpcFailure
toEnum Int
807 = Status
MpsServerNotReady
toEnum Int
808 = Status
MpsMaxClientsReached
toEnum Int
809 = Status
MpsMaxConnectionsReached
toEnum Int
810 = Status
MpsClientTerminated
toEnum Int
900 = Status
StreamCaptureUnsupported
toEnum Int
901 = Status
StreamCaptureInvalidated
toEnum Int
902 = Status
StreamCaptureMerge
toEnum Int
903 = Status
StreamCaptureUnmatched
toEnum Int
904 = Status
StreamCaptureUnjoined
toEnum Int
905 = Status
StreamCaptureIsolation
toEnum Int
906 = Status
StreamCaptureImplicit
toEnum Int
907 = Status
CapturedEvent
toEnum Int
908 = Status
StreamCaptureWrongThread
toEnum Int
909 = Status
Timeout
toEnum Int
910 = Status
GraphExecUpdateFailure
toEnum Int
911 = Status
ExternalDevice
toEnum Int
912 = Status
InvalidClusterSize
toEnum Int
999 = Status
Unknown
toEnum Int
unmatched = String -> Status
forall a. HasCallStack => String -> a
error (String
"Status.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)
{-# LINE 59 "src/Foreign/CUDA/Driver/Error.chs" #-}
instance Describe Status where
describe status =
case cuGetErrorString status of
(Success, msg) -> msg
(err, _) -> throw (ExitCode err)
cuGetErrorString :: (Status) -> ((Status), (String))
cuGetErrorString a1 =
C2HSImp.unsafePerformIO $
let {a1' = cFromEnum a1} in
alloca $ \a2' ->
cuGetErrorString'_ a1' a2' >>= \res ->
let {res' = cToEnum res} in
ppeek a2'>>= \a2'' ->
return (res', a2'')
{-# LINE 74 "src/Foreign/CUDA/Driver/Error.chs" #-}
where
ppeek = peek >=> peekCString
data CUDAException
= ExitCode Status
| UserError String
deriving Typeable
instance Exception CUDAException
instance Show CUDAException where
showsPrec _ (ExitCode s) = showString ("CUDA Exception: " ++ describe s)
showsPrec _ (UserError s) = showString ("CUDA Exception: " ++ s)
{-# RULES "cudaError/IO" cudaError = cudaErrorIO #-}
{-# NOINLINE [1] cudaError #-}
cudaError :: String -> a
cudaError s = throw (UserError s)
cudaErrorIO :: String -> IO a
cudaErrorIO s = throwIO (UserError s)
requireSDK :: Name -> Double -> a
requireSDK n v = cudaError $ printf "'%s' requires at least cuda-%3.1f\n" (show n) v
{-# INLINE resultIfOk #-}
resultIfOk :: (Status, a) -> IO a
resultIfOk (status, !result) =
case status of
Success -> return result
_ -> throwIO (ExitCode status)
{-# INLINE nothingIfOk #-}
nothingIfOk :: Status -> IO ()
nothingIfOk status =
case status of
Success -> return ()
_ -> throwIO (ExitCode status)
{-# INLINE checkStatus #-}
checkStatus :: CInt -> IO ()
checkStatus = nothingIfOk . cToEnum
foreign import ccall unsafe "Foreign/CUDA/Driver/Error.chs.h cuGetErrorString"
cuGetErrorString'_ :: (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CInt)))