找回密码
 加入我们
搜索
      
查看: 8929|回复: 28

[显卡] Microbenchmarking AMD’s RDNA 3 Graphics Architecture

[复制链接]
发表于 2023-1-8 21:08 | 显示全部楼层 |阅读模式
本帖最后由 ts02147823 于 2023-1-8 21:10 编辑

https://chipsandcheese.com/2023/ ... phics-architecture/

螢幕擷取畫面 2023-01-08 210608.png

螢幕擷取畫面 2023-01-08 210620.png
发表于 2023-1-8 21:54 | 显示全部楼层
请用中文重新表达一次,谢谢.........
发表于 2023-1-9 01:21 | 显示全部楼层
本帖最后由 灵乌路空 于 2023-1-9 01:24 编辑

乐,负载一高FP64和INT64就寄了,只有半个DCU干活

RDNA3的ALU还翻倍了,也就是说只剩四分之一算力
发表于 2023-1-9 09:05 | 显示全部楼层
意思是前端太拉胯,或者是显存延迟太大,根本喂不饱核心?
发表于 2023-1-9 09:19 | 显示全部楼层
所以理论性能提升还是相当可观的,差距真的就是寄存器么?
PS. 搜了下30系安培的SM单元设计:16384×32bit

RDNA2的CU可维持32个Wavefront,RDNA3 增加到了双路32wave;但寄存器仅有:265Kbit(共享)?
发表于 2023-1-9 09:19 来自手机 | 显示全部楼层
看了原文,rdna3架构看来选择放弃了提升int32,转而大幅度提升fp32。int32的加/乘性能跟rdna2差不多,但延迟高了一倍。而fp32的性能提升了1倍以上,延迟跟rdna2差不多。但是,在4090这个暴力堆砌面前都是菜鸡
发表于 2023-1-9 09:40 | 显示全部楼层
KimmyGLM 发表于 2023-1-9 09:19
所以理论性能提升还是相当可观的,差距真的就是寄存器么?
PS. 搜了下30系安培的SM单元设计:16384×32bit  ...

寄存器都是每个Nvidia的Subcore/AMD这个广义的SIMD独立的。
安培一个SM有四个Subcore,每个Subcore有两个FP32 SIMD使用交替发射的模式实现双发射,每个Subcore是64KiB的寄存器。
RDNA3的CU有两个广义的SIMD,每个广义SIMD有两个FP32 SIMD,Wave32下用VOPD指令实现双发射,Wave64下使用交替发射的模式实现双发射,每个广义SIMD是192KiB的寄存器。
寄存器问题是在寄存器缓存的设计上,不是在寄存器本身,单看指标的话,实际上安培是2 Bank*2Port,RDNA3是4 Bank*1Port,按道理来说RDNA3的主寄存器性能可能还有点优势。但是寄存器缓存上的设计没有给多出来的FP32 SIMD任何帮助。
发表于 2023-1-9 10:03 | 显示全部楼层
LambdaDelta 发表于 2023-1-9 09:40
寄存器都是每个Nvidia的Subcore/AMD这个广义的SIMD独立的。
安培一个SM有四个Subcore,每个Subcore有两个 ...

学习了,谢谢。
发表于 2023-1-9 10:13 | 显示全部楼层
灵乌路空 发表于 2023-1-9 01:21
乐,负载一高FP64和INT64就寄了,只有半个DCU干活

RDNA3的ALU还翻倍了,也就是说只剩四分之一算力 ...

粗略扫了一遍,没注意哪里有说这事啊。能否指一下在哪段?
发表于 2023-1-9 10:14 | 显示全部楼层
灵乌路空 发表于 2023-1-9 01:21
乐,负载一高FP64和INT64就寄了,只有半个DCU干活

RDNA3的ALU还翻倍了,也就是说只剩四分之一算力 ...

粗略扫了一遍,没注意哪里有说这事啊。能否指一下在哪段?
发表于 2023-1-9 10:54 | 显示全部楼层
运行游戏场景fp32翻倍的特性貌似不生效
发表于 2023-1-9 10:57 | 显示全部楼层
LambdaDelta 发表于 2023-1-9 09:40
寄存器都是每个Nvidia的Subcore/AMD这个广义的SIMD独立的。
安培一个SM有四个Subcore,每个Subcore有两个 ...

