[论文解读] Design and Implementation of ShenWei Universal C/C++
ShenWei Universal C/C++ (SWUC) 是一种 C/C++ 语言扩展,用于统一 ShenWei 多核处理器中管理处理单元(MPEs)与计算处理单元(CPEs)的编程。通过引入 host、slave、infer 和 kernel 等新属性以及编译器指令,SWUC 实现了单文件、可移植的代码,简化了异构编程,并加速了现有 C++ 应用程序向 ShenWei 处理器的迁移。
The ShenWei many-core series processors powering multiple cutting-edge supercomputers are equipped with their unique on-chip heterogeneous architecture. They have long required programmers to write separate codes for the control part on Management Processing Element (MPE) and accelerated part on Compute Processing Element (CPE), which is similar to open standards like OpenCL. Such a programming model results in shattered code and bad maintainability, and also make it hard to migrate existing projects targeting commodity processors. Borrowing the experience from CUDA and DPC++ and leveraging the unique unified main memory on ShenWei many-core architecture, we propose ShenWei Universal C/C++ (SWUC), a language extension to C/C++ that enables fluent programming acrossing the boundary of MPE and CPE. Through the use of several new attributes and compiler directives, users are able to write codes running on MPE and CPE in a single file. In case of C++, SWUC further support lambda expressions on CPEs, making it possible to have the code flow better matching the logical design. SWUC also manages to make the Athread library interfaces available, easing the learning curve for original ShenWei users. These powerful features together ensures SWUC to simplify the programming on ShenWei many-core processors and migration of existing C/C++ applications.
研究动机与目标
- 解决 ShenWei 多核系统中开发模型碎片化的问题,即 MPE 和 CPE 代码必须分别编写和维护。
- 降低将现有 C/C++ 应用程序(尤其是包含模板和成员函数的应用)迁移到 ShenWei 处理器的复杂度。
- 通过支持单源编程模型,使程序员能够在同一文件中执行主机与设备代码,提升开发效率。
- 通过智能推断与基于属性的代码过滤,简化 MPE 与 CPE 边界之间的模板使用。
- 提供对标准 C++ 编译器的即插即用替代方案,工程开销极小,复用现有编译器基础设施。
提出的方法
- 引入四种新语言属性:host(在 MPE 上执行)、slave(在 CPE 上执行)、infer(根据调用函数自动确定目标)、kernel(标记 CPE 内核启动的入口点)。
- 使用编译器指令 #pragma swuc push 和 #pragma swuc pop 设置代码块的默认目标架构,实现对属性的有选择性应用。
- 将 SWUC 实现为 Sunway C/C++ 编译器的插件,运行于中间端,基于目标架构分析并过滤代码,再进行代码生成。
- 采用两遍编译模型:第一遍针对 MPE(生成控制代码和内核启动包装器),第二遍针对 CPE(生成内核启动器和设备代码),最后链接输出结果。
- 支持带有 slave 属性的 C++ lambda 表达式,实现设备端执行,提升代码模块化与逻辑结构清晰度。
- 通过 infer 属性在调用图中传播目标架构,实现 MPE 与 CPE 之间的模板实例化,避免手动模板特化。
实验结果
研究问题
- RQ1如何设计一种统一的 C++ 编程模型,以在不改变底层硬件抽象的前提下,简化 ShenWei 多核处理器上的异构编程?
- RQ2哪些机制能够实现在 MPE 与 CPE 之间无缝使用模板和函数指针,同时保持类型安全与性能?
- RQ3编译器插件方法能否有效统一 MPE 与 CPE 的代码生成,且对现有工具链的修改最小化?
- RQ4如何在 MPE-CPE 边界上支持 lambda 表达式与函数模板的使用,以减少代码重复并提升可维护性?
- RQ5SWUC 模型在多大程度上能减少将现有 C++ 应用程序迁移到 ShenWei 架构所需的工作量?
主要发现
- SWUC 允许使用 host、slave 和 kernel 等属性在单个源文件中编写 MPE 和 CPE 代码,显著减少代码碎片化。
- infer 属性通过分析调用图,自动判断函数在 MPE 和 CPE 上的可用性,减少手动注释与代码重复。
- 带有 slave 属性的 C++ lambda 表达式原生受支持,可编写更简洁、模块化更强的代码,更符合程序的逻辑结构。
- 通过 infer 属性,模板函数可自动为 MPE 和 CPE 目标实例化,无需在不同设备上手动特化模板。
- 两遍编译模型结合中间端拦截机制,可正确过滤掉非目标架构的代码,确保正确性与性能。
- SWUC 作为插件集成到现有 Sunway 编译器中,支持即插即用,集成成本极低,且与标准 C++ 完全向后兼容。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。