计算机系统结构 期末复习

教材:《计算机系统结构教程(第3版)》张晨曦等著

计算机系统结构

计算机系统结构的基础知识

基本概念

计算机技术的飞速发展得益于

  1. 计算机制造技术的发展(集成电路)
  2. 计算机系统结构的创新:20c80s RISC(指令级并行)& 2004年 多处理器(线程级并行、数据级并行)

计算机系统的层次结构

层次语言备注
微程序机器微指令系统物理机 解释
传统机器语言机器传统的机器指令系统仿真emulation 物理机 解释
操作系统机器传统机器级指令&操作系统级指令虚拟机 解释
汇编语言机器汇编语言虚拟机 翻译
高级语言机器C等虚拟机 翻译
应用语言机器面向具体应用问题的语言 虚拟机 翻译

语言的实现:翻译 translation /解释 interpretation,解释花时间多,但占空间少。
固件 firmware :具有软件功能的硬件。

计算机系统结构的定义

经典定义:指传统机器程序员所看到的计算机属性,即概念性结构与功能特性。
透明性 transparency
广义定义:指令系统结构、组成、硬件。
计算机组成 organization:逻辑实现,包括物理机器级的数据流和控制流的组成以及逻辑设计。
计算机实现 implementation:计算机组成的物理实现。
也就是说,确定有什么底层功能,属于计算机系统结构,而逻辑上如何实现,属于计算机组成,硬件上如何实现属于计算机实现。
系列机:同一厂家生产的系统结构相同但组成和实现不同的一系列不同型号的计算机。

计算机系统结构分类法(重点)

Flynn分类法

S:single M:multiplicity I: instruction stream D:data

  • SISD 顺序处理计算机
  • SIMD 阵列处理机
  • MISD 没有这种机器
  • MIMD 多处理机
冯氏分类法

最大并行度 P m P_m Pm为计算机在单位时间内能够处理的最大二进制位数。字宽n x 位片宽度m

  • 字串位串
  • 字串位并 单处理机
  • 字并位串
  • 字并位并

平均并行度 P a = ∑ i = 1 T P i T P_a=\frac{\sum_{i=1}^TP_i}{T} Pa=Ti=1TPi
平均利用率 μ = P a P m \mu =\frac{P_a}{P_m} μ=PmPa

Handler分类法

程序控制部件PCU的个数k
算术逻辑部件ALU或处理部件PE的个数d
基本逻辑线路ELC的套数w
t=(k,d,w)

计算机系统的设计

定量原理(重点)

1.以经常性时间为重点
2.Amdahl定律 (考)
加速比 = 改进前的执行时间 改进后的执行时间 加速比=\frac{改进前的执行时间}{改进后的执行时间} 加速比=改进后的执行时间改进前的执行时间
改进后的执行时间 T n = T 0 ( 1 − F e + F e S e ) T_n=T_0(1-Fe+\frac{Fe}{Se}) Tn=T0(1Fe+SeFe)
3.CPU性能公式
CPU时间=时钟周期数x时钟周期时间=指令条数xCPIx时钟周期时间
时钟周期数也可不用平均计算,而是加权和。
4.程序的局部性原理 principle of locality
时间局部性、空间局部性

计算机系统的性能评测

1.执行时间和吞吐率
吞吐率:单位时间内完成任务数
执行时间=IO时间+CPU时间(用户CPU时间、系统CPU时间)
2.基准测试程序
benchmark suites 基准测试程序套件
3.性能比较
总执行时间、算术平均值、调和平均值、几何平均值

计算机系统结构的发展

冯诺依曼结构:

  • 以运算器为中心
  • 指令和数据同等对待
  • 存储器按地址访问、按顺序线性编址
  • 指令执行顺序是顺序,分支由转移指令实现,PC指明当前执行指令在存储器中的地址
  • 指令由操作码+地址码组成
  • 二进制

改进:

  • 输入输出方式的改进
    程序等待
    程序中断
    DMA direct memory access 直接存储器访问方式:增设DMA控制器
    I/O处理机:通道、外围处理机
  • 并行
    不同级别的并行:微操作级、指令级、线程级、进程级、任务级
    实例:向量计算机、阵列处理机、多处理机、大规模并行处理机
  • 存储器组织结构
    按内容访问的相联存储器CAM
    Cache
  • 指令系统
    复杂指令集CISC
    精简指令级RISC

