Unverified Commit 9c9e67eb authored by Yang Chen's avatar Yang Chen Committed by GitHub
Browse files

[Enhancement] passing verbose to LibraryGenerator (#673)



* [Enhancement] passing verbose to LibraryGenerator

This PR enables passing a verbose parameter to LibraryGenerator
via CtypesKernelAdapter and CythonKernelAdapter.
When verbose is set to True,  we will print out the NVCC
compilation command.

This slightly improves debuggability.

* fix ci

---------
Co-authored-by: default avatarxwhzz <wh.xie@outlook.com>
parent 4eba852a
...@@ -88,7 +88,7 @@ class CtypesKernelAdapter(BaseKernelAdapter): ...@@ -88,7 +88,7 @@ class CtypesKernelAdapter(BaseKernelAdapter):
self.target = Target.canon_target(determine_target(target)) self.target = Target.canon_target(determine_target(target))
self.verbose = verbose self.verbose = verbose
self.wrapper = TLWrapper(self.target) self.wrapper = TLWrapper(self.target)
self.lib_generator = LibraryGenerator(self.target) self.lib_generator = LibraryGenerator(self.target, verbose=verbose)
self.lib_generator.assign_pass_configs(pass_configs) self.lib_generator.assign_pass_configs(pass_configs)
self.lib_generator.assign_compile_flags(compile_flags) self.lib_generator.assign_compile_flags(compile_flags)
...@@ -146,7 +146,7 @@ class CtypesKernelAdapter(BaseKernelAdapter): ...@@ -146,7 +146,7 @@ class CtypesKernelAdapter(BaseKernelAdapter):
adapter.target = Target.canon_target(determine_target(target)) adapter.target = Target.canon_target(determine_target(target))
adapter.verbose = verbose adapter.verbose = verbose
adapter.lib_generator = LibraryGenerator(adapter.target) adapter.lib_generator = LibraryGenerator(adapter.target, verbose=verbose)
adapter.lib_generator.assign_pass_configs(pass_configs) adapter.lib_generator.assign_pass_configs(pass_configs)
adapter.lib_generator.assign_compile_flags(compile_flags) adapter.lib_generator.assign_compile_flags(compile_flags)
adapter.lib = adapter.lib_generator.load_lib(lib_path=kernel_lib_path) adapter.lib = adapter.lib_generator.load_lib(lib_path=kernel_lib_path)
......
...@@ -244,7 +244,7 @@ class CythonKernelAdapter(BaseKernelAdapter): ...@@ -244,7 +244,7 @@ class CythonKernelAdapter(BaseKernelAdapter):
self.verbose = verbose self.verbose = verbose
self.wrapper = TLWrapper(self.target) self.wrapper = TLWrapper(self.target)
self.lib_generator = LibraryGenerator(self.target) self.lib_generator = LibraryGenerator(self.target, verbose=verbose)
self.lib_generator.assign_pass_configs(pass_configs) self.lib_generator.assign_pass_configs(pass_configs)
self.lib_generator.assign_compile_flags(compile_flags) self.lib_generator.assign_compile_flags(compile_flags)
...@@ -306,7 +306,7 @@ class CythonKernelAdapter(BaseKernelAdapter): ...@@ -306,7 +306,7 @@ class CythonKernelAdapter(BaseKernelAdapter):
adapter.buffer_device_map = adapter._process_buffer_device() adapter.buffer_device_map = adapter._process_buffer_device()
adapter.verbose = verbose adapter.verbose = verbose
adapter.lib_generator = LibraryGenerator(adapter.target) adapter.lib_generator = LibraryGenerator(adapter.target, verbose=verbose)
adapter.lib_generator.assign_pass_configs(pass_configs) adapter.lib_generator.assign_pass_configs(pass_configs)
adapter.lib_generator.assign_compile_flags(compile_flags) adapter.lib_generator.assign_compile_flags(compile_flags)
adapter.lib = adapter.lib_generator.load_lib(lib_path=kernel_lib_path) adapter.lib = adapter.lib_generator.load_lib(lib_path=kernel_lib_path)
......
...@@ -38,8 +38,9 @@ class LibraryGenerator(object): ...@@ -38,8 +38,9 @@ class LibraryGenerator(object):
pass_configs: Optional[Dict[str, Any]] = None pass_configs: Optional[Dict[str, Any]] = None
compile_flags: Optional[List[str]] = None compile_flags: Optional[List[str]] = None
def __init__(self, target: Target): def __init__(self, target: Target, verbose: bool = False):
self.target = target self.target = target
self.verbose = verbose
def assign_pass_configs(self, pass_configs: Optional[Dict[str, Any]] = None): def assign_pass_configs(self, pass_configs: Optional[Dict[str, Any]] = None):
self.pass_configs = pass_configs self.pass_configs = pass_configs
...@@ -62,6 +63,7 @@ class LibraryGenerator(object): ...@@ -62,6 +63,7 @@ class LibraryGenerator(object):
def compile_lib(self, timeout: float = None): def compile_lib(self, timeout: float = None):
target = self.target target = self.target
verbose = self.verbose
if is_cuda_target(target): if is_cuda_target(target):
from tilelang.env import CUTLASS_INCLUDE_DIR from tilelang.env import CUTLASS_INCLUDE_DIR
src = tempfile.NamedTemporaryFile(mode="w", suffix=".cu", delete=False) src = tempfile.NamedTemporaryFile(mode="w", suffix=".cu", delete=False)
...@@ -143,6 +145,8 @@ class LibraryGenerator(object): ...@@ -143,6 +145,8 @@ class LibraryGenerator(object):
src.flush() src.flush()
try: try:
if verbose:
print(f"compile_lib compilation command: {' '.join(command)}")
ret = subprocess.run(command, timeout=timeout) ret = subprocess.run(command, timeout=timeout)
except Exception as e: except Exception as e:
raise RuntimeError(f"Compile kernel failed because of {e}") from e raise RuntimeError(f"Compile kernel failed because of {e}") from e
...@@ -211,6 +215,7 @@ class PyLibraryGenerator(LibraryGenerator): ...@@ -211,6 +215,7 @@ class PyLibraryGenerator(LibraryGenerator):
def compile_lib(self, timeout: float = None): def compile_lib(self, timeout: float = None):
target = self.target target = self.target
verbose = self.verbose
if is_cuda_target(target): if is_cuda_target(target):
from tilelang.env import (CUDA_HOME, CUTLASS_INCLUDE_DIR, TILELANG_TEMPLATE_PATH) from tilelang.env import (CUDA_HOME, CUTLASS_INCLUDE_DIR, TILELANG_TEMPLATE_PATH)
src = tempfile.NamedTemporaryFile(mode="w", suffix=".cu", delete=False) src = tempfile.NamedTemporaryFile(mode="w", suffix=".cu", delete=False)
...@@ -237,7 +242,7 @@ class PyLibraryGenerator(LibraryGenerator): ...@@ -237,7 +242,7 @@ class PyLibraryGenerator(LibraryGenerator):
] ]
cubin_bytes = compile_cuda( cubin_bytes = compile_cuda(
self.lib_code, target_format="cubin", options=options, verbose=True) self.lib_code, target_format="cubin", options=options, verbose=verbose)
with open(libpath, "wb") as f: with open(libpath, "wb") as f:
f.write(cubin_bytes) f.write(cubin_bytes)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment