假设我有一个键向量
thrust::device_vector<int> keys(10);
keys[0] = 51; // ----->
keys[1] = 51;
keys[2] = 72; // ----->
keys[3] = 72;
keys[4] = 72;
keys[5] = 103; //----->
keys[6] = 103;
keys[7] = 504; // ------>
keys[8] = 504
keys[9] = 504 ;
Run Code Online (Sandbox Code Playgroud)
我事先就知道4这个向量中有不同的键值。我想填充两个设备数组
pidx[4]和pnum[4].
该pidx数组为我提供了键向量中每个不同键的第一个位置,即---->上面代码片段中标记的位置。所以,在这个例子中,我应该有pidx[4] = {0, 2, 5, 7}.
该pnum数组为我提供了每个键的出现次数。所以,在这个例子中,我应该有
pnum[4] = {2, 3, 2, 3}.
如何使用 CUDA Thrust 执行上述操作?
这不是最佳解决方案,但我也想不出更好的方法。
// Use `unique` to grab the distinct values
thrust::device_vector<int> values(4);
thrust::unique_copy( keys.begin(), keys.end(), values.begin() );
// For each of the values use `count` to get the frequencies
for ( int i = 4; i != 0; --i )
pnum[i] = thrust::count( keys.begin(), keys.end(), values[i] );
// Use prefix sum to get the indices
thrust::exclusive_scan( pnum.begin(), pnum.end(), pidx.begin() );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1799 次 |
| 最近记录: |