From 53dc77b47a87377200e4dc2c1f9f78c7e54ef642 Mon Sep 17 00:00:00 2001 From: qazal Date: Sat, 10 Feb 2024 14:04:41 +0200 Subject: [PATCH] emulated ops_hip infra --- tinygrad/runtime/compiler/hip_comgr.py | 42 +++++++------------------- tinygrad/runtime/ops_hip.py | 5 ++- 2 files changed, 13 insertions(+), 34 deletions(-) diff --git a/tinygrad/runtime/compiler/hip_comgr.py b/tinygrad/runtime/compiler/hip_comgr.py index 45b093f05c..fb6962acd7 100644 --- a/tinygrad/runtime/compiler/hip_comgr.py +++ b/tinygrad/runtime/compiler/hip_comgr.py @@ -1,12 +1,13 @@ import ctypes -import tinygrad.runtime.autogen.comgr as comgr def check(status): + import tinygrad.runtime.autogen.comgr as comgr if status != 0: comgr.amd_comgr_status_string(status, ctypes.byref(status_str := ctypes.POINTER(ctypes.c_char)())) raise RuntimeError(f"comgr fail {status}, {ctypes.string_at(status_str).decode()}") def _get_comgr_data(data_set, data_type): + import tinygrad.runtime.autogen.comgr as comgr check(comgr.amd_comgr_action_data_get_data(data_set, data_type, 0, ctypes.byref(data_exec := comgr.amd_comgr_data_t()))) check(comgr.amd_comgr_get_data(data_exec, ctypes.byref(sz := ctypes.c_uint64()), None)) check(comgr.amd_comgr_get_data(data_exec, ctypes.byref(sz), (dat := ctypes.create_string_buffer(sz.value)))) @@ -15,33 +16,12 @@ def _get_comgr_data(data_set, data_type): # AMD_COMGR_SAVE_TEMPS=1 AMD_COMGR_REDIRECT_LOGS=stdout AMD_COMGR_EMIT_VERBOSE_LOGS=1 def compile_hip(prg:str, arch="gfx1100") -> bytes: - check(comgr.amd_comgr_create_action_info(ctypes.byref(action_info := comgr.amd_comgr_action_info_t()))) - check(comgr.amd_comgr_action_info_set_language(action_info, comgr.AMD_COMGR_LANGUAGE_HIP)) - check(comgr.amd_comgr_action_info_set_isa_name(action_info, b"amdgcn-amd-amdhsa--" + arch.encode())) - check(comgr.amd_comgr_action_info_set_logging(action_info, True)) - - check(comgr.amd_comgr_create_data_set(ctypes.byref(data_set_src := comgr.amd_comgr_data_set_t()))) - check(comgr.amd_comgr_create_data_set(ctypes.byref(data_set_bc := comgr.amd_comgr_data_set_t()))) - check(comgr.amd_comgr_create_data_set(ctypes.byref(data_set_reloc := comgr.amd_comgr_data_set_t()))) - check(comgr.amd_comgr_create_data_set(ctypes.byref(data_set_exec := comgr.amd_comgr_data_set_t()))) - - check(comgr.amd_comgr_create_data(comgr.AMD_COMGR_DATA_KIND_SOURCE, ctypes.byref(data_src := comgr.amd_comgr_data_t()))) - check(comgr.amd_comgr_set_data(data_src, len(rprg := prg.encode()), rprg)) - check(comgr.amd_comgr_set_data_name(data_src, b"")) - - check(comgr.amd_comgr_data_set_add(data_set_src, data_src)) - # -include hiprtc_runtime.h was removed - check(comgr.amd_comgr_action_info_set_options(action_info, b"-O3 -mcumode --hip-version=6.0.32830 -DHIP_VERSION_MAJOR=6 -DHIP_VERSION_MINOR=0 -DHIP_VERSION_PATCH=32830 -D__HIPCC_RTC__ -std=c++14 -nogpuinc -Wno-gnu-line-marker -Wno-missing-prototypes --offload-arch=gfx1100 -I/opt/rocm/include -Xclang -disable-llvm-passes")) # noqa: E501 - status = comgr.amd_comgr_do_action(comgr.AMD_COMGR_ACTION_COMPILE_SOURCE_WITH_DEVICE_LIBS_TO_BC, action_info, data_set_src, data_set_bc) - if status != 0: - print(_get_comgr_data(data_set_bc, comgr.AMD_COMGR_DATA_KIND_LOG).decode()) - raise RuntimeError("compile failed") - check(comgr.amd_comgr_action_info_set_options(action_info, b"-O3 -mllvm -amdgpu-internalize-symbols")) - check(comgr.amd_comgr_do_action(comgr.AMD_COMGR_ACTION_CODEGEN_BC_TO_RELOCATABLE, action_info, data_set_bc, data_set_reloc)) - check(comgr.amd_comgr_action_info_set_options(action_info, b"")) - check(comgr.amd_comgr_do_action(comgr.AMD_COMGR_ACTION_LINK_RELOCATABLE_TO_EXECUTABLE, action_info, data_set_reloc, data_set_exec)) - ret = _get_comgr_data(data_set_exec, comgr.AMD_COMGR_DATA_KIND_EXECUTABLE) - check(comgr.amd_comgr_release_data(data_src)) - for x in [data_set_src, data_set_bc, data_set_reloc, data_set_exec]: check(comgr.amd_comgr_destroy_data_set(x)) - check(comgr.amd_comgr_destroy_action_info(action_info)) - return ret + import http.client, urllib.parse + params = urllib.parse.urlencode({'code': prg}) + headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"} + conn = http.client.HTTPConnection("temps-mbp.home", 80) + conn.request("POST", "/", params, headers) + response = conn.getresponse() + asm = response.read().decode() + conn.close() + return asm.encode("utf-8") diff --git a/tinygrad/runtime/ops_hip.py b/tinygrad/runtime/ops_hip.py index cac340aeed..47e83d15b1 100644 --- a/tinygrad/runtime/ops_hip.py +++ b/tinygrad/runtime/ops_hip.py @@ -1,7 +1,6 @@ from __future__ import annotations import ctypes, functools, subprocess, io from typing import Tuple, TypeVar, List, Any, cast, Set -import tinygrad.runtime.autogen.hip as hip from tinygrad.helpers import DEBUG, getenv, init_c_var from tinygrad.helpers import from_mv, round_up, to_mv, colored, init_c_struct_t from tinygrad.device import Compiled, LRUAllocator, BufferOptions, JITRunner, Device, Buffer, MallocAllocator, update_stats, Compiler @@ -9,7 +8,7 @@ from tinygrad.renderer.cstyle import HIPRenderer from tinygrad.codegen.kernel import LinearizerOptions from tinygrad.runtime.compiler.hip_comgr import compile_hip - +hip = None class HIPCompiler(Compiler): linearizer_opts = LinearizerOptions("HIP", has_tensor_cores=True) def __init__(self, arch:str): @@ -150,7 +149,7 @@ class HIPWaitEvent(JITRunner): update_stats(colored("wait", "RED"), 0, 0, {}, None, 1, jit, device=self.dname) if getenv("HIPCPU"): - rhip = ctypes.CDLL("/usr/local/lib/libremu.so") + rhip = ctypes.CDLL("/Users/qazal/code/tinygrad/remu/target/release/libremu.dylib") class RHIPProgram: def __init__(self, name:str, lib:bytes): self.name, self.lib = name, lib