diff options
Diffstat (limited to 'src/routines/level1/xnrm2.cc')
-rw-r--r-- | src/routines/level1/xnrm2.cc | 10 |
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 |