예제 #1
0
파일: core.py 프로젝트: openre/openre
# 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
예제 #2
0
파일: __init__.py 프로젝트: openre/openre
    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