[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