AMD ROCm软件栈组件介绍

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 buildcmake ${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 buildcd buildcmake ..make

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

    mkdir -p buildcd buildcmake ..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.mzph.cn/news/173795.shtml

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

相关文章

【虹科干货】什么是软件成分分析(SCA)?

大家或许都发现了&#xff0c;开发人员愈发依赖开源代码来快速为其专有软件添加功能。据估计&#xff0c;开源代码占专有应用程序代码库的 60-80%。相伴而来的&#xff0c;除了更高的效率&#xff0c;还有更高的风险。因此&#xff0c;管理开源代码对于降低组织的安全风险至关重…

原神「神铸赋形」活动祈愿现已开启

亲爱的旅行者&#xff0c;「神铸赋形」活动祈愿现已开启&#xff0c;「单手剑静水流涌之辉」「法器碧落之珑」概率UP&#xff01; 活动期间&#xff0c;旅行者可以在「神铸赋形」活动祈愿中获得更多武器与角色&#xff0c;提升队伍的战斗力&#xff01; 〓祈愿时间〓 4.2版本更…

Spinnaker 基于 docker registry 触发部署

docker registry 触发部署 Spinnaker可以通过Docker镜像的变化来触发部署&#xff0c;这种方法允许你在Docker镜像发生变化时自动启动新的部署流程。 示例原理如下图所示&#xff1a; 以下是如何在Spinnaker中实现基于Docker Registry触发部署的配置流程。最终实现的效果如下…

数据库应用:MongoDB 数据备份与恢复

目录 一、实验 1.MongoDB 数据库备份与恢复 2.MongoDB 数据表备份与恢复 二、问题 1.MongoDB有哪些命令行工具实现数据备份与恢复 一、实验 1.MongoDB 数据库备份与恢复 &#xff08;1&#xff09;查看版本 rootnode1:~# mongo --version&#xff08;2&#xff09;准备…

html学习

1.框架标签 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body ><p align"center"><a href "http://www.baidu.com" target"aa">百度&l…

BUUCTF [MRCTF2020]你能看懂音符吗 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。 感谢Galaxy师傅供题。 密文&#xff1a; 下载附件&#xff0c;得到一个rar压缩包。 解题思路&#xff1a; 1、尝试解压rar压缩包&#xff0c;出现错误无法解压。 使用010 Editor…

YOLOv7独家原创改进: AKConv(可改变核卷积),即插即用的卷积,效果秒杀DSConv | 2023年11月最新发表

💡💡💡本文全网首发独家改进:可改变核卷积(AKConv),赋予卷积核任意数量的参数和任意采样形状,为网络开销和性能之间的权衡提供更丰富的选择,解决具有固定样本形状和正方形的卷积核不能很好地适应不断变化的目标的问题点,效果秒殺DSConv 1)AKConv替代标准卷积进行…

大电流和大电压谁对人体伤害大

突然想起以前看的这个&#xff0c; 网上有很多解答了这个问题&#xff0c;答案是大电流比大电压对人体伤害大。 我之所以重新来写些&#xff0c; 是想起一种有趣的比喻&#xff0c; 这个答案不绝对。 先看一个场景&#xff0c; 一群牛和一头老虎对你冲来&#xff0c; 谁对你的…

机器视觉 AI 数据集制作

工业中&#xff0c;机器视觉物体分拣时&#xff0c;需要制作&#xff0c;数据集&#xff0c;那么&#xff0c;一般情况下&#xff0c;可以选择几个物体的几张图片&#xff0c;或者视频&#xff0c;将待识别的物体的掩模扣取出来&#xff0c;随机的贴在 传送带背景中&#xff0c…

VMware上面安装部署centos7镜像系统【详细含镜像】

VMware上面安装部署centos7镜像系统【详细含镜像】 废话不多说直接开始 下载centos7镜像 网上有好多&#xff0c;但是我相信来看小编文章的基本上应该都有centos7的镜像了吧&#xff0c;毕竟咱们都是同一类人&#xff0c;哈哈不卖关子了&#xff0c;小编直接给大家一个百度云盘…

