《Cell/B.E.处理器编程手册》PDF下载

  • 购买积分:20 如何计算积分?
  • 作  者:徐晟,刘星,余江等编著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2009
  • ISBN:9787121079214
  • 页数:714 页
图书介绍:本书是中文版的Cell/B.E.处理器编程手册,是Cell/B.E.处理器的通用编程参考书。本书介绍了基于Cell/B.E.处理器的程序开发所需要的全部独特机制,此外还涵盖了如何帮助程序员在Cell/B.E.处理器上开发用户应用程序、库、驱动程序、中间件、编译器,以及操作系统等相关内容。本书主要分通用硬件和编程环境概述、其他硬件概述和特权态(管理态)编程、问题态(用户态)编程三部分。本书假设读者已经具备C/C++编程经验,并且熟悉单指令多数据(SIMD)向量指令集,例如PowerPC体系结构中的向量/SIMD多媒体扩展指令集、AltiVec、Intel MMX、SSE、3DNOW!、x86-64或者VIS指令集。本书不依赖于任何系统,且不对开发工具或操作系统环境做任何假设。

第1章 Cell宽带引擎处理器概述 1

1.1 背景 2

1.1.1 设计目标 2

1.1.2 功率消耗、内存和频率 3

1.1.3 本书内容 4

1.2 硬件环境 4

1.2.1 处理器部件 4

1.2.2 部件互连总线 5

1.2.3 存储器接口控制器 5

1.2.4 Cell宽带引擎接口单元 6

1.3 编程环境 6

1.3.1 指令集 6

1.3.2 存储域和接口 7

1.3.3 字节排序法和比特表示法 9

1.3.4 运行环境 9

第2章 PowerPC处理器部件 10

2.1 PowERPC处理器单元 11

2.2 PowERPC处理器存储子系统 12

2.3 PPE寄存器 13

2.4 PowERPC指令 15

2.4.1 数据类型 15

2.4.2 寻址模式 16

2.4.3 指令 16

2.5 向量/SIMD多媒体扩展指令 17

2.5.1 SIMD向量化 17

2.5.2 数据类型 18

2.5.3 寻址模式 19

2.5.4 指令类型 19

2.5.5 指令 20

2.5.6 图形舍入模式 20

2.6 向量/SIMD多媒体扩展C/C++语言内置指令 20

2.6.1 向量数据类型 20

2.6.2 向量值文字表述 20

2.6.3 内置指令 21

第3章 协同处理部件 23

3.1 协同处理单元 24

3.1.1 本地存储 24

3.1.2 寄存器堆 27

3.1.3 可执行单元 27

3.1.4 浮点型的支持 28

3.2 内存流控制器 30

3.2.1 通道 31

3.2.2 邮箱和信令 31

3.2.3 MFC命令和命令队列 32

3.2.4 DMA控制器 32

3.2.5 协同内存管理单元 33

3.3 SPU指令集 33

3.3.1 数据类型 34

3.3.2 指令 34

3.4 C/C++语言内建指令 34

3.4.1 向量数据类型 35

3.4.2 向量文字(Vector Literals) 35

3.4.3 内建指令 35

第4章 虚拟存储环境 36

4.1 简介 36

4.2 PPE存储管理 37

4.2.1 存储管理单元 38

4.2.2 地址转换过程 39

4.2.3 地址转换使能 39

4.2.4 有效-实地址的转换 40

4.2.5 分段 42

4.2.6 分页 49

4.2.7 快表 49

4.2.8 实地址模式 54

4.2.9 32位模式下的有效地址 57

4.3 SPE存储管理 57

4.3.1 协同内存管理(SMM)单元 57

4.3.2 地址转换使能 58

4.3.3 分段 59

4.3.4 分页 61

4.3.5 快表 61

4.3.6 实地址模式 69

4.3.7 异常处理和存储保护 69

第5章 内存映射 73

5.1 简介 73

5.1.1 配置环的初始化 74

5.1.2 内存区域的分配 75

5.1.3 内存中的保留区域 77

5.1.4 保护属性 77

5.2 PPE内存映射 77

5.2.1 PPE内存映射寄存器 77

5.2.2 预定义的实地址位置 78

5.3 SPE内存映射 78

5.3.1 SPE本地存储的内存映射 79

5.3.2 SPE内存映射寄存器 80

5.4 BEI内存映射寄存器 81

输入和输出 82

第6章 高速缓存管理 83

6.1 PPE高速缓存 83

6.1.1 配置 84

6.1.2 概述 84

