1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017 年 4 月 13 日 |
---|
#53 在 #blas
1KB
Popcorn
Popcorn 是一个库,用于在不同硬件设备上执行并行计算。想象一下你将烹制的所有内核。
设计原则
Popcorn 的一些基本设计选择。
缓冲区
缓冲区是可以在一个或多个设备中存储的一块内存。根据使用的不同后端 API,缓冲区将在需要时在各个设备之间同步。缓冲区始终有一个“最新副本”,它指示缓冲区的最新版本以及它在哪个设备上。这用于确定在执行数据操作时是否需要实际同步。
基于未来的 API
如果可能的话,永远不要阻塞。OpenCL、CUDA 和你的 CPU 在各种设备之间提供异步内存同步。这意味着我们可以将同步事件抽象为未来。这意味着设备之间的同步事件不会阻塞调用线程,因此它可以继续为不同的缓冲区队列其他命令。
每个操作都会将缓冲区消耗到一个未来中。这确保了您只能通过每个操作返回的未来来访问缓冲区的最新版本。
泛型
Popcorn 支持的设备集合是泛型的:OpenCL、CUDA、CPU 和树莓派 GPU。我们首先关注通用用途,然后才是针对特定设备的优化。
感谢 Collenchyma
Collenchyma 代码库为 Popcorn 提供了一个很好的起点。Autumn.ai 的人们在机器学习社区中将 Rust 推向了前进。
依赖项
~145KB