ROCm技术解析概述

3.2 ROCm技术解析
ROCm是第一个用于GPU计算的开源HPC/Hyperscale级平台,也是独立于编程语言的。将UNIX的选择哲学、极简主义和模块化软件开发引入GPU计算。新的ROCm基础允许为应用程序选择甚至开发工具和语言运行时。
1)[n1] ROCm是为规模而构建的;它支持通过RDMA进行服务器节点内外的多GPU计算通信。当驱动程序直接结合RDMA对等同步支持时,它还简化了堆栈。
ROCm具有丰富的系统运行时,具有大规模应用程序、编译器和语言运行时开发所需的关键功能。
1. 走向11:增强编程语言运行时基础
ROCr系统运行时是独立于语言的,并大量使用异构系统架构(HSA)运行时API。这种方法为执行编程语言提供了丰富的基础,如HCC C++和HIP、Khronos Group的OpenCL和Continuum的Anaconda Python。
重要功能包括以下内容:
1)多GPU粗粒度共享虚拟内存
2)进程并发和抢占
3)大内存分配
4)HSA信号和原子
5)用户模式队列和DMA
6)标准化加载器和代码对象格式
7)动态和离线编译支持
8)支持RDMA的点对点多GPU操作
9)事件探查器跟踪和事件收集API
10)系统管理API和工具
    ROCm支持苹果公司Metal,如图3-4所示。
 
图3-4 ROCm支持苹果公司Metal
2. 坚实的编译基础和语言支持
1)LLVM编译器基础
2)HCC C++和HIP用于应用程序可移植性
3)GCN组装器和拆卸器
ROCm所能实现的领域[n2] 是广阔而未知的。
3. 上游Linux内核中的ROCm支持
从ROCm 1.9.0开始,ROCm用户级软件与某些上游Linux内核中的AMD驱动程序兼容。因此,用户可以选择使用作为AMD ROCm存储库一部分的ROCK内核驱动程序,也可以选择使用上游驱动程序,只从AMD的ROCm存储库安装ROCm用户级实用程序。

 [n1]只有1?其他序号没了

 [n2]病句,表达不清

这些版本的上游Linux内核支持ROCm中的以下GPU:

1)4.17: Fiji, Polaris 10, Polaris 11

2)4.18: Fiji, Polaris 10, Polaris 11, Vega10

3)4.20: Fiji, Polaris 10, Polaris 11, Vega10, Vega 7nm

上游驱动程序可能有助于在与AMD存储库中,可用的内核驱动程序不兼容系统运行ROCm软件。对于可以选择使用AMD或上游驱动程序的用户,需要考虑各种权衡,见表3-1。

表3-1 对于可以选择使用AMD或上游驱动程序的用户,需要考虑各种权衡

 

使用AMD的rock dkms软件包

使用上游内核驱动程序

正面的

更多GPU功能,并且它们更早启用

包括最新的Linux内核功能

 

AMD在支持的发行版上进行了测试

可能适用于其他发行版和自定义内核

 

支持的GPU已启用,无论内核版本如何

 

 

包含最新的GPU固件

 

反面的

可能不适用于所有Linx发行版或版本

功能和硬件支持因内核版本而异

 

4.18以上的内核目前不支持

将GPU对系统内存的使用限制为系统内存的3/8

 

IPC和RDMA功能尚未启用

 

 

AMD没有测试到与rock dkms软件包相同的级别

 

 

不包括最新固件

 

4. 从AMD ROCm存储库安装

AMD目前为ROCm 2.4.x软件包托管Debian和RPM存储库。Debian存储库中的软件包已经过签名,以确保软件包的完整性。

5. ROCm二进制包结构

ROCm是一系列软件的集合,从驱动程序和运行时到库和开发人员工具。在AMD的软件包发行版中,这些软件项目作为单独的软件包提供。如果用户不想安装所有ROCm,允许他们只安装所需的软件包。默认情况下,这些软件包会将大部分ROCm软件安装到/opt/ROCm/中。

6. 小结一下

从高层次的角度来看,ROCm提供了一套丰富的工具,允许为应用程序选择最佳语言。

