龙芯LA架构相关的存储管理

(LoongArch-P92)

目录

1.1   物理地址空间

1.2  虚拟地址空间

1.3 LA64架构下的虚拟地址缩减模式

1.4  存储访问类型

1.5 页表映射存储管理

1.5.1 TLB组织结构

1.5.2 基于TLB的虚实地址转换过程

1.5.3 TLB的软件管理

(1)TLB相关的例外

(2)TLB相关的指令

(3)TLB相关的CSR寄存器

(4)TLB的初始化

1.5.4 页表遍历过程所支持的多级页表结构


1.1   物理地址空间

LA64架构下:PALEN=48(整个系统的物理地址宽度为48位)。

1.2  虚拟地址空间

对于PLV0级来说:LA64架构下虚拟地址空间大小=2^64字节。(并不都是合法的,存在一些虚拟地址的空洞)。

LA64MMU支持2虚实地址翻译模式直接地址翻译模式 和 映射地址翻译模式。

CSR.CRMD的条件

MMU地址翻译模式

特点

DA=1 PG=0

a-直接地址翻译模式

处理器复位结束后进入该模式。

物理地址 = 虚拟地址的【PALEN-1:0】(不足补0)

取指的存储类型:由CRMD.DATF决定

load/store的存储类型:由CRMD.DATM决定

DA=0 PG=1

b-映射地址翻译模式

(细分为2种模式)

b1-直接映射地址翻译模式

映射模式时优先看是否是该模式,无法进行后再按页表映射模式翻译。

取指/load/sorte的存储类型:由配置窗口的MAT域决定;

b2-页表映射地址翻译模式

虚拟地址合法性判断:虚拟地址的【63:PALEN】位必须与【PALEN-1】位相同,即【47】位之上的所有位是其符号扩展,否则将出法地址错ADE例外。

取指/load/sorte的存储类型:由页表项中的MAT域决定。

b1-直接映射地址翻译模式: 共有4个配映射配置窗口,完成虚实地址的直接映射,对应CSR.DMW0~CSR.DMW3寄存器,前2个可同时用于取指和load/store操作,后2个窗口仅用于load/store操作。

窗口配置:

每一个窗口可配置一个248字节虚拟地址空间

命中:

虚拟地址【63:60】位= 窗口寄存器中的VSEG域

且当前特权等级在该配置窗口中被允许。

举例:DMW10x9000000000000011

      表示在PLV0级下,虚拟地址空间0x90000000000000000x9000FFFFFFFFFFFF,

         被映射到物理地址空间00xFFFFFFFFFFFF上,且存储访问类型是一致可缓存的。

DMW00x8000000000000001

      表示在PLV0级下,虚拟地址空间0x80000000000000000x8000FFFFFFFFFFFF,

         被映射到物理地址空间00xFFFFFFFFFFFF上,且存储访问类型是强序非缓存的。

@start.S

118         li.d    t0, UNCACHED_MEMORY_ADDR | 0x1         //0x8000000000000001    -DMW0                                                                                                                                                                                           

119         csrwr   t0, 0x180                                                                                            

120         li.d    t0, CACHED_MEMORY_ADDR | 0x11     //0x9000000000000011     -DMW1                                                                 

121         csrwr   t0, 0x181                    

...

337         /* DA disable for 0x90xxxxxxxxxxxxxx and 0x80xxxxxxxxxxxx address can be used */                          

338         li.w    t0, 0xb0

339         csrwr   t0, 0x0        //PG=1,DA=0, 使能映射地址翻译模式   ;                                                 

                         

1 -1    直接映射配置窗口寄存器定义(LA64架构)

名字

读写

描述

63:60

VSEG

RW

直接映射窗口的虚地址的【63:60】位

59:6

RO

保留,不允许软件改值。

5:4

MAT

RW

虚拟地址落在该映射串口下访存操作的存储访问类型

3

PLV3

RW

为1表示在特权等级PLV3下可使用该窗口配置进行地址翻译。

2

PLV2

RW

为1表示在特权等级PLV2下可使用该窗口配置进行地址翻译。

1

PLV1

RW

为1表示在特权等级PLV1下可使用该窗口配置进行地址翻译。

0

PLV0

RW

