图书介绍

Solaris应用程序设计【2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载】

Solaris应用程序设计
  • (英)格夫(Gove,Darryl)著;张伟,刘子锐,董峻峰等译 著
  • 出版社: 北京:机械工业出版社
  • ISBN:9787111238782
  • 出版时间:2008
  • 标注页数:319页
  • 文件大小:78MB
  • 文件页数:334页
  • 主题词:操作系统(软件),Solaris-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

Solaris应用程序设计PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第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 UltraSPARCTI22

2.7 UItraSPARCT2.23

2.8 SPARC64VI23

第3章 x64处理器家族24

3.1 本章目标24

3.2 x64处理器家族24

3.3 x86处理器:CISC和RISC25

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=generic63

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 解构-fast66

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_level85

5.9.6 C的选项-xalias_level=any85

5.9.7 C的选项-xalias_level=basic86

5.9.8 C的选项-xalias_level=weak86

5.9.9 C的选项-xaliaslevel=layout88

5.9.10 C的选项-xalias_level=strict88

5.9.11 C的选项-xalias_level=std88

5.9.12 C的选项-xalias_level=strong88

5.9.13 C++的选项-xalias_level89

5.9.14 C++的选项-xaliaslevel=simple89

5.9.15 C++的选项-xalias_level=compatible89

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 libfast134

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_kernel163

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 Fortran177

9.3 运行时检查178

9.3.1 边界检查178

9.3.2 watchmalloc180

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 调试和OpenMp184

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 使用OpenMPAPI290

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

热门推荐