Solaris application programming

副标题:无

作   者:(英)Darryl Gove著;张伟,刘子锐,董峻峰等译

分类号:

ISBN:9787111238782

微信扫一扫,移动浏览光盘

简介

   本书介绍如何在Solaris操作系统上获得程序的最佳运行性能。全书共   分五部分13章,包括常规处理器、SPARC、x64处理器、信息工具、编译器、   浮点数优化、库与链接、性能分析工具、校正与调试、性能计数器度量、源   代码优化、多核多进程多线程以及性能分析。实用性强是本书的最大特点,   全书覆盖了目前所有在Solaris上可以使用的开发工具,并介绍了它们的用   法,而且书中还提供了大量实例工具的用法并解释其输出数据的含义。    本书内容丰富,层次分明,不仅适合软件开发新手阅读,也可供有一定   经验的开发者参考。   

目录

译者序.
前言
第一部分处理器综述
第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.2TLB和页面大小10
1.10内存的索引和标记10
1.11指令集架构11
第2章SPARC家族12
2.1本章目标12
2.2UltraSPARC家族12
2.2.1SPARC体系结构的历史12
2.2.2UltraSPARC处理器12
2.3SPARC指令集13
2.3.1SPARC指令集简介13
2.3.2整数寄存器15
2.3.3寄存器窗16
2.3.4浮点寄存器17
2.432位和64位代码18
2.5UltraSPARC Ⅲ系列处理器18
2.5.1CPU的核心18
2.5.2与内存的通信18
2.5.3预取18
2.5.4数据高速缓存不命中时装入操作的停顿21
2.5.5基于UltraSPARC Ⅲ的系统21
2.5.6全存储顺序22
2.6UltraSPARC T122
2.7UltraSPARC T223
2.8SPARC64 Ⅵ23
第3章x64处理器家族24
3.1本章目标24
3.2x64处理器家族24
3.3x86处理器: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通过处理器的集合或者绑定来控制处理器的使用33
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.12snoop命令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报告进程打开的文件(pfiles)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对性能的优化(针对Sun Studio 12)67
5.5生成调试信息67
5.5.1调试信息选项67
5.5.2调试和优化68
5.6为应用程序选择目标机器的类型68
5.6.1在32位和64位之间选择68
5.6.2目标机器的通用类型(generic)69
5.6.3使用-xcache指定缓存配置69
5.6.4使用-xchip来设置指令调度70
5.6.5-xarch和-m32/-m6470
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控制激进的预取(-xprefetch_level)79
5.8.4启用依赖分析(-xdepend )79
5.8.5处理SPARC上非对齐的存取操作(-xmemalign/-dalign)80
5.8.6使用-xpagesize=设置页大小81
5.9C和C++的指针别名82
5.9.1关于指针的问题82
5.9.2诊断别名问题84
5.9.3使用受限指针来减少C和C++程序中的别名问题84
5.9.4使用-xalias_level来指定指针别名的级别85
5.9.5C的选项-xalias_level85
5.9.6C的选项-xalias_level=any85
5.9.7C的选项-xalias_level=basic86
5.9.8C的选项-xalias_level=weak …86
5.9.9C的选项-xalias_level=layout88
5.9.10C的选项-xalias_level=strict88
5.9.11C的选项-xalias_level=std88
5.9.12C的选项-xalias_level=strong88
5.9.13C++的选项-xalias_level89
5.9.14C++的选项-xalias_level=simple89
5.9.15C++的选项-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.2IEEE-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.12Kahan方程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.18C99中的浮点异常114
6.2.19使用内联浮点函数模板(-xlibmil)115
6.2.20使用优化的数学库(-xlibmopt)115
6.2.21不要把单精度提升为双精度(C的-fsingle)116
6.2.22使用单精度存储浮点常数(适用于C的-xsfpconst)116
6.3浮点数乘法加速指令117
6.4整数数学118
6.5使用SPARC V8代码传递浮点参数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.1C运行时库(libc和libc_psr)132
7.3.2内存管理库132
7.3.3libfast134
7.3.4Performance程序库135
7.3.5STLport4136
7.4程序库调用136
7.4.1用于计时的程序库例程136
7.4.2选择最适合的程序库例程138
7.4.3SIMD指令以及媒体库139
7.4.4使用VIS指令搜索数组139
第8章性能分析工具143
8.1简介143
8.2Sun Studio性能分析器143
8.3收集分析器144
8.4为性能分析器编译应用程序145
8.5使用GUI查看性能分析数据145
8.6Caller睠allee信息147
8.7使用命令行工具进行性能分析148
8.8分析器详解149
8.9UltraSPARC III/IV处理器的分析器详解150
8.10使用性能计数器的分析151
8.11调用栈详解152
8.12生成映射文件154
8.13使用spot工具生成性能报告155
8.14内存访问模式分析器157
8.15er_kernel163
8.16尾部调用(Tail睠all)优化和调试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.2C语言程序的编译时间检查173
9.2.3使用lint检查C程序代码173
9.2.4C和C++编译器中常用的源程序处理选项175
9.2.5C++176
9.2.6Fortran177
9.3运行时检查178
9.3.1边界检查178
9.3.2watchmalloc180
9.3.3其他mallocs下的调试选项180
9.3.4Fortran中运行时数组边界检查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.5x86上的帧指针优化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.3UltraSPARC III和UltraSPARC IV性能计数器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.4UltraSPARC IV和UltraSPARC IV+上的性能计数器211
10.4.1简介211
10.4.2UltraSPARC IV+上的三级高速缓存211
10.4.3内存控制器事件212
10.5UltraSPARC T1上的性能计数器212
10.5.1硬件性能计数器212
10.5.2UltraSPARC T1时钟周期预算214
10.5.3内核的性能计数器215
10.5.4计算系统带宽消耗215
10.6UltraSPARC T2性能计数器216
10.7SPARC64VI性能计数器216
10.8Opteron性能计数器217
10.8.1简介217
10.8.2指令218
10.8.3指令高速缓存事件218
10.8.4数据高速缓存事件219
10.8.5TLB事件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.8If语句253
11.8.1简介253
11.8.2条件移动253
11.8.3SPARC处理器上的未对齐内存访问256
11.932位应用程序中的文件处理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使用OpenMP API290
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

已确认勘误

次印刷

页码 勘误内容 提交人 修订印次

Solaris application programming
    • 名称
    • 类型
    • 大小

    光盘服务联系方式: 020-38250260    客服QQ:4006604884

    意见反馈

    14:15

    关闭

    云图客服:

    尊敬的用户,您好!您有任何提议或者建议都可以在此提出来,我们会谦虚地接受任何意见。

    或者您是想咨询:

    用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问

    Video Player
    ×
    Audio Player
    ×
    pdf Player
    ×
    Current View

    看过该图书的还喜欢

    some pictures

    解忧杂货店

    东野圭吾 (作者), 李盈春 (译者)

    loading icon