编译器插件框架测试加固挑战
作品完成和提交方式:选择本赛题的参赛队伍需要首先复刻(Fork)本项目,然后在复刻的项目中添加参赛队员、合作完成作品开发即可,无需提交PR到赛题项目。如果作品为文档形式,也请将作品文档提交到项目代码库中。在作品完成过程中,围绕作品的相关讨论等可以以疑修(Issue)形式发布和讨论,也可使用里程碑对整个任务进行规划管理。
1. 赛题说明
编译器是操作系统中至关重要的基础软件,然而当前存在多款主流的编译器框架,任何的编译工具都需要选择某一编译器框架进行开发,当其需要使能其他框架时,便会出现重复开发的问题。
为此,openEuler社区推出了编译器插件框架(plugin framework for compiler,代码仓:插件服务端、GCC插件客户端)的创新项目,以一次开发、多编译器落地为目标,提供面向MLIR的插件开发接口,避免编译工具的重复开发。
由于编译器插件框架拥有服务端/客户端架构、基于MLIR的插件开发等特点,导致其测试方案设计存在如下挑战:
1)中间表示覆盖率挑战:中间表示(例如GCC的GIMPLE)是编译器分析、优化所需的重要内部表示。由于中间表示设计复杂且覆盖面广,为了保障插件框架能力的完整性,方案设计时需要考虑如何覆盖所有中间表示的数据结构。
2)扩展性挑战:编译器插件框架以支持多编译器为目标,因此测试方案设计时需要考虑可扩展性,以便支持LLVMIR等更多编译器框架的中间表示。
测试定位挑战:由于插件框架是由插件服务端和插件客户端组成代理模式,两者通过gRPC进行跨进程通信。进程隔离的架构带来了问题定位的挑战,需要在设计时增加对快速定位测试问题的考量。
2. 赛题要求
本题目要求参赛队伍针对上述一个或多个挑战设计测试方案,并提供相应的测试用例和自动化测试脚本。方案要求能够在openEuler操作系统环境上执行,测试用例能够以插件形式运行在GCC for openEuler编译器且能够通过主流应用的编译运行测试。
其中,自动化测试脚本的开发语言不限,支持在Linux命令行运行。脚本功能包括:1)一键启动全量或部分插件用例的编译构建测试并执行主流应用的编译运行测试;2)自动化收集测试结果,并生成测试报告。报告包括每个测试项的执行情况、通过/失败状态以及失败的详细调试信息。
测试用例要求是基于插件服务端实现的插件。插件可以从开源编译器优化pass转换而来,也可以针对挑战自行设计工具插件(可参考 ArrayWiden插件 & 对应的开源优化pass)。
3. 赛题导师
zhuyuncheng@huawei.com; wumingchuan1@huawei.com
4. 参考资料
1)ArrayWiden插件(https://gitee.com/openeuler/pin-server/blob/master/user/ArrayWidenPass.cpp)
2)开源优化pass(https://gitee.com/openeuler/gcc/blob/master/gcc/tree-ssa-loop-array-widen-compare.cc)
编译器插件框架测试加固挑战
作品完成和提交方式:选择本赛题的参赛队伍需要首先复刻(Fork)本项目,然后在复刻的项目中添加参赛队员、合作完成作品开发即可,无需提交PR到赛题项目。如果作品为文档形式,也请将作品文档提交到项目代码库中。在作品完成过程中,围绕作品的相关讨论等可以以疑修(Issue)形式发布和讨论,也可使用里程碑对整个任务进行规划管理。
1. 赛题说明
编译器是操作系统中至关重要的基础软件,然而当前存在多款主流的编译器框架,任何的编译工具都需要选择某一编译器框架进行开发,当其需要使能其他框架时,便会出现重复开发的问题。 为此,openEuler社区推出了编译器插件框架(plugin framework for compiler,代码仓:插件服务端、GCC插件客户端)的创新项目,以一次开发、多编译器落地为目标,提供面向MLIR的插件开发接口,避免编译工具的重复开发。 由于编译器插件框架拥有服务端/客户端架构、基于MLIR的插件开发等特点,导致其测试方案设计存在如下挑战: 1)中间表示覆盖率挑战:中间表示(例如GCC的GIMPLE)是编译器分析、优化所需的重要内部表示。由于中间表示设计复杂且覆盖面广,为了保障插件框架能力的完整性,方案设计时需要考虑如何覆盖所有中间表示的数据结构。 2)扩展性挑战:编译器插件框架以支持多编译器为目标,因此测试方案设计时需要考虑可扩展性,以便支持LLVMIR等更多编译器框架的中间表示。 测试定位挑战:由于插件框架是由插件服务端和插件客户端组成代理模式,两者通过gRPC进行跨进程通信。进程隔离的架构带来了问题定位的挑战,需要在设计时增加对快速定位测试问题的考量。
2. 赛题要求
本题目要求参赛队伍针对上述一个或多个挑战设计测试方案,并提供相应的测试用例和自动化测试脚本。方案要求能够在openEuler操作系统环境上执行,测试用例能够以插件形式运行在GCC for openEuler编译器且能够通过主流应用的编译运行测试。 其中,自动化测试脚本的开发语言不限,支持在Linux命令行运行。脚本功能包括:1)一键启动全量或部分插件用例的编译构建测试并执行主流应用的编译运行测试;2)自动化收集测试结果,并生成测试报告。报告包括每个测试项的执行情况、通过/失败状态以及失败的详细调试信息。 测试用例要求是基于插件服务端实现的插件。插件可以从开源编译器优化pass转换而来,也可以针对挑战自行设计工具插件(可参考 ArrayWiden插件 & 对应的开源优化pass)。
3. 赛题导师
zhuyuncheng@huawei.com; wumingchuan1@huawei.com
4. 参考资料
1)ArrayWiden插件(https://gitee.com/openeuler/pin-server/blob/master/user/ArrayWidenPass.cpp) 2)开源优化pass(https://gitee.com/openeuler/gcc/blob/master/gcc/tree-ssa-loop-array-widen-compare.cc)