def get_header(self): object = self.object transpiler = OpenCLConverter(known_types=self.known_types) headers = [] helpers = [] if hasattr(object.kernel, '_get_helpers_'): helpers.extend(object.kernel._get_helpers_()) for equation in object.all_group.equations: if hasattr(equation, '_get_helpers_'): for helper in equation._get_helpers_(): if helper not in helpers: helpers.append(helper) headers.extend(get_helper_code(helpers, transpiler)) headers.append(transpiler.parse_instance(object.kernel)) cls_name = object.kernel.__class__.__name__ self.known_types['SPH_KERNEL'] = KnownType('__global %s*' % cls_name, base_type=cls_name) headers.append(object.all_group.get_equation_wrappers( self.known_types)) # This is to be done after the above as the equation names are assigned # only at this point. cpu_structs = self._cpu_structs h = CStructHelper(object.kernel) cpu_structs['kern'] = h.get_array() for eq in object.all_group.equations: self._equations[eq.var_name] = eq h.parse(eq) cpu_structs[eq.var_name] = h.get_array() return '\n'.join(headers)
def get_helper_code(helpers, transpiler=None): """This function generates any additional code for the given list of helpers. """ result = [] if transpiler is None: transpiler = OpenCLConverter() doc = '\n// Helpers.\n' result.append(doc) for helper in helpers: result.append(transpiler.parse_function(helper)) return result
def get_stepper_code(self): classes = {} for dest, stepper in self.object.steppers.items(): cls = stepper.__class__.__name__ classes[cls] = stepper known_types = dict(self.acceleration_eval_helper.known_types) code_gen = OpenCLConverter(known_types=known_types) wrappers = [] for cls in sorted(classes.keys()): wrappers.append(code_gen.parse_instance(classes[cls])) return '\n'.join(wrappers)