[arrayfire] 16/284: Async CPU Transpose. Fix bug in eval

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 1842bcf50998ca83b9fc5a94f7823a1e6f5aade8
Author: Umar Arshad <umar at arrayfire.com>
Date:   Tue Sep 22 15:14:55 2015 -0400

    Async CPU Transpose. Fix bug in eval
---
 src/backend/cpu/Array.cpp     |  9 +++++----
 src/backend/cpu/transpose.cpp | 30 +++++++++++++++++++++---------
 2 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/src/backend/cpu/Array.cpp b/src/backend/cpu/Array.cpp
index d714fd9..64aacf5 100644
--- a/src/backend/cpu/Array.cpp
+++ b/src/backend/cpu/Array.cpp
@@ -67,11 +67,12 @@ namespace cpu
     template<typename T>
     void Array<T>::eval()
     {
-        auto func = [this] {
-            if (isReady()) return;
+        if (isReady()) return;
 
+        data = std::shared_ptr<T>(memAlloc<T>(elements()), memFree<T>);
+
+        auto func = [this] {
             setId(getActiveDeviceId());
-            data = std::shared_ptr<T>(memAlloc<T>(elements()), memFree<T>);
             T *ptr = data.get();
 
             dim4 ostrs = strides();
@@ -95,13 +96,13 @@ namespace cpu
                 }
             }
 
-            ready = true;
             Node_ptr prev = node;
             prev->reset();
             // FIXME: Replace the current node in any JIT possible trees with the new BufferNode
             node.reset();
         };
 
+        ready = true;
         getQueue().enqueue(func);
     }
 
diff --git a/src/backend/cpu/transpose.cpp b/src/backend/cpu/transpose.cpp
index f820f9e..4afbfaa 100644
--- a/src/backend/cpu/transpose.cpp
+++ b/src/backend/cpu/transpose.cpp
@@ -12,6 +12,8 @@
 #include <ArrayInfo.hpp>
 #include <Array.hpp>
 #include <transpose.hpp>
+#include <platform.hpp>
+#include <async_queue.hpp>
 
 #include <utility>
 #include <cassert>
@@ -78,15 +80,8 @@ void transpose_(T *out, const T *in, const af::dim4 &odims, const af::dim4 &idim
 }
 
 template<typename T>
-Array<T> transpose(const Array<T> &in, const bool conjugate)
+void transpose_(Array<T> out, const Array<T> in, const bool conjugate)
 {
-    const dim4 inDims = in.dims();
-
-    dim4 outDims   = dim4(inDims[1],inDims[0],inDims[2],inDims[3]);
-
-    // create an array with first two dimensions swapped
-    Array<T> out  = createEmptyArray<T>(outDims);
-
     // get data pointers for input and output Arrays
     T* outData          = out.get();
     const T*   inData   = in.get();
@@ -98,7 +93,18 @@ Array<T> transpose(const Array<T> &in, const bool conjugate)
         transpose_<T, false>(outData, inData,
                              out.dims(), in.dims(), out.strides(), in.strides());
     }
+}
+
+template<typename T>
+Array<T> transpose(const Array<T> &in, const bool conjugate)
+{
+    const dim4 inDims = in.dims();
+
+    dim4 outDims   = dim4(inDims[1],inDims[0],inDims[2],inDims[3]);
 
+    // create an array with first two dimensions swapped
+    Array<T> out  = createEmptyArray<T>(outDims);
+    getQueue().enqueue(transpose_<T>, out, in, conjugate);
     return out;
 }
 
@@ -133,7 +139,7 @@ void transpose_inplace(T *in, const af::dim4 &idims, const af::dim4 &istrides)
 }
 
 template<typename T>
-void transpose_inplace(Array<T> &in, const bool conjugate)
+void transpose_inplace_(Array<T> in, const bool conjugate)
 {
     // get data pointers for input and output Arrays
     T* inData = in.get();
@@ -145,6 +151,12 @@ void transpose_inplace(Array<T> &in, const bool conjugate)
     }
 }
 
+template<typename T>
+void transpose_inplace(Array<T> &in, const bool conjugate)
+{
+    getQueue().enqueue(transpose_inplace_<T>, in, conjugate);
+}
+
 #define INSTANTIATE(T)                                                      \
     template Array<T> transpose(const Array<T> &in, const bool conjugate);  \
     template void transpose_inplace(Array<T> &in, const bool conjugate);

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