C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅.jpg)  # TBB 开启的并行编程之旅 by 彭于斌 (@archibate) 往期录播:https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码:https://github ## 高性能并行编程与优化 - 课程大纲 • 分为前半段和后半段,前半段主要介绍现代 C++,后半段主要介绍并行编程与优化。 1. 课程安排与开发环境搭建:cmake 与 git 入门 2. 现代 C++ 入门:常用 STL 容器,RAII 内存管理 3. 现代 C++ 进阶:模板元编程与函数式编程 4. 编译器如何自动优化:从汇编角度看 C++ 5. C++11 起的多线程编程:从 mutex mutex 到无锁并行 6. 并行编程常用框架:OpenMP 与 Intel TBB 7. 被忽视的访存优化:内存带宽与 cpu 缓存机制 8. GPU 专题:wrap 调度,共享内存,barrier 9. 并行算法实战:reduce,scan,矩阵乘法等 10. 存储大规模三维数据的关键:稀疏数据结构 11. 物理仿真实战:邻居搜索表实现 pbf 流体求解 12.C++ 在 ZENO 中的工程实践:从0 码力 | 116 页 | 15.85 MB | 2 年前3
C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程## CUDA 开启的 GPU 编程 by 彭于斌 (@archibate) 往期录播:https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码:https://github.com/parallel101/course ## 前置条件 • 学过 C/C++ 语言编程。 - 理解 malloc/free 之类的概念。 • 熟悉 STL 3\gg> $ 试试看。 你会看到 Hello, world! 打印了三遍! - 原来,三重尖括号里的第二个参数决定着启动 kernel 时所用 GPU 的线程数量。 - GPU 是为并行而生的,可以开启很大数量的线程,用于处理大吞吐量的数据。  往期录播:https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码:https://github.com/parallel101/course ## 高性能并行编程与优化 - 课程大纲 • 分为前半段和后半段,前半段主要介绍现代 C++,后半段主要介绍并行编程与优化。 1. 课程安排与开发环境搭建:cmake 内存管理 3. 现代 C++ 进阶:模板元编程与函数式编程 4. 编译器如何自动优化:从汇编角度看 C++ 5. C++11 起的多线程编程:从 mutex 到无锁并行 6. 并行编程常用框架:OpenMP 与 Intel TBB 7. 被忽视的访存优化:内存带宽与 cpu 缓存机制 8. GPU 专题:wrap 调度,共享内存,barrier 9. 并行算法实战:reduce,scan,矩阵乘法等 12.C++ 在 ZENO 中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 ## 硬件要求: 64 位(32 位时代过去了) 至少 2 核 4 线程(并行课...) 英伟达家显卡(GPU 专题) 软件要求: Visual Studio 2019 ( Windows 用户 ) GCC 9 及以上(Linux 用户) CMake 3.12 及以上(跨平台作业)0 码力 | 82 页 | 12.15 MB | 2 年前3
C++高性能并行编程与优化 - 课件 - 性能优化之无分支编程 Branchless Programming # 性能优化之无分支编程  Branchless Programming by hours, 40 mins| ## 排序为什么对有分支的版本影响那么大 ## 为什么需要流水线 - 为了高效,CPU 的内部其实是一个流水线 (pipeline)。流水线的目的是能把原本串行的一系列指令并行化。为了理解为什么需要流水线,我们先反过来,假设没有流水线,会有什么坏处。 例如,右边你今天早上的任务清单。 • 请问你这些任务总共需要多少时间? |任务|时间|占用资源| |---|---|---| 分钟全身 ## 跳转指令对流水线效率的影响 - 然而跳转指令的存在使得流水线的并行变得很困难了。例如我们本来可以烧开水和刷牙同时进行节省时间的,但是因为烧好开水以后还要判断“是否烫伤”才能决定接下来是正常刷牙还是去医院。这意味着流水线不得不在跳转指令前后发生断层(俗称流水线里的气结束 0 码力 | 47 页 | 8.45 MB | 2 年前3
C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程C++11 开始的多线程编程 by 彭于斌 (@archibate) 往期录播:https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码:https://github.com/parallel101/course ## 高性能并行编程与优化 - 课程大纲 • 分为前半段和后半段,前半段主要介绍现代 C++,后半段主要介绍并行编程与优化。 1. 课程安排与开发环境搭建:cmake 内存管理 3. 现代 C++ 进阶:模板元编程与函数式编程 4. 编译器如何自动优化:从汇编角度看 C++ 5. C++11 起的多线程编程:从 mutex 到无锁并行 6. 并行编程常用框架:OpenMP 与 Intel TBB 7. 被忽视的访存优化:内存带宽与 cpu 缓存机制 8. GPU 专题:wrap 调度,共享内存,barrier 9. 并行算法实战:reduce,scan,矩阵乘法等 12.C++ 在 ZENO 中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 ## 硬件要求: 64 位(32 位时代过去了) 至少 2 核 4 线程(并行课...) 英伟达家显卡(GPU 专题) 软件要求: Visual Studio 2019 ( Windows 用户 ) GCC 9 及以上(Linux 用户) CMake 3.12 及以上(跨平台作业)0 码力 | 79 页 | 14.11 MB | 2 年前3
C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器0 码力 | 90 页 | 8.76 MB | 2 年前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南build 目录 • 切换到 build 目录 • 在 build 目录运行 cmake < 源码目录> 生成 Makefile - 执行本地的构建系统 make 真正开始构建(4 进程并行) - 让本地的构建系统执行安装步骤 回到源码目录 ## 现代 CMake 提供了更方便的 -B 和 --build 指令,不同平台,统一命令! • cmake -B build // 在源码目录用 的初始化:LANGUAGES 字段 • project(项目名 LANGUAGES 使用的语言列表...) 指定了该项目使用了哪些编程语言。 • 目前支持的语言包括: • C : C 语言 • CXX : C++ 语言 • ASM:汇编语言 • Fortran:老年人的编程语言 • CUDA:英伟达的 CUDA(3.8 版本新增) • OBJC:苹果的 Objective-C(3.16 版本新增) 版本新增) • OBJCXX:苹果的 Objective-C++(3.16 版本新增) • ISPC:一种因特尔的自动 SIMD 编程语言(3.18 版本新增) • 如果不指定 LANGUAGES,默认为 C 和 CXX。 ## 常见问题: LANGUAGES 中没有启用 C 语言,但是却用到了 C 语言 1 Cmake_minimum_required(VERSION 3.15) 2 project(hellocmake0 码力 | 166 页 | 6.54 MB | 2 年前3
C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化## cpu-bound 与 memory-bound - 通常来说,并行只能加速计算的部分,不能加速内存读写的部分。 - 因此,对 fill 这种没有任何计算量,纯粹只有访存的循环体,并行没有加速效果。称为内存瓶颈(memory-bound)。 - 而 sine 这种内部需要泰勒展开来计算,每次迭代计算量很大的循环体,并行才有较好的加速效果。称为计算瓶颈(cpu-bound)。 |Ben } } BENCHMARK(BM_parallel_sine); ## 浮点加法的计算量 - 冷知识:并行地给浮点数组每个元素做一次加法反而更慢。 因为一次浮点加法的计算量和访存的超高延迟相比实在太少了。 • 计算太简单,数据量又大,并行只带来了多线程调度的额外开销。 • 小彭老师经验公式:1 次浮点读写 ☐ 8 次浮点加法 - 如果矢量化成功(SSE):1 次浮点读写 invalidation)|10K - 1M| |Disk read|400K+| ## 多少计算量才算多? - 看右边的 func,够复杂了吧?也只是勉勉强强超过一点内存的延迟了,但在 6 个物理核心上并行加速后,还是变成 mem-bound 了。 • 加速比:1.36 倍 • 应该达到 6 倍(物理核心数量)才算理想加速比。 |Benchmark|Time|CPU|Iterations| |---|---|---|---|0 码力 | 147 页 | 18.88 MB | 2 年前3
C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起## 高性能并行编程与优化 - 课程大纲 • 分为前半段和后半段,前半段主要介绍现代 C++,后半段主要介绍并行编程与优化。 1. 课程安排与开发环境搭建:cmake 与 git 入门 2. 现代 C++ 入门:常用 STL 容器,RAII 内存管理 3. 现代 C++ 进阶:模板元编程与函数式编程 4. 编译器如何自动优化:从汇编角度看 C++ 5. C++11 起的多线程编程:从 mutex mutex 到无锁并行 6. 并行编程常用框架:OpenMP 与 Intel TBB 7. 被忽视的访存优化:内存带宽与 cpu 缓存机制 8. GPU 专题:wrap 调度,共享内存,barrier 9. 并行算法实战:reduce,scan,矩阵乘法等 10. 存储大规模三维数据的关键:稀疏数据结构 11. 物理仿真实战:邻居搜索表实现 pbf 流体求解 12.C++ 在 ZENO 中的工程实践:从 中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 ## 硬件要求: 64 位(32 位时代过去了) 至少 2 核 4 线程(并行课...) 英伟达家显卡(GPU 专题) 软件要求: Visual Studio 2019 ( Windows 用户 ) GCC 9 及以上(Linux 用户) CMake 3.12 及以上(跨平台作业) Git 20 码力 | 32 页 | 11.40 MB | 2 年前3
C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理## 高性能并行编程与优化 - 课程大纲 • 分为前半段和后半段,前半段主要介绍现代 C++,后半段主要介绍并行编程与优化。 1. 课程安排与开发环境搭建:cmake 与 git 入门 2. 现代 C++ 入门:常用 STL 容器,RAII 内存管理 3. 现代 C++ 进阶:模板元编程与函数式编程 4. 编译器如何自动优化:从汇编角度看 C++ 5. C++11 起的多线程编程:从 mutex mutex 到无锁并行 6. 并行编程常用框架:OpenMP 与 Intel TBB 7. 被忽视的访存优化:内存带宽与 cpu 缓存机制 8. GPU 专题:wrap 调度,共享内存,barrier 9. 并行算法实战:reduce,scan,矩阵乘法等 10. 存储大规模三维数据的关键:稀疏数据结构 11. 物理仿真实战:邻居搜索表实现 pbf 流体求解 12.C++ 在 ZENO 中的工程实践:从 中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 ## 硬件要求: 64 位(32 位时代过去了) 至少 2 核 4 线程(并行课...) 英伟达家显卡(GPU 专题) 软件要求: Visual Studio 2019 ( Windows 用户 ) GCC 9 及以上(Linux 用户) CMake 3.12 及以上(跨平台作业) Git 20 码力 | 96 页 | 16.28 MB | 2 年前3
共 997 条
- 1
- 2
- 3
- 4
- 5
- 6
- 100













