【发布时间】:2015-08-19 02:25:17
【问题描述】:
我正在使用 CUDA 和 THRUST 执行配对集合操作。不过,我想保留重复项。例如:
int keys[6] = {1, 1, 1, 3, 4, 5, 5};
int vals[6] = {1, 2, 3, 4, 5, 6, 7};
int comp[2] = {1, 5};
thrust::set_intersection_by_key(keys, keys + 6, comp, comp + 2, vals, rk, rv);
想要的结果
rk[1, 1, 1, 5, 5]
rv[1, 2, 3, 6, 7]
实际结果
rk[1, 5]
rv[5, 7]
我想要 comp 中包含相应 key 的所有 vals。
有没有办法使用推力来实现这一点,还是我必须编写自己的内核或推力函数?
我正在使用这个功能:set_intersection_by_key。
【问题讨论】:
-
是的:很抱歉。我会更新帖子 - documentation
-
集合交集保留重复,但只保留两个集合中的重复数。在您的示例中,没有重复项。听起来您根本不想要设置的交叉点,尽管我不确定您将如何称呼您描述的操作
-
而不是 intersection,这似乎是一种过滤操作,您可以根据谓词创建结果向量(谓词是键是否包含在
comp) -
我想要完成的类似于 SQL 内连接:一个过滤器排除第二组中不包含键的任何值。交叉点是我能想到的最接近的东西。也许过滤函数会更合适,但我在 CUDA 7.0 的推力版本中没有看到类似的东西。