From f7bc52a923a7ea763d14be2e946da77e5f1a8c0c Mon Sep 17 00:00:00 2001 From: Oguz Ulgen Date: Tue, 4 Nov 2025 10:08:20 -0800 Subject: [PATCH] Add Helion language support (#8206) Helion is a Python-embedded domain-specific language (DSL) for authoring machine learning kernels, designed to compile down to Triton. https://github.com/pytorch/helion I mostly followed the Triton example, please let me know if there's more I need to do or anything I missed. infra PR: https://github.com/compiler-explorer/infra/pull/1875 --- CONTRIBUTORS.md | 1 + etc/config/helion.defaults.properties | 15 ++++ etc/scripts/helion_wrapper.py | 94 ++++++++++++++++++++++++++ examples/helion/default.py | 29 ++++++++ lib/compilers/_all.ts | 1 + lib/compilers/helion.ts | 55 +++++++++++++++ lib/languages.ts | 12 ++++ public/logos/helion.png | Bin 0 -> 56553 bytes types/languages.interfaces.ts | 1 + 9 files changed, 208 insertions(+) create mode 100644 etc/config/helion.defaults.properties create mode 100644 etc/scripts/helion_wrapper.py create mode 100644 examples/helion/default.py create mode 100644 lib/compilers/helion.ts create mode 100644 public/logos/helion.png diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index c57f9a797..8149b1157 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -169,3 +169,4 @@ From oldest to newest contributor, we would like to thank: - [natinusala](https://github.com/natinusala) - [LJ](https://github.com/elle-j) - [Frank Leon Rose](https://github.com/frankleonrose) +- [Oguz Ulgen](https://github.com/oulgen) diff --git a/etc/config/helion.defaults.properties b/etc/config/helion.defaults.properties new file mode 100644 index 000000000..870e72f4c --- /dev/null +++ b/etc/config/helion.defaults.properties @@ -0,0 +1,15 @@ +compilers=&helion +defaultCompiler=helion_020 +compilerType=helion +interpreted=true +supportsBinary=false +supportsExecute=false +isSemVer=true +notification=Experimental Helion support on Compiler Explorer. Helion is a Python-based GPU kernel compiler that generates Triton code. + +group.helion.compilers=helion_020 +group.helion.groupName=Helion + +compiler.helion_020.name=Helion 0.2.0 +compiler.helion_020.exe=/opt/compiler-explorer/helion/v0.2.0/bin/python3 +compiler.helion_020.semver=0.2.0 diff --git a/etc/scripts/helion_wrapper.py b/etc/scripts/helion_wrapper.py new file mode 100644 index 000000000..fe56f0388 --- /dev/null +++ b/etc/scripts/helion_wrapper.py @@ -0,0 +1,94 @@ +# Copyright (c) 2025, Compiler Explorer Authors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import annotations + +import argparse +import contextlib +import importlib.util +import sys + + +def main() -> None: + parser = argparse.ArgumentParser(description="Output Triton code from public Helion kernels.") + parser.add_argument("--inputfile", required=True) + parser.add_argument("--outputfile", required=True) + args = parser.parse_args() + + try: + import helion + from helion.runtime.kernel import Kernel + + compiled_kernels: list[tuple[Kernel, object, str]] = [] + + # Patch kernel decorator to set autotune_effort='none' by default + original_kernel = helion.kernel + + def patched_kernel(*args, **kwargs): + if 'config' not in kwargs and 'autotune_effort' not in kwargs: + kwargs['autotune_effort'] = 'none' + return original_kernel(*args, **kwargs) + + helion.kernel = patched_kernel + + original_call = Kernel.__call__ + + def patched_call(self, *call_args, **call_kwargs): + result = original_call(self, *call_args, **call_kwargs) + + try: + bound = self.bind(call_args) + cfg = bound.config_spec.default_config() + triton_code = bound.to_triton_code(cfg) + compiled_kernels.append((self, call_args, triton_code)) + except Exception: + pass + + return result + + Kernel.__call__ = patched_call + + spec = importlib.util.spec_from_file_location("example", args.inputfile) + assert spec is not None and spec.loader is not None + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + + Kernel.__call__ = original_call + + with open(args.outputfile, "w", encoding="utf-8") as out: + for kernel, args_used, triton_code in compiled_kernels: + out.write(triton_code) + out.write("\n\n") + + except Exception as error: + messages = [m for m in (getattr(error, "args", None) or [str(error)])] + with contextlib.suppress(Exception): + sys.stderr.writelines([str(m) + "\n" for m in messages]) + sys.exit(255) + + +if __name__ == "__main__": + main() + + diff --git a/examples/helion/default.py b/examples/helion/default.py new file mode 100644 index 000000000..d9abe41a5 --- /dev/null +++ b/examples/helion/default.py @@ -0,0 +1,29 @@ +import torch +import helion +import helion.language as hl + + +@helion.kernel(config=helion.Config( + block_sizes=[], + indexing='pointer', + load_eviction_policies=['', ''], + num_stages=2, + num_warps=4, + pid_type='flat', + range_flattens=[None], + range_multi_buffers=[None], + range_num_stages=[0], + range_unroll_factors=[0], + range_warp_specializes=[] +), static_shapes=True) +def add(x: torch.Tensor, y: torch.Tensor, scale: float) -> torch.Tensor: + out = torch.empty_like(x) + for idx in hl.grid(x.size()): + out[idx] = (x[idx] + y[idx]) * scale + return out + + +x = torch.rand(1024).cuda() +y = torch.rand(1024).cuda() +scale = 2.0 +result = add(x, y, scale) diff --git a/lib/compilers/_all.ts b/lib/compilers/_all.ts index d3e04694e..0fc20b218 100644 --- a/lib/compilers/_all.ts +++ b/lib/compilers/_all.ts @@ -92,6 +92,7 @@ export {GM2Compiler} from './gm2.js'; export {GnuCobolCompiler} from './gnucobol.js'; export {GolangCompiler} from './golang.js'; export {HaskellCompiler} from './haskell.js'; +export {HelionCompiler} from './helion.js'; export {HLSLCompiler} from './hlsl.js'; export {HookCompiler} from './hook.js'; export {HyloCompiler} from './hylo.js'; diff --git a/lib/compilers/helion.ts b/lib/compilers/helion.ts new file mode 100644 index 000000000..5990b821d --- /dev/null +++ b/lib/compilers/helion.ts @@ -0,0 +1,55 @@ +// Copyright (c) 2025, Compiler Explorer Authors +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import type {PreliminaryCompilerInfo} from '../../types/compiler.interfaces.js'; +import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js'; +import {BaseCompiler} from '../base-compiler.js'; +import {CompilationEnvironment} from '../compilation-env.js'; +import {resolvePathFromAppRoot} from '../utils.js'; + +import {BaseParser} from './argument-parsers.js'; + +export class HelionCompiler extends BaseCompiler { + private compilerWrapperPath: string; + + static get key() { + return 'helion'; + } + + constructor(compilerInfo: PreliminaryCompilerInfo, env: CompilationEnvironment) { + super(compilerInfo, env); + this.compilerWrapperPath = + this.compilerProps('compilerWrapper', '') || resolvePathFromAppRoot('etc', 'scripts', 'helion_wrapper.py'); + // We are producing Triton code as the primary output; use default asm parser handling + } + + override optionsForFilter(filters: ParseFiltersAndOutputOptions, outputFilename: string): string[] { + // Wrapper contract: python -I helion_wrapper.py --outputfile --inputfile + return ['-I', this.compilerWrapperPath, '--outputfile', outputFilename, '--inputfile']; + } + + override getArgumentParserClass() { + return BaseParser; + } +} diff --git a/lib/languages.ts b/lib/languages.ts index 79c3602f0..71d69e157 100644 --- a/lib/languages.ts +++ b/lib/languages.ts @@ -488,6 +488,18 @@ const definitions: Record = { previewFilter: null, monacoDisassembly: null, }, + helion: { + name: 'Helion', + monaco: 'python', + extensions: ['.py'], + alias: [], + logoFilename: 'helion.png', + logoFilenameDark: 'helion.png', + formatter: null, + previewFilter: null, + monacoDisassembly: null, + digitSeparator: '_', + }, hook: { name: 'Hook', monaco: 'hook', diff --git a/public/logos/helion.png b/public/logos/helion.png new file mode 100644 index 0000000000000000000000000000000000000000..35738ec321d08a20f738750da9764dd00aabaa7f GIT binary patch literal 56553 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 VcUksYc@5y%)RlFV>J@Cl{|9DYP;>wQ literal 0 HcmV?d00001 diff --git a/types/languages.interfaces.ts b/types/languages.interfaces.ts index 5b5ac9eb5..e6ff819b3 100644 --- a/types/languages.interfaces.ts +++ b/types/languages.interfaces.ts @@ -62,6 +62,7 @@ export type LanguageKey = | 'go' | 'haskell' | 'hlsl' + | 'helion' | 'hook' | 'hylo' | 'ispc'