6.1.3 L1高速缓存 85

6.1.4 跳转历史表与链接栈 91

6.1.5 L2高速缓存 91

6.1.6 L1和L2高速缓存管理指令 96

6.1.7 有效地址至实地址的转换阵列 99

6.1.8 快表TLB 99

6.1.9 指令预取队列管理 99

6.1.10 加载子单元管理 100

6.2 SPE高速缓存 100

6.2.1 快表 100

6.2.2 原子单元与原子缓存 100

6.3 替换管理表 103

6.3.1 PPE的TLB置换管理表 103

6.3.2 PPE的L2高速缓存替换管理表 106

6.3.3 SPE的TLB替换管理表 107

6.4 VO地址转换缓存 107

第7章 输入/输出体系结构 108

7.1 简介 108

7.1.1 输入/输出接口 108

7.1.2 系统配置 109

7.1.3 输入/输出寻址 110

7.2 数据与访问类型 111

7.2.1 数据长度与对齐 111

7.2.2 原子访问 111

7.3 寄存器与数据结构 111

7.3.1 IOCmd配置寄存器 112

7.3.2 I/O段表起始地址寄存器 112

7.3.3 I/O段表 114

7.3.4 I/O页表 115

7.3.5 IOC基地址寄存器 118

7.3.6 I/O异常状态寄存器 120

7.4 I/O地址转换 120

7.4.1 转换概述 120

7.4.2 I/O转换步骤 120

7.5 V/O异常 123

7.5.1 I/O异常原因 123

7.5.2 V/O异常状态寄存器 124

7.5.3 V/O异常屏蔽寄存器 124

7.5.4 V/O异常响应 124

7.6 VO地址转换缓存 124

7.6.1 IOST缓存 124

7 6.2 IOPT缓存 126

7.7 I/O存储模型 130

7.7.1 内存一致性 131

7.7.2 存储访问顺序 131

7.7.3 通过一个IOIF到其他V/O单元的访问 136

7.7.4 例程 137

第8章 资源分配管理 143

8.1 简介 143

8.2 请求方 144

8.2.1 PPE和SPE 145

8.2.2 输入/输出 145

8.3 资源管理 146

8.4 令牌 147

8.4.1 单Cell/B.E.处理器系统所需令牌 147

8.4.2 无须令牌的操作 151

8.4.3 多Cell/B.E.处理器系统所需要的令牌 151

8.5 令牌管理器 152

8.5.1 请求跟踪 152

8.5.2 令牌授予 152

8.5.3 未分配的RAG 154

8.5.4 高优先级令牌请求 154

8.5.5 内存令牌 155

8.5.6 输入/输出令牌 157

8.5.7 未使用令牌 158

8.5.8 内存区块,IOIF分配速率和未使用令牌 158

8.5.9 令牌请求和授予的范例 158

8.5.10 分配比例 161

8.5.11 有效地判断TKM优先级寄存器的值 162

8.5.12 从资源到令牌管理器的反馈 164

8.6 PPE、SPEs、MIC和IOC的配置 166

8.6.1 配置寄存器概要 166

8.6.2 SPE地址范围检查 168

8.7 用MMIO改变资源管理器寄存器的设置 169

8.7.1 对RAID的改变 169

8.7.2 改变请求方的令牌请求启用状态 170

8.7.3 改变请求方的地址映射 171

8.7.4 改变请求方对每次存取中多令牌的使用 171

8.7.5 改变对TKM的反馈 172

8.7.6 改变TKM寄存器 172

8.8 令牌请求与令牌授予之间的延迟 173

8.9 系统管理器接口 173

第9章 PPE中断 174

9.1 简介 174

9.2 中断体系结构概要 175

9.3 中断寄存器 178

9.4 中断处理 179

9.5 中断向量及定义 180

9.5.1 系统复位中断(可选的向量地址或x‘00..00000100’) 181

9.5.2 机器检查中断(x‘00..00000200’) 182

9.5.3 数据存储中断(x‘00..00000300’) 183

9.5.4 数据段中断 185

9.5.5 指令存储中断(x‘00..00000400’) 185

9.5.6 指令段中断(x‘00..00000480’) 186

9.5.7 外部中断(x‘00..00000500’) 186

9.5.8 对齐中断(x‘00..00000600’) 187

9.5.9 程序中断(x‘00..00000700’) 187

9.5.10 浮点不可用中断(x‘00..00000800’) 189

9.5.11 递减器中断(x‘00..00000900’) 189

