万字学习——DCU编程实战补充

参考资料

2.1 详解DCU架构 · DCU 开发与使用文档 (hpccube.com)

DCU架构是什么样的

image-20240706142835011

  • 计算单元阵列,如图CU0、CU1等
  • 缓存系统(L1一级缓存,L2二级缓存)
  • 全局内存(global memory)
  • CPU和DCU数据通路(DMA)

image-20240706143119392

我的理解大概是这样的

image-20240706145851060

DCU节点结构

常见的异构计算节点体系结构主要由四个部分组成:主存、多核处理器、I/O Hub和DCU加速器。这种结构在计算机体系结构中被定义为NUMA。

image-20240706150247449

DCU加速器根据其主要功能可以划分为四个主要组件:执行引擎(Execution Engine),一个或多个DMA拷贝引擎(Copy Engine),内存控制器(Memory Controller)和DCU显存(DCU Memory)。

image-20240706150330616

DCU软件栈-HIP

DCU拥有自己的软件栈–HIP软件栈,也叫生态系统或软件层,用来支持基于HIP的异构计算的应用程序。image-20240706150500537

相关数学库

HIP数学库CUDA数学库数学库功能
hipblascublas基础矩阵运算数学库
hiprandcurand随机数数学库
hipsparsecusparse稀疏矩阵数学库
hipfftcufft快速傅立叶变换数学库
miopencudnn深度学习基础数学库
hipcubcub基础算法库
RCCLNCCL通信库
rocThrustThrust并行算法模板库

优化和调试工具

工具名称功能
rocprofiler用于程序分析和绘制时间线
roctracer用于跟踪程序

第一个DCU程序-数组相加

CPU平台C语言版

#include <stdio.h>
#include <stdlib.h>
#define N 10000
int main() {//申请数据空间float *A = (float *) malloc(N * sizeof(float));float *B = (float *) malloc(N * sizeof(float));float *C = (float *) malloc(N * sizeof(float));//数据初始化for (int i = 0; i < N; i++) {A[i] = 1;B[i] = 1;C[i] = 0;}// 进行数组相加for (int i = 0; i < N; i++) {C[i] = A[i] + B[i];}printf("%f\n", *A);printf("%f\n", *B);printf("%f\n", *C);//释放数据空间free(A);free(B);free(C);return 0;
}

运行

image-20240706152759044

DCU版本

#include <iostream>
#include "hip/hip_runtime.h"
#include <hip/hip_runtime.h>#define N 10000__global__ void add(float *d_A, float *d_B, float *d_C) {int tid = threadIdx.x + blockIdx.x * blockDim.x;if (tid < N) {d_C[tid] = d_A[tid] + d_B[tid];}
}int main() {//申请数据空间float *A = (float *) malloc(N * sizeof(float));float *B = (float *) malloc(N * sizeof(float));float *C = (float *) malloc(N * sizeof(float));float *d_A = NULL;float *d_B = NULL;float *d_C = NULL;hipMalloc((void **) &d_A, N * sizeof(float));hipMalloc((void **) &d_B, N * sizeof(float));hipMalloc((void **) &d_C, N * sizeof(float));//数据初始化for (int i = 0; i < N; i++) {A[i] = 1;B[i] = 1;C[i] = 0;}hipMemcpy(d_A, A, sizeof(float) * N, hipMemcpyHostToDevice);hipMemcpy(d_B, B, sizeof(float) * N, hipMemcpyHostToDevice);hipMemcpy(d_C, C, sizeof(float) * N, hipMemcpyHostToDevice);dim3 blocksize(256, 1);dim3 gridsize(N / 256 + 1, 1);// 进行数组相加add<<<gridsize, blocksize >>> (d_A, d_B, d_C);//结果验证hipMemcpy(C, d_C, sizeof(float) * N, hipMemcpyDeviceToHost);for (int i = 0; i < N; i++) {std::cout << C[i] << std::endl;}//释放申请空间free(A);free(B);free(C);hipFree(d_A);hipFree(d_B);hipFree(d_C);
}

运行

hipcc vector-DCU.cpp -o vector-DCU
./vector-DCU

image-20240707085756455

rocm-smi命令可以查看DCU负载情况

image-20240707090016671

DCU程序组成
image-20240707091544599

HIP主要API释义

