20200315
Plan
- LeetCode Daily
- TensorFlow Graph
Notes
LeetCode Daily
今天的题目是 695. 岛屿的最大面积。开始我觉得是动态规划,但是结果发现是深度优先搜索。
思路 1:深度优先搜索
- 对任意一个节点,如果它是不存在,或者为 0,则返回与它连通的面积 0,否则进入 2
- 将其值标记为 0,保障其只被访问了一次
- 加上上/下/左/右节点的联通面积,这四个节点的访问方式同上面的 1 和 2
- 外层循环,计算以每个节点开始,可以得到的最大岛屿面积,取最大值
思路 2:深度优先 + 栈
与思路 1相同,只是改成用栈保存相邻未被访问的节点。
思路 3:广度优先
与思路 2相同,这次改成用队列保存相邻但是未被访问的节点。
TensorFlow 代码阅读
接着昨天的描述,今天需要弄清楚几个关键数据结构的意义和他们之间的关系。
TensorFlow Graph
Graph 数据数据结构的定义路径为 tensorflow/tensorflow/core/graph/graph.h
- Graph 的相关数据结构主要是Node和Edge,其中Edge分为Edge和ControlEdge
- Graph 中,有两种预定义的node,分别为 source node 和 sink node
- Graph 中的 node 包含了它们所在的 device 信息
- Graph 中,特别针对 while node 进行了处理
一个遗留问题是,the control flow in tensorflow, what is contrl edge and while node?
mlir::MLIRContext
这一数据结构的定义,在文档当中并没有完整的说明,只能查看 llvm 的代码。具体的目录是 llvm-project/mlir/include/mlir/IR/MLIRContext.h。
- MLIRContext 是一个包含了一系列的 MLIR modules 的顶层对象
- dialects 可以被注册到 MLIRContext 中
- operations 可以被注册到 MLIRContext 中
- 一个 context 中包含许多的 MLIRContexImpl
mlir::OwingModuleRef
数据结构定义的路径是 llvm-project/mlir/include/mlir/IR/Module.h ,但,这个数据结构只是一个 module 的包装器,所以问题转移成了 module 数据结构是什么
More
后续需要看的
- control flow in tensorflow
- MLIRContextImpl 数据结构
- mlir 中的 module 数据结构
完成之后,我需要回到 3 月 14 日的代码阅读内容,弄明白 tensorflow graph 是怎么变成 mlir 的。