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  的代码示例
   24   25   26   27   28   29   30   31   32   33   34