C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型(root node) 。 图片解释稀疏的好处 传统稠密二维数组 无边界稀疏分块哈希表 此外,还是按需分配内存,即使被写入的部分奇形怪状也不会浪费内存。 这些被写入的部分被称为激活元素 (active element) ,反之则是未激活 (inactive) 。 这就是稀疏的好处,按需分配,自动扩容。 分块则是利用了我们存储的数据常常有着空间局域性的特点,减轻哈希表的压 力,同时在每个块内部也可以快乐地 Windows 可以用 VirtualAllocateEx 之类。 • mmap 出来的起始地址保证是对齐到 4KB 的,读写访问其 中偏移地址时,会按页的粒度自动分配和释放内存,从而满 足稀疏数据结构“按需分配”的需求。且由于分页是硬件自动 来做的,比我们软件哈希和指针数组的稀疏更高效,写起来 就和普通的二维数组没什么两样,就好像顺序访问。也用不 着什么访问者缓存坐标和块指针了,硬件的 TLB 就是我们 edu/~sifakis/papers/SPGrid.pdf 今天的回家作业 • 用稀疏数据结构改良康威生命游戏 (conway’s game of life) 的代码。 • 要求:自动扩展边界,按需分配内存,垃圾回收及时释放全零的块,用量化的 bit 压缩空 间,使用 omp 或 tbb 并行,用 accessor 缓存坐标以减轻锁的压力。 • 评分规则:加速了多少倍就是多少分。 感谢观看!0 码力 | 102 页 | 9.50 MB | 1 年前3
CeresDB Rust 生产实践 任春韶runtime.spawn(task0) runtime.spawn(task1) runtime.spawn(task2) 生产实践 – Async lock 总结: Async lock: 按需使用,如果是纯内存计算的时候,使用 blocking mutex 比较好。 生产实践 – Mixed workload Write Read Compact Runtimes 问题: CeresDB0 码力 | 22 页 | 6.95 MB | 1 年前3
Zadig 产品使用手册dev 工作流,选择多个服务以及其对应的多个 MR 执行 Sprint 发布 测试验证 变更发布 产品规划 需求开发 更新业务配置(以 Nacos 为例) 执行对应环境的工作流,选择配置并按需修改,更新 Nacos 配置 Sprint 发布 测试验证 变更发布 产品规划 需求开发 更新项目管理任务状态 执行对应环境的工作流,选择对应任务 Sprint 发布 测试验证 变更发布0 码力 | 52 页 | 22.95 MB | 1 年前3
Zadig 面向开发者的云原生 DevOps 平台使用 Zadig 的 Helm 部署项目 ( Chart 模板)进行优化 1. Chart 模板库提供了统一化的服务配 置管理 2. 自动构建部署 3. 环境公开透明 4. 测试环境的按需一键式拉起 环境治理场景:数千开发者、 5 条业务线、多分支多环境协作 服务通过云厂商上了云,而配套设施 并没有使用云原生方式 1. ci/cd 工具不是云原生的 20 码力 | 59 页 | 81.43 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程• 其实 std::unique_lock 具有 mutex 的所有成员函数: lock(), unlock(), try_lock(), try_lock_for() 等。除了他 会在解构时按需自动调用 unlock() 。 • 因为 std::lock_guard 无非是调用其构造参数名为 lock() 的成员函数,所以 std::unique_lock 也可以作 为 std::lock_guard0 码力 | 79 页 | 14.11 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程cudaMalloc 换成 cudaMallocManaged 即可,释放时也是通过 cudaFree 。这样 分配出来的地址,不论在 CPU 还是 GPU 上都是一模一样的,都可以访问。而 且拷贝也会自动按需进行(当从 CPU 访 问时),无需手动调用 cudaMemcpy ,大 大方便了编程人员,特别是含有指针的一 些数据结构。 注意不要混淆 • 主机内存 (host) : malloc 、0 码力 | 142 页 | 13.52 MB | 1 年前3
共 6 条
- 1













