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