从hip cuda kernel 的汇编语言来感受 AMD GPU内部工作方式


0, 无参数 kernel 汇编语言示例

./param_00.hip

__global__ void WWWWW()
{((int*)0x8888888)[3] = 0x77777;
}

../../../local_amdgpu/bin/clang++ -O1  --cuda-device-only --offload-arch=gfx906 -S ./param_00.hip -o param_00.s


_Z5WWWWWv:                              ; @_Z5WWWWWv
; %bb.0:                                ; %entry
    v_mov_b32_e32 v0, 0x8888894
    v_mov_b32_e32 v1, 0
    v_mov_b32_e32 v2, 0x77777
    flat_store_dword v[0:1], v2
    s_endpgm
    .section    .rodata,"a",@progbits
    .p2align    6, 0x0
    .amdhsa_kernel _Z5WWWWWv


1,一个参数的 kernel 的汇编语言示例

param_01.hip

__global__ void MMMMM(int* A)
{A[10] = 0x77777;}


    
../../../local_amdgpu/bin/clang++ -O1  --cuda-device-only --offload-arch=gfx906 -S ./param_01.hip -o param_01.s


_Z5MMMMMPi:                             ; @_Z5MMMMMPi
; %bb.0:                                ; %entry
    s_load_dwordx2 s[0:1], s[4:5], 0x0
    v_mov_b32_e32 v0, 0
    v_mov_b32_e32 v1, 0x77777
    s_waitcnt lgkmcnt(0)
    global_store_dword v0, v1, s[0:1] offset:40
    s_endpgm
    .section    .rodata,"a",@progbits
    .p2align    6, 0x0
    .amdhsa_kernel _Z5MMMMMPi


2, 两个参数的kernel 的汇编语言

param_02.hip

__global__ void MMMMM(int* AA, int *BB)
{AA[10] = 0x77777;BB[20] = 0x33333;}

../../../local_amdgpu/bin/clang++ -O1  --cuda-device-only --offload-arch=gfx906 -S ./param_02.hip -o param_02.s


_Z5MMMMMPiS_:                           ; @_Z5MMMMMPiS_
; %bb.0:                                ; %entry
    s_load_dwordx4 s[0:3], s[4:5], 0x0
    v_mov_b32_e32 v0, 0
    v_mov_b32_e32 v1, 0x77777
    v_mov_b32_e32 v2, 0x33333
    s_waitcnt lgkmcnt(0)
    global_store_dword v0, v1, s[0:1] offset:40
    global_store_dword v0, v2, s[2:3] offset:80
    s_endpgm
    .section    .rodata,"a",@progbits
    .p2align    6, 0x0
    .amdhsa_kernel _Z5MMMMMPiS_


3, 三个参数的kernel 的汇编语言


param_03.hip

__global__ void MMMMM(int* AA, int* BB, int* CC)
{AA[10] = 0x77777;BB[20] = 0x33333;CC[30] = 0x12121;}


    ../../../local_amdgpu/bin/clang++ -O1  --cuda-device-only --offload-arch=gfx906 -S ./param_03.hip -o param_03.s


_Z5MMMMMPiS_S_:                         ; @_Z5MMMMMPiS_S_
; %bb.0:                                ; %entry
    s_load_dwordx4 s[0:3], s[4:5], 0x0
    v_mov_b32_e32 v0, 0
    s_load_dwordx2 s[4:5], s[4:5], 0x10
    v_mov_b32_e32 v1, 0x77777
    v_mov_b32_e32 v2, 0x33333
    s_waitcnt lgkmcnt(0)
    global_store_dword v0, v1, s[0:1] offset:40
    global_store_dword v0, v2, s[2:3] offset:80
    v_mov_b32_e32 v1, 0x12121
    global_store_dword v0, v1, s[4:5] offset:120
    s_endpgm
    .section    .rodata,"a",@progbits
    .p2align    6, 0x0
    .amdhsa_kernel _Z5MMMMMPiS_S_


4,四个参数的kernel 的汇编语言


param_04.hip

__global__ void MMMMM(int* AA, int* BB, int* CC, int* DD)
{AA[10] = 0x77777;BB[20] = 0x33333;CC[30] = 0x22222;DD[40] = 0x44444;}

../../../local_amdgpu/bin/clang++ -O1  --cuda-device-only --offload-arch=gfx906 -S ./param_04.hip -o param_04.s