游戏多数是wave64场景?fp32翻倍的特性生不生效?
发表于 2023-1-9 11:02 | 显示全部楼层
本帖最后由 LambdaDelta 于 2023-1-9 11:10 编辑
PolyMorph 发表于 2023-1-9 10:57
游戏多数是wave64场景?fp32翻倍的特性生不生效?


direct x下面,所有的shader全部使用wave64模式。
这个模式下对于操作数的限制比较宽松那么一点点,而且不需要编译器做太多工作,但无法跑到峰值速度,最多5/6。


补充一点,chipsandcheese的GPU文章实际上有些结果是有问题的,非贬低chipsandcheese的意思,
但它使用的工具确实有些毛病,我自己写的工具也有很多的毛病,写文章的时候用把我自己和他与nemez的工具互相对照过,所以在三个工具上都发现了不少问题,以至于我现在也没有在chh发rdna3的架构文章。
发表于 2023-1-9 11:13 | 显示全部楼层
算力还是可以的 已经110了 最大问题是功耗 我是XTX 不知道XT是不是和RDNA2时候68-69算力众生平等
发表于 2023-1-9 11:18 来自手机 | 显示全部楼层
LambdaDelta 发表于 2023-1-9 11:02
direct x下面,所有的shader全部使用wave64模式。
这个模式下对于操作数的限制比较宽松那么一点点,而且 ...

我还以为rdna开始都是wave32了,那引入wave32是为啥。nv为啥都是wave32?
发表于 2023-1-9 11:25 | 显示全部楼层
koney 发表于 2023-1-9 11:18
我还以为rdna开始都是wave32了,那引入wave32是为啥。nv为啥都是wave32?

前两代除了pixel shader别的都用的wave32模式。
发表于 2023-1-9 11:33 | 显示全部楼层
koney 发表于 2023-1-9 11:18
我还以为rdna开始都是wave32了,那引入wave32是为啥。nv为啥都是wave32?

nv的warpsize一直都是32
但这不是重点, 重点是nv的sm是可以切一半同时执行两个不同的warp的
发表于 2023-1-9 12:16 | 显示全部楼层
本帖最后由 PolyMorph 于 2023-1-9 12:18 编辑
LambdaDelta 发表于 2023-1-9 11:25
前两代除了pixel shader别的都用的wave32模式。


89de5494d7fc0baf.jpg
537dc0eef0afc784.jpg

这样ppt上要除2才准确?
发表于 2023-1-9 12:22 | 显示全部楼层
PolyMorph 发表于 2023-1-9 12:16
这样ppt上要除2才准确?

ppt没啥问题,按2.5Ghz算,Wave32模式下峰值就是差不多61T,Wave64模式下,要打一点则扣,61*5/6,大约50T多点。不过实际应用,可能平均下来Wave64模式更高。
发表于 2023-1-9 12:29 | 显示全部楼层
zhuifeng88 发表于 2023-1-9 11:33
nv的warpsize一直都是32
但这不是重点, 重点是nv的sm是可以切一半同时执行两个不同的warp的 ...

这俩架构差别很大, nv的优化建议里都没有register相关的, amd为了提高wave occupancy需要控制register使用量。amd手动优化register后shader性能可以提升不少,但是对nv基本没效果。结合前面的说法,wave32下似乎register更紧张了
发表于 2023-1-9 12:43 | 显示全部楼层
koney 发表于 2023-1-9 12:29
这俩架构差别很大, nv的优化建议里都没有register相关的, amd为了提高wave occupancy需要控制register ...


控制使用量这点两头没什么区别, nsight是自动提示wave occupacy低的原因的, 写cuda核因为每线程register量或者sharedmem量太大造成空跑算日常了, 文档没具体写到register相关可能只是nsight提示非常详细了没必要一个个列出吧
发表于 2023-1-9 12:49 | 显示全部楼层
zhuifeng88 发表于 2023-1-9 12:43
控制使用量这点两头没什么区别, nsight是自动提示wave occupacy低的原因的, 写cuda核因为每线程register ...

我是感觉register的机制差很多,貌似nv的resgister分配完了会自动分配lds, lds使用量太大才会出问题, 但不知道为什么amd没这个机制
发表于 2023-1-9 12:52 | 显示全部楼层
本帖最后由 zhuifeng88 于 2023-1-9 12:55 编辑
koney 发表于 2023-1-9 12:49
我是感觉register的机制差很多,貌似nv的resgister分配完了会自动分配lds, lds使用量太大才会出问题,  ...


