diff --git a/404.html b/404.html index fa9f44e..cfa7f74 100644 --- a/404.html +++ b/404.html @@ -471,7 +471,7 @@ div.csl-indent {
处理器可访问的地址空间包括寄存器空间和系统内存空间。寄存器空间包括通用寄存器、专用寄存器和控制寄存器。寄存器空间通过编码于指令中的寄存器号寻址,系统内存空间通过访存指令中的访存地址寻址。
通用寄存器是处理器中最常用的存储单元,一个处理器周期可以同时读取多条指令需要的多个寄存器值。现代指令系统都定义了一定数量的通用寄存器供编译器进行充分的指令调度。针对浮点运算,通常还定义了浮点通用寄存器。表2.1给出了部分常见指令集中整数通用寄存器的数量。
-指令集 | 整数通用寄存器数 |
Itanium | 128 |
VAX | 16 |
ARMv8 | 31 |
PowerPC | 32 |
Alpha | 32(包括“zero”) |
SPARC | 32(包括“zero”) |
MIPS | 在mips16模式下为8,在32/64位模式下为32(包括“zero”) |
ARMv7 | 在16位Thumb 模式下为7,在32位模式下为14 |
X86 | 16/32位时为8, 64位时为16 |
LoongArch | 32(包括“zero”) |
指令集
整数通用寄存器数
Itanium
128
VAX
16
ARMv8
31
PowerPC
32
Alpha
32(包括“zero”)
SPARC
32(包括“zero”)
MIPS
在mips16模式下为8,在32/64位模式下为32(包括“zero”)
ARMv7
在16位Thumb 模式下为7,在32位模式下为14
X86
16/32位时为8, 64位时为16
LoongArch
32(包括“zero”)
除表2.4之外还可以列出很多其他寻址方式,但常用的寻址方式并不多。John L.Hennessy在其经典名著《计算机系统结构:量化研究方法(第二版)》中给出了如表2.5所示的数据,他在VAX计算机(VAX机的寻址方式比较丰富)上对SPEC CPU 1989中tex、spice和gcc这三个应用的寻址方式进行了统计。
-寻址方式 | tex | spice | gcc |
偏移量寻址 | 32% | 55% | 40% |
立即数寻址 | 43% | 17% | 39% |
寄存器间接寻址 | 24% | 3% | 11% |
自增量寻址 | 0% | 16% | 6% |
存储器间接寻址 | 1% | 6% | 1% |
寻址方式
tex
spice
gcc
偏移量寻址
32%
55%
40%
立即数寻址
43%
17%
39%
寄存器间接寻址
24%
3%
11%
自增量寻址
0%
16%
6%
存储器间接寻址
1%
6%
1%
2)ALU指令。ALU指令都是寄存器型的,常见的ALU指令包括加、减、乘、除、与、或、异或、移位和比较等。表2.8为LoongArch指令集的ALU指令实例。其中带有“.W”后缀的指令操作的数据位宽为32位(字),带有“.D”后缀的指令操作的数据位宽为64位(双字)。
-指令 | 指令功能 |
ADD.W | 字加 |
ADDI.W | 字加立即数 |
SUB.W | 字减 |
ADD.D | 双字加 |
ADDI.D | 双字加立即数 |
SUB.D | 双字减 |
SLT | 有符号数比较小于置1 |
SLTI | 有符号数立即数比较小于置1 |
SLTU | 无符号数比较小于置1 |
SLTUI | 无符号数立即数比较小于置1 |
AND | 与 |
OR | 或 |
XOR | 异或 |
NOR | 或非 |
ANDI | 与立即数 |
ORI | 或立即数 |
XORI | 异或立即数 |
LU12I.W | 加载20位立即数到高位 |
SLL.W | 字逻辑左移变量位 |
SRL.W | 字逻辑右移变量位 |
SRA.W | 字算术右移变量位 |
SLLI.W | 字逻辑左移常量位 |
SRLI.W | 字逻辑右移常量位 |
SRAI.W | 字算术右移常量位 |
SLL.D | 双字逻辑左移变量位 |
SRL.D | 双字逻辑右移变量位 |
SRA.D | 双字算术右移变量位 |
SLLI.D | 双字逻辑左移常量位 |
SRLI.D | 双字逻辑右移常量位 |
SRAI.D | 双字算术右移常量位 |
MUL.W | 字乘取低半部分 |
MULH.W | 有符号字乘取高半部分 |
MULH.WU | 无符号字乘取高半部分 |
MUL.D | 双字乘取低半部分 |
MULH.D | 有符号双字乘取高半部分 |
MULH.DU | 无符号双字乘取高半部分 |
DIV.W | 有符号字除取商 |
DIV.WU | 无符号字除取商 |
MOD.W | 有符号字除取余 |
MOD.WU | 无符号字除取余 |
DIV.D | 有符号双字除取商 |
DIV.DU | 无符号双字除取商 |
MOD.D | 有符号双字除取余 |
MOD.DU | 无符号双字除取余 |
指令
指令功能
ADD.W
字加
ADDI.W
字加立即数
SUB.W
字减
ADD.D
双字加
ADDI.D
双字加立即数
SUB.D
双字减
SLT
有符号数比较小于置1
SLTI
有符号数立即数比较小于置1
SLTU
无符号数比较小于置1
SLTUI
无符号数立即数比较小于置1
AND
与
OR
或
XOR
异或
NOR
或非
ANDI
与立即数
ORI
或立即数
XORI
异或立即数
LU12I.W
加载20位立即数到高位
SLL.W
字逻辑左移变量位
SRL.W
字逻辑右移变量位
SRA.W
字算术右移变量位
SLLI.W
字逻辑左移常量位
SRLI.W
字逻辑右移常量位
SRAI.W
字算术右移常量位
SLL.D
双字逻辑左移变量位
SRL.D
双字逻辑右移变量位
SRA.D
双字算术右移变量位
SLLI.D
双字逻辑左移常量位
SRLI.D
双字逻辑右移常量位
SRAI.D
双字算术右移常量位
MUL.W
字乘取低半部分
MULH.W
有符号字乘取高半部分
MULH.WU
无符号字乘取高半部分
MUL.D
双字乘取低半部分
MULH.D
有符号双字乘取高半部分
MULH.DU
无符号双字乘取高半部分
DIV.W
有符号字除取商
DIV.WU
无符号字除取商
MOD.W
有符号字除取余
MOD.WU
无符号字除取余
DIV.D
有符号双字除取商
DIV.DU
无符号双字除取商
MOD.D
有符号双字除取余
MOD.DU
无符号双字除取余
3)控制流指令。控制流指令分为绝对转移指令和相对转移指令。相对转移的目标地址是当前的PC值加上指令中的偏移量立即数;绝对转移的目标地址由寄存器或指令中的立即数给出。表2.9为LoongArch指令集中控制流指令的实例。
-指令 | 指令功能 |
JIRL | 相对寄存器偏移跳转并链接 |
B | 无条件相对转移 |
BL | 无条件相对转移并链接 |
BEQ | 等于时相对转移 |
BNE | 不等时相对转移 |
BLT | 有符号比较小于时相对转移 |
BGE | 有符号比较大于等于时相对转移 |
BLTU | 无符号比较小于时相对转移 |
BGEU | 无符号比较大于等于时相对转移 |
BEQZ | 等于0相对转移 |
BNEZ | 不等于0时相对转移 |
指令
指令功能
JIRL
相对寄存器偏移跳转并链接
B
无条件相对转移
BL
无条件相对转移并链接
BEQ
等于时相对转移
BNE
不等时相对转移
BLT
有符号比较小于时相对转移
BGE
有符号比较大于等于时相对转移
BLTU
无符号比较小于时相对转移
BGEU
无符号比较大于等于时相对转移
BEQZ
等于0相对转移
BNEZ
不等于0时相对转移
C代码 | LoongArch汇编 |
int st(int a, int b, int c) | st: |
C代码
LoongArch汇编
int st(int a, int b, int c)
{
switch (a) {
case 15:
c = b & 0xf;
case 10:
return c + 50;
case 12:
case 17:
return b + 50;
case 14:
return b;
default:
return a;
}
}
st:
addi.w $t0,$r0,14
beq $a0,$t0,.L7 //(a==14)?
blt $t0,$a0,.L3 //(a>14)?
addi.w $t0,$r0,10
beq $a0,$t0,.L4 //(a==10)?
addi.w $t0,$r0,12
beq $a0,$t0,.L5 //(a==12)?
jr $ra //return a
.L3:
addi.w $t0,$r0,15
beq $a0,$t0,.L6 //(a==15)?
addi.w $t0,$r0,17
beq $a0,$t0,.L5 //(a==17)?
jr $ra //return a
.L6:
andi $a2,$a1,0xf //b & 0xf
.L4:
addi.w $a0,$a2,50 //c + 50
jr $ra
.L5:
addi.w $a0,$a1,50 //b + 50
jr $ra
.L7:
or $a0,$a1,$r0 //return b
jr $ra
在得到以上信息后,软件对各个设备的空间需求进行排序,并依次从Memory空间的起始地址开始分配,最终得到的设备地址空间分布如表7.4所示。
-设备号 | 名称 | BAR号 | 大小 | 起始地址 | 结束地址 |
1 | USB控制器 | 0 | 4KB | 0x48015000 | 0x48015FFF |
2 | 显示控制器 | 0 | 128MB | 0x40000000 | 0x47FFFFFF |
1 | 64KB | 0x48000000 | 0x4800FFFF | ||
3 | 网络控制器 | 0 | 4KB | 0x48014000 | 0x48014FFF |
1 | 16KB | 0x48010000 | 0x48013FFF |
设备号
名称
BAR号
大小
起始地址
结束地址
1
USB控制器
0
4KB
0x48015000
0x48015FFF
2
显示控制器
0
128MB
0x40000000
0x47FFFFFF
1
64KB
0x48000000
0x4800FFFF
3
网络控制器
0
4KB
0x48014000
0x48014FFF
1
16KB
0x48010000
0x48013FFF
STREAM基准测试程序测量计算机的可持续内存带宽。STREAM是一个简单的合成测试程序,主要是测量内存的带宽(MB/s)和简单向量核心代码的计算速率。它由John McCalpin在Delaware大学执教的时候开发,并在随后成为工业界的标准测试程序,其有Fortran和C的代码,也有单处理器和多线程的版本,多线程版本包括OpenMP和MPI的并行。如表12.4所示,STREAM测试程序由Copy 、Scale 、Add 和 Triad四部分组成,测试了4个循环,并给出不同的内存带宽峰值。STREAM的基本原则是每个数组必须不小于最后一级Cache(LLC)大小的四倍或者100万个元素(取两者中较大的那个)。通常内存带宽比单线程STREAM测出来的值要高,为了能达到内存的饱和带宽,可以采用两种方法:一种是吞吐量的方法,执行多个stream的实例;另一种是执行OpenMP的版本。基于标准的STREAM测试程序,可以衍生出其他测试内存带宽的程序,改变数组访问跳步stride=1的简单循环,采用stride=N的操作(N=2,3,4,5,6,7,8,9,10,20,40),采用反向的(stride=-1)循环以及基于索引的操作,包括load采用索引的数组和store采用索引的数组。
-Copy | a(i)=b(i) | 2个双精度浮点的访存操作(16字节),每个迭代没有浮点操作 |
Scale | a(i)=q*b(i) | 2个双精度浮点的访存操作(16字节),每个迭代包含一个浮点乘法操作 |
Add | a(i)=b(i)+c(i) | 3个双精度浮点的访存操作(24字节),每次迭代包含一个浮点加法操作 |
Triad | a(i)=b(i)+q*c(i) | 3个双精度浮点的访存操作(24字节),每次迭代两个浮点操作 |
Copy
a(i)=b(i)
2个双精度浮点的访存操作(16字节),每个迭代没有浮点操作
Scale
a(i)=q*b(i)
2个双精度浮点的访存操作(16字节),每个迭代包含一个浮点乘法操作
Add
a(i)=b(i)+c(i)
3个双精度浮点的访存操作(24字节),每次迭代包含一个浮点加法操作
Triad
a(i)=b(i)+q*c(i)
3个双精度浮点的访存操作(24字节),每次迭代两个浮点操作
定点测试程序 | 语言 | 分类 | 描述 |
400.perlbench | C | Perl编程语言 | Perl脚本程序,包括垃圾邮件检测程序SpamAssassin、邮件索引器MHonArc和specdiff |
401.bzip2 | C | 压缩 | bzip2压缩程序,输入包括JPEG图片、源代码、HTML文件和混合文件等,使用不同的压缩级别进行压缩和解压缩 |
403.gcc | C | C编译器 | 基于gcc 3.2编译器,产生Opteron的代码 |
429.mcf | C | 组合优化 | 一个用于大型公共交通的单车场车辆调度程序,使用了商业产品中常用的网络单纯形算法 |
445.gobmk | C | 人工智能,围棋go | 下围棋游戏,读入围棋格式文件,然后执行一些命令,根据围棋规则分析当前的局势,决定更为有利的下一步走法 |
456.hmmer | C | 基因序列搜索 | 使用Profile隐马尔可夫模型(HMM),进行蛋白质基因序列分析 |
458.sjeng | C | 人工智能,棋类游戏 | 一个排名很高的棋类游戏,属于棋类树的搜索和模式识别,通过组合alpha-beta剪枝或proof-number树搜索、形式判断、启发式前向修剪来寻找最佳的棋子移动 |
462.libquantum | C | 物理,量子计算 | 模拟了一台量子计算机,执行了Shor多项式时间因式分解算法 |
464.h264ref | C | 视频压缩 | 视频压缩标准H.264/AVC的一种参考设计,基于h264avc 9.3版本,使用两个参数组对YUV格式源文件进行H.264编码 |
471.omnetpp | C++ | 离散时间模拟 | 使用OMNet++离散时间模拟器对一个大型的校园网络进行建模,包括8000台计算机和900个交换机以及各种以太网协议 |
473.astar | C++ | 路径寻找算法 | 二维地图的寻路算法库,常用于游戏中的人工智能,实现了三种不同类型的A*算法 |
483.xalancbmk | C++ | XML处理 | 将XML文档转换为HTML、纯文本或者其他XML格式的文档。是Xalan-C++的一个修改版本,Xalan-C++实现了XSL转换和XML Path语言 |
浮点测试程序 | 语言 | 分类 | 描述 |
410.bwaves | Fortran | 流体动力学 | 对三维瞬间跨音速粘性流体层流冲击波的模拟计算。该算法实现了非压缩Navier-Stokes等式的全隐式无分裂求解,采用了Bi-CGstab算法,迭代求解了非对称线性方程组 |
416.gamess | Fortran | 量子化学 | 源自量子化学计算用得最广的GAMESS(从头计算量子化学程序)。采用三种SCF自洽场方法(RHF、ROHF、MCSCF)对胞嘧啶分子、水和Cu2+离子、三唑离子进行自洽场计算 |
433.milc | C | 物理,量子色动力学(QCD) | 来自MIMD格计算(MILC)、四维SU(3)格点规范理论的模拟,用来研究QCD量子色动力学、夸克和胶子,采用了su3imp程序的串行版本 |
434.zeusmp | Fortran | 物理,计算流体动力学(CFD) | 伊利诺伊大学香槟分校开发的计算流体动力学程序,用于模拟天体物理现象。模拟了一个沿着X轴方向统一磁场中的三维冲击波 |
435.gromacs | C/ Fortran | 生物化学,分子动力学 | 计算数百到数百万粒子的牛顿运动方程。模拟了一个在水和离子溶液中的蛋白质溶菌酶结构在各种实验手段如核磁共振的X光照射下的变化 |
436.cactusADM | C/ Fortran | 物理,广义相对论 | 采用交错超越的数值分析方法,对时空曲率由内部物质决定的爱因斯坦演化方程进行求解,演化方程由10个标准的ADM 3+1分解的二阶非线性偏微分方程组成 |
437.leslie3d | Fortran | 流体动力学 | 来自三维大涡模拟和线性涡流模型,其使用麦科马克预测校正时间积分方法,用来计算湍流的计算流体力学程序。计算了一个如燃油注入燃烧室的时间分层混合流体 |
444.namd | C++ | 生物学,分子动力学 | 源自并行程序NAMD,其模拟了大规模的生物分子系统。namd.input模拟了92224个原子组成的A-I载脂蛋白,ref有38次迭代 |
447.dealII | C++ | 有限元分析 | 计算自适应有限元和误差估计。对非常系数的亥姆霍兹方程进行求解,使用了基于二元加权误差估计生成最佳网络的自适应方法 |
450.soplex | C++ | 线性规划,优化 | 使用了单纯型算法和松弛线性算法求解线性方程。测试模拟包括铁路规划和军用空运规划的物理模型 |
453.povray | C++ | 图像光线跟踪 | 光线跟踪是一种渲染技术,通过模拟真实世界的光线传输方式计算实景的影像。该计算基于柏林噪声函数,渲染一幅1280x1024的反锯齿国际象棋棋盘图像 |
454.Calculix | C/ Fortran | 结构力学 | 使用SPOOLES求解器库,进行线性和非线性三维结构力学的有限元分析。计算了一个高速旋转压气盘在离心力作用下的应力和变形情况 |
459.GemsFDTD | Fortran | 计算电磁学 | 使用了FDTD(有限差分时域)方法求解三维时域中的麦克斯韦方程,计算了一个理想导体的雷达散射界面 |
465.tonto | Fortran | 量子化学 | 面向对象的从头算量子化学包。模拟了量子晶体学领域计算,设置约束于分子的HF波函数,更好地匹配X光衍射实验数据 |
470.lbm | C | 流体动力学 | 实现了格子玻尔兹曼方法(LBM),模拟在三维空间的非压缩流体,常用于材料科学中模拟流体的行为 |
481.wrf | C/ Fortran | 天气预报 | 基于WRF模型,是下一代中等规模数值天气预报系统,用于天气预报和大气研究,模拟30公里区域和两天内的天气 |
482.sphinx3 | C | 语音识别 | 基于卡内基-梅隆大学开发的著名的语音识别软件,使用了AN4数据库,输入为原始的音频格式,输出为识别出来的话语 |
定点测试程序
语言
分类
描述
400.perlbench
C
Perl编程语言
Perl脚本程序,包括垃圾邮件检测程序SpamAssassin、邮件索引器MHonArc和specdiff
401.bzip2
C
压缩
bzip2压缩程序,输入包括JPEG图片、源代码、HTML文件和混合文件等,使用不同的压缩级别进行压缩和解压缩
403.gcc
C
C编译器
基于gcc 3.2编译器,产生Opteron的代码
429.mcf
C
组合优化
一个用于大型公共交通的单车场车辆调度程序,使用了商业产品中常用的网络单纯形算法
445.gobmk
C
人工智能,围棋go
下围棋游戏,读入围棋格式文件,然后执行一些命令,根据围棋规则分析当前的局势,决定更为有利的下一步走法
456.hmmer
C
基因序列搜索
使用Profile隐马尔可夫模型(HMM),进行蛋白质基因序列分析
458.sjeng
C
人工智能,棋类游戏
一个排名很高的棋类游戏,属于棋类树的搜索和模式识别,通过组合alpha-beta剪枝或proof-number树搜索、形式判断、启发式前向修剪来寻找最佳的棋子移动
462.libquantum
C
物理,量子计算
模拟了一台量子计算机,执行了Shor多项式时间因式分解算法
464.h264ref
C
视频压缩
视频压缩标准H.264/AVC的一种参考设计,基于h264avc 9.3版本,使用两个参数组对YUV格式源文件进行H.264编码
471.omnetpp
C++
离散时间模拟
使用OMNet++离散时间模拟器对一个大型的校园网络进行建模,包括8000台计算机和900个交换机以及各种以太网协议
473.astar
C++
路径寻找算法
二维地图的寻路算法库,常用于游戏中的人工智能,实现了三种不同类型的A*算法
483.xalancbmk
C++
XML处理
将XML文档转换为HTML、纯文本或者其他XML格式的文档。是Xalan-C++的一个修改版本,Xalan-C++实现了XSL转换和XML Path语言
浮点测试程序
语言
分类
描述
410.bwaves
Fortran
流体动力学
对三维瞬间跨音速粘性流体层流冲击波的模拟计算。该算法实现了非压缩Navier-Stokes等式的全隐式无分裂求解,采用了Bi-CGstab算法,迭代求解了非对称线性方程组
416.gamess
Fortran
量子化学
源自量子化学计算用得最广的GAMESS(从头计算量子化学程序)。采用三种SCF自洽场方法(RHF、ROHF、MCSCF)对胞嘧啶分子、水和Cu2+离子、三唑离子进行自洽场计算
433.milc
C
物理,量子色动力学(QCD)
来自MIMD格计算(MILC)、四维SU(3)格点规范理论的模拟,用来研究QCD量子色动力学、夸克和胶子,采用了su3imp程序的串行版本
434.zeusmp
Fortran
物理,计算流体动力学(CFD)
伊利诺伊大学香槟分校开发的计算流体动力学程序,用于模拟天体物理现象。模拟了一个沿着X轴方向统一磁场中的三维冲击波
435.gromacs
C/ Fortran
生物化学,分子动力学
计算数百到数百万粒子的牛顿运动方程。模拟了一个在水和离子溶液中的蛋白质溶菌酶结构在各种实验手段如核磁共振的X光照射下的变化
436.cactusADM
C/ Fortran
物理,广义相对论
采用交错超越的数值分析方法,对时空曲率由内部物质决定的爱因斯坦演化方程进行求解,演化方程由10个标准的ADM 3+1分解的二阶非线性偏微分方程组成
437.leslie3d
Fortran
流体动力学
来自三维大涡模拟和线性涡流模型,其使用麦科马克预测校正时间积分方法,用来计算湍流的计算流体力学程序。计算了一个如燃油注入燃烧室的时间分层混合流体
444.namd
C++
生物学,分子动力学
源自并行程序NAMD,其模拟了大规模的生物分子系统。namd.input模拟了92224个原子组成的A-I载脂蛋白,ref有38次迭代
447.dealII
C++
有限元分析
计算自适应有限元和误差估计。对非常系数的亥姆霍兹方程进行求解,使用了基于二元加权误差估计生成最佳网络的自适应方法
450.soplex
C++
线性规划,优化
使用了单纯型算法和松弛线性算法求解线性方程。测试模拟包括铁路规划和军用空运规划的物理模型
453.povray
C++
图像光线跟踪
光线跟踪是一种渲染技术,通过模拟真实世界的光线传输方式计算实景的影像。该计算基于柏林噪声函数,渲染一幅1280x1024的反锯齿国际象棋棋盘图像
454.Calculix
C/ Fortran
结构力学
使用SPOOLES求解器库,进行线性和非线性三维结构力学的有限元分析。计算了一个高速旋转压气盘在离心力作用下的应力和变形情况
459.GemsFDTD
Fortran
计算电磁学
使用了FDTD(有限差分时域)方法求解三维时域中的麦克斯韦方程,计算了一个理想导体的雷达散射界面
465.tonto
Fortran
量子化学
面向对象的从头算量子化学包。模拟了量子晶体学领域计算,设置约束于分子的HF波函数,更好地匹配X光衍射实验数据
470.lbm
C
流体动力学
实现了格子玻尔兹曼方法(LBM),模拟在三维空间的非压缩流体,常用于材料科学中模拟流体的行为
481.wrf
C/ Fortran
天气预报
基于WRF模型,是下一代中等规模数值天气预报系统,用于天气预报和大气研究,模拟30公里区域和两天内的天气
482.sphinx3
C
语音识别
基于卡内基-梅隆大学开发的著名的语音识别软件,使用了AN4数据库,输入为原始的音频格式,输出为识别出来的话语
SPECrate 2017定点程序 | SPECspeed 2017定点程序 | 语言 | 描述 |
500.perlbench_r | 600.perlbench_s | C | 文本处理,Perl解释器 |
502.gcc_r | 602.gcc_s | C | 编译,GNU C编译器 |
505.mcf_r | 605.mcf_s | C | 组合和优化,求解车辆调度问题 |
520.omnetpp_r | 620.omnetpp_s | C++ | 计算机网络,离散事件模拟 |
523.xalancbmk_r | 623.xalancbmk_s | C++ | 通过XSLT将XML转换为HTML |
525.x264_r | 625.x264_s | C | 视频压缩,x264视频编解码 |
531.deepsjeng_r | 631.deepsjeng_s | C++ | 人工智能,下棋程序,alpha-beta树搜索 |
541.leela_r | 641.leela_s | C++ | 人工智能,下棋程序(go),蒙特卡洛树搜索 |
548.exchange2_r | 648.exchange2_s | Fortran | 人工智能,9x9数独,递归方式求解 |
557.xz_r | 657.xz_s | C | 压缩和解压缩,xz压缩程序 |
SPECrate 2017浮点程序 | SPECspeed 2017浮点程序 | 语言 | 描述 |
503.bwaves_r | 603.bwaves_s | Fortran | 计算流体动力学,爆炸建模 |
507.cactuBSSN_r | 607.cactuBSSN_s | C++, C, Fortran | 物理,广义相对论和数值相对论,求解真空中的爱因斯坦方程 |
508.namd_r | C++ | 结构生物学,模拟大规模的生物分子系统 | |
510.parest_r | C++ | 分子医学成像,光学层析成像问题的有限元求解器 | |
511.povray_r | C++, C | 计算机可视化,光线追踪应用POV-Ray | |
519.lbm_r | 619.lbm_s | C | 流体动力学 |
521.wrf_r | 621.wrf_s | Fortran, C | 天气预报建模,基于新一代中尺度数值天气预报系统WRF |
526.blender_r | C++, C | 三维渲染和动画,基于开源的三维制作套件Blender | |
527.cam4_r | 627.cam4_s | Fortran, C | 大气环流建模,地球系统模型CESM中的大气建模部分 |
628.pop2_s | Fortran, C | 大规模海洋建模(气候层面),地球系统模型CESM中的海洋建模部分 | |
538.imagick_r | 638.imagick_s | C | 图像处理,图像处理软件包ImageMagick中convert部分 |
544.nab_r | 644.nab_s | C | 分子动力学,基于生命科学计算领域中分子建模应用NAB(核酸构建器) |
549.fotonik3d_r | 649.fotonik3d_s | Fortran | 计算电磁学,利用时域有限差分方法计算光子波导的透射系数 |
554.roms_r | 654.roms_s | Fortran | 区域海洋建模,基于区域海洋建模系统ROMS |
SPECrate 2017定点程序
SPECspeed 2017定点程序
语言
描述
500.perlbench_r
600.perlbench_s
C
文本处理,Perl解释器
502.gcc_r
602.gcc_s
C
编译,GNU C编译器
505.mcf_r
605.mcf_s
C
组合和优化,求解车辆调度问题
520.omnetpp_r
620.omnetpp_s
C++
计算机网络,离散事件模拟
523.xalancbmk_r
623.xalancbmk_s
C++
通过XSLT将XML转换为HTML
525.x264_r
625.x264_s
C
视频压缩,x264视频编解码
531.deepsjeng_r
631.deepsjeng_s
C++
人工智能,下棋程序,alpha-beta树搜索
541.leela_r
641.leela_s
C++
人工智能,下棋程序(go),蒙特卡洛树搜索
548.exchange2_r
648.exchange2_s
Fortran
人工智能,9x9数独,递归方式求解
557.xz_r
657.xz_s
C
压缩和解压缩,xz压缩程序
SPECrate 2017浮点程序
SPECspeed 2017浮点程序
语言
描述
503.bwaves_r
603.bwaves_s
Fortran
计算流体动力学,爆炸建模
507.cactuBSSN_r
607.cactuBSSN_s
C++, C, Fortran
物理,广义相对论和数值相对论,求解真空中的爱因斯坦方程
508.namd_r
C++
结构生物学,模拟大规模的生物分子系统
510.parest_r
C++
分子医学成像,光学层析成像问题的有限元求解器
511.povray_r
C++, C
计算机可视化,光线追踪应用POV-Ray
519.lbm_r
619.lbm_s
C
流体动力学
521.wrf_r
621.wrf_s
Fortran, C
天气预报建模,基于新一代中尺度数值天气预报系统WRF
526.blender_r
C++, C
三维渲染和动画,基于开源的三维制作套件Blender
527.cam4_r
627.cam4_s
Fortran, C
大气环流建模,地球系统模型CESM中的大气建模部分
628.pop2_s
Fortran, C
大规模海洋建模(气候层面),地球系统模型CESM中的海洋建模部分
538.imagick_r
638.imagick_s
C
图像处理,图像处理软件包ImageMagick中convert部分
544.nab_r
644.nab_s
C
分子动力学,基于生命科学计算领域中分子建模应用NAB(核酸构建器)
549.fotonik3d_r
649.fotonik3d_s
Fortran
计算电磁学,利用时域有限差分方法计算光子波导的透射系数
554.roms_r
654.roms_s
Fortran
区域海洋建模,基于区域海洋建模系统ROMS
事件号 | 事件名称 | 事件定义 |
00H | clkcnt | 时钟周期数 |
01H | roq_cmtcnt | 提交指令数 |
02H | brq_branch | brq返回分支指令数 |
03H | brq_err_branch | brq返回预测错误分支指令数 |
04H | dtlb_access_cnt | 数据tlb访问次数 |
08H | dcache_access | 一级数据Cache访问次数 |
09H | dcache_miss | 一级数据Cache缺失次数 |
0AH | vcache_access | victim_cache访问次数 |
0BH | vcache_miss | victim_cache缺失次数 |
0CH | scres_total | 三级Cache访问次数 |
0DH | scres_miss | 三级Cache缺失次数 |
24H | roq_vecfp_cmtcnt | 处理器提交向量浮点运算指令数 |
25H | roq_vecint_cmtcnt | 处理器提交向量定点运算指令数 |
27H | roq_ex_cnt | 处理器中例外次数 |
29H | brq_bhtbrq | 返回条件跳转类分支指令数 |
2AH | brq_err_bht | brq返回条件跳转类错误预测分支指令数 |
2FH | ade_ualign_cnt | 发生不对齐访问错误次数 |
32H | roq_load_cmtcnt | 处理器提交load指令数 |
33H | roq_store_cmtcnt | 处理器提交store指令数 |
34H | roq_scaint_cmtcnt | 处理器提交标量定点运算指令数 |
40H | roq_cmt_4inst | 提交阻塞周期数 |
41H | dec_deliver_stall | 前端阻塞周期数 |
42H | be_stall | 后端阻塞周期数 |
4CH | fxq_stall | 定点发射队列阻塞周期数 |
4EH | mmq_stall | 访存发射队列阻塞周期数 |
4FH | ftq_stall | 浮点发射队列阻塞周期数 |
事件号
事件名称
事件定义
00H
clkcnt
时钟周期数
01H
roq_cmtcnt
提交指令数
02H
brq_branch
brq返回分支指令数
03H
brq_err_branch
brq返回预测错误分支指令数
04H
dtlb_access_cnt
数据tlb访问次数
08H
dcache_access
一级数据Cache访问次数
09H
dcache_miss
一级数据Cache缺失次数
0AH
vcache_access
victim_cache访问次数
0BH
vcache_miss
victim_cache缺失次数
0CH
scres_total
三级Cache访问次数
0DH
scres_miss
三级Cache缺失次数
24H
roq_vecfp_cmtcnt
处理器提交向量浮点运算指令数
25H
roq_vecint_cmtcnt
处理器提交向量定点运算指令数
27H
roq_ex_cnt
处理器中例外次数
29H
brq_bhtbrq
返回条件跳转类分支指令数
2AH
brq_err_bht
brq返回条件跳转类错误预测分支指令数
2FH
ade_ualign_cnt
发生不对齐访问错误次数
32H
roq_load_cmtcnt
处理器提交load指令数
33H
roq_store_cmtcnt
处理器提交store指令数
34H
roq_scaint_cmtcnt
处理器提交标量定点运算指令数
40H
roq_cmt_4inst
提交阻塞周期数
41H
dec_deliver_stall
前端阻塞周期数
42H
be_stall
后端阻塞周期数
4CH
fxq_stall
定点发射队列阻塞周期数
4EH
mmq_stall
访存发射队列阻塞周期数
4FH
ftq_stall
浮点发射队列阻塞周期数
性能测量和分析对于寻找处理器设计中的性能瓶颈、查找引发性能问题的原因以及代码优化具有重要的意义。表12.13给出了主流的基于硬件性能计数器的性能分析工具。Intel商业化的性能分析软件Vtune能使用Intel的性能计数器来进行性能测量。Compaq公司的DCPI(连续的剖析平台)在Alpha处理器上也是一个强大的程序剖析工具。系统工具Perf-mon能使用UltraSPARC处理器的性能计数器收集统计信息。Perf是Linux内核自带的用于收集和分析性能数据的框架,有时称为Perf事件或者Perf工具,早期称为Performance Counters for Linux(PCL),能用于统计指令执行数目、Cache失效数目、分支误预测失效数目等性能事件,也可以用于跟踪动态控制流,进行函数级和指令级的热点识别。OProfile是Linux系统的性能分析工具,是一个开源的profiling工具,它使用性能计数器来统计信息。OProfile包括一个内核模块和一个用户空间守护进程,前者可以访问性能计数寄存器,后者在后台运行,负责从这些寄存器中收集数据。AMD公司开发的CodeAnalyst是基于OProfile和Perf的开源的图形化性能分析工具,CodeAnalyst支持AMD的基于指令的采样技术(IBS),能更为精确地定位导致Cache失效或者流水线中断的指令。PAPI由田纳西大学开发,提供了一套访问性能计数器的API,使用PAPI需要对源码进行插桩,并且需要安装perfctr内核模块。
-工具 | 平台 | 链接 |
Intel Vtune | Intel X86 | http://software.intel.com/intel-vtune-amplifier-xe |
Linux perf | X86/MIPS等 | http://perf.wiki.kernel.org |
oprofile | X86/MIPS等 | http://oprofile.sourceforge.net |
DCPI | Alpha | http://www.hp.com/openvms/products/dcpi |
Perf-mon | UltraSPARC | http://www.sics.se/~mch/perf-monitor/index.html |
AMD CodeAnalyst | AMD X86 | http://developer.amd.com/tools-and-sdks/compute__trashed/amd-codeanalyst-performance-analyzer-for-linux/ |
PAPI | X86 | http://icl.cs.utk.edu/papi/software/index.html |
工具
平台
链接
Intel Vtune
Intel X86
http://software.intel.com/intel-vtune-amplifier-xe
Linux perf
X86/MIPS等
http://perf.wiki.kernel.org
oprofile
X86/MIPS等
http://oprofile.sourceforge.net
DCPI
Alpha
http://www.hp.com/openvms/products/dcpi
Perf-mon
UltraSPARC
http://www.sics.se/~mch/perf-monitor/index.html
AMD CodeAnalyst
AMD X86
http://developer.amd.com/tools-and-sdks/compute__trashed/amd-codeanalyst-performance-analyzer-for-linux/
PAPI
X86
http://icl.cs.utk.edu/papi/software/index.html
CPU2006 rate4 | loongson 3A5000 | Zen1 r3-1200 | skylake i3 9100f | zen1/3A5000 | skylake/3A5000 |
400.perlbench | 102.00 | 125.00 | 136.0 | 122.50% | 133.30% |
401.bzip2 | 64.40 | 69.60 | 67.7 | 108.10% | 105.10% |
403.gcc | 75.50 | 107.00 | 121.0 | 141.70% | 160.30% |
429.mcf | 50.50 | 81.30 | 88.3 | 161.00% | 174.90% |
445.gobmk | 95.80 | 79.70 | 85.4 | 83.20% | 89.10% |
456.hmmer | 128.00 | 184.00 | 214.0 | 143.80% | 167.20% |
458.sjeng | 86.00 | 71.30 | 89.2 | 82.90% | 103.70% |
462.libquantum | 89.20 | 154.00 | 121.0 | 172.60% | 135.70% |
464.h264ref | 147.00 | 178.00 | 201.0 | 121.10% | 136.70% |
471.omnetpp | 45.00 | 54.80 | 60.0 | 121.80% | 133.30% |
473.astar | 58.60 | 57.10 | 55.9 | 97.40% | 95.40% |
483.xalancbmk | 68.60 | 90.20 | 111.0 | 131.50% | 161.80% |
SPECint2006 | 79.39 | 95.99 | 103.2 | 120.90% | 129.90% |
410.bwaves | 82.10 | 210.00 | 152.0 | 255.80% | 185.10% |
416.gamess | 84.80 | 114.00 | 119.0 | 134.40% | 140.30% |
433.milc | 44.60 | 103.00 | 83.2 | 230.90% | 186.50% |
434.zeusmp | 83.60 | 179.00 | 190.0 | 214.10% | 227.30% |
435.gromacs | 58.30 | 103.00 | 92.2 | 176.70% | 158.10% |
436.cactusADM | 114.00 | 193.00 | 256.0 | 169.30% | 224.60% |
437.leslie3d | 68.30 | 114.00 | 96.0 | 166.90% | 140.60% |
444.namd | 80.00 | 85.80 | 94.7 | 107.30% | 118.40% |
447.dealII | 142.00 | 187.00 | 176.0 | 131.70% | 123.90% |
450.soplex | 62.90 | 99.00 | 101.0 | 157.40% | 160.60% |
453.povray | 149.00 | 136.00 | 155.0 | 91.30% | 104.00% |
454.calculix | 62.00 | 116.00 | 118.0 | 187.10% | 190.30% |
459.GemsFDTD | 53.40 | 98.20 | 80.7 | 183.90% | 151.10% |
465.tonto | 106.00 | 98.70 | 136.0 | 93.10% | 128.30% |
470.lbm | 51.10 | 99.40 | 87.3 | 194.50% | 170.80% |
481.wrf | 92.10 | 175.00 | 164.0 | 190.00% | 178.10% |
482.sphinx3 | 81.30 | 125.00 | 139.0 | 153.80% | 171.00% |
SPECfp2006 | 78.65 | 126.28 | 124.9 | 160.60% | 158.80% |
CPU2006 rate4
loongson 3A5000
Zen1 r3-1200
skylake i3 9100f
zen1/3A5000
skylake/3A5000
400.perlbench
102.00
125.00
136.0
122.50%
133.30%
401.bzip2
64.40
69.60
67.7
108.10%
105.10%
403.gcc
75.50
107.00
121.0
141.70%
160.30%
429.mcf
50.50
81.30
88.3
161.00%
174.90%
445.gobmk
95.80
79.70
85.4
83.20%
89.10%
456.hmmer
128.00
184.00
214.0
143.80%
167.20%
458.sjeng
86.00
71.30
89.2
82.90%
103.70%
462.libquantum
89.20
154.00
121.0
172.60%
135.70%
464.h264ref
147.00
178.00
201.0
121.10%
136.70%
471.omnetpp
45.00
54.80
60.0
121.80%
133.30%
473.astar
58.60
57.10
55.9
97.40%
95.40%
483.xalancbmk
68.60
90.20
111.0
131.50%
161.80%
SPECint2006
79.39
95.99
103.2
120.90%
129.90%
410.bwaves
82.10
210.00
152.0
255.80%
185.10%
416.gamess
84.80
114.00
119.0
134.40%
140.30%
433.milc
44.60
103.00
83.2
230.90%
186.50%
434.zeusmp
83.60
179.00
190.0
214.10%
227.30%
435.gromacs
58.30
103.00
92.2
176.70%
158.10%
436.cactusADM
114.00
193.00
256.0
169.30%
224.60%
437.leslie3d
68.30
114.00
96.0
166.90%
140.60%
444.namd
80.00
85.80
94.7
107.30%
118.40%
447.dealII
142.00
187.00
176.0
131.70%
123.90%
450.soplex
62.90
99.00
101.0
157.40%
160.60%
453.povray
149.00
136.00
155.0
91.30%
104.00%
454.calculix
62.00
116.00
118.0
187.10%
190.30%
459.GemsFDTD
53.40
98.20
80.7
183.90%
151.10%
465.tonto
106.00
98.70
136.0
93.10%
128.30%
470.lbm
51.10
99.40
87.3
194.50%
170.80%
481.wrf
92.10
175.00
164.0
190.00%
178.10%
482.sphinx3
81.30
125.00
139.0
153.80%
171.00%
SPECfp2006
78.65
126.28
124.9
160.60%
158.80%
SPEC CPU2006 | loongson 3A5000 | zen1 r3-1200 | skylake i3 9100f | zen1/3A5000 | skylake/3A5000 |
400.perlbench | 1,285.22 | 1,330.70 | 1,507.39 | 103.50% | 117.30% |
401.bzip2 | 687.20 | 679.21 | 700.24 | 98.80% | 101.90% |
403.gcc | 528.81 | 625.04 | 726.01 | 118.20% | 137.30% |
429.mcf | 259.12 | 186.98 | 251.16 | 72.20% | 96.90% |
445.gobmk | 666.08 | 495.13 | 533.88 | 74.30% | 80.20% |
456.hmmer | 561.53 | 553.70 | 645.47 | 98.60% | 114.90% |
458.sjeng | 896.90 | 662.04 | 840.26 | 73.80% | 93.70% |
462.libquantum | 1,109.34 | 1,225.50 | 1,380.07 | 110.50% | 124.40% |
464.h264ref | 370.65 | 468.73 | 483.39 | 126.50% | 130.40% |
471.omnetpp | 333.52 | 356.34 | 442.49 | 106.80% | 132.70% |
473.astar | 512.46 | 354.04 | 349.51 | 69.10% | 68.20% |
483.xalancbmk | 1,045.16 | 963.92 | 1,362.81 | 92.20% | 130.40% |
SPECint_2006 | 615.94 | 576.20 | 667.59 | 93.50% | 108.40% |
410.bwaves | 106.04 | 112.99 | 94.37 | 106.60% | 89.00% |
416.gamess | 489.11 | 592.77 | 616.36 | 121.20% | 126.00% |
433.milc | 11.81 | 48.69 | 43.09 | 412.30% | 364.90% |
434.zeusmp | 171.28 | 101.70 | 88.22 | 59.40% | 51.50% |
435.gromacs | 130.19 | 174.94 | 158.70 | 134.40% | 121.90% |
436.cactusADM | 7.02 | 12.71 | 13.05 | 181.10% | 185.90% |
437.leslie3d | 134.20 | 300.84 | 208.51 | 224.20% | 155.40% |
444.namd | 239.86 | 234.96 | 260.51 | 98.00% | 108.60% |
447.dealII | 659.59 | 854.76 | 830.83 | 129.60% | 126.00% |
450.soplex | 386.41 | 462.08 | 514.60 | 119.60% | 133.20% |
453.povray | 738.40 | 889.04 | 1,060.83 | 120.40% | 143.70% |
454.calculix | 233.14 | 351.24 | 352.48 | 150.70% | 151.20% |
459.GemsFDTD | 70.57 | 136.25 | 111.24 | 193.10% | 157.60% |
465.tonto | 409.28 | 426.25 | 513.51 | 104.10% | 125.50% |
470.lbm | 24.27 | 57.78 | 63.32 | 238.10% | 260.90% |
481.wrf | 323.44 | 460.50 | 504.50 | 142.40% | 156.00% |
482.sphinx3 | 420.30 | 432.66 | 546.20 | 102.90% | 130.00% |
SPECfp_2006 | 152.40 | 214.47 | 213.45 | 140.70% | 140.10% |
SPEC CPU2006
loongson 3A5000
zen1 r3-1200
skylake i3 9100f
zen1/3A5000
skylake/3A5000
400.perlbench
1,285.22
1,330.70
1,507.39
103.50%
117.30%
401.bzip2
687.20
679.21
700.24
98.80%
101.90%
403.gcc
528.81
625.04
726.01
118.20%
137.30%
429.mcf
259.12
186.98
251.16
72.20%
96.90%
445.gobmk
666.08
495.13
533.88
74.30%
80.20%
456.hmmer
561.53
553.70
645.47
98.60%
114.90%
458.sjeng
896.90
662.04
840.26
73.80%
93.70%
462.libquantum
1,109.34
1,225.50
1,380.07
110.50%
124.40%
464.h264ref
370.65
468.73
483.39
126.50%
130.40%
471.omnetpp
333.52
356.34
442.49
106.80%
132.70%
473.astar
512.46
354.04
349.51
69.10%
68.20%
483.xalancbmk
1,045.16
963.92
1,362.81
92.20%
130.40%
SPECint_2006
615.94
576.20
667.59
93.50%
108.40%
410.bwaves
106.04
112.99
94.37
106.60%
89.00%
416.gamess
489.11
592.77
616.36
121.20%
126.00%
433.milc
11.81
48.69
43.09
412.30%
364.90%
434.zeusmp
171.28
101.70
88.22
59.40%
51.50%
435.gromacs
130.19
174.94
158.70
134.40%
121.90%
436.cactusADM
7.02
12.71
13.05
181.10%
185.90%
437.leslie3d
134.20
300.84
208.51
224.20%
155.40%
444.namd
239.86
234.96
260.51
98.00%
108.60%
447.dealII
659.59
854.76
830.83
129.60%
126.00%
450.soplex
386.41
462.08
514.60
119.60%
133.20%
453.povray
738.40
889.04
1,060.83
120.40%
143.70%
454.calculix
233.14
351.24
352.48
150.70%
151.20%
459.GemsFDTD
70.57
136.25
111.24
193.10%
157.60%
465.tonto
409.28
426.25
513.51
104.10%
125.50%
470.lbm
24.27
57.78
63.32
238.10%
260.90%
481.wrf
323.44
460.50
504.50
142.40%
156.00%
482.sphinx3
420.30
432.66
546.20
102.90%
130.00%
SPECfp_2006
152.40
214.47
213.45
140.70%
140.10%
输入 | 输出 | ||
C | B | A | Y |
0 | 0 | 0 | D0 |
0 | 0 | 1 | D1 |
0 | 1 | 0 | D2 |
0 | 1 | 1 | D3 |
1 | 0 | 0 | D4 |
1 | 0 | 1 | D5 |
1 | 1 | 0 | D6 |
1 | 1 | 1 | D7 |
输入
输出
C
B
A
Y
0
0
0
D0
0
0
1
D1
0
1
0
D2
0
1
1
D3
1
0
0
D4
1
0
1
D5
1
1
0
D6
1
1
1
D7