[arrayfire] 19/284: async cpu::index function

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Sun Feb 7 18:59:14 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 91f7a1ffe531a82e3f7a9af7fdff6efe3fb6c5f9
Author: pradeep <pradeep at arrayfire.com>
Date:   Tue Nov 17 17:50:00 2015 -0500

    async cpu::index function
---
 src/backend/cpu/Array.cpp |  2 --
 src/backend/cpu/index.cpp | 38 +++++++++++++++++++++-----------------
 2 files changed, 21 insertions(+), 19 deletions(-)

diff --git a/src/backend/cpu/Array.cpp b/src/backend/cpu/Array.cpp
index 8ea6104..b612c7b 100644
--- a/src/backend/cpu/Array.cpp
+++ b/src/backend/cpu/Array.cpp
@@ -72,8 +72,6 @@ namespace cpu
 
         this->setId(getActiveDeviceId());
 
-        if (isReady()) return;
-
         data = std::shared_ptr<T>(memAlloc<T>(elements()), memFree<T>);
 
         auto func = [] (Array<T> in) {
diff --git a/src/backend/cpu/index.cpp b/src/backend/cpu/index.cpp
index cad79f7..39502e9 100644
--- a/src/backend/cpu/index.cpp
+++ b/src/backend/cpu/index.cpp
@@ -17,6 +17,7 @@
 #include <vector>
 #include <platform.hpp>
 #include <async_queue.hpp>
+#include <utility>
 
 using af::dim4;
 
@@ -50,12 +51,8 @@ Array<T> index(const Array<T>& in, const af_index_t idxrs[])
         isSeq[x] = idxrs[x].isSeq;
     }
 
-    // rettrieve
-    dim4 iDims = in.dims();
-    dim4 dDims = in.getDataDims();
-    dim4 oDims = toDims  (seqs, iDims);
-    dim4 iOffs = toOffset(seqs, dDims);
-    dim4 iStrds= toStride(seqs, dDims);
+    // retrieve
+    dim4 oDims = toDims(seqs, in.dims());
 
     std::vector< Array<uint> > idxArrs(4, createEmptyArray<uint>(dim4()));
     // look through indexs to read af_array indexs
@@ -68,18 +65,25 @@ Array<T> index(const Array<T>& in, const af_index_t idxrs[])
     }
 
     Array<T> out = createEmptyArray<T>(oDims);
-    dim4 oStrides= out.strides();
 
 
-    auto func = [=] (Array<T> out, const Array<T> in) {
-
-        const T *src = in.get();
-              T *dst = out.get();
-
-        const uint* ptr0 = idxArrs[0].get();
-        const uint* ptr1 = idxArrs[1].get();
-        const uint* ptr2 = idxArrs[2].get();
-        const uint* ptr3 = idxArrs[3].get();
+    auto func = [=] (Array<T> out, const Array<T> in,
+                     const bool isSeq[],
+                     const std::vector<af_seq> seqs,
+                     const std::vector< Array<uint> > idxArrs) {
+
+        const dim4 iDims    = in.dims();
+        const dim4 dDims    = in.getDataDims();
+        const dim4 iOffs    = toOffset(seqs, dDims);
+        const dim4 iStrds   = toStride(seqs, dDims);
+        const dim4 oDims    = out.dims();
+        const dim4 oStrides = out.strides();
+        const T *src        = in.get();
+              T *dst        = out.get();
+        const uint* ptr0    = idxArrs[0].get();
+        const uint* ptr1    = idxArrs[1].get();
+        const uint* ptr2    = idxArrs[2].get();
+        const uint* ptr3    = idxArrs[3].get();
 
         for (dim_t l=0; l<oDims[3]; ++l) {
 
@@ -112,7 +116,7 @@ Array<T> index(const Array<T>& in, const af_index_t idxrs[])
         }
     };
 
-    getQueue().enqueue(func, out, in);
+    getQueue().enqueue(func, out, in, std::move(isSeq), std::move(seqs), std::move(idxArrs));
 
     return out;
 }

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