diff --git a/bin/loopy b/bin/loopy index ef4be07444d742ab9059674661f60b1fb6262467..31551c16debff1f8a73153a5796af57b7494a931 100644 --- a/bin/loopy +++ b/bin/loopy @@ -63,7 +63,8 @@ def main(): parser.add_argument("outfile", default="-", metavar="OUTPUT_FILE", help="Defaults to stdout ('-').", nargs='?') parser.add_argument("--lang", metavar="LANGUAGE", help="loopy|fortran") - parser.add_argument("--target") + parser.add_argument("--target", choices=("opencl", "ispc", "c", "cuda"), + default="opencl") parser.add_argument("--name") parser.add_argument("--transform") parser.add_argument("--edit-code", action="store_true") @@ -72,9 +73,22 @@ def main(): parser.add_argument("--print-ir", action="store_true") args = parser.parse_args() - if args.target is not None: - from warnings import warn - warn("--target option is deprecated and ignored") + if args.target == "opencl": + from loopy.target.opencl import OpenCLTarget + target = OpenCLTarget() + elif args.target == "ispc": + from loopy.target.ispc import ISPCTarget + target = ISPCTarget() + elif args.target == "c": + from loopy.target.c import CTarget + target = CTarget() + elif args.target == "cuda": + from loopy.target.cuda import CudaTarget + target = CudaTarget() + else: + raise ValueError("unknown target: %s" % target) + + lp.set_default_target(target) lang = None if args.infile == "-": diff --git a/loopy/__init__.py b/loopy/__init__.py index 66fc351eed9f4ff84132afd787c1c5892ef56a1d..86a5ce09ce35d623dd2edbccae1a49662ab5cdd2 100644 --- a/loopy/__init__.py +++ b/loopy/__init__.py @@ -354,4 +354,31 @@ def make_copy_kernel(new_dim_tags, old_dim_tags=None): # }}} +# {{{ default target + +_DEFAULT_TARGET = None + + +def _set_up_default_target(): + try: + import pyopencl # noqa + except ImportError: + from loopy.target.opencl import OpenCLTarget + target = OpenCLTarget() + else: + from loopy.target.pyopencl import PyOpenCLTarget + target = PyOpenCLTarget() + + set_default_target(target) + + +def set_default_target(target): + # deliberately undocumented for now + global _DEFAULT_TARGET + _DEFAULT_TARGET = target + + +# }}} + + # vim: foldmethod=marker diff --git a/loopy/kernel/creation.py b/loopy/kernel/creation.py index 4683ca905c32cdcade15e32c9745ec353d886375..9a0d5905a17179c17a120d04a017519250de6f8b 100644 --- a/loopy/kernel/creation.py +++ b/loopy/kernel/creation.py @@ -1071,7 +1071,7 @@ def make_kernel(domains, instructions, kernel_data=["..."], **kwargs): :arg options: an instance of :class:`loopy.Options` or an equivalent string representation :arg target: an instance of :class:`loopy.target.TargetBase`, or *None*, - to use an OpenCL target. + to use the default target. (see :func:`loopy.set_default_target`) """ defines = kwargs.pop("defines", {}) @@ -1083,14 +1083,8 @@ def make_kernel(domains, instructions, kernel_data=["..."], **kwargs): target = kwargs.pop("target", None) if target is None: - try: - import pyopencl # noqa - except ImportError: - from loopy.target.opencl import OpenCLTarget - target = OpenCLTarget() - else: - from loopy.target.pyopencl import PyOpenCLTarget - target = PyOpenCLTarget() + from loopy import _DEFAULT_TARGET + target = _DEFAULT_TARGET if flags is not None: if options is not None: