C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器(BV1qF411T7sd) 2. 你所不知道的 set 容器 & 迭代器分类 (BV1m34y157wb) 3. string , string_view , const char * 的爱恨纠葛 (BV1ja411M7Di) 4. 万能的 map 容器全家桶及其妙用举例 ( 本期 ) 5. 函子 functor 与 lambda 表达式知多少 6. 通过实战案例来学习 STL 算法库 7. C++ 标准输入输出流 std::find 。 • 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 查找为什么低效 就会返回指向第五个元素的迭代器 。 1 4 2 8 5 7 要找的数 内存 5 ==? 地址 a a+1 a+2 a+3 a+4 a+5 vector 查找为什么低效 • 在由 n 个数组成的 vector 中查找一个数,最好需要 1 次比较运算就能找到(例如查找 1 )。 • 最坏需要 n 次比较运算才能找到或者发现找不到(例如查找 7 ,或者找一个不存在的 数)。 • 所以我们说 0 码力 | 90 页 | 8.76 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅TBB 开启的并行编程之旅 by 彭于斌( @archibate ) 往期录播: https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码: https://github.com/parallel101/course 高性能并行编程与优化 - 课程大纲 • 分为前半段和后半段,前半段主要介绍现代 C++ ,后半段主要介绍并行编程与优化。 进阶:模板元编程与函数式编程 4.编译器如何自动优化:从汇编角度看 C++ 5.C++11 起的多线程编程:从 mutex 到无锁并行 6.并行编程常用框架: OpenMP 与 Intel TBB 7.被忽视的访存优化:内存带宽与 cpu 缓存机制 8.GPU 专题: wrap 调度,共享内存, barrier 9.并行算法实战: reduce , scan ,矩阵乘法等 10.存储大规模三维数据的关键:稀疏数据结构 https://blog.csdn.net/weixin_42973508/article/details/111681426 详见 https://www.bilibili.com/video/BV1fa411r7zp 的 1:18:48 上一课的案例代码:基于标准库 基于 TBB 的版本:任务组 • 用一个任务组 tbb::task_group 启动多个 任务,一个负责下载,一个负责和用户交 互。并在主线程中等待该任务组里的任务0 码力 | 116 页 | 15.85 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串上期回顾: https://www.bilibili.com/video/BV1m34y157wb 课程安排 1. vector 容器初体验 & 迭代器入门 (BV1qF411T7sd) 2. 你所不知道的 set 容器 & 迭代器分类 (BV1m34y157wb) 3. string , string_view , const char * 的爱恨纠葛 的爱恨纠葛 ( 本期 ) 4. 万能的 map 容器全家桶及其妙用举例 5. 函子 functor 与 lambda 表达式知多少 6. 通过实战案例来学习 STL 算法库 7. C++ 标准输入输出流 & 字符串格式化 8. traits 技术,用户自定义迭代器与算法 9. allocator ,内存管理与对象生命周期 ASCII 码 第 1 章 计算机如何表达字符 9 表示 Tab 制表符(‘ \t’ ) • 10 表示换行(‘ \n’ ) • 13 表示回车(‘ \r’ ) • 27 表示 ESC 键(‘ \x1b’ ) • 127 表示 DEL 键(‘ \x7f’ )等 • 0~31 和 127 这些整数,就构成了 ASCII 码中控制字符的部分。 关于控制字符的一个冷知识 • 在 Linux 命令行中启动 cat 。 • 试试按 Ctrl+R ,0 码力 | 162 页 | 40.20 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型从稀疏数据结构到量化数据类型 by 彭于斌( @archibate ) 往期录播: https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码: https://github.com/parallel101/course 本课涵盖:稀疏矩阵、 unordered_map 、空间稀 疏网格、位运算、浮点的二进制格式、内存带宽优 化 面向人群:图形学、 但是分块存储时负数却导致出错了 为什么 segf 了? 按理说不会越界才对? C 语言 % 的特色:负数 • 7 % 4 = 3 • -7 % 4 = -3 • 也就是说 a % b 如果 a 是负数,则得到的模也是负数。 Python 的 % 就没问题 • 7 % 4 = 3 • -7 % 4 = 1 • Python 的模运算 a % b 的值始终是 [0, b) 区间内的正数,非常方便。 = a & (b - 1) • 比如 a % 8 可以改成 a & 7 。 & = 位运算 & 对负数的处理 • 使用位运算不仅更高效,还能够自动解决刚刚 % 会返回负数的问题: • (因为负数用补码表示,会直接把负号去掉) & = C 语言 / 的特色:负数 • 7 / 4 = 1 • -7 / 4 = -1 • 也就是说 a / b ,如果 a 是负数,则是向上取整,如果0 码力 | 102 页 | 9.50 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 13 C++ STL 容器全解之 vectorC++ STL 容器全解之 vector by 彭于斌( @archibate ) 往期录播: https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码: https://github.com/parallel101/course C++ 标准库五大件:容器( container ) C++ 标准库五大件:迭代器( iterator 例如创建具有 6, 1, 7, 4 四个元素的 vector : • vectora = {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
A Crash Course in Calendars, Dates, Time, and Time Zonescompile-time constants: intmax_t n { 1 }; intmax_t d { 60 }; using r1 = ratio; // Error7 Compile-Time Rational Numbers Arithmetic with ratio_add, ratio_subtract, ratio_multiply, and ratio_divide: duration of 30 seconds. duration d7 { 30 }; // Convert the seconds of d7 to minutes. duration > d8 { d7 }; cout << format("{}sec = {}min", d7.count(), d8.count()); // 0.5min duration > d8 { d7 }; // minutes // Error! // Force conversion (0 instead of 0.5) auto d8 { duration_cast >>(d7) }; // = 015 Durations – Predefined & 0 码力 | 43 页 | 551.60 KB | 6 月前3
nativescript-new-looper-vantoll.pptxew (4,006) • Peter Staev • 8) ⛅ nativescript-floatingactionbutton (4,916) • Brad Martin • 7) ? nativescript-sqlite (5,108) • Nathanael Anderson • 6) ? nativescript-google-maps-sdk (5 (5) • 11) ? Sean Perkins (5) • 10) ? Robert Laverty (6) • 8) ? Alex Ziskind (7) • 8) ? Steve McNiven-Scott (7) • 7) ? Josh Sommer (8) Community ? Community ? • Engineering ? • NativeScript Developer sitefinitysteve (21) - 7) ? markosko (27) - 6) ? jen.looper (28) Stack Overflow contributors ? - 10) ? G. McGhie (15) - 9) ? George Edwards (15) - 8) ? Osei Fortune (22) - 7) ? Peter Staev (32)0 码力 | 36 页 | 10.78 MB | 1 年前3
C++20's • Part V: Time Zones • Overview of [time.zone] • IANA database challenges • Part VI: Conclusion7 Part I: Development Process8 Development Process • Implemented in our microsoft/STL open-source be/WX3OmVu4lAs) • time_zone and time_zone_link (https://youtu.be/MODhhr7m-5s) • system_clock::now(), file_clock, leap second awareness (https://youtu.be/c7DT28TV0AY)9 Part II: Calendrical Types10 Calendrical Types auto result = wd + days{4}; std::cout << result << "\n"; weekday sun1{0}; weekday sun2{7}; std::cout << sun1 << "\t" << sun2 << "\n"; weekday_indexed wdi{wd, 4}; // fourth Thursd ay0 码力 | 55 页 | 8.67 MB | 6 月前3
Zadig 面向开发者的云原生 DevOps 平台分钟以内,成功率达 90% 集成环境:支持开发者 Remote debug 工作流:效率和性能、开发者体验提升 贡献者流程建立 开 放 社 区 搭 建 2021 年 5 月 2021 年 7 月 2021 年 9 月 2021 年 11 月 2021 年 12 月 1 个月功能改造 90% 功能实现开源 技术社区雏形搭建 2022 年 3 月 生态伙伴工具 + Zadig 兴 解决方案: Gerrit + Zadig 实现机器自动验证 扫 码 查 看 案 例 细 节 典型客户:新零售独角兽 用 Zadig 15 万家门店周发布 7 次 “ 没有 Zadig, 我们的自动化测试不可能做起 ” 来 —— 非码测试总监 “Zadig ” 让运维在业务量倍增的情况下仍能轻松应对 —— 字节跳动 飞书 SRE Tech Lead 吴 国华 全面使用: 自动驾驶 7 大集群 / 几十个项目 / 上百服务高频交付 “ 我们通过 Zadig 能更快落地标准化、自动化的 CI/CD ,给研发更好的用户体验,高效稳定地完成服务 的构建与发布更新,同时也从公司角度落实降本增效的0 码力 | 59 页 | 81.43 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南现代 CMake 进阶指南 by 彭于斌( @archibate ) 往期录播: https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码: https://github.com/parallel101/course 为什么要学习现代 CMake ? • 现代 CMake 指的是 CMake 3.x 。 • 古代 CMake 指的是 CMake 执行构建过程的工具。该变量设置为 CMake 构建时输出所需的程序。对于 VS 6 , CMAKE_BUILD_TOOL 设置为 msdev , 对于 Unix ,它被设置为 make 或 gmake 。 对于 VS 7 , 它被设置为 devenv. 对于 Nmake 构建文件,它的值为 nmake 。 • CMAKE_DL_LIBS: 包含 dlopen 和 dlclose 的库的名称。 • CMAKE_COMMAND: 定的地方加上引号,例如: set(sources “main.cpp” “mylib.cpp” “C:/Program Files/a.cpp”) message(“${sources}”) 第 7 章:变量与缓存 重复执行 cmake -B build 会有什么区别? 可以看到第二次的输出少了很多,这是因为 CMake 第一遍需要检测编译器 和 C++ 特性等比较耗时,检测完会把结果存储到缓存中,这样第二遍运行0 码力 | 166 页 | 6.54 MB | 1 年前3
共 42 条
- 1
- 2
- 3
- 4
- 5













