OrochiHIP / CUDA API 動(dòng)態(tài)處理
Orochi 是一個(gè)動(dòng)態(tài)加載 HIP 和 CUDA API 的庫(kù),允許用戶在運(yùn)行時(shí)切換 API。
使用 Orochi 便無(wú)需為每個(gè) API 編譯單獨(dú)的實(shí)現(xiàn)。只需編譯和維護(hù)單個(gè)二進(jìn)制文件,即可在 AMD 和 NVIDIA GPU 上運(yùn)行的。
和在編譯時(shí)使用 hipamd 或 CUDA 的 HIP 不同,Orochi 將根據(jù)使用的平臺(tái),動(dòng)態(tài)加載相應(yīng)的 HIP/CUDA 共享庫(kù)。換句話說(shuō),它將 HIPEW 和 CUEW 提供的功能組合到一個(gè)庫(kù)中。
要求
此庫(kù)不需要您在構(gòu)建時(shí)鏈接到 CUDA(用于驅(qū)動(dòng)程序 API)或 HIP(用于驅(qū)動(dòng)程序和運(yùn)行時(shí) API)。
如果您不使用運(yùn)行時(shí) API,則無(wú)需在機(jī)器或 CUDA SDK 上安裝 HIP SDK。
要運(yùn)行使用 Orochi 編譯的應(yīng)用程序,需要安裝選擇的驅(qū)動(dòng)程序,以及基于可用 GPU 的相應(yīng) .dll/.so 文件。Orochi 會(huì)在運(yùn)行時(shí)自動(dòng)鏈接相應(yīng)的共享庫(kù)。
API example
API 有 oro前綴, 如果你熟悉 CUDA 或 HIP 驅(qū)動(dòng)程序 API,將很容易習(xí)慣 Orochi API。
例如,假設(shè)有以下用于設(shè)備和上下文創(chuàng)建的 HIP 代碼:
#include <hip/hip_runtime.h> hipInit( 0 ); hipDevice device; hipDeviceGet( &device, 0 ); hipCtx ctx; hipCtxCreate( &ctx, 0, device );
相同的代碼可以使用 Orochi 重寫(xiě)為:
#include <Orochi/Orochi.h> oroInitialize( ORO_API_HIP, 0 ); oroInit( 0 ); oroDevice device; oroDeviceGet( &device, 0 ); oroCtx ctx; oroCtxCreate( &ctx, 0, device );
它將在運(yùn)行時(shí)在 CUDA 和 HIP 上運(yùn)行!
在示例應(yīng)用程序中查看更多信息。
