.. Generated by ROCm docgen prompt_version=2026-06-03-v18-include-python-and-tighten-meta-leaks at 2026-06-03T14:05:21Z .. meta:: :description: Task-oriented guide to using the hipFile Python bindings for GPU-accelerated file I/O. :keywords: hipFile, Python, ROCm, GPU, direct I/O, bindings, API .. provenance: .. mode: NEW .. sources: .. - python/hipfile/__init__.py .. - python/hipfile/driver.py .. - python/hipfile/buffer.py .. - python/hipfile/file.py .. - python/hipfile/error.py .. - python/hipfile/enums.py .. - python/hipfile/properties.py .. - python/main.py ******************* Use the Python API ******************* The hipFile Python bindings let you perform GPU-accelerated file I/O from Python without writing C code. This page walks through each step of a typical workflow: opening the driver, registering buffers, reading and writing files, handling errors, and querying version and driver properties. For a complete worked example that copies a file through GPU memory and verifies the result with SHA-256 hashes, see :doc:`/tutorials/python-gpu-io`. For full API signatures and class details, see :doc:`/reference/api-python`. Import hipFile ================= Import the top-level ``hipfile`` package. All public classes, functions, enums, and exceptions are re-exported from the package root: .. code-block:: python from hipfile import ( Driver, FileHandle, Buffer, HipFileException, OpError, FileHandleType, get_version, driver_get_properties, ) Open and close the driver ============================ The ``Driver`` class manages the hipFile driver lifecycle. Use it as a context manager so the driver closes automatically when the block exits: .. code-block:: python with Driver() as drv: print(f"Driver reference count: {drv.use_count()}") # ... perform I/O inside this block ... The driver is reference-counted internally. Each call to ``open()`` increments the count, and each call to ``close()`` decrements it. ``Driver.use_count()`` returns the current count as an integer. You can also call ``open()`` and ``close()`` explicitly: .. code-block:: python drv = Driver() drv.open() # ... perform I/O ... drv.close() Create and register a GPU buffer ================================= hipFile operates on GPU memory. After allocating device memory (for example, through ``ctypes`` bindings to ``hipMalloc``), wrap the pointer in a ``Buffer`` and register it with the driver. ``Buffer.from_ctypes_void_p`` accepts a ``ctypes.c_void_p``, the buffer length in bytes, and registration flags (pass ``0`` for default behavior): .. code-block:: python from hipfile.hipMalloc import hipMalloc, hipFree size = 1024 * 1024 # 1 MiB gpu_ptr = hipMalloc(size) with Buffer.from_ctypes_void_p(gpu_ptr, size, 0) as buf: # buf is registered; use it for reads and writes ... hipFree(gpu_ptr) When used as a context manager, ``Buffer`` calls ``register()`` on entry and ``deregister()`` on exit. You can also call these methods directly: .. code-block:: python buf = Buffer.from_ctypes_void_p(gpu_ptr, size, 0) buf.register() # ... use buf ... buf.deregister() If the ``ctypes.c_void_p`` is null, ``from_ctypes_void_p`` raises ``ValueError``. Open a file handle =================== ``FileHandle`` wraps ``os.open`` together with hipFile handle registration. Pass a filesystem path, the ``os.open`` flags, and optionally a file mode and handle type: .. code-block:: python import os with FileHandle("/path/to/input.bin", os.O_RDONLY | os.O_DIRECT) as fh: bytes_read = fh.read(buf, size, file_offset=0, buffer_offset=0) For writing, include ``os.O_WRONLY`` or ``os.O_RDWR`` with ``os.O_CREAT`` and ``os.O_DIRECT``: .. code-block:: python with FileHandle( "/path/to/output.bin", os.O_RDWR | os.O_DIRECT | os.O_CREAT | os.O_TRUNC, ) as fh_out: bytes_written = fh_out.write(buf, size, file_offset=0, buffer_offset=0) The default file creation mode is ``0o644``. The default handle type is ``FileHandleType.OPAQUE_FD``. Read and write data ====================== ``FileHandle.read`` and ``FileHandle.write`` each take four positional arguments: ``buffer`` A registered ``Buffer`` instance. ``size`` Number of bytes to transfer. ``file_offset`` Byte offset within the file. ``buffer_offset`` Byte offset within the GPU buffer. Both methods return the number of bytes transferred: .. code-block:: python bytes_read = fh.read(buf, size, file_offset=0, buffer_offset=0) bytes_written = fh.write(buf, size, file_offset=0, buffer_offset=0) If a system-level I/O error occurs, an ``OSError`` is raised. If a hipFile or HIP driver error occurs, a ``HipFileException`` is raised. Handle errors =============== ``HipFileException`` wraps both the ``hipFileOpError_t`` code and the underlying ``hipError_t`` from the HIP runtime: .. code-block:: python try: fh.read(buf, size, 0, 0) except HipFileException as e: print(f"hipFile error code: {e.hipfile_err}") print(f"HIP runtime error code: {e.hip_err}") print(f"Description: {e}") ``hipfile_err`` The ``hipFileOpError_t`` integer code describing the failure. ``hip_err`` The ``hipError_t`` integer code from the HIP runtime. This value is only meaningful when ``hipfile_err`` equals ``OpError.HIP_DRIVER_ERROR``. The string representation of the exception includes the error description returned by the C library. Classify errors with ``OpError`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The ``OpError`` enum mirrors every value from ``hipFileOpError_t``. Use it to match specific error conditions: .. code-block:: python from hipfile import OpError try: fh.read(buf, size, 0, 0) except HipFileException as e: if e.hipfile_err == OpError.DIO_NOT_SET: print("O_DIRECT was not set on the file descriptor.") elif e.hipfile_err == OpError.HIP_DRIVER_ERROR: print(f"HIP runtime error: {e.hip_err}") Query version and driver properties ==================================== ``get_version()`` returns a ``(major, minor, patch)`` tuple: .. code-block:: python major, minor, patch = get_version() print(f"hipFile version: {major}.{minor}.{patch}") ``driver_get_properties()`` returns a dictionary of driver property names mapped to their integer values: .. code-block:: python props = driver_get_properties() for name, value in props.items(): print(f"{name}: {value}") Both functions raise ``HipFileException`` if the underlying C call fails.