高通吧 关注:176,998贴子:4,469,751
  • 8回复贴,共1

Adreno690的CU架构(修正版)

只看楼主收藏回复


Adreno690的某些细节之前没算清楚,导致某些细节缺少测试。
单个CU由两个EU构成。
每个EU可以最多维持4个Wave64,或2个Wave128(Wave128指令实际被拆分成两个前后必须顺序发射的指令)。
每个EU拥有一个FP32/INT24 SIMD64,一个FP16 SIMD128。
每个EU拥有96KiB的4 Bank寄存器。
Adreno690的CU根据数据类型以及Workgroup大小不同,大体上分为三种工作模式:
FP32/INT24的Wave64模式,在Workgroup大小小于等于64时或在寄存器用量大于等于48时默认使用这种模式。
FP32/INT24的Wave128模式,在Workgroup大小大于64并且寄存器用量小于48时或Pixel Shader中,默认使用这种模式。
FP16的Wave128模式,使用FP16数据时,默认使用这种模式。
这三种模式由编译器负责切换。
Adreno690的EU执行模式分为TLP模式与ILP模式。
顾名思义,TLP模式就是利用线程切换来掩盖SIMD延迟,从而有效利用SIMD吞吐的模式;ILP模式则是利用指令级并行来延迟SIMD延迟。通常的GPU中都不会强调这两种模式的存在,但是Adreno690在这两种模式之间切换时,存在一个切换延迟,在FP32/INT24 Wave64以及FP16 Wave128模式下,切换延迟为0.25周期;FP32 Wave128模式下,切换延迟为0.5周期。
Adreno690的CU中,LDS大小为36KiB,是一个比较怪的值,每周期可以读写64Byte。
Adreno690的CU中,TMU有8个,在INT8*4和FP16*4下能够在任意Filter下面跑满,FP32*4为半速,单INT16*4只有1/4速。
Adreno690的CU中,Texture Cache大概有16KiB,带宽为64 Byte每周期。
L1D可能不存在,单个CU到L2的带宽大约为48Byte每周期。


IP属地:四川1楼2024-02-02 16:42回复
    690这看发射端每周期1条指令,ilp是n周期调度fp再n+1周期调度int?


    IP属地:上海来自iPhone客户端2楼2024-02-02 16:58
    收起回复
      支持技术帖


      IP属地:安徽来自Android客户端3楼2024-02-03 01:19
      回复
        请问什么时候执行TLP模式,什么时候执行ILP模式呢?


        IP属地:安徽4楼2024-04-30 10:19
        收起回复
          FP16只有wave 128模式?这不对吧?我用opencl写fp16 矩阵乘时,编译器是切换到wave 64模式的


          IP属地:安徽5楼2024-07-02 19:40
          收起回复