API名称含义
hipGetDeviceCount获取机器上的设备个数
hipGetDeviceProperties获取选定设备的设备属性
hipMalloc申请DCU内存
hipHostMalloc在CPU端申请页锁定内存
hipStreamCreate创建流
hipMemcpyAsyncCPU和DCU内存异步拷贝,拷贝有两个方向,CPU到DCU,DCU到CPU
hipMemcpyCPU和DCU内存同步拷贝,会造成CPU端程序暂停等待拷贝的完成才会继续下面的指令,同上拷贝有两个方向
hipFree释放DCU端的内存

a60fbc68e524516776f62f278e8bc25

HIP核函数

f99e0b3ed236f186627e9d00114e513

HIP全局内存管理与数据传输

image-20240710091030117

HIP开发执行

image-20240710091113231

HIP设备管理

image-20240710091134872

单进程多CPU编程

HIP性能分析

image-20240710091240966

DCU程序优化

image-20240710091337734

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

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

相关文章

通过图像高频信息保留图像细节,能保留多少细节-Comfyui

&#x1f9e8;前情提要 如果还不了解comfyui中图像高频信息保留细节的内容&#xff0c;可以参考上一篇文章&#xff1a; 图像中高频信息、低频信息与ComfyUI中图像细节保留的简单研究-CSDN博客 这次主要是简单测试下保留图像细节&#xff0c;能保留到什么程度&#xff1b; …

江波龙 128G msata量产

一小主机不断重启&#xff0c;用DG格式化 无法完成&#xff0c;应该是有坏块了 找一个usb转msata转换板 查了一下是2246en aa主控 颗粒应该是三星的 缓存是现代的 找到量产工具sm22XMPToolP0219B 打开量产工具 用镊子先短接一下jp1 插入usb口&#xff0c;再拿走镊子 scan …

每天五分钟计算机视觉:目标检测算法之R-CNN

本文重点 在计算机视觉领域,目标检测一直是一个核心问题,旨在识别图像中的物体并定位其位置。随着深度学习技术的发展,基于卷积神经网络(CNN)的目标检测算法取得了显著的进步。其中,R-CNN(Regions with CNN features)是一种开创性的目标检测框架,为后续的研究提供了重…

微积分-导数6(隐式导数)

隐式导数 前面我们学了如何求这些方程的导数&#xff1a; y x 3 1 or y x sin ⁡ x y \sqrt{x^31} \quad \text{or} \quad y x\sin x yx31 ​oryxsinx 但是如果是下面的方程&#xff0c;又该如何求导呢&#xff1f; x 3 y 3 6 x y x^3 y^3 6xy x3y36xy 这个方程的图…

【Linux】进程的基本概念(已经进程地址空间的初步了解)

目录 一.什么是进程 进程和程序的区别 Linux查看进程 进程的信息 fork函数 二.进程状态 操作系统上进程状态的概念 运行 阻塞 挂起 Linux中的进程状态 R状态 S状态和D状态 T状态 t状态 X状态 Z状态 三.进程的优先级 修改进程优先级 四.环境变量 常见的环境变量 PATH HOME PW…

科普文:jvm笔记

一、JVM概述# 1. JVM内部结构# 跨语言的平台&#xff0c;只要遵循编译出来的字节码的规范&#xff0c;都可以由JVM运行 虚拟机 系统虚拟机 VMvare 程序虚拟机 JVM JVM结构 HotSpot虚拟机 详细结构图 前端编译器是编译为字节码文件 执行引擎中的JIT Compiler编译器是把字节…

关于无法定位程序输入点 SetDefaultDllDirectories于动态链接库KERNEL32.dll 上 解决方法

文章目录 1. ERNEL32.dll 下载2. 解决方法 &#x1f44d; 个人网站:【 洛秋小站】 1. ERNEL32.dll 下载 Windows 7 在安装postman时报错缺少动态链接库,提示缺少.NET Framework,这是因为本地缺少相应的dll文件导致的&#xff0c;这时就需要下载ERNEL32.dll文件&#xff0c;在解…

前端/python脚本/转换-使用天地图下载的geojson(echarts4+如果直接使用会导致坐标和其他信息不全)