_Z5MMMMMPiS_S_S_:                       ; @_Z5MMMMMPiS_S_S_
; %bb.0:                                ; %entry
    s_load_dwordx8 s[0:7], s[4:5], 0x0
    v_mov_b32_e32 v0, 0
    v_mov_b32_e32 v1, 0x77777
    v_mov_b32_e32 v2, 0x33333
    s_waitcnt lgkmcnt(0)
    global_store_dword v0, v1, s[0:1] offset:40
    global_store_dword v0, v2, s[2:3] offset:80
    v_mov_b32_e32 v1, 0x22222
    global_store_dword v0, v1, s[4:5] offset:120
    v_mov_b32_e32 v1, 0x44444
    global_store_dword v0, v1, s[6:7] offset:160
    s_endpgm
    .section    .rodata,"a",@progbits
    .p2align    6, 0x0
    .amdhsa_kernel _Z5MMMMMPiS_S_S_

5, 带线程索引的 kernel 的汇编语言

 param_threadid.hip

#include <hip/hip_runtime.h>__global__ void MMMMM(int* AA)
{AA[threadIdx.x + 10] = 0x77777;}


../../../local_amdgpu/bin/clang++ -O1  --cuda-device-only --offload-arch=gfx906 -S ./param_threadid.hip -o param_threadid.s

_Z5MMMMMPi:                             ; @_Z5MMMMMPi
; %bb.0:                                ; %entry
    s_load_dwordx2 s[0:1], s[4:5], 0x0
    v_lshlrev_b32_e32 v0, 2, v0
    v_mov_b32_e32 v1, 0x77777
    s_waitcnt lgkmcnt(0)
    global_store_dword v0, v1, s[0:1] offset:40
    s_endpgm
    .section    .rodata,"a",@progbits
    .p2align    6, 0x0
    .amdhsa_kernel _Z5MMMMMPi

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

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

相关文章

一招解决家里粉尘螨虫太多难题?家用空气净化器哪款品牌效果好?

一到夏天&#xff0c;两天不打扫家里&#xff0c;家里就会布满一层粉尘。而且春夏的气候也是粉尘螨虫生长和繁殖疯狂时期&#xff0c;一不注意室内空气污染卫生的情况下&#xff0c;就会加剧尘螨的滋生&#xff0c;体质弱、敏感的人群生活在这样的空气环境下&#xff0c;还会增…

敏捷开发时代,彻底结束了

最近&#xff0c;我收到一位读者的私信&#xff0c;他最近“内耗”得非常厉害&#xff0c;他可能一时兴起把我的私信当作了吐槽箱。 他们公司一直实行敏捷的管理模式&#xff0c;复盘发现了一个问题&#xff1a;发布与迭代具有强相关性&#xff0c;一个迭代就发布一次&#xf…

Hadoop安装和测试

一&#xff0c;下载 地址&#xff1a;Index of /dist/hadoop/common 选择3.3.6版本&#xff08;最新版本之前的一个版本&#xff0c;一般比较稳定&#xff09; 二&#xff0c;解压 解压到/data/module目录&#xff0c;这里随便自定义就好。 tar -zxvf hadoop-3.3.6.tar.gz …

从《2024年人工智能指数报告》 看AI的最新发展趋势

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 《2024年人工智能指数报告》是由斯坦福大学的“以人为本”人工智能研究所&#xff08;Stanford HAI&#xff09;发布的&#xff0c;具体发布时间…

百货商场:打造品质生活

走进我们的百货商场&#xff0c;仿佛置身于一个五彩斑斓的梦幻世界。百货&#xff0c;不仅仅是购物的场所&#xff0c;更是一种品质生活的体验。 在这里&#xff0c;您可以找到最适合自己的商品选择。从家居用品到时尚服饰&#xff0c;从美食佳肴到美妆护肤&#xff0c;每一样商…

深入探索Java开发世界:Java基础~类型分析大揭秘

文章目录 一、基本数据类型二、封装类型三、类型转换四、集合类型五、并发类型 Java基础知识&#xff0c;类型知识点梳理~ 一、基本数据类型 Java的基本数据类型是语言的基础&#xff0c;它们直接存储在栈内存中&#xff0c;具有固定的大小和不变的行为。 八种基本数据类型的具…

Vue46-render函数

一、非单文件和单文件的main.js对比 1-1、非单文件的main.js 1-2、 单文件的main.js 将单文件的main.js中的render函数变成非单文件的main.js中的template形式&#xff0c;报如下错误&#xff1a; 解决方式&#xff1a; 二、解决方式 2-1、引入完成版的vue.js 精简版的vue&a…

TEA 加密的 Java 实现

