コード例 #1
0
ファイル: __init__.py プロジェクト: pohlt/pyopencl
    def _build_and_catch_errors(self, build_func, options, source=None):
        try:
            return build_func()
        except _cl.RuntimeError, e:
            from pytools import Record

            class ErrorRecord(Record):
                pass

            what = e.what
            if options:
                what = what + "\n(options: %s)" % " ".join(options)

            if source is not None:
                from tempfile import NamedTemporaryFile
                srcfile = NamedTemporaryFile(mode="wt",
                                             delete=False,
                                             suffix=".cl")
                try:
                    srcfile.write(source)
                finally:
                    srcfile.close()

                what = what + "\n(source saved as %s)" % srcfile.name

            code = e.code
            routine = e.routine

            err = _cl.RuntimeError(
                ErrorRecord(what=lambda: what,
                            code=lambda: code,
                            routine=lambda: routine))
コード例 #2
0
ファイル: __init__.py プロジェクト: stephenbalaban/pyopencl
    def build(self, options=[], devices=None, cache_dir=None):
        if isinstance(options, str):
            options = [options]

        options = options + ["-I", _find_pyopencl_include_path()]

        import os
        if os.environ.get("PYOPENCL_NO_CACHE") and self._prg is None:
            self._prg = _cl._Program(self._context, self._source)

        if self._prg is not None:
            if isinstance(options, list):
                options = " ".join(options)

            self._prg._build(options, devices)
        else:
            from pyopencl.cache import create_built_program_from_source_cached

            err = None
            try:
                self._prg = create_built_program_from_source_cached(
                    self._context,
                    self._source,
                    options,
                    devices,
                    cache_dir=cache_dir)
            except _cl.RuntimeError, e:
                from pytools import Record

                class ErrorRecord(Record):
                    pass

                from tempfile import NamedTemporaryFile
                srcfile = NamedTemporaryFile(mode="wt",
                                             delete=False,
                                             suffix=".cl")
                try:
                    srcfile.write(self._source)
                finally:
                    srcfile.close()

                what = e.what + "\n(source saved as %s)" % srcfile.name
                code = e.code
                routine = e.routine

                err = _cl.RuntimeError(
                    ErrorRecord(what=lambda: what,
                                code=lambda: code,
                                routine=lambda: routine))

            if err is not None:
                # Python 3.2 outputs the whole list of currently active exceptions
                # This serves to remove one (redundant) level from that nesting.
                raise err

            del self._context
            del self._source
コード例 #3
0
ファイル: __init__.py プロジェクト: pei2748/PyOpenCL
    def program_build(self, options="", devices=None):
        try:
            self._build(options=options, devices=devices)
        except Exception, e:
            build_logs = []
            for dev in self.devices:
                try:
                    log = self.get_build_info(dev, program_build_info.LOG)
                except:
                    log = "<error retrieving log>"

                build_logs.append((dev, log))

            raise _cl.RuntimeError(
                str(e) + "\n\n" +
                (75 * "=" + "\n").join("Build on %s:\n\n%s" % (dev, log)
                                       for dev, log in build_logs))
コード例 #4
0
ファイル: __init__.py プロジェクト: pohlt/pyopencl
    def program_build(self, options=[], devices=None):
        if isinstance(options, list):
            options = " ".join(options)

        err = None
        try:
            self._build(options=options, devices=devices)
        except Exception, e:
            from pytools import Record

            class ErrorRecord(Record):
                pass

            what = e.what + "\n\n" + (75 * "=" + "\n").join(
                "Build on %s:\n\n%s" % (dev, log)
                for dev, log in self._get_build_logs())
            code = e.code
            routine = e.routine

            err = _cl.RuntimeError(
                ErrorRecord(what=lambda: what,
                            code=lambda: code,
                            routine=lambda: routine))