Vector 执行CUDA/推力中的矢量求和

Vector 执行CUDA/推力中的矢量求和,vector,cuda,thrust,gradient-descent,Vector,Cuda,Thrust,Gradient Descent,所以我尝试在CUDA中实现随机梯度下降,我的想法是将其并行化,类似于本文中描述的方式 该实现的目标是MapReduce分布式环境,因此我不确定它在使用GPU时是否最佳 简而言之,其思想是:在每次迭代中,计算批次(map)中每个数据点的误差梯度,通过求和/减少梯度取其平均值,最后执行梯度步骤,根据平均梯度更新权重。下一次迭代从更新的权重开始 该库允许我对一个向量进行缩减,例如,允许我对向量中的所有元素求和 我的问题是:如何在CUDA/推力中求和/减少向量数组? 输入将是一个向量数组,输出将是一个向

所以我尝试在CUDA中实现随机梯度下降,我的想法是将其并行化,类似于本文中描述的方式

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

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

该库允许我对一个向量进行缩减,例如,允许我对向量中的所有元素求和

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

将我的评论转换为以下答案:

假设每个向量的长度为
m
,数组的大小为
n
。 然后,“向量数组”与大小为
nxm
的矩阵相同

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


示例说明了如何执行此操作。

一个“向量数组”与一个矩阵相同(如果向量长度相等);请看一个示例,该示例演示了如何对matrixThrust的行进行求和,因此真正简短的答案是,如果不更改存储格式,您可能无法使用推力来完成此操作data@m.s.谢谢,我想这样的构造可以解决我的问题。@m.s如果你想提供答案,我会投赞成票。