Beispiel #1
0
 def apply_all(self, ast):
     """ Apply mutation to all matches """
     start_node = None
     self.ast = ast
     f = OmpParallelFilter(device = self.device)
     num = 0;
     self.kernel_name = self.kernel_prefix
     old_prefix = self.kernel_prefix
     old_parallel = self._parallel
     try:
         for elem in f.iterate(ast):
             # Save previous state
             self.kernel_name = self.kernel_name + str(num)
             self.kernel_prefix = self.kernel_prefix + str(num)
             self._clauses = {}
             # Current scope variables
             self._func_def = f.get_func_def()
             self._target_device_node = f._target_device_node
             self._clauses = self._get_dict_from_clauses(f._target_device_node.clauses, ast)
             self._parallel = elem
             start_node = self.mutatorFunction(ast, elem)
             # Restore previous state
             # TODO : Maybe a parent relink is needed?
             self._parallel = old_parallel
             self.kernel_prefix = old_prefix
             self.kernel_name = old_prefix
             num += 1;
     except NodeNotFound as nf:
         print str(nf)
     except StopIteration:
         return self._parallel
     return ast
Beispiel #2
0
 def filter(self, ast):
     """ Filter definition
         Returns the first node matching with the filter"""
     # Build a visitor , matching the OmpFor node of the AST
     f = OmpParallelFilter(device = self.device)
     node = f.apply(ast)
     self._func_def = f.get_func_def()
     self._parallel = node
     return node