一个用于核心外和并行计算的框架
| Documentation | Build Status |
|---|---|
什么是 Dagger?
Dagger.jl 通过在所有 CPU 核心、GPU 甚至多台计算机上并行运行任务,自动加速您的 Julia 代码,而无需您自行管理复杂的协调工作。只需使用 Dagger.@spawn(类似于 @async)包裹您的函数调用,Dagger 就会确定分发工作和移动数据的最优方式,使其对于嵌套循环、大型数据集和 GPU 加速特别强大,否则这些场景需要大量手动并行化。
Dagger.jl 的核心是一个深受 Dask 启发的调度器。它可以高效地在许多 Julia 工作进程(通过 Distributed.jl 或 MPI)和线程上,以及 GPU 上运行表示为 有向无环图(DAGs)的计算。
- DTable 已从本仓库中移出。您现在可以在 这里 找到它。*
安装
Dagger.jl 可以使用 Julia 包管理器进行安装。在 Julia REPL 中输入 "]" 进入 Pkg REPL 模式,然后运行:
pkg> add Dagger
或者,等效地,通过 Pkg API 安装 Dagger:
julia> import Pkg; Pkg.add("Dagger")
用法
安装完成后,可以使用 using Dagger 加载 Dagger 包,或者如果
你想使用 Dagger 进行分布式计算,可以将其加载为:
using Distributed; addprocs() # Add one Julia worker per CPU core
using Dagger
您可以运行以下示例,以查看 Dagger 如何轻松实现并行性:
# This runs first:
a = Dagger.@spawn rand(100, 100)
# These run in parallel:
b = Dagger.@spawn sum(a)
c = Dagger.@spawn prod(a)
# Finally, this runs:
wait(Dagger.@spawn println("b: ", b, ", c: ", c))
用例
Dagger 可以支持多种受益于简单、自动并行化的用例,例如:
这并非 Dagger 支持的用例的详尽列表。文档中还有更多示例,也欢迎提供更多用例示例(只需提交 issue 或 PR)。
贡献指南
请参阅路线图以了解缺失的功能或已知 bug:
其他资源:
欢迎贡献。
有几种方式可以为我们的项目做出贡献:
报告 Bug:如果您发现了一个 bug,请打开一个 issue 并描述该问题。请确保包含复现该问题的步骤以及您收到的与该问题相关的任何错误信息。
修复 Bug:如果您希望修复一个 bug,请创建一个包含您更改的 pull request。请确保包含对问题的描述以及您的更改将如何解决该问题。
额外的示例和文档改进也非常受欢迎。
资源
推荐的 Dagger.jl 资源列表:
帮助与讨论
对于帮助和讨论,我们建议在以下地方提问:
Julia Discourse 以及 Julia Slack 中的 #dagger 频道。
参考文献
@inproceedings{alomairy2024dynamic,
title={Dynamic Task Scheduling with Data Dependency Awareness Using Julia},
author={Alomairy, Rabab and Tome, Felipe and Samaroo, Julian and Edelman, Alan},
booktitle={2024 IEEE High Performance Extreme Computing Conference (HPEC)},
pages={1--7},
year={2024},
organization={IEEE}
}
@article{dagger2,
title={Efficient Dynamic Task Scheduling in Heterogeneous Environments with Julia},
author={Samaroo, Julian and Alomairy, Rabab and and Giordano, Mose and Edelman, Alan},
year={2024},
publisher={MIT Open Access Articles}
}
致谢
我们感谢 DARPA、Intel 和 NIH 在 MIT 对本工作的支持。