目录

axelib

面向国产新一代超算系统的 Kokkos 兼容性能可移植加速库。

设计思路

参考 Kokkos 设计,采用异构后端、统一前端架构:

  • 前端:C++17 Header-Only 模板库,与 Kokkos API 兼容
  • 后端:各平台用原生语言独立编译,通过 extern "C" 函数指针桥接
  • 桥接:编译期类型擦除,模板参数 → C 函数指针 + void*,零运行时多态开销
用户代码 (Kokkos API 兼容)
        │
   ┌────┴──────────────────────────────────┐
   │        axelib 前端 (C++17 Header)       │
   │  View / parallel_for / RangePolicy …  │
   │  类型擦除: lambda → fn ptr + void*     │
   └────┬──────────────────────────────────┘
        │ extern "C" ABI (12 函数/后端)
   ┌────┼────┬──────────┐
   ▼    ▼    ▼          ▼
 HIP  Sunway MTDSP  Serial/OpenMP/EMU
(加速器后端)          (CPU后端, 已实现)

目标平台

平台 加速器 编程模型 状态
x86_64 (开发机) CPU Serial / OpenMP / EMU ✅ 完成
曙光新一代 国产 DCU HIP ⏳ 待资源
神威新一代 申威众核 SW ACC ⏳ 待资源
天河新一代 迈创 MT DSP DSP SDK ⏳ 待资源

构建

# 开发机 — 3 个 CPU 后端
cmake -DAXE_ENABLE_SERIAL=ON -DAXE_ENABLE_OPENMP=ON -DAXE_ENABLE_EMU=ON \
      -DAXE_BUILD_TESTS=ON ..
make -j4 && ctest
选项 说明
AXE_ENABLE_SERIAL CPU 串行后端(调试基线)
AXE_ENABLE_OPENMP CPU OpenMP 多核后端
AXE_ENABLE_EMU CPU 多线程模拟后端(多后端测试)
AXE_ENABLE_HIP 曙光 HIP 后端
AXE_ENABLE_SUNWAY 神威众核后端
AXE_ENABLE_MTDSP 天河 DSP 后端
AXE_BUILD_TESTS 构建测试 (需要 GTest)

使用

#include <Kokkos/Kokkos_Core.hpp>

int main() {
    Kokkos::initialize();

    const int N = 1000;
    Kokkos::View<double*> a("a", N);
    Kokkos::View<double*> b("b", N);

    Kokkos::parallel_for(Kokkos::RangePolicy<>(0, N),
        KOKKOS_LAMBDA(int i) {
            a(i) = i;
            b(i) = a(i) * 2.0;
        });

    Kokkos::Sum<double> sum;
    Kokkos::parallel_reduce(Kokkos::RangePolicy<>(0, N),
        [&](int i, double& partial) { partial += a(i); }, sum);
    printf("sum = %f\n", sum.reference());

    Kokkos::finalize();
}

编译:

g++ -std=c++17 -DAXE_ENABLE_SERIAL -I include app.cpp \
    build/libaxelib_core.a -o app

已实现 API (一期)

API 状态
Kokkos::initialize / Kokkos::finalize
Kokkos::View<T*> — 分配、浅拷贝、subview、deep_copy
Kokkos::MemoryUnmanaged — 裸指针包装
Kokkos::create_mirror_view
Kokkos::parallel_for — RangePolicy / MDRangePolicy(2D,3D)
Kokkos::parallel_reduce — Sum / Prod / Min / Max
Kokkos::LayoutLeft / LayoutRight / LayoutStride
7 种内存空间 (Host / HIP / Sunway / MTDSP 系列)
SpaceRegistry 注册式空间扩展

目录结构

axelib/
├── include/Kokkos/              # C++17 前端 (Header-Only)
│   ├── Kokkos_Core.hpp          # 入口头文件
│   ├── Kokkos_Core_fwd.hpp      # 前向声明 + KOKKOS_LAMBDA 宏
│   ├── Core/                    # View, Parallel, Policy, Layout, MemorySpace
│   ├── Impl/                    # BackendBridge, SpaceRegistry, ViewMapping
│   └── Setup/                   # 平台检测 + BackendId 枚举
├── src/                         # 运行时核心
│   ├── Kokkos_Core.cpp          # initialize / finalize / register_backend
│   └── Kokkos_Impl.cpp          # 内存追踪 / 泄漏检测
├── backends/                    # 后端实现 (12 C ABI 函数/后端)
│   ├── serial/                  # Serial 后端 (for 循环)
│   ├── openmp/                  # OpenMP 后端 (#pragma omp)
│   └── emu/                     # EMU 后端 (std::thread)
├── tests/
│   ├── unit/                    # 前端单元测试 (View, ParallelFor/Reduce)
│   └── integration/             # 集成测试 (E2E, 多后端共存)
├── examples/
│   └── 01_hello_world/          # Hello World
├── cmake/                       # FindHIP / FindSunway / FindMTDSP
├── docs/superpowers/            # 设计规格 + 实现计划
│   ├── specs/                   # 设计规格文档
│   └── plans/                   # 实现计划
└── CMakeLists.txt

测试

22 个测试用例,覆盖 View 操作、并行执行、归约、初始化/终结、多后端共存。

ctest --output-on-failure
# 100% tests passed, 0 tests failed out of 22

许可

LICENSE

关于

斧库

672.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号