深度学习大数据物流平台 python 计算机竞赛

文章目录 0 前言1 课题背景2 物流大数据平台的架构与设计3 智能车货匹配推荐算法的实现**1\. 问题陈述****2\. 算法模型**3\. 模型构建总览 **4 司机标签体系的搭建及算法****1\. 冷启动**2\. LSTM多标签模型算法 5 货运价格预测6 总结7 部分核心代码8 最后 0 前言 &#x1f5…

【日常总结】优雅升级Swagger 2 升至 3.0, 全局设置 content-type application/json

目录 一、场景 二、问题 三、解决方案 四、延伸 上一节&#xff1a;【日常总结】Swagger-ui 导入 showdoc &#xff08;优雅升级Swagger 2 升至 3.0&#xff09;-CSDN博客 一、场景 接上一节&#xff1a;在 Swagger3Config extends WebMvcConfigurationSupport&#xff0c…

P2704 [NOI2001] 炮兵阵地 题解

P2704 题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示 解题思路分析Code更多方法 题目 原题链接 题目描述 司令部的将军们打算在 N M N\times M NM 的网格地图上部署他们的炮兵部队。 一个 N M N\times M NM 的地图由 N N N 行 M M M 列组成&#x…

BP算法推导

例子1&#xff1a; 解&#xff1a; 首先有如下结论&#xff1a; E k 1 2 ∑ k 1 n ( z k − f k ( x k ) ) 2 \color{green} E_k \frac{1}{2}\sum_{k1}^{n} ( z_k - f_k(x_k))^2 Ek​21​k1∑n​(zk​−fk​(xk​))2 z k ∑ i 1 , j 1 3 , 2 y i v i j z_k \sum_{i1,j …

C#常见的设计模式-创建型模式

引言 在软件开发过程中&#xff0c;设计模式是一种被广泛采用的思想和实践&#xff0c;可以提供一种标准化的解决方案&#xff0c;以解决特定问题。设计模式分为三种类型&#xff1a;创建型模式、结构型模式和行为型模式。本篇文章将重点介绍C#中常见的创建型模式。 目录 引言…

数据结构与算法编程题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…

传音荣获2023首届全国人工智能应用场景创新挑战赛“智能家居专项赛”三等奖

近日&#xff0c;中国人工智能学会与科技部新一代人工智能发展研究中心联合举办2023首届全国人工智能应用场景创新挑战赛&#xff08;2023 1st China’s Innovation Challenge on Artificial Intelligence Application Scene&#xff0c;以下简称CICAS 2023)&#xff0c;吸引了…

供配电系统智能化监控

供配电系统智能化监控是指利用先进的监测技术、自动化控制技术、计算机网络技术等&#xff0c;对供配电系统进行实时、全方位的监测和控制&#xff0c;以实现供配电系统的安全、稳定、高效运行。 供配电系统智能化监控的主要功能包括&#xff1a; 实时数据采集&#xff1a;通过…

Cpython编译后再使用Pyinstaller打包

一、Cpython Python是一门解释型语言&#xff0c;当我们想让其他人运行我们的代码时&#xff0c;如果直接将.py源代码发送给他人&#xff0c;那么源代码将没有任何安全性可言&#xff0c;也就是任何一个人都可以打开源代码一看究竟&#xff0c;任何人都可以随意修改源代码。 …

Linux(CentOS7.5):新增硬盘分区纪实

一、服务器概述 1、既有一块系统硬盘&#xff0c;新增一块100G硬盘。 2、要求&#xff0c;将新插入硬盘分为&#xff1a;20G、30G、50G。 二、操作步骤 1、确认新硬盘是否插入成功&#xff1a; fdisk -l# 红色框出来的&#xff0c;为识别出来的新硬盘信息 # 黄色框出来的&#…