Orochi

Support both HIP and CUDA® with ease

ARR

The Orochi library loads HIP and CUDA® APIs dynamically, allowing you to switch between them at runtime. Orochi is named after a legendary Japanese dragon with eight heads and eight tails on a single body. In keeping with its namesake, Orochi enables a single library to use multiple backends at runtime.

Download the latest version - v2.0

This release adds the following features:

  • Support many more CUDA/HIP functions compared to Orochi 1. Should be almost exhaustive.
  • We will keep one branch per version of CUDA/HIP, (example of branch name: release/hip5.7_cuda12.2),
    so developers can switch on branches depending on their environment.
    If you need a combination that doesn’t exist, open an ‘Issue’ on the GitHub of the project.
  • Change compared to Orochi 1: you need to install the CUDA SDK corresponding to the branch you are using.
    for example, if you use branch release/hip5.7_cuda12.2, install CUDA SDK 12.2.
    However CUDA will still be dynamically loaded at runtime, only includes of the SDK are used at compile time.
  • New demo for textures.
  • New demo for Direct3D® 12 interop.
  • Some refactoring/improvement of OrochiUtils .
  • Orochi.h can be included in the kernel files to have the oro* names.
  • The binding and naming between HIP/CUDA have been improved and developed in a way it should be easier to maintain for future versions.
  • Most of the Orochi/OrochiUtils API has not been changed so updating the project from Orochi 1.0 to 2.0 should be straightforward.
  • We included an experimental high performance radix sort which we are going to publish the detail in the future.

Features

  • No need to compile two separate implementations for HIP and CUDA.
  • Compile and maintain a single binary that can run on both AMD and NVIDIA® GPUs.
  • Dynamically load the corresponding HIP/CUDA shared libraries depending on your platform.
  • Combines the functionality offered by both HIPEW and CUEW into a single library.
  • No need to link to CUDA (for the driver APIs) nor HIP (for both driver and runtime APIs) at build-time.

Orochi

Requirements

To run an application compiled with Orochi, you need to install a driver of your choice with the corresponding .dll/.so files based on the GPU(s) available. Orochi will automatically link with the corresponding shared library at runtime.

Version history

  • Support many more CUDA/HIP functions compared to Orochi 1. Should be almost exhaustive.
  • We will keep one branch per version of CUDA/HIP (example of branch name: release/hip5.7_cuda12.2), so developers can switch on branches depending on their environment.
  • If you need a combination that doesn’t exist, open an ‘Issue’ on the GitHub of the project.
  • Change compared to Orochi 1: you need to install the CUDA SDK corresponding to the branch you are using.
    • For example, if you use branch release/hip5.7_cuda12.2, install CUDA SDK 12.2.
    • However, CUDA will still be dynamically loaded at runtime, only includes of the SDK are used at compile time.
  • New demo for textures.
  • New demo for Direct3D® 12 interop.
  • Some refactoring/improvement of OrochiUtils.
  • Orochi.h can be included in the kernel files to have the oro* names.
  • The binding and naming between HIP/CUDA have been improved and developed in a way it should be easier to maintain for future versions.
  • Most of the Orochi/OrochiUtils API has not been changed so updating the project from Orochi 1.0 to 2.0 should be straightforward.
  • We included an experimental high performance radix sort which we are going to publish the detail in the future.

Related news and technical articles