为1表示在特权等级PLV0下可使用该窗口配置进行地址翻译。

1.3 LA64架构下的虚拟地址缩减模式

目的:为了在某些应用场合下减少页表级数。

通过CSR. RVACFG寄存器中的RDVA值:(1~8)实现。

映射地址翻译模式下:虚拟地址的有效位按照(VALEN-RDVA)这么多位来处理。

例:RDVA=8时,合法地址的【6340】位需要是第【39】位的符号扩展。

1.4  存储访问类型

LA架构支持三种存储访问类型:

存储访问类型

MAT域访问类型控制值的定义

一致可缓存(Coherent Cached)简称CC

1

强序非缓存(Strongly-ordered Uncached)简称SUC

0

弱序非缓存(Weaky-ordered Uncached)简称WUC

2

保留

3

代码中的配置:

 72 #define CACHE_SUC              (0 << CACHE_SHIFT) /* Strong-ordered UnCached */

 73 #define CACHE_CC                (1 << CACHE_SHIFT) /* Coherent Cached */

 74 #define CACHE_WUC            (2 << CACHE_SHIFT) /* Weak-ordered UnCached */

CC:所访问的对象既可以是最终存储对象也可以时处理器中维护有缓存一致行的缓存。通常采用该类型访问内存以获得高性能。

SUC/WUC:只能访问最终存储对象。

SUCSUC访问满足顺序一致行,即所由访问严格按照程序中的次序执行,且当前访存操作彻底完成前不能开始执行下一个访存操作;

WUC:允许推测执行,弱序非缓存的写数据可以在处理器核内部合并至更大的规模后(如一个Cache行)以突发方式写出,合并过程中后面的写数据可以覆盖前面写数据。WUC通常用于加速非缓存内存数据的访问,如显存数据。

1.5 页表映射存储管理

当虚拟地址翻译模式为b-映射地址翻译模式时,除了落在b1-直接映射配置窗口中的地址之外,其余所有合法地址都必须通过b2-页表映射完成虚实地址转换。

页表映射地址的地址:指该地址需要通过TLB进行虚实地址转换。

其他地址:不需要经过TLB进行虚实地址转换,虚地址被直接线性映射至物理地址的最低部分。

TLB作用:作为处理器中存放系统页表信息的一个临时缓存用于加速映射地址翻译模式下的取指和load/store操作的虚实地址转换过程

1.5.1 TLB组织结构

LATLB分两个部分:STLBMTLB。在虚实地址转换过程中,STLBMTLB同时查找。

软件需保证不会出现STLBMTLB同时命中的情况,否则处理器行为将不可知。

STLBMTLB的表项格式基本一致,区别仅在于MTLB每个表项均包含页大小信息。

STLB:所有表项的页大小相同的单一页大小TLB。采用多路组相联的组织形式。

MTLB:支持不同表项的页大小可以不同的多重页大小TLB。采用全相联查找表的组织形式。

对于STLB,如果有2^ INDEX组,且配置的页大小为2^PS字节,那么硬件查询STLB的过程中,是将虚地址的【PS+INDEXPS】位作为索引值来访问各路信息的。

存放页表项的页大小是由系统软件配置在CSR.STLBPS寄存器的PS域。

每一个TLB表项的格式:比较部分+物理转换部分

比较部分:

VPPN

PS

G

ASID

E

VALEN-13

6

1

10

1比特

物理转换部分:

PPN0

RPLV0

PLV0

MAT0

NX0

NR0

D0

V0

PPN1

RPLV1

PLV1

MAT1

NX1

NR1

D1

V1

E:存在位,1表示所在TLB表项非空,可以查找匹配。

ASID:地址空间标识,用于区分不同进程中的同样的虚地址,避免进程切换时清空整个TLB所带来的性能损失。操作系统为每个进程分配唯一的ASIDTLB在查找时除了比对地址信息外,还需要比对ASID信息。

G:全局标志位,为1时,查找时不进行ASID是否一致性检查。

当操作系统需要在所有进程间共享同一虚拟地址时,可以设置TLB页表项中的G1

PS:仅在MTLB中出现,用于指定该页表项中存放的页大小。

