docs: update README with project overview, build instructions, and API status
面向国产新一代超算系统的 Kokkos 兼容性能可移植加速库。
参考 Kokkos 设计,采用异构后端、统一前端架构:
extern "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后端, 已实现)
# 开发机 — 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
AXE_ENABLE_OPENMP
AXE_ENABLE_EMU
AXE_ENABLE_HIP
AXE_ENABLE_SUNWAY
AXE_ENABLE_MTDSP
AXE_BUILD_TESTS
#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
Kokkos::initialize
Kokkos::finalize
Kokkos::View<T*>
Kokkos::MemoryUnmanaged
Kokkos::create_mirror_view
Kokkos::parallel_for
Kokkos::parallel_reduce
Kokkos::LayoutLeft
LayoutRight
LayoutStride
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
斧库
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
axelib
面向国产新一代超算系统的 Kokkos 兼容性能可移植加速库。
设计思路
参考 Kokkos 设计,采用异构后端、统一前端架构:
extern "C"函数指针桥接void*,零运行时多态开销目标平台
构建
AXE_ENABLE_SERIALAXE_ENABLE_OPENMPAXE_ENABLE_EMUAXE_ENABLE_HIPAXE_ENABLE_SUNWAYAXE_ENABLE_MTDSPAXE_BUILD_TESTS使用
编译:
已实现 API (一期)
Kokkos::initialize/Kokkos::finalizeKokkos::View<T*>— 分配、浅拷贝、subview、deep_copyKokkos::MemoryUnmanaged— 裸指针包装Kokkos::create_mirror_viewKokkos::parallel_for— RangePolicy / MDRangePolicy(2D,3D)Kokkos::parallel_reduce— Sum / Prod / Min / MaxKokkos::LayoutLeft/LayoutRight/LayoutStride目录结构
测试
22 个测试用例,覆盖 View 操作、并行执行、归约、初始化/终结、多后端共存。
许可
见 LICENSE