diff --git a/loopy/kernel/creation.py b/loopy/kernel/creation.py index 89cb5f26a4940656cca1ab09841311148e113275..aacd76c09d42717cbb2701ee63edae2ea728f568 100644 --- a/loopy/kernel/creation.py +++ b/loopy/kernel/creation.py @@ -1859,6 +1859,13 @@ def make_kernel(domains, instructions, kernel_data=["..."], **kwargs): :arg seq_dependencies: If *True*, dependencies that sequentially connect the given *instructions* will be added. Defaults to *False*. + :arg fixed_parameters: A dictionary of *name*/*value* pairs, where *name* + will be fixed to *value*. *name* may refer to :ref:`domain-parameters` + or :ref:`arguments`. See also :func:`loopy.fix_parameters`. + + .. versionchanged:: 2017.2 + + *fixed_parameters* added. .. versionchanged:: 2016.3 @@ -1876,6 +1883,7 @@ def make_kernel(domains, instructions, kernel_data=["..."], **kwargs): flags = kwargs.pop("flags", None) target = kwargs.pop("target", None) seq_dependencies = kwargs.pop("seq_dependencies", False) + fixed_parameters = kwargs.pop("fixed_parameters", {}) if defines: from warnings import warn @@ -1996,11 +2004,14 @@ def make_kernel(domains, instructions, kernel_data=["..."], **kwargs): # ------------------------------------------------------------------------- # Must create temporaries before inferring inames (because those temporaries # mediate dependencies that are then used for iname propagation.) + # Must create temporaries before fixing parameters. # ------------------------------------------------------------------------- knl = add_used_inames(knl) # NOTE: add_inferred_inames will be phased out and throws warnings if it # does something. knl = add_inferred_inames(knl) + from loopy.transform.parameter import fix_parameters + knl = fix_parameters(knl, **fixed_parameters) # ------------------------------------------------------------------------- # Ordering dependency: # ------------------------------------------------------------------------- diff --git a/loopy/version.py b/loopy/version.py index 2e86b974ba224e44cbeb557556a72b82e745525d..99e1b38ca93ece8996c456fb54d5e291a7710060 100644 --- a/loopy/version.py +++ b/loopy/version.py @@ -21,7 +21,7 @@ THE SOFTWARE. """ -VERSION = (2017, 1) +VERSION = (2017, 2) VERSION_STATUS = "" VERSION_TEXT = ".".join(str(x) for x in VERSION) + VERSION_STATUS diff --git a/test/test_loopy.py b/test/test_loopy.py index 3593019ad2ca7e41f7db4c95616184e1e8972125..563964cf04dfbce5d8983b66010863ef36a74ce7 100644 --- a/test/test_loopy.py +++ b/test/test_loopy.py @@ -2416,6 +2416,21 @@ def test_kernel_var_name_generator(): assert vng("b") != "b" +def test_fixed_parameters(ctx_factory): + ctx = ctx_factory() + queue = cl.CommandQueue(ctx) + + knl = lp.make_kernel( + "[n] -> {[i]: 0 <= i < n}", + """ + <>tmp[i] = i + tmp[0] = 0 + """, + fixed_parameters=dict(n=1)) + + knl(queue) + + def test_execution_backend_can_cache_dtypes(ctx_factory): # When the kernel is invoked, the execution backend uses it as a cache key # for the type inference and scheduling cache. This tests to make sure that