[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