[arrayfire] 172/248: Add intl/uintl to sort, sort_index, sort_by_key
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Tue Nov 17 15:54:23 UTC 2015
This is an automated email from the git hooks/post-receive script.
ghisvail-guest pushed a commit to branch dfsg-clean
in repository arrayfire.
commit 778b13f554662a6cbfda38130bc3071d54029451
Author: Shehzan Mohammed <shehzan at arrayfire.com>
Date: Wed Oct 21 19:52:05 2015 -0400
Add intl/uintl to sort, sort_index, sort_by_key
---
src/api/c/sort.cpp | 8 ++++++++
src/backend/cpu/sort.cpp | 2 ++
src/backend/cpu/sort_by_key.cpp | 4 ++++
src/backend/cpu/sort_index.cpp | 2 ++
src/backend/cuda/sort.cu | 2 ++
src/backend/cuda/sort_by_key/ascd_s64.cu | 15 +++++++++++++++
src/backend/cuda/sort_by_key/ascd_u64.cu | 15 +++++++++++++++
src/backend/cuda/sort_by_key/desc_s64.cu | 15 +++++++++++++++
src/backend/cuda/sort_by_key/desc_u64.cu | 15 +++++++++++++++
src/backend/cuda/sort_by_key_impl.hpp | 4 +++-
src/backend/cuda/sort_index.cu | 2 ++
src/backend/opencl/kernel/sort.hpp | 24 +++++++++++++++---------
src/backend/opencl/kernel/sort_by_key.hpp | 20 +++++++++++++-------
src/backend/opencl/kernel/sort_index.hpp | 22 ++++++++++++++++------
src/backend/opencl/sort.cpp | 2 ++
src/backend/opencl/sort_by_key/impl.hpp | 2 ++
src/backend/opencl/sort_by_key/s64.cpp | 16 ++++++++++++++++
src/backend/opencl/sort_by_key/u64.cpp | 16 ++++++++++++++++
src/backend/opencl/sort_index.cpp | 2 ++
test/sort.cpp | 2 +-
test/sort_by_key.cpp | 2 +-
test/sort_index.cpp | 2 +-
22 files changed, 168 insertions(+), 26 deletions(-)
diff --git a/src/api/c/sort.cpp b/src/api/c/sort.cpp
index b127aa5..1de63c5 100644
--- a/src/api/c/sort.cpp
+++ b/src/api/c/sort.cpp
@@ -54,6 +54,8 @@ af_err af_sort(af_array *out, const af_array in, const unsigned dim, const bool
case u32: val = sort<uint >(in, dim, isAscending); break;
case s16: val = sort<short >(in, dim, isAscending); break;
case u16: val = sort<ushort >(in, dim, isAscending); break;
+ case s64: val = sort<intl >(in, dim, isAscending); break;
+ case u64: val = sort<uintl >(in, dim, isAscending); break;
case u8: val = sort<uchar >(in, dim, isAscending); break;
case b8: val = sort<char >(in, dim, isAscending); break;
default: TYPE_ERROR(1, type);
@@ -104,6 +106,8 @@ af_err af_sort_index(af_array *out, af_array *indices, const af_array in, const
case u32: sort_index<uint >(&val, &idx, in, dim, isAscending); break;
case s16: sort_index<short >(&val, &idx, in, dim, isAscending); break;
case u16: sort_index<ushort >(&val, &idx, in, dim, isAscending); break;
+ case s64: sort_index<intl >(&val, &idx, in, dim, isAscending); break;
+ case u64: sort_index<uintl >(&val, &idx, in, dim, isAscending); break;
case u8: sort_index<uchar >(&val, &idx, in, dim, isAscending); break;
case b8: sort_index<char >(&val, &idx, in, dim, isAscending); break;
default: TYPE_ERROR(1, type);
@@ -150,6 +154,8 @@ void sort_by_key_tmplt(af_array *okey, af_array *oval, const af_array ikey, cons
case u32: sort_by_key<Tk, uint >(okey, oval, ikey, ival, dim, isAscending); break;
case s16: sort_by_key<Tk, short >(okey, oval, ikey, ival, dim, isAscending); break;
case u16: sort_by_key<Tk, ushort >(okey, oval, ikey, ival, dim, isAscending); break;
+ case s64: sort_by_key<Tk, intl >(okey, oval, ikey, ival, dim, isAscending); break;
+ case u64: sort_by_key<Tk, uintl >(okey, oval, ikey, ival, dim, isAscending); break;
case u8: sort_by_key<Tk, uchar >(okey, oval, ikey, ival, dim, isAscending); break;
case b8: sort_by_key<Tk, char >(okey, oval, ikey, ival, dim, isAscending); break;
default: TYPE_ERROR(1, vtype);
@@ -183,6 +189,8 @@ af_err af_sort_by_key(af_array *out_keys, af_array *out_values,
case u32: sort_by_key_tmplt<uint >(&oKey, &oVal, keys, values, dim, isAscending); break;
case s16: sort_by_key_tmplt<short >(&oKey, &oVal, keys, values, dim, isAscending); break;
case u16: sort_by_key_tmplt<ushort >(&oKey, &oVal, keys, values, dim, isAscending); break;
+ case s64: sort_by_key_tmplt<intl >(&oKey, &oVal, keys, values, dim, isAscending); break;
+ case u64: sort_by_key_tmplt<uintl >(&oKey, &oVal, keys, values, dim, isAscending); break;
case u8: sort_by_key_tmplt<uchar >(&oKey, &oVal, keys, values, dim, isAscending); break;
case b8: sort_by_key_tmplt<char >(&oKey, &oVal, keys, values, dim, isAscending); break;
default: TYPE_ERROR(1, type);
diff --git a/src/backend/cpu/sort.cpp b/src/backend/cpu/sort.cpp
index 8e5120e..0b3fb9a 100644
--- a/src/backend/cpu/sort.cpp
+++ b/src/backend/cpu/sort.cpp
@@ -83,4 +83,6 @@ namespace cpu
INSTANTIATE(uchar)
INSTANTIATE(short)
INSTANTIATE(ushort)
+ INSTANTIATE(intl)
+ INSTANTIATE(uintl)
}
diff --git a/src/backend/cpu/sort_by_key.cpp b/src/backend/cpu/sort_by_key.cpp
index 7350cb5..4b0a092 100644
--- a/src/backend/cpu/sort_by_key.cpp
+++ b/src/backend/cpu/sort_by_key.cpp
@@ -124,6 +124,8 @@ namespace cpu
INSTANTIATE(Tk, uchar) \
INSTANTIATE(Tk, short) \
INSTANTIATE(Tk, ushort) \
+ INSTANTIATE(Tk, intl) \
+ INSTANTIATE(Tk, uintl) \
INSTANTIATE1(float)
@@ -134,4 +136,6 @@ namespace cpu
INSTANTIATE1(uchar)
INSTANTIATE1(short)
INSTANTIATE1(ushort)
+ INSTANTIATE1(intl)
+ INSTANTIATE1(uintl)
}
diff --git a/src/backend/cpu/sort_index.cpp b/src/backend/cpu/sort_index.cpp
index 245f152..eb6b4be 100644
--- a/src/backend/cpu/sort_index.cpp
+++ b/src/backend/cpu/sort_index.cpp
@@ -107,4 +107,6 @@ namespace cpu
INSTANTIATE(uchar)
INSTANTIATE(short)
INSTANTIATE(ushort)
+ INSTANTIATE(intl)
+ INSTANTIATE(uintl)
}
diff --git a/src/backend/cuda/sort.cu b/src/backend/cuda/sort.cu
index 9823174..6d14c03 100644
--- a/src/backend/cuda/sort.cu
+++ b/src/backend/cuda/sort.cu
@@ -42,4 +42,6 @@ namespace cuda
INSTANTIATE(uchar)
INSTANTIATE(short)
INSTANTIATE(ushort)
+ INSTANTIATE(intl)
+ INSTANTIATE(uintl)
}
diff --git a/src/backend/cuda/sort_by_key/ascd_s64.cu b/src/backend/cuda/sort_by_key/ascd_s64.cu
new file mode 100644
index 0000000..25a1e58
--- /dev/null
+++ b/src/backend/cuda/sort_by_key/ascd_s64.cu
@@ -0,0 +1,15 @@
+/*******************************************************
+ * Copyright (c) 2014, ArrayFire
+ * All rights reserved.
+ *
+ * This file is distributed under 3-clause BSD license.
+ * The complete license agreement can be obtained at:
+ * http://arrayfire.com/licenses/BSD-3-Clause
+ ********************************************************/
+
+#include <sort_by_key_impl.hpp>
+
+namespace cuda
+{
+ INSTANTIATE1(intl, true)
+}
diff --git a/src/backend/cuda/sort_by_key/ascd_u64.cu b/src/backend/cuda/sort_by_key/ascd_u64.cu
new file mode 100644
index 0000000..63eec5f
--- /dev/null
+++ b/src/backend/cuda/sort_by_key/ascd_u64.cu
@@ -0,0 +1,15 @@
+/*******************************************************
+ * Copyright (c) 2014, ArrayFire
+ * All rights reserved.
+ *
+ * This file is distributed under 3-clause BSD license.
+ * The complete license agreement can be obtained at:
+ * http://arrayfire.com/licenses/BSD-3-Clause
+ ********************************************************/
+
+#include <sort_by_key_impl.hpp>
+
+namespace cuda
+{
+ INSTANTIATE1(uintl, true)
+}
diff --git a/src/backend/cuda/sort_by_key/desc_s64.cu b/src/backend/cuda/sort_by_key/desc_s64.cu
new file mode 100644
index 0000000..a10ee11
--- /dev/null
+++ b/src/backend/cuda/sort_by_key/desc_s64.cu
@@ -0,0 +1,15 @@
+/*******************************************************
+ * Copyright (c) 2014, ArrayFire
+ * All rights reserved.
+ *
+ * This file is distributed under 3-clause BSD license.
+ * The complete license agreement can be obtained at:
+ * http://arrayfire.com/licenses/BSD-3-Clause
+ ********************************************************/
+
+#include <sort_by_key_impl.hpp>
+
+namespace cuda
+{
+ INSTANTIATE1(intl, false)
+}
diff --git a/src/backend/cuda/sort_by_key/desc_u64.cu b/src/backend/cuda/sort_by_key/desc_u64.cu
new file mode 100644
index 0000000..43f60c0
--- /dev/null
+++ b/src/backend/cuda/sort_by_key/desc_u64.cu
@@ -0,0 +1,15 @@
+/*******************************************************
+ * Copyright (c) 2014, ArrayFire
+ * All rights reserved.
+ *
+ * This file is distributed under 3-clause BSD license.
+ * The complete license agreement can be obtained at:
+ * http://arrayfire.com/licenses/BSD-3-Clause
+ ********************************************************/
+
+#include <sort_by_key_impl.hpp>
+
+namespace cuda
+{
+ INSTANTIATE1(uintl, false)
+}
diff --git a/src/backend/cuda/sort_by_key_impl.hpp b/src/backend/cuda/sort_by_key_impl.hpp
index 9cd286c..d01ace4 100644
--- a/src/backend/cuda/sort_by_key_impl.hpp
+++ b/src/backend/cuda/sort_by_key_impl.hpp
@@ -43,5 +43,7 @@ namespace cuda
INSTANTIATE(Tk, short, dr) \
INSTANTIATE(Tk, ushort, dr) \
INSTANTIATE(Tk, char, dr) \
- INSTANTIATE(Tk, uchar, dr)
+ INSTANTIATE(Tk, uchar, dr) \
+ INSTANTIATE(Tk, intl, dr) \
+ INSTANTIATE(Tk, uintl, dr)
}
diff --git a/src/backend/cuda/sort_index.cu b/src/backend/cuda/sort_index.cu
index a073c72..606aab4 100644
--- a/src/backend/cuda/sort_index.cu
+++ b/src/backend/cuda/sort_index.cu
@@ -43,5 +43,7 @@ namespace cuda
INSTANTIATE(uchar)
INSTANTIATE(short)
INSTANTIATE(ushort)
+ INSTANTIATE(intl)
+ INSTANTIATE(uintl)
}
diff --git a/src/backend/opencl/kernel/sort.hpp b/src/backend/opencl/kernel/sort.hpp
index 58345b9..1693f0a 100644
--- a/src/backend/opencl/kernel/sort.hpp
+++ b/src/backend/opencl/kernel/sort.hpp
@@ -38,9 +38,15 @@ namespace opencl
{
namespace kernel
{
- // Kernel Launch Config Values
- static const int TX = 32;
- static const int TY = 8;
+ using std::conditional;
+ using std::is_same;
+ template<typename T>
+ using ltype_t = typename conditional<is_same<T, intl>::value, long, T>::type;
+
+ template<typename T>
+ using type_t = typename conditional<is_same<T, uintl>::value,
+ unsigned long, ltype_t<T>
+ >::type;
template<typename T, bool isAscending>
void sort0(Param val)
@@ -60,14 +66,14 @@ namespace opencl
if(isAscending) {
compute::stable_sort(
- compute::make_buffer_iterator<T>(val_buf, valOffset),
- compute::make_buffer_iterator<T>(val_buf, valOffset + val.info.dims[0]),
- compute::less<T>(), c_queue);
+ compute::make_buffer_iterator< type_t<T> >(val_buf, valOffset),
+ compute::make_buffer_iterator< type_t<T> >(val_buf, valOffset + val.info.dims[0]),
+ compute::less< type_t<T> >(), c_queue);
} else {
compute::stable_sort(
- compute::make_buffer_iterator<T>(val_buf, valOffset),
- compute::make_buffer_iterator<T>(val_buf, valOffset + val.info.dims[0]),
- compute::greater<T>(), c_queue);
+ compute::make_buffer_iterator< type_t<T> >(val_buf, valOffset),
+ compute::make_buffer_iterator< type_t<T> >(val_buf, valOffset + val.info.dims[0]),
+ compute::greater< type_t<T> >(), c_queue);
}
}
}
diff --git a/src/backend/opencl/kernel/sort_by_key.hpp b/src/backend/opencl/kernel/sort_by_key.hpp
index 1ea2a48..4813abd 100644
--- a/src/backend/opencl/kernel/sort_by_key.hpp
+++ b/src/backend/opencl/kernel/sort_by_key.hpp
@@ -38,9 +38,15 @@ namespace opencl
{
namespace kernel
{
- // Kernel Launch Config Values
- static const int TX = 32;
- static const int TY = 8;
+ using std::conditional;
+ using std::is_same;
+ template<typename T>
+ using ltype_t = typename conditional<is_same<T, intl>::value, long, T>::type;
+
+ template<typename T>
+ using type_t = typename conditional<is_same<T, uintl>::value,
+ unsigned long, ltype_t<T>
+ >::type;
template<typename Tk, typename Tv, bool isAscending>
void sort0_by_key(Param okey, Param oval)
@@ -62,14 +68,14 @@ namespace opencl
int okeyOffset = okeyWZ + y * okey.info.strides[1];
int ovalOffset = ovalWZ + y * oval.info.strides[1];
- compute::buffer_iterator<Tk> start= compute::make_buffer_iterator<Tk>(okey_buf, okeyOffset);
- compute::buffer_iterator<Tk> end = compute::make_buffer_iterator<Tk>(okey_buf, okeyOffset + okey.info.dims[0]);
- compute::buffer_iterator<Tv> vals = compute::make_buffer_iterator<Tv>(oval_buf, ovalOffset);
+ compute::buffer_iterator< type_t<Tk> > start= compute::make_buffer_iterator< type_t<Tk> >(okey_buf, okeyOffset);
+ compute::buffer_iterator< type_t<Tk> > end = compute::make_buffer_iterator< type_t<Tk> >(okey_buf, okeyOffset + okey.info.dims[0]);
+ compute::buffer_iterator< type_t<Tv> > vals = compute::make_buffer_iterator< type_t<Tv> >(oval_buf, ovalOffset);
if(isAscending) {
compute::sort_by_key(start, end, vals, c_queue);
} else {
compute::sort_by_key(start, end, vals,
- compute::greater<Tk>(), c_queue);
+ compute::greater< type_t<Tk> >(), c_queue);
}
}
}
diff --git a/src/backend/opencl/kernel/sort_index.hpp b/src/backend/opencl/kernel/sort_index.hpp
index 5595b8c..667cbc6 100644
--- a/src/backend/opencl/kernel/sort_index.hpp
+++ b/src/backend/opencl/kernel/sort_index.hpp
@@ -39,6 +39,16 @@ namespace opencl
{
namespace kernel
{
+ using std::conditional;
+ using std::is_same;
+ template<typename T>
+ using ltype_t = typename conditional<is_same<T, intl>::value, long, T>::type;
+
+ template<typename T>
+ using type_t = typename conditional<is_same<T, uintl>::value,
+ unsigned long, ltype_t<T>
+ >::type;
+
template<typename T, bool isAscending>
void sort0_index(Param val, Param idx)
{
@@ -64,14 +74,14 @@ namespace opencl
if(isAscending) {
compute::sort_by_key(
- compute::make_buffer_iterator<T>(val_buf, valOffset),
- compute::make_buffer_iterator<T>(val_buf, valOffset + val.info.dims[0]),
- idx_begin, compute::less<T>(), c_queue);
+ compute::make_buffer_iterator< type_t<T> >(val_buf, valOffset),
+ compute::make_buffer_iterator< type_t<T> >(val_buf, valOffset + val.info.dims[0]),
+ idx_begin, compute::less< type_t<T> >(), c_queue);
} else {
compute::sort_by_key(
- compute::make_buffer_iterator<T>(val_buf, valOffset),
- compute::make_buffer_iterator<T>(val_buf, valOffset + val.info.dims[0]),
- idx_begin, compute::greater<T>(), c_queue);
+ compute::make_buffer_iterator< type_t<T> >(val_buf, valOffset),
+ compute::make_buffer_iterator< type_t<T> >(val_buf, valOffset + val.info.dims[0]),
+ idx_begin, compute::greater< type_t<T> >(), c_queue);
}
}
}
diff --git a/src/backend/opencl/sort.cpp b/src/backend/opencl/sort.cpp
index d22173f..762d815 100644
--- a/src/backend/opencl/sort.cpp
+++ b/src/backend/opencl/sort.cpp
@@ -45,5 +45,7 @@ namespace opencl
INSTANTIATE(uchar)
INSTANTIATE(short)
INSTANTIATE(ushort)
+ INSTANTIATE(intl)
+ INSTANTIATE(uintl)
}
diff --git a/src/backend/opencl/sort_by_key/impl.hpp b/src/backend/opencl/sort_by_key/impl.hpp
index 36e2e2b..49d1841 100644
--- a/src/backend/opencl/sort_by_key/impl.hpp
+++ b/src/backend/opencl/sort_by_key/impl.hpp
@@ -51,5 +51,7 @@ namespace opencl
INSTANTIATE(Tk, uchar , isAscending) \
INSTANTIATE(Tk, short , isAscending) \
INSTANTIATE(Tk, ushort, isAscending) \
+ INSTANTIATE(Tk, intl , isAscending) \
+ INSTANTIATE(Tk, uintl , isAscending) \
}
diff --git a/src/backend/opencl/sort_by_key/s64.cpp b/src/backend/opencl/sort_by_key/s64.cpp
new file mode 100644
index 0000000..e2ed8d6
--- /dev/null
+++ b/src/backend/opencl/sort_by_key/s64.cpp
@@ -0,0 +1,16 @@
+/*******************************************************
+ * Copyright (c) 2014, ArrayFire
+ * All rights reserved.
+ *
+ * This file is distributed under 3-clause BSD license.
+ * The complete license agreement can be obtained at:
+ * http://arrayfire.com/licenses/BSD-3-Clause
+ ********************************************************/
+
+#include "impl.hpp"
+
+namespace opencl
+{
+ INSTANTIATE1(intl,true)
+ INSTANTIATE1(intl,false)
+}
diff --git a/src/backend/opencl/sort_by_key/u64.cpp b/src/backend/opencl/sort_by_key/u64.cpp
new file mode 100644
index 0000000..89649b1
--- /dev/null
+++ b/src/backend/opencl/sort_by_key/u64.cpp
@@ -0,0 +1,16 @@
+/*******************************************************
+ * Copyright (c) 2014, ArrayFire
+ * All rights reserved.
+ *
+ * This file is distributed under 3-clause BSD license.
+ * The complete license agreement can be obtained at:
+ * http://arrayfire.com/licenses/BSD-3-Clause
+ ********************************************************/
+
+#include "impl.hpp"
+
+namespace opencl
+{
+ INSTANTIATE1(uintl,true)
+ INSTANTIATE1(uintl,false)
+}
diff --git a/src/backend/opencl/sort_index.cpp b/src/backend/opencl/sort_index.cpp
index bc6af10..c7aaa70 100644
--- a/src/backend/opencl/sort_index.cpp
+++ b/src/backend/opencl/sort_index.cpp
@@ -47,5 +47,7 @@ namespace opencl
INSTANTIATE(uchar)
INSTANTIATE(short)
INSTANTIATE(ushort)
+ INSTANTIATE(intl)
+ INSTANTIATE(uintl)
}
diff --git a/test/sort.cpp b/test/sort.cpp
index ae63b3f..7ec6f55 100644
--- a/test/sort.cpp
+++ b/test/sort.cpp
@@ -38,7 +38,7 @@ class Sort : public ::testing::Test
};
// create a list of types to be tested
-typedef ::testing::Types<float, double, uint, int, uchar, short, ushort> TestTypes;
+typedef ::testing::Types<float, double, uint, int, uchar, short, ushort, intl, uintl> TestTypes;
// register the type list
TYPED_TEST_CASE(Sort, TestTypes);
diff --git a/test/sort_by_key.cpp b/test/sort_by_key.cpp
index e67537b..3d82b9f 100644
--- a/test/sort_by_key.cpp
+++ b/test/sort_by_key.cpp
@@ -38,7 +38,7 @@ class Sort : public ::testing::Test
};
// create a list of types to be tested
-typedef ::testing::Types<float, double, uint, int, uchar, short, ushort> TestTypes;
+typedef ::testing::Types<float, double, uint, int, uchar, short, ushort, intl, uintl> TestTypes;
// register the type list
TYPED_TEST_CASE(Sort, TestTypes);
diff --git a/test/sort_index.cpp b/test/sort_index.cpp
index 1a4d6ac..0711e8b 100644
--- a/test/sort_index.cpp
+++ b/test/sort_index.cpp
@@ -38,7 +38,7 @@ class Sort : public ::testing::Test
};
// create a list of types to be tested
-typedef ::testing::Types<float, double, uint, int, uchar, short, ushort> TestTypes;
+typedef ::testing::Types<float, double, uint, int, uchar, short, ushort, intl, uintl> TestTypes;
// register the type list
TYPED_TEST_CASE(Sort, TestTypes);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/arrayfire.git
More information about the debian-science-commits
mailing list