VPPN:虚双页号,每一个页表项存放了相邻的一对奇偶相邻页表信息,所以TLB页表项中存放虚页号的是系统中虚页号/2的内容,即虚页号的最低位不需要存放在TLB中。查找TLB时再根据查找虚页号的最低位决定是选择奇数还是偶数号页的物理转换信息。

表项的物理转换部分存有一对奇偶相邻页表的物理转换信息。

每一个页的转换信息包括:

V: 有效位。为1:该页表项是有效的且被访问过的。

D:脏位。为1:该页表项所对应的地址范围内已有脏数据。

NR:不可读位。为1:该页表项所在地址空间上不允许执行load操作。(仅LA64架构)

NX:不可执行位。为1:该页表项所在地址空间上不允许执行取指操作。(仅LA64架构)

MAT:存储访问类型,2比特。控制落在该页表项所在地址空间上放存操作的存储访问类型。见1.4章节。

PLV:特权等级,2比特。该页表项对应的特权等级。

           RPLV=0时,该页表项可以被任何特权等级不低于PLV的程序访问;

  RPLV=1时,该页表项仅可以被特权等级==PLV的程序访问。

RPLV:受限特权等级使能。页表项是否被对应特权等级的程序访问的控制位。

PPN:物理页号PALEN-12 =36比特。

当页大小>4KB时,TLB中所存放的PPN的【log2PS-112】位可以是任意值。

1.5.2 基于TLB的虚实地址转换过程

TLB进行虚实地址转换过程由硬件自动完成。


1.5.3 TLB的软件管理

1TLB相关的例外

当TLB中没有匹配项,或尽管匹配但页表项无效或访问非法时,就需要触发例外,交由操作系统内核或其它监管程序,由软件进一步处理,对TLB的内容进行维护,或对程序执行的合法性做最后裁定。

TLB架构中与TLB管理相关的例外有:

1-TLB重填例外

触发条件:虚拟地址在TLB中没有匹配项时触发

后续操作:通知系统软件进行TLB重填工作。

特点:拥有独立的例外入口、独立的用于维护例外现场的CSR以及一套独立的TLB访问接口CSR.(即允许在其他例外的处理过程中被触发)

TLB重填例外陷入的同时:

(1)硬件会自动将CSR.CRMD的DA置1,PG置0,即自动进入直接地址翻译模式,从而避免TLB重填例外处理程序自身再次触发TLB重填例外,此时例外现场将无法保存与恢复。

(2)硬件自动CSR.TLBRERA.ISTLBR位置1:目的为了区分TLB重填例外陷入后所使用的CSR和其他例外可使用的CSR。

2-load操作页无效例外

触发条件

load操作的虚地址在TLB中找到匹配项,但表项中V=0

3-store操作页无效例外

触发条件

store操作的虚地址在TLB中找到匹配项,但表项中V=0

4-取指操作页无效例外

触发条件

取指操作的虚地址在TLB中找到匹配项,但表项中V=0

5-页特权等级不合规例外

触发条件

访问操作的虚地址在TLB中有匹配项且V=1;但访问的特权等级不合规。不合规体现:

RPLV=0,,CSR.CRMD.PLV > 表项中PLV;

RPLV=1,CSR.CRMD.PLV≠表项中PLV;

6-页修改例外

触发条件:

store操作的虚地址在TLB中有匹配且V=1,特权等级也合规,但是该页表项的D=0

7-页不可读例外

触发条件:

load操作的虚地址在TLB中有匹配且V=1,特权等级也合规,但是该页表项的NR=1

8-页不可执行例外

触发条件:

取指操作的虚地址在TLB中有匹配且V=1,特权等级也合规,但是该页表项的NX=1

ertn指令:用于从例外处理返回。

        如果所处理的例外是TLB重填例外:

例外对应的PPLV、PIE、PWE信息来自于CSR.TLBRSAVE;

例外对应的返回地址来自CSR.TLBRERA;

除此外还要将CSR.CRMD中的DA清0、PG置1.

          如果CSR.LIBCTL中的KLO≠1,则将LLbit=0,否则LLbit不修改。

2TLB相关的指令

1-2 TLB维护指令

命令

描述

tlbsrch

CSR.ASID CSR.TLBEHI的信息区查询TLB

有命中项

将命中项的索引值写入到CSR.TLBIDXindex

