Device类实例化采用工厂模式进行,由于Device类有很多子类,所以DeviceFactory也派生出对应设备的工厂类( ThreadPoolDeviceFactory,GPUCompatibleCPUDeviceFactory,dengBaseGPUDeviceFactory,XlaCpuDeviceFactory,XlaGpuDeviceFactory等 )。
//设备工厂抽象类,定义了几个静态变量和,虚函数接口
class DeviceFactory {
public:
virtual ~DeviceFactory() {}//虚析构函数
//注册设备工厂,即将指定类型工厂按照优先级添加到一个全局静态变量map中
static void Register(const string& device_type, DeviceFactory* factory,
int priority);
static DeviceFactory* GetFactory(const string& device_type);
// CPU is are added first.
//输入一个设备指针,创建设备
static Status AddDevices(const SessionOptions& options,
const string& name_prefix,