[arrayfire] 46/284: nearest neighbour cpu func is asyn call now

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Sun Feb 7 18:59:17 UTC 2016


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch debian/experimental
in repository arrayfire.

commit b813fd4bf2f49bc5f9af4cae62321b2945b5f129
Author: pradeep <pradeep at arrayfire.com>
Date:   Wed Dec 2 13:51:42 2015 -0500

    nearest neighbour cpu func is asyn call now
---
 src/backend/cpu/nearest_neighbour.cpp | 46 +++++++++++++++++++++++------------
 1 file changed, 31 insertions(+), 15 deletions(-)

diff --git a/src/backend/cpu/nearest_neighbour.cpp b/src/backend/cpu/nearest_neighbour.cpp
index 79d4151..97f0e0a 100644
--- a/src/backend/cpu/nearest_neighbour.cpp
+++ b/src/backend/cpu/nearest_neighbour.cpp
@@ -13,6 +13,8 @@
 #include <Array.hpp>
 #include <err_cpu.hpp>
 #include <handle.hpp>
+#include <platform.hpp>
+#include <async_queue.hpp>
 
 using af::dim4;
 
@@ -90,27 +92,18 @@ struct dist_op<ushort, To, AF_SHD>
 };
 
 template<typename T, typename To, af_match_type dist_type>
-void nearest_neighbour_(Array<uint>& idx, Array<To>& dist,
-                        const Array<T>& query, const Array<T>& train,
+void nearest_neighbour_(Array<uint> idx, Array<To> dist,
+                        const Array<T> query, const Array<T> train,
                         const uint dist_dim, const uint n_dist)
 {
     uint sample_dim = (dist_dim == 0) ? 1 : 0;
     const dim4 qDims = query.dims();
     const dim4 tDims = train.dims();
 
-    if (n_dist > 1) {
-        CPU_NOT_SUPPORTED();
-    }
-
     const unsigned distLength = qDims[dist_dim];
     const unsigned nQuery = qDims[sample_dim];
     const unsigned nTrain = tDims[sample_dim];
 
-    const dim4 outDims(n_dist, nQuery);
-
-    idx  = createEmptyArray<uint>(outDims);
-    dist = createEmptyArray<To  >(outDims);
-
     const T* qPtr = query.get();
     const T* tPtr = train.get();
     uint* iPtr = idx.get();
@@ -157,11 +150,34 @@ void nearest_neighbour(Array<uint>& idx, Array<To>& dist,
                        const uint dist_dim, const uint n_dist,
                        const af_match_type dist_type)
 {
+    if (n_dist > 1) {
+        CPU_NOT_SUPPORTED();
+    }
+
+    query.eval();
+    train.eval();
+
+    uint sample_dim  = (dist_dim == 0) ? 1 : 0;
+    const dim4 qDims = query.dims();
+    const dim4 outDims(n_dist, qDims[sample_dim]);
+
+    idx  = createEmptyArray<uint>(outDims);
+    dist = createEmptyArray<To  >(outDims);
+    idx.eval();
+    dist.eval();
+
     switch(dist_type) {
-        case AF_SAD: nearest_neighbour_<T, To, AF_SAD>(idx, dist, query, train, dist_dim, n_dist); break;
-        case AF_SSD: nearest_neighbour_<T, To, AF_SSD>(idx, dist, query, train, dist_dim, n_dist); break;
-        case AF_SHD: nearest_neighbour_<T, To, AF_SHD>(idx, dist, query, train, dist_dim, n_dist); break;
-        default: AF_ERROR("Unsupported dist_type", AF_ERR_NOT_CONFIGURED);
+        case AF_SAD:
+            getQueue().enqueue(nearest_neighbour_<T, To, AF_SAD>, idx, dist, query, train, dist_dim, n_dist);
+            break;
+        case AF_SSD:
+            getQueue().enqueue(nearest_neighbour_<T, To, AF_SSD>, idx, dist, query, train, dist_dim, n_dist);
+            break;
+        case AF_SHD:
+            getQueue().enqueue(nearest_neighbour_<T, To, AF_SHD>, idx, dist, query, train, dist_dim, n_dist);
+            break;
+        default:
+            AF_ERROR("Unsupported dist_type", AF_ERR_NOT_CONFIGURED);
     }
 }
 

-- 
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