CSR.TLBIDXNE=0

未命中

CSR.TLBIDXNE=1(该TLB项为空:无效TLB表项);

TLB中各项的索引值计算规则:从0依次递增编号,先STLBMTLB

STLB:从第0路的第0行~最后一行;

             然后是第1路的第0行~最后一行,直到最后一路最后一行。

MTLB:从第0行到最后一行。

tlbrd

将CSR.TLBIDX的index域作为索引值去读取TLB中的指定项

若index超过了TLB的范围,处理器行为不确定。

有效TLB项:

将页表信息写入CSR.TLBEHI、TLBELO0、TLBELO1、TLBIDX,PS

将CSR.TLBIDX的NE置0;

无效TLB项:

将CSR.TLBIDXde NE置1,且对读出内容进行屏蔽保护,如CSR.ASID.ASID、TLBEHI、TLBELO0、TLBELO1、TLBIDX.PS都不更新或置0;

tlbwr

将TLB相关CSR中所存放的的页表信息写入到 TLB中指定项

信息来在:CSR.TLBEHI、TLBELO0、TLBELO1、TLBIDX,PS

若NE=1,TLB中填入一个无效TLB项,NE=0时,TLB填入一个有效TLB项。

填入TLB的位置由CSR.TLBINDEX的Index域的值指定。

tlbfill

将TLB相关CSR中所存放的的页表信息写入到 TLB中。

信息来在:CSR.TLBEHI、TLBELO0、TLBELO1、TLBIDX,PS

若NE=1,TLB中填入一个无效TLB项,NE=0时,TLB填入一个有效TLB项。

填入时:

根据被填入表项的页大小来决定是写入STLB还是MTLB。

当被填入的页表项的页大小=STLB所配置的页大小(CSR.STLBPS)是填入STLB,否则填入MTLB。填到STLB哪一路或MTLB哪一项,由硬件随机选择。

tlbclr

根据TLB相关的CSR信息,无效TLB中的内容,以维持TLB与内存之间页表数据的一致性。

当CSR.TLBIDX.Index落在STLB范围(<STLB项数):执行tlbclr指令,将STLB中由CSR.TLBIDX.Index低位所指示的那一组中所有路中等于G=0且ASID等于CSR.ASID.ASID的页表项无效掉;

当CSR.TLBIDX.Index落在MTLB范围(STLB项数):执行tlbclr指令,将MTLB中所有G=0且ASID等于CSR.ASID.ASID的页表项无效掉;

tlbflush

根据TLB相关的CSR信息,无效TLB中的内容,以维持TLB与内存之间页表数据的一致性。(同上,范围更大)

当CSR.TLBIDX.Index落在STLB范围(<STLB项数):执行tlbflush指令,将STLB中由CSR.TLBIDX.Index低位所指示的那一组中所有路中的页表项无效掉;

当CSR.TLBIDX.Index落在MTLB范围(STLB项数):执行tlbflush指令,将MTLB中所有页表项无效掉;

invtlb

无效TLB中的内容,以维持TLB与内存之间页表数据的一致性。

Invtlb     op , rj,rk    (三个源操作数)

op:指示操作类型;

rj【9:0】:存放无效操作所需的ASID信息(“寄存器指定ASID”),其余比特位必写0;

rk: 存放无效操作所需的虚拟地址(VA);不需要时写0;

op

操作

0x0

清除所有页表项.

0x1

与op=0完全一致;

0x2

清除所有G=1的页表项;

0x3

清除所有G=0的页表项;

0x4

清除所有G=0,且ASID等于“寄存器指定ASID”的的页表项;

0x5

清除G=0,且ASID等于“寄存器指定ASID”、且VA等于寄存器指定VA的页表项;

0x6

清除所有G=1,且ASID等于“寄存器指定ASID”、且VA等于寄存器指定VA的页表项;

1-3 软件页表遍历指令

lddir

lddir       rd,   rj,   level

用于在软件页表遍历过程中目录项的访问

Level: 访问的是哪一级页表。

           =1;对应CSR.PWCL中的PT;

           =2;对应CSR.PWCL中的Dir1;

           =3;对应CSR.PWCL中的Dir2;

           =4;对应CSR.PWCH中的Dir3;

