Module Sarek_hip.Hip_bindings

Library Loading

val hip_lib : Dl.library option Stdlib.Lazy.t
val is_available : unit -> bool
val get_hip_lib : unit -> Dl.library
val foreign_hip_lazy : string -> ('a -> 'b) Ctypes.fn -> ('a -> 'b) lazy_t
val foreign_hip_blocking_lazy : string -> ('a -> 'b) Ctypes.fn -> ('a -> 'b) lazy_t

foreign_hip_blocking_lazy name typ is foreign_hip_lazy name typ with the OCaml runtime lock released for the duration of the call, for entry points that block on the device or run a compiler. While the lock is held, every other domain stops at its next minor collection until the call returns. This is the reference note for the blocking bindings of every backend.

Releasing the lock is safe only because no argument of these entry points points into the OCaml heap: a ptr argument is C memory (driver handles, allocated cells, bigarray data) that ctypes keeps reachable until the call returns, and a ctypes string argument is copied into C memory first. Memory reached through a raw address (ptr_of_raw_address) is not rooted by the call: other domains and their GC run during it, so the caller must keep that memory allocated until the call returns (SPOC's transfer paths end with ignore (Sys.opaque_identity ba) for this).

Initialization

val hipInit_lazy : (Unsigned.uint -> Hip_types.hip_result) lazy_t
val hipInit : Unsigned.uint -> Hip_types.hip_result

Device Management

val hipGetDeviceCount_lazy : (int Ctypes_static.ptr -> Hip_types.hip_result) lazy_t
val hipGetDeviceCount : int Ctypes_static.ptr -> Hip_types.hip_result
val hipDeviceGet_lazy : (Hip_types.hip_device Ctypes_static.ptr -> int -> Hip_types.hip_result) lazy_t
val hipDeviceGet : Hip_types.hip_device Ctypes_static.ptr -> int -> Hip_types.hip_result
val hipSetDevice_lazy : (int -> Hip_types.hip_result) lazy_t
val hipSetDevice : int -> Hip_types.hip_result
val hipGetDevice_lazy : (int Ctypes_static.ptr -> Hip_types.hip_result) lazy_t
val hipGetDevice : int Ctypes_static.ptr -> Hip_types.hip_result
val hipDeviceGetName_lazy : (char Ctypes_static.ptr -> int -> Hip_types.hip_device -> Hip_types.hip_result) lazy_t
val hipDeviceGetName : char Ctypes_static.ptr -> int -> Hip_types.hip_device -> Hip_types.hip_result
val hipDeviceTotalMem_lazy : (Unsigned.size_t Ctypes_static.ptr -> Hip_types.hip_device -> Hip_types.hip_result) lazy_t
val hipDeviceTotalMem : Unsigned.size_t Ctypes_static.ptr -> Hip_types.hip_device -> Hip_types.hip_result
val hipDeviceGetAttribute_lazy : (int Ctypes_static.ptr -> int -> int -> Hip_types.hip_result) lazy_t
val hipDeviceGetAttribute : int Ctypes_static.ptr -> int -> int -> Hip_types.hip_result
val hipDeviceComputeCapability_lazy : (int Ctypes_static.ptr -> int Ctypes_static.ptr -> Hip_types.hip_device -> Hip_types.hip_result) lazy_t
val hipDeviceComputeCapability : int Ctypes_static.ptr -> int Ctypes_static.ptr -> Hip_types.hip_device -> Hip_types.hip_result
val hipDeviceSynchronize_lazy : (unit -> Hip_types.hip_result) lazy_t
val hipDeviceSynchronize : unit -> Hip_types.hip_result

Memory Management

val hipMalloc_lazy : (unit Ctypes_static.ptr Ctypes_static.ptr -> Unsigned.size_t -> Hip_types.hip_result) lazy_t
val hipMalloc : unit Ctypes_static.ptr Ctypes_static.ptr -> Unsigned.size_t -> Hip_types.hip_result
val hipExtMallocWithFlags_lazy : (unit Ctypes_static.ptr Ctypes_static.ptr -> Unsigned.size_t -> Unsigned.uint -> Hip_types.hip_result) lazy_t

hipExtMallocWithFlags: hipDeviceMallocUncached (0x3) allocates device memory whose writes are not held back in the GPU caches (issue #427).

val hipExtMallocWithFlags : unit Ctypes_static.ptr Ctypes_static.ptr -> Unsigned.size_t -> Unsigned.uint -> Hip_types.hip_result
val hip_device_malloc_uncached : Unsigned.UInt.t
val hipFree_lazy : (unit Ctypes_static.ptr -> Hip_types.hip_result) lazy_t
val hipFree : unit Ctypes_static.ptr -> Hip_types.hip_result
val hipMemcpyHtoD_lazy : (Hip_types.hip_deviceptr -> unit Ctypes_static.ptr -> Unsigned.size_t -> Hip_types.hip_result) lazy_t
val hipMemcpyHtoD : Hip_types.hip_deviceptr -> unit Ctypes_static.ptr -> Unsigned.size_t -> Hip_types.hip_result
val hipMemcpyDtoH_lazy : (unit Ctypes_static.ptr -> Hip_types.hip_deviceptr -> Unsigned.size_t -> Hip_types.hip_result) lazy_t
val hipMemcpyDtoH : unit Ctypes_static.ptr -> Hip_types.hip_deviceptr -> Unsigned.size_t -> Hip_types.hip_result
val hipMemcpyDtoD_lazy : (Hip_types.hip_deviceptr -> Hip_types.hip_deviceptr -> Unsigned.size_t -> Hip_types.hip_result) lazy_t
val hipMemcpyDtoD : Hip_types.hip_deviceptr -> Hip_types.hip_deviceptr -> Unsigned.size_t -> Hip_types.hip_result
val hipMemsetD8_lazy : (Hip_types.hip_deviceptr -> Unsigned.uchar -> Unsigned.size_t -> Hip_types.hip_result) lazy_t
val hipMemsetD8 : Hip_types.hip_deviceptr -> Unsigned.uchar -> Unsigned.size_t -> Hip_types.hip_result
val hipMemGetInfo_lazy : (Unsigned.size_t Ctypes_static.ptr -> Unsigned.size_t Ctypes_static.ptr -> Hip_types.hip_result) lazy_t
val hipMemGetInfo : Unsigned.size_t Ctypes_static.ptr -> Unsigned.size_t Ctypes_static.ptr -> Hip_types.hip_result

Module Management

val hipModuleLoadData_lazy : (Hip_types.hip_module Ctypes.structure Ctypes.ptr Ctypes_static.ptr -> unit Ctypes_static.ptr -> Hip_types.hip_result) lazy_t
val hipModuleLoadData : Hip_types.hip_module Ctypes.structure Ctypes.ptr Ctypes_static.ptr -> unit Ctypes_static.ptr -> Hip_types.hip_result
val hipModuleLoad_lazy : (Hip_types.hip_module Ctypes.structure Ctypes.ptr Ctypes_static.ptr -> string -> Hip_types.hip_result) lazy_t
val hipModuleLoad : Hip_types.hip_module Ctypes.structure Ctypes.ptr Ctypes_static.ptr -> string -> Hip_types.hip_result
val hipModuleUnload_lazy : (Hip_types.hip_module Ctypes.structure Ctypes.ptr -> Hip_types.hip_result) lazy_t
val hipModuleUnload : Hip_types.hip_module Ctypes.structure Ctypes.ptr -> Hip_types.hip_result
val hipModuleGetFunction_lazy : (Hip_types.hip_function Ctypes.structure Ctypes.ptr Ctypes_static.ptr -> Hip_types.hip_module Ctypes.structure Ctypes.ptr -> string -> Hip_types.hip_result) lazy_t
val hipModuleGetFunction : Hip_types.hip_function Ctypes.structure Ctypes.ptr Ctypes_static.ptr -> Hip_types.hip_module Ctypes.structure Ctypes.ptr -> string -> Hip_types.hip_result

Kernel Execution

val hipModuleLaunchKernel_lazy : (Hip_types.hip_function Ctypes.structure Ctypes.ptr -> Unsigned.uint -> Unsigned.uint -> Unsigned.uint -> Unsigned.uint -> Unsigned.uint -> Unsigned.uint -> Unsigned.uint -> Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> unit Ctypes_static.ptr Ctypes_static.ptr -> unit Ctypes_static.ptr Ctypes_static.ptr -> Hip_types.hip_result) lazy_t
val hipModuleLaunchKernel : Hip_types.hip_function Ctypes.structure Ctypes.ptr -> Unsigned.uint -> Unsigned.uint -> Unsigned.uint -> Unsigned.uint -> Unsigned.uint -> Unsigned.uint -> Unsigned.uint -> Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> unit Ctypes_static.ptr Ctypes_static.ptr -> unit Ctypes_static.ptr Ctypes_static.ptr -> Hip_types.hip_result

Ranged / asynchronous copies and page-locked host memory

val hipMemcpyHtoDAsync_lazy : (Hip_types.hip_deviceptr -> unit Ctypes_static.ptr -> Unsigned.size_t -> Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> Hip_types.hip_result) lazy_t
val hipMemcpyHtoDAsync : Hip_types.hip_deviceptr -> unit Ctypes_static.ptr -> Unsigned.size_t -> Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> Hip_types.hip_result
val hipMemcpyDtoHAsync_lazy : (unit Ctypes_static.ptr -> Hip_types.hip_deviceptr -> Unsigned.size_t -> Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> Hip_types.hip_result) lazy_t
val hipMemcpyDtoHAsync : unit Ctypes_static.ptr -> Hip_types.hip_deviceptr -> Unsigned.size_t -> Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> Hip_types.hip_result
val hipHostMalloc_lazy : (unit Ctypes_static.ptr Ctypes_static.ptr -> Unsigned.size_t -> Unsigned.uint -> Hip_types.hip_result) lazy_t
val hipHostMalloc : unit Ctypes_static.ptr Ctypes_static.ptr -> Unsigned.size_t -> Unsigned.uint -> Hip_types.hip_result
val hipHostFree_lazy : (unit Ctypes_static.ptr -> Hip_types.hip_result) lazy_t
val hipHostFree : unit Ctypes_static.ptr -> Hip_types.hip_result
val hipHostRegister_lazy : (unit Ctypes_static.ptr -> Unsigned.size_t -> Unsigned.uint -> Hip_types.hip_result) lazy_t
val hipHostRegister : unit Ctypes_static.ptr -> Unsigned.size_t -> Unsigned.uint -> Hip_types.hip_result
val hipHostUnregister_lazy : (unit Ctypes_static.ptr -> Hip_types.hip_result) lazy_t
val hipHostUnregister : unit Ctypes_static.ptr -> Hip_types.hip_result

Stream Management

val hipStreamCreate_lazy : (Hip_types.hip_stream Ctypes.structure Ctypes.ptr Ctypes_static.ptr -> Hip_types.hip_result) lazy_t
val hipStreamCreate : Hip_types.hip_stream Ctypes.structure Ctypes.ptr Ctypes_static.ptr -> Hip_types.hip_result
val hipStreamCreateWithFlags_lazy : (Hip_types.hip_stream Ctypes.structure Ctypes.ptr Ctypes_static.ptr -> Unsigned.uint -> Hip_types.hip_result) lazy_t
val hipStreamCreateWithFlags : Hip_types.hip_stream Ctypes.structure Ctypes.ptr Ctypes_static.ptr -> Unsigned.uint -> Hip_types.hip_result
val hipStreamDestroy_lazy : (Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> Hip_types.hip_result) lazy_t
val hipStreamDestroy : Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> Hip_types.hip_result
val hipStreamSynchronize_lazy : (Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> Hip_types.hip_result) lazy_t
val hipStreamSynchronize : Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> Hip_types.hip_result
val hipStreamWaitEvent_lazy : (Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Unsigned.uint -> Hip_types.hip_result) lazy_t
val hipStreamWaitEvent : Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Unsigned.uint -> Hip_types.hip_result

Event Management

val hipEventCreate_lazy : (Hip_types.hip_event Ctypes.structure Ctypes.ptr Ctypes_static.ptr -> Hip_types.hip_result) lazy_t
val hipEventCreate : Hip_types.hip_event Ctypes.structure Ctypes.ptr Ctypes_static.ptr -> Hip_types.hip_result
val hipEventDestroy_lazy : (Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Hip_types.hip_result) lazy_t
val hipEventDestroy : Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Hip_types.hip_result
val hipEventRecord_lazy : (Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> Hip_types.hip_result) lazy_t
val hipEventRecord : Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Hip_types.hip_stream Ctypes.structure Ctypes.ptr -> Hip_types.hip_result
val hipEventSynchronize_lazy : (Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Hip_types.hip_result) lazy_t
val hipEventSynchronize : Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Hip_types.hip_result
val hipEventElapsedTime_lazy : (float Ctypes_static.ptr -> Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Hip_types.hip_result) lazy_t
val hipEventElapsedTime : float Ctypes_static.ptr -> Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Hip_types.hip_result
val hipEventQuery_lazy : (Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Hip_types.hip_result) lazy_t
val hipEventQuery : Hip_types.hip_event Ctypes.structure Ctypes.ptr -> Hip_types.hip_result

Version

val hipRuntimeGetVersion_lazy : (int Ctypes_static.ptr -> Hip_types.hip_result) lazy_t
val hipRuntimeGetVersion : int Ctypes_static.ptr -> Hip_types.hip_result