OpenCL索引操作:算法与常量索引缓冲区

时间:2013-08-18 05:45:53

标签: performance indexing opencl neural-network aparapi

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

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

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

我想知道计算指数与从常数数组中读取它们的速度差异是什么?我是为了换取记忆而失去速度吗?差异显着吗?

1 个答案:

答案 0 :(得分:0)

GPU上的计算几乎总是比全局内存访问更快(例如查找表)。特别是,因为GPU在“飞行中”保留了这么多内核,所以在等待来自先前内核插槽的I / O时会发生数学运算。因此,如果您的数学不是太复杂,那么更愿意这样做,而不是刻录全局内存访问。