rj[6]=0: 表明rj中内容是第level级页表的基址的物理地址。

              此时执行lddir指令,会根据当前处理的TLB重填地址访问level级  

        页表,取回其对应的level+1级页表的基址,将其写入到寄存器rd中。

rj[6]=1: 表明rj中的内容是一个大页(Huge Page)的页表项。这种情况下,        执行lddir后,通用寄存器rj中值将被直接写入到通用寄存器rd中。

ldpte

ldpte       rj,seq

用于在软件页表遍历过程中目录项的访问

seq:用于指示访问的偶数页还是奇数页。

       访问偶数页时结果将被写入CSR.TLBRELO0,

       访问奇数页时结果将被写入CSR.TLBRELO1.

rj[6]=0:

              表明rj中内容是PTE那一级页表的基址的物理地址。

              此时执行ldpte指令,会根据当前处理的TLB重填地址访问PTE级  

              页表,取回页表项将其写入到对应的CSR中。

rj[6]=1: 表明rj中的内容是一个大页(Huge Page)的页表项。这种情况下,        执行ldpte后,直接将通用寄存器rj中值转换成最终的页表项格式后     

        写入到对应的CSR中。

3TLB相关的CSR寄存器

CSR寄存器

描述

第一类

BADV

用于触发地址错误相关例外时,记录出错的虚地址。

TLBEHI

TLB表项高位

【VALEN-1:13】:VPPN值;

(1)tlbrd指令,读取TLB表项的VPPN域的值写入此处;

(2)CSR.TLBRERA.ISTLBR=0时,  tlbsrch指令查询TLB所用VPPN,以及ltbwr、tlbfill指令系入TLB表项的VPPN值来自此处。

(3)当触发TLB相关例外中的2~8的页不可执行例外的7种例外时,触发例外的虚拟地址的【VALEN-1:13】记录到此。

TLBELO0

偶数页信息

(1)TLB指令操作时TLB表项低位部分物理页号等相关信息。

CSR.TLBRERA.ISTLBR=0时, 执行tlbwr、tlbfill指令写入TLB表项的G、PPN、V、PLV、MAT、D、NR、NX、RPLV等来自此寄存器。

(2)执行tlbrd指令种,从TLB表项中读出上述信息系入该寄存器。

TLBELO1

奇数页信息

TLBIDX

TLB表项相关的索引值index,PS、NE值。

执行tlbrd指令时,读取的TLB表项的PS值记录在此。

ASID

【9:0】用于访存操作和TLB指令的地址空间标识符(ASID)信息

STLBPS

【5:0】:用于配置STLB中的页大小。

第二类

PGDL

【GRLEN-1:12】: Base  ,配置低半地址空间的全局目录的基址。

 要求全局目录的基址是4KB边界地址对齐,所以【11:0】=0;

低半地址空间:指虚地址的第【VALEN-1】位=0;

PGDH

【GRLEN-1:12】: Base  ,配置高半地址空间的全局目录的基址。

高半地址空间:指虚地址的第【VALEN-1】位=1;

PGD

只读寄存器;

内容是当前上下文中出错虚地址所对应的全局目录基址信息

不仅用于CSR类指令的读返回地址,也用于lddir指令访问全局目录时所需的基址信息。

【GRLEN-1:12】: Base:如果当前上下文中出错VA地址的最高位=0,读返回值=PGDL中的BASE值,否则=PGDH中的Base值。

CSR.TLBRERA.ISTLBR=0时当前上下文中出错VA地址在CSR.BADV中。

CSR.TLBRERA.ISTLBR=1时..上下文中出错VA地址在CSR.TLBRBADV中。

PWCL

页表遍历控制-低半部分

这些信息将用于指示软件/硬件进行页表遍历。

名字

读写

描述

4:0

PTbase

RW

末级页表的起始地址

9:5

PTwidth

RW

末级页表的索引位数

14:10

Dir1_base

RW

最低一级目录的..

19:15

Dir1_width

RW

最低一级目录的..

24:20

Dir2_base

RW

次低一级目录的..

29:25

Dir2_width

RW

次低一级目录的...

31:30

PTEWidth

RW

内存中的每个页表项的位宽

0:64比特

1:128比特

