AMD ROCm软件栈组件介绍

news2024/11/26 4:29:36

AMD ROCm™ Platform

1.1 ROCm简介

参考:https://github.com/RadeonOpenCompute/ROCm

ROCm(Radeon Open Compute)开源软件栈。

在NVIDIA GPU上,术语“CUDA”通常是指GPU编程编译器、API和运行时库,但ROCm不那么单一,通常根据其组件进行描述。

图1显示了ROCm中涉及的主要组件堆栈。

ROCm的顶部面向用户的组件通常是HIPAPI可移植性接口,它与CUDA几乎相同,主要的实际区别只是API函数的名称。

HIP程序中的GPU内核使用LLVM编译器的AMD GPU后端进行编译,并使用ROCclr(ROCm公共语言运行时)运行时库运行。

ROCclr下面是一个实现HSA(异构系统架构)API的低级用户空间库,它创建和管理驱动程序和硬件的内存映射队列和命令。

图 1:ROCm 软件栈的组成部分

ROCm是一个开源软件栈,主要由开源软件(OSS)组成,设计用于图形处理单元(GPU)计算。

ROCm由一组驱动程序、开发工具和api组成,支持从低级内核到最终用户应用程序的GPU编程。使用ROCm,您可以自定义GPU软件以满足您的特定需求。您可以在免费、开源、集成和安全的软件生态系统中开发、协作、测试和部署您的应用程序。

ROCm特别适合gpu加速的高性能计算(HPC)、人工智能(AI)、科学计算和计算机辅助设计(CAD)。

ROCm由AMD的可移植性异构计算接口(HIP)、OSS c++ GPU编程环境及其相应的运行时提供支持。HIP允许ROCm开发人员通过在一系列平台(从专用游戏gpu到百亿亿级HPC集群)上部署代码,在不同的平台上创建便携式应用程序。

ROCm支持编程模型,如OpenMP和OpenCL,并包括所有必要的OSS编译器、调试器和库。ROCm完全集成到机器学习(ML)框架中,如PyTorch和TensorFlow。

1.1.1 ROCm主要组件

ROCm是AMD的开源GPU计算软件堆栈,旨在提供一个可移植、高性能的GPU计算平台。

ROCm支持AMD的GPU和APU,以及x86和ARM架构的处理器,提供了与CUDA相似的编程模型,使得在AMD GPU上编写和运行GPU计算应用程序变得更加容易。

ROCm的主要组件包括:

ROCm驱动程序:用于管理AMD GPU和APU的硬件资源,提供GPU计算所需的基本功能。

ROCm编译器:包括AMD的HIP编译器和HCC编译器,用于将HIP和C++ AMP代码编译为底层GPU指令。

ROCm运行时库:包括AMD的HIP运行时库和HCC运行时库,提供GPU计算所需的核心功能,如内存管理、线程调度、并发控制等。

ROCm工具集:包括AMD的GPU调试器、性能分析器、代码优化工具等,用于帮助开发人员调试和优化GPU计算应用程序。

ROCm的目标是成为一个全面的GPU计算平台,支持各种编程语言和应用场景。它已经得到了广泛的应用,尤其是在深度学习、科学计算和大数据分析等领域。

ROC —— Radeon Open Computing,即 “Radeon 开放计算”。其中,Radeon 是 AMD GPU 产品的品牌名。

ROCm——ROC platforM 的简称,是基于一系列开源项目的 AMD GPU 计算生态。ROCm 之于 AMD GPU,基本上相当 于 CUDA 之于 NVIDIA GPU。除 ROCm 外,还有一系列 ROCx 的简称,如 ROCr —— ROC Runtime,ROCk —— ROC kernel driver, ROCt —— ROC Thunk 等。

HSA——Heterogeneous system architecture,可以简单理解为硬件上的一层抽象。 AMD 等为支持 CPU+GPU 混合计算生态而成立了非赢利组织 HSA 基金,提供 runtime 和架构 API 标准。现成员包括 AMD、三星、高通、ARM、TI、Imagination、MTK等。

GCN——Graphics Core Next,是 AMD 11年推出的全新架构,以区别于之前基于基于 VLIW (超长指令字)的架构。由于现在所有 AMD GPU 都建于 GCN 架构,失去 ”next“ 的对象,因此,GCN 可以简单理解为 AMD GPU 架构

1.2 ROCm与CUDA对比

主要模块的对比

了解 ROCm 最快的方式可能是和 CUDA 对比。表1给出了主要模块的对比。

CUDA

ROCm

备注

CUDA API

HIP

C++ 扩展语法

NVCC

HCC

编译器

CUDA 函数库

ROC 库、HC 库

