C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针从计算机组成原理看 C 语言指针 by 彭于斌( @archibate ) 往期录播: https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码: https://github.com/parallel101/course 请问下面这三段代码有什么错误? • float x = -3.14; • printf(“%f\n”, abs(x)); C++ 封 装好的容器而不是 C 语言指针,就可以基本 保证没有内存泄露。但是封装的太好了也有效 率问题,因此追求极致性能时还是会直接操作 原始的 C 语言指针。此外如果不理解容器的 底层原理也很容易犯错,因此我们还是要好好 学习 C 语言思想的。 C 语言特性:函数声明为 T [] 类型的参数,实际上是 T * 类型 • 如果函数参数类型形如 • func(int arr[])0 码力 | 128 页 | 2.95 MB | 1 年前3
Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 设计原理与实现 2 回顾 Async Rust 的设计与痛点 1 Await-Tree 的 应用与真实案例 3 Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 设计原理与实现 2 回顾 Async Rust 的设计与痛点 1 Await-Tree 的 • ? 如何解决? Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 设计原理与实现 2 回顾 Async Rust 的设计与痛点 1 Await-Tree 的 应用与真实案例 3 设计目标 Await Tree 的设计原理与实现 • 追踪关键 Future 的生命周期和控制流 • Init, First Poll, Pending, Next 基本用例 Await Tree 的设计原理与实现 基本用例 Await Tree 的设计原理与实现 设计细节 Await Tree 的设计原理与实现 • 充分理解 Future 生命周期中的控制流 Await Tree 的维护 Await Tree 的设计原理与实现 • 初始状态 Await Tree 的维护 Await Tree 的设计原理与实现 • Future 构造 Await0 码力 | 37 页 | 8.60 MB | 1 年前3
Go读书会第二期11 月下旬 初稿交付 2021 年 12 月出版 《 Go 语言精进之路》导读 第二部分 整体写作思路 异曲同工 精进之路,思维先行 – part1 践行哲学,遵循惯例,认清本质,理解原理 - (part2- part10) 精进之路,思维先行 异曲同工 “ 语言决定思维方式” - 萨丕尔假说 “ 我的语言之局限,即我的世界之局限” - 路德维 希 · 维特根斯坦(语言哲学奠基人) 码,看看他们怎么做的 践行哲学,遵循惯例,认清本质,理解原理 Part2 – 项目基础:布局、代码风格与命名 践行哲学,遵循惯例,认清本质,理解原理 每个 gopher 在开启一个 go 项目时都要考虑的事情 • Go 项目布局 • 代码风格 • 命名惯例 Part3 – 语法基础:声明、类型、语句与控制结构 践行哲学,遵循惯例,认清本质,理解原理 • 一致的变量声明形式 • 无类型常量与 • 定义零值可用的类型 • 通过复合字面值的初始化 • 切片、字符串、 map 的原理、惯 用法与坑 每个 gopher 编写 Go 代码都会用到的 • Go 包导入相关 • 代码块与作用域 • 控制语句的惯用法与坑 Part4 – 语法基础:函数与方法 践行哲学,遵循惯例,认清本质,理解原理 • Init 函数 • 成为“一等公民” • defer 的惯用法与坑 • 变长参数函数妙用0 码力 | 26 页 | 4.55 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程章的结尾。 第 6 章: thrust 库 替换成 CUDA 官方提供的 thrust::universal_vector • 虽然自己实现 CudaAllocator 很有趣,也 帮助我们理解了底层原理。但是既然 CUDA 官方已经提供了 thrust 库,那就 用他们的好啦。 • universal_vector 会在统一内存上分配, 因此不论 GPU 还是 CPU 都可以直接访 问到。 了另一个线程才能进去,非常低效。 • 但是为什么这里用了 2^24 个元素,按理说应 该卡的不行了,却还是非常快的样子? • 那是因为 CUDA 编译器比较聪明,自动优化 了……稍后会解释他优化的原理。 解决:线程局部变量 • 解决方法之一就是:先累加到局部变量 local_sum ,最后一次性累加到全局的 sum 。 • 这样每个线程就只有一次原子操作,而不 是网格跨步循环的那么多次原子操作了。 效的,然而却没有低效,这是因为编译器自动优 化成刚刚用 BLS 的数组求和了!可以看到他优 化后的效率和我们的 BLS 相仿,甚至还要快一 些! • 结论:刚刚我们深入研究了如何 BLS 做数组求 和,只是出于学习原理的目的。实际做求和时, 直接写 atomicAdd 即可。反正编译器会自动帮 我们优化成 BLS ,而且他优化得比我们手写的 更好…… • 然后 atomicMax 求数组最大值,也同理。0 码力 | 142 页 | 13.52 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器味在吃答辩呢?要怎么传达这个信息? C++ 一视同仁的接口就能处理这种罕见的情况,不过 Python 用一些 if 语句套一套一样可以。 深入理解 Python 中 [] 能自动区分是读是写的原理 • 写入要创建元素,而读取则要在元素不存在时出错,确实应该是两个不同的函数。 • 为什么 Python 不用区分读取和写入两个函数?只有统一的 [] ?因为 Python 作为老牌胶水语言,为了 7 }; • std::find(a.begin(), a.end(), 5); • 这个 std::find 就是标准库帮我们实现的线性数组中查找元素的算法,让我们用动画演示一 下他的工作原理吧。 1 4 2 8 5 7 内存 地址 a a+1 a+2 a+3 a+4 a+5 vector 查找为什么低效 • 我们要找的数是 5 ,首先从数组第一个元素开始,判断第一个元素是否等于0 码力 | 90 页 | 8.76 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型, | 替代 + 块编号直接为对齐的坐标, << 改成 & 和 ~ 自动推算 B 和 Bmask ,顺便扁平化 Block 第 3 章:多层稀疏 用一个指针的数组来表示 图片解释:指针数组的原理 1 nul nul 2 3 nul nul nul nul 表示 nullptr (空指针) 图片解释:指针数组的稀疏 这样指针表中为 null 的部分,稠密叶节点的内存就省掉0 码力 | 102 页 | 9.50 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 03 现代 C++ 进阶:模板元编程• 这样显然是会被他自动优化掉的。 模板的应用:编译期分支 • 更进一步,可以用 C++17 的 if constexpr 语法,保证是编译期确定的分支: • (下一讲会深入分析编译器的工作原理) 模板的难题:编译期常量的限制 • 编译期常量的限制就在于他不能通过运行时变量组成的表达式来指定。比如: • 这里在 if constexpr 的表达式里用到了运行时变量,从而无法作为编译期分支的条件。0 码力 | 82 页 | 12.15 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅filter )里的工作量最 好足够大,否则无法掩盖调度 overhead 。 总结:各种并行模式 • 从串行到并行,从来就没有什么万能膏药。 • CPU 上的并行尚且如此,何况 GPU 。 • 熟悉原理、反复实验,才能优化出好程序。 • 本课仅入门,深入可以看 Pro TBB 这本书。 • 优化重点在于程序的瓶颈部分,不用在小细节上 浪费精力。如果有个 O(n²) 的循环体,则只看他 ,并无视一旁的0 码力 | 116 页 | 15.85 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南target_link_libraries(zxxpig PUBLIC pybmain) 那么 zxxpig 也有 pybmain 和 biology 的所有头文件搜索路径了。( PUBLIC 的原理详见第一期课程) 传染给 十三、你知道吗? CMake 也有 include 功能 • 和 C/C++ 的 #include 一样, CMake 也有一个 include 命令。 • 你写 include(XXX)0 码力 | 56 页 | 6.87 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理BBtutorial.pdf) - [ 并行体系结构与编程 (CMU 15-418)](https://www.bilibili.com/video/av48153629/) - [ 深入理解计算机原理 (CSAPP)](http://csapp.cs.cmu.edu/) - [CMake “ 菜谱” ](https://www.bookstack.cn/read/CMake-Cookbook/README0 码力 | 96 页 | 16.28 MB | 1 年前3
共 11 条
- 1
- 2













