刘文志编著的《科学计算与企业级应用的并行优化/高性能计算技术丛书》是“并行计算与性能优化”系列的第3本,此书的重点在于介绍如何利用目前主流的、基于c语言的各种特定硬件或平台的向量化扩展、并行化库来优化科学计算和企业级应用的代码性能。而本系列的《并行算法设计与代码优化》关注并行优化和并行计算相关的理论、算法设计及高层次的实践经验;本系列的《并行编程方法与优化实践》关注于c程序设计语言的向量化和并行化扩展及算法到硬件的映射,以及如何在不同的硬件平台上优化代码以获得更好的性能。这些内容被许多项级开发人员视为“不传之秘”。
本书作者是国内顶尖的并行计算专家,曾任英伟达并行计算工程师和百度在线高级研发工程师,在该领域的经验和修为极为深厚,他毫不吝啬地将自己多年的积累呈现在了这3本书中,得到了深度学习杰出科学家吴韧的高度评价和强烈推荐。
全书共5章。第l章介绍了常见的并行编程基于的多核/众核向量处理器的架构,OpenCL程序到平台的映射与运行差异。第2章介绍了如何在X86、ARM和GPu上优化常见的线性代数运算,如计算稀疏矩阵向量乘法,求解下三角线性方程组,计算矩阵乘法等。第3章以如何求解热传递问题和三维Stencil问题为例介绍了如何在X86和GPU处理器上优化偏微分方程的求解。第4章介绍了如何在X86处理器和GPu上优化常见的分子动力学算法,如邻居搜索、范德华力计算、键长伸缩力计算和径向分布函数计算。第5章详细介绍了如何在X86、ARM和GPu上优化常见的机器学习算法(如k—means、KNN、二维卷积和四维卷积)性能,最后给出利用多GPu并行卷积神经网络的常见方法,及如何基于数据并行、使用多GPU来优化caffe的性能。
序
前言
第1章 多核向量处理器架构
1.1 众核系统结构
1.2 众核架构的一致性
1.3 多核向量处理器架构
1.3.1 Intel Haswell CPU架构
1.3.2 ARM A15多核向量处理器架构
1.3.3 AMD GCN GPU架构
1.3.4 NVIDIA Kepler和Maxwell GPU架构
1.4 Intel MIC架构
1.4.1 整体架构
1.4.2 计算单元
1.4.3 存储器单元
1.4.4 MIC架构上一些容易成为瓶颈的设计
1.5 OpenCL程序在多核向量处理器上的映射
1.5.1 OpenCL程序在多核向量CPU上的映射
1.5.2 OpenCL程序在NVIDIA GPU上的映射
1.5.3 OpenCL程序在AMD GCN上的映射
1.6 OpenCL程序在各众核硬件上执行的区别
1.7 众核编程模式
1.8 众核性能优化
1.9 MIC和GPU编程比较
1.10 本章小结
第2章 常见线性代数算法优化
2.1 稀疏矩阵与向量乘法
2.1.1 稀疏矩阵的存储格式
2.1.2 CSR 格式稀疏矩阵与向量乘法
2.1.3 ELL格式稀疏矩阵与向量乘
2.2 对称矩阵与向量乘积
2.2.1 串行代码
2.2.2 向量化对称矩阵与向量乘积
2.2.3 OpenMP 并行化
2.2.4 CUDA 代码
2.3 三角线性方程组的解法
2.3.1 串行算法
2.3.2 串行算法优化
2.3.3 AVX 优化实现
2.3.4 NEON 优化实现
2.3.5 如何提高并行度
2.3.6 CUDA 算法实现
2.4 矩阵乘法
2.4.1 AVX指令计算矩阵乘法
2.4.2 NEON指令计算矩阵乘法
2.4.3 GPU计算矩阵乘法
2.5 本章小结
第3章 优化偏微分方程的数值解法
3.1 热传递问题
3.1.1 C代码及性能
3.1.2 OpenMP代码及性能
3.1.3 OpenACC代码及性能
3.1.4 CUDA代码
3.2 简单三维Stencil
3.2.1 串行实现
3.2.2 Stencil在X86处理器上实现的困境
3.2.3 CUDA实现
3.3 本章小结
第4章 优化分子动力学算法
4.1 简单搜索的实现
4.1.1 串行代码
4.1.2 向量化实现分析
4.1.3 OpenMP实现
4.1.4 CUDA实现
4.2 范德华力计算
4.2.1 串行实现
4.2.2 向量化实现分析
4.2.3 OpenMP实现
4.2.4 CUDA实现
4.2.5 如何提高缓存的利用
4.3 键长伸缩力计算
4.3.1 串行实现
4.3.2 向量化实现
4.3.3 OpenMP实现
4.3.4 CUDA实现
4.4 径向分布函数计算
4.4.1 串行实现
4.4.2 向量化实现
4.4.3 OpenMP实现
4.4.4 CUDA实现
4.5 本章小结
第5章 机器学习算法
5.1 kmeans算法
5.1.1 计算流程
5.1.2 计算元素所属分类
5.1.3 更新分类中心
5.1.4 入口函数
5.2 KNN算法
5.2.1 计算步骤
5.2.2 相似度计算
5.2.3 求前k个相似度最大元素
5.2.4 统计所属分类
5.3 二维卷积
5.3.1 X86实现
5.3.2 ARM实现
5.3.3 CUDA实现
5.4 四维卷积
5.4.1 X86实现
5.4.2 ARM 实现
5.4.3 CUDA实现
5.5 多GPU并行优化深度学习软件Caffe
5.5.1 为什么要使用多GPU并行Caffe
5.5.2 AlexNet示例
5.5.3 Caffe的主要计算流程
5.5.4 多GPU并行卷积神经网络的方式
5.5.5 多GPU并行Caffe实践
5.6 本章小结