C++高性能并行编程与优化 - 课件 - 09 CUDA C++ 流体仿真实战
边界条件:仅在第一层额外判断边界条件 进一步改进 VDB 导出:支持导出多个网格,并指定名称 进一步改进 VDB 导出: P-IMPL 模式 进一步改进 VDB 导出: F-IMPL 模式 Blender 渲染结果 改进 改进边界条件:外部边界流出而不是反弹,内部边界可以流出速度 Blender 中调整一下材质 Blender 中调整一下材质 改进对流:让烟雾随时间逐渐褪色 改进对流:让烟雾随时间逐渐褪色 改进对流:让烟雾随时间逐渐褪色 改进褪色:不是褪色 density ,而是褪色 temperature 改进褪色:不是褪色 density ,而是褪色 temperature 改进褪色:不是单纯地乘以 decayRate ,还和周围环境温度求平均值 改进温度:高温气体往上浮(作为外力来看待) 结果:更像火焰了 改进颜色场:让 clr 作为尘埃密度,密度越高越有向下坠落的趋势 问题:上面的尘埃无止境的飘下来 解决:纹理对象指定为 解决:纹理对象指定为 cudaAddressModeBorder 让越界访问自动变 0 即可 结果:小球加回来 改进温度:只有达到一定温度才会上升,否则(视为冷空气)下降 改进褪色:尘埃密度也会褪色0 码力 | 58 页 | 14.90 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅
,其中 n 是元素个数 改进的并行缩并( GPU ) • 刚才那种方式对 c 比较大的情况不友好, 最后一个串行的 for 还是会消耗很多时间 。 • 因此可以用递归的模式,每次只使数据缩 小一半,这样基本每次都可以看做并行的 for ,只需 log2(n) 次并行 for 即可完成 缩并。 • 这种常用于核心数量很多,比如 GPU 上 的缩并。 结论:改进后的并行缩并的时间复杂度为 ,工作复杂度为 O(n+c) ,其中 n 是元素个数 改进的并行扫描( GPU ) 第一步、 4 个线程,每个处理 2 个元素的扫描,花了 1 秒 第而步、 4 个线程,每个处理 2 个元素的扫描,花了 1 秒 第三步、 4 个线程,每个处理 2 个元素的扫描,花了 1 秒 用电量: 3*4=12 度电 总用时: 1*3=3 秒 结论:改进后的并行扫描的时间复杂度为 O(logn) ,工作复杂度为 并行快速排序 (和刚刚手写的快速排序)加速比: 2.05 倍 改进:数据足够小时,开始用标准库串行的排序 (和标准库串行的 std::sort )加速比: 4.59 倍 封装好了: tbb::parallel_sort (和标准库串行的 std::sort )加速比: 4.80 倍 重新认识改进的并行缩并 • 其实之前提到“改进后的并行缩并”,也是一 种分治法的思想:大问题一分为二变成小0 码力 | 116 页 | 15.85 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南
mylib.cpp 里的 say_hello 函数 改进: mylib 作为一个静态库 改进: mylib 作为一个动态库 改进: mylib 作为一个对象库 https://www.scivision.dev/cmake-object-libraries/ 对象库类似于静态库,但不生成 .a 文件,只由 CMake 记住该库生成了哪些对象文件 改进: mylib 作为一个对象库 https://www0 码力 | 166 页 | 6.54 MB | 1 年前3谈谈MYSQL那点事
DATE_FORMAT(), 等,如果使用了 等,如果使用了 OR OR 或 或 IN IN ,索引也将失效 ,索引也将失效 使用 使用 Explain Explain 语句来帮助改进我们的 语句来帮助改进我们的 SQL SQL 语句 语句 应用优化 应用优化 编写高效的 编写高效的 SQL SQL (二) (二) 不要在 不要在 where where 子句中的 子句中的““==””0 码力 | 38 页 | 2.04 MB | 1 年前3Zadig 面向开发者的云原生 DevOps 平台
提升效率,建设质量体系 安全 安全建设被动: • 安全建设缺乏时机和抓手 • 出现问题,影响业务进度 前置安全服务:全流程嵌入安全检测,避免流入业务环节。 全流程安全门禁:关键环节设置安全门禁,快速反馈研发改进 故障拦截率提升 1-3 倍 业务响应效率提升 3-5 倍 全流程安全建设 更多价值体现 组织 靠流程和个人,效率越来越低 • 低人效 / 低质量 / 低效率 / 高成本 • 人淹没在系统的海洋里 构建 DevOps 流程,以减少 整体耗时、提升运维效率和 开发者体验。 解决方案 Zadig 自身秉持 " 云原 生 " 、 " 多环境 " 、 " 无缝接 入 " 等理念,完美契合路特斯 改进软件交付流程的需求。 在多轮方案选型和对比后, 路特斯最终选择 Zadig 作为 新一代 DevOps 平台。 效果收益 1. 每月节省 15 人天 2. 新项目接入效率提升0 码力 | 59 页 | 81.43 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化
nx*nblur 需要缓存: blockSize*nx*nblur 改进:只对 X 循环做分块 BM_y_blur_tiled BM_y_blur_tiled_only_x 因此,可以只对 X 循环分块,并且把外 层改成 XY 序,形成 XYx 序。 需要缓存: blockSize*nx*nblur 需要缓存: blockSize*nblur 改进:只对 X 循环做分块 • 反而变慢了,是怎么回事?0 码力 | 147 页 | 18.88 MB | 1 年前3C++高性能并行编程与优化 - 课件 - Zeno 中的现代 C++ 最佳实践
是一个模板类,则 CRTP 的那个参数应包含派生类的模板参数,例 如: • template• struct Derived : Base > {}; CRTP 的改进:如果基类还想基于另一个类 • 现在我们的需求有变,需要新增一个“超狗 (superdog)” 类,他继承自普通狗 (dog) 。 • 这时我们可以给 IObjectClone 新增一个模板参数 0 码力 | 54 页 | 3.94 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化
ivdep C/C++ 的缺点:指针的自由度过高,允许多个 immutable reference 指向同一个对象,而 Rust 从语法层面禁止,从而让编译器放心大胆 优化。 为什么标准委员会不改进一下?因为一旦放弃 兼容,就等于抛弃所有历史遗产的全新语言, 就和 Rust 无异,从而没有任何理由再学习 C++ 。 std::vector :也能实现 SOA ! 优化前 (AOS) 优化后0 码力 | 108 页 | 9.47 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针
的)就需要起始地址和数组长度两个,才能确定 下来,也就是 char * 和 int 两个。 • 所以要把动态数组的引用传给函数,需要有两个 参数,一个指针加一个长度。 使用 const 修饰指针指向的值 • 改进: printarr 没有修改 a 数组里的元素,因此 是只读的访问,可以改成 const char* a 。 • 标记 const 的好处是,让调用者清楚哪些函数有 副作用(会修改数组),哪些是只读的。0 码力 | 128 页 | 2.95 MB | 1 年前3
共 9 条
- 1