#gpu #tensor #blas #kernel #neural-network

popcorn-nn

Popcorn NN:Popcorn 的神经网络操作

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2017 年 4 月 13 日

#53#blas

Apache-2.0

1KB

Popcorn

Popcorn 是一个库,用于在不同硬件设备上执行并行计算。想象一下你将烹制的所有内核。

设计原则

Popcorn 的一些基本设计选择。

缓冲区

缓冲区是可以在一个或多个设备中存储的一块内存。根据使用的不同后端 API,缓冲区将在需要时在各个设备之间同步。缓冲区始终有一个“最新副本”,它指示缓冲区的最新版本以及它在哪个设备上。这用于确定在执行数据操作时是否需要实际同步。

基于未来的 API

如果可能的话,永远不要阻塞。OpenCL、CUDA 和你的 CPU 在各种设备之间提供异步内存同步。这意味着我们可以将同步事件抽象为未来。这意味着设备之间的同步事件不会阻塞调用线程,因此它可以继续为不同的缓冲区队列其他命令。

每个操作都会将缓冲区消耗到一个未来中。这确保了您只能通过每个操作返回的未来来访问缓冲区的最新版本。

泛型

Popcorn 支持的设备集合是泛型的:OpenCL、CUDA、CPU 和树莓派 GPU。我们首先关注通用用途,然后才是针对特定设备的优化。

感谢 Collenchyma

Collenchyma 代码库为 Popcorn 提供了一个很好的起点。Autumn.ai 的人们在机器学习社区中将 Rust 推向了前进。

依赖项

~145KB