Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <thrust/device_vector.h>
- #include <thrust/sort.h>
- #include <thrust/extrema.h>
- #include <iostream>
- extern "C" {
- // ------ Sort algorithms ------ //
- // Sort for integer arrays
- void sort_int_wrapper( int *data, int N)
- {
- // Wrap raw pointer with a device_ptr
- thrust::device_ptr <int> dev_ptr(data);
- // Use device_ptr in Thrust sort algorithm
- thrust::sort(dev_ptr, dev_ptr+N);
- }
- // Sort for float arrays
- void sort_float_wrapper( float *data, int N)
- {
- thrust::device_ptr <float> dev_ptr(data);
- thrust::sort(dev_ptr, dev_ptr+N);
- }
- // Sort for double arrays
- void sort_double_wrapper( double *data, int N)
- {
- thrust::device_ptr <double> dev_ptr(data);
- thrust::sort(dev_ptr, dev_ptr+N);
- }
- // ------ Min/Max algorithms ------ //
- // Min for integer arrays
- int min_int_wrapper( int *data, int N)
- {
- thrust::device_ptr <int> dev_ptr(data);
- // Return index of minimum element:
- return thrust::min_element(dev_ptr, dev_ptr + N) - dev_ptr;
- }
- int min_float_wrapper( float *data, int N)
- {
- thrust::device_ptr <float> dev_ptr(data);
- return thrust::min_element(dev_ptr, dev_ptr + N) - dev_ptr;
- }
- int min_double_wrapper( double *data, int N)
- {
- thrust::device_ptr <double> dev_ptr(data);
- return thrust::min_element(dev_ptr, dev_ptr + N) - dev_ptr;
- }
- // Max for integer arrays
- int max_int_wrapper( int *data, int N)
- {
- thrust::device_ptr <int> dev_ptr(data);
- // Return index of maximum element:
- return thrust::max_element(dev_ptr, dev_ptr + N) - dev_ptr;
- }
- int max_float_wrapper( float *data, int N)
- {
- thrust::device_ptr <float> dev_ptr(data);
- return thrust::max_element(dev_ptr, dev_ptr + N) - dev_ptr;
- }
- int max_double_wrapper( double *data, int N)
- {
- thrust::device_ptr <double> dev_ptr(data);
- return thrust::max_element(dev_ptr, dev_ptr + N) - dev_ptr;
- }
- // ------ Reduction (sum) algorithms ------ //
- // Sum for integer arrays
- int reduce_int_wrapper( int *data, int N)
- {
- // Wrap raw pointer with a device_ptr
- thrust::device_ptr <int> dev_ptr(data);
- // Use device_ptr in Thrust reduce algorithm
- return thrust::reduce(dev_ptr, dev_ptr+N);
- }
- float reduce_float_wrapper( float *data, int N)
- {
- thrust::device_ptr <float> dev_ptr(data);
- return thrust::reduce(dev_ptr, dev_ptr+N);
- }
- double reduce_double_wrapper( double *data, int N)
- {
- thrust::device_ptr <double> dev_ptr(data);
- return thrust::reduce(dev_ptr, dev_ptr+N);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement