![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
tensorflow
汪星人来地球
这个作者很懒,什么都没留下…
展开
-
TensorFlow源码分析(10):TensorFlow的Device类与分布式计算集群
文章(7)介绍的DeviceBase类是TensorFlow设备的基类,它提供了CPU,GPU管理需要的基本数据结构。Device类在DeviceBase的基础上,添加了一些新的数据结构,这些数据结构覆盖了内存,显存管理,线程同步,远程调用等功能。粗略说来,DeviceBase专注于单个设备的管理,而Device类也关注多设备协作。首先看Device类的构造函数,路径为tensorflow/c...原创 2020-02-22 10:26:07 · 623 阅读 · 0 评论 -
TensorFlow源码分析(9):Proto Buffer生成的C++类
文章(8)中提到,Proto Buffer提供了一个工具,可以为不同编程语言,自动生成支持Proto Buffer协议的数据类型。本文继续以DeviceAttributes类为例,介绍C++的Proto Buffer类。默认情况下,Proto Buffer生成的C++类都定义在.pb.h文件中。TensorFlow也沿用了这一规则。DeviceAttributes类定义在core/framew...原创 2020-02-06 12:23:49 · 591 阅读 · 0 评论 -
TensorFlow源码分析(8):Proto Buffer简介
TensorFlow除了大量使用Eigen和CUDA等计算库函数之外,还大量使用了Proto Buffer。Proto Buffer是一个数据传输协议,它可以将C++,Python和Java创建的对象序列化为二进制文件。这样,我们可以很轻松地实现在不同的设备上运行的用不同编程语言实现的不同进程之间,实现数据传送。但是,并非所有的对象,都可以用Proto Buffer传输。要使用Proto Bu...原创 2020-01-26 11:53:58 · 532 阅读 · 0 评论 -
TensorFlow源码分析(7):TensorFlow的DeviceBase类
在文章(5)中说过,TensorFlow在定义设备的时候,不是把它们分成CPU、GPU、TPU设备等类别,而是分成本地设备和远程设备这两个类别。这样的分类方式,也有其方便之处。因为有许多的运算,需要CPU和GPU协同工作。如果强硬地把它们放在两个类中,会带来许多麻烦。而分成本地设备和远程设备,实现逻辑就非常清晰明了。本地设备只需调用底层的库函数(如Eigen, CUDA,SYCL, OpenCL等...原创 2020-01-23 13:33:34 · 522 阅读 · 0 评论 -
TensorFlow源码分析(6):Eigen的Simple Thread Pool实现原理
前文讲过,TensorFlow的多线程机制是基于Eigen库。因此,在继续研究TensorFlow代码之前,有必要研究一下Eigen库的多线程实现。相关的代码参见https://github.com/libigl/eigen/tree/master/unsupported/Eigen/CXX11/src/ThreadPool。在Eigen库中,实现了两种线程管理方式,即NonBloc...原创 2020-01-07 08:21:30 · 2244 阅读 · 0 评论 -
TensorFlow源码分析(5):TensorFlow的设备类型
文章(4)简要介绍了OpContextConstruction对象的成员变量。从本文开始,对这些成员变量进行详细分析。首先需要分析的是设备类型和设备这两个对象。TensorFlow关于设备类型的定义非常简单。它定义在tensorflow/core/framework/types.h中。class DeviceType { public: DeviceType(const char*...原创 2019-12-24 17:13:23 · 387 阅读 · 0 评论 -
TensorFlow源码分析(4):OpKernelContruction类的构造函数
在文章(2)中,介绍了ConstantOp类的构造函数。构造函数中唯一的一个参数是OpKernelConstruction类型的对象。这个对象包含了操作类需要的所有输入,参数以及运行环境。它定义在tensorflow/core/framework/op_kernel.h文件中。OpKernelConstruction类的成员函数比较多,无法在一篇文章中一一列举。本文先从它的构造函数入手,分析它的成...原创 2019-12-17 11:57:40 · 610 阅读 · 0 评论 -
TensorFlow源码分析(3):ConstantOp 类的Compute函数
在文章(2)中分析了ConstantOp类的构造函数。本文介绍Compute函数。ConstantOp类的Compute函数,可以说是非常简单,因为构造函数已经几乎将所有的工作都完成了。Compute函数的定义在tensorflow/core/kernels/constant_op.cc文件中。void ConstantOp::Compute(OpKernelContext* ctx) {...原创 2019-12-07 17:09:36 · 468 阅读 · 0 评论 -
TensorFlow源码分析(2):ConstantOp类的构造函数
在文章(1)中,我们说到TensorFlow的操作类中,最重要的两个函数是构造函数和Compute函数。这篇文章,先介绍ConstantOp类的构造函数。它定义在tensorflow/core/kernels/constant_op.cc文件中。ConstantOp::ConstantOp(OpKernelConstruction* ctx) : OpKernel(ctx, Stri...原创 2019-12-03 21:53:11 · 568 阅读 · 0 评论 -
TensorFlow源码分析(1):ConstantOp 创建常量Tensor
由于项目的原因,最近在学习TensorFlow的源码。刚面对TensorFlow源码时,遇到各种基本概念,千头万绪,无处着手。于是思虑许久,觉得应该先自底向上,从具体的操作开始,理清基本的概念和数据结构。有了一定的积累之后,再自顶向下,提纲挈领,通其概要。这样或许才是最高效的学习方法。循着这样的思路,我选择了TensorFlow中最简单的一个操作,即ConstantOp作为切入点。顾名思义,C...原创 2019-11-27 22:56:50 · 432 阅读 · 0 评论