使用硬件加速Tokio - 戴翔第三届中国 Rust 开发者大会 使用硬件加速 Tokio 演讲人: Loong.Dai, Cathy.Lu Loong Dai • Intel 云原生工程师 • 微软 MVP • Dapr 、 Thanos 、 Golangci-lint 的 Maintainer • 现在主要专注于服务网格领域,探索云原生软硬件结 合新范式 • Github ID: daixiang0 自我介绍0 码力 | 17 页 | 1.66 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 09 CUDA C++ 流体仿真实战表面对象保障了高效的访存,并且自动判断越界,体 现了 GPU 作为图形学专业硬件的能力。 CUDA 纹理对象:封装 • 表面对象访问数组是可读可写的。纹理对象也可以访问 数组,不过是只读的。好处是他可以通过浮点坐标来访 问,且提供了线性滤波的能力。 • 在核函数中可以通过 tex3D 来读取纹理中的值。 • 之所以纹理是因为 GPU 一开始是渲染图形的专用硬件 ,会用到一些贴图等,这就是二维的纹理。 • 当输入的浮点坐标不是整数时,由 当输入的浮点坐标不是整数时,由 GPU 硬件提供双线 性插值( bilerp ),比手写的高效许多。 • 当然如果是三维数组,那就是三维纹理对象,访问时是 提供三线性插值( trilerp )的。 CUDA 纹理对象:封装 • 其中 cudaTextureAddressMode 表示采样的坐标超出范 围时采取的措施,有以下几种选择: • cudaAddressModeClamp :超出范围就用边界值代替 py 代码(二维定常流仿真),主要由 k-ye 编写 ,我学习 GAMES201 后贡献了支持 RK2 和 RK3 的版本。这里我们用高效的 CUDA 纹理对象 在 C++ 中重新实现了一遍,利用了硬件的三线性插值实现半拉格朗日( semi-lagrangian )对流。 对流部分:根据对流后位置重新采样 • 和 k-ye 思路不同的是我先在刚刚的 advect_kernel 算出对流后要采样的位置(0 码力 | 58 页 | 14.90 MB | 1 年前3
谈谈MYSQL那点事架构设计—高可用架构 系统优化:硬件、架构 系统优化:硬件、架构 服务优化 服务优化 应用优化 应用优化 MySQL MySQL 优化方式 优化方式 影响性能的因素 影响性能的因素 应用程序 应用程序 查询 查询 事务管理 事务管理 数据库设计 数据库设计 数据分布 数据分布 网络 网络 操作系统 操作系统 硬件 硬件 使用好的硬件,更快的硬盘、大内存、多核 使用好的硬件,更快的硬盘、大内存、多核 使用好的硬件,更快的硬盘、大内存、多核 CPU CPU ,专业的 ,专业的 存储服务器( 存储服务器( NAS NAS 、 、 SAN SAN ) ) 设计合理架构,如果 设计合理架构,如果 MySQL MySQL 访问频繁,考虑 访问频繁,考虑 Master/Slave Master/Slave 读写分离;数据库分表、数据库切片(分 读写分离;数据库分表、数据库切片(分0 码力 | 38 页 | 2.04 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化处理完以后,缓存也刚好读取完 a[2] 了,从而 CPU 不用等待,就可以直接开始处理 a[2] ,避免等待数据的 时候 CPU 空转浪费时间。 • 这种策略称之为预取( prefetch ),由硬件自动识别你程序的访存规律 ,决定要预取的地址。一般来说只有线性的地址访问规律(包括顺序、 逆序;连续、跨步)能被识别出来,而如果你的访存是随机的,那就没 办法预测。遇到这种突如其来的访存时, CPU ?原来现在操作系统管理内存是用分页 ( page ),程序的内存是一页一页贴在地址空间中的, 有些地方可能不可访问,或者还没有分配,则把这个页设 为不可用状态,访问他就会出错,进入内核模式。 • 因此硬件出于安全,预取不能跨越页边界,否则可能会触 发不必要的 page fault 。所以我们选用页的大小,因为本 来就不能跨页顺序预取,所以被我们切断掉也无所谓。 • 另外,我们可以用 _mm_alloc 的计算,从而只要计 算的延迟小于内存的延迟,延迟就被隐藏起来了,而不必等内存抵达了再算。这就是为什么有些运算量不足 32 次的程序还是会无法达到 mem-bound ,手动预取以后才能达到,就是因为硬件预取预测失败,导致不得不等 内存抵达了才能算,导致延迟隐藏失败。隐藏成功: a[0] a[1] a[2] 重新理解 mem-bound :延迟隐藏 • 之前提到, 1 次浮点读写必须伴随着0 码力 | 147 页 | 18.88 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型)不一定就是完美解决方案,要根据实际情况判断。 真正的解决: tbb::spin_mutex 其实主要的瓶颈在于 std::mutex 会切换到操作系统内核中去调度 ,非常低效。而 tbb::spin_mutex 则是基于硬件原子指令的,完全 用户态的实现。区别: std::mutex 的陷入等待会让操作系统挂起 该线程,以切换到另一个;而 tbb::spin_mutex 的陷入等待是通过 不断地 while (locked); SPGrid 操作系统管理内存的最小单位:页( 4KB ) • 当调用 malloc 时,操作系统并不会实际分配那一块内存,而是将这一段内存标记为“不可 用”。当用户试图访问(写入)这一片内存时,硬件就会触发所谓的缺页中断( page fault ),进入操作系统内核,内核会查找当前进程的 malloc 历史记录。如果发现用户写 入的地址是他曾经 malloc 过的地址区间,则执行实际的内存分配,并标记该段内存为“可 的,读写访问其 中偏移地址时,会按页的粒度自动分配和释放内存,从而满 足稀疏数据结构“按需分配”的需求。且由于分页是硬件自动 来做的,比我们软件哈希和指针数组的稀疏更高效,写起来 就和普通的二维数组没什么两样,就好像顺序访问。也用不 着什么访问者缓存坐标和块指针了,硬件的 TLB 就是我们 的访问者缓存,而且超快不需要用户自己写。 • 垃圾回收可用 madvice 提前释放一段页面。0 码力 | 102 页 | 9.50 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针扩 大在负数部分。 有符号整数 vs 无符号整数 • 刚刚说的让 10000000 表示 -1 , 11111111 表示 -128 的方法就叫做反码表示法。 • 但是这样还有一个问题,那就是硬件电路上,需要完全重新设计,对符号位做一些特殊判 断,才能支持有符号整数的加减法,因此如今的计算机都采用了一种更聪明的表示法: • 他们让 11111111 表示 -1 , 10000000 表示 的话,那么小端字节序的存储方式是: 大小端之争 我们主流的硬件架构如 x86 , ARM 都采用的小端字节序。 非主流的硬件架构如 PowerPC , MIPS 才用大端字节序。 贴近底层的语言,比如 C/C++/Fortran 会采用当前硬件架构的字节序,比如在 x86 上就会变成小端字节序。 Java 这种虚拟机语言会采用大端字节序,因此在小端字节序的硬件上会比较低效,需要额外的字节序转换工作。 为了统0 码力 | 128 页 | 2.95 MB | 1 年前3
Zadig 产品使用手册Zadig 产品特性:发布中心 编排组织、流程、内外部系统,管理代码、配置、数据变更流程,支持灰度组合策略 Zadig 产品特性:客户交付 面向大客户全天候响应、全地域升级部署,提供自运维和专用服务通道,实现稳定高效交付和服务保障 成 立 于 2 0 1 8 年 , K o d e R o v e r 是 国 内 在 云 原 生 D e v O p s 领 域 的 领 军 企0 码力 | 52 页 | 22.95 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化存储大规模三维数据的关键:稀疏数据结构 11.物理仿真实战:邻居搜索表实现 pbf 流体求解 12.C++ 在 ZENO 中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 I 硬件要求: 64 位( 32 位时代过去了) 至少 2 核 4 线程(并行课…) 英伟达家显卡( GPU 专题) 软件要求: Visual Studio 2019 ( Windows 用户) GCC 9 两个 int32 可以合并为一个 int64 四个 int32 可以合并为一个 __m128 八个 int32 可以合并为一个 __m256 让编译器自动检测当前硬件支持的指令集 -march=native 让编译器自动判断当前硬件支 持的指令。老师的电脑支持 AVX 指令集,所 以他用了。不过注意这样编译出的程序,可能 放到别人不支持 AVX 的电脑上没法运行。 数组清零:自动调用标准库的0 码力 | 108 页 | 9.47 MB | 1 年前3
新一代分布式高性能图数据库的构建 - 沈游人的技术方向,满足人们对更大规模、更复 杂数据的实时处理和存储需求,是计算机领域竞争新战略制高点。 产学结合、协同创新,打造全球领先的国产自研图数据库 AtlasGraph ,培育世界级的图计算软硬件 生态体系,保持对全球科技竞争的战略均衡。 海致高性能图计算院士专家工作站 海致获得“ 2021 年 CCF 科学技术奖科技进步卓越奖” CCF 科学技术奖被认为是计算机科学与技术领域最具影响力的专业奖项之一, 一致性(事 务) • 高性能 • 低资源消耗 • 易用 • 功能丰富 AtlasGraph 关键特性 云原生 Cloud-Native Graph Database 支持弹性伸缩,有 效利用硬件资源,高可用,高 可靠,故障自愈,低成本运维 HTAP Hybrid Transactional/Analytical Processing ,高性能图计算引 擎,预置 20 余种图计算算法 ,可扩展的分析引擎支持更复0 码力 | 38 页 | 24.68 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅存储大规模三维数据的关键:稀疏数据结构 11.物理仿真实战:邻居搜索表实现 pbf 流体求解 12.C++ 在 ZENO 中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 I 硬件要求: 64 位( 32 位时代过去了) 至少 2 核 4 线程(并行课…) 英伟达家显卡( GPU 专题) 软件要求: Visual Studio 2019 ( Windows 用户) GCC 9 (小彭老师推荐方案) 先对 a 预留一定的内存,避免频繁扩容影响性能。 加速比: 5.98 倍 并行筛选 6 使用 tbb::spin_mutex 替代 std::mutex 。 spin_mutex (基 于硬件原子指令)会让 CPU 陷入循环等待,而不像 mutex (操作系统提供调度)会让线程进入休眠状态的等待 。 若上锁的区域较小,可以用轻量级的 spin_mutex 。若上锁 的区域很大,则循环等待只会浪费0 码力 | 116 页 | 15.85 MB | 1 年前3
共 15 条
- 1
- 2













