2019-7-5季度报告总结

个人总结
1、前期分析bambu和Vivado_HLS struct,后期处理分配的struct解决工作。
2、熟练处理bc,掌握LLVM IR常用API,确定struct算法流程框架,部分的struct case可以解决成功,编译运行结果正确。7月将对struct所有情况都可以全部处理,测试不同case进行工作完善。
3、掌握对问题解决的基本算法流程,code style遵守公司要求。编程能注重编程的鲁棒性和拓展性了,提高debug能力,六月编程效率提高很多。
4、今后还需多思考多分析,对问题解决方案还不能及时提出有效算法,编程需要提高的地方还很多,将继续努力!

工作汇报:
四月份:

1、分析bambu的simulation编译运行方式,为esl自动编译的脚本做进一步优化,完善结尾测试工作。

2、配置llvm debug版本,分析llvm Optimizer,寻找编写bc文件到生成可执行文件是否存在处理struct中间文件。

3、分析不同struct case,利用Vivado_HLS分析未拆分的struct和拆分后struct bc文本差异和编译运行时间差别。

五、六月份:

接手HLS组内分配的struct解决工作。

1、熟悉llvm的基本框架和LLVM Language Reference Manual,为编程和调用API做准备。

2、制定struct拆分的算法流程,分析需要解决struct的不同case,确定不同case情况的处理函数,

3、代码编写,模块化细分各种处理情况,不断debug处理各种IR编译报错,不断提高对struct处理的灵活性和可拓展性。

4、确定struct解决工作的整体流程框架,前期对bc文件预处理和struct替换处理函数基本写完,目前部分的struct case可以解决成功,编译运行结果正确。

工作心得:

1、在调用IR的API时出现大量的调用类型参数出错和删除语句内存泄露等问题,大多都是未详读并思考API的定义和用法导致报错。

2、开始处理struct问题时,因不熟处理流程和解决方法,先只对包含一个int和char类型变量的struct的c程序进行编程,掌握了llvm的Value、user、constant与Module、Function、BasicBlock、Instruction层级关系,熟练对llvm IR的bc文件解读并进行编程修改,提高了对llvm IR运用的理解与熟练度。

3、第二阶段就是对struct复杂情况的处理,先对struct出现情况分类,思考如何解决struct方法,整体自己编程思维逻辑,通过伪代码进行算法设计,确定struct解决工作的整体流程框架。

4、算法流程是对BC的预处理和replace struct,预处理针对memcpy、bitcast等进行指令等价替换,replace struct则分为四步,(1)遍历module,检测是否存在struct成员变量。(2)对检测存在含有struct成员变量时,利用processArray()和processStruct()行struct子成员变量分离并创建独立变量,在IR中生成一条该变量读取instruction,用作替代原有instruction。(3)遍历IR中所有的Instruction语句,对包含struct的语句解析,利用新生成的instruction进行替换并删除原有语句。(4)最后验证算法的正确性。

5、对bc文件修改出错过程中,总结诸多问题,为HLS相关工作打下基础。

通过这三个月,对算法设计流程有个雏形和一套简单的解决方案,code编程能力得到很大提升,开始关注code的鲁棒性和拓展性,编程过程中不断总结llvm API知识点,对出现的诸多问题进行debug解决,以后编程也会时刻思考IR的语法规则,尽可能的避免错误,即使遇到复杂错误时候,也具备分析错误的能力,对常见的错误能够迅速找出并解决。最重要的一点就是多思考多写代码,对问题解决方案还未能及时提出有效算法流程,感谢小组成员的帮忙分析与解决,进一步提高独立解决问题能力,并针对问题关键点提高组员沟通效率。下一步将对struct所有情况都可以全部处理,测试不同case进行工作完善。
2019-7-5季度报告总结_第1张图片

你可能感兴趣的:(llvm)