标签:Core 生命周期 Kernel MatMul 源码 TF GPU
目录
概述
本文基于Tensorflow r1.15源码 链接 ,以MatMul Kernel的整个生命周期为例来分析Tensorflow 最核心的Core是如何实现Kernel的注册、查找、运行
TF Core
tensorflow/core 目录结构如上图,其中包含的代码相当多,如果直接看进去很快就迷失其中,以MatMul Kernel的整个生命周期为例可以将其中核心的数据结构及其关系梳理为下图
- GPU设备的控制与使用模块:把GPU设备抽象为StreamExecutor和Stream API(关于这部分内容的详细介绍,可以参考我的上一篇文章链接)和第三方的Eigen API,用于创建/销毁GPU流、启动GPU kernel、分配GPU内存、调动GPU加速库的等等,真正实现对GPU算力的使用与控制
- 计算设备抽象模块:Google工程师写代码喜欢封装再封装,所以考虑到计算设备的种类很多,所以再框架中封装一层设备抽象模块,用工厂模块创建实例
- 内存管理模块:将分配和管理计算设备内存的操作做了抽象与封装,用工厂模块创建实例
- 执行计算的上下文和Tensor:执行Tensorflow的OpKernel依赖上下文,包括Kernel的上下文和Device设备的上下文,这个上下文中包含了诸如设备对象、Kernel对象、Input Tensor、设备流 等实例,在执行OpKernel计算的时候提供对GPU设备的抽象控制
MatMul Kernel的生命周期
上图从MatMul Kernel的注册、计算图执行的时候查找MatMul Kernel实例、MatMul运行并调用到CUDA libcublas库三个层次,完整展示了MatMul Kernel的生命周期(其它Kernel也类似)
代码调用关系比较复杂,要结合TF Core核心的数据结构来理解它们的关系,这样就容易理解整个代码逻辑了。
标签:Core,生命周期,Kernel,MatMul,源码,TF,GPU 来源: https://blog.csdn.net/HaoBBNuanMM/article/details/123620066
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。