解决echarts4如果直接使用天地图下载的geojson会导致坐标和其他信息不全 解决方法是使用python脚本来补全其他信息&#xff1a;center&#xff0c;level&#xff0c;adcode等内容 前提是必须有一个之前使用的json文件&#xff08;需要全一点的数据供echarts使用&#xff09; …

Linux文件编程应用

目录 一、实现cp命令 二、修改程序的配置文件 三、写一个整数/结构体到文件 1.写一个整数到文件 2.写一个结构体到文件 四、写结构体数组到文件 我们学习了文件编程的常用指令以及了解文件编程的基本步骤后&#xff0c;试着来写一些程序实现某些功能。&#xff08;没有学…

记录一次微信小程序申诉定位权限过程

1 小程序接到通知&#xff0c;检测到违规&#xff0c;需要及时处理&#xff0c;给一周的缓冲时间&#xff0c;如果到期未处理&#xff0c;会封禁能力&#xff08;2023-11-17&#xff09; 2 到期后&#xff0c;仍未处理&#xff0c;封禁能力&#xff08;2023-11-24&#xff09; …

【04】微服务通信组件Feign

1、项目中接口的调用方式 1.1 HttpClient HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、最新的、功能丰富的支持 Http 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新版本和建议。HttpClient 相比传统 JDK 自带的 URLConnectio…

打印任务无法删除怎么办?

在删除打印任务的时候&#xff0c;你可能会遇到这样的情况&#xff0c;当我们想把打印任务取消的时候&#xff0c;却一直显示正在删除&#xff0c;而过了很久还没有取消掉&#xff0c;下面就分享一下处理这个问题的方法。 1、停止打印服务&#xff0c;按WinR键打开运行对话框&a…

Unity WebGL 嵌入前端网页并通信

1. 前言 最近在做项目时遇到需要将 UnityWebGL 嵌入到网页中去&#xff0c;且需要点击网页中的按钮 UnityWebGL 可以做出响应。新建项目部分直接略过 2. 最终效果 3. 基础设置 设置导出平台为WebGL 在Player Settings -> Publishing Settings 中勾选 Data Caching 和Deco…

《Windows API每日一练》9.1.5 自定义资源

自定义资源&#xff08;Custom Resources&#xff09;是在 Windows 程序中使用的一种资源类型&#xff0c;用于存储应用程序特定的数据、图像、音频、二进制文件等。通过自定义资源&#xff0c;开发者可以将应用程序所需的各种资源文件集中管理和存储&#xff0c;便于在程序中访…

imx6ull/linux应用编程学习(17)利用mqtt上传开发板数据,和控制开发板led(基于正点)

1.关于如何创建自己的服务器&#xff0c;可看上篇文章 imx6ull/linux应用编程学习&#xff08;16&#xff09;emqx &#xff0c;mqtt创建连接mqtt.fx-CSDN博客 2.实现任务&#xff1a;&#xff08;正点原子教程源码改&#xff09; (1)用户可通过手机或电脑远程控制开发板上的…

小白的OS Copilot 产品测评

背景 通过群友介绍才知OS Copilot 。不想错过任何优秀的AI产品。随着互联网的发展和时代的进步&#xff0c;要紧跟时代&#xff0c;了解市面上的优秀的AI科技产品。 OS Copilot 产品体验评测 1&#xff09;您的角色是什么&#xff1f;开发、运维、学生&#xff1f;如果使用O…

类和对象——【const成员】【static成员】【友元】【内部类】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件iostream的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

css文字自适应宽度动态出现省略号...

前言 在列表排行榜中通常会出现的一个需求&#xff1a;从左到右依次是名次、头像、昵称、徽标、分数。徽标可能会有多个或者没有徽标&#xff0c;徽标长度是动态的&#xff0c;昵称如果过长要随着有无徽标进行动态截断出现省略号。如下图布局所示&#xff08;花里胡哨的底色是…

若依vue集成electron实现打包exe应用程序

一、修改package.json文件,加入相关依赖和配置 {"name": "ruoyi","version": "3.8.6","description": "若依管理系统","author": "若依","license":

分层图最短路,CF 1725M - Moving Both Hands

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1725M - Moving Both Hands 二、解题报告 1、思路分析 题意看似很简单&#xff0c;就是问我们两个人分别处于1, p两个点上&#xff0c;二者同时出发&#xff0c;相遇时二者所用路径之和的最小值 不难想到求…