上一节简单介绍了代码生成的逻辑,并且通过一个例子来进行了代码生成的演示。
在本项目C++实现的 resnet50 中,也是通过上述的代码生成逻辑来完成的,代码在:cv_learning_from_scratch: AI 视觉入门、从零手写 resnet50 - Gitee.com
resnet50 的代码生成思路为:
1. 先预先运行一遍模型,在核心计算函数的地方,通过输出字符串的形式,将关键信息(如内存地址、一些层的参数)作为确定值固定下来,然后构造相关算法逻辑的字符串流,输出到文本文件中。
2. 生成的所有代码存放在 5th_codegen/ 下的 codegen 目录下。
3. 程序运行(执行 ./resnet) 时会进行 jit 编译,调用相关编译命令对生成的代码文本进行编译,编译成动态库。