C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化。而指令缓存的大小刚好和数据缓存一样也是 192 KB 。 • 二级缓存有 256 KB , 6 个物理核心每个都有一个, 总共 1.5 MB 。 • 三级缓存由各个物理核心共享,总共 12 MB 。 通过图形界面查看拓扑结构: lstopo 根据我们缓存的大小分析刚刚的图表 • 也可以看到刚刚两个出现转折的点,也是在 二级缓存和三级缓存的大小附近。 • 因此,数据小到装的进二级缓存,则最大带 宽就取决于二级缓存的带宽。稍微大一点则 * * * * 重新认识 SOA * * * * 结构体的内存布局: AOS 与 SOA • AOS ( Array of Struct )单个对象的属性紧挨着存 • xyzxyzxyzxyz • SOA ( Struct of Array )属性分离存储在多个数组 ,因此比 AOS 快了 2 倍。 AOSOA :两者得兼 • 还有一种办法就是让 MyClass 内部是 SOA ,而外部仍是一个 vector的 AOS—— 这种内存布局称为 AOSOA 。 • 缺点是必须保证数量是 1024 的整数倍, 而且因为要两次指标索引,随机访问比较 烦。 • 这里的 1024 并非随意选取,而是要让每 个属性 SOA 数组的大小为一个页 0 码力 | 147 页 | 18.88 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程如下载一个文件,同时还要和用户交互。 • 这在 GUI 应用程序中很常见,比如浏览 器在后台下载文件的同时,用户仍然可以 用鼠标操作其 UI 界面。 没有多线程:程序未响应 • 没有多线程的话,就必须等文件下载完了 才能继续和用户交互。 • 下载完成前,整个界面都会处于“未响应”状 态,用户想做别的事情就做不了。 现代 C++ 中的多线程: std::thread • C++11 开始,为多线程提供了语言级别的 构时会自动等待全部线程执行完毕。 小彭老师快乐吐槽时间 • 多线程、异步、无阻塞、并发,能提升程序响应速度,对现实世界中的软件工程至关重要 。 • 反面教材: blender 在运行物理解算的时候,界面会卡住,算完一帧后窗口才能刷新一遍 ,导致解算过程中基本别想做事,这一定程度上归功于 opengl 原始的单线程设计。 • 正面教材: zeno 可以在解算过程中,随时拖动滑块看前几帧的结果,编辑场景图,修改0 码力 | 79 页 | 14.11 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化错了,有可能不仅不变快,反而还变慢! SIMD 和缓存行对齐只是性能优 化的一个点,又不是全部。还要考虑结构体变大会导致内存带宽的占用, 对缓存的占用等一系列连锁反应,总之,要根据实际情况选择优化方案。 结构体的内存布局: AOS 与 SOA • AOS ( Array of Struct )单个对象的属性紧挨着存 • xyzxyzxyzxyz • SOA ( Struct of Array )属性分离存储在多个数组0 码力 | 108 页 | 9.47 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南• 在 Linux 中,可以运行 ccmake -B build 来启 动基于终端的可视化缓存编辑菜单。 • 在 Windows 则可以 cmake-gui -B build 来启动 图形界面编辑各个缓存选项。 • 当然,直接用编辑器打开 build/CMakeCache.txt 修改后保存也是可以的。 • CMakeCache.txt 用文本存储数据,就是可供用 户手动编辑,或是被第三方软件打开并解析的。0 码力 | 166 页 | 6.54 MB | 1 年前3
《深入浅出MFC》2/ePrint Preview) 什么是打印预览?简单地说,把屏幕仿真为打印机,将图形输出于其上就是了。预览的 目的是为了让使用者在打印机输出之前,先检查他即将获得的成果,检查的重要项目包 括图案的布局以及分页是否合意。 为了完成预览功能,MFC 在CDC 之下设计了一个子类别,名为CPreviewDC。所有其 他的CDC 对象都拥有两个DC,它们通常井水不犯河水;然而CPreviewDC 就不同,0 码力 | 1009 页 | 11.08 MB | 1 年前3
共 5 条
- 1













