| 31 | namespace kernel { |
| 32 | template<typename T> |
| 33 | void sort0Iterative(Param val, bool isAscending) { |
| 34 | compute::command_queue c_queue(getQueue()()); |
| 35 | |
| 36 | compute::buffer val_buf((*val.data)()); |
| 37 | |
| 38 | for (int w = 0; w < val.info.dims[3]; w++) { |
| 39 | int valW = w * val.info.strides[3]; |
| 40 | for (int z = 0; z < val.info.dims[2]; z++) { |
| 41 | int valWZ = valW + z * val.info.strides[2]; |
| 42 | for (int y = 0; y < val.info.dims[1]; y++) { |
| 43 | int valOffset = valWZ + y * val.info.strides[1]; |
| 44 | |
| 45 | if (isAscending) { |
| 46 | compute::sort(compute::make_buffer_iterator<type_t<T>>( |
| 47 | val_buf, valOffset), |
| 48 | compute::make_buffer_iterator<type_t<T>>( |
| 49 | val_buf, valOffset + val.info.dims[0]), |
| 50 | compute::less<type_t<T>>(), c_queue); |
| 51 | } else { |
| 52 | compute::sort(compute::make_buffer_iterator<type_t<T>>( |
| 53 | val_buf, valOffset), |
| 54 | compute::make_buffer_iterator<type_t<T>>( |
| 55 | val_buf, valOffset + val.info.dims[0]), |
| 56 | compute::greater<type_t<T>>(), c_queue); |
| 57 | } |
| 58 | } |
| 59 | } |
| 60 | } |
| 61 | |
| 62 | CL_DEBUG_FINISH(getQueue()); |
| 63 | } |
| 64 | |
| 65 | template<typename T> |
| 66 | void sortBatched(Param pVal, int dim, bool isAscending) { |