news 2026/3/8 15:58:06

08章 平面内存指令 - “Vega“ 7nm Instruction Set ArchitectureReference Guide

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
08章 平面内存指令 - “Vega“ 7nm Instruction Set ArchitectureReference Guide

平面内存指令将数据片段读入或写出VGPR(向量通用寄存器);波前(wavefront)中的每个工作项(work-item)都会独立执行此操作。与缓冲区(buffer)或图像(image)指令不同,平面指令不使用资源常量(resource constant)来定义内存表面的基地址。相反,平面指令使用来自VGPR的单个平面地址;此地址将内存视为单个平面内存空间进行寻址。该内存空间包括显存(video memory)、系统内存(system memory)、LDS(本地数据共享)内存以及暂存(scratch,私有)内存。它不包括GDS(全局数据共享)内存。平面内存空间的某些部分可能不映射到任何真实内存,访问这些区域会产生内存违规错误。地址所映射到的内存空间的确定由一组"内存窗口"(memory aperture)基地址和大小寄存器控制。

9.1. 平面内存指令

平面内存指令允许内核(kernel)读取或写入内存中的数据,或对已存在于内存中的数据执行原子操作。这些操作通过纹理L2缓存进行。指令声明哪个VGPR保存地址(32位或64位,取决于内存配置),哪个VGPR发送数据,哪个VGPR接收数据。平面指令还使用M0寄存器,如下表所述:

表41. 平面、全局和暂存微码格式

字段位宽描述
OP7操作码(Opcode)。可以是平面、暂存或全局指令。见下表。
ADDR8保存地址的VGPR。对于64位地址,ADDR包含低有效位(LSB),ADDR+1包含高有效位(MSB)。
DATA8保存数据第一个双字(Dword)的VGPR。指令可使用0-4个双字。
VDST8数据返回内核的目标VGPR,可来自LOAD指令或GLC=1的原子指令(返回操作前值)。
SLC1系统级一致性(System Level Coherent)。与GLC结合使用以确定缓存策略。
GLC1全局级一致性(Global Level Coherent)。对于原子指令,GLC:1表示返回操作前值,0表示不返回操作前值。
SEG2内存段(Memory Segment):0=FLAT,1=SCRATCH,2=GLOBAL,3=保留。
LDS1设置时,数据在LDS和内存之间移动,而不是VGPR和内存之间。仅用于全局和暂存指令;对于平面指令必须为零。
NV1非易失性(Non-volatile)。设置时,读/写操作在非易失性内存上进行。
OFFSET13地址偏移量。
暂存、全局:13位有符号字节偏移量。
平面:12位无符号偏移量(最高位被忽略)。

表42. 平面、全局和暂存操作码

平面操作码全局操作码暂存操作码
FLATGLOBALSCRATCH
FLAT_LOAD_UBYTEGLOBAL_LOAD_UBYTESCRATCH_LOAD_UBYTE
FLAT_LOAD_UBYTE_D16GLOBAL_LOAD_UBYTE_D16SCRATCH_LOAD_UBYTE_D16
FLAT_LOAD_UBYTE_D16_HIGLOBAL_LOAD_UBYTE_D16_HISCRATCH_LOAD_UBYTE_D16_HI
FLAT_LOAD_SBYTEGLOBAL_LOAD_SBYTESCRATCH_LOAD_SBYTE
FLAT_LOAD_SBYTE_D16GLOBAL_LOAD_SBYTE_D16SCRATCH_LOAD_SBYTE_D16
FLAT_LOAD_SBYTE_D16_HIGLOBAL_LOAD_SBYTE_D16_HISCRATCH_LOAD_SBYTE_D16_HI
FLAT_LOAD_USHORTGLOBAL_LOAD_USHORTSCRATCH_LOAD_USHORT
FLAT_LOAD_SSHORTGLOBAL_LOAD_SSHORTSCRATCH_LOAD_SSHORT
FLAT_LOAD_SHORT_D16GLOBAL_LOAD_SHORT_D16SCRATCH_LOAD_SHORT_D16
FLAT_LOAD_SHORT_D16_HIGLOBAL_LOAD_SHORT_D16_HISCRATCH_LOAD_SHORT_D16_HI
FLAT_LOAD_DWORDGLOBAL_LOAD_DWORDSCRATCH_LOAD_DWORD
FLAT_LOAD_DWORDX2GLOBAL_LOAD_DWORDX2SCRATCH_LOAD_DWORDX2
FLAT_LOAD_DWORDX3GLOBAL_LOAD_DWORDX3SCRATCH_LOAD_DWORDX3
FLAT_LOAD_DWORDX4GLOBAL_LOAD_DWORDX4SCRATCH_LOAD_DWORDX4
FLAT_STORE_BYTEGLOBAL_STORE_BYTESCRATCH_STORE_BYTE
FLAT_STORE_BYTE_D16_HIGLOBAL_STORE_BYTE_D16_HISCRATCH_STORE_BYTE_D16_HI
FLAT_STORE_SHORTGLOBAL_STORE_SHORTSCRATCH_STORE_SHORT
FLAT_STORE_SHORT_D16_HIGLOBAL_STORE_SHORT_D16_HISCRATCH_STORE_SHORT_D16_HI
FLAT_STORE_DWORDGLOBAL_STORE_DWORDSCRATCH_STORE_DWORD
FLAT_STORE_DWORDX2GLOBAL_STORE_DWORDX2SCRATCH_STORE_DWORDX2
FLAT_STORE_DWORDX3GLOBAL_STORE_DWORDX3SCRATCH_STORE_DWORDX3
FLAT_STORE_DWORDX4GLOBAL_STORE_DWORDX4SCRATCH_STORE_DWORDX4
FLAT_ATOMIC_SWAPGLOBAL_ATOMIC_SWAP
FLAT_ATOMIC_CMPSWAPGLOBAL_ATOMIC_CMPSWAP
FLAT_ATOMIC_ADDGLOBAL_ATOMIC_ADD
FLAT_ATOMIC_SUBGLOBAL_ATOMIC_SUB
FLAT_ATOMIC_SMINGLOBAL_ATOMIC_SMIN
FLAT_ATOMIC_UMINGLOBAL_ATOMIC_UMIN
FLAT_ATOMIC_SMAXGLOBAL_ATOMIC_SMAX
FLAT_ATOMIC_UMAXGLOBAL_ATOMIC_UMAX
FLAT_ATOMIC_ANDGLOBAL_ATOMIC_AND
FLAT_ATOMIC_ORGLOBAL_ATOMIC_OR
FLAT_ATOMIC_XORGLOBAL_ATOMIC_XOR
FLAT_ATOMIC_INCGLOBAL_ATOMIC_INC
FLAT_ATOMIC_DECGLOBAL_ATOMIC_DEC

