本文严重依赖LeiWang1999的NVDLA Parser | Loadable Analysis
首先,安装flatbuffers(1.6.0)
git clone https://github.com/google/flatbuffers.git
git checkout v1.6.0
cmake -G "Unix Makefiles"
make
make install
并生成解析所需的loadable_generated.h文件(loadable.fbs由nvdla/sw提供)
flatc -c ./external/loadable.fbs
编译parser代码
mkdir build
cd build
cmake ..
进入/build/examples文件夹,运行make命令生成解析loadable的程序
cd ./examples
make
注意!待解析的loadable文件位置会在每一个example的c++代码的开头出定义(如下面代码所示),如需解析自己生成的loadable文件,需在对应位置更改路径
const std::string filename = "../../data/lenet-mnist-caffe/fast-math.nvdla";
可运行的应用程序:
- parse_read_version:不明白是用来做什么的,这里代表的不是使用的flatbuffers的版本,估计是compiler开发的版本?。
- parse_read_task_list:任务列表,就两个任务,第一个是DLA、第二个是EMU,应该分别代表硬件加速核和仿真器,tasklisk的address_list代表了每个task访问地址的列表。
- parse_read_memory_list:内存列表,我们可以通过task_list->address_list拿到addres_list的index,然后通过address_list->memory_id找到读取哪一块内存。
- parse_read_address_list:地址列表。
- parse_read_event_list:在runtime里似乎没有用到。
- parse_read_blobs:存储数据的地方,分析blob的每个字段都有name,对应了memory里的name。。
- parse_read_tensor_desc_list:定义了输入层和输出层的tensor描述。
- parse_read_reloc_list:不知道干嘛的。 parse_read_submit_list:也不知道干嘛的。