#pragma once #include #include #include #include namespace at { struct TORCH_API IPUHooksInterface { virtual ~IPUHooksInterface() = default; virtual const Generator& getDefaultIPUGenerator( DeviceIndex device_index = -1) const { AT_ERROR( "Cannot get the default IPU generator: the IPU backend is not " "available."); } virtual Generator newIPUGenerator(DeviceIndex device_index = -1) const { AT_ERROR( "Cannot create a new IPU generator: the IPU backend is not available."); } }; struct TORCH_API IPUHooksArgs {}; TORCH_DECLARE_REGISTRY(IPUHooksRegistry, IPUHooksInterface, IPUHooksArgs); #define REGISTER_IPU_HOOKS(clsname) \ C10_REGISTER_CLASS(IPUHooksRegistry, clsname, clsname) namespace detail { TORCH_API const IPUHooksInterface& getIPUHooks(); } // namespace detail } // namespace at