上述原子指令也有"_X2"版本(64位)。

9.2. 指令

FLAT指令集几乎与缓冲区(Buffer)指令集相同,但没有FORMAT(格式)读写操作。与缓冲区指令不同,FLAT指令不能直接将数据返回到LDS,只能返回到VGPRs。

FLAT指令不使用资源常量(V#)或采样器(S#);但是,它们需要一个SGPR对(SGPR-pair)来保存暂存空间信息,以防任何线程的地址解析为暂存空间。详情参见暂存空间部分。

在内部,FLAT指令同时作为LDS指令和缓冲区指令执行;因此,它们会递增VM_CNT和LGKM_CNT计数器,并且只有在两者都被递减后才被认为完成。无法事先确定FLAT指令是否仅使用LDS或TA内存空间。

9.2.1. 顺序性

平面指令之间可以乱序完成。如果一条平面指令在纹理缓存中找到其所有数据,而下一个平面指令在LDS中找到其所有数据,则第二条指令可能先完成。如果两次取数返回数据到同一个VGPR,则结果未知。

9.2.2. 重要的时序考虑

由于FLAT加载的数据可能来自LDS或纹理缓存,并且这些单元具有不同的延迟,因此在VM_CNT和LGKM_CNT计数器方面存在潜在的竞态条件。因此,在FLAT指令之后唯一合理的S_WAITCNT值是零。

9.3. 寻址

FLAT指令支持64位和32位寻址。地址大小使用模式寄存器(PTR32)设置,并且每个波(wave)存储该值的本地副本。

用于窗口检查的地址在32位和64位模式下有所不同;但此处不涵盖此内容。

64位地址的存储方式为:低有效位(LSB)存储在ADDR指定的VGPR中,高有效位(MSB)存储在ADDR+1指定的VGPR中。

对于暂存空间,纹理单元从VGPR获取地址并执行以下操作:

Address = VGPR[addr] + TID_in_wave * Size - private aperture base (in SH_MEM_BASES) + offset (from flat_scratch)

9.4. 全局指令

全局指令类似于平面指令,但程序员必须确保没有线程访问LDS空间;因此,全局指令不使用LDS带宽。

全局指令提供两种寻址类型:

  • 内存地址 = VGPR地址 + 指令偏移量。

  • 内存地址 = SGPR地址 + VGPR偏移量 + 指令偏移量。

地址组件的大小取决于ADDRESS_MODE:32位或64位指针。VGPR偏移量为32位。

这些指令还允许数据直接在LDS和内存之间移动,而无需经过VGPRs。

由于这些指令不访问LDS,仅使用VM_CNT,而不使用LGKM_CNT。如果全局指令尝试访问LDS,则指令返回MEM_VIOL(内存违规)。

9.5. 暂存指令

暂存指令类似于平面指令,但程序员必须确保没有线程访问LDS空间,并且内存空间是交错(swizzled)的。因此,暂存指令不使用LDS带宽。

暂存指令还支持多双字访问和非对齐访问(尽管非对齐访问速度较慢)。

暂存指令使用以下寻址方式:

  • 内存地址 = flat_scratch.addr + swizzle(V/SGPR偏移量 + 指令偏移量, 线程ID)

  • 偏移量可以来自SGPR或VGPR,并且是32位无符号字节。

地址组件的大小取决于ADDRESS_MODE:32位或64位指针。VGPR偏移量为32位。

这些指令还允许数据直接在LDS和内存之间移动,而无需经过VGPRs。

由于这些指令不访问LDS,仅使用VM_CNT,而不使用LGKM_CNT。暂存指令不可能访问LDS;因此,不会进行错误或窗口检查。

9.6. 内存错误检查

TA(纹理数组)和LDS都可以报告由于错误地址导致的错误。这可能在以下情况下发生:

  • 无效地址(在任何窗口之外)

  • 写入只读表面

  • 数据未对齐

  • 地址越界:

    • LDS访问地址超出范围:[0, MIN(M0, LDS_SIZE)-1]

    • 暂存访问地址超出范围:[0, scratch-size -1]

对于具有错误地址的线程的策略是:超出此范围的写入不会写入值,读取返回零。

来自LDS或TA的地址错误通过它们各自的"指令完成"总线作为MEM_VIOL返回。这会设置波(wave)的MEM_VIOL TrapStatus位,并在相应的EXCPEN位设置时导致异常(trap)。

9.7. 数据

FLAT指令可以在VGPRs和/或内存中使用零到四个连续的双字数据。DATA字段确定哪些VGPR(如果有)提供源数据,而VDST VGPRs保存返回数据(如果有)。不进行数据格式转换。

9.8. 暂存空间(私有)

暂存空间(线程私有内存)是由窗口寄存器定义的内存区域。当地址落在暂存空间中时,硬件会自动执行额外的地址计算。内核必须提供额外信息(以FLAT_SCRATCH寄存器的形式)以便进行此计算。

FLAT_SCRATCH地址会随着每个FLAT请求自动发送。

FLAT_SCRATCH是一个64位字节地址。着色器通过将两个独立的值相加来构成该值:基地址(可以通过初始化的SGPR传递,或通过常量缓冲区传递)和每波分配偏移量(也在SGPR中初始化)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/6 23:39:06

【甲基化研究必看】:基于R的DMP和DMR检测完整流程解析

第一章:甲基化差异分析概述DNA甲基化是表观遗传调控的重要机制之一,通过在胞嘧啶的5端添加甲基集团,影响基因的表达活性而不改变DNA序列。甲基化差异分析旨在识别不同生物学条件下(如疾病与正常组织)之间甲基化水平显著…

作者头像 李华
网站建设 2026/3/3 14:12:46

基于单片机AT89C2051的音乐盒设计

一、系统设计背景与总体架构 传统机械音乐盒结构复杂、旋律固定,难以满足个性化需求。基于单片机AT89C2051的音乐盒,通过程序控制实现多首旋律播放,具有体积小、功耗低、可灵活更换曲目等优势,适配礼品、装饰等场景。 系统以AT89C…

作者头像 李华
网站建设 2026/3/5 13:08:25

QUIC协议加持下,HTTP/3为何能彻底改变网络延迟?,深度剖析底层机制

第一章:HTTP/3 的性能HTTP/3 作为新一代超文本传输协议,显著提升了网络通信的效率与可靠性。其核心改进在于底层传输协议从 TCP 切换为基于 UDP 的 QUIC 协议,有效解决了队头阻塞问题,并大幅缩短了连接建立时间。连接建立速度提升…

作者头像 李华
网站建设 2026/3/4 0:55:57

【量子服务集成终极指南】:揭秘企业级系统无缝对接的5大核心策略

第一章:量子服务集成的核心挑战与演进路径随着量子计算从理论研究逐步走向工程实现,将量子能力封装为可调用的服务并融入现有IT架构,已成为科技企业的关键战略方向。然而,量子服务的集成面临诸多技术瓶颈与系统性难题,…

作者头像 李华
网站建设 2026/3/8 1:05:50

必藏!AI大模型入门到进阶学习大纲,程序员小白速取

2025年堪称大模型“爆发元年”,ChatGPT的横空出世让大语言模型从实验室走进大众视野,如今多模态大模型更是层出不穷。对于程序员和技术小白来说,这既是风口也是挑战——掌握大模型技术,就等于握住了未来5年的技术主动权。这份从基…

作者头像 李华