code: def copyin(self, dest: T, src: memoryview):
      check(hip.hipSetDevice(self.device.device))
      host_mem = self._hostalloc(len(src))
      self.device.pending_copyin.append(host_mem)
      ctypes.memmove(host_mem, from_mv(src), len(src))
      check(
          hip.hipMemcpyAsync(
              dest, host_mem, len(src), hip.hipMemcpyHostToDevice, None
          )
      )
  
imports: from __future__ import annotations
  import ctypes, functools, subprocess, io
  from typing import Tuple, TypeVar, List
  import gpuctypes.hip
  from tinygrad.helpers import DEBUG, getenv, init_c_var, compile_cuda_style, encode_args_cuda_style, time_execution_cuda_style
  from tinygrad.helpers import from_mv, round_up, to_mv
  from tinygrad.device import Compiled, LRUAllocator, MallocAllocator
  from tinygrad.renderer.cstyle import HIPRenderer
  from tinygrad.codegen.kernel import LinearizerOptions
label_desc: Use image node_id 6 for calling the HIPAllocator obj's underlying member method code with example usage: obj.copyin(dest, src) without return types