少于 1 分钟阅读

Power

  1. 下一条command的大致执行时间:1/Hzcycle,Hz = cycle/s, 1/Hz = s/cycle. s = cycle 1/Hz,一条命令耗200个cycle,一个cycle就是一次震荡周期。例如执行一次power command mmio,需要200个cycle,时钟频率位200k,最终需要1000ns。
  2. NOC power gating:再global config时初始化,VMM disable power时VPMU下电。VSUS PMU写在frameware中,控制memory miu等组件。
  3. PMU PMU有两级甚至三级。通常一级在cpu一级在VMM。VSUS放在cpu,V-engine的PMU放在VMM,都是管理videocrd的组件。VSUS在soc上时完整的,在VMM上只是实现部分功能。
  4. CSP原来和C3D在一块,整个3Dpipline都由CSP来控制,现在解耦之后,CSP管理ringbuffer,解析完3Dcommand之后再下发。所以存在CSPpoweron 但是3D submodule power down的情况。这就存在两个组件的异步。
  5. 如果driver中写了某个寄存器,没有做reset或者touch这个寄存器的前提下,寄存器的值再rmmod和insmod的时候不会改变,除了init中写的寄存器。

DVFS

dvfs 动态电压频率控制 cadence

静态功耗: 漏电压

动态功耗:寄生效应

时钟周期如何影响功耗?工作速率增加。信号处理加快,同一个时间段内上升沿下降沿增加,意味着状态改变加快,受控门/输出门电路变化快。门电路状态变化存在损耗,综上需要更大的功耗/功率,提升功耗在电阻相对的情况下,必须先加压。

CSP

Arch: BIU CSP MXU GPC 内部:MMIO CSparser IA 3Dparser 3DPreParse dmaL2 PreFetch

Sync: CSP外部握手BIU
internal external fence

Context:<就是模板 template=""> 可以分为2D 3D Group三种类型,每种类型可能对应不同的寄存器组。pipline的寄存器都是那些,每个类型的task对应的hardware的context register组合不一样,默认在memory中query一个上电init状态,然后保存各自不同的需求状态,作为各自的init context buffer/ shadow buffer,通过restore和save能快速保存恢复状态。做一次dma task,从restore save结束。 dirty sync,例如某一个任务在2d 3d切换,进行2d操作后直接更改了寄存器,memory保存的copy并未更新,需要flush操作将更改的寄存器值save sync一下,方便之后的操作。

IA: Input assembler. 图元装配,根据数据buffer生成顶点。例如现在有一堆2维的点,这些点如何切分生成点线面呢?就是在IA。分成一个个点线面之后 Vertex顶点着色器就可以做三维投影变换的计算了。

CommandPreParse:一个DMA buf可能嵌套了好几层,预解析提前把下一级的dma buffer从mxu取出来,这个过程就是prefetch。preparse就是prefetch的前提,先将memory操作取出来,但是并没有执行,在MAC里排队(guess)。

Batch splitter:划分不同的顶点batch到不同的gpc,有划分规则才能组合到一起。

Execute Indirect:对于实例化数量多的场景,不用通过cpu重复下一样的command,GPU通过直接读取ringbuffer数据。实现原理是CSP提前下很多命令,cpu就不用干预了。只有dma command可以用,ring用不了。

DMA

CNU

CMMU is a multi-level cache to store PTE for address translation

物理内存

local:在uefi阶段就分好的 pcie:都是cpu visiable的 cpu visiable: 在bar上可见的 local cpu unvisiable:在bar上没有 物理空间不可见的local snoop: pcie unsnoop : pcie 通过share memory达到local的snoop

GPU VA内存

shared memory private memory

标签:

分类:

更新时间: