Download examples/sum_rows.cu from camenduru/thrust: direct link, hf CLI and curl.
- Browser
- Download file 1.62 kB
-
https://huggingface.co/camenduru/thrust/resolve/main/examples/sum_rows.cu
- Command line
-
hf download hf://camenduru/thrust/examples/sum_rows.cu
-
curl -L -o sum_rows.cu https://huggingface.co/camenduru/thrust/resolve/main/examples/sum_rows.cu
1.62 kB
| // convert a linear index to a row index | |
| template <typename T> | |
| struct linear_index_to_row_index : public thrust::unary_function<T,T> | |
| { | |
| T C; // number of columns | |
| __host__ __device__ | |
| linear_index_to_row_index(T C) : C(C) {} | |
| __host__ __device__ | |
| T operator()(T i) | |
| { | |
| return i / C; | |
| } | |
| }; | |
| int main(void) | |
| { | |
| int R = 5; // number of rows | |
| int C = 8; // number of columns | |
| thrust::default_random_engine rng; | |
| thrust::uniform_int_distribution<int> dist(10, 99); | |
| // initialize data | |
| thrust::device_vector<int> array(R * C); | |
| for (size_t i = 0; i < array.size(); i++) | |
| array[i] = dist(rng); | |
| // allocate storage for row sums and indices | |
| thrust::device_vector<int> row_sums(R); | |
| thrust::device_vector<int> row_indices(R); | |
| // compute row sums by summing values with equal row indices | |
| thrust::reduce_by_key | |
| (thrust::make_transform_iterator(thrust::counting_iterator<int>(0), linear_index_to_row_index<int>(C)), | |
| thrust::make_transform_iterator(thrust::counting_iterator<int>(0), linear_index_to_row_index<int>(C)) + (R*C), | |
| array.begin(), | |
| row_indices.begin(), | |
| row_sums.begin(), | |
| thrust::equal_to<int>(), | |
| thrust::plus<int>()); | |
| // print data | |
| for(int i = 0; i < R; i++) | |
| { | |
| std::cout << "[ "; | |
| for(int j = 0; j < C; j++) | |
| std::cout << array[i * C + j] << " "; | |
| std::cout << "] = " << row_sums[i] << "\n"; | |
| } | |
| return 0; | |
| } | |