将 cuda kernel 编译成 ptx 和 rocm的hip asm

1,cuda 源码编译

cuda_a_one.cu __global__ void NNNNNVVVVV_one(int *A)
{A[333] = 777;
}

编译命令:

%.ptx: %.cu
    nvcc -arch=sm_70 -ptx $< -o $@

生成的结果:

2, hip 源码编译

hip_a_one.hip__global__ void AAAAAMMMMM_one(int *A)
{A[0x333] = 0x777;
}

编译命令:

%.hip.s: %.hip
    $(HIPCC) $< -o $@ -S --offload-device-only

生成的结果:

存储为文本:

	.text.amdgcn_target "amdgcn-amd-amdhsa--gfx906".protected	_Z14AAAAAMMMMM_onePi    ; -- Begin function _Z14AAAAAMMMMM_onePi.globl	_Z14AAAAAMMMMM_onePi.p2align	8.type	_Z14AAAAAMMMMM_onePi,@function
_Z14AAAAAMMMMM_onePi:                   ; @_Z14AAAAAMMMMM_onePi
; %bb.0:s_load_dwordx2 s[0:1], s[4:5], 0x0v_mov_b32_e32 v0, 0v_mov_b32_e32 v1, 0x777s_waitcnt lgkmcnt(0)global_store_dword v0, v1, s[0:1] offset:3276s_endpgm.section	.rodata,#alloc.p2align	6, 0x0.amdhsa_kernel _Z14AAAAAMMMMM_onePi.amdhsa_group_segment_fixed_size 0.amdhsa_private_segment_fixed_size 0.amdhsa_kernarg_size 8.amdhsa_user_sgpr_count 6.amdhsa_user_sgpr_private_segment_buffer 1.amdhsa_user_sgpr_dispatch_ptr 0.amdhsa_user_sgpr_queue_ptr 0.amdhsa_user_sgpr_kernarg_segment_ptr 1.amdhsa_user_sgpr_dispatch_id 0.amdhsa_user_sgpr_flat_scratch_init 0.amdhsa_user_sgpr_private_segment_size 0.amdhsa_uses_dynamic_stack 0.amdhsa_system_sgpr_private_segment_wavefront_offset 0.amdhsa_system_sgpr_workgroup_id_x 1.amdhsa_system_sgpr_workgroup_id_y 0.amdhsa_system_sgpr_workgroup_id_z 0.amdhsa_system_sgpr_workgroup_info 0.amdhsa_system_vgpr_workitem_id 0.amdhsa_next_free_vgpr 2.amdhsa_next_free_sgpr 6.amdhsa_reserve_vcc 0.amdhsa_reserve_flat_scratch 0.amdhsa_reserve_xnack_mask 1.amdhsa_float_round_mode_32 0.amdhsa_float_round_mode_16_64 0.amdhsa_float_denorm_mode_32 3.amdhsa_float_denorm_mode_16_64 3.amdhsa_dx10_clamp 1.amdhsa_ieee_mode 1.amdhsa_fp16_overflow 0.amdhsa_exception_fp_ieee_invalid_op 0.amdhsa_exception_fp_denorm_src 0.amdhsa_exception_fp_ieee_div_zero 0.amdhsa_exception_fp_ieee_overflow 0.amdhsa_exception_fp_ieee_underflow 0.amdhsa_exception_fp_ieee_inexact 0.amdhsa_exception_int_div_zero 0.end_amdhsa_kernel.text
.Lfunc_end0:.size	_Z14AAAAAMMMMM_onePi, .Lfunc_end0-_Z14AAAAAMMMMM_onePi; -- End function.section	.AMDGPU.csdata
; Kernel info:
; codeLenInByte = 36
; NumSgprs: 10
; NumVgprs: 2
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 0 bytes/workgroup (compile time only)
; SGPRBlocks: 1
; VGPRBlocks: 0
; NumSGPRsForWavesPerEU: 10
; NumVGPRsForWavesPerEU: 2
; Occupancy: 8
; WaveLimiterHint : 1
; COMPUTE_PGM_RSRC2:SCRATCH_EN: 0
; COMPUTE_PGM_RSRC2:USER_SGPR: 6
; COMPUTE_PGM_RSRC2:TRAP_HANDLER: 0
; COMPUTE_PGM_RSRC2:TGID_X_EN: 1
; COMPUTE_PGM_RSRC2:TGID_Y_EN: 0
; COMPUTE_PGM_RSRC2:TGID_Z_EN: 0
; COMPUTE_PGM_RSRC2:TIDIG_COMP_CNT: 0.ident	"AMD clang version 17.0.0 (https://github.com/RadeonOpenCompute/llvm-project roc-6.0.2 24012 af27734ed982b52a9f1be0f035ac91726fc697e4)".section	".note.GNU-stack".addrsig.amdgpu_metadata
---
amdhsa.kernels:- .args:- .address_space:  global.offset:         0.size:           8.value_kind:     global_buffer.group_segment_fixed_size: 0.kernarg_segment_align: 8.kernarg_segment_size: 8.language:       OpenCL C.language_version:- 2- 0.max_flat_workgroup_size: 1024.name:           _Z14AAAAAMMMMM_onePi.private_segment_fixed_size: 0.sgpr_count:     10.sgpr_spill_count: 0.symbol:         _Z14AAAAAMMMMM_onePi.kd.uniform_work_group_size: 1.uses_dynamic_stack: false.vgpr_count:     2.vgpr_spill_count: 0.wavefront_size: 64
amdhsa.target:   amdgcn-amd-amdhsa--gfx906
amdhsa.version:- 1- 2
....end_amdgpu_metadata

