开发者指南:如何为XSched贡献新的XPU平台支持

📅 2026/6/30 17:50:19
开发者指南:如何为XSched贡献新的XPU平台支持
开发者指南如何为XSched贡献新的XPU平台支持【免费下载链接】xschedXSched is a preemptive scheduling framework for diverse XPUs (referring to various accelerators, such as GPUs, NPUs, ASICs, and FPGAs) across different brands, generations, and software platforms.项目地址: https://gitcode.com/openeuler/xsched前往项目官网免费下载https://ar.openeuler.org/ar/XSched是一个面向多样化XPUGPU、NPU、ASIC、FPGA的抢占式调度框架为跨品牌、跨代际和跨软件平台的异构加速器提供统一的调度接口。如果你希望为XSched添加对新XPU平台的支持这篇完整的开发者指南将为你提供清晰的实现路径和实用技巧。 XSched架构概览在开始为XSched贡献新的XPU平台支持之前让我们先了解一下XSched的核心架构。XSched采用分层设计通过统一的抽象接口实现硬件无关的调度策略。XSched框架由四个关键组件组成XShim- 负责拦截XPU驱动API调用并将命令重定向到XQueueXPreempt- 基于多级硬件模型实现XQueue接口XAL- 硬件抽象层通过调用XPU驱动程序API实现多级硬件模型接口XScheduler- 中心调度服务协调所有XQueue并执行调度策略 支持的抢占级别模型XSched采用三级硬件模型来描述XPU的调度能力这个模型是贡献新平台支持时需要理解的核心概念Level 1- 待提交命令抢占级适用于几乎所有算力硬件移植成本极低Level 2- 已提交未执行命令抢占级利用更强的硬件任务管控能力Level 3- 执行中命令抢占级实现微秒级的超低延迟抢占 贡献新平台的三步流程第一步实现拦截代码XSched提供了自动化代码生成工具大大简化了新平台的适配工作。以支持新的XPU平台为例你可以按照以下步骤操作1. 创建平台目录结构python3 tools/autogen/setup_template.py ./platforms/example --platform your_platform2. 收集平台头文件对于单头文件的平台直接将头文件复制到platforms/your_platform/hal/include/xsched/your_platform/hal目录。对于多头文件的平台使用合并工具python3 tools/autogen/merge_headers.py /path/to/platform/headers/ \ -o platforms/your_platform/hal/include/xsched/your_platform/hal/platform.h \ -e *.hpp -e unwanted_header.h3. 生成拦截代码python3 tools/autogen/gen.py \ --source platforms/your_platform/hal/include/xsched/your_platform/hal/platform.h \ --platform your_platform \ --prefix platform \ --lib /path/to/platform/library.so \ --driver platforms/your_platform/hal/include/xsched/your_platform/hal/driver.h \ --intercept platforms/your_platform/shim/src/intercept.cpp第二步定义HwQueue和HwCommand抽象HwQueue抽象实现HwQueue是硬件队列的抽象你需要继承preempt::HwQueue基类并实现相应接口抢占级别接口描述必需性Level-1GetDevice()获取HwQueue的设备类型✅ 必需Level-1GetHandle()获取HwQueue句柄✅ 必需Level-1Launch(HwCommand)启动HwCommand✅ 必需Level-1Synchronize()等待队列中所有命令完成✅ 必需Level-2Deactivate()停用HwQueue⚪ 可选Level-2Reactivate()重新激活HwQueue⚪ 可选Level-3Interrupt()中断正在运行的命令⚪ 可选Level-3Restore()恢复被中断的命令⚪ 可选重要提示只有Level-1接口是支持新XPU所必需的Level-2和Level-3接口需要额外的硬件能力支持。HwCommand抽象实现HwCommand封装了硬件命令你需要继承preempt::HwCommand基类并实现以下核心接口Enqueue()- 调用驱动程序API启动内核Synchronize()- 同步HwCommandSynchronizable()- 检查HwCommand是否可同步EnableSynchronization()- 启用HwCommand的同步功能第三步完成XShim库在platforms/your_platform/shim/src/xshim.cpp文件中你需要实现需要额外处理的函数主要目标包括同步创建XQueue- 在创建硬件队列时同步创建XQueue封装内核启动- 将内核启动封装为HwCommand并提交到XQueue确保正确性- 管理内核参数生命周期和处理同步然后修改platforms/your_platform/shim/src/intercept.cpp中的函数调用路径调用XShim函数而不是原始的驱动程序API。 具体实现示例HwQueue实现示例参考CUDA平台的实现你可以在platforms/cuda/hal/include/xsched/cuda/hal/level1/cuda_queue.h中找到Level-1队列的实现示例class YourPlatformQueueLv1 : public preempt::HwQueue { public: YourPlatformQueueLv1(PlatformStream stream); virtual void Launch(std::shared_ptrpreempt::HwCommand hw_cmd) override; virtual void Synchronize() override; virtual XDevice GetDevice() override { return xdevice_; } virtual HwQueueHandle GetHandle() override { return GetHwQueueHandle(kStream); } virtual bool SupportDynamicLevel() override { return false; } virtual XPreemptLevel GetMaxSupportedLevel() override { return kPreemptLevelBlock; } private: const PlatformStream kStream; XDevice xdevice_; };目录结构组织新的平台支持应该按照以下结构组织platforms/your_platform/ ├── CMakeLists.txt ├── README.md ├── hal/ │ ├── include/xsched/your_platform/hal/ │ │ ├── common/ │ │ ├── level1/ │ │ ├── level2/ │ │ └── level3/ │ └── src/ │ ├── common/ │ ├── level1/ │ ├── level2/ │ └── level3/ └── shim/ ├── include/xsched/your_platform/shim/ └── src/ ├── intercept.cpp └── shim.cpp 测试与验证编写测试用例为你的平台实现创建测试用例确保基本功能正常工作。可以参考现有平台的测试结构创建简单的内核启动测试验证队列创建和销毁测试命令提交和同步验证抢占功能如果支持集成测试将你的平台集成到XSched的整体测试框架中确保与其他组件的兼容性。 贡献检查清单在提交贡献前请确保完成以下检查实现了Level-1的所有必需接口正确生成了拦截代码实现了XShim库的核心函数通过了基本的单元测试更新了平台支持文档添加了平台到支持列表遵循了项目的代码风格规范 成功贡献的奖励为XSched贡献新的XPU平台支持不仅是对开源社区的宝贵贡献还能带来以下好处技术深度- 深入理解异构计算调度机制社区认可- 成为XSched核心贡献者实际应用- 让你的硬件平台获得先进的调度能力职业发展- 展示你在系统软件和异构计算领域的专业技能 最佳实践建议1. 从简单开始首先实现Level-1支持这是最基本也是最重要的级别。一旦Level-1正常工作再考虑实现更高级别的抢占功能。2. 参考现有实现仔细研究CUDA、LevelZero等现有平台的实现理解XSched的设计模式和接口约定。3. 充分利用自动化工具XSched提供的代码生成工具可以处理大部分重复性工作让你专注于平台特定的逻辑实现。4. 保持兼容性确保你的实现与XSched的现有架构保持兼容特别是XQueue抽象接口。5. 文档先行在开始编码前先阅读和理解相关文档特别是platforms/example/README.md和platforms/README.md。 相关资源官方文档platforms/README.md示例指南platforms/example/README.md调度策略开发sched/README.md项目架构docs/xsched-intro-2025-zh.md 开始你的贡献之旅现在你已经掌握了为XSched贡献新XPU平台支持的全部知识从选择一个你熟悉的XPU平台开始按照三步流程逐步实现你将为这个强大的异构计算调度框架增添新的力量。记住XSched社区欢迎所有贡献者无论你是经验丰富的系统程序员还是刚刚开始学习异构计算的新手。每一个贡献都能让XSched变得更加强大推动异构计算调度的边界。准备好开始了吗克隆XSched仓库选择一个你感兴趣的XPU平台开始你的贡献之旅吧git clone https://gitcode.com/openeuler/xsched cd xsched git submodule update --init --recursive期待看到你的精彩贡献【免费下载链接】xschedXSched is a preemptive scheduling framework for diverse XPUs (referring to various accelerators, such as GPUs, NPUs, ASICs, and FPGAs) across different brands, generations, and software platforms.项目地址: https://gitcode.com/openeuler/xsched创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考