register用完了会退化到local memory, 但实际写的时候不会容许这种情况的, 如果不是完全不可能的话无论如何都要优化掉的, 并且编译的时候这种情况就会被警告, 退化到local memory的性能损失大的离谱
并且远在register用完之前就会因为数量限制造成warp调度受限sm使用率掉到不能接受了
发表于 2023-1-9 12:57 | 显示全部楼层
zhuifeng88 发表于 2023-1-9 12:52
register用完了会退化到local memory, 但实际写的时候不会容许这种情况的, 如果不是完全不可能的话无论如 ...


cuda程序才会有这种警告吧, 写hlsl就不会有。在游戏中明显AMD比nv更容易出现register瓶颈, 之前一个程序同时给nv和amd要优化建议, nv说瓶颈在纹理读写延迟上, amd直接说register用超了
发表于 2023-1-9 12:57 | 显示全部楼层
胡CHH 发表于 2023-1-9 10:14
粗略扫了一遍,没注意哪里有说这事啊。能否指一下在哪段?

看错了,不是四分之一算力,是每个WGP的FP64操作降低了一半,然后后面那段是

Throughput for special operations is lower on both GPUs. Reciprocal is often used as a way to avoid expensive division operations, and that runs at quarter rate on both architectures. Divide is even slower, and doing modular arithmetic on integer operations is about as slow as doing FP64.

是指俩架构special operations都是四分之一速度
发表于 2023-1-9 13:00 | 显示全部楼层
本帖最后由 zhuifeng88 于 2023-1-9 13:07 编辑
koney 发表于 2023-1-9 12:57
cuda程序才会有这种警告吧, 写hlsl就不会有。在游戏中明显AMD比nv更容易出现register瓶颈, 之前一个程 ...


你有没有想过一种可能(当然我真的说是可能)
纹理读写延迟瓶颈可能和register超了说的是同一件事
register超了造成无法调度更多的线程到当前sm执行, 导致访存延迟无法被掩盖

cuda下类似的情形, 从执行时间上看, 性能瓶颈原因是等待访存(和纹理读写延迟类似), 从sm使用率看, 更加基本的原因是寄存器不够用造成每个sm只能调度16个warp, 无法调度更多的线程充分掩盖访存延迟
}RMNALM`I`EQ0R~YVWF3}`E.png
`(%JZDV`AF)GW7)0@Y9Q(VP.png
发表于 2023-1-9 13:35 | 显示全部楼层
本帖最后由 koney 于 2023-1-9 13:38 编辑
zhuifeng88 发表于 2023-1-9 13:00
你有没有想过一种可能(当然我真的说是可能)
纹理读写延迟瓶颈可能和register超了说的是同一件事
register ...


实际的确有可能这两者同时存在,可能nv不建议优化寄存器是觉得优化寄存器难度比优化带宽大,当时就简单做了两个rgba8合并一个rgba16就获得了差不多30%的提升。
不过AMD当时建议我们用lds来优化regsister,而且表示等待wave的开销比lds开销更大,我想了下nv这玩意儿不是自动做的吗。所以我才在想。AMD为啥不做类似nv的分配机制
我记得,nv的lds和L1是一起的吧,速度应该不会特别慢
发表于 2023-1-9 13:53 | 显示全部楼层
本帖最后由 zhuifeng88 于 2023-1-9 13:54 编辑
koney 发表于 2023-1-9 13:35
实际的确有可能这两者同时存在,可能nv不建议优化寄存器是觉得优化寄存器难度比优化带宽大,当时就简单做 ...


local memory确实是和l1一起的, 但比寄存器慢出很多了, 看架构大约20-40周期延迟, 看使用场景了有些register spill比wave occupacy不太离谱程度的低影响更大
发表于 2023-1-9 14:05 | 显示全部楼层
koney 发表于 2023-1-9 13:35
实际的确有可能这两者同时存在,可能nv不建议优化寄存器是觉得优化寄存器难度比优化带宽大,当时就简单做 ...


这些建议背后的原因很复杂,比如你说的这种情况,Nv不建议用LDS的原因可能是因为Nv的GPU除开A100和之后的,都没有LDS直接访存的能力,LDS为了读数据还需要占用寄存器。而AMD可以直接读进LDS,可以建议你用LDS来优化。实际上你用Nv的建议可能对A卡和N卡都有效,但AMD的建议就只对A卡有效。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2025-1-5 10:28 , Processed in 0.015594 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表