9.5.12 系统管理器递减器中断(x‘00..00000980’) 189

9.5.13 系统调用中断(x‘00..00000C00’) 190

9.5.14 跟踪中断(x‘00..00000D00’) 190

9.5.15 VXU不可用中断(x‘00..00000F20’) 191

9.5.16 系统错误中断(x‘00..00001200’) 192

9.5.17 维护中断(x‘00..00001600’) 193

9.5.18 温度管理中断(x‘00..00001800’) 194

9.6 直接外部中断 195

9.6.1 中断的表示 196

9.6.2 IIC中断寄存器 197

9.6.3 SPU与MFC中断 201

9.6.4 其他外部中断 202

9.7 间接外部中断 206

9.7.1 间接外部中断体系结构 206

9.7.2 间接外部中断的实现 207

9.8 转发至PPE的SPU和MFC中断 209

9.8.1 中断类型和类别 209

9.8.2 中断寄存器 210

9.8.3 中断定义 214

9.8.4 处理SPU和MFC中断 217

9.9 中断线程目标 218

9.10 中断优先级 219

9.11 中断延迟 221

9.12 中断产生时机器状态寄存器的设置 221

9.13 中断与系统管理器 222

9.14 中断与多线程 223

9.15 停机检查 223

9.16 外部中断控制器使用 223

9.17 Cell/B.E.与PowerPC中断间的关系 223

第10章 PPE多线程 225

10.1 多线程程序设计指导 226

10.2 线程资源 227

10.2.1 寄存器 228

10.2.2 数组、队列和其他结构 228

10.2.3 流水线共享和多线程支持 229

10.3 线程状态 231

10.3.1 特权态 231

10.3.2 挂起或启用状态 232

10.3.3 阻塞或停顿状态 232

10.4 线程控制和状态寄存器 232

10.4.1 机器状态寄存器 233

10.4.2 硬件实现寄存器0(HID0) 234

10.4.3 逻辑分区控制寄存器(LPCR) 235

10.4.4 控制寄存器(CTRL) 235

10.4.5 本地和远程线程状态寄存器(TSRL和TSRR) 236

10.4.6 线程切换控制寄存器(TSCR) 237

10.4.7 线程切换超时寄存器(TTR) 238

10.5 线程优先级 238

10.5.1 线程优先级组合 238

10.5.2 选择有用的线程优先级 240

10.5.3 指令调度优先级组合的实例 241

10.6 线程控制和配置 243

10.6.1 恢复和挂起线程 244

10.6.2 设置指令分发策略:线程优先级和临时停顿 244

10.6.3 预防饥饿:进度监测 246

10.6.4 多线程操作状态切换 246

10.7 流水线事件和指令分发 247

10.7.1 指令分发原则 247

10.7.2 使指令分发停顿的流水线事件 247

10.8 挂起和恢复线程 249

10.8.1 线程挂起 249

10.8.2 线程恢复 250

10.8.3 挂起状态线程的异常和中断交互 251

10.8.4 中断的目标线程和行为 253

第11章 系统管理器和逻辑分区 255

11.1 简介 255

11.1.1 系统管理器和操作系统 256

11.1.2 分区资源的划分 256

11.1.3 逻辑分区管理流程图示例 257

11.2 PPE逻辑分区机制 258

11.2.1 系统管理状态使能 258

11.2.2 系统管理状态寄存器 259

11.2.3 实存管理 260

11.2.4 中断及环境管理 264

11.3 SPE逻辑分区机制 266

11.3.1 访问特权级 267

11.3.2 存储管理机制 267

11.3.3 中断控制 269

11.3.4 其他SPE管理机制 270

11.3.5 缓存管理 270

11.3.6 错误管理 271

11.4 I/O地址转换 271

11.4.1 IOC存储管理单元 271

11.4.2 I/O段表和页表 272

11.5 资源分配管理 272

11.5.1 逻辑分区与资源管理的结合 272

11.5.2 资源分配组和令牌管理器 273

11.6 功耗管理 273

11.6.1 进入低功耗状态 273

11.6.2 线程状态的挂起和恢复 274

11.7 错误隔离 274

11.8 代码范例 274

11.8.1 错误代码和系统管理调用(hcall)令牌 275

11.8.2 PowerPC 64位ELF格式的系统管理调用的C函数接口 275

第12章 SPE上下文切换 277

12.1 简介 277

12.2 数据结构 278

12.2.1 本地存储上下文保存区 278

12.2.2 上下文保存区 278

12.3 SPE上下文切换序列概述 279

