在完成代码生成后,就需要对生成的代码进行编译,这里采用一种叫做 jit 的编译技术来进行。
所谓 jit,就是just in time,可以理解为实时编译,它是在程序运行过程中对程序生成的一些中间文件进行编译,从而生成机器码的技术。
对应到 codegen 场景下,由于 codegen 中生成的代码是在程序运行时生成的,因此很适合使用 jit 编译来进行。
进行 jit 编译
那么怎么在程序运行时进行编译呢?
其中很重要的一步,是需要将编译命令嵌入到程序中,在程序运行时以系统调用的形式来执行编译命令。
在5th_codegen/resnet_codegen.cc 中,封装了一个 CompileModule 函数,用来完成对生成的代码文本的 jit 编译过程。
-
使用 std::system 函数来完成对于系统命令的调用。
system 函数可以调用任意的系统命令,例如在 linux 环境下的返回上一级目录的命令(cd ..) ,可以使用 std::system("cd ../") 来完成。
-
使用 g++ 作为编译器完成从以 .cc 为后缀的源代码文件(也就是codegen生成的文本文件,如 codeg
本文介绍了在程序运行时通过JIT(Just In Time)编译技术对codegen生成的代码进行编译的过程。讲解了如何利用std::system函数在运行时执行编译命令,使用g++编译源代码并链接外部库,生成动态链接库。建议使用带有注释的新版代码进行学习,为后续加载函数进行模型推理做准备。
订阅专栏 解锁全文
853

被折叠的 条评论
为什么被折叠?



