[arrayfire] 177/248: Add intl/uintl to set functions
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Tue Nov 17 15:54:24 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 2e365236da1ea4734f2318cf62ca2e6b65771fb2
Author: Shehzan Mohammed <shehzan at arrayfire.com>
Date: Wed Oct 21 22:15:31 2015 -0400
Add intl/uintl to set functions
---
src/api/c/set.cpp | 6 ++++++
src/backend/cpu/set.cpp | 2 ++
src/backend/cuda/set.cu | 2 ++
src/backend/opencl/set.cpp | 40 ++++++++++++++++++++++++++--------------
test/set.cpp | 8 ++++++++
5 files changed, 44 insertions(+), 14 deletions(-)
diff --git a/src/api/c/set.cpp b/src/api/c/set.cpp
index cada021..1643fad 100644
--- a/src/api/c/set.cpp
+++ b/src/api/c/set.cpp
@@ -38,6 +38,8 @@ af_err af_set_unique(af_array *out, const af_array in, const bool is_sorted)
case u32: res = setUnique<uint >(in, is_sorted); break;
case s16: res = setUnique<short >(in, is_sorted); break;
case u16: res = setUnique<ushort >(in, is_sorted); break;
+ case s64: res = setUnique<intl >(in, is_sorted); break;
+ case u64: res = setUnique<uintl >(in, is_sorted); break;
case b8: res = setUnique<char >(in, is_sorted); break;
case u8: res = setUnique<uchar >(in, is_sorted); break;
default: TYPE_ERROR(1, type);
@@ -73,6 +75,8 @@ af_err af_set_union(af_array *out, const af_array first, const af_array second,
case u32: res = setUnion<uint >(first, second, is_unique); break;
case s16: res = setUnion<short >(first, second, is_unique); break;
case u16: res = setUnion<ushort >(first, second, is_unique); break;
+ case s64: res = setUnion<intl >(first, second, is_unique); break;
+ case u64: res = setUnion<uintl >(first, second, is_unique); break;
case b8: res = setUnion<char >(first, second, is_unique); break;
case u8: res = setUnion<uchar >(first, second, is_unique); break;
default: TYPE_ERROR(1, first_type);
@@ -107,6 +111,8 @@ af_err af_set_intersect(af_array *out, const af_array first, const af_array seco
case u32: res = setIntersect<uint >(first, second, is_unique); break;
case s16: res = setIntersect<short >(first, second, is_unique); break;
case u16: res = setIntersect<ushort >(first, second, is_unique); break;
+ case s64: res = setIntersect<intl >(first, second, is_unique); break;
+ case u64: res = setIntersect<uintl >(first, second, is_unique); break;
case b8: res = setIntersect<char >(first, second, is_unique); break;
case u8: res = setIntersect<uchar >(first, second, is_unique); break;
default: TYPE_ERROR(1, first_type);
diff --git a/src/backend/cpu/set.cpp b/src/backend/cpu/set.cpp
index 26efb2c..3215e6d 100644
--- a/src/backend/cpu/set.cpp
+++ b/src/backend/cpu/set.cpp
@@ -117,4 +117,6 @@ namespace cpu
INSTANTIATE(uchar)
INSTANTIATE(short)
INSTANTIATE(ushort)
+ INSTANTIATE(intl)
+ INSTANTIATE(uintl)
}
diff --git a/src/backend/cuda/set.cu b/src/backend/cuda/set.cu
index 8887f83..63501d3 100644
--- a/src/backend/cuda/set.cu
+++ b/src/backend/cuda/set.cu
@@ -119,4 +119,6 @@ namespace cuda
INSTANTIATE(uchar)
INSTANTIATE(short)
INSTANTIATE(ushort)
+ INSTANTIATE(intl)
+ INSTANTIATE(uintl)
}
diff --git a/src/backend/opencl/set.cpp b/src/backend/opencl/set.cpp
index 52e5086..5604ff4 100644
--- a/src/backend/opencl/set.cpp
+++ b/src/backend/opencl/set.cpp
@@ -31,6 +31,16 @@ namespace opencl
{
using af::dim4;
+ using std::conditional;
+ using std::is_same;
+ template<typename T>
+ using ltype_t = typename conditional<is_same<T, intl>::value, cl_long, T>::type;
+
+ template<typename T>
+ using type_t = typename conditional<is_same<T, uintl>::value,
+ cl_ulong, ltype_t<T>
+ >::type;
+
template<typename T>
Array<T> setUnique(const Array<T> &in,
const bool is_sorted)
@@ -42,8 +52,8 @@ namespace opencl
compute::buffer out_data((*out.get())());
- compute::buffer_iterator<T> begin(out_data, 0);
- compute::buffer_iterator<T> end(out_data, out.dims()[0]);
+ compute::buffer_iterator< type_t<T> > begin(out_data, 0);
+ compute::buffer_iterator< type_t<T> > end(out_data, out.dims()[0]);
if (!is_sorted) {
compute::sort(begin, end, queue);
@@ -82,13 +92,13 @@ namespace opencl
compute::buffer second_data((*unique_second.get())());
compute::buffer out_data((*out.get())());
- compute::buffer_iterator<T> first_begin(first_data, 0);
- compute::buffer_iterator<T> first_end(first_data, unique_first.dims()[0]);
- compute::buffer_iterator<T> second_begin(second_data, 0);
- compute::buffer_iterator<T> second_end(second_data, unique_second.dims()[0]);
- compute::buffer_iterator<T> out_begin(out_data, 0);
+ compute::buffer_iterator< type_t<T> > first_begin(first_data, 0);
+ compute::buffer_iterator< type_t<T> > first_end(first_data, unique_first.dims()[0]);
+ compute::buffer_iterator< type_t<T> > second_begin(second_data, 0);
+ compute::buffer_iterator< type_t<T> > second_end(second_data, unique_second.dims()[0]);
+ compute::buffer_iterator< type_t<T> > out_begin(out_data, 0);
- compute::buffer_iterator<T> out_end = compute::set_union(
+ compute::buffer_iterator< type_t<T> > out_end = compute::set_union(
first_begin, first_end, second_begin, second_end, out_begin, queue
);
@@ -123,13 +133,13 @@ namespace opencl
compute::buffer second_data((*unique_second.get())());
compute::buffer out_data((*out.get())());
- compute::buffer_iterator<T> first_begin(first_data, 0);
- compute::buffer_iterator<T> first_end(first_data, unique_first.dims()[0]);
- compute::buffer_iterator<T> second_begin(second_data, 0);
- compute::buffer_iterator<T> second_end(second_data, unique_second.dims()[0]);
- compute::buffer_iterator<T> out_begin(out_data, 0);
+ compute::buffer_iterator< type_t<T> > first_begin(first_data, 0);
+ compute::buffer_iterator< type_t<T> > first_end(first_data, unique_first.dims()[0]);
+ compute::buffer_iterator< type_t<T> > second_begin(second_data, 0);
+ compute::buffer_iterator< type_t<T> > second_end(second_data, unique_second.dims()[0]);
+ compute::buffer_iterator< type_t<T> > out_begin(out_data, 0);
- compute::buffer_iterator<T> out_end = compute::set_intersection(
+ compute::buffer_iterator< type_t<T> > out_end = compute::set_intersection(
first_begin, first_end, second_begin, second_end, out_begin, queue
);
@@ -153,6 +163,8 @@ namespace opencl
INSTANTIATE(uchar)
INSTANTIATE(short)
INSTANTIATE(ushort)
+ INSTANTIATE(intl)
+ INSTANTIATE(uintl)
}
#pragma GCC diagnostic pop
diff --git a/test/set.cpp b/test/set.cpp
index e879d24..a6d04ed 100644
--- a/test/set.cpp
+++ b/test/set.cpp
@@ -85,6 +85,10 @@ UNIQUE_TESTS(double)
UNIQUE_TESTS(int)
UNIQUE_TESTS(uint)
UNIQUE_TESTS(uchar)
+UNIQUE_TESTS(short)
+UNIQUE_TESTS(ushort)
+UNIQUE_TESTS(intl)
+UNIQUE_TESTS(uintl)
typedef af_err (*setFunc)(af_array *, const af_array, const af_array, const bool);
@@ -161,3 +165,7 @@ SET_TESTS(double)
SET_TESTS(int)
SET_TESTS(uint)
SET_TESTS(uchar)
+SET_TESTS(short)
+SET_TESTS(ushort)
+SET_TESTS(intl)
+SET_TESTS(uintl)
--
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