Thrust

Parallel STL

HCC 原生支持

Profiler

ROCm Profiler

CUDA-GDB

ROCm-GDB

nvidia-smi

rocm-smi

DirectGPU RDMA

ROCn RDMA

peer2peer

TensorRT

Tensile

张量计算库

CUDA-Docker

ROCm-Docker

编程模型

ROCm是AMD的一个软件平台,用来加速GPU计算

A卡上编程模型使用的是HIP或者OpenCL,而运行环境是ROCm

N卡上,编程模型是CUDA,运行环境也是CUDA

软件栈对比

 

数学库:

rocFFT:快速傅里叶变换库,用于加速频域计算任务。

rocBLAS:基本线性代数子程序库,用于加速矩阵计算任务。

rocRAND:随机数生成库,用于生成随机数序列。

rocSPARSE:稀疏矩阵计算库,用于加速稀疏矩阵计算任务。

llvm-project

https://github.com/RadeonOpenCompute/llvm-project

The LLVM Compiler Infrastructure

LLVM编译器基础结构

欢迎来到LLVM项目!此存储库包含LLVM的源代码,LLVM是用于构建高度优化的编译器、优化器和运行时环境的工具包。

LLVM项目有多个组件。

该项目的核心本身被称为“LLVM”。这包含了处理中间表示并将其转换为目标文件所需的所有工具、库和头文件。工具包括汇编器、反汇编器、位码分析器和位码优化器。类c语言使用Clang前端。该组件将C、c++、Objective-C和objective - c++代码编译成LLVM位码,并使用LLVM从那里编译成目标文件。其他组件包括:libc++ c++标准库、LLD链接器等。

HIP

ROCm-Developer-Tools/HIP: HIP: C++ Heterogeneous-Compute Interface for Portability (github.com)

HIP概述

HIP是一种c++运行时API和内核语言,允许开发人员从单个源代码为AMD和NVIDIA gpu创建可移植应用程序。

主要特性包括:

  • HIP非常薄,在CUDA模式下直接编码对性能影响很小或没有影响。

  • HIP允许使用单源c++编程语言进行编码,包括模板、c++ 11 lambdas、类、名称空间等特性。

  • HIP允许开发人员在每个目标平台上使用“最佳”开发环境和工具。

  • hiify工具自动将源从CUDA转换为HIP。

  • 开发人员可以专门为平台(CUDA或AMD)调整性能或处理棘手的情况。

新项目可以直接用可移植的HIP c++语言开发,并且可以在NVIDIA或AMD平台上运行。此外,HIP提供了移植工具,可以很容易地将现有的CUDA代码移植到HIP层,与原始CUDA应用程序相比,没有性能损失。HIP并不打算成为CUDA的临时替代品,开发人员应该期望做一些手动编码和性能调优工作来完成移植。

HIP 与 CUDA 对比

HIP是一种编程模型,对标CUDA编程模型。

HIP 可以说是 CUDA API 的”山寨克隆“版。除了一些不常用的功能(e.g. managed memory)外,几乎全盘拷贝 CUDA API,是 CUDA 的一个子集。

HIP is a C++ runtime API 。我们使用C++语言,可以调用HIP的API来进行编程。

HIP可以运行在ROCm平台,也可以运行在CUDA平台。

所以既可以运行在A卡,但是也可以运行在N卡上(N卡主要还是CUDA) 。

HIP 的API和CUDA非常类似,大多数情况下他们代码稍加修改就可以直接转换。

CUDA转HIP

HIP提供了移植工具 “hipify”,可以帮助你将cuda源代码转换成HIP,与原始的CUDA应用程序相比没有开销。

CUDA与HIP术语对比

CUDA与HIP API

