AMD Orochi
Advanced Rendering Research Group

Support both HIP and CUDA® with ease

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.
AMD Orochi how it works diagram

Orochi is a library that loads HIP and CUDA driver APIs dynamically at runtime, eliminating the overhead of maintaining separate backends.

Features

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.
  • Bitcode linking support
  • Added OrochiUtils. A wrapper for convenience
  • A workaround for 22.7.1 AMD driver regression (missing RTC)
  • Support more HIP and CUDA APIs
  • Use only from CUDA driver apis (except for RTC)
  • Proper error handling
  • Unit test
  • Bug fixes

Our other SDKs

AMD Capsaicin Framework

Capsaicin is a Direct3D12 framework for real-time graphics research which implements the GI-1.0 technique and a reference path-tracer.

AMD Render Pipeline Shaders (RPS) SDK

The Render Pipeline Shaders (RPS) SDK provides a framework for graphics engines to use Render Graphs with explicit APIs.

AMD Device Library eXtra

ADLX is a modern library designed to access features and functionality of AMD systems such as Display, 3D graphics, Performance Monitoring, GPU Tuning, and more.

AMD Brotli-G SDK

Brotli-G is an open-source compression/decompression standard for digital assets (based on Brotli) that is compatible with GPU hardware.

AMD HIP Ray Tracing

HIP RT is a ray tracing library for HIP, making it easy to write ray tracing applications in HIP.

AMD Radeon ProRender Developer Suite

AMD Radeon™ ProRender is our fast, easy, and incredible physically-based rendering engine built on industry standards that enables accelerated rendering on virtually any GPU, any CPU, and any OS in over a dozen leading digital content creation and CAD applications.

AMD Radeon ML

Radeon™ Machine Learning (Radeon™ ML or RML) is an AMD SDK for high-performance deep learning inference on GPUs.

AMD Radeon Image Filter

Harness the power of machine learning to enhance images with denoising, enabling your application to produce high quality images in a fraction of the time traditional denoising filters take.

AMD Advanced Media Framework

The Advanced Media Framework SDK provides developers with optimal access to AMD GPUs for multimedia processing.

AMD GPUOpen Direct3D12 Memory Allocator (D3D12MA)

The D3D12 Memory Allocator (D3D12MA) is a C++ library that provides a simple and easy-to-integrate API to help you allocate memory for DirectX®12 buffers and textures.

ADL

The AMD Display Library (ADL) SDK is designed to access display driver functionality for AMD Radeon™ and AMD FirePro™ graphics cards.

AGS

The AMD GPU Services (AGS) library provides software developers with the ability to query AMD GPU software and hardware state information that is not normally available through standard operating systems or graphics APIs.

Attributions

NVIDIA and CUDA are registered trademarks of NVIDIA Corporation.