-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Open
Description
背景
现有稀疏LU分解CUDA代码未采用StarPU任务调度框架,难以充分利用异构多核资源。需将其重构为StarPU任务形式,提升并发性和可扩展性。
重构任务
-
数据传输方式调整:
- 使用StarPU API注册数据句柄(starpu_data_handle_t),让StarPU自动管理数据的输入输出。
- 保证所有相关显存/主存数据均通过句柄注册和获取。
-
创建StarPU任务:
- 用starpu_task_create定义每一步LU分解为独立任务。
- 明确任务间的依赖关系(通过依赖描述或starpu_task_declare_deps等接口)。
- 提交任务到StarPU运行时(starpu_task_submit)。
-
定义codelet:
- 编写starpu_codelet结构体,设置CPU/CUDA处理函数指针、数据访问模式。
- 为LU分解/扰动/子矩阵更新等操作分别建立对应codelet。
-
codelet函数实现:
- codelet的处理函数需通过starpu_data_handle_t获取数据指针,保证格式满足原CUDA内核要求。
- 在获得数据指针后,按原有逻辑调用对应CUDA kernel完成计算。
注意事项
- 无需main函数,所有代码片段需可集成到单文件、与其他LU分解代码协同。
- 保证StarPU任务正确表达LU计算的流程和依赖。
- 保证内存管理和数据一致性。
建议实现结构
- 增加数据注册与任务提交辅助函数。
- 每个kernel的调用通过对应codelet函数包装。
- 任务依赖由level、列间关系决定。
标签
- enhancement
如有任何问题或建议,欢迎交流。
Metadata
Metadata
Assignees
Labels
No labels