Coaching Agile TeamsSelf-Assess FirstSelf Sufficiency Belief System Coaching GoalAgile Coaching Competencies Agile-Lean Practitioner Mentoring Facilitating Teaching Coaching Technical Mastery Business Mastery Transformation0 码力 | 15 页 | 608.54 KB | 6 月前3
C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器你所不知道的 set 容器 & 迭代器分类 (BV1m34y157wb) 3. string , string_view , const char * 的爱恨纠葛 (BV1ja411M7Di) 4. 万能的 map 容器全家桶及其妙用举例 ( 本期 ) 5. 函子 functor 与 lambda 表达式知多少 6. 通过实战案例来学习 STL 算法库 7. C++ 标准输入输出流 & 字符串格式化 • vectora = { 1, 4, 2, 8, 5, 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 ? 4 == 5 × • 发现不相等,只能继续判断第三个元素是否等于 5 ? 2 == 5 × • 发现不相等,只能继续判断第四个元素是否等于 5 ? 8 == 5 × • 发现不相等,只能继续判断第五个元素是否等于 5 ? 5 == 5 √ • 发现相等,意味着我们成功找到了 5 。这时 std::find 就会返回指向第五个元素的迭代器 。 1 4 2 8 5 7 要找的数 0 码力 | 90 页 | 8.76 MB | 1 年前3
THE FIRST EXPLORATION OF PROJECT SPARROW Project Sparrow Testbed II. Practicing Sparrow CantripOS(KataOS) Rust support in seL4 userspace III. Sparrow development Develop with Renode IV. Wrap-up 1) Tech Stack 1.1 Microkernel Design 1.2 L4 Overview I. Background https://en.wikipedia.org/wiki/L4_microkernel_family I. Background L4 family tree: 1.2.1 seL4 Overview I. Background https://en.wikipedia.org/wiki/L4_microkernel_family#High_assurance:_seL4 https://sel4.systems I. Background . Source: “The seL4 Report”, Gernot Heiser, Fosdem0 码力 | 68 页 | 13.14 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅,后半段主要介绍并行编程与优化。 1.课程安排与开发环境搭建: cmake 与 git 入门 2.现代 C++ 入门:常用 STL 容器, RAII 内存管理 3.现代 C++ 进阶:模板元编程与函数式编程 4.编译器如何自动优化:从汇编角度看 C++ 5.C++11 起的多线程编程:从 mutex 到无锁并行 6.并行编程常用框架: OpenMP 与 Intel TBB 7.被忽视的访存优化:内存带宽与 pbf 流体求解 12.C++ 在 ZENO 中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 I 硬件要求: 64 位( 32 位时代过去了) 至少 2 核 4 线程(并行课…) 英伟达家显卡( GPU 专题) 软件要求: Visual Studio 2019 ( Windows 用户) GCC 9 及以上( Linux 用户) CMake 3.12 及以上(跨平台作业) 器的服务器,他正同时处理 4 个 HTTP 请求,如果是单线程的 listen-accept 循环 ,则在处理完 A 的请求之前, B 的请求 就无法处理,造成“无响应”现象。 C 的请 求进来,则还得继续排队…… • 每个请求开启一个线程来处理,这样处理 A 用户的同时还可以继续监听 B 用户发 来的请求,及时响应,改善用户体验。 • 并行:某图形学爱好者购置了一台 4 核处理 器的电脑,他正在渲染0 码力 | 116 页 | 15.85 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 14 C++ 标准库系列课 - 你所不知道的 set 容器& 迭代器入门 (BV1qF411T7sd) 2. 你所不知道的 set 容器 & 迭代器分类 ( 本期 ) 3. string , string_view , const char * 的爱恨纠葛 4. 万能的 map 容器全家桶及其妙用举例 5. 函子 functor 与 lambda 表达式知多少 6. 通过实战案例来学习 STL 算法库 7. C++ 标准输入输出流 & 字符串格式化 8. traits • 区别 2 : set 会把重复的元素 去除,只保留一个,即去重。 • 区别 3 : vector 中的元素在内 存中是连续的,可以高效地按 索引随机访问, set 则不行。 • 区别 4 : set 中的元素可以高 效地按值查找,而 vector 则 低效。 set 的排序: string 会按“字典序”来排 • set 会从小到大排序,对 int 来 说就是数值的大小比较。那么对 set 会 自动插入到 2 和 4 之间, 从而使元素总是从小到大排 列。 • pairinsert(int val); 向 set 中插入元素 • 刚刚说过 set 具有自动去重 的功能,如果插入的元素已 经在 set 中存在,则不会完 成插入。 • 例如往集合 {1,2,4} 中插入 4 则什么也不会发生,因为 4 已经在集合中了。 • pair 0 码力 | 83 页 | 10.23 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化,后半段主要介绍并行编程与优化。 1.课程安排与开发环境搭建: cmake 与 git 入门 2.现代 C++ 入门:常用 STL 容器, RAII 内存管理 3.现代 C++ 进阶:模板元编程与函数式编程 4.编译器如何自动优化:从汇编角度看 C++ 5.C++11 起的多线程编程:从 mutex 到无锁并行 6.并行编程常用框架: OpenMP 与 Intel TBB 7.被忽视的访存优化:内存带宽与 pbf 流体求解 12.C++ 在 ZENO 中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 I 硬件要求: 64 位( 32 位时代过去了) 至少 2 核 4 线程(并行课…) 英伟达家显卡( GPU 专题) 软件要求: Visual Studio 2019 ( Windows 用户) GCC 9 及以上( Linux 用户) CMake 3.12 及以上(跨平台作业) r15 是 64 位 x86 新增的寄存器,给了汇编程序员更大的空间,降低了编译 器处理寄存器翻车( register spill )的压力。 • 因此 64 位比 32 位机器相比,除了内存突破 4GB 限制外,也有一定性能优势。 8 位, 16 位, 32 位, 64 位版本 al, ax, eax, rax r15b, r15w, r15d, r15 AT&T 汇编语言 GCC 编译器所生成的汇编语言就属于这种0 码力 | 108 页 | 9.47 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 13 C++ STL 容器全解之 vectorvector 可以在构造时指定初始长度。 • explicit vector(size_t n); • 例如,要创建一个长度为 4 的 int 型数组 : • vectora(4); • 之后可以通过 a.size() 获得数组的长度。 • 比如右边这段代码会得到 4 。 • size_t size() const noexcept; vector 容器: operator[] • 6, 1, 7, 4 四个元素的 vector : • vector a = {6, 1, 7, 4}; • 和刚刚先创建再赋值的方法相比更直观。 • vector(initializer_list list); vector 容器:构造函数 • 初始化表达式的等号可以写也可以不写: • vector a = {6, 1, 7, 4}; • vector vector a{6, 1, 7, 4}; • 都是等价的。 • vector(initializer_list list); vector 容器:构造函数 • 注意,这意味着如果用花括号的 {4} 初始化: • vector a{4}; • 会得到长度为 1 只有一个元素 4 的数组。 • 如果需要长度为 4 ,元素全部为 0 的数组,必 须用圆括号 () 而不是花括号 0 码力 | 90 页 | 4.93 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化• 如果 CPU 有 4 核且矢量化成功: 1 次浮点读写 ≈ 128 次浮点加 法 常见操作所花费的时间 • 图中加法 (add) 和乘法 (mul) 都指的整数。 • 区别是浮点的乘法和加法基本是一样速度。 • L1/2/3 read 和 Main RAM read 的时间指的是 读一个缓存行( 64 字节)所花费的时间。 • 根据计算: 125/64*4≈8 • 即从主内存读取一次 funcA 用了 2 核就饱和。 • funcB 用了 4 核才饱和。 • funcC 用了 6 核才饱和。 • 结论:要想利用全部 CPU 核心,避免 mem-bound ,需要 func 里有足够的计算 量。 • 当核心数量越多, CPU 计算能力越强,相 对之下来不及从内存读写数据,从而越容 易 mem-bound 。 1 2 4 6 8 10 0 50 100 150 200 取到该地址的数据,就创建一个新条目。 • 在 x86 架构中每个条目的存储 64 字节的数据,这个条目 又称之为缓存行( cacheline )。 • 当访问 0x0048~0x0050 这 4 个字节时,实际会导致 0x0040~0x0080 的 64 字节数据整个被读取到缓存中。 • 这就是为什么我们喜欢把数据结构的起始地址和大小对齐到 64 字节,为的是不要浪费缓存行的存储空间。0 码力 | 147 页 | 18.88 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串你所不知道的 set 容器 & 迭代器分类 (BV1m34y157wb) 3. string , string_view , const char * 的爱恨纠葛 ( 本期 ) 4. 万能的 map 容器全家桶及其妙用举例 5. 函子 functor 与 lambda 表达式知多少 6. 通过实战案例来学习 STL 算法库 7. C++ 标准输入输出流 std::literials 内部定义一览 std::literials::string_literials std::literials::chrono_literials 字符串 <--> 数字 第 4 章 java 经典操作:字符串 + 数字 = 字符串 • 在 java 中,你甚至可以直接把字符串和数字相加,例如: • “you have ” + 42 + “ yuan” 会得到 “ you 想要完整的功能(指定多少进制,左右对齐等),可以用专业的做法: 1. 古代 C 语言的 sprintf 2. 古代 C++ 的 stringstream 3. C++20 新增的 std::format 4. 第三方库提供的 fmt::format ( https://github.com/fmtlib/fmt ) 5. 参考小彭老师在 zeno 里手撸的两个函数(能支持任意 STL 容器的打印) :0 码力 | 162 页 | 40.20 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针一字节可以表示 0 到 255 区间中所有的值,表示方式如下: • 00000000 表示 0 00000001 表示 1 00000010 表示 2 00000011 表示 3 • 00000100 表示 4 00000101 表示 5 00000110 表示 6 00000111 表示 7 • ...... • 11111100 表示 252 11111101 表示 253 11111110 表示 254 )拼成一个字( word ),实际上是 16 位计算机的做法。 • 16 位计算机得名就是因为他的字由 16 个位组成,早期的 8086 系列 CPU 就是 16 位 的。 • 在 32 位计算机上会把 4 个字节拼成一个字,字由 32 个位组成。 • 在 64 位计算机上会把 8 个字节拼成一个字,字由 64 个位组成。 • 如今的计算机大多是 64 位的,一些很老的网吧和学校的机房里偶尔能看见古董级的 位,他只能访问 65536 字节( 64 KB )的内存 。 • 由于 32 位计算机的寄存器只能存储 32 位,他只能访问 4 GB 的内存。 • 由于 64 位计算机的寄存器能存储 64 位,他理论上能访问 16777216 TB 的内存! • 因此,如果你的电脑内存超过了 4 GB ,那肯定是 32 位电脑不用说了。 • 而 64 位计算机理论上能访问如此大量的内存,虽然目前看来是用不到。0 码力 | 128 页 | 2.95 MB | 1 年前3
共 58 条
- 1
- 2
- 3
- 4
- 5
- 6













