第1章 X86 SSE/AVX指令集1 h+ h+ ]; u! N0 L
1.1 SSE内置函数
/ y- c# k8 Q1 k" _3 W6 q( A# T1.1.1 算术运算+ R. r* K: ^! W1 f8 f
1.1.2 逻辑运算/ o7 ]9 q) _8 d; `
1.1.3 比较
S7 x" O! x& N0 A7 ?" E+ I9 ?1.1.4 加载和存储
0 L j9 p5 T, B! v1.2 AVX内置函数' R# L/ ~) s L* @
1.2.1 算术运算
8 ^5 z x: P* q# l# N, `1.2.2 逻辑运算
2 A# {. s2 X+ B3 _: U1.2.3 比较
+ Q, \' w/ r% Q' h T- |1.2.4 加载和存储
( F9 T4 s, R% T2 ~4 w" A4 t1.3 优化实例及分析. B. u) ~( U& {! p, E& T! a) R; R
1.3.1 如何测得CPU的浮点峰值性能9 I( i9 h. C5 r) \* w0 X2 v/ h
1.3.2 积分计算圆周率π# C, x* o# C2 I) d1 q
1.3.3 稀疏矩阵向量乘法4 l$ i0 o+ G0 W: b4 o& {
1.3.4 二维单通道图像离散卷积
/ \8 `3 v9 x# F5 S' g1.4 本章小结
) H8 P' ^7 J# K( c; a i
第2章 ARM NEON SIMD 指令优化
8 j2 E5 L7 Q. a( _2.1 NEON指令集综述+ @+ i7 ?" M5 G# b# F- J! \
2.2 ARM A15 处理器性能1 Q, }6 T- h% e, H- R3 E7 f
2.3 NEON 支持的操作
1 ]1 ]: c& f; k/ f2.3.1 基本算术运算
. c2 a3 [, v& A( Z( D' e+ E; ?( E2.3.2 基本比较运算
& }- [5 d6 R! Z, |. @+ r9 }. Y2.3.3 基本数据类型转换及舍入运算
+ m8 {8 D* _, Q r1 D2.3.4 基本位运算
/ r6 m9 R1 d! f$ Y2.3.5 基本逻辑运算& m1 c9 ~0 X6 s4 k% X
2.3.6 基本设置加载存储操作
/ Z2 C$ E4 \# ]( ~2.3.7 特殊操作
4 D; x4 J, Q% T% w& {2.4 应用实例7 |; y9 u. q4 H) b+ C
2.4.1 彩色图像转灰度图像
; L( h! ~; U7 M4 y2.4.2 矩阵转置
0 x$ C ?, \3 [- w2.4.3 矩阵乘8 J9 @7 L+ l4 s% \( i3 C
2.5 本章小结
2 u' q. Q0 q4 P) }7 H9 D7 h9 }第3章 OpenMP程序设计' t2 S- P- u$ j& m! e$ E( v4 P
3.1 OpenMP编程模型, D/ q: u- m8 a3 o; p# R, W
3.1.1 OpenMP执行模型7 o) p! l5 U6 C4 v. D4 U& N( J
3.1.2 OpenMP存储器模型
, _0 L7 R q( c) ]8 i* i- s2 L& X3.2 环境变量9 x- Y: U3 H w3 q
3.3 函数4 y: j' r' Q/ Q9 i0 Y: K* n
3.3.1 普通函数2 D+ _, M b7 K, Z+ t# p
3.3.2 锁函数
- D3 a4 E# o! t8 y2 L- s/ |3.4 OpenMP编译制导语句" w; p, e" c( L3 p
3.4.1 常用的OpenMP构造
8 }% x+ [* n" u) D9 |3.4.2 常用的OpenMP子句5 e# v& N8 Y5 e. V- z
3.5 OpenMP异构并行计算
; |# _0 ^8 G/ d0 w R" \3.6 OpenMP程序优化$ j! |! U/ P6 M3 w3 E5 l' C- X
3.6.1 OpenMP程序优化准则
- y- Q; c# z+ K$ o5 R* i+ G7 h3.6.2 OpenMP并行优化实例
% ~4 E) ]) q- b/ m5 d3 N" X3 X; c3.7 本章小结
' v8 }+ f- J e" ]3 \/ r0 a. F
第4章 基于GPU的异构并行计算环境:CUDA与OpenCL3 B5 I# N% ^5 n3 G) S9 r% v
4.1 GPU计算概述2 }# a$ E2 G- ^! \ T8 b
4.1.1 GPU计算历史; A8 C4 W& N2 c2 j2 {* _
4.1.2 CUDA概述
8 P) S5 ?8 k+ B% s4.1.3 OpenCL概述
" U5 }$ y" A ~/ }; [9 c4.2 异构并行计算模型/ c$ s7 k3 B. T; x+ t
4.2.1 平台模型1 R$ a) _" W( ^2 j
4.2.2 执行模型3 F: z- _3 I; m& C6 X! e+ s; a
4.2.3 存储器模型
8 A, e& j5 C! F4.2.4 编程模型
9 R0 ^# P& ^9 {4 V4.3 C语言接口" C5 j$ X1 v7 ]2 L$ a* b @
4.3.1 OpenCL C语言
1 {# L2 v' ~1 X, S* f7 `4.3.2 CUDA C语言
: j& c. Y7 i( F. C: b4.4 基于GPU的异构并行计算性能优化' A& G0 D& h$ E& {( n" A+ H; [; v
4.4.1 总体优化准则
7 `5 `" Y+ }- a! ~4.4.2 全局存储器优化
! m4 t' R/ `$ i: i9 H4.4.3 合并访问7 F m5 [* p1 m
4.4.4 局部存储器8 }1 k$ p% Q! y6 C! A
4.4.5 存储体冲突
- m f% A6 z; F1 l/ U4 `/ w3 p4 E4.4.6 常量存储器优化
% t5 C" X; P9 X" S4 H' P. N+ Q4.4.7 CUDA纹理存储器优化
k/ ?6 O) c) Q S. U" u A7 h4.4.8 寄存器及私有存储器优化
$ b( l A2 L7 Q; {3 _3 K1 ~; c( s4.4.9 工作组数目及大小
2 L" u0 w( u5 e/ t* U" Y; a) f3 d5 C4.4.10 占用率4 l0 W' _9 h( p0 [
4.4.11 指令优化
3 F/ j- r# V% J! X4.4.12 分支优化
8 W2 ^! I; B8 R# d1 B3 }: {4.4.13 数据传输优化' p. N9 [; j4 ^ h8 e6 c8 `% \
4.5 GPU与CPU精度差别
! k2 g; y2 P4 I0 L/ A4.6 矩阵转置
9 T9 V$ x# U3 _" G( k* |, G4.6.1 初次实现
0 O: j' w# q, r. S- G% R% d4.6.2 满足合并访问的实现0 c# r& \" t" O
4.6.3 没有存储体冲突的实现
% j* ^9 M1 W3 S6 Y4.7 矩阵乘法) x' w$ l" Z+ A/ o$ V. i. a! ^
4.7.1 初次实现
% ^2 M+ T/ I$ C* ^4.7.2 矩阵分块实现
4 O+ M2 M' H. U7 v4.8 本章小结
. i/ X9 c- _9 J9 k9 c
第5章 OpenACC
- Y: M2 t) l5 F+ e) D7 V5.1OpenACC 编程模型
7 ~7 S3 b' }$ r; ?7 \+ v( _- o5.1.1 执行模型
, r. p( ]0 u9 A1 m# \5 s2 W5.1.2存储器模型2 ~- O0 A* Q4 Y- u' q- r
5.2编译制导语句& f* v! M' @' {% F' K
5.2.1kernels构造
0 u7 n4 q4 x' [, t. ~7 [5.2.2parallel构造- s0 \) ~: g' X
5.2.3 线程配置相关子句- u1 d) |. X7 U6 p2 g, D% c5 ? R
5.2.4data构造" Q: _8 G; E; s$ J3 y; S+ t
5.2.5loop构造0 @ e8 N7 m! x; [' _* t# k( [3 I
5.2.6 atomic构造& d$ t* ^4 Z. Q7 Q
5.2.7 dtype子句; ?" O3 E% H9 j$ ?, E
5.2.8reduction子句8 p; v& J; |& A' i7 R$ [
5.2.9变量可见性子句
" _: s9 `$ c7 q' M$ h$ P, n* m5.2.10if子句( m7 Z' b# K/ E! w" ]$ M/ M
5.2.11async和wait
! d7 D' e5 J- d z. l- Y5.3OpenACC和CUDA协作
/ K: z. q9 k7 C- b( y! M5.3.1CUDA使用OpenACC生产的数据
6 @3 K- c9 [1 ^: ^5.3.2 OpenACC使用CUDA生产的数据/ z+ c, i9 s5 x* A
5.4两小时性能提升10倍
$ \3 Y* p; I7 _5 U9 R5.5本章小结
+ _6 I9 f s/ c0 q: K G* c* e6 J第6章 多核向量处理器架构及OpenCL程序映射0 V* ~6 J5 o3 A% a2 |+ |9 [
6.1多核向量处理器架构
3 Z- a+ g1 g6 a6.1.1Intel Haswell CPU 架构& c. M/ V; u5 K+ U
6.1.2ARM A15 多核向量处理器架构
) b0 W' _( }( ]: ~2 e+ ]6.1.3AMD GCN GPU架构- b: I1 y) L9 X3 U$ h5 t- C! e X
6.1.4NVIDIA Kepler 和 Maxwell GPU架构8 w" I( D) o. j* c" S
6.2OpenCL 程序在多核向量处理器上的映射
1 _2 c9 D8 \. s% S# {/ q8 z# A6.2.1OpenCL程序在多核向量CPU上的映射8 w( e9 H$ d5 F' O7 }
6.2.2OpenCL程序在NVIDIA GPU上的映射
( b" {+ T# A! J6.2.3OpenCL程序在AMD GCN上的映射
( h; P1 C$ r; z5 d( S' |6.3本章小结
Q5 @' Q5 C# F6 ]7 L* ^, Y' X
第7章 利用多种技术优化图像处理中的算法性能6 g( S4 j# Z/ t* t0 k. q! I
7.1图像滤波* I7 X- t7 Y" t2 e4 h8 _
7.1.1均值滤波
& z4 O7 Y; V! j9 q# i4 {7.1.2中值滤波! S. P% `9 r6 T3 n
7.2图像直方图) N- H0 z x7 Z$ n6 A6 m' {' R
7.2.1OpenMP 实现% C/ F% i ]7 t( o2 t g+ a
7.2.2CUDA 实现
1 ]& Y0 g0 ^* C- M0 c* H7.3曼德勃罗集
7 ~; N9 p" z/ p x. ?7 F8 M7.3.1串行算法
# a$ D v6 W. X8 _0 M7.3.2不适合进行向量化! H0 C, `; @7 M6 ?
7.3.3OpenMP实现- D) p) V }/ W5 U
7.3.4CUDA 实现3 `3 @/ P! X& c& U8 ^& `
7.4本章小结
. i; Q1 n# n' R
第8章 利用多种技术优化线性代数中的算法性能
, }* b9 U' U/ L* m8.1两向量距离
, l: c* R. ~) K- R, ?( ~' z8.1.1串行代码- U% @* f! } d
8.1.2循环展开代码8 P3 q, X$ R9 d
8.1.3AVX指令加速/ g1 x% e4 y1 Z0 o
8.1.4NEON 实现; ?; K2 _# o" j' z' c! t& ]$ J/ _0 h
8.1.5CUDA实现' C5 _) ^" I: I- ]1 S% ^
8.2稠密矩阵与向量乘法
3 n$ G$ e9 Q y' J) [7 m# s2 q8.2.1串行算法
; ~6 N0 u5 O+ \ }5 l8.2.2AVX 指令加速
4 S* o4 l; r' c# D2 m8.2.3NEON 实现
: K$ Y* }5 R- Z* i; m8.2.4CUDA 实现- t/ m3 Y3 w8 p* v0 L
8.2.5OpenMP 实现) c$ f g! b5 _
8.3本章小结