Page 29 - 《软件学报》2025年第12期
P. 29
5410 软件学报 2025 年第 36 卷第 12 期
生成配置, 其功能与 SACA C 中的运行时配置参数类似. 在本示例中, spawn_mode 参数用于设定当前 Kernel 的运
行模式, 它提供了两个选项: SINGLE_CG 和 ALL_CGS, 分别代表单核组模式 (启用 64 个 CPE) 和全片共享模式 (启
用 384 个 CPE). 另外, flush_cache 参数则用于决定在当前 Kernel 执行结束后, 是否需要对从核的 Cache 进行刷新.
特别是当 CPE 的片上存储空间部分被设定为软件管理的 LDCache 时, 必须开启 flush_cache 功能, 以确保 Cache
中的最新数据能够及时写回到主存储器中.
(a) MPE SACA C 代码 (b) CPE SACA C 代码
图 7 使用 SACA C API 实现的向量加法示例
图 8 基于 SACA.jl 实现的 Julia 语言向量加法程序示例
在当前版本的 SACA 实现中, athread_spawn 接口采用轻量化实现方式, 通过类型为 void *的指针传递 Kernel
参数以优化线程组创建速度. 当参数有多个时, 需要用户在 athread_spawn 前将参数显式组织成结构体. 为了简化
用户使用 SACA.jl 编程的复杂度, 我们提供了 pack_arguments 方法用于打包 Kernel 参数. 当 Kernel 函数拥有多个
参数时, @saca 宏会自动将其展开为图 9 中第 4–8 行所示的调用形式, 并通过 CPE 编译器在 Kernel 入口处插入对
参数的解析代码.
图 9 SACA.jl 对 Kernel 参数 pack 的代码示例