12.3.1 SPE上下文的保存 280

12.3.2 SPE上下文的恢复 281

12.4 实现技巧 282

12.4.1 加锁 282

12.4.2 看门狗计时器 282

12.4.3 事件的等待 282

12.4.4 PPE对SPU通道的访问机制 282

12.4.5 SPE中断 283

12.4.6 MFC DMA队列的挂起 283

12.4.7 SPE上下文保存与恢复序列的代码 283

12.4.8 SPE参数传递 283

12.4.9 SPE上下文保存和恢复序列代码的存储 284

12.4.10 复位SPE状态 284

12.4.11 调度 284

12.4.12 轻量级SPE上下文保存 284

12.5 SPE上下文切换详细步骤 285

12.5.1 上下文保存代码 285

12.5.2 上下文恢复代码 291

12.6 系统管理器下的实现 300

第13章 时基与递减器 301

13.1 简介 301

13.2 时基机制 301

13.2.1 时钟域 301

13.2.2 时基寄存器 302

13.2.3 时基频率 303

13.2.4 时基同步模式控制 304

13.2.5 TB寄存器的读与写 307

13.2.6 计算Time-of-Day 308

13.3 递减器 309

13.3.1 PPE递减器 309

13.3.2 SPE递减器 310

13.3.3 使用SPU递减器监控SPU的代码性能 310

第14章 对象、可执行文件及SPE的加载 315

14.1 简介 315

14.2 ELF的概述与扩展 316

14.2.1 概述 316

14.2.2 SPE-ELF扩展 317

14.3 运行时的初始化及要求 319

14.3.1 PPE的初始机器状态 319

14.3.2 Linux环境下SPE的初始机器状态 321

14.4 链接器的要求 323

14.4.1 对SPE链接器的要求 324

14.4.2 对PPE链接器的要求 324

14.5 CESOF格式 324

14.5.1 CESOF概述 325

14.5.2 CESOF中ELF的使用约定 326

14.5.3 嵌入PPE-ELF对象中的SPE-ELF可执行对象:.spu.elf节 326

14.5.4 spe_program_handle的数据结构 327

14.5.5 TOE: EA空间中定义的访问符号值 329

14.5.6 未来对CESOF软件工具链的改进 333

14.6 SPE运行时加载器 333

14.6.1 运行时加载的概述 334

14.6.2 SPE运行时加载器的要求 334

14.6.3 SPE运行时加载器的示范框架定义 336

14.7 SPE执行环境 341

14.7.1 SPE Stop-and-Signal指令的信号类型 341

第15章 电源与温度管理 343

15.1 电源管理 343

15.1.1 Cell/B.E.慢速状态 344

15.1.2 PPE暂停态(0) 345

15.1.3 SPU暂停态 346

15.1.4 MFC暂停态 346

15.2 温度管理 347

15.2.1 温度管理操作 347

15.2.2 配置环的设置 349

15.2.3 热寄存器 349

15.2.4 热传感状态寄存器 349

15.2.5 热传感器中断寄存器 349

15.2.6 动态温度管理寄存器 352

第16章 性能监测 356

16.1 工作原理 357

16.2 事件(信号) 357

16.3 性能计数器 357

16.4 跟踪数组 358

第17章 SPE通道和相关MMIO接口 359

17.1 简介 359

17.1.1 SPE内部通道的使用 359

17.1.2 PPE和其他的SPE访问通道 360

17.1.3 通道特性 360

17.1.4 通道概要 361

17.1.5 通道指令 361

17.1.6 通道容量与阻塞 361

17.2 SPU事件管理通道 365

17.3 SPU信号通知通道 365

17.4 SPU递减器 366

17.4.1 SPU写递减器通道 366

17.4.2 SPU读递减器通道 366

17.5 MFC写多源同步请求通道 367

17.6 SPU读机器状态通道 367

17.7 SPU写状态保存-恢复通道 368

17.8 SPU读状态保存-恢复通道 368

17.9 MFC命令参数通道 368

17.9.1 MFC本地存储器地址通道 370

17.9.2 MFC有效地址高32位通道 370

17.9.3 MFC有效地址低32位/列表地址通道 370

17.9.4 MFC传输大小/列表大小通道 371

17.9.5 MFC命令标签标识符通道 372

17.9.6 MFC类标识符和MFC命令操作码通道 372

17.10 MFC标签组管理通道 373

17.10.1 MFC写标签组查询屏蔽通道 373

17.10.2 MFC读标签组查询屏蔽通道 374

