summaryrefslogtreecommitdiff
path: root/src/routines/level1/xnrm2.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/routines/level1/xnrm2.cc')
-rw-r--r--src/routines/level1/xnrm2.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/routines/level1/xnrm2.cc b/src/routines/level1/xnrm2.cc
index 685eb29f..04e4137c 100644
--- a/src/routines/level1/xnrm2.cc
+++ b/src/routines/level1/xnrm2.cc
@@ -29,7 +29,7 @@ template <> const Precision Xnrm2<double2>::precision_ = Precision::kComplexDoub
// Constructor: forwards to base class constructor
template <typename T>
-Xnrm2<T>::Xnrm2(Queue &queue, Event &event, const std::string &name):
+Xnrm2<T>::Xnrm2(Queue &queue, EventPointer event, const std::string &name):
Routine<T>(queue, event, name, {"Xdot"}, precision_) {
source_string_ =
#include "../../kernels/level1/xnrm2.opencl"
@@ -69,12 +69,16 @@ StatusCode Xnrm2<T>::DoNrm2(const size_t n,
kernel1.SetArgument(2, static_cast<int>(x_offset));
kernel1.SetArgument(3, static_cast<int>(x_inc));
kernel1.SetArgument(4, temp_buffer());
+ // Event waiting list
+ auto eventWaitList = std::vector<Event>();
// Launches the main kernel
auto global1 = std::vector<size_t>{db_["WGS1"]*temp_size};
auto local1 = std::vector<size_t>{db_["WGS1"]};
- status = RunKernel(kernel1, global1, local1);
+ auto kernelEvent = Event();
+ status = RunKernel(kernel1, global1, local1, kernelEvent.pointer());
if (ErrorIn(status)) { return status; }
+ eventWaitList.push_back(kernelEvent);
// Sets the arguments for the epilogue kernel
kernel2.SetArgument(0, temp_buffer());
@@ -84,7 +88,7 @@ StatusCode Xnrm2<T>::DoNrm2(const size_t n,
// Launches the epilogue kernel
auto global2 = std::vector<size_t>{db_["WGS2"]};
auto local2 = std::vector<size_t>{db_["WGS2"]};
- status = RunKernel(kernel2, global2, local2);
+ status = RunKernel(kernel2, global2, local2, event_, eventWaitList);
if (ErrorIn(status)) { return status; }
// Succesfully finished the computation