diff --git a/sumpy/e2p.py b/sumpy/e2p.py index 3705832b8414ac746025f60e716528de69d33f88..70fdc6eedee40fa27fca852afc9a233527230e13 100644 --- a/sumpy/e2p.py +++ b/sumpy/e2p.py @@ -250,7 +250,7 @@ class E2PFromCSR(E2PBase): """] + loopy_insns + [""" end """] + [""" - result[{resultidx}, itgt] = \ + result[{resultidx}, itgt] = result[{resultidx}, itgt] + \ kernel_scaling * simul_reduce(sum, isrc_box, result_{resultidx}_p) {{id_prefix=write_result}} """.format(resultidx=i) for i in range(len(result_names))] + [""" diff --git a/sumpy/fmm.py b/sumpy/fmm.py index a2f933d51e4989bfc37b93956bf693366e79b31d..a3d73f55c106288cfe986bbfc18c30ccf9c41f93 100644 --- a/sumpy/fmm.py +++ b/sumpy/fmm.py @@ -379,40 +379,40 @@ class SumpyExpansionWrangler(object): def eval_multipoles(self, level_start_target_box_nrs, - target_boxes, source_box_starts, - source_box_lists, mpole_exps): + target_boxes, source_boxes_by_level, mpole_exps): pot = self.potential_zeros() kwargs = self.kernel_extra_kwargs.copy() kwargs.update(self.box_target_list_kwargs()) - events = [] - for lev in range(self.tree.nlevels): - start, stop = level_start_target_box_nrs[lev:lev+2] - if start == stop: + wait_for = mpole_exps.events + + for isrc_level, ssn in enumerate(source_boxes_by_level): + if len(target_boxes) == 0: continue - m2p = self.code.m2p(self.fmm_level_to_order(lev)) + m2p = self.code.m2p(self.fmm_level_to_order(isrc_level)) evt, pot_res = m2p( - self.level_queues[lev], + self.queue, expansions=mpole_exps, - target_boxes=target_boxes[start:stop], - source_box_starts=source_box_starts[start:stop+1], - source_box_lists=source_box_lists, + target_boxes=target_boxes, + source_box_starts=ssn.starts, + source_box_lists=ssn.lists, centers=self.tree.box_centers, result=pot, - wait_for=mpole_exps.events, + wait_for=wait_for, **kwargs) + wait_for = [evt] + for pot_i, pot_res_i in zip(pot, pot_res): assert pot_i is pot_res_i - events.append(evt) - evt = _enqueue_barrier(self.queue, wait_for=events) for pot_i in pot: + # Intentionally only adding the last event. pot_i.add_event(evt) return pot diff --git a/sumpy/version.py b/sumpy/version.py index a19f3ddac1540cf069923ed59355c57387c7a5a7..69d68be41442c6a8b2c2c7e2091fdc2025d14de7 100644 --- a/sumpy/version.py +++ b/sumpy/version.py @@ -25,4 +25,4 @@ VERSION = (2016, 1) VERSION_STATUS = "beta1" VERSION_TEXT = ".".join(str(x) for x in VERSION) + VERSION_STATUS -KERNEL_VERSION = 8 +KERNEL_VERSION = 9