1)HCC(异构计算编译器)支持HC方言

2)HIP是一个运行时库,它位于HCC之上(对于AMD ROCm平台;对于Nvidia,它使用NVCC编译器)

3)以下内容将很快为GCN ISA提供本机编译器支持:

①OpenCL 1.2+

②Anaconda(Python)与Numba

所有这些都是开源项目,所以可以从语言到硬件都采用完全开放的堆栈。

比较不同计算API的语法,见表3-2。

表3-2 比较不同计算API的语法

Term

CUDA

HIP

HC

C++AMP

OpenCL

设备

int deviceId

int deviceId

hc::accelerator

concurrency:: accelerator

cl_device

队列

cudaStream_t

hipStream_t

hc:: accelerator_view

concurrency:: accelerator_view

cl_command_queue

事件

cudaEvent_t

hipEvent_t

hc:: completion_future

concurrency:: completion_future

cl_event

内存

void *

void *

void*; hc::array; hc::array_view

concurrency::array;

concurrency::array_view

cl_mem

 

网格

线程

变形

网格

 

线程

 

变形

程度

 

小块

线程

 

波前

程度

小块

线程

 

N/A

NDRange

work-group

work-item

sub-group

线程索引

threadIdx.x

hipThreadIdx_x

t_idx.local[0]

t_idx.local[0]

get_local_id(0)

块索引

blockIdx.x

hipBlockIdx_x

t_idx.tile[0]

t_idx.tile[0]

get_group_id(0)

块维数

blockDim.x

hipBlockDim_x

t_ext.tile_dim[0]

t_idx.tile_dim0

get_local_size(0)

Grid-dim

gridDim.x

hipGridDim_x

t_ext[0]

t_ext[0]

get_global_size(0)

设备功能

__device__

__device__

[[hc]] (在许多情况下自动检测)

restrict(amp)

隐含在设备编译中

主机功能

__host_ (default)

__host_ (default)

[[cpu]] (default)

strict(cpu) (default)

隐含在主机编译中

主机+设备功能

__host__ __device__

__host_

__device__

[[hc]] [[cpu]]

restrict(amp,cpu)

没有等价

内核启动

<<< >>>

hipLaunchKernel

hc:: parallel_for_each

concurrency:: parallel_for_each

clEnqueueND- RangeKernel

全局内存

__global__

__global__

不必要/隐含

不必要/隐含

__global

组内存

__shared__

__shared__

tile_static

tile_static

__local

常数

__constant__

__constant__

不必要/隐含

不必要/隐含

__constant

 

__syncthreads

__syncthreads

tile_static.barrier()

t_idx.barrier()

barrier(CLK_LOCAL_MEMFENCE)

原子内置

atomicAdd

atomicAdd

hc::atomic_fetch_add

concurrency:: atomic_fetch_add

atomic_add

精确数学

cos(f)

cos(f)

hc:: precise_math::cos(f)

concurrency:: precise_math::cos(f)

cos(f)

快速数学

__cos(f)

__cos(f)

hc::fast_math::cos(f)

concurrency:: fast_math::cos(f)

native_cos(f)

向量

float4

float4

hc:: short_vector::float4

concurrency:: graphics::float_4

float4

对于HC和C++AMP,假设捕获的_tiled_ext_名为t_ext,捕获的_extent_称为ext。这些语言使用捕获的变量将信息传递给内核,而不是使用特殊的内置函数,因此确切的变量名称可能会有所不同。

索引函数(从线程索引开始)显示了1D网格的术语。一些API对3D网格使用xyz/012索引的逆序。

HC允许在运行时指定图块维度,而C++AMP要求在编译时指定图条维度。因此,拼贴块dims的hc语法是t_ext.tile_dim[0],而C++AMP是t_ext.teile_dim0。

从ROCm 2.0版本开始,C++AMP在HCC中不再可用。

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

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

相关文章

AMD GPU上对比语言图像预训练(CLIP)模型的交互

