From 8dc0ea33f541eda14ac8735b2eb44b53183c6fa4 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Mon, 7 Dec 2015 18:38:47 -0600 Subject: [PATCH] Support choosing target from the command line --- bin/loopy | 22 ++++++++++++++++++---- loopy/__init__.py | 27 +++++++++++++++++++++++++++ loopy/kernel/creation.py | 12 +++--------- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/bin/loopy b/bin/loopy index ef4be0744..31551c16d 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 66fc351ee..86a5ce09c 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 4683ca905..9a0d5905a 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: -- GitLab