pub fn execute_with_fallback<T, GpuFn, CpuFn>(
config: &FallbackConfig,
gpu_op: GpuFn,
cpu_op: CpuFn,
) -> GpuResult<FallbackResult<T>>Expand description
Execute gpu_op and, if it returns a fallback-triggering error, run
cpu_op instead.
§Behaviour
| GPU result | config.enabled | Action |
|---|---|---|
Ok(v) | any | return FallbackResult { value: v, path: Gpu } |
| fallback-triggering error | true | invoke cpu_op, return Cpu path |
| fallback-triggering error | false | propagate the GPU error |
| non-fallback error | any | propagate the GPU error unchanged |
§Examples
use oxigdal_gpu::cpu_fallback::{FallbackConfig, ExecutionPath, execute_with_fallback};
use oxigdal_gpu::GpuError;
let cfg = FallbackConfig::default();
let result = execute_with_fallback(
&cfg,
|| Err::<u32, GpuError>(GpuError::device_lost("test")),
|| 42_u32,
).unwrap();
assert_eq!(result.value, 42);
assert_eq!(result.path, ExecutionPath::Cpu);