Skip to content

将稀疏LU分解代码重构为StarPU任务框架形式 #402

@wave-sky

Description

@wave-sky

背景

现有稀疏LU分解CUDA代码未采用StarPU任务调度框架,难以充分利用异构多核资源。需将其重构为StarPU任务形式,提升并发性和可扩展性。

重构任务

  1. 数据传输方式调整

    • 使用StarPU API注册数据句柄(starpu_data_handle_t),让StarPU自动管理数据的输入输出。
    • 保证所有相关显存/主存数据均通过句柄注册和获取。
  2. 创建StarPU任务

    • 用starpu_task_create定义每一步LU分解为独立任务。
    • 明确任务间的依赖关系(通过依赖描述或starpu_task_declare_deps等接口)。
    • 提交任务到StarPU运行时(starpu_task_submit)。
  3. 定义codelet

    • 编写starpu_codelet结构体,设置CPU/CUDA处理函数指针、数据访问模式。
    • 为LU分解/扰动/子矩阵更新等操作分别建立对应codelet。
  4. codelet函数实现

    • codelet的处理函数需通过starpu_data_handle_t获取数据指针,保证格式满足原CUDA内核要求。
    • 在获得数据指针后,按原有逻辑调用对应CUDA kernel完成计算。

注意事项

  • 无需main函数,所有代码片段需可集成到单文件、与其他LU分解代码协同。
  • 保证StarPU任务正确表达LU计算的流程和依赖。
  • 保证内存管理和数据一致性。

建议实现结构

  • 增加数据注册与任务提交辅助函数。
  • 每个kernel的调用通过对应codelet函数包装。
  • 任务依赖由level、列间关系决定。

标签

  • enhancement

如有任何问题或建议,欢迎交流。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions