1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017年4月13日 |
---|
#49 在 #execution-engine
1KB
Popcorn
Popcorn 是一个用于跨不同硬件设备执行并行计算的库。想想看,你将煮多少个内核。
设计原则
Popcorn 的一些基本设计选择。
缓冲区
缓冲区是可以在一个或多个设备中存储的内存块。根据使用的不同后端 API,缓冲区将在不同设备之间按需同步。缓冲区始终有一个“最新副本”,它指示缓冲区的最新版本和它在哪个设备上。这用于确定在数据上执行操作时是否确实需要同步。
基于未来的 API
如果可能,绝不阻塞。OpenCL、CUDA 和你的 CPU 提供了各种设备之间的异步内存同步。这意味着我们可以将同步事件抽象为未来。这意味着设备之间的同步事件不会阻塞调用线程,因此它可以继续为不同的缓冲区排队其他命令。
每个操作都会将缓冲区消耗到一个未来中。这确保了您只能通过每个操作返回的未来访问缓冲区的最新版本。
通用
Popcorn 在一组支持的设备(OpenCL、CUDA、CPU 和 Raspberry Pi GPU)上是通用的。我们首先关注通用使用,然后才关注特定于设备的优化。
感谢 Collenchyma
Collenchyma 代码库为 Popcorn 提供了一个很好的起点。Autumn.ai 的人们在机器学习社区中将 Rust 推向了前进,做出了出色的贡献。
依赖关系
~150KB