在CUDA /推力中执行向量的总和

时间:2015-09-21 17:32:23

标签: vector cuda thrust gradient-descent

所以我试图在CUDA中实现随机梯度下降,我的想法是将其并行化,类似于论文中描述的方式Optimal Distributed Online Prediction Using Mini-Batches

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

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

thrust库允许我对向量执行减少,例如,我可以对向量中的所有元素求和。

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

1 个答案:

答案 0 :(得分:2)

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

我们假设每个向量的长度为m,数组的大小为n。 一个"向量数组"然后与大小为n x m的矩阵相同。

如果您从此"向量数组更改存储格式"对于大小为n * m的单个向量,您可以使用thrust::reduce_by_key分别对此矩阵的每一行求和。

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