import java.nio.ByteBuffer; import java.nio.ByteOrder;public class TeaUtils {private static final int DELTA 0x9E3779B9;private static final int ROUND 32;private static final String KEY "password";/*** 加密字符串&#xff0c;使用 TEA 加密算法*/p…

推广结算统计,Xinstall助您轻松掌握每一分投入与回报!

在移动互联网时代&#xff0c;App的推广与运营离不开精准的数据支持和高效的结算系统。然而&#xff0c;面对众多的推广渠道和复杂的结算流程&#xff0c;如何确保每一分投入都能得到合理的回报&#xff0c;成为了众多企业和开发者关注的焦点。今天&#xff0c;我们就来聊聊如何…

半监督学习

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 介绍一、Self Training自训练1、介绍2、代码示例3、参数解释 二、Label Propagation&#xff08;标签传播&#xff09;1、介绍2、代码示例3、参数解释 三、Label Spread…

深入剖析Java线程池之“newWorkStealingPool“

1. 概述 newWorkStealingPool 是Java 8中引入的一个新型线程池,它基于ForkJoinPool实现,并采用了“工作窃取”(Work-Stealing)算法。这种线程池特别适用于可并行化且计算密集型的任务,能够充分利用多核CPU资源,提高任务执行效率。 2. 工作窃取算法(Work-Stealing Algor…

618狂欢日,美味产品齐上阵,超值优惠等你享

这个充满激情与活力的6月&#xff0c;我们带着满满的诚意与惊喜&#xff0c;为广大美食爱好者们开启一场独特的618狂欢之旅。 当我们提及甘肃&#xff0c;那丰富多样的甘肃传统美食便是不得不说的瑰宝。烤馍&#xff0c;油饼&#xff0c;锅盔、擀面皮、浆水等每一种美食都…

java算法:插入排序

这里写目录标题 基本使用优缺点尝试优化二分查找插入减少交换操作 基本使用 插入排序是一种简单直观的排序算法&#xff0c;它的工作原理是将待排序的数组分为已排序和未排序两部分&#xff0c;逐步将未排序部分的元素插入到已排序部分中的正确位置&#xff0c;直到整个数组有…

ffmpeg的部署踩坑及简单使用方式

ffmpeg的使用方式有以下几种: 使用原生安装包 直接在ffmpeg官网上下载安装该软件,加入到环境变量中就可以使用了 优点:简单,灵活,代码中也不用添加其他第三方的包 缺点:需要手动安装ffmpeg,这点比较麻烦 部署-windows 在windows环境下,有时就算加入到了环境变量,…

你知道花洒其实起源于中国古代吗?

花洒作为日常生活中不可或缺的一部分&#xff0c;其发展历程不仅见证了人类文明的进步&#xff0c;也反映了生活美学的演变。从最初的简单构想到现代的智能化设计&#xff0c;花洒的变迁历程是一部生动的人类生活史。 早在隋朝时期&#xff0c;我们的祖先就已经有了花洒的初步构…

【Go语言】Go语言中的接口类型

Go语言中的接口类型 接口&#xff08;interface&#xff09;定义了一个对象的行为规范&#xff0c;只定义规范不实现&#xff0c;由具体的对象来实现规范的细节。 1.接口类型 1.1 接口类型的说明 Go语言中 接口&#xff08;interface&#xff09; 是一种抽象的类型。 接口…

《纪元 1800》好玩吗? 苹果电脑能玩《纪元 1800》吗?

《纪元1800》是一款不错的策略游戏&#xff0c;这款游戏因为画面和玩法独特深受玩家们的喜爱。下面我们来看看《纪元 1800》好玩吗&#xff0c;苹果电脑能玩《纪元 1800》吗的相关内容。 一、《纪元1800》好玩吗 《纪元1800》是一款备受瞩目的策略游戏。下面让我们来看看这款…

初探工厂抽象模式

设计模式的-工厂模式 1.定义一个约定的规则抽象类 class ETFactory {createStore() {throw new Error(抽象方法&#xff0c;不允许直接调用&#xff0c;需重写)}createUser(){throw new Error(抽象方法&#xff0c;不允许直接调用&#xff0c;需重写)} } 案例&#xff1a;…

eNSP学习——OSPF在帧中继网络中的配置

目录 主要命令 原理概述 实验目的 实验场景 实验拓扑 实验编址 实验步骤 1、基本配置 2、在帧中继上搭建OSPF网络 主要命令 //检查帧中继的虚电路状态 display fr pvc-info//检查帧中继的映射表 display fr map-info//手工指定OSPF邻居,采用单播方式发送报文 [R1]os…

数据溢出导致的pthread_cond_timedwait工作异常

struct timespec ts; int rc; clock_gettime(CLOCK_MONOTONIC, &ts); ts.tv_nsec 300000000;//tv_nsec的最大值是999999999&#xff0c;这里直接加300毫秒&#xff0c;大概率会溢出&#xff0c;如果溢出应该把ts.tv_sec加1。 pthread_mutex_lock(&mutex_data_); …