17.10.3 MFC写标签状态更新请求通道 374

17.10.4 MFC标签组状态读通道 375

17.10.5 MFC读列表停顿-通知标签状态通道 375

17.10.6 MFC写列表停顿-通知标签确认通道 376

17.11 MFC原子命令状态读通道 377

17.12 SPU邮箱通道 378

第18章 SPE事件 379

18.1 简介 379

18.2 事件和事件管理通道 380

18.2.1 事件管理通道的事件条件和位定义 380

18.2.2 挂起事件寄存器 381

18.2.3 SPU读事件状态 382

18.2.4 SPU写事件屏蔽 383

18.2.5 SPU写事件确认 383

18.2.6 SPU读事件屏蔽 384

18.3 SPU中断机制 384

18.4 中断地址保存-恢复通道 385

18.4.1 SPU读状态保存-恢复通道 385

18.4.2 SPU写状态保存-恢复通道 385

18.4.3 使用SPU写状态保存-恢复通道的嵌套中断 385

18.5 事件处理协议 386

18.5.1 使用轮询或停顿的方法处理同步事件 386

18.5.2 使用中断的方法处理异步事件 387

18.5.3 中断时的临界段保护 388

18.6 事件的处理准则 388

18.6.1 多个启用事件的协议 388

18.6.2 处理多源同步事件的步骤 390

18.6.3 处理特权注意事件的步骤 391

18.6.4 处理锁行保留丢失事件的步骤 392

18.6.5 处理信号通知1可用事件的步骤 393

18.6.6 处理信号通知2可用事件的步骤 394

18.6.7 处理SPU写出邮箱可用事件的步骤 394

18.6.8 处理SPU写出中断邮箱可用事件的步骤 395

18.6.9 处理SPU递减器事件的步骤 396

18.6.10 处理SPU读入邮箱可用事件的步骤 397

18.6.11 处理MFC SPU命令队列可用事件的步骤 398

18.6.12 处理DMA列表命令停顿-通知事件的步骤 398

18.6.13 处理标签组状态更新事件的步骤 400

18.7 开发一个基本的中断处理函数 401

18.7.1 基本中断协议的特征和设计 401

18.7.2 FLIH的设计 401

18.7.3 SLIH设计和注册SLIH函数 404

18.7.4 应用程序代码范例 406

18.8 嵌套中断的处理函数 407

18.8.1 嵌套处理函数的设计 407

18.8.2 嵌套中断的FLIH设计 407

18.9 专用中断栈的使用 409

18.10 应用举例 411

18.10.1 SPU递减器事件 411

18.10.2 标签组状态更新事件 412

18.10.3 DMA列表命令停顿-通知事件 413

18.10.4 MFC SPU命令队列可用事件 415

18.10.5 SPU读入邮箱可用事件 415

18.10.6 SPU信号通知可用事件 416

18.10.7 锁行保留丢失事件 416

18.10.8 特殊注意事件 416

第19章 DMA传输与处理器交互通信 417

19.1 简介 417

19.2 MFC命令 418

19.2.1 DMA命令 419

19.2.2 DMA列表命令 421

19.2.3 同步命令 421

19.2.4 命令修饰 422

19.2.5 标签组 422

19.2 6 MFC命令发射 423

19.2.7 类标识符的替换和传输 424

19.2.8 DMA命令的完成 425

19.3 PPE发起的DMA传输 425

19.3.1 MFC命令发射 426

19.3.2 MFC命令队列控制寄存器 427

19.3.3 DMA命令发射状态和错误 428

19.4 SPE发起的DMA传输 431

19.4.1 MFC命令发射 432

19.4.2 MFC命令队列监控通道 433

19.4.3 DMA命令发射状态和错误 434

19.4.4 DMA列表命令的例程 437

19.5 高效MFC命令使用指南 440

19.6 邮箱 440

19.6.1 邮箱的读和写 441

19.6.2 邮箱阻塞 442

19.6.3 等待预期消息 442

19.6.4 邮箱的使用 442

19.6.5 SPU写出邮箱 443

19.6.6 SPU读入邮箱 447

19.7 信号通知 451

19.7.1 SPU信号通道 451

19.7.2 信号的使用 452

19.7.3 模式配置 452

19.7.4 SPU信号通知通道1 452

19.7.5 SPU信号通知通道2 453

19.7.6 发送信号 453

19.7.7 接收信号 456

19.7.8 邮箱和信号通知之间的区别 458

第20章 共享存储同步 459

20.1 共享存储访问定序 459

