我是cuda编程的新手,并且对实现一种算法感兴趣,该算法在串行编码时在一次传递中从一个向量计算两个或更多个均值。在cuda中做这样的事情的有效方案是什么?
有两个长度为N的向量,元素值和一个指示每个元素属于哪个子集的指标值。
是否有一种有效的方法可以在一次通过中执行此操作,或者是否应在M次通过中执行此操作,其中M是要计算的均值数,并使用索引键向量作为每个子集的元素值?
答案 0 :(得分:3)
只需一次调用thrust::reduce_by_key,即可通过一次传递来实现此目的。特别是,查看"summary statistics" example,它一次计算单个向量的几个统计属性。您可以将此方法推广到reduce_by_key
,它可以并行计算多个子向量的减少量。您的“指标值”将提供{key} reduce_by_key
用来确定每个元素属于哪个子向量。
答案 1 :(得分:2)
将每个向量分成较小的向量,并使用线程对每个子向量的所需元素求和。然后结合总和并生成全局均值。我会尝试同时生成M种手段而不是M次传递。