所以我正在使用Aparapi(从Java代码生成OpenCL)编写神经网络库。 无论如何,在进行前向传递和反向传播时,我需要进行复杂的索引操作来查找给定权重的源/目标节点。
在许多情况下,这是非常简单的1D到2D公式,但在某些情况下,例如对于卷积网,我需要做一些更复杂的操作来查找索引(通常类似于3D到1D到3D)。
我一直坚持用algorthims来计算这些指数。另一种方法是在常量int数组中简单地存储每个权重的源索引和目标索引。我已经避免了这个,因为这几乎会使内存容量增加一倍。
我想知道计算指数与从常数数组中读取它们的速度差异是什么?我是为了换取记忆而失去速度吗?差异显着吗?
答案 0 :(得分:0)
GPU上的计算几乎总是比全局内存访问更快(例如查找表)。特别是,因为GPU在“飞行中”保留了这么多内核,所以在等待来自先前内核插槽的I / O时会发生数学运算。因此,如果您的数学不是太复杂,那么更愿意这样做,而不是刻录全局内存访问。