软件兼容、可移植性的实现:
1.统一高级语言,如java
2.采用系列机
向上、下、前、后兼容
兼容机:不同公司产的,但是系统结构一样的计算机。
3.模拟和仿真
模拟:用机器语言解释执行
仿真:用微程序解释执行,更快,更局限

器件发展
应用发展

并行性

并行性

包含同时性+并发性
等级1:字串位串、字串位并、字并位串、全并行
等级2:指令内部并行、指令级并行(流水线技术、超标量)、线程级、任务级、作业级
在多处理机系统中,其并行性是通过硬件实现的,而非软件(操作系统的进程管理、作业管理等)。

技术途径

1.时间重叠:流水线技术
2.资源重复
3.资源共享

多处理机

耦合度:紧密耦合(直接耦合)、松散耦合(简介耦合)

发展历史

萌芽->向量机的发展和鼎盛阶段->MPP->各种体系结构并存->机群

指令系统

指令系统结构的分类

根据存储单元,分为:

  • 堆栈型:只能访问栈顶、次栈顶
  • 累加器型:有一个累加器,另外从存储器取数
  • 通用寄存器型:快,多用
    • 寄存器-存储器型RM
    • 寄存器-寄存器型RR load-store结构
    • 存储器-存储器型MM(已淘汰)

ALU指令中的操作数个数:0~3
三种分型各有优缺点

寻址方式 addressing mode

寄存器寻址、立即数寻址、偏移寻址、寄存器间接寻址、索引寻址、直接寻址或绝对寻址、存储器间接寻址、自增寻址、自减寻址、缩放寻址、PC相对寻址
表示寻址方式的方法:

  • 隐含在指令的操作码中
  • 在指令字中设置专门的寻址字段

按整数边界存储信息

指令系统的设计和优化

基本原则

完整性、规整性(对称性、均匀性)、正交性、高效率、兼容性

控制指令

无条件:跳转 jump
有条件:分支 branch
过程调用call
过程返回return PC相对寻址

三种表示分支的方法:

  • 条件码CC
  • 条件寄存器
  • 比较与分支

指令操作码的优化(重点)

指令的优化就是确定指令字的编码方式,包括操作码和地址码。
1.哈夫曼编码
优化程度用信息熵衡量,这是理论最短平均编码长度。
但哈夫曼编码是变长的,采用【扩展操作码】改进。
2.等长扩展码
15/15/15法和8/64/512法等
只要遵守短码不能是长码的前缀即可。
3.定长操作码
RISC

指令字格式的优化

可变长度编码格式
固定长度编码格式 RISC
混合型

指令系统的发展和改进

CISC方向

RISC方向

指令格式简单统一,在单周期完成

操作数的类型和大小

数据表示:基本数据类型,硬件实现
数据结构:软件实现的结构

操作数类型的表示方法:

  • 由指令中的操作码指定
  • 给数据加上标识,让数据本身给出操作数类型

MIPS指令系统结构(自学)

实验一:MIPS指令系统和MIPS体系结构
32个64位通用寄存器,32个64位浮点数寄存器。
只有立即数和偏移量寻址两种方式。

流水线技术 pipelining

基本概念

每个流水线的子过程称为流水线的级或段stage。段与段相互连接形成流水线,段数称为流水线的深度depth。

  • 用时空图描述工作过程。
  • 每个段后面有一个缓冲寄存器(流水寄存器)
  • 通过时间:第一个任务进入流水线到流出的时间
  • 排空时间:最后一个任务进入流水线到流出的时间

设计问题:

  • 时间最长的段会成为流水线的瓶颈。
  • 额外开销=流水寄存器延迟+时钟偏移开销,限制了流水线段数的增加。
  • 存在冲突问题。

分类

计算机系统等级不同划分:

  • 部件级流水线=运算操作流水线
  • 处理机级流水线=指令流水线
  • 系统级流水线=宏流水线

功能划分:

  • 单功能流水线
  • 多功能流水线

同一时间内多功能流水线中的各段是否只能按一种功能连接方式工作:

  • 静态流水线
  • 动态流水线(控制复杂)

是否存在反馈回路:

  • 线性流水线
  • 非线性流水线 有调度问题

