1

所以我正在使用 Aparapi(它从 Java 代码生成 OpenCL)编写一个神经网络库。无论如何,在很多情况下,在进行前向传播和反向传播时,我需要执行复杂的索引操作来找到给定权重的源/目标节点。

在许多情况下,这是非常简单的 1D 到 2D 公式,但在某些情况下,例如对于卷积网络,我需要做一些更复杂的操作来找到索引(通常类似于 3D 到 1D 到 3D)。

我一直坚持使用算法来计算这些指数。另一种方法是将每个权重的源索引和目标索引简单地存储在一个常量 int 数组中。我避免了这种情况,因为这几乎会使内存存储量增加一倍。

我想知道计算索引与从常量数组​​中读取索引的速度差异是多少?我是在失去速度来换取记忆吗?差异显着吗?

4

1 回答 1

0

在 GPU 上计算几乎总是比做同样事情的全局内存访问快(比如查找表)。特别是,因为 GPU 保持如此多的内核“在运行”,所以当它等待来自前一个内核插槽的 I/O 时,就会发生数学运算。因此,如果您的数学不是太复杂,宁愿这样做而不是烧掉全局内存访问。

于 2013-08-23T00:50:56.207 回答