From 224cb8c3eb970620dd0f14fa1a6c713c608028a6 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Thu, 23 Jun 2016 18:48:32 -0500
Subject: [PATCH] Fix device kernel naming

---
 loopy/schedule/device_mapping.py | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/loopy/schedule/device_mapping.py b/loopy/schedule/device_mapping.py
index 77a07f000..714aa7b3e 100644
--- a/loopy/schedule/device_mapping.py
+++ b/loopy/schedule/device_mapping.py
@@ -34,16 +34,24 @@ def map_schedule_onto_host_or_device(kernel):
     from loopy.kernel import kernel_state
     assert kernel.state == kernel_state.SCHEDULED
 
+    from functools import partial
+    device_prog_name_gen = partial(
+                kernel.get_var_name_generator(),
+                kernel.target.device_program_name_prefix
+                + kernel.name
+                + kernel.target.device_program_name_suffix)
+
     if not kernel.target.split_kernel_at_global_barriers():
         new_schedule = (
-            [CallKernel(kernel_name=kernel.name,
+            [CallKernel(kernel_name=device_prog_name_gen(),
                         extra_args=[],
                         extra_inames=[])] +
             list(kernel.schedule) +
             [ReturnFromKernel(kernel_name=kernel.name)])
         kernel = kernel.copy(schedule=new_schedule)
     else:
-        kernel = map_schedule_onto_host_or_device_impl(kernel)
+        kernel = map_schedule_onto_host_or_device_impl(
+                kernel, device_prog_name_gen)
 
     return restore_and_save_temporaries(
         add_extra_args_to_schedule(kernel))
@@ -648,7 +656,7 @@ def add_extra_args_to_schedule(kernel):
     return kernel.copy(schedule=new_schedule)
 
 
-def map_schedule_onto_host_or_device_impl(kernel):
+def map_schedule_onto_host_or_device_impl(kernel, device_prog_name_gen):
     schedule = kernel.schedule
     loop_bounds = get_block_boundaries(schedule)
 
@@ -739,13 +747,10 @@ def map_schedule_onto_host_or_device_impl(kernel):
 
     # Assign names, extra_inames to CallKernel / ReturnFromKernel instructions
     inames = []
-    from functools import partial
-    kernel_name_gen = partial(
-                kernel.get_var_name_generator(),
-                kernel.name + kernel.target.device_program_name_suffix)
+
     for idx, sched_item in enumerate(new_schedule):
         if isinstance(sched_item, CallKernel):
-            last_kernel_name = kernel_name_gen()
+            last_kernel_name = device_prog_name_gen()
             new_schedule[idx] = sched_item.copy(
                 kernel_name=last_kernel_name,
                 extra_inames=list(inames))
-- 
GitLab