C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化区别是浮点的乘法和加法基本是一样速度。 • L1/2/3 read 和 Main RAM read 的时间指的是 读一个缓存行( 64 字节)所花费的时间。 • 根据计算: 125/64*4≈8 • 即从主内存读取一次 float 花费 8 个 cycle , 符合小彭老师的经验公式。 • “right” 和“ wrong” 指的是分支预测是否成功。 多少计算量才算多? • 看右边的 func ,够复杂了吧?也只是勉勉强强超过一 三级缓存由各个物理核心共享,总共 12 MB 。 通过图形界面查看拓扑结构: lstopo 根据我们缓存的大小分析刚刚的图表 • 也可以看到刚刚两个出现转折的点,也是在 二级缓存和三级缓存的大小附近。 • 因此,数据小到装的进二级缓存,则最大带 宽就取决于二级缓存的带宽。稍微大一点则 只能装到三级缓存,就取决于三级缓存的带 宽。三级缓存也装不下,那就取决于主内存 的带宽了。 • 结论:要避免 mem-bound • }; • CacheEntry cache[512]; • 当 CPU 读取一个地址时: • 缓存会查找和该地址匹配的条目。如果找到,则给 CPU 返 回缓存中的数据。如果找不到,则向主内存发送请求,等读 取到该地址的数据,就创建一个新条目。 • 在 x86 架构中每个条目的存储 64 字节的数据,这个条目 又称之为缓存行( cacheline )。 • 当访问 0x0048~0x00500 码力 | 147 页 | 18.88 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南x.y.z) 可以把当前项目的版本号设定为 x.y.z 。 • 之后可以通过 PROJECT_VERSION 来获取当前项目的版本号。 • PROJECT_VERSION_MAJOR 获取 x (主版本号)。 • PROJECT_VERSION_MINOR 获取 y (次版本号)。 • PROJECT_VERSION_PATCH 获取 z (补丁版本号)。 一些没什么用,但 CMake 官方不知为何就是提供了的项目字段…… • 在 Linux 中,可以运行 ccmake -B build 来启 动基于终端的可视化缓存编辑菜单。 • 在 Windows 则可以 cmake-gui -B build 来启动 图形界面编辑各个缓存选项。 • 当然,直接用编辑器打开 build/CMakeCache.txt 修改后保存也是可以的。 • CMakeCache.txt 用文本存储数据,就是可供用 户手动编辑,或是被第三方软件打开并解析的。0 码力 | 166 页 | 6.54 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程如下载一个文件,同时还要和用户交互。 • 这在 GUI 应用程序中很常见,比如浏览 器在后台下载文件的同时,用户仍然可以 用鼠标操作其 UI 界面。 没有多线程:程序未响应 • 没有多线程的话,就必须等文件下载完了 才能继续和用户交互。 • 下载完成前,整个界面都会处于“未响应”状 态,用户想做别的事情就做不了。 现代 C++ 中的多线程: std::thread • C++11 开始,为多线程提供了语言级别的 构时会自动等待全部线程执行完毕。 小彭老师快乐吐槽时间 • 多线程、异步、无阻塞、并发,能提升程序响应速度,对现实世界中的软件工程至关重要 。 • 反面教材: blender 在运行物理解算的时候,界面会卡住,算完一帧后窗口才能刷新一遍 ,导致解算过程中基本别想做事,这一定程度上归功于 opengl 原始的单线程设计。 • 正面教材: zeno 可以在解算过程中,随时拖动滑块看前几帧的结果,编辑场景图,修改0 码力 | 79 页 | 14.11 MB | 1 年前3
《深入浅出MFC》2/eCWinApp::InitApplication / 372 CMyWinApp::InitInstance / 374 CFrameWnd::Create 產生主視窗(並註冊視窗類別) / 376 * 奇怪的視窗類別名稱 Afx:b:14ae:6:3e8f / 387 視窗顯示與更新 / 389 類別? / 423 Document Template 的意義 / 430 Scribble 的 Document/View 設計 / 436 主視窗的誕生 / 438 工具列和狀態列的誕生(Toolbar & Status bar) / 440 滑鼠拖放(Drag and Drop) / 442 要一套Visual C++ 32 位版。目前的最新版本是Visual C++ 5.0,也是我使用的版本。 深入淺出 MFC 30 硬件方面,只要能跑上述两种操作系统就算过关。内存(RAM)是影响运作速度的主 因,多多益善。厂商宣称16MB RAM 是一个能够使你工作舒适的数字,但我因此怀疑 「舒适」这个字眼的定义。写作本书时我的软硬件环境是: ■ Pentium 133 ■ 96M RAM0 码力 | 1009 页 | 11.08 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 C++ 版感謝校銓在智慧財產權方面提供的專業幫助,這對本開源書的完善起到了重要作用; ‧ 感謝蘇潼為本書設計了精美的封面和 logo ,並在我的強迫症的驅使下多次耐心修改; ‧ 感謝 @squidfunk 提供的排版建議,以及他開發的開源文件主題 Material‑for‑MkDocs 。 在寫作過程中,我閱讀了許多關於資料結構與演算法的教材和文章。這些作品為本書提供了優秀的範本,確 保了本書內容的準確性與品質。在此感謝所有老師和前輩的傑出貢獻! */ 0.2.2 在動畫圖解中高效學習 相較於文字,影片和圖片具有更高的資訊密度和結構化程度,更易於理解。在本書中,重點和難點知識將主 要透過動畫以圖解形式展示,而文字則作為解釋與補充。 如果你在閱讀本書時,發現某段內容提供瞭如圖 0‑2 所示的動畫圖解,請以圖為主、以文字為輔,綜合兩者 來理解內容。 圖 0‑2 動畫圖解示例 0.2.3 在程式碼實踐中加深理解 本書的配套程式碼託管在 GitHub 本書的主要受眾是演算法初學者。如果你已有一定基礎,本書能幫助你系統回顧演算法知識,書中源程 式碼也可作為“刷題工具庫”使用。 ‧ 書中內容主要包括複雜度分析、資料結構和演算法三部分,涵蓋了該領域的大部分主題。 ‧ 對於演算法新手,在初學階段閱讀一本入門書至關重要,可以少走許多彎路。 ‧ 書中的動畫圖解通常用於介紹重點和難點知識。閱讀本書時,應給予這些內容更多關注。 ‧ 實踐乃學習程式設計之最佳途0 码力 | 379 页 | 18.79 MB | 10 月前3
Hello 算法 1.0.0b5 C++版// 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画和图解形式展示,而文字则作为动画和图片的解释与补充。 如果你在阅读本书时,发现某段内容提供了图 0‑2 所示的动画或图解,请以图为主、以文字为辅,综合两者 来理解内容。 图 0‑2 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 「开放寻址 open addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测、多次哈希等。 1. 线性探测 线性探测采用固定步长的线性搜索来进行探测,其操作方法与普通哈希表有所不同。 ‧ 插入元素:通过哈希函数计算数组索引,若发现桶内已有元素,则从冲突位置向后线性遍历(步长通常 表示两顶点之间无边。 第 9 章 图 hello‑algo.com 190 图 9‑5 图的邻接矩阵表示 邻接矩阵具有以下特性。 ‧ 顶点不能与自身相连,因此邻接矩阵主对角线元素没有意义。 ‧ 对于无向图,两个方向的边等价,此时邻接矩阵关于主对角线对称。 ‧ 将邻接矩阵的元素从 1 和 0 替换为权重,则可表示有权图。 使用邻接矩阵表示图时,我们可以直接访问矩阵元素以获取边,因此增删查操作的效率很高,时间复杂度均0 码力 | 377 页 | 30.69 MB | 1 年前3
Hello 算法 1.0.0b4 C++版表示两顶点之间无边。 9. 图 hello‑algo.com 166 Figure 9‑5. 图的邻接矩阵表示 邻接矩阵具有以下特性: ‧ 顶点不能与自身相连,因此邻接矩阵主对角线元素没有意义。 ‧ 对于无向图,两个方向的边等价,此时邻接矩阵关于主对角线对称。 ‧ 将邻接矩阵的元素从 1 , 0 替换为权重,则可表示有权图。 使用邻接矩阵表示图时,我们可以直接访问矩阵元素以获取边,因此增删查操作的效率很高,时间复杂度均 j >= size() || i == j) { 9. 图 hello‑algo.com 170 throw out_of_range(" 顶点不存在"); } // 在无向图中,邻接矩阵沿主对角线对称,即满足 (i, j) == (j, i) adjMat[i][j] = 1; adjMat[j][i] = 1; } /* 删除边 */ // 参数 i, j 对应 vertices 这个结论与线性查找和二分查找的适用情况的结论类似。快速排序这类 ?(? log ?) 的算法属于基于分治的 排序算法,往往包含更多单元计算操作。而在数据量较小时,?2 和 ? log ? 的数值比较接近,复杂度不占主 导作用;每轮中的单元计算操作数量起到决定性因素。 实际上,许多编程语言(例如 Java)的内置排序函数都采用了插入排序,大致思路为:对于长数组,采用基 于分治的排序算法,例如快速排序;对于短数组,直接使用插入排序。0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.1.0 C++ 版// 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画以图解形式展示,而文字则作为解释与补充。 如果你在阅读本书时,发现某段内容提供了如图 0‑2 所示的动画图解,请以图为主、以文字为辅,综合两者 来理解内容。 图 0‑2 动画图解示例 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 开放寻址(open addressing)不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 hello‑algo.com 125 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的 之间存在边,反之 ?[?, ?] = 0 表示两顶点之间无边。 图 9‑5 图的邻接矩阵表示 邻接矩阵具有以下特性。 ‧ 顶点不能与自身相连,因此邻接矩阵主对角线元素没有意义。 ‧ 对于无向图,两个方向的边等价,此时邻接矩阵关于主对角线对称。 ‧ 将邻接矩阵的元素从 1 和 0 替换为权重,则可表示有权图。 第 9 章 图 hello‑algo.com 192 使用邻接矩阵表示图时,0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 C++版0 章 前言 hello‑algo.com 5 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画以图解形式展示,而文字则作为解释与补充。 如果你在阅读本书时,发现某段内容提供了如图 0‑2 所示的动画图解,请以图为主、以文字为辅,综合两者 来理解内容。 图 0‑2 动画图解示例 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 「开放寻址 open addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 hello‑algo.com 125 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的 表示两顶点之间无边。 第 9 章 图 hello‑algo.com 192 图 9‑5 图的邻接矩阵表示 邻接矩阵具有以下特性。 ‧ 顶点不能与自身相连,因此邻接矩阵主对角线元素没有意义。 ‧ 对于无向图,两个方向的边等价,此时邻接矩阵关于主对角线对称。 ‧ 将邻接矩阵的元素从 1 和 0 替换为权重,则可表示有权图。 使用邻接矩阵表示图时,我们可以直接访问矩阵元素以获取边,因此增删查改操作的效率很高,时间复杂度0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版// 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画以图解形式展示,而文字则作为解释与补充。 如果你在阅读本书时,发现某段内容提供了如图 0‑2 所示的动画图解,请以图为主、以文字为辅,综合两者 来理解内容。 图 0‑2 动画图解示例 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 开放寻址(open addressing)不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 www.hello‑algo.com 125 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固 之间存在边,反之 ?[?, ?] = 0 表示两顶点之间无边。 图 9‑5 图的邻接矩阵表示 邻接矩阵具有以下特性。 ‧ 在简单图中,顶点不能与自身相连,此时邻接矩阵主对角线元素没有意义。 ‧ 对于无向图,两个方向的边等价,此时邻接矩阵关于主对角线对称。 ‧ 将邻接矩阵的元素从 1 和 0 替换为权重,则可表示有权图。 第 9 章 图 www.hello‑algo.com 192 使用邻接矩阵表0 码力 | 379 页 | 18.48 MB | 10 月前3
共 17 条
- 1
- 2













