第1章 CellBE概览 2
1.1 Cell的历史 3
1.2 Cell的设计 5
功耗壁垒 5
内存壁垒 5
频率壁垒 6
1.3 Cell与其他处理器 6
Cell与图像处理器 6
Cell与服务器处理器 7
Cell与超级计算处理器 7
Cell与嵌入式处理器 8
第2章 Cell BE体系结构 9
Cell整体结构 10
Power PC处理器 11
协同处理器 12
互连总线 13
内存控制器接口 14
宽带引擎接口 14
第3章 Cell BE的编程语言 16
3.1 PPE编程语言 17
PowerPC指令 17
Vector/SIMD多媒体扩展指令 18
C/C++语言扩展 19
3.2 SPE编程语言 25
SPE指令 25
C/C++语言扩展 28
第4章 CellBE的编程工具 37
4.1软件开发工具包(SDK) 38
SDK安装与使用 38
工具链(Toolchain) 46
IBM全系统模拟器(Simulator) 47
模拟器的系统镜像 49
库简介 49
原型代码 52
支持性能调优的库和工具 53
集成开发环境(1DE) 54
4.2 “Hello World”例程 56
创建simple工程 56
编译 60
运行 61
第5章 进程和线程 66
5.1基本概念 67
5.2 PPE进程和线程 68
5.3 SPE线程 70
创建SPE线程 70
执行SPE线程 75
销毁 SPE线程 76
5.4代码实例 77
Hello 77
Calculate 79
第6章 直接内存访问 82
6.1地址空间 83
6.2 DMA编程基本概念 85
MFC命令 85
标签和标签组 85
栅障和栅栏 86
DMA传输和DMA列表传输 87
DMA命令编程接口 87
6.3 DMA传输 89
DMA传输编程的主要步骤 89
SPE从本地存储移动数据到系统内存 89
SPE之间本地存储的传输 91
PPE从系统内存移动数据到SPE本地存储 92
DMA传输小结 92
6.4 DMA传输综合示例 93
程序功能说明 93
在PPE和SPE间进行通信 93
缓冲区的对齐 94
结构体的大小 94
程序目录结构 96
代码示例 97
6.5 DMA列表传输 100
DMA列表传输编程主要步骤 100
主要数据结构和API说明 100
DMA列表传输小结 102
6.6双缓冲和多缓冲技术 102
基本概念 103
阻塞和非阻塞的DMA/DMA列表传输 105
双缓冲程序示例 105
6.7 DMA传输的性能优化 108
利用SIMD技术填充DMA列表 108
地址对齐问题 108
重叠DMA传输 108
6.8其他 108
DMA传输过程 108
DMA列表传输过程 109
SDK示例程序说明 111
第7章 通信与同步 113
7.1邮箱通信 114
邮箱的读/写和阻塞 115
邮箱通信API 115
邮箱的使用 117
出站邮箱 118
入站邮箱 119
7.2信号通信 120
信号通知通道 120
信号通知的使用和模式配置 122
发送信号 122
接收信号 123
SDK提供的信号通信函数 124
7.3通信小结 125
7.4共享存储的顺序 126
存储器模型 126
PPE的指令顺序 127
SPE的指令顺序 129
内存流控制器顺序机制 130
同步机制使用场景 132
7.5原子操作 133
PPE原子同步指令 133
PPE同步原语 133
SPE原子同步命令 138
SPE同步原语 138
第8章 向量编程 146
8.1 SIMD基础 147
PPE上的SIMD支持 148
用Vector/SIMD多媒体指令编程示例 149
SPE上的SIMD支持 151
PPE和SPE SIMD的异同 152
8.2 SIMD编程技巧 154
shuffle的运用 154
结构数组和数组结构 160
8.3从PPE移植SIMD代码到SPE 162
从PPE移植代码到SPE需要考虑的问题 162
一个移植的例子:欧拉粒子系统模拟 163
8.4复数相乘示例 175
第9章 Cell BE性能分析 179
9.1 Cell BE性能分析工具简介 180
OProflle 180
spu…timing 185
VPA 191
第10章 CellBE性能优化 203
10.1数据划分 206
输入数据 206
输出数据 207
10.2双缓冲 208
输入双缓冲 208
输入/输出双缓冲 210
共享输入/输出缓冲区 212
10 3 SIMD 214
10 4分支优化 215
函数内联 215
位选择指令 215
分支预测 217
循环展开 217
10.5负载平衡 218
10.6小结 220
第11章 优化实例 221
11.1 JPEG编/解码 222
JPEG编/解码过程 222
程序移植 223
性能分析 223
SPE优化 224
结果分析 230
11.2 Linpack Benchmark 232
LInpack Benchmark简介 232
串行程序算法 233
并行程序 235
在Cell上实现Linpack Benchmark 237
11.3小结 243
第12章 编程模型 246
12.1并行编程模型 247
并行系统编程的问题及分类 247
MPI介绍 250
OpenMP介绍 252
数据流处理介绍 253
12.2 Cell BE处理器编程 254
PPE编程 256
SPE编程 256
并行编程 258
12.3 Cell BE上的编程模型支持 266
DaCS简介 266
ALF简介 268
OpenMP简介 269
其他编程框架 270
12.4小结 273
第13章 ALF编程 274
13.1 ALF概述 275
计算核 275
任务 276
数据块与数据传输列表 278
ALF运行库 279
ALF实例:矩阵相加 280
13.2 ALF详细介绍 286
计算核的内存模型 286
数据传输列表的类型 288
任务描述字 289
任务上下文 291
任务的种类 296
任务间的同步 297
数据块调度 300
13.3 ALF程序的性能优化 302
数据划分 303
数据块的多次使用 304
数据块的大小和双缓冲 305
13.4本章小节 306
第14章 高级话题 307
14.1调试 308
printf 308
GDB简介 310
使用调试器 310
在Cell BE中调试 315
新的GDB命令 323
14.2代码重叠 325
工作原理 326
代码重叠示例 327
程序规范 331
SDK例程 331
GNU SPE链接器 334
14.3常见错误 335
程序停顿 335
线程相关问题 336
控制代码大小 337
Bus Error 339
DMA List传输限制 340
SPE端开辟内存缓冲 340
DMA传输中的其他注意事项 340
附录A PPE指令集 343
附录B SPE指令集 369
附录C 缩写表 381
附录D 术语表 385
参考文献 388