|
5 | 5 | #pragma once |
6 | 6 |
|
7 | 7 |
|
8 | | -int some_id_base =0; |
9 | 8 | namespace dr::mp { |
10 | | -namespace __detail { |
11 | | - template <typename T, typename V> |
12 | | - class transform_fn_1 { |
13 | | - public: |
14 | | - using value_type = V; |
15 | | - using index_type = T; |
16 | | - transform_fn_1(std::size_t offset, std::size_t row_size, T* row_ptr): |
17 | | - offset_(offset), row_size_(row_size), row_ptr_(row_ptr) { |
18 | | - assert(offset_ == 0); |
19 | | - myid = some_id_base++; |
20 | | - fmt::print("created {}\n", myid); |
21 | | - } |
22 | | - |
23 | | - ~transform_fn_1() { |
24 | | - destroyed = true; |
25 | | - fmt::print("destroyed {}\n", myid); |
26 | | - } |
27 | | - template <typename P> |
28 | | - auto operator()(P entry) const { |
29 | | - fmt::print("called {}\n", myid); |
30 | | - assert(offset_ == 0); |
31 | | - assert(!destroyed); |
32 | | - auto [index, pair] = entry; |
33 | | - auto [val, column] = pair; |
34 | | - auto row = rng::distance( |
35 | | - row_ptr_, |
36 | | - std::upper_bound(row_ptr_, row_ptr_ + row_size_, offset_) - |
37 | | - 1); |
38 | | - dr::index<index_type> index_obj(row, column); |
39 | | - value_type entry_obj(index_obj, val); |
40 | | - return entry_obj; |
41 | | - } |
42 | | - private: |
43 | | - int myid = 0; |
44 | | - bool destroyed = false; |
45 | | - std::size_t offset_; |
46 | | - std::size_t row_size_; |
47 | | - T* row_ptr_; |
48 | | - }; |
49 | | -} |
50 | 9 | template <typename DSM> class csr_row_segment_iterator; |
51 | 10 |
|
52 | 11 | template <typename DSM> class csr_row_segment_reference { |
@@ -96,10 +55,6 @@ template <typename DSM> class csr_row_segment_iterator { |
96 | 55 | dsm_ = dsm; |
97 | 56 | segment_index_ = segment_index; |
98 | 57 | index_ = index; |
99 | | - if (dsm_->vals_backend_.getrank() == segment_index_) { |
100 | | - elem_view_ = get_elem_view(dsm_, segment_index); |
101 | | - base_iter = elem_view_.begin(); |
102 | | - } |
103 | 58 | } |
104 | 59 |
|
105 | 60 | auto operator<=>(const csr_row_segment_iterator &other) const noexcept { |
@@ -273,35 +228,13 @@ template <typename DSM> class csr_row_segment_iterator { |
273 | 228 | auto local() const { |
274 | 229 | const auto my_process_segment_index = dsm_->vals_backend_.getrank(); |
275 | 230 | assert(my_process_segment_index == segment_index_); |
276 | | - auto [a, b] = *base_iter; |
277 | | - auto [c, d] = a; |
278 | | - fmt::print("aqwsedrftgyhuji {} {} {}\n", b, c, d); |
279 | | - return base_iter; |
| 231 | + return dsm_->local_view.begin(); |
280 | 232 | } |
281 | 233 |
|
282 | 234 | private: |
283 | 235 |
|
284 | | - static auto get_elem_view(DSM *dsm, std::size_t segment_index) { |
285 | | - std::size_t offset = dsm->segment_size_ * segment_index; |
286 | | - auto row_size = dsm->segment_size_; |
287 | | - auto vals_size = dsm->vals_size_; |
288 | | - auto local_vals = dsm->vals_data_; |
289 | | - auto local_vals_range = rng::subrange(local_vals, local_vals + vals_size); |
290 | | - auto local_cols = dsm->cols_data_; |
291 | | - auto local_cols_range = rng::subrange(local_cols, local_cols + vals_size); |
292 | | - auto local_rows = dsm->rows_data_->segments()[segment_index].begin().local(); |
293 | | - auto zipped_results = rng::views::zip(local_vals_range, local_cols_range); |
294 | | - auto enumerated_zipped = rng::views::enumerate(zipped_results); |
295 | | - auto transformer = __detail::transform_fn_1<index_type, value_type>(offset, row_size, local_rows); |
296 | | - return rng::views::transform(enumerated_zipped, transformer); |
297 | | - } |
298 | | - |
299 | 236 | // all fields need to be initialized by default ctor so every default |
300 | 237 | // constructed iter is equal to any other default constructed iter |
301 | | - using view_type = decltype(get_elem_view(std::declval<DSM*>(), 0)); |
302 | | - using iter_type = rng::iterator_t<view_type>; |
303 | | - view_type elem_view_; |
304 | | - iter_type base_iter; |
305 | 238 | DSM *dsm_ = nullptr; |
306 | 239 | std::size_t segment_index_ = 0; |
307 | 240 | std::size_t index_ = 0; |
|
0 commit comments