AMD GPU上对比语言图像预训练(CLIP)模型的交互 3.1.1 介绍 对比语言图像预训练(CLIP)是一种连接视觉和自然语言的多模态深度学习模型。它是在OpenAI的论文从自然语言监督中学习可转移的视觉模型(2021)中介绍的,并在大量(4亿)图像字幕对的网络抓取数据上进行了对比训练…

推荐书1《AI芯片开发核心技术详解》、2《智能汽车传感器:原理设计应用》、3《TVM编译器原理与实践》、4《LLVM编译器原理与实践》,谢谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

我的世界 GTNH 传送权限单独指定

起因 在 GTNH 2.7.2 上,对于 Journey Map 传送点的支持需要 op 管理员权限,给管理员权限容易刷物件和其他意外,所以需要限制权限同时又能方便移动。 解决方案 使用 ForgeEssentials 来管理权限,从 Forge-essentials-curseforge 获取 1.7.10 版本的插件,放到服务端 mods 目…

洛谷 P3131 [USACO16JAN] Subsequences Summing to Sevens S(前缀和+模运算性质)

前缀和,模运算性质。做题历程拿到手的时候就是考虑前缀和,毕竟要求区间和,如果暴力做就是N3,那么就开始做,写了个O(n2)复杂度代码,交上去80分...迷了,心想这题难道dp啊,懒得想的我直接看题解,发现大佬用了一个很简单的模运算性质就过去了,即(a - b) mod 7 == 0 那么 …

FastAPI性能优化指南:参数解析与惰性加载

扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长 探索数千个预构建的 AI 应用,开启你的下一个伟大创意第一章:参数解析性能原理 1.1 FastAPI请求处理管线 async def app(scope, receive, send):# 1. 请求解析阶段body = await receive()# 2. 参数验证阶段valid…

MYSQL-索引入门

介绍:结构:语法:create index i on tb_emp(name);show index from tb_emp;drop index i on tb_emp;

事物

操作:start transaction;delete from tb_dept where id=2; delete from tb_emp where dept_id===2;commit;rollback ;只要有失败就可以回滚四大特性ACID:总结:

关于编码转换问题

今天我在写攻防世界的“no-strings-attached”这道题的时候,在处理16进制字符串序列转10进制整数的时候出现了问题,这个问题是关于“utf-8”对某些字节值进行特殊处理导致的。具体情况如下: 首先是我提取的两个16进制字符序列然后我对其进行小端序的进制转换操作,操作如下:…

一点点矩阵

矩阵置0//O(m*n) O(m+n) var setZeroes = function(matrix) {let row=[]let col=[]let n=matrix.lengthlet m=matrix[0].lengthfor(let i=0;i<n;i++){for(let j=0;j<m;j++){if(matrix[i][j]==0){row.push(i)col.push(j)}}}for(let i of row){for(let j=0;j<m;j++){mat…

基于DVB-T的COFDM+16QAM+Viterbi编解码图传通信系统matlab仿真,包括载波定时同步,信道估计

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印):仿真操作步骤可参考程序配套的操作视频。2.算法涉及理论知识概要基于DVB-T的COFDM+16QAM+Viterbi编解码通信链路是一种常用的数字视频广播系统,用于实现高效的传输和接收。该系统结合了正交频分复用(COFDM)…

Day15_http协议

每日一题 面试题: 请解释以下问题:HTTP/2 的主要改进有哪些?与 HTTP/1.1 相比,它如何解决“队头阻塞”问题? HTTPS 是如何实现数据加密的?详细说明 TLS 握手过程。 HTTP/3 为什么选择基于 UDP 的 QUIC 协议?它解决了哪些传统 TCP 协议的缺陷?解答: 1. HTTP/2 的改进与…

基于双PI控制的永磁同步电机变频调速系统simulink建模与仿真

1.课题概述 基于双PI控制的永磁同步电机变频调速系统simulink建模与仿真。2.系统仿真结果 (完整程序运行后无水印)3.核心程序与模型 版本:MATLAB2022a4.系统原理简介基于双PI控制的永磁同步电机(PMSM)变频调速系统是一种高效的电机控制策略,它利用两个独立的PI控制器分别控…