任务流入流出顺序是否相同:

  • 顺序流水线
  • 乱序(无序)流水线-异步流水线

采用了流水线技术的处理机称为:流水线处理机
如果具有向量数据表示和指令,则称:向量(流水处理)机
否则称:标量流水处理机

性能指标(重点)

吞吐率

T P = n T k TP=\frac{n}{T_k} TP=Tkn,n是任务数, T k T_k Tk是处理n个任务所用的时间
1.各段时间相等的流水线
T P = n ( k + n − 1 ) Δ t TP=\frac{n}{(k+n-1)\Delta t} TP=(k+n1)Δtn
T P m a x = 1 Δ t TP_{max}=\frac{1}{\Delta t} TPmax=Δt1 很难达到,需要极限
2.各段时间不相等的流水线
任务必须按最大时间间隔进入流水线
T P = n ( n − 1 ) m a x ( Δ t 1 , Δ t 2 , . . . , Δ t k ) + ∑ i = 1 k Δ t i TP=\frac{n}{(n-1)max(\Delta t_1,\Delta t_2,...,\Delta t_k)+\sum_{i=1}^k\Delta t_i} TP=(n1)max(Δt1,Δt2,...,Δtk)+i=1kΔtin
T P m a x = n m a x ( Δ t 1 , Δ t 2 , . . . , Δ t k ) TP_{max}=\frac{n}{max(\Delta t_1,\Delta t_2,...,\Delta t_k)} TPmax=max(Δt1,Δt2,...,Δtk)n
消除瓶颈段方式:

  • 细分瓶颈段
  • 重复设置瓶颈段

加速比 speedup

S = 顺序执行时间 流水处理时间 S=\frac{顺序执行时间}{流水处理时间} S=流水处理时间顺序执行时间
各段时间相等的流水线 S = n k k + n − 1 S=\frac{nk}{k+n-1} S=k+n1nk,n>>k时,S=k

效率efficiency

利用率 = 设备实际使用时间 整个运行时间 利用率=\frac{设备实际使用时间}{整个运行时间} 利用率=整个运行时间设备实际使用时间
e = n k + n − 1 = E e=\frac{n}{k+n-1}=E e=k+n1n=E ,最高效率=1
E = T P ∗ Δ t = S k E=TP*\Delta t=\frac{S}{k} E=TPΔt=kS,即实际加速比/最大加速比
E = n 个任务实际占用的时空图的面积 k 个段总的时空图的面积 E=\frac{n个任务实际占用的时空图的面积}{k个段总的时空图的面积} E=k个段总的时空图的面积n个任务实际占用的时空图的面积

非线性流水线的调度(必考)

单功能非线性流水线的最优调度
启动距离,预约表->禁止表->冲突向量->状态转换图->最优调度方案

多功能非线性流水线的最优调度(了解)
n个功能,则有n个初始冲突矩阵,冲突向量有 n 2 n^2 n2个,状态图也更复杂

流水线的相关与冲突

经典的五段RISC流水线

取指周期IF
指令译码/读寄存器周期ID
执行/有效地址计算周期EX
存储器访问/分支完成周期MEM
写回周期WB

另一种时空图

相关 dependence

两指令存在依赖关系

  • 数据相关 RAW
  • 名相关:换名技术
    • 反相关 WAR
    • 输出相关 WAW
  • 控制相关:分支指令引起

冲突hazard

  • 结构冲突 硬件资源不足

    • 采取分别的指令存储器和数据存储器
    • 采用两个分离的cache
  • 数据冲突

    • 写后读冲突 数据相关 RAW
      • 定向技术
    • 写后写冲突 输出相关 WAW
    • 读后写冲突 反相关WAR

    解决:

    • 停顿 流水线互锁机制
    • 指令调度/流水线调度
  • 控制冲突
    冻结/排空流水线,出现分支延迟
    解决方法:

流水线的实现(MIPS)

实验二:流水线和流水线中的冲突

向量处理机

向量的处理方式

1.横向处理方式
逐个计算分量,会发生数据相关
2. 纵向处理方式
适用于向量处理机
3.纵横处理方式=分组处理方式
在组内纵向,组间横向。每组发生一次数据相关。

向量处理机的结构

