TensorFlow除了大量使用Eigen和CUDA等计算库函数之外,还大量使用了Proto Buffer。Proto Buffer是一个数据传输协议,它可以将C++,Python和Java创建的对象序列化为二进制文件。这样,我们可以很轻松地实现在不同的设备上运行的用不同编程语言实现的不同进程之间,实现数据传送。
但是,并非所有的对象,都可以用Proto Buffer传输。要使用Proto Buffer这些对象的类型必须满足特定的要求。确切地说,数据类型必须实现序列化和反序列函数。我们把实现了序列化和反序列化函数的类称作是Proto Buffer类。编写这两个函数通常是繁琐无聊的操作。所幸的是,Google提供了一个工具,自动生成Proto Buffer类。具体来说,我们先用Proto Buffer语言定义消息类型,然后再利用Proto Buffer工具,生成特定编程语言的类。
TensorFlow的DeviceAttributes类就是Proto Buffer类型。顾名思义,它是定义设备属性的类。它的Proto Buffer消息类型定义在tensorflow/core/framework/device_attributes.proto中。
message DeviceAttributes {
// Fully specified name of the device within a cluster.
string name = 1;
// String representation of device_type.
string device_type = 2;
// Memory capacity of device in bytes.
int64 memory_limit = 4;
// Platform-specific data about device t