HIP编程是什么

HIP异构编程模型

本次比赛的HIP编程方法,是在类GPU加速器DCU上运行高性能的并行计算。

使用的编程模型是ROCm HIP模型,是C/C++为基础的异构并行编程模型,和CUDA编程类似。

具体在另一篇博客提过:异构计算技术与DTK异构开发套件-CSDN博客

image-20240704094249510

HIP编程模型中有两个部分,在CPU上运行的是主机端host,DCU加速器上运行的是设备端device

  • 主机端代码在CPU运行,入口函数main,使用C/C++编写,HIP使用Runtime API在主机端分配设备显存,管理主机端和设备端的内存拷贝,运行设备端核函数等
  • 设备端代码在加速器DCU上运行,使用扩展的C语法(HIP_C),设备端代码组织成核函数运行
  • **核函数Kernel:**设备端代码由HIP_C构成并运行在加速器上,被称为核函数

HIP异构程序的实现是什么样的:

image-20240704095202647

将数据从主机端传到设备内存->启动核函数对数据运算->将结果传回CPU

HIP模型线程组织模式

核函数执行模型的三层结构:thread-block-grid

每个核函数启动的线程有唯一的线程ID,可以通过HIP内置的变量hipthreadIdx进行访问。hipthreadIdx设计成三分量矢量,也就是xyz三个轴

image-20240704095727621

一个线程块会被划分为一定数量的线程束,每个线程束有64个线程。

image-20240704100437049

在同一线程束中的线程执行不同的指令,被称为线程束分化,也会影响性能。比如if和else使用,会把不执行的线程禁用闲置,占用线程。

HIP内存层次结构

存储结构有global memory全局内存、shared memory(LDS)共享内存、thread-local memory(寄存器)等

寄存器是对线程私有的,延迟低。共享内存是HIP编程模型提供的可编程缓存,优于全局内存。全局内存是DCU容量最大延迟最高,但是最常用的内存。

image-20240704134248586

HIP代码分解

主机端对设备端显存分配

image-20240704134812919

主机端控制与设备显存间数据的传输

image-20240704134831727

HIP kernel从主机端运行

image-20240704134843950

HIP核函数

CPU代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

加速器代码

image-20240704134922014

_global_使核函数在加速器运行

返回值声明必须void

传入参数必须设备端指针和立即数

执行核函数线程是并发的

执行核函数的每个线程拥有独立的thread ID

完整代码示例

image-20240704135022369

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值