#pragma once
|
|
#include <c10/core/impl/DeviceGuardImplInterface.h>
|
#include <c10/macros/Macros.h>
|
|
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
|