HIP 目录之旅

  • 包括:

    • hip_runtime_api.h :定义 HIP 运行时 API,可以使用许多标准 Linux 编译器(GCC、ICC、CLANG 等)在 C 或 C++ 模式下进行编译。

    • hip_runtime.h :包括 hip_runtime_api.h PLUS hipLaunchKernelGGL 中的所有内容以及用于编写设备内核和设备函数的语法。hip_runtime.h 可以使用标准C++编译器进行编译,但会公开可用函数的子集。

    • amd_detail/** , nvidia_detail/** :特定平台的实现详细信息。HIP 应用程序不应直接包含这些文件。

  • bin:帮助髋关节移植的工具和脚本

    • hipcc :编译器驱动程序,可用于替换现有CUDA代码中的nvcc。HICC 将根据平台调用 NVCC 或 HIP-Clang,并包含适当的特定于平台的标头和库。

    • hipconfig :打印 HIP 配置(HIP_PATH、HIP_PLATFORM、HIP_COMPILER、HIP_RUNTIME、CXX 配置标志等)

  • 文档:文档 - 降价和 doxygen 信息。

HIP 源码编译

HIP/docs/developer_guide/build.md at develop · ROCm-Developer-Tools/HIP (github.com)

HIP 代码可以在使用 HIP-Clang 编译器的 AMD ROCm 平台上开发,也可以在安装了 nvcc 的 CUDA 平台上开发。 在构建和运行 HIP 之前,请确保驱动程序和预构建包已正确安装在平台上。

存储库分支

在获取 HIP 源代码之前,请在变量 处设置存储库的预期分支。 例如,对于 ROCm5.6 发行版分支,设置ROCM_BRANCH

export ROCM_BRANCH=rocm-5.6.x

ROCm5.6 发布分支,设置

export ROCM_BRANCH=rocm-5.6.x

未来分支的类似格式。

ROCM_PATH是安装 ROCM 的路径。缺省情况下为 。ROCM_PATH/opt/rocm

在 AMD 平台上构建 HIP

获取 HIP 源代码
git clone -b "$ROCM_BRANCH" https://github.com/ROCm-Developer-Tools/clr.git
git clone -b "$ROCM_BRANCH" https://github.com/ROCm-Developer-Tools/hip.git
git clone -b "$ROCM_BRANCH" https://github.com/ROCm-Developer-Tools/HIPCC.git

设置环境变量
export CLR_DIR="$(readlink -f clr)"
export HIP_DIR="$(readlink -f hip)"
export HIPCC_DIR="$(readlink -f hipcc)"

请注意,从 ROCM 5.6 版本开始,clr 是一个新的存储库,包括以前的 ROCclr、HIPAMD 和 OpenCl 存储库。 ROCclr 是在 AMD 平台上定义的,HIP 使用 Radeon Open Compute Common Language Runtime (ROCclr),这是一个虚拟设备接口,HIP 运行时与不同的后端进行交互。 HIPAMD专门为AMD平台提供实施。 OpenCL 提供 ROCclr 运行时当前依赖的标头。

构建 HIPCC 运行时
cd "$HIPCC_DIR"
mkdir -p build; cd build
cmake ..
make -j4

Build HIPCLR

HIPCLR 依赖 HIPCC

cd "$CLR_DIR"
mkdir -p build; cd build
cmake -DHIP_COMMON_DIR=$HIP_DIR -DHIP_PLATFORM=amd -DCMAKE_PREFIX_PATH="/opt/rocm/" -DCMAKE_INSTALL_PREFIX=$PWD/install -DHIPCC_BIN_DIR=$HIPCC_DIR/build -DHIP_CATCH_TEST=0 -DCLR_BUILD_HIP=ON -DCLR_BUILD_OCL=OFF ..

make -j$(nproc)
sudo make install

请注意,如果未指定,hip 运行时将安装到 。 默认情况下,将生成 HIP 的发布版本。

CMAKE_INSTALL_PREFIX <ROCM_PATH>/hip

默认路径和环境变量
  • 默认情况下,HIP 在 中查找 HSA(可以通过设置环境变量来覆盖)。HSA_PATH <ROCM_PATH>/hsa

  • 默认情况下,HIP 安装在(可以通过设置环境变量来覆盖HIP_PATH)。<ROCM_PATH>/hip

  • 默认情况下,HIP 会查找 clang in(可以通过设置环境变量来覆盖)HIP_CLANG_PATH <ROCM_PATH>/llvm/bin

  • 默认情况下,HIP 在 中查找设备库(可以通过设置环境变量来覆盖)。DEVICE_LIB_PATH<ROCM_PATH>/lib

  • (可选)请考虑添加到您的工具中,以便更轻松地使用这些工具。PATH <ROCM_PATH>/bin

  • (可选)设置为输出命令行进行编译。HIPCC_VERBOSE=7

执行 make install 命令后,请确保指向 。HIP_PATH$PWD/install/hip

ROCm-Device-Libs

ROCm Device libraries.

https://github.com/RadeonOpenCompute/ROCm-Device-Libs

ROCm 设备库。

此存储库包含 一组特定于 AMD 的设备端语言运行时库。具体说来:

Name

Comments

Dependencies

oclc*

Open Compute library controls (documentation)

ocml

Open Compute Math library (documentation)

oclc*

ockl

Open Compute Kernel library (documentation)

oclc*

opencl

OpenCL built-in library

ocml, ockl, oclc*

hip

HIP built-in library

ocml, ockl, oclc*

hc

Heterogeneous Compute built-in library

ocml, ockl, oclc*

USING BITCODE LIBRARIES

ROCm语言编译器和运行时自动链接在创建代码对象过程中调用的所需位码文件。默认情况下,clang将在默认的ROCm安装位置中以amdhsa为目标搜索这些库。要指定一组特定的库,——rocm-path参数可以指向安装位码库的根目录,这是链接库的推荐方式。

BUILDING

依赖LLVM

该构建需要 clang 和几个 llvm 开发工具。这可以 使用 RadeonOpenCompute 的 amd-stg-open 分支构建 修改了 LLVM 项目存储库,但上游 LLVM 项目应该 也工作。

有两种不同的方法来构建设备库;作为一个 独立项目或作为 LLVM 外部子项目。

对于独立构建,这将找到预先存在的 clang 和 llvm 使用标准 CMAKE 搜索机制的工具。如果您希望使用 特定版本,您可以使用CMAKE_PREFIX_PATH 变量:

git clone https://github.com/RadeonOpenCompute/ROCm-Device-Libs.git -b amd-stg-open

并从其顶层运行以下命令:

mkdir -p build
cd build
export LLVM_BUILD=... (path to LLVM build directory created previously)
cmake -DCMAKE_PREFIX_PATH=$LLVM_BUILD ..
make

要构建为 llvm 外部项目,请执行以下操作:

LLVM_PROJECT_ROOT=llvm-project-rocm
git clone https://github.com/RadeonOpenCompute/llvm-project.git -b amd-stg-open ${LLVM_PROJECT_ROOT}
cd ${LLVM_PROJECT_ROOT}
mkdir -p build
cd build

cmake ${LLVM_PROJECT_ROOT}/llvm -DCMAKE_BUILD_TYPE=Release \
      -DLLVM_ENABLE_PROJECTS="clang;lld" \
      -DLLVM_EXTERNAL_PROJECTS="device-libs" \
      -DLLVM_EXTERNAL_DEVICE_LIBS_SOURCE_DIR=/path/to/ROCm-Device-Libs

测试需要 ROCm 运行时中的 amdhsacod 实用程序。

To install artifacts: make install

To create packages for the library: make package

从 CMAKE 使用

位码库导出为 CMake 目标,在 CMake 中组织 包。在确保包含构建目录或安装前缀 位码库。包定义一个变量,其中包含导出的 CMake 的列表 目标。find_package(AMDDeviceLibs REQUIRED CONFIG)CMAKE_PREFIX_PATHAMD_DEVICE_LIBS_TARGETS

ROCm-CompilerSupport

https://github.com/RadeonOpenCompute/ROCm-CompilerSupport

ROCm-CompilerSupport/lib/comgr at amd-stg-open · RadeonOpenCompute/ROCm-CompilerSupport (github.com)

编译器支持

编译器支持库提供各种与闪电编译器相关的服务。它目前包含一个库,代码对象管理器(Comgr)在lib/ Comgr。

代码对象管理器

代码对象管理器是一个共享库,它提供创建和检查代码对象的操作。请参阅头文件lib/comgr/include/amd_comgr.h中的文档。

代码对象管理器 (Comgr)

Comgr 库提供了用于编译和检查 AMDGPU 代码的 API 对象。API 记录在头文件中

Building the Code Object Manager

Comgr依赖于LLVM和AMDDeviceLibs(ROCm-Device-Libs)。

单程 要使这些对 Comgr 构建过程可见,方法是将 设置为 包括构建目录或安装前缀 其中每个组件都用分号分隔。两者都应使用 具有相同 ROCm 发布标记的源,或来自分支的源。LLVM 应至少使用 和 构建。CMAKE_PREFIX_PATHamd-stg-openLLVM_ENABLE_PROJECTS='llvm;clang;lld'LLVM_TARGETS_TO_BUILD='AMDGPU;X86'

使用 GNUMakefiles 在 Linux 上构建 Comgr 的示例会话是:bash

$ LLVM_PROJECT=~/llvm-project
$ DEVICE_LIBS=~/device-libs
$ COMGR=~/support/lib/comgr
$ mkdir -p "$LLVM_PROJECT/build"
$ cd "$LLVM_PROJECT/build"
$ cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DLLVM_ENABLE_PROJECTS="llvm;clang;lld" \
    -DLLVM_TARGETS_TO_BUILD="AMDGPU;X86" \
    ../llvm
$ make
$ mkdir -p "$DEVICE_LIBS/build"
$ cd "$DEVICE_LIBS/build"
$ cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_PREFIX_PATH="$LLVM_PROJECT/build" \
    ..
$ make
$ mkdir -p "$COMGR/build"
$ cd "$COMGR/build"
$ cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_PREFIX_PATH="$LLVM_PROJECT/build;$DEVICE_LIBS/build" \
    ..
$ make
$ make test

Depending on the Code Object Manager

Comgr 导出一个以构建和安装命名的 CMake 包 树。此包定义一个名为 的库目标。要依赖 这在您的 CMake 项目中,请使用:amd_comgramd_comgrfind_package

find_package(amd_comgr REQUIRED CONFIG)
...
target_link_libraries(your_target amd_comgr)

如果 Comgr 未安装到标准 CMake 搜索目录,则指向 构建或安装树可以通过以下方式提供给CMake:CMAKE_PREFIX_PATH

cmake -DCMAKE_PREFIX_PATH=path/to/comgr/build/or/install

环境变量

Comgr 在某个环境变量的值第一个时懒惰地计算它们 必填。如果使用该值,则在需要时读取一次,并且 然后缓存。在执行期间更改这些值时的确切行为 在调用 Comgr API 后,未定义进程。

Comgr 支持一些环境变量来定位 ROCm 堆栈的各个部分。 其中包括:

  • ROCM_PATH:如果设置了此选项,则将其用作 ROCm 安装,在确定 和 的默认值时使用(见下文)。如果未设置并且 ROCM 在构建过程中提供包,ROCM 路径设置为它。否则 Comgr 尝试从amd_comgr库的路径构造 ROCM 路径 位于。HIP_PATHLLVM_PATH

  • HIP_PATH:如果设置了此选项,则将其用作 热等静压安装。如果未设置,则其默认值为 “${ROCM_PATH}/hip”。

  • LLVM_PATH:如果设置了此选项,则将其用作 LLVM 安装,当前用于 HIP 编译以定位 某些运行时标头。如果未设置,则其默认值为 “${ROCM_PATH}/llvm”.

Comgr还支持一些环境变量来帮助调试。这些 包括:

  • AMD_COMGR_SAVE_TEMPS:如果设置了此选项,并且不是“0”,则 Comgr 不会删除 编译期间生成的临时文件。这些文件不会出现在 当前工作目录,但保留在特定于平台的目录中 临时目录(通常在 Linux 和 或 路径上 在 Windows 上的环境变量中找到)。/tmpC:\TempTEMP

  • AMD_COMGR_REDIRECT_LOGS:如果未设置或设置为“0”,则日志为 照常返回呼叫者。如果设置为“stdout”/“-”或“stderr”, 日志被重定向到标准输出或错误流, 分别。如果将其设置为任何其他值,则将其解释为 应追加到的日志的文件名。

  • AMD_COMGR_EMIT_VERBOSE_LOGS:如果设置了此选项,并且不是“0”,则日志将 包括其他特定于 Comgr 的信息性消息。

  • AMD_COMGR_TIME_STATISTICS:如果设置了此选项,并且不是“0”,则日志将 包括编译操作的其他特定于 Comgr 的计时信息。

ROCT-Thunk-Interface

https://github.com/RadeonOpenCompute/ROCT-Thunk-Interface

https://github.com/RadeonOpenCompute/ROCT-Thunk-Interface.git

ROCt Library

该存储库包括用于与ROCk驱动程序交互的用户模式API接口。

从1.7版本开始,ROCt使用drm渲染设备。这需要用户属于视频组。如果用户还没有加入视频组,使用sudo usermod -a -G video username命令将用户加入视频组。注意:Ubuntu 20.04的用户需要将用户添加到新的“render”组中,因为Ubuntu已经将/dev/kfd的所有者组更改为render:render

ROCt 库不是独立产品,要求您安装正确的 ROCk 驱动程序,或者使用兼容的上游内核。 请参阅“入门指南”下 AMD ROCm™ Documentation — ROCm 5.7.1 Documentation Home,了解支持的操作系统和内核版本以及支持的硬件的列表。

Building the Thunk

一个简单的基于 cmake 的系统可用于构建 thunk。要从 ROCT-Thunk-Interface 目录构建 thunk,请执行:

    mkdir -p build
    cd build
    cmake ..
    make

如果需要 hsakmt-roct 和 hsakmt-roct-dev 软件包:

    mkdir -p build
    cd build
    cmake ..
    make package

如果选择不构建和安装包,则可以通过以下方式手动安装二进制文件和头文件:

    make install

注意:对于存在 hsakmt-dev.txt 的旧版本的 thunk,需要“make package-dev”和“make install-dev”来生成/安装开发者包。目前,这些是通过“make package”和“make install”命令创建的。

ROCR-Runtime

https://github.com/RadeonOpenCompute/ROCR-Runtime.git

HSA运行时API和用于ROCm的运行时

这个存储库包括主机应用程序将计算内核启动到可用的HSA ROCm内核代理所需的用户模式API接口和库。还提供了核心运行时的参考源代码。

源代码

ROCR 运行时的 HSA 核心运行时源代码位于 src 子目录中。有关内容和构建说明,请参阅相关的 README.md 文件。

基础设施

HSA 运行时是一个精简的用户模式 API,它公开了访问由 AMDGPU 驱动程序集和 ROCK 内核驱动程序驱动的图形硬件并与之交互所需的接口。它们共同使程序员能够直接利用 AMD 独立显卡设备的强大功能,允许主机应用程序直接向图形硬件启动计算内核。

HSA 运行时 API 表示的功能包括:

  • 错误处理

  • 运行时初始化和关闭

  • 系统和代理信息

  • 信号和同步

  • 架构调度

  • 内存管理

  • HSA 运行时适合典型的软件架构堆栈。

HSA 运行时提供对图形硬件的直接访问,使程序员能够更好地控制执行。低级硬件访问的一个示例是支持一个或多个用户模式队列,为程序员提供低延迟内核调度接口,允许他们开发特定于其应用程序的自定义调度算法。

HSA 架构队列语言是一种开放标准,由 HSA 基金会定义,指定用于控制支持的 AMD/ATI Radeon (c) 图形设备的数据包语法。

AQL(Architected Queueing Language) 语言支持多种数据包类型,包括可以命令硬件自动解析数据包间依赖关系(屏障 AND 和 barrier OR 数据包)、内核调度数据包和代理调度数据包的数据包。

除了用户模式队列和 AQL 之外,HSA 运行时还公开了可由系统的一个或多个图形设备(可能还有主机)访问的各种虚拟地址范围。公开的虚拟地址范围支持细粒度或粗粒度访问。

细粒度区域中内存的更新对所有可以访问它的设备都是立即可见的,但一次只有一个设备可以访问粗粒度分配。可以使用 HSA 运行时内存 API 更改粗粒度区域的所有权,但此所有权转移必须由主机应用程序显式完成。

程序员应查阅 HSA 运行时程序员参考手册,了解 HSA 运行时 API、AQL 和 HSA 内存策略的完整说明

编译说明:

ROCR-Runtime/src/README.md at master · RadeonOpenCompute/ROCR-Runtime (github.com)

源和包含目录

core- 包含 AMD 实现核心 HSA 的源代码 运行时 API。

cmake_modules- CMake 支持模块和文件。

inc- 包含公开 HSA 的公共和 AMD 特定头文件 运行时的接口。

libamdhsacode- 代码对象定义和接口。

loader- 用于加载代码对象。

utils- 构建核心运行时所需的实用程序。

Building the Runtime

依赖  ROCT-Thunk-Interface 

若要生成运行时,必须提供库和头文件的兼容版本。这些文件的最新版本 可以从 ROCT-Thunk-Interface 存储库获得,可在此处获得:libhsakmthsakmt.h

https://github.com/RadeonOpenCompute/ROCT-Thunk-Interface

从 ROCm 3.7 版开始,开发包现在包含一个 CMake 包配置文件。运行时现在将通过 if 安装到标准位置进行定位。对于执行以下操作的安装 不使用 ROCm 标准路径设置 CMake 变量或覆盖搜索路径。libhsakmtlibhsakmtfind_packagelibhsakmtCMAKE_PREFIX_PATHhsakmt_DIRfind_package

从 ROCm 版本 3.7 开始,运行时包括一个可选的映像支持模块 (以前)。默认情况下,此模块包含在 运行时。可以通过设置 CMake 变量为 。hsa-ext-rocr-devIMAGE_SUPPORTOFF

构建可选映像模块时,其他构建依赖项包括 必填。必须安装 AMDGCN 兼容的证书和设备库 以构建映像模块。这些要求的最新版本可以是 从 ROCm 软件包存储库获取 (见:Quick Start (Linux) — ROCm 5.7.1 Documentation Home) 这些项目的最新来源可以在这里找到:

https://github.com/RadeonOpenCompute/llvm-project

https://github.com/RadeonOpenCompute/ROCm-Device-Libs

此外,必须安装。xxd

运行时可以选择支持使用 cmake 用户包注册表。由 默认情况下,不修改注册表。将 CMake 变量设置为启用更新包 注册表。EXPORT_TO_USER_PACKAGE_REGISTRYON

例如,在具有标准的系统上构建、安装和生成包 已安装 ROCm 软件包,请从 执行以下命令:src/

mkdir build
cd build
cmake -DCMAKE_INSTALL_PATH=/opt/rocm ..
make
make install
make package

具有自定义安装路径、生成依赖项路径和选项的示例:

cmake -DIMAGE_SUPPORT=OFF \
      -DEXPORT_TO_USER_PACKAGE_REGISTRY=ON \
      -DCMAKE_VERBOSE_MAKEFILE=1 \
      -DCMAKE_PREFIX_PATH=<alternate path(s) to build dependencies> \
      -DCMAKE_INSTALL_PATH=<custom install path for this build> \
      ..

Other(数学库)

数学库:

rocFFT:快速傅里叶变换库,用于加速频域计算任务。

rocBLAS:基本线性代数子程序库,用于加速矩阵计算任务。

rocRAND:随机数生成库,用于生成随机数序列。

rocSPARSE:稀疏矩阵计算库,用于加速稀疏矩阵计算任务。

▪ hipBLAS: https://github.com/ROCmSoftwarePlatform/rocBLAS

▪ hipRAND: https://github.com/ROCmSoftwarePlatform/rocRAND

▪ hipFFT: https://github.com/ROCmSoftwarePlatform/rocFFT

▪ hipSPARSE: https://github.com/ROCmSoftwarePlatform/hipSPARSE

▪ hippcub: https://github.com/ROCmSoftwarePlatform/hipCUB

▪ RCCL (ROCm analogue of NCCL): https://github.com/ROCmSoftwarePlatform/rccl

▪ rocPRIM: https://github.com/ROCmSoftwarePlatform/rocPRIM

▪ MIOpen: https://github.com/ROCmSoftwarePlatform/MIOpen

▪ hipThrust: https://github.com/ROCmSoftwarePlatform/rocThrust

9.编译

rocm组件编译

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1257757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言基础篇5:指针(一)

指针是C语言的核心、精髓所在&#xff0c;用好了指针可以在C语言编程中起到事半功倍的效果。指针一方面可以提高程序的编译效率和执行速度&#xff0c;而且还可以通过指针实现动态的存储分配&#xff0c;另一方面使用指针可使程序更灵活&#xff0c;便于表示各种数据结构&#…

数据结构与算法编程题26

计算二叉树深度 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std;typedef char ElemType; #define ERROR 0 #define OK 1 #define Maxsize 100 #define STR_SIZE 1024typedef struct BiTNode {ElemType data;BiTNode* lchild, * rchild; }BiTNo…

Python基础:字符串(String)详解(需补充完善)

1. 字符串定义 在Python中&#xff0c;字符串是一种数据类型&#xff0c;用于表示文本数据。字符串是由字符组成的序列&#xff0c;可以包含字母、数字、符号和空格等字符。在Python中&#xff0c;你可以使用单引号&#xff08;&#xff09;或双引号&#xff08;"&#xf…

在 Banana Pi BPI-R2 PRO RK3568开源路由器上安装 OpenWrt 23 快照固件

这是在 BPI-R2 Pro&#xff08;到内部 eMMC&#xff09;上安装 OpenWrt 23 快照固件的快速指南。该固件已预装 LuCI 和一些软件包。这是 2023 年 9 月 2 日的屏幕截图。 LuCI 主页概述。Linux内核是6.1.50 网络接口概述。PPPoE 连接已启动并正在运行 速度测试和 CPU 使用情况…

谈谈中间件设计的思路

前言 想要设计和真正理解中间件的架构理论和思想。对于开发来说需要具备三个关键的能力 1&#xff1a;基础通用技术的深入理解和运用2&#xff1a;了解和熟悉常见中间件的设计思想&#xff0c;且有自己的感悟,并且能按照自己的理解模仿写一写3&#xff1a;业务的高度理解能力…

赞比亚市场开发攻略,带你走进非洲“铜矿王国”

赞比亚是非洲最早跟中国建交的国家&#xff0c;跟我们经贸联系一直也比较紧密。赞比亚很多生产生活资料比较依赖进口&#xff0c;市场潜力还是不错的。今天就来给大家分享一下非洲这个铜矿王国的开发攻略。文章略长&#xff0c;大家点赞收藏关注慢慢看。 文章目录&#xff1a;…

格雷希尔针对J2044燃油管测试专用快速接头都有哪些及各自的应用场合

J2044燃油管是汽车燃油系统中常见的管口&#xff0c;如&#xff1a;燃油泵、燃油滤清器、喷油嘴等部件中都有这样的管口&#xff0c;为了保证燃油系统的正常运行&#xff0c;这些零部件在出厂前就需要对其进行多种测试&#xff0c;在测试前需要对J2044燃油管管口进行密封用于连…

BEV+Transformer架构加速“上车”,智能驾驶市场变革开启

BEVTransformer成为了高阶智能驾驶领域最为火热的技术趋势。 近日&#xff0c;在2023年广州车展期间&#xff0c;不少车企及智能驾驶厂商都发布了BEVTransformer方案。其中&#xff0c;极越01已经实现了“BEVTransformer”的“纯视觉”方案的量产&#xff0c;成为国内唯一量产…

当OLAP碰撞Serverless,看ByteHouse如何建设下一代云计算架构

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 作为云计算的下一个迭代&#xff0c;Serverless 可以使开发者更专注于构建产品中的应用&#xff0c;而无需考虑底层堆栈问题。伴随着近年来相关技术成熟度的增加&am…

Node——npm包管理器的使用

Node.js使用npm对包进行管理&#xff0c;其全称为Node Package Manager&#xff0c;开发人员可以使用它安装、更新或者卸载Node.js的模块 1、npm包管理器基础 1.1、npm概述 npm是Node.js的标准软件包管理器&#xff0c;其在2020年3月17日被GitHub收购&#xff0c;而且保证永…

Python3基础

导包 在 python 用 import 或者 from...import 来导入相应的模块。 将整个模块(somemodule)导入&#xff0c;格式为&#xff1a; import somemodule 从某个模块中导入某个函数,格式为&#xff1a; from somemodule import somefunction 从某个模块中导入多个函数,格式为&#…

【Linus】进程的等待

进程等待的必要性 如果子进程退出了&#xff0c;父进程没有对子进程进行回收&#xff0c;子进程就会进入僵尸进程&#xff0c;占用内存&#xff0c;导致内存泄漏如果程序进入僵尸状态&#xff0c;那么kill -9 也无法强制杀死进程子进程是父进程创建出来&#xff0c;完成父进程…

介绍比特币上的 sCrypt 开发平台

最强大的基础设施和工具套件&#xff0c;可轻松构建和扩展您的 dApp 杀手级应用在哪里&#xff1f; 尽管比特币在小额支付、国际汇款和供应链管理等广泛用例中具有颠覆性潜力&#xff0c;但在推出 14 年后&#xff0c;我们还没有看到一款非常受欢迎并被主流采用的杀手级应用。 …

Star History 十月开源精选 |AI for Postgres

在 2023 年 Stack Overflow 开发者调查中&#xff0c;Postgres 顶替了 MySQL 被评为最受欢迎的数据库。一个重要因素应该是 Postgres 支持扩展&#xff1a;可扩展的架构 Postgres 仍然由社区拥有&#xff0c;Postgres 生态近年来蓬勃发展。 扩展可以看作是内置功能&#xff0c…

基于SpringBoot的超市信息管理系

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着我国经济的不断发…

使用 OpenCV 发现圆角矩形的轮廓

OpenCV - 如何找到圆角矩形的矩形轮廓? 问题: 在图像中,我试图找到矩形对象的圆角轮廓。然而,我对两者的尝试 HoughLinesP 并 findContours 没有产生预期的结果。 我的目标是找到一个类似于以下形状的矩形: 。 代码: import cv2 import matplotlib.pyplot as plt…

深入理解Transformer,兼谈MHSA(多头自注意力)、LayerNorm、FFN、位置编码

Attention Is All You Need——集中一下注意力 Transformer其实不是完全的Self-Attention结构&#xff0c;还带有残差连接、LayerNorm、类似1维卷积的Position-wise Feed-Forward Networks&#xff08;FFN&#xff09;、MLP和Positional Encoding&#xff08;位置编码&#xf…

H5标签的contenteditable属性在项目种的使用

介绍 contenteditable 是 HTML5 中的新属性。属性值为true 可以编辑元素内容&#xff0c;false 无法编辑元素内容。 简单说: div标签&#xff0c;加上这个属性&#xff0c;就变成可以编辑状态。 <p contenteditable"true">这里可编辑</p>属性可以开发的…

SAP Smartforms设计

第八章 SMART FORMS设计 要点列表 概览&#xff1b; Form&#xff08;表格&#xff09;&#xff1b; Smart Styles&#xff08;样式&#xff09;&#xff1b; Text Module&#xff08;文本模块&#xff09;&#xff1b; 使用标准表方式打印&#xff1b; 使用模板方式打印…

C语言基础篇5:指针(二)

接上篇&#xff1a;C语言基础篇5&#xff1a;指针(一) 4 指针作为函数参数 4.1 指针变量作为函数的参数 指针型变量可以作为函数的参数&#xff0c;使用指针作为函数的参数是将函数的参数声明为一个指针&#xff0c;前面提到当数组作为函数的实参时&#xff0c;值传递数组的地址…