存__attribute__((kernel))标注的函数,其余代码移除或注释;当使用-mslave编译时,保留__attribute__((slave))标注的函数,同时处理kernel标注的函数,生成slave_前缀避免符号冲突。混合链接时,通过-mhybrid模式处理不同架构的obj文件。
2022/10/13PACMAN@TsinghuaUniversity8插件工作流程1. 预处理阶段:识别并记录__attribute__((kernel))、__attribute__((slave))、__attribute__((host))标注的函数。
2. 词法分析与语法分析:对源代码进行解析,构建抽象语法树(AST)。
3. 语义分析:检查标注的正确性,如kernel函数是否由主核调用,slave函数是否由从核调用等。
4. 代码生成:根据不同的编译选项,修改AST,生成对应的主机或从机代码。
- 对于kernel函数,生成从核入口函数,并处理参数传递和数据格式转换。
- 对于slave函数,生成带有slave_前缀的函数。
- 对于host函数,保持原样。
5. 优化与代码生成:应用GCC的优化技术,生成目标代码。
6. 链接阶段:在-mhybrid模式下,处理不同架构的符号冲突,完成混合链接。
2022/10/13PACMAN@TsinghuaUniversity9挑战与解决方案挑战1:GCC插件开发复杂,需要深入理解GCC的内部工作原理。
解决方案:学习GCC的开发者文档,熟悉GCC的MELT工具,用于调试和测试插件。
挑战2:申威众核处理器的特异性,需要适配其独特的指令集和编程接口。
解决方案:研究申威处理器的架构文档,了解其硬件特性,针对性地设计语言扩展和编译器插件。
挑战3:保证兼容性和移植性,使代码能在不同架构上运行。
解决方案:使用标准C/C++语法进行扩展,尽可能避免依赖特定平台的库函数。同时,插件应具有良好的可配置性,适应不同的处理器后端。
2022/10/13PACMAN@TsinghuaUniversity10未来展望1. 扩展到其他异构处理器:将该插件模型应用于更多类型的异构系统,如GPU、FPGA等。
2. 更高级别的编程模型:开发更抽象的编程接口,简化用户编写异构程序的难度。
3. 自动化工具链优化:集成自动化性能分析和优化工具,帮助开发者自动调整代码以获得更好的性能。
4. 社区建设:鼓励开源,建立社区,吸引更多的开发者参与,共同维护和改进插件。
总结,这个基于GCC的异构处理器编程插件项目旨在解决申威众核处理器的编程难题,通过语言扩展和编译器插件技术,简化主从核代码编写,实现一份代码生成两份二进制的目标,提高代码的可读性和可维护性。项目的成功实施不仅有助于提升申威处理器的软件生态,也为其他异构计算平台提供了参考和借鉴。