diff options
author | Cedric Nugteren <web@cedricnugteren.nl> | 2018-08-14 22:52:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-14 22:52:36 +0200 |
commit | c2c1e5fa953659a8ccd647be2e98bc8505ac2abf (patch) | |
tree | 515498d33951368cf997c5bf1790e6bea458b5cf | |
parent | dd1fa7cc8184223900292939dab2518e6a28a6db (diff) | |
parent | bf43dbb4ee076ad74ea330fe87e457d20e297735 (diff) |
Merge pull request #312 from CNugteren/CLBlast-311-missing-event-in-trsv-trsm
Missing events in TRSV and TRSM
-rw-r--r-- | src/clpp11.hpp | 5 | ||||
-rw-r--r-- | src/routines/level2/xtrsv.cpp | 13 | ||||
-rw-r--r-- | src/routines/level2/xtrsv.hpp | 4 | ||||
-rw-r--r-- | src/routines/level3/xtrsm.cpp | 2 | ||||
-rw-r--r-- | src/routines/level3/xtrsm.hpp | 1 |
5 files changed, 15 insertions, 10 deletions
diff --git a/src/clpp11.hpp b/src/clpp11.hpp index 70da2329..94464990 100644 --- a/src/clpp11.hpp +++ b/src/clpp11.hpp @@ -729,9 +729,10 @@ class Buffer { } // Copies the contents of this buffer into another device buffer - void CopyToAsync(const Queue &queue, const size_t size, const Buffer<T> &destination) const { + void CopyToAsync(const Queue &queue, const size_t size, const Buffer<T> &destination, + EventPointer event = nullptr) const { CheckError(clEnqueueCopyBuffer(queue(), *buffer_, destination(), 0, 0, size*sizeof(T), 0, - nullptr, nullptr)); + nullptr, event)); } void CopyTo(const Queue &queue, const size_t size, const Buffer<T> &destination) const { CopyToAsync(queue, size, destination); diff --git a/src/routines/level2/xtrsv.cpp b/src/routines/level2/xtrsv.cpp index 76401753..2a5a5664 100644 --- a/src/routines/level2/xtrsv.cpp +++ b/src/routines/level2/xtrsv.cpp @@ -33,7 +33,8 @@ void Xtrsv<T>::Substitution(const Layout layout, const Triangle triangle, const size_t n, const Buffer<T> &a_buffer, const size_t a_offset, const size_t a_ld, const Buffer<T> &b_buffer, const size_t b_offset, const size_t b_inc, - const Buffer<T> &x_buffer, const size_t x_offset, const size_t x_inc) { + const Buffer<T> &x_buffer, const size_t x_offset, const size_t x_inc, + EventPointer event) { if (n > db_["TRSV_BLOCK_SIZE"]) { throw BLASError(StatusCode::kUnexpectedError); }; @@ -69,9 +70,7 @@ void Xtrsv<T>::Substitution(const Layout layout, const Triangle triangle, // Launches the kernel const auto local = std::vector<size_t>{db_["TRSV_BLOCK_SIZE"]}; const auto global = std::vector<size_t>{Ceil(n, db_["TRSV_BLOCK_SIZE"])}; - auto event = Event(); - RunKernel(kernel, queue_, device_, global, local, event.pointer()); - event.WaitForCompletion(); + RunKernel(kernel, queue_, device_, global, local, event); } // ================================================================================================= @@ -146,14 +145,16 @@ void Xtrsv<T>::DoTrsv(const Layout layout, const Triangle triangle, } // Runs the triangular substitution for the block size + auto sub_event = Event(); Substitution(layout, triangle, a_transpose, diagonal, block_size, a_buffer, a_offset + col + col*a_ld, a_ld, b_buffer, b_offset + col*b_inc, b_inc, - x_buffer, x_offset + col*x_inc, x_inc); + x_buffer, x_offset + col*x_inc, x_inc, sub_event.pointer()); + sub_event.WaitForCompletion(); } // Retrieves the results - x_buffer.CopyTo(queue_, x_size, b_buffer); + x_buffer.CopyToAsync(queue_, x_size, b_buffer, event_); } // ================================================================================================= diff --git a/src/routines/level2/xtrsv.hpp b/src/routines/level2/xtrsv.hpp index 67e626a1..8a900a35 100644 --- a/src/routines/level2/xtrsv.hpp +++ b/src/routines/level2/xtrsv.hpp @@ -32,6 +32,7 @@ class Xtrsv: public Xgemv<T> { using Xgemv<T>::device_; using Xgemv<T>::db_; using Xgemv<T>::program_; + using Xgemv<T>::event_; using Xgemv<T>::DoGemv; // Constructor @@ -50,7 +51,8 @@ class Xtrsv: public Xgemv<T> { const size_t n, const Buffer<T> &a_buffer, const size_t a_offset, const size_t a_ld, const Buffer<T> &b_buffer, const size_t b_offset, const size_t b_inc, - const Buffer<T> &x_buffer, const size_t offset_x, const size_t x_inc); + const Buffer<T> &x_buffer, const size_t offset_x, const size_t x_inc, + EventPointer event); }; // ================================================================================================= diff --git a/src/routines/level3/xtrsm.cpp b/src/routines/level3/xtrsm.cpp index 905660ff..fe5d1e14 100644 --- a/src/routines/level3/xtrsm.cpp +++ b/src/routines/level3/xtrsm.cpp @@ -246,7 +246,7 @@ void Xtrsm<T>::TrsmColMajor(const Side side, const Triangle triangle, } // Retrieves the results - x_buffer.CopyTo(queue_, b_size, b_buffer); + x_buffer.CopyToAsync(queue_, b_size, b_buffer, event_); } // ================================================================================================= diff --git a/src/routines/level3/xtrsm.hpp b/src/routines/level3/xtrsm.hpp index 5b42398e..871d7253 100644 --- a/src/routines/level3/xtrsm.hpp +++ b/src/routines/level3/xtrsm.hpp @@ -31,6 +31,7 @@ class Xtrsm: public Xgemm<T> { using Xgemm<T>::device_; using Xgemm<T>::db_; using Xgemm<T>::program_; + using Xgemm<T>::event_; using Xgemm<T>::DoGemm; // Constructor |