在 CUDA/thrust 中执行向量求和

Bar*_*Bar 2 cuda vector thrust gradient-descent

因此,我尝试在 CUDA 中实现随机梯度下降,我的想法是对其进行并行化,类似于使用小批量的最佳分布式在线预测论文中描述的方式

该实现针对的是 MapReduce 分布式环境,因此我不确定它在使用 GPU 时是否是最佳选择。

简而言之,其想法是:在每次迭代时,计算批次(映射)中每个数据点的误差梯度,通过求和/减少梯度来取平均值,最后执行梯度步骤,根据平均梯度更新权重。下一次迭代从更新的权重开始。

推力库允许我对向量执行约简例如允许我对向量中的所有元素求和。

我的问题是:如何求和/减少 CUDA/thrust 中的向量数组?输入将是一个向量数组,输出将是一个向量,该向量是数组中所有向量的总和(或者理想情况下是它们的平均值)。

m.s*_*.s. 5

将我的评论转换为这个答案:

假设每个向量都有 lengthm并且数组有 size n。那么“向量数组”与大小为 的矩阵相同n x m

如果将存储格式从“向量数组”更改为大小为 的单个向量n * m,则可以thrust::reduce_by_key分别对该矩阵的每一行求和。

sum_rows示例展示了如何执行此操作。