Вероятно, есть много способов сделать это. Один из возможных способов: thrust::adjacent_difference()
с двоичной операцией, которая выдает 0, если значения одинаковы, и 1 в любом другом случае, за которым следует сумма префикса .
* 1007. * Вот рабочий пример:
$ cat t1537.cu
#include <thrust/adjacent_difference.h>
#include <thrust/scan.h>
#include <thrust/device_vector.h>
#include <iostream>
#include <thrust/copy.h>
using namespace thrust::placeholders;
int main(){
int sorted_keys[] = {1, 1, 1, 13, 13, 13, 13, 13, 19, 19, 20};
int ds = sizeof(sorted_keys)/sizeof(sorted_keys[0]);
thrust::device_vector<int> d_sk(sorted_keys, sorted_keys+ds);
thrust::device_vector<int> d_r(d_sk.size());
thrust::adjacent_difference(d_sk.begin(), d_sk.end(), d_r.begin(), !(_1==_2));
d_r[0] = 0;
thrust::inclusive_scan(d_r.begin(), d_r.end(), d_r.begin());
thrust::copy(d_r.begin(), d_r.end(), std::ostream_iterator<int>(std::cout, ","));
std::cout << std::endl;
return 0;
}
$ nvcc -o t1537 t1537.cu
$ ./t1537
0,0,0,1,1,1,1,1,2,2,3,
$