MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / sort_by_key

Function sort_by_key

src/backend/opencl/sort_by_key.cpp:22–55  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

20namespace opencl {
21template<typename Tk, typename Tv>
22void sort_by_key(Array<Tk> &okey, Array<Tv> &oval, const Array<Tk> &ikey,
23 const Array<Tv> &ival, const unsigned dim, bool isAscending) {
24 try {
25 okey = copyArray<Tk>(ikey);
26 oval = copyArray<Tv>(ival);
27
28 switch (dim) {
29 case 0: kernel::sort0ByKey<Tk, Tv>(okey, oval, isAscending); break;
30 case 1:
31 case 2:
32 case 3:
33 kernel::sortByKeyBatched<Tk, Tv>(okey, oval, dim, isAscending);
34 break;
35 default: AF_ERROR("Not Supported", AF_ERR_NOT_SUPPORTED);
36 }
37
38 if (dim != 0) {
39 af::dim4 preorderDims = okey.dims();
40 af::dim4 reorderDims(0, 1, 2, 3);
41 reorderDims[dim] = 0;
42 preorderDims[0] = okey.dims()[dim];
43 for (unsigned i = 1; i <= dim; i++) {
44 reorderDims[i - 1] = i;
45 preorderDims[i] = okey.dims()[i - 1];
46 }
47
48 okey.setDataDims(preorderDims);
49 oval.setDataDims(preorderDims);
50
51 okey = reorder<Tk>(okey, reorderDims);
52 oval = reorder<Tv>(oval, reorderDims);
53 }
54 } catch (const std::exception &ex) { AF_ERROR(ex.what(), AF_ERR_INTERNAL); }
55}
56
57#define INSTANTIATE(Tk, Tv) \
58 template void sort_by_key<Tk, Tv>( \

Callers 4

sort0ByKeyIterativeFunction · 0.50
sortByKeyBatchedFunction · 0.50
sortBatchedFunction · 0.50
update_permutationFunction · 0.50

Calls 2

dimsMethod · 0.45
setDataDimsMethod · 0.45

Tested by

no test coverage detected