2:192比特

3:256比特

PWCH

页表遍历控制-高半部分

名字

读写

描述

5:0

Dir3_base

RW

次高一级目录的..

11:6

Dir3_width

RW

17:12

Dir4_base

RW

最高一级目录的..

23:18

Dir4_width

RW

31:24

0

RO

第三类

TLBRENTRY

TLB重填例外入口地址

由于触发TLB重填例外后,处理器核将进入直接地址翻译模式,所以此处填入地址应当是物理地址

【11:9】:只读,恒为0。

【PALEN-1:12】:PPN,RW  TLB重填例外入口地址【PALEN-1:12】

                 此处填入的地址应为物理地址。

【63:PALEN】: 只读,恒为0.

TLBRERA

保存TLB重填例外处理完毕之后的返回地址

[0]: IsTLBR: TLB重填例外标志位

[GRLEN-1: 2]: PC, 触发TLB重填例外指令的PC的[GRLEN-1:2]位。

TLBRBADV

记录触发TLB重填例外的出错虚地址

[GRLEN-1:0 ] : VAddr

TLBREHI

是TLBRERA.IsTLBR=1(处于TLB重填上下文时

存放TLB指令操作的TLB表项高位部分物理页号等相关信息

名字

读写

描述

5:0

PS

RW

TLB重填例外专用的页大小值

VALEN-1:13

VPPN

RW

IsTLBR=1时,tlbsrch查询TLB所用VPPN值,及tlbwr/tlbfill写入TLB表项的VPPN域值来自此。

触发TLB重填例外时,触发例外的虚拟地址的[VALEN-1:13]记录到此。

63:VALEN

Sign_Ext

R

是VPPN最高位的符号扩展。

TLBRELO0

是TLBRERA.IsTLBR=1(处于TLB重填上下文时

存放TLB指令操作的TLB表项低位部分物理页号等相关信息

名字

描述

0

V

页表项有效位

1

D

..脏位

3:2

PLV

..特权等级

5:4

MAT

..存储访问类型

6

G

..全局标志位

PALEN-1:12

PPN

页表的物理页号

61

NR

页表项不可读位

62

NX

...不可执行位

63

RPLV

页表的受限特权等级使能。

无论IsTLBR为何值:

执行tlbrd指令,只更新TLBELO0/1寄存器

执行tlbpte指令,只更新TLBRELO0/1,TLBEHI寄存器

TLBRELO1

TLBRPRMD

TLB重填例外前-模式信息

当触发TLB重填例外时,硬件会将此时处理器核的特权等级PLV、客户机模式、全局中断使能IE和监视点使能WE位保存至该寄存器中,用于例外返回时恢复处理器核的现场。

TLBRSAVE

TLB重填例外数据保存:用于给系统暂存数据。

额外设置一个共TLB重填例外处理程序使用的SAVE寄存器,是针对非TLB重填例外的处理过程中触发TLB重填例外这一情况。

【GRLEN-1:0 】  DATA;RW,仅供软件读写的输入,除CSR指令外,硬件不会该此域内容。

4TLB的初始化

LA架构允许不实现TLB的硬件初始化,让启动阶段的软件通过执行“INVTLB r0,r0”来完成这一功能。

1.5.4 页表遍历过程所支持的多级页表结构

无论是使用lddir 、ldpte指令实现的软件页表遍历,还是硬件页表遍历,其所支持的多级页表结构是一样的,系统软件需要按照如下格式定义页表项。

区别:bit6:基本页的G在第6位,大页H(大页表项标志位)在第6位,G在第12位。

P:物理页是否存在;W:该页是否可写。这些信息不填入TLB表项但用于页表遍历处理过程。

图1 页表遍历过程所支持的多级页表结构

 被遍历页表最顶层目录(全局目录:Global Directory)的基址PGD由被查询虚地址的第(PALEN-1)位决定:

            为0时,PGD=CSR.PGDL.Base;

   为1时,PGD=CSR.PGDH.Base;

整个页表结构为PALEN-1比特。???

各级目录项和页表项的规格由系统软件配置在CSR.PWCL和PWCH中。

由于TLB表项采用的双页存储结构,对于大页的页表项,硬件页表重填逻辑或软件的ldpte指令会根据大页的页表信息自动拆分出两个尺寸折半的页表项后填入TLB中

如:标准页大小为16KB,则此时第一级大页的大小通常为32MB,软件页表遍历过程执行完“LDPTE rj,0”“LDPTE rj,1” 指令后,TLB中将被填入两个16MB页大小的页表项,软件无需特殊干预。

因TLB重填例外处理过程中地址映射是处于直接地址翻译模式,所以PGD及内存中页表的目录项中所配置的地址必须为物理地址

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算概论学习笔记(1)

感谢北大李戈老师讲解的计算概论。 【道阻且长&#xff0c;行则将至】 很多年没有intensive coding&#xff0c;现在这个系列是coding retake&#xff0c;一点点回忆之前的知识&#xff0c;希望能重回到一线。主要内容包括C,C,Pytorch学术前沿项目学习和实践&#xff0c;预计…

线路和绕组中的波过程(一)

本篇为本科课程《高电压工程基础》的笔记。 本篇为这一单元的第一篇笔记。下一篇传送门。 当电路中的设备&#xff08;元件&#xff09;最大实际尺寸l大于人们所感兴趣的谐波波长 λ \lambda λ时&#xff0c;可以作为集中参数处理&#xff0c;否则就要当做分布参数处理。即&…

C语言 [力扣]详解环形链表和环形链表II

各位友友们&#xff0c;好久不见呀&#xff01;又到了我们相遇的时候&#xff0c;每次相遇都是一种缘分。但我更加希望我的文章可以帮助到大家。下面就来具体看看今天所要讲的题目。 文章目录 1.环形链表2.环形链表II 1.环形链表 题目描述:https://leetcode.cn/problems/link…

Babel基础知识及实现埋点插件

目录 前言 AST 遍历 Visitors Paths&#xff08;路径&#xff09; Paths in Visitors&#xff08;存在于访问者中的路径&#xff09; State&#xff08;状态&#xff09; Scopes&#xff08;作用域&#xff09; Bindings&#xff08;绑定&#xff09; API babylo…

「TypeScript」TypeScript入门练手题

前言 TypeScript 越来越火&#xff0c;现在很多前端团队都使用它&#xff0c;因此咱们前端码农要想胜任以后的前端工作&#xff0c;就要更加熟悉它。 入门练手题 interface A {x: number;y: number; }type T Partial<A>;const a: T { x: 0, y: 0 }; const b: T { …

LLM 可以从简单数据中学习吗?

在 10 月份的一次周会结束后&#xff0c;我提到 SFT 训练后的 Loss 曲线呈现阶梯状&#xff0c;至于为什么&#xff0c;并没有人有合理的解释&#xff0c;加上当时的重心是提升次日留存率&#xff0c;Loss 曲线呈现阶梯状与次日留存率的关系还太远&#xff0c;即使有问题&#…

使用单片机的IO引脚直接驱动段码屏

使用单片机的IO引脚直接驱动段码屏,目的是为了降低成本。这种古老的应用,在低功耗产品中比较多见。 如:水表&#xff0c;燃气表等需要电池供电的产品。 下面纯属个人理解&#xff0c;未经测试。 1/3Duty表示LCD共有3个COM引脚,分别占显示周期的1/3 1/2BIAS表示电压0和VCC 1、…

2024年记一次Mingw64-13.2.0编译Qt6.6.3,包含文档编译。

My C Development. 前言&#xff1a;不包含qtwebengine。 一、准备文件 &#xff08;1&#xff09;mingw64-13.2.0 下载链接&#xff1a;&#xff0c;ucrt64_13.2_ucrt_posix_rev6_msys2.7z【蓝奏云】。 &#xff08;2&#xff09;qt6.6.3源码 下载链接&#xff1a;Downlo…

纯血鸿蒙APP实战开发——一镜到底“页面转场”动画

介绍 本方案做的是页面点击卡片跳转到详情预览的转场动画效果 效果图预览 使用说明 点击首页卡片跳转到详情页&#xff0c;再点击进入路由页面按钮&#xff0c;进入新的路由页面 实现思路 首页使用了一种视觉上看起来像是组件的转场动画&#xff0c;这种转场动画通常是通过…

opencv绘制灰度直方图-------c++

灰度直方图 cv::Mat opencvTool::calculateHistogram(const cv::Mat& image) {// 如果输入图像尚未处于灰度级&#xff0c;请将其转换为灰度级cv::Mat grayscale_image;if (image.channels() > 1){cv::cvtColor(image, grayscale_image, cv::COLOR_BGR2GRAY);}else{gra…

求一个B站屏蔽竖屏视频的脚本

求一个B站屏蔽竖屏视频的脚本 现在B站竖屏竖屏越来越多了&#xff0c;手机还好点给我一个按钮&#xff0c;选择不喜欢&#xff0c;但是我一般都用网页版看视屏&#xff0c;网页版不给我选择不喜欢的按钮&#xff0c;目测大概1/4到1/3的视频都是竖屏视频。 目前网页版唯一的进…

使用AudioCraft(MusicGen)生成音乐

AudioCraft 是一个 PyTorch 库,用于音频生成的深度学习研究。AudioCraft 包含 AudioGen 和 MusicGen 两个最先进的人工智能生成模型的推理和训练代码,用于生成高质量的音频。 MusicGen 是一种简单可控的音乐生成模型,它使用Meta 20K 小时的授权音乐来进行训练,能够生成与文…

SM4在线解密工具(支持GCM模式)

SM4在线解密工具(支持GCM模式)

spring boot参数验证注解@NotNull、@NotBlank和@NotEmpty区别

目录 前言说明举例 前言 使用spring boot参数验证是常常会使用NotNull、NotBlank和NotEmpty三个判断是否不为空的注解&#xff0c;中文都有不能为空的意思&#xff0c;大部分使用者都傻傻分清它们之间到底有什么区别。今天就让咱们来一起探索它们之间的不同吧。 说明 注解名…

rngd: Error writing /dev/tpm0

检查数据库时发现messages中一直有rngd报错&#xff0c;rngd一直未配置&#xff0c;直接关闭了 /var/log/messages-20240414:Apr 11 04:59:49 hydb2 rngd: Error writing /dev/tpm0 /var/log/messages-20240414:Apr 12 07:31:39 hydb2 rngd: Error writing /dev/tpm0 /var/log…

深度学习之前馈神经网络

1.导入常用工具包 #在终端中输入以下命令就可以安装工具包 pip install numpy pip install pandas Pip install matplotlib注&#xff1a; numpy是科学计算基础包 pandas能方便处理结构化数据和函数 matplotlib主要用于绘制图表。 #导包的代码&#xff1a; import numpy as n…

怎样的跨网软件,可以实现网间数据的安全收发?

网络隔离已是较为常见的网络安全保护措施&#xff0c;比如防火墙、网闸、VLAN&#xff0c;云桌面虚拟环境等方面进行隔离。像一些科技研发型企业&#xff0c;不仅仅是内外网隔离&#xff0c;甚至还划分办公网、研发网、测试网、生产网等&#xff0c;防止研发资料、设计资料等敏…

【机器学习300问】85、Adam梯度下降优化算法的原理是什么?

Adam优化算法取了两个算法名称的首字母——Adaptive Moment Estimation的缩写&#xff0c;结合了Momentum算法和RMSprop算法的优点。在Momentum中&#xff0c;会计算前一时刻的梯度&#xff0c;并将其用于当前时刻的梯度更新&#xff1b;而RMSprop会对梯度的大小进行自适应调整…

二叉树的遍历(前序 中序 后序)

一、前序遍历 顺序为&#xff1a; 根-->左子树---->右子树 先访问根节点&#xff0c;再递归进入根节点的左子树&#xff08;通过递归不断往下遍历&#xff09;&#xff0c;直到访问的节点没有左子树&#xff0c;此时递归进入其右子树&#xff08;通过递归进行相同操作&a…

vue布局设置——使用 el-drawer 打造个性化 Admin 后台布局设置

在前端开发中&#xff0c;我们常常需要为 admin 后台构建灵活且个性化的布局设置。今天&#xff0c;我要分享的是如何利用 el-drawer 来实现这样一个有趣的功能。 首先&#xff0c;我们来看一下主要的设置参数&#xff1a; 1. theme: 用于定义主题&#xff0c;可以根据需求切换…