c++ - CUDA Thrust reduce_by_key 使用更少的内存

标签 c++ cuda thrust

我正在尝试减少为我的用例计算reduce_by_key所需的内存。与值的数量(大约 1600 万个)相比,我的唯一键数量相对较少(大约 100-150 个)。按键减少example显示分配用于包含结果的 device_vectors 的大小与输入的大小相同。总是有必要这样做吗?是否可以只分配包含正确输出所需的内存?

最佳答案

缩减的输出大小取决于输入数据,并且在缩减之前通常不知道该值。但是,根据您的问题,有时您知道这个大小。

合理的实现仅需要至少数量的键跨度元素来输出。和 thrust::reduce_by_key seems to be included in this list .


示例:

未排序(常见情况)

输出大小很难预测

keys        2   2   2   3   3   2   1
values      1   1   1   1   1   1   1
           |----------|------|----|---|
                    4 spans

reduced         3       2       1   1

已排序(最佳情况)

输出大小等于唯一键的数量

keys        1   2   2   2   2   3   3
values      1   1   1   1   1   1   1
           |--|---------------|------|
                    3 spans

reduced     1           4         2

交错,相邻键不重复(最坏情况)

输出大小等于输入大小

keys        1   2   3   1   2   3   1
values      1   1   1   1   1   1   1
           |--|---|---|---|---|---|--|
                    7 spans

reduced     1   1   1   1   1   1   1

另一件事是,如果您不需要输出 key ,您可以使用 thrust::discard_iterator 丢弃它们并节省一些额外的空间,如所述 here .

关于c++ - CUDA Thrust reduce_by_key 使用更少的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32235288/

相关文章:

c++ - uint32_t 作为映射键的数据类型

c++ - 如何根据另一个 vector 中给出的索引拆分 vector ?

c++ - 在 CUDA 设备中获取原始矩阵索引

c++ - NSight 中的 CUDA 架构 -sm_11 编译问题

c++ - 从 C++ 访问 device_vector 的最佳方式

c++ - 如何创建抽象类的内联实现?

c++ - 'namespace reference { }' 的先前声明

c - 并行 (CUDA) 二维泊松求解器

c++ - CUB 选择是否有返回的索引

c++ - 元组上的推力排序非常慢