使用包含每个重复数量的列表生成重复,上升整数的顺序,并用推力
Generate sequence of repeating, ascending integers, using a list containing the number of repetitions for each, with thrust
我想生成一系列重复上升整数,给定一个列表,其中包含每个重复的数量:
thrust::device_vector<int> reps {3, 2, 5, 1};
//This vector should yield a resulting list:
// {0,0,0, 1,1, 2,2,2,2,2, 3}
理想情况下,我想使用推力API进行此操作。
我考虑了这种方法:
- 前缀总和代表列表以产生累积代表列表。
- 使用累积代表列表中的最终元素分配生成的整数向量。
- 使用内核,为代表列表的每个元素运行线程,然后从
i = 0 : reps[tid]
循环,将tid
存储在cumulative_reps[tid]+i
中。
这将有效,但最终可能会在串行中完成大部分工作,并击败使用CUDA的观点。
我想知道是否有推力迭代器和算法的组合可以简洁地产生整数列表?另外,即使没有推力,也比我概述的方法更好。
您可以使用类似于您的方法纯粹用推力进行操作。
- 在输入上进行前缀总和,以确定步骤2的结果大小,并为步骤3的散点图
- 创建一个输出向量以保持结果
- 由步骤1 给出的索引,将输出向量的适当位置散射到适当的位置。
- 在输出向量上执行前缀总和。
请注意,如果允许输入reps向量包含0。
的值,则必须修改此方法。这是一个有效的例子:
$ cat t404.cu
#include <thrust/scan.h>
#include <thrust/device_vector.h>
#include <thrust/copy.h>
#include <thrust/iterator/constant_iterator.h>
#include <thrust/iterator/permutation_iterator.h>
#include <iostream>
int main(){
int host_reps[] = {3, 2, 5, 1};
int ds = sizeof(host_reps)/sizeof(int);
thrust::device_vector<int> reps(host_reps, host_reps+ds);
thrust::inclusive_scan(reps.begin(), reps.end(), reps.begin());
thrust::device_vector<int> result(reps[reps.size()-1]);
thrust::copy_n(thrust::constant_iterator<int>(1), reps.size()-1, thrust::make_permutation_iterator(result.begin(), reps.begin()));
thrust::inclusive_scan(result.begin(), result.end(), result.begin());
thrust::copy_n(result.begin(), result.size(), std::ostream_iterator<int>(std::cout, ","));
std::cout << std::endl;
}
$ nvcc -o t404 t404.cu
$ ./t404
0,0,0,1,1,2,2,2,2,2,3,
$
相关文章:
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- 反转模板(整数)参数的顺序
- 如何以相反顺序C 打印整数的单个数字
- 我不知道如何创建一个以数字/字母顺序打印出我的整数或字符串的程序
- 如何将整数向量转换为 2 位十六进制并按顺序添加到 c 字符串?
- 使用包含每个重复数量的列表生成重复,上升整数的顺序,并用推力
- C 有效比较整数序列(相对顺序)
- 直接根据高位将整数散列到N个大小大致相等的桶中(维持顺序)
- 正整数 uniq 的组合(顺序不重要)
- 正十进制整数的递归函数位数,按c++的相反顺序排列
- 在 c++ 中给出两个整数向量(大小和类型相同),我想从最小到最大元素对一个进行排序,并更改第二个向量的顺序
- 将范围有限的浮点数转换为无符号的整数,以保持排序顺序和精度
- 如何在保持其顺序的同时填充整数数组
- 在整数数组中查找重复项,并以C++的实际顺序打印它们
- 如何将32位整数转换为32位浮点数,以保持顺序
- 如何在c++中创建一组非标准顺序的整数
- 使用递归以正确的顺序打印整数的数字
- 在另一个文件中以相反的顺序复制字符串和整数文件
- 给定一个整数N,按字典顺序打印从1到N的数字
- c++非顺序整数枚举的最佳方法是什么?