#pragma once #include #include namespace at { namespace detail { struct CPUGuardImpl final : public c10::impl::DeviceGuardImplInterface { CPUGuardImpl() {} DeviceType type() const override { return DeviceType::CPU; } Device exchangeDevice(Device) const override { // no-op return Device(DeviceType::CPU, -1); } Device getDevice() const override { return Device(DeviceType::CPU, -1); } void setDevice(Device) const override { // no-op } void uncheckedSetDevice(Device d) const noexcept override { // no-op } Stream getStream(Device d) const noexcept override { // no-op return Stream(Stream::DEFAULT, Device(DeviceType::CPU, -1)); } // NB: These do NOT set the current device Stream exchangeStream(Stream s) const noexcept override { // no-op return Stream(Stream::DEFAULT, Device(DeviceType::CPU, -1)); } DeviceIndex deviceCount() const noexcept override { return 1; } // Event-related functions void record(void** event, const Stream& stream, const DeviceIndex device_index, const EventFlag flag) const override { TORCH_CHECK(false, "CPU backend doesn't support events."); } void block( void* event, const Stream& stream) const override { TORCH_CHECK(false, "CPU backend doesn't support events.") } bool queryEvent(void* event) const override { TORCH_CHECK(false, "CPU backend doesn't support events.") } void destroyEvent( void* event, const DeviceIndex device_index) const noexcept override { } }; }} // namespace at::detail