[arrayfire] 24/284: converted lu & cholesky decomposition functions to async calls

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Sun Feb 7 18:59:15 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 551433e7aaf045d9c22ed4a2c107d7f9f1149b59
Author: pradeep <pradeep at arrayfire.com>
Date:   Thu Nov 19 19:02:51 2015 -0500

    converted lu & cholesky decomposition functions to async calls
---
 src/backend/cpu/cholesky.cpp | 12 +++++++++---
 src/backend/cpu/lu.cpp       | 20 ++++++++++----------
 2 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/src/backend/cpu/cholesky.cpp b/src/backend/cpu/cholesky.cpp
index 57beaa4..d0bd3c8 100644
--- a/src/backend/cpu/cholesky.cpp
+++ b/src/backend/cpu/cholesky.cpp
@@ -18,8 +18,9 @@
 #include <cassert>
 #include <err_cpu.hpp>
 #include <triangle.hpp>
-
 #include <lapack_helper.hpp>
+#include <platform.hpp>
+#include <async_queue.hpp>
 
 namespace cpu
 {
@@ -65,8 +66,13 @@ int cholesky_inplace(Array<T> &in, const bool is_upper)
     if(is_upper)
         uplo = 'U';
 
-    int info = potrf_func<T>()(AF_LAPACK_COL_MAJOR, uplo,
-                               N, in.get(), in.strides()[1]);
+    int info = 0;
+    auto func = [&] (int& info, Array<T>& in) {
+        info = potrf_func<T>()(AF_LAPACK_COL_MAJOR, uplo, N, in.get(), in.strides()[1]);
+    };
+
+    getQueue().enqueue(func, info, in);
+    getQueue().sync();
 
     return info;
 }
diff --git a/src/backend/cpu/lu.cpp b/src/backend/cpu/lu.cpp
index 0eefb16..ed165cb 100644
--- a/src/backend/cpu/lu.cpp
+++ b/src/backend/cpu/lu.cpp
@@ -17,9 +17,10 @@
 #include <iostream>
 #include <cassert>
 #include <err_cpu.hpp>
-
 #include <range.hpp>
 #include <lapack_helper.hpp>
+#include <platform.hpp>
+#include <async_queue.hpp>
 
 namespace cpu
 {
@@ -128,23 +129,22 @@ void lu(Array<T> &lower, Array<T> &upper, Array<int> &pivot, const Array<T> &in)
     lower = createEmptyArray<T>(ldims);
     upper = createEmptyArray<T>(udims);
 
-    lu_split<T>(lower, upper, in_copy);
+    getQueue().enqueue(lu_split<T>, lower, upper, in_copy);
 }
 
 template<typename T>
 Array<int> lu_inplace(Array<T> &in, const bool convert_pivot)
 {
     dim4 iDims = in.dims();
-    int M = iDims[0];
-    int N = iDims[1];
-
-    Array<int> pivot = createEmptyArray<int>(af::dim4(min(M, N), 1, 1, 1));
+    Array<int> pivot = createEmptyArray<int>(af::dim4(min(iDims[0], iDims[1]), 1, 1, 1));
 
-    getrf_func<T>()(AF_LAPACK_COL_MAJOR, M, N,
-                    in.get(), in.strides()[1],
-                    pivot.get());
+    auto func = [=] (Array<T> in, Array<int> pivot, const bool convert_pivot) {
+        dim4 iDims = in.dims();
+        getrf_func<T>()(AF_LAPACK_COL_MAJOR, iDims[0], iDims[1], in.get(), in.strides()[1], pivot.get());
+        if(convert_pivot) convertPivot(pivot, iDims[0]);
+    };
 
-    if(convert_pivot) convertPivot(pivot, M);
+    getQueue().enqueue(func, in, pivot, convert_pivot);
 
     return pivot;
 }

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