# source-code-migration **Repository Path**: ShiruiTian/sptensor ## Basic Information - **Project Name**: source-code-migration - **Description**: source-code-migration - **Primary Language**: C++ - **License**: MIT - **Default Branch**: scm-branch - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 139 - **Created**: 2026-05-27 - **Last Updated**: 2026-05-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # sptensor `sptensor` 面向有源码算子的迁移与 HIP/DCU 代码生成场景,当前主要内容集中在 `SourceCodeMigration` 目录。仓库包含算子源码提取脚本、openDNN 迁移实验代码,以及用于把可分析 C 源码区域转换为 HIP 代码的 `c2hip` 工具链。 ## 目录结构 ```text sptensor/ ├── run.sh ├── README.md ├── c2hip/ └── SourceCodeMigration/ ├── extractor_openblas.py └── for_openDNN/ ``` ## 快速构建 在仓库根目录执行: ```bash ./run.sh ``` 该脚本会自动初始化 `c2hip/isl` 和 `c2hip/pet` 及其递归子模块,然后进入 `c2hip` 执行配置与编译流程。默认使用: ```text GMP_PREFIX=/public/software/compiler/gcc-11.4.0/gmp JOBS=8 ``` 如需调整 GMP 路径或并行编译数,可以覆盖环境变量: ```bash GMP_PREFIX=/path/to/gmp JOBS=16 ./run.sh ``` 编译完成后,入口程序位于: ```text c2hip/c2hip ``` 可用以下命令验证: ```bash ./c2hip/c2hip --version ``` ## 子模块 `c2hip` 依赖两个顶层子模块: ```text c2hip/isl c2hip/pet ``` 这些子模块内部还包含递归子模块。若需要手动初始化,可以执行: ```bash git submodule update --init --recursive c2hip/isl c2hip/pet ``` 父仓库只记录 `isl` 和 `pet` 的子模块指针,不直接跟踪它们内部的源码文件。 ## 主要模块 ### c2hip `c2hip` 是当前仓库的核心代码生成工具。它以带有静态控制区域标记的 C 源码为输入,通过 `pet` 和 `isl` 完成源码解析、依赖分析、调度生成和 GPU 代码打印,并支持生成 HIP 目标代码。 常用形式: ```bash cd c2hip ./c2hip --target=hip input.c ``` 其中输入源码中需要用 `#pragma scop` 和 `#pragma endscop` 标出待分析和迁移的循环区域。 ### OpenBLAS 算子提取 `SourceCodeMigration/extractor_openblas.py` 用于从 OpenBLAS 构建记录中恢复真实编译命令,并按算子粒度提取接口函数、kernel 函数和必要依赖。 ### openDNN 迁移实验 `SourceCodeMigration/for_openDNN` 保存 openDNN 算子迁移相关实验代码,主要用于分析 CUDA 工程中的接口函数、kernel launch、`__global__` kernel 以及相关 helper 代码。 ## 推荐流程 1. 从原始工程构建记录中恢复真实编译命令。 2. 按算子提取接口、kernel 和依赖代码。 3. 在待迁移循环区域添加 `#pragma scop` 和 `#pragma endscop`。 4. 使用 `c2hip --target=hip` 生成 HIP 代码。 5. 编译并验证生成代码在 HIP/DCU 环境中的正确性。