3,hipcc 的概述编译流程

首先,hipcc是一个perl脚本:

#!/usr/bin/env perl
# Copyright (c) 2015 - 2021 Advanced Micro Devices, Inc. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.# Need perl > 5.10 to use logic-defined or
use 5.006; use v5.10.1;use warnings;use File::Basename;
use File::Spec::Functions 'catfile';# TODO: By default select perl script until change incorporated in HIP build script.
my $USE_PERL_SCRIPT = $ENV{'HIP_USE_PERL_SCRIPTS'};
$USE_PERL_SCRIPT //= 1;  # use defined-or assignment operator.  Use env var, but if not defined default to 1.my $isWindows =  ($^O eq 'MSWin32' or $^O eq 'msys');
# escapes args with quotes SWDEV-341955
foreach $arg (@ARGV) {if ($isWindows) {$arg =~ s/[^-a-zA-Z0-9_=+,.:\/\\ ]/\\$&/g;}
}my $SCRIPT_DIR=dirname(__FILE__);
if ($USE_PERL_SCRIPT) {#Invoke hipcc.plmy $HIPCC_PERL=catfile($SCRIPT_DIR, '/hipcc.pl');system($^X, $HIPCC_PERL, @ARGV);
} else {$BIN_NAME="/hipcc.bin";if ($isWindows) {$BIN_NAME="/hipcc.bin.exe";}my $HIPCC_BIN=catfile($SCRIPT_DIR, $BIN_NAME);if ( -e $HIPCC_BIN ) {#Invoke hipcc.binsystem($HIPCC_BIN, @ARGV);} else {print "hipcc.bin not present; install HIPCC binaries before proceeding\n";exit(-1);}
}# Because of this wrapper we need to check
# the output of the system command for perl and bin
# else the failures are ignored and build fails silently
if ($? == -1) {exit($?);
}
elsif ($? & 127) {exit($?);
}
else {$CMD_EXIT_CODE = $? >> 8;
}
exit($CMD_EXIT_CODE);

具体工作流程:

未完待续。。。

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

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

相关文章

Redis之持久化、集群

1. Redis持久化 Redis为什么需要持久化?因为Redis的数据我们都知道是存放在内存中的&#xff0c;那么每次关闭或者机器断电&#xff0c;我们的数据旧丢失了。 因此&#xff0c;Redis如果想要被别人使用&#xff0c;这个问题就需要解决&#xff0c;怎么解决呢?就是说我们的数…

安全风险 - 检测设备是否为模拟器

在很多安全机构的检测中&#xff0c;关于模拟器的运行环境一般也会做监听处理&#xff0c;有的可能允许执行但是会提示用户&#xff0c;有的可能直接禁止在模拟器上运行我方APP 如何判断当前 app 是运行在Android真机&#xff0c;还是运行在模拟器? 可能做 Framework 的朋友思…

广告联盟如何实现

在互联网时代&#xff0c;各种广告形式无处不在&#xff0c;无论是在社交媒体、网站还是APP上&#xff0c;广告无处不在。然而&#xff0c;广告对于一些人来说并不只是一种干扰&#xff0c;还可以是一种赚钱方式。下载广告联盟看广告能赚钱吗?这是一个很有趣的问题&#xff0c…

玩机进阶教程------修改gpt.bin分区表地址段 完全屏蔽系统更新 fast刷写分区表 操作步骤解析【二】

上期博文简单说明了分区表的基本常识。我们在有些环境中需要屏蔽手机的系统更新选项。除了以前博文中说明的修改系统更新下载文件夹的方法。还可以通过修改分区表类达到目的。在一些辅助维修工具上面带修改分区表功能。修改后效果为屏蔽系统更新和可以恢复出厂。原则上不深刷都…

短剧源码系统深层次解析:技术架构与实现

短剧源码系统作为短视频内容生产与分发的核心技术&#xff0c;其技术实现对于开发者和运营者至关重要。本文将深入探讨短剧源码系统的关键技术架构&#xff0c;特别是前端框架uni-app和Vue&#xff0c;以及后端框架ThinkPHP5和Workerman的应用。 前端框架&#xff1a;uni-app与…

怎么把图片大小调小?在线改图片大小的方法

怎么把比较大的图片压缩变小呢&#xff1f;在使用图片的时候&#xff0c;比较常见的一个问题就是图片太大导致无法正常上传&#xff0c;需要将图片处理到合适的大小之后&#xff0c;才可以正常在网上上传。现在一般调整图片大小多会通过使用在线改图片大小的在线工具来处理&…

SpringBoot集成JOOQ加Mybatis-plus使用@Slf4j日志

遇到个问题记录下&#xff0c;就是SpringBoot使用Mybatis和Mybatis-plus时可以正常打印日志&#xff0c;但是JOOQ的操作日志确打印不出来&#xff1f; 下面的解决方法就是将JOOQ的日志单独配置出来&#xff0c;直接给你们配置吧&#xff01; 在项目的resources目录下创建日志…

《云原生监控》-prometheus监测技术方案

部署环境 A主机: 系统: CentOS 7 应用: Docker( Prometheus Grafana Alertmanager CAdvisor ) 主机( Node Exporter Consul Confd ) B主机: 系统: CentOS 7 应用: Docker( CAdvisor ) 主机( Node Exporter ) 总体图 下载&#xff1a; Confd链接(0.16.0)…

SpringMVC框架学习笔记(三):url请求风格-Rest 以及 SpringMVC 映射获取到各种类型数据

1 Rest 基本介绍 1.1 基本说明 REST&#xff1a;即 Representational State Transfer。(资源)表现层状态转化。是目前流行的请求方 式。它结构清晰, 很多网站采用 HTTP 协议里面&#xff0c;四个表示操作方式的动词&#xff1a;GET、POST、PUT、DELETE。它们分别对应四种基本…

使用servlet与jdbc进行的小demo

文章目录 demo实例首先三层架构servlet层 也可以叫web层service层 ,用于处理业务逻辑 dao层 用于写sql语句,与数据库进行交互这三层一次调用 进行环境初始化utils的书写jdbcUtils先写web层,需要进行参数校验service书写dao层使用jdbc进行操作就可以 demo实例 使用三层架构进行查…

美国RAKsmart海外大带宽服务器的显著特点

美国RAKsmart海外大带宽服务器在当前的互联网服务领域中备受瞩目&#xff0c;其显著特点主要体现在以下几个方面&#xff1a; 高带宽资源&#xff1a;RAKsmart服务器拥有充足的带宽资源&#xff0c;最低提供100M独享带宽&#xff0c;并支持升级至G口、10G口大带宽方案。这种高带…

Mybatis-plus 更新或新增时设置某些字段值为空

方式一 在实体中设置某个字段为的注解中 TableField(updateStrategy FieldStrategy.IGNORED)private Date xxxxxxTime;通过这种方式会指定更新时该字段的策略&#xff0c;通常情况下updateById这种会根据字段更新&#xff0c;通常都会判断null 以及空值 指定 updateStrategy …

java属性重写

介绍 关于&#xff0c;属性没有重写只能是编译类型的 代码 package b;public class main_ {public static void main(String[] args) {//向上转型&#xff0c;父类的引用转向了子类的fathetr fatnew son();System.out.println("编译类型是father时的sum属性是"fat.…

不是从APP store下载的APP在mac上一直提示有损坏,打不开怎么办?

1.点击设置 2.安全与隐私 3.通用看看允许从以下位置下载的APP是否有任何来源 4.如果没有&#xff0c;mac桌面点击&#x1f50d;输入终端或Terminal 命令行输入下述代码&#xff1a; sudo spctl --master-disable 5.回车&#xff0c;输入mac开机密码。注意&#xff1a;此时密…

java maven selenium12306 爬虫 包含浏览器驱动

前言 5月搞hw&#xff0c;一直没时间弄ctf&#xff0c;刚好java综合实践结课了&#xff0c;用java写了个12306爬虫&#xff0c;今天分享一下吧。 开发:工具idea jdk:11.0.11 maven环境请自己搭建 注意 &#xff1a;GetNetUtil类里的cookie请替换为自己的cookie(请求12306的…

滑动的登录注册页面

前言 在Web开发中&#xff0c;登录和注册页面是网站或应用程序的重要组成部分。为了提高用户体验和安全性&#xff0c;开发人员通常会采用各种方法来改进登录注册页面的设计。滑动式登录注册页面是一种常见的解决方案&#xff0c;它不仅提供了更好的用户友好性。本文将介绍如何…

前端html-docx实现html转word,并导出文件,文字+图片

前端html-docx实现html转word&#xff0c;并导出文件 前端web页面 有文字&#xff0c;有图片&#xff0c;保存web的css效果 使用工具&#xff1a;html-docx 官方网址&#xff1a;http://docs.asprain.cn/html-docx/readme.html 步骤&#xff1a; 1 npm install html-docx-js…

铁塔基站用能监控能效解决方案

截至2023年10月&#xff0c;我国5G基站总数达321.5万个&#xff0c;占全国通信基站总数的28.1%。然而&#xff0c;随着5G基站数量的快速增长&#xff0c;基站的能耗问题也逐渐日益凸显&#xff0c;基站的用电给运营商带来了巨大的电费开支压力&#xff0c;降低5G基站的能耗成为…

客户文章|难能可贵,非模式生物的功能研究与创新

菜豆&#xff08;Phaseolus vulgaris&#xff09;&#xff0c;又名四季豆、芸豆、油豆角&#xff0c;是全球第一大豆类蔬菜&#xff0c;我国是世界上最主要的菜豆生产国和销售国。在田间生产过程中&#xff0c;菜豆常面临着各种生物和非生物逆境的胁迫&#xff0c;对其产量品质…

校园导航系统C++

制作一个简单的大学城导航系统&#xff0c;根据用户指定的起点和终点&#xff0c;求出最短路径长度以及具体路径。 项目要求&#xff1a; 1&#xff09;程序与数据相分离&#xff0c;地图中的所有数据都是从文件读入&#xff0c;而不是写在代码中 2&#xff09;最短路径算法…