Disable timer for devices that fail at runtime
Previously the timer would attempt to call the device-specific
implementation of any device compiled for regardless of what the
RuntimeDeviceTracker
says or if it fails. This caused problems when a
particular device (such as CUDA) was compiled for but run in a system
where the runtime was not available.
Fix this problem by (1) first checking to see if the device is enabled
in the RuntimeDeviceTracker
before running and (2) if an exception is
thrown catch it and disable the device in the RuntimeDeviceTracker
.