【发布时间】:2013-08-20 04:55:43
【问题描述】:
所以我正在使用 Aparapi(从 Java 代码生成 OpenCL)编写一个神经网络库。 无论如何,在进行前向传播和反向传播时,我需要执行复杂的索引操作以找到给定权重的源/目标节点。
在很多情况下这是非常简单的 1D 到 2D 公式,但在某些情况下,例如对于卷积网络,我需要做一些更复杂的操作来找到索引(通常类似于 3D 到 1D 到 3D)。
我一直坚持使用算法来计算这些索引。另一种方法是将每个权重的源索引和目标索引简单地存储在一个常量 int 数组中。我已经避免了这种情况,因为这几乎会使内存存储量增加一倍。
我想知道计算索引与从常量数组中读取索引的速度差异是多少?我是在失去速度来换取记忆吗?差异显着吗?
【问题讨论】:
-
您是否尝试过对其进行基准测试?内存访问速度和延迟因设备而异,尤其是在 GPU 和 CPU 之间,因此它实际上取决于您的硬件、您的特定算法等。
-
如果索引像 a[gid*3+x*15],跨步可以停止使用一些内存库,计算索引在这件事附近不会是个问题。
-
@Thomas:我没有使用恒定索引缓冲区对其进行测试,但我正在尝试将软件设计为相当便携,因此我更感兴趣的是一般性能而不是硬件性能。
-
尽管如此,我正在设计它以在 GPU/APU 上使用
-
如果我要使用索引缓冲区,它必须看起来像这样:`float[] nodes;浮动[]权重;整数输入每节点; int[] weightSrc; fwd() { 浮点数 = 0; int i0 = gid() * inputsPerNode; for(int i = 0; i
标签: performance indexing opencl neural-network aparapi