Solaris应用程序设计PDF电子书下载
- 电子书积分:12 积分如何计算积分?
- 作 者:(英)格夫(Gove,Darryl)著;张伟,刘子锐,董峻峰等译
- 出 版 社:北京:机械工业出版社
- 出版年份:2008
- ISBN:9787111238782
- 页数:319 页
第1章 常规的处理器 1
1.1 本章目标 1
1.2 处理器的组成 1
1.3 时钟速率 2
1.4 乱序执行处理器 2
1.5 芯片多线程 3
1.6 执行管道 3
1.6.1 指令时延 4
1.6.2 装入/存储管道 4
1.6.3 整型操作管道 4
1.6.4 分支管道 5
1.6.5 浮点管道 5
1.7 高速缓存 6
1.8 系统交互 8
1.8.1 带宽与时延 8
1.8.2 系统总线 8
1.9 虚拟内存 9
1.9.1 概述 9
1.9.2 TLB和页面大小 10
1.10 内存的索引和标记 10
1.11 指令集架构 11
第2章 SPARC家族 12
2.1 本章目标 12
2.2 UltraSPARC家族 12
2.2.1 SPARC体系结构的历史 12
2.2.2 UltraSPARC处理器 12
2.3 SPARC指令集 13
2.3.1 SPARC指令集简介 13
2.3.2 整数寄存器 15
2.3.3 寄存器窗 16
2.3.4 浮点寄存器 17
2.4 32位和64位代码 18
2.5 UltraSPARCIⅢ系列处理器 18
2.5.1 CPU的核心 18
2.5.2 与内存的通信 18
2.5.3 预取 18
2.5.4 数据高速缓存不命中时装入操作的停顿 21
2.5.5 基于UltraSPARCIII的系统 21
2.5.6 全存储顺序 22
2.6 UltraSPARCTI 22
2.7 UItraSPARCT2. 23
2.8 SPARC64VI 23
第3章 x64处理器家族 24
3.1 本章目标 24
3.2 x64处理器家族 24
3.3 x86处理器:CISC和RISC 25
3.4 字节顺序 25
3.5 处理器指令格式 26
3.6 寄存器 27
3.7 指令集扩展与浮点计算 29
3.8 内存操作顺序 29
第4章 信息工具 31
4.1 本章目标 31
4.2 报告系统配置的工具 31
4.2.1 简介 31
4.2.2 报告一般系统信息 31
4.2.3 启用虚拟处理器 32
4.2.4 通过处理器的集合或者绑定来控制处理器的使用 32
4.2.5 报告硬件支持的指令集 33
4.2.6 报告硬件支持的TLB页面大小 34
4.2.7 报告SPARC硬件特性摘要 35
4.3 报告当前系统状态的工具 35
4.3.1 简介 35
4.3.2 报告虚拟内存的利用情况(vmstat) 35
4.3.3 报告交换文件使用情况(swap) 37
4.3.4 报告进程资源利用情况(prstat) 37
4.3.5 列出进程(ps) 39
4.3.6 定位应用的进程ID(Pgrep) 39
4.3.7 报告所有处理器的活动(mpstat) 40
4.3.8 报告内核统计(kstat) 41
4.3.9 生成系统活动报告(sar) 42
4.3.10 报告I/O活动(iostat) 44
4.3.11 报告网络活动(netstat) 45
4.3.12 snoop命令 46
4.3.13 报告硬盘空间利用情况(df) 46
4.3.14 报告文件占用的硬盘空间(du) 47
4.4 进程和处理器的专有工具 47
4.4.1 简介 47
4.4.2 进程执行时间(time、timex和ptime) 47
4.4.3 报告系统级硬件计数器的活动(cpustat) 48
4.4.4 为单个进程报告硬件性能计数器的活动(cputrack) 49
4.4.5 报告总线活动(busstat) 50
4.4.6 报告陷阱活动(trapstat) 50
4.4.7 报告进程的虚拟内存映射信息(pmap) 51
4.4.8 检测传递给进程的命令行参数(pargs) 52
4.4.9 报告进程打开的文件(pfiiles) 52
4.4.10 检查进程的当前栈(pstack) 52
4.4.11 跟踪应用执行(truss) 53
4.4.12 用dtrace探究用户代码和内核活动 54
4.5 应用相关信息 56
4.5.1 报告库链接(ldd) 56
4.5.2 报告文件内容的类型(file) 57
4.5.3 报告文件中的符号(nm) 58
4.5.4 报告库的版本信息(pvs) 58
4.5.5 检查应用、库或者目标文件的反汇编(dis) 59
4.5.6 报告应用、库或者目标文件中各种段的大小(size) 59
4.5.7 报告文件中的元数据(dumpstabs、dwarfdump、elfdump、dump和mcs) 60
第5章 编译器的使用 62
5.1 本章目标 62
5.2 三类编译选项 62
5.3 在x86平台上使用-xtarget=generic 63
5.4 优化 64
5.4.1 优化级别 64
5.4.2 -O选项的使用 65
5.4.3 -fast选项的使用 65
5.4.4 在使用-fast的同时指定体系结构 65
5.4.5 解构-fast 66
5.4.6 -fast对性能的优化(针对SunStudio12) 67
5.5 生成调试信息 67
5.5.1 调试信息选项 67
5.5.2 调试和优化 68
5.6 为应用程序选择目标机器的类型 68
5.6.1 在32位和64位之间选择 68
5.6.2 目标机器的通用类型(geneic) 69
5.6.3 使用-xcache指定缓存配置 69
5.6.4 使用-xchip来设置指令调度 70
5.6.5 -xarch和-m32/-m64. 70
5.7 代码布局优化 71
5.7.1 简介 71
5.7.2 文件间优化 72
5.7.3 映射文件 73
5.7.4 程序剖析反馈 73
5.7.5 链接时优化 76
5.8 通用的编译器优化 77
5.8.1 预取指令 77
5.8.2 启用预取指令的生成(-xprefetch) 78
5.8.3 控制激进的预取(-xprefetchlevel) 79
5.8.4 启用依赖分析(-xdepend) 79
5.8.5 处理SPARC上非对齐的存取操作(-xmemalign/-dalign) 80
5.8.6 使用-xpagesize=<size>设置页大小 81
5.9 C和C++的指针别名 82
5.9.1 关于指针的问题 82
5.9.2 诊断别名问题 84
5.9.3 使用受限指针来减少C和C++程序中的别名问题 84
5.9.4 使用-xalias_level来指定指针别名的级别 85
5.9.5 C的选项-xalias_level 85
5.9.6 C的选项-xalias_level=any 85
5.9.7 C的选项-xalias_level=basic 86
5.9.8 C的选项-xalias_level=weak 86
5.9.9 C的选项-xaliaslevel=layout 88
5.9.10 C的选项-xalias_level=strict 88
5.9.11 C的选项-xalias_level=std 88
5.9.12 C的选项-xalias_level=strong 88
5.9.13 C++的选项-xalias_level 89
5.9.14 C++的选项-xaliaslevel=simple 89
5.9.15 C++的选项-xalias_level=compatible 89
5.10 其他针对C和C++的优化 89
5.11 针对Fortran程序的优化 90
5.11.1 对齐变量来优化布局(-xpad) 90
5.11.2 用栈来存放局部变量(-xstackvar) 90
5.12 编译器指示词(pragmas) 91
5.12.1 简介 91
5.12.2 指明变量的对齐位数 91
5.12.3 指明函数访问全局变量的情况 91
5.12.4 指明函数没有副作用 92
5.12.5 指明函数很少被调用 93
5.12.6 指明针对特定循环流水线的安全级别 94
5.12.7 指明循环的单次迭代内没有访存依赖 95
5.12.8 指明循环展开的程度 95
5.13 针对C程序更好地控制别名的指示词 95
5.13.1 断言变量间别名的程度 96
5.13.2 断言变量是别名的 97
5.13.3 断言非指针变量是别名的 98
5.13.4 断言变量不会别名 98
5.13.5 断言非指针变量不会别名 99
5.14 与GCC的兼容 99
第6章 浮点数优化 100
6.1 本章目标 100
6.2 浮点数优化标记 100
6.2.1 标记-fast中的运算优化 100
6.2.2 IEEE-754与浮点运算 100
6.2.3 矢量化浮点运算(-xvector) 101
6.2.4 使用SIMD指令进行矢量运算(-xvector=simd)(仅适用于x64平台) 102
6.2.5 次正规数 103
6.2.6 将次正规数清为0(-fns) 104
6.2.7 处理非数字的值 104
6.2.8 启用浮点表达式的简化(-fsimple) 105
6.2.9 消除比较 106
6.2.10 消除不必要的计算 106
6.2.11 重排运算顺序 107
6.2.12 Kahan方程 109
6.2.13 提升除法 110
6.2.14 不同浮点简化级别对括号的遵从情况 111
6.2.15 使用-fast对error的影响 112
6.2.16 指定浮点消息的触发自陷(-ftrap) 112
6.2.17 浮点异常标记 113
6.2.18 C99中的浮点异常 114
6.2.19 使用内联浮点函数模板(-xlibmil) 115
6.2.20 使用优化的数学库(-xlibmopt) 115
6.2.21 不要把单精度提升为双精度(C的-fsingle) 116
6.2.22 使用单精度存储浮点常数(适用于C的-xsfponst) 116
6.3 浮点数乘法加速指令 117
6.4 整数数学 118
6.5 使用SPARCV8代码传递浮点参数 121
第7章 库与链接 123
7.1 简介 123
7.2 链接 123
7.2.1 链接的概述 123
7.2.2 动态和静态链接 123
7.2.3 链接程序库 124
7.2.4 创建一个静态库 124
7.2.5 创建一个动态库 125
7.2.6 指定库的位置 126
7.2.7 库的延时加载 127
7.2.8 程序库的初始化和终止代码 127
7.2.9 符号作用域 128
7.2.10 程序库间入 129
7.2.11 使用调试接口 130
7.2.12 使用审计接口(AuditInterface) 131
7.3 其他一些有趣的库 132
7.3.1 C运行时库(libc和libc_psr) 132
7.3.2 内存管理库 132
7.3.3 libfast 134
7.3.4 Performance程序库 135
7.3.5 STLport4. 136
7.4 程序库调用 136
7.4.1 用于计时的程序库例程 136
7.4.2 选择最适合的程序库例程 138
7.4.3 SIMD指令以及媒体库 139
7.4.4 使用VIS指令搜索数组 139
第8章 性能分析工具 143
8.1 简介 143
8.2 SunStudio性能分析器 143
8.3 收集分析器 144
8.4 为性能分析器编译应用程序 145
8.5 使用GUI查看性能分析数据 145
8.6 Caller-Callee信息 147
8.7 使用命令行工具进行性能分析 148
8.8 分析器详解 149
8.9 UltraSPARCIH/Ⅳ处理器的分析器详解 150
8.10 使用性能计数器的分析 151
8.11 调用栈详解 152
8.12 生成映射文件 154
8.13 使用spot工具生成性能报告 155
8.14 内存访问模式分析器 157
8.15 er_kernel 163
8.16 尾部调用(Tail-Call)优化和调试 164
8.17 使用gprof收集分析信息 165
8.18 用tcov得到代码覆盖信息 167
8.19 用dtrace去收集分析数据和覆盖信息 169
8.20 编译器注解 171
第9章 校正与调试 173
9.1 简介 173
9.2 编译时间检查 173
9.2.1 简介 173
9.2.2 C语言程序的编译时间检查 173
9.2.3 使用lint检查C程序代码 173
9.2.4 C和C++编译器中常用的源程序处理选项 175
9.2.5 C++ 176
9.2.6 Fortran 177
9.3 运行时检查 178
9.3.1 边界检查 178
9.3.2 watchmalloc 180
9.3.3 其他mallocs下的调试选项 180
9.3.4 Fortran中运行时数组边界检查 181
9.3.5 运行时堆栈溢出检查 181
9.3.6 使用discover检测内存存取错误 182
9.4 使用dbx调试程序 183
9.4.1 调试编译器标识位 183
9.4.2 调试和优化 183
9.4.3 调试信息格式 184
9.4.4 调试和OpenMp 184
9.4.5 x86上的帧指针优化 184
9.4.6 在信息转储文件上运行调试程序 185
9.4.7 调试应用程序的例子 185
9.4.8 在dbx下运行一个应用程序 187
9.5 使用ATS定位优化缺陷 189
9.6 使用mdb调试 191
第10章 性能计数器度量 195
10.1 本章目标 195
10.2 读取性能计数器 195
10.3 UltraSPARCⅢ和U1traSPARCⅣ性能计数器 196
10.3.1 指令与时钟周期 196
10.3.2 数据高速缓存事件 198
10.3.3 指令缓存事件 199
10.3.4 二级高速缓存事件 200
10.3.5 高速缓存未命中事件所耗费的时钟周期 200
10.3.6 高速缓存访问度量示例 201
10.3.7 延时的综合度量 203
10.3.8 内存带宽消耗综合度量 204
10.3.9 预读高速缓存事件 205
10.3.10 性能计数器预读和未预读的比较 207
10.3.11 写高速缓存事件 208
10.3.12 处理器阻塞事件所消耗的时钟周期 209
10.3.13 分支预测失误 210
10.3.14 内存控制器事件 210
10.4 UltraSPARCIV和UltraSPARCIV+上的性能计数器 211
10.4.1 简介 211
10.4.2 UltraSPARCIV+上的三级高速缓存 211
10.4.3 内存控制器事件 212
10.5 UltraSPARCT1上的性能计数器 212
10.5.1 硬件性能计数器 212
10.5.2 UltraSPARCT1时钟周期预算 214
10.5.3 内核的性能计数器 215
10.5.4 计算系统带宽消耗 215
10.6 UltraSPARCT2性能计数器 216
10.7 SPARC64VI性能计数器 216
10.8 Opteron性能计数器 217
10.8.1 简介 217
10.8.2 指令 218
10.8.3 指令高速缓存事件 218
10.8.4 数据高速缓存事件 219
10.8.5 TLB事件 220
10.8.6 分支事件 221
10.8.7 阻塞所消耗的时钟周期 221
第11章 源代码优化 223
11.1 概述 223
11.2 传统优化方法 223
11.2.1 简介 223
11.2.2 循环展开和流水线作业 223
11.2.3 循环剥离、融合及分割 224
11.2.4 循环交换和分块 225
11.2.5 循环不变量提升 227
11.2.6 公共子表达式消除 227
11.2.7 强度削弱 227
11.2.8 函数克隆 228
11.3 数据的局部性、带宽以及延时 228
11.3.1 带宽 228
11.3.2 整数数据 229
11.3.3 存储流 230
11.3.4 手动预取 231
11.3.5 延时 233
11.3.6 拷贝和移动内存 237
11.4 数据结构 238
11.4.1 结构重组 238
11.4.2 结构体预取 241
11.4.3 对结构体优化性能的考虑 244
11.4.4 矩阵及其访问 244
11.4.5 多个流 246
11.5 抖动 246
11.5.1 概述 246
11.5.2 数据TLB性能计数器 248
11.6 写后读 249
11.7 存储队列 251
11.7.1 停顿 251
11.7.2 检测存储队列停顿 251
11.8 If语句 253
11.8.1 简介 253
11.8.2 条件移动 253
11.8.3 SPARC处理器上的未对齐内存访问 256
11.9 32位应用程序中的文件处理 259
11.9.1 文件描述符的限制 259
11.9.2 在32位应用程序中处理大文件 260
第12章 多核、多进程与多线程 263
12.1 简介 263
12.2 进程、线程、处理器、内核与芯片多线程 263
12.3 虚拟化 265
12.4 横向以及纵向扩展 266
12.5 并行计算 266
12.6 用多进程扩展处理性能 267
12.6.1 多进程 267
12.6.2 多进程协同 268
12.6.3 使用MPI的并行计算 271
12.7 多线程应用程序 274
12.7.1 使用Pthread进行并行处理 274
12.7.2 线程局部存储 275
12.7.3 互斥锁 277
12.7.4 使用原子操作 281
12.7.5 伪共享 283
12.7.6 一个多线程程序的内存分布 285
12.8 使用OpenMP并行化应用程序 287
12.9 用OpenMP编译指令来并行化循环代码 288
12.10 使用OpenMPAPI 290
12.11 代码段并行化 290
12.12 应用程序的自动并行化 291
12.13 对多线程应用程序进行性能分析 293
12.14 检测多线程应用程序中的数据竞争 295
12.15 调试多线程代码 296
12.16 将一个顺序执行程序并行化 298
12.16.1 程序实例 298
12.16.2 优化对顺序执行程序的性能影响 300
12.16.3 对顺序执行程序进行性能分析 300
12.16.4 展开关键循环 301
12.16.5 用Pthreads实现并行化 303
12.16.6 使用OpenMP并行化 304
12.16.7 自动并行化 305
12.16.8 用OpenMP进行负载均衡 308
12.16.9 线程间共享数据 308
12.16.10 使用OpenMP在线程之间共享变量 310
第13章 性能分析 313
13.1 简介 313
13.2 算法和复杂度 313
13.3 串行代码调优 316
13.4 并行性的探索 318
13.5 为CMT处理器进行优化 319
- 《钒产业技术及应用》高峰,彭清静,华骏主编 2019
- 《现代水泥技术发展与应用论文集》天津水泥工业设计研究院有限公司编 2019
- 《英汉翻译理论的多维阐释及应用剖析》常瑞娟著 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《数据库技术与应用 Access 2010 微课版 第2版》刘卫国主编 2020
- 《区块链DAPP开发入门、代码实现、场景应用》李万胜著 2019
- 《虚拟流域环境理论技术研究与应用》冶运涛蒋云钟梁犁丽曹引等编著 2019
- 《设计十六日 国内外美术院校报考攻略》沈海泯著 2018
- 《当代翻译美学的理论诠释与应用解读》宁建庚著 2019
- 《计算机辅助平面设计》吴轶博主编 2019
- 《中风偏瘫 脑萎缩 痴呆 最新治疗原则与方法》孙作东著 2004
- 《水面舰艇编队作战运筹分析》谭安胜著 2009
- 《王蒙文集 新版 35 评点《红楼梦》 上》王蒙著 2020
- 《TED说话的力量 世界优秀演讲者的口才秘诀》(坦桑)阿卡什·P.卡里亚著 2019
- 《燕堂夜话》蒋忠和著 2019
- 《经久》静水边著 2019
- 《魔法销售台词》(美)埃尔默·惠勒著 2019
- 《微表情密码》(波)卡西亚·韦佐夫斯基,(波)帕特里克·韦佐夫斯基著 2019
- 《看书琐记与作文秘诀》鲁迅著 2019
- 《酒国》莫言著 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《北京生态环境保护》《北京环境保护丛书》编委会编著 2018
- 《高等教育双机械基础课程系列教材 高等学校教材 机械设计课程设计手册 第5版》吴宗泽,罗圣国,高志,李威 2018
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019
- 《高等院校旅游专业系列教材 旅游企业岗位培训系列教材 新编北京导游英语》杨昆,鄢莉,谭明华 2019
- 《中国十大出版家》王震,贺越明著 1991
- 《近代民营出版机构的英语函授教育 以“商务、中华、开明”函授学校为个案 1915年-1946年版》丁伟 2017
- 《新工业时代 世界级工业家张毓强和他的“新石头记”》秦朔 2019
- 《智能制造高技能人才培养规划丛书 ABB工业机器人虚拟仿真教程》(中国)工控帮教研组 2019
- 《AutoCAD机械设计实例精解 2019中文版》北京兆迪科技有限公司编著 2019