# Pretty print OpenCL program from openre.data_types import types, null from openre.templates import create_env env = create_env() source_file_name = "device/opencl.c" code = env.get_template(source_file_name).render( types=types, null=null ) print code
def __init__(self, config): super(OpenCL, self).__init__(config) if cl is None: raise ImportError('Install PyOpenCL to support OpenCL devices') platform_id = self.config.get('platform', 0) device_type = self.config.get('device_type') if device_type: self.device = cl.get_platforms()[platform_id].get_devices( getattr(cl.device_type, 'CPU'))[self.config.get('device', 0)] else: self.device = cl.get_platforms()[platform_id] \ .get_devices()[self.config.get('device', 0)] # create an OpenCL context self.ctx = cl.Context([self.device], dev_type=None) self.queue = cl.CommandQueue(self.ctx) env = create_env() source_file_name = config.get('source_file_name', "device/opencl.c") self.config['threshold_inc'] = self.config.get('threshold_inc', 10) self.config['threshold_dec'] = self.config.get('threshold_dec', 5) code = env.get_template(source_file_name).render( types=types, null=null, config=self.config ) # search kernel sources by pattern device/*/templates/device/*.c #code = [code] #base_dir = os.path.join(os.path.dirname(__file__), '..') #for module_name in sorted( # [file_name for file_name in os.listdir(base_dir) \ # if os.path.isdir('%s/%s' % (base_dir, file_name)) \ # and file_name not in ['opencl'] \ # and file_name[0:2] != '__' # ] #): # module_dir = os.path.join(base_dir, module_name) # if os.path.isdir(os.path.join(module_dir, 'templates')) \ # and os.path.isdir(os.path.join( # module_dir, 'templates', 'device')): # templates_dir = os.path.join(module_dir, 'templates', 'device') # # find *.c # for code_file_name in sorted( # [file_name for file_name in os.listdir(templates_dir) \ # if os.path.isfile('%s/%s' % (templates_dir, file_name)) \ # and file_name[-2:] == '.c' # ] # ): # code.append( # env.get_template('device/%s' % code_file_name).render( # types=types, # null=null # ) # ) #code = ''.join(code) # compile the kernel self.program = cl.Program(self.ctx, code).build( options="-cl-denorms-are-zero " \ "-cl-no-signed-zeros " \ "-cl-finite-math-only" ) self._source_cache = None