1.MM型结构
适合纵向处理
2.RR结构
cray-1
6个功能部件以及他们的拍数:
整数加 3
浮点加 3
浮点乘 7
浮点迭代求倒数 14
逻辑运算 2
移位 4

提高向量处理机性能的常用技术

设置多个功能部件

链接技术(重点)

1.指令不相关 可以并行执行
2.功能部件冲突
3.源寄存器冲突
4.结果寄存器冲突

当前一条的结果寄存器是后一条的源寄存器的时候,可以采用链接技术pipeline chaining提高性能。写后读。实际上是流水线的定向技术在向量处理机当中的应用。要求:
(1)向量指令之间要求无Vi冲突和无功能部件使用冲突。
(2)只有在前一条指令的第一个结果元素送入结果向量寄存器的那一个时钟周期才可以进行链接。如果错过这个时刻,就无法进行链接了。
(3)当一条向量指令的两个源操作数分别来自前面紧邻的两条指令的结果时,要求这两条指令产生运算结果的时间必须相等,即要求有关功能部件的通过时间相等。
(4)链接执行的向量指令的向量长度必须相等,否则无法进行链接。

循环/分段开采技术

MapReduce是一个分布式、并行处理的计算框架

多处理机系统

性能评价

1.向量指令的处理时间 T v p T_{vp} Tvp
一条:
向量长度=n
T v p = T s + T e + ( n − 1 ) T c T_{vp}=T_s+T_e+(n-1)T_c Tvp=Ts+Te+(n1)Tc=流水线建立时间+通过时间+时钟周期时间 = ( T s t a r t + n ) T c =(T_{start}+n)T_c =(Tstart+n)Tc
启动时间 T s t a r t = e − 1 T_{start}=e-1 Tstart=e1

一组:
编队:同一个时钟周期内一起开始执行的几条向量指令,不存在冲突和数据相关
总执行时间=各编队执行时间之和:
T a l l = ∑ i = 1 m T v p ( i ) T_{all}=\sum_{i=1}^mT_{vp}^{(i)} Tall=i=1mTvp(i)
各编队执行时间是编队内部指令执行时间的最大值
T a l l = T s t a r t + m n T_{all}=T_{start}+mn Tall=Tstart+mn

分段开采时:
T a l l = ⌈ n M V L ⌉ × ( T s t a r t + T l o o p ) + m n T_{all}=\left \lceil \frac{n}{MVL} \right \rceil \times (T_{start}+T_{loop})+mn Tall=MVLn×(Tstart+Tloop)+mn
2.最大性能/峰值性能
R ∞ = lim ⁡ n → ∞ 向量指令序列中浮点运算次数 × 时钟频率 向量指令序列执行所需的时钟周期数 R_\infty =\lim_{n \to \infty}\frac{向量指令序列中浮点运算次数\times 时钟频率}{向量指令序列执行所需的时钟周期数} R=limn向量指令序列执行所需的时钟周期数向量指令序列中浮点运算次数×时钟频率
3.半性能向量长度 n 1 / 2 n_{1/2} n1/2
处理机的性能为最大性能的一半时所需的向量长度
4.向量长度临界值 n v n_v nv
向量流水方式的处理速度优于标量串行方式的处理速度时所需的向量长度最小值

指令级并行——硬件

instruction-level parallel,ILP
开发方法:
1.资源重复
2.流水线技术

1.基于硬件的动态开发方法
2.基于软件的静态开发方法

IPC=instruction per cycle
跨越基本程序块basic block开发ILP

指令的动态调度

dynamic scheduling,依靠硬件在运行时调度,而非依靠编译器在编译时静态调度。可以加快速度,简化编译器,但是相应硬件也会复杂。
不精确异常

记分牌算法

(1)指令状态表:记录正在执行的各条指令已经进入到了哪一段。
(2)功能部件状态表:记录各个功能部件的状态。每个功能部件有一项,每一项由9个字段组成。
(3)结果寄存器状态表Result:每个寄存器在该表中有一项,用于指出哪个功能部件(编号)将把结果写入该寄存器

Tomasulo算法

1.检测指令相关,操作数一旦就绪就立即执行
2.寄存器换名
优点:
1.冲突检测逻辑是分布的
2.消除了WAW冲突和WAR冲突导致的停顿

