作品简介

本书介绍了并行编程的方法和优化实践,主要结合X86SSE与AVX、ARMNeon、OpenMP、CUDA和OpenCL等讲解了并行编程的技术、方法和最佳实践。第1章讲解X86SSE与AVX的矩阵实现;第2章讲解如何利用ARMNeon进行编程;第3章介绍OpenMP并行程序设计;第4章讲解基于GPU的CUDA和OpenCL程序设计;第5章讲解OpenACC的应用;第6~8章讲解线性代数和图形学在并行编程中的实践与应用,并给出大量示例。

《并行编程方法与优化实践》系刘志文编著。

作品目录

  • 前言
  • 第1章 X86 SSE/AVX指令集
  • 1.1 SSE内置函数
  • 1.1.1 算术运算
  • 1.1.2 逻辑运算
  • 1.1.3 比较
  • 1.1.4 加载和存储
  • 1.2 AVX内置函数
  • 1.2.1 算术运算
  • 1.2.2 逻辑运算
  • 1.2.3 比较
  • 1.2.4 加载和存储
  • 1.3 优化实例及分析
  • 1.3.1 如何测得CPU的浮点峰值性能
  • 1.3.2 积分计算圆周率π
  • 1.3.3 稀疏矩阵向量乘法
  • 1.3.4 二维单通道图像离散卷积
  • 1.4 本章小结
  • 第2章 ARM NEON SIMD指令优化
  • 2.1 NEON指令集综述
  • 2.2 ARM A15处理器性能
  • 2.3 NEON支持的操作
  • 2.3.1 基本算术运算
  • 2.3.2 基本比较运算
  • 2.3.3 基本数据类型转换及舍入运算
  • 2.3.4 基本位运算
  • 2.3.5 基本逻辑运算
  • 2.3.6 基本设置加载存储操作
  • 2.3.7 特殊操作
  • 2.4 应用实例
  • 2.4.1 彩色图像转灰度图像
  • 2.4.2 矩阵转置
  • 2.4.3 矩阵乘
  • 2.5 本章小结
  • 第3章 OpenMP程序设计
  • 3.1 OpenMP编程模型
  • 3.1.1 OpenMP执行模型
  • 3.1.2 OpenMP存储器模型
  • 3.2 环境变量
  • 3.3 函数
  • 3.3.1 普通函数
  • 3.3.2 锁函数
  • 3.4 OpenMP编译制导语句
  • 3.4.1 常用的OpenMP构造
  • 3.4.2 常用的OpenMP子句
  • 3.5 OpenMP异构并行计算
  • 3.6 OpenMP程序优化
  • 3.6.1 OpenMP程序优化准则
  • 3.6.2 OpenMP并行优化实例
  • 3.7 本章小结
  • 第4章 基于GPU的异构并行计算环境:CUDA与OpenCL
  • 4.1 GPU计算概述
  • 4.1.1 GPU计算历史
  • 4.1.2 CUDA概述
  • 4.1.3 OpenCL概述
  • 4.2 异构并行计算模型
  • 4.2.1 平台模型
  • 4.2.2 执行模型
  • 4.2.3 存储器模型
  • 4.2.4 编程模型
  • 4.3 C语言接口
  • 4.3.1 OpenCL C语言
  • 4.3.2 CUDA C语言
  • 4.4 基于GPU的异构并行计算性能优化
  • 4.4.1 总体优化准则
  • 4.4.2 全局存储器优化
  • 4.4.3 合并访问
  • 4.4.4 局部存储器
  • 4.4.5 存储体冲突
  • 4.4.6 常量存储器优化
  • 4.4.7 CUDA纹理存储器优化
  • 4.4.8 寄存器及私有存储器优化
  • 4.4.9 工作组数目及大小
  • 4.4.10 占用率
  • 4.4.11 指令优化
  • 4.4.12 分支优化
  • 4.4.13 数据传输优化
  • 4.5 GPU与CPU精度差别
  • 4.6 矩阵转置
  • 4.6.1 初次实现
  • 4.6.2 满足合并访问的实现
  • 4.6.3 没有存储体冲突的实现
  • 4.7 矩阵乘法
  • 4.7.1 初次实现
  • 4.7.2 矩阵分块实现
  • 4.8 本章小结
  • 第5章 OpenACC
  • 5.1 OpenACC编程模型
  • 5.1.1 执行模型
  • 5.1.2 存储器模型
  • 5.2 编译制导语句
  • 5.2.1 kernels构造
  • 5.2.2 parallel构造
  • 5.2.3 线程配置相关子句
  • 5.2.4 data构造
  • 5.2.5 loop构造
  • 5.2.6 atomic构造
  • 5.2.7 dtype子句
  • 5.2.8 reduction子句
  • 5.2.9 变量可见性子句
  • 5.2.10 if子句
  • 5.2.11 async和wait
  • 5.3 OpenACC和CUDA协作
  • 5.3.1 CUDA使用OpenACC生产的数据
  • 5.3.2 OpenACC使用CUDA生产的数据
  • 5.4 两小时性能提升10倍
  • 5.5 本章小结
  • 第6章 多核向量处理器架构及OpenCL程序映射
  • 6.1 多核向量处理器架构
  • 6.1.1 Intel Haswell CPU架构
  • 6.1.2 ARM A15多核向量处理器架构
  • 6.1.3 AMD GCN GPU架构
  • 6.1.4 NVIDIA Kepler和Maxwell GPU架构
  • 6.2 OpenCL程序在多核向量处理器上的映射
  • 6.2.1 OpenCL程序在多核向量CPU上的映射
  • 6.2.2 OpenCL程序在NVIDIA GPU上的映射
  • 6.2.3 OpenCL程序在AMD GCN上的映射
  • 6.3 本章小结
  • 第7章 利用多种技术优化图像处理中的算法性能
  • 7.1 图像滤波
  • 7.1.1 均值滤波
  • 7.1.2 中值滤波
  • 7.2 图像直方图
  • 7.2.1 OpenMP实现
  • 7.2.2 CUDA实现
  • 7.3 曼德勃罗集
  • 7.3.1 串行算法
  • 7.3.2 不适合进行向量化
  • 7.3.3 OpenMP实现
  • 7.3.4 CUDA实现
  • 7.4 本章小结
  • 第8章 利用多种技术优化线性代数中的算法性能
  • 8.1 两向量距离
  • 8.1.1 串行代码
  • 8.1.2 循环展开代码
  • 8.1.3 AVX指令加速
  • 8.1.4 NEON实现
  • 8.1.5 CUDA实现
  • 8.2 稠密矩阵与向量乘法
  • 8.2.1 串行算法
  • 8.2.2 AVX指令加速
  • 8.2.3 NEON实现
  • 8.2.4 CUDA实现
  • 8.2.5 OpenMP实现
  • 8.3 本章小结
展开全部