20.1.1 存储模型 459

20.1.2 PPE定序指令 461

20.1.3 SPU定序指令 465

20.1.4 MFC定序机制 468

20.1.5 MFC多源同步机制 472

20.1.6 定序机制的应用场景 478

20.2 PPE原子同步 479

20.2.1 原子同步指令 479

20.2.2 PPE同步原语 481

20.2.3 SPE同步原语 484

20.3 SPE原子同步 491

20.3.1 用于原子更新的MFC命令 491

20.3.2 MFC读原子命令状态通道 493

20.3.3 活锁避免 493

20.3.4 同步原语 495

第21章 并行编程 503

21.1 挑战 503

21.2 并行编程模式 504

21.2.1 术语 504

21.2.2 寻找并行 505

21.2.3 并行编程策略 506

21.3 并行编程的步骤 508

21.3.1 第1步:理解问题 508

21.3.2 第2步:选择编程工具和编程技术 508

21.3.3 第3步:开发高层并行策略 509

21.3.4 第4步:开发底层并行策略 509

21.3.5 第5步:设计有效的数据结构 509

21.3.6 第6步:循环改进 510

21.3.7 第7步:性能调优 510

21.4 CELL/B.E.处理器中并行的级别 511

21.4.1 SIMD并行 512

21.4.2 超标量并行 512

21.4.3 硬件多线程 512

21.4.4 多执行单元 512

21.4.5 多个Cell/B.E.处理器 512

21.5 并行化工具 513

21.5.1 语言扩展:内置指令与指示 513

21.5.2 编译器对单-共享内存的支持 514

21.5.3 OpenMP指示 515

21.5.4 编译器控制的软件缓存 516

21.5.5 用于代码分割的编译器及运行时支持 519

21.5.6 线程库 520

第22章 单指令多数据编程 521

22.1 单指令多数据基础 521

22.1.1 将标量数据转为向量数据 522

22.1.2 系统学习SIMD编程 525

22.1.3 编写高效的自动SIMD化代码 532

22.2 支持自动SIMD化的编译器 534

22.2.1 动机与挑战 535

22.2.2 正确和错误的SIMD化实例 537

22.3 编译器的SIMD化框架 539

22.3.1 阶段一:基本块聚集 541

22.3.2 阶段二:短循环聚集 541

22.3.3 阶段三:循环级聚集 542

22.3.4 阶段四:对齐反虚拟化 543

22.3.5 阶段五:长度反虚拟化 547

22.3.6 阶段六:SIMD化代码生成和指令调度 547

22.3.7 SIMD化例程:多源SIMD并行 549

22.3.8 SIMD化例程:多数据长度 551

22.3.9 向量操作和混和模式SIMD化 554

22.4 其他编译器优化 554

22.4.1 OpenMP 554

22.4.2 子字数据类型 555

22.4.3 SPE的后端调度 556

22.4.4 利用典型优化 556

第23章 SIMD扩展与SPU编程 558

23.1 结构差异 558

23.1.1 寄存器 559

23.1.2 数据类型 560

23.1.3 指令集差异 561

23.2 将PPE上的SIMD指令移植到SPE上 563

23.2.1 代码映射 563

23.2.2 简单宏转换 564

23.2.3 全功能映射 567

23.2.4 具有代码可移植性的typedef 567

23.2.5 目标编译器的定义 568

第24章 SPE编程技巧 569

24.1 DMA传输 570

24.1.1 从SPE端启动DMA传输 570

24.1.2 重叠DMA传输和计算 570

24.1.3 DMA传输和LS访问 575

24.2 SPU流水线和双发射原则 575

24.3 跳转消除和预测 576

24.3.1 函数内联和循环展开 577

24.3.2 使用位选指令进行预测 577

24.3.3 跳转提示 578

24.3.4 基于程序的跳转预测 581

24.3.5 概要分析或语言提示跳转预测 583

24.3.6 软件跳转-目标地址缓冲 584

24.3.7 使用控制流记录跳转历史 584

24.4 循环展开和流水线化 585

24.5 偏移指针 587

24.6 转换和查表 587

24.6.1 字节混洗指令 587

24.6.2 快速8位SIMD查表 588

24.7 整数乘 591

24.8 标量代码 591

24.8.1 标量加载和存储 591

24.8.2 将标量数据类型转换为向量数据类型 592

24.9 非对齐加载 593

附录A PPE指令集和内置指令 594

附录B SPU指令集与内置指令 637

附录C 性能监测信号 659

术语表 688