动态分支预测技术

目的:预测分支是否成功、尽快找到分支目标地址

分支历史表BHT branch history table

大多采用两位二进制预测
连续两次预测错误,才会改变预测
预测->处理->成功则继续,错误则恢复现场,同时更新状态
没有对分支目标地址提供支持

分支目标缓冲器BTB branch target buffer

=分支目标cache

基于硬件的前瞻执行

一直预测,写入再定序缓冲器ReOrder Buffer,rob,确认后写入寄存器或存储器,在tomasulo算法上实现:拆开写结果和指令确认两个步骤。
允许指令乱序执行,单必须顺序确认。
ROB中包含:指令类型、目的地址、数据值、就绪字段
能实现精确异常

多指令流出技术 multiple issue

超标量处理机 superscalar:不定,n-流出 可静态可动态 设置多份部件 硬件实现
优点:

  • 超标量结构对程序员透明
  • 没有优化过的代码也可以运行,如想优化,需使用动态超标量调度技术

超长指令字 very long instruction word,VLIW:条数固定,静态调度 编译器完成

基于静态调度的多流出技术

流出包(指令)
指令流出段是限制超标量处理机时钟频率提高的一个因素

基于动态调度的多流出技术

将整数所用的表结构和浮点所用的表结构分离开

超长指令字技术VLIW

把指令组装成很长的指令,编译器完成

限制

  • 程序固有的指令并行性
  • 硬件上的困难
  • 固有的技术限制

超流水线处理机

一个周期内分时流出多条指令的处理机 superpipelining
时间并行性

指令级并行——软件

基本指令调度和循环展开 loop unrolling

改变指令的流出顺序
开发循环级并行loop level parallelism:循环展开、寄存器重命名、指令调度
需要注意:操作数偏移量的修改、删除多余的测试和分支指令、对相关性进行分析、小心新出现的相关性

跨越基本块的静态指令调度

全局指令调度
关键路径 critical path
踪迹调度 超块调度

踪迹调度trace scheduling

1踪迹选择selection,为生成踪迹,可以使用循环展开
2踪迹压缩 trace compaction

超块调度

超块:只有一个入口,多个出口
尾复制

静态多指令流出VLIW技术

编码效率低,还有互锁机制,目标代码兼容性差
优点:挖掘指令级并行、对存储系统要求低

显式并行指令计算EPIC

超标量硬件太复杂,VLIW有代码兼容问题。
显式并行指令计算EPIC explicitly parallel instruction computing 融合二者优点,具有有效的软硬件通信机制

非绑定分支

谓词执行predicated execution

条件执行

前瞻执行

开发更多的指令级并行

1.循环携带相关
循环的不同迭代之间的相关
2.存储别名分析
gcd测试方法
3.数据相关分析
变量重命名、值传播优化、高度削减

软流水

消除循环携带相关

存储系统

存储系统的层次结构

局部性原理
多级层次结构
四个性能参数
三级:cache-主存-辅存

cache基本知识

映像规则

  • 全相联映像fully associative
  • 直接映像 direct mapping
  • 组相联映像 set associative
    映像到唯一的组上,组内可以放入任意一个位置
    组内有n个块,称n-路组相联
    n越大,cache空间利用率越高,块冲突概率越低,不命中率越低

查找方法

替换算法

  • 随机法
  • 先进先出
  • 最近最少使用lru
    • 堆栈法
    • 比较对法

写策略

1.写直达法
2.写回法 速度快

写不命中时,是否调入相应的块
1.按写分配法=写时取法
2.不按写分配法=绕写法

cache性能分析

平均访存时间=命中时间+不命中率x不命中开销
cpu时间=(cpu执行周期数+存储器停顿周期数)x 时钟周期时间
=(cpu执行周期数+访存次数x不命中率x不命中开销)x 时钟周期时间
=IC x(CPI+每条指令的平均访存次数x不命中率x不命中开销)x时钟周期时间

为了改进cache性能,可以
1.降低不命中率 8
2.减少不命中开销 5
3.减少命中时间 4

降低cache的不命中率

不命中分类

1.强制性不命中=冷启动不命中
2.容量不命中 增大cache容量
3.冲突不命中=碰撞不命中 增大相联度

增加cache块大小

不命中率先下降后上升

增加cache的容量

提高相联度

会增加命中时间

伪相联cache=列相联cache

如果不命中,看能否伪命中

硬件预取

预取下一指令块到缓冲器中

编译器控制的预取

存放位置:

  • 寄存器预取
  • cache预取

处理方式:

  • 故障性预取
  • 非故障性预取

编译优化

1.程序代码和数据重组
2.内外循环交换
3.分块

牺牲cache

存放被替换出去的块

减少cache的不命中开销

采用两级cache

1.局部不命中率
2.全局不命中率

让读不命中优先于写

发生读不命中的时候,先检查一下写回的缓冲器里有无

写缓冲合并

请求字处理技术

cpu要啥,到了马上就发给它,剩下的慢慢放入cache

非阻塞cache技术

减少命中时间

容量小、结构简单的cache

虚拟cache

虚拟索引-物理标识方法

cache访问流水化

踪迹cache

并行主存系统

一个访存周期内并行访问多个存储字
Bm=W/Tm

单体多字存储器

每个周期读出m个cpu字,带宽是m倍

多体交叉存储器

1.高位交叉编址=列优先
2.低位交叉编址=行优先
大幅提高主存储器带宽

避免存储的体冲突

虚拟存储器

段页式

快速地址转换技术

TLB

输入输出系统

IO系统

IO系统的性能

连接特性、IO系统容量、响应时间、吞吐率

可靠性、可用性、可信性

平均无故障时间MTTF
平均修复时间MTTR
平均失效间隔时间MTBF
可用性=MTTF/(MTTF+MTTR)=MTTF/MTBF

RAID 廉价磁盘冗余阵列(重点)

RAID0:无冗余
RAID1:镜像磁盘
RAID2:hamming码纠错 log2m
RAID3:交叉奇偶校验
RAID4:块交叉奇偶校验
RAID5:块交叉分布奇偶校验
RAID6:P+Q双校验
RAID10,01:

总线

成本低,便宜
仲裁机制
分离事务总线:包交换
同步、异步总线

CPU堆IO设备编址方式:
1.存储器映射IO
2.IO设备独立编址

CPU与外部设备IO的方式:
1.程序查询
2.中断
3.DMA
4.通道

通道处理机

1.字节多路通道
T=(Ts+Td)pn
2.选择通道:磁盘处理器
T=pTs+pnTd
3.数组多路通道:结合
T=pnTs/k+pnTd

IO与操作系统

互连网络

互连函数

置换函数
1.恒等函数
f(xn-1xn-2…x1x0)=xn-1xn-2…x1x0
2.交换函数
第K位互反 有log2N种 N为结点个数
3.均匀洗牌函数shuffle
第k个子函数:低k位循环左移1位
第k个超函数:高k位循环左移1位
逆函数是右移
4.蝶式函数
第k个子函数:低k位的最高位与最低位交换
5.反位序函数
整个颠倒
6.移数函数
α ( x ) = ( x + − k ) m o d   N \alpha (x)=(x+-k)mod \ N α(x)=(x+k)mod N
7.PM2i函数
加减2的i次方

结构参数与性能指标

1.网络规模N 结点个数
2.结点度n 边数
3.结点距离 最小值
4.网络直径D 任意结点的最大值
5.等分宽度 切成两半的切边最小值
6.对称性

性能指标
1.通信时延latency
2.网络时延
3.端口带宽
4.聚集带宽
5.等分宽度

静态互连网络

1.线性阵列
2.环和带弦环
3.循环移数网络
4.树状、星状
5.胖树状
6.网格状、环网状
7.超立方体
8.带环立方体
9.k元n-立方体网络

动态互连网络

1.总线网络
2.交叉开关网络
3.多级互联网络
STARAN网络,间接二进制n立方体网络
Omega网络

消息传递机制

消息的格式
1.信息寻径方案
1)线路交换
2)包交换:存储转发
3)包交换:虚拟直通
4)包交换:虫蚀

死锁与虚拟通道

流控制策略

包冲突的解决
确定性寻径和自适应寻径

选播和广播寻径法

多处理机

计算机机群系统cluster

对称式共享存储器的系统结构SM[

分布式共享存储器的系统结构

同步

同时多线程

大规模并行处理机

多核处理器及性能对比

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值