From ac581c6b5c38331e05e20d00e994b959286c63b1 Mon Sep 17 00:00:00 2001
From: Sam Yates <yates@cscs.ch>
Date: Tue, 31 Jul 2018 13:00:13 +0200
Subject: [PATCH] Split multi_event_stream.cu implementation. (#556)

* Remove dependency on memory library and range utils from `multi_event_stream.cu` source.

Fixes #545
---
 arbor/CMakeLists.txt                      |  1 +
 arbor/backends/gpu/multi_event_stream.cpp | 17 +++++++++++++++++
 arbor/backends/gpu/multi_event_stream.cu  | 15 ++-------------
 arbor/backends/gpu/multi_event_stream.hpp |  2 +-
 4 files changed, 21 insertions(+), 14 deletions(-)
 create mode 100644 arbor/backends/gpu/multi_event_stream.cpp

diff --git a/arbor/CMakeLists.txt b/arbor/CMakeLists.txt
index f3ff1c4d..b07fddd6 100644
--- a/arbor/CMakeLists.txt
+++ b/arbor/CMakeLists.txt
@@ -58,6 +58,7 @@ if(ARB_WITH_CUDA)
         backends/gpu/matrix_assemble.cu
         backends/gpu/matrix_interleave.cu
         backends/gpu/matrix_solve.cu
+        backends/gpu/multi_event_stream.cpp
         backends/gpu/multi_event_stream.cu
         backends/gpu/shared_state.cu
         backends/gpu/stimulus.cu
diff --git a/arbor/backends/gpu/multi_event_stream.cpp b/arbor/backends/gpu/multi_event_stream.cpp
new file mode 100644
index 00000000..858c9978
--- /dev/null
+++ b/arbor/backends/gpu/multi_event_stream.cpp
@@ -0,0 +1,17 @@
+#include <arbor/common_types.hpp>
+
+#include "backends/gpu/multi_event_stream.hpp"
+#include "memory/memory.hpp"
+
+namespace arb {
+namespace gpu {
+
+void multi_event_stream_base::clear() {
+    memory::fill(span_begin_, 0u);
+    memory::fill(span_end_, 0u);
+    memory::fill(mark_, 0u);
+    n_nonempty_stream_[0] = 0;
+}
+
+} // namespace gpu
+} // namespace arb
diff --git a/arbor/backends/gpu/multi_event_stream.cu b/arbor/backends/gpu/multi_event_stream.cu
index 5e4e5cf9..1ed5631b 100644
--- a/arbor/backends/gpu/multi_event_stream.cu
+++ b/arbor/backends/gpu/multi_event_stream.cu
@@ -2,10 +2,6 @@
 
 #include "backends/event.hpp"
 #include "backends/gpu/multi_event_stream.hpp"
-#include "memory/array.hpp"
-#include "memory/copy.hpp"
-#include "util/rangeutil.hpp"
-
 #include "cuda_common.hpp"
 
 namespace arb {
@@ -90,17 +86,10 @@ namespace kernels {
     }
 } // namespace kernels
 
-void multi_event_stream_base::clear() {
-    memory::fill(span_begin_, 0u);
-    memory::fill(span_end_, 0u);
-    memory::fill(mark_, 0u);
-    n_nonempty_stream_[0] = 0;
-}
-
 // Designate for processing events `ev` at head of each event stream `i`
 // until `event_time(ev)` > `t_until[i]`.
 void multi_event_stream_base::mark_until_after(const_view t_until) {
-    arb_assert(n_streams()==util::size(t_until));
+    arb_assert(n_streams()==t_until.size());
 
     constexpr int block_dim = 128;
 
@@ -113,7 +102,7 @@ void multi_event_stream_base::mark_until_after(const_view t_until) {
 // Designate for processing events `ev` at head of each event stream `i`
 // while `t_until[i]` > `event_time(ev)`.
 void multi_event_stream_base::mark_until(const_view t_until) {
-    arb_assert(n_streams()==util::size(t_until));
+    arb_assert(n_streams()==t_until.size());
     constexpr int block_dim = 128;
 
     unsigned n = n_stream_;
diff --git a/arbor/backends/gpu/multi_event_stream.hpp b/arbor/backends/gpu/multi_event_stream.hpp
index 217c1992..82842558 100644
--- a/arbor/backends/gpu/multi_event_stream.hpp
+++ b/arbor/backends/gpu/multi_event_stream.hpp
@@ -1,6 +1,6 @@
 #pragma once
 
-// Indexed collection of pop-only event queues --- multicore back-end implementation.
+// Indexed collection of pop-only event queues --- CUDA back-end implementation.
 
 #include <arbor/arbexcept.hpp>
 #include <arbor/common_types.hpp>
-- 
GitLab