JVM 内存模型
JVM 内存模型 Heap Method Area Runtime Constant Pool Thread Thread Thread PC Register JVM Stack Native Method Stack PC Register JVM Stack Native Method Stack PC Register JVM Stack Native Method0 码力 | 1 页 | 48.42 KB | 1 年前3RustBelt - Rust 的形式化语义模型
第三届中国 Rust 开发者大会 王俊吉 RustBelt - Rust 的形式化语义模型 Outline Background • RustBelt Project • Rust Types Overview Rust Semantics • Type System • The own Predict • Exclusive Ownership & Mutable Borrow0 码力 | 21 页 | 2.63 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程
待时,原来那个线程说不定就好了呢?(记得上节课说过内存延 迟是阻碍 CPU 性能提升的一大瓶颈, GPU 也是如此。 CPU 解决方案是超线程技术,一个物理核提供两个逻辑核,当一个逻 辑核陷入内存等待时切换到另一个逻辑核上执行,避免空 转。 GPU 的解决方法就是单个 SM 执行很多个线程,然后在遇 到内存等待时,就自动切换到另一个线程) 板块内线程的同步 • 因此,我们可以给每个 • 不过看了一下生成的 PTX 汇编,好像也没有优化掉的样子 ?难道是 CUBIN 那一阶段做的?还是驱动做的?还在向王 鑫磊求教中…… 第 9 章:共享内存进阶 GPU 的内存模型 GPU 的内存模型 全局内存:在 main() 中通过 cudaMalloc 分配的内存 共享内存:每个板块都有一个,通过 __shared__ 声明 寄存器:存储着每个线程的局部变量 板块中线程数量过多:寄存器打翻(0 码力 | 142 页 | 13.52 MB | 1 年前3基于 Rust Arrow Flight 的物联网和时序数据传输及转换工具 霍琳贺
运维监控等场景设计并优化,具有极强的弹性伸缩能力。同时它还带有内建的缓存、流式计算、数据订阅等 系统功能,能大幅减少系统设计的复杂度,降低研发和运营成本,是一个极简的时序数据处理平台。 采用关系型数据库模型 需要建库、建表, 为提升写入和查询效率,要求一个数据采集点一张表 为实现多表聚合,引入超级表概念 子表通过超级表创建,带有标签,通过标签实现多表 高效聚合 高效写入 部 开 源 www.github.com/taosdata/TDengine 全球 50 多个国家安装实例超 270k | GitHub 全球趋势排行榜多次排名第一 TDengine - 数据模型 1. 设备 ID 及关联属性( Tags ) 2. 时间戳 3. 结构化采集量 STable 超级表 Table 子表 CREATE STABLE `meters` ( `ts` TIMESTAMP 多种不同协议数据对接,开发复杂度高 • 模块之间关联性不高但模块组成复杂,可维护性差 • 大量设备大量数据归集存储,存储压力大 • 数据总线 / 消息队列消息接入,定制化程度要求高 • 数据业务逻辑自定义需求强 • 一定的实时数据分析能力 taosX - 功能路线图 集群运维 数据接入 流式处理 流式处理 数据分享 开放平台 • Backup/Restore • Replication0 码力 | 29 页 | 2.26 MB | 1 年前3Rust 异步并发框架在移动端的应用 - 陈明煜
incompatibility with mobile environment Rust 异步机制 Asynchronous Rust 异步并发框架是许多大型应用、系统具备的底层能力。 区别于多线程编程模型,它带来以下优势: 任务调度颗粒度更小,充分利用线程资源 更可控的线程数 单个任务资源占用:几十 KB -> 几百 Byte 任务切换时间 : 10 微秒 -> 100 纳秒 类似支持异步 IO ,目前已经半废弃 async-std 更轻量化的调度框架,功能被拆分 到其他多个库中, IO 密集场景性 能不如 Tokio smol Rayon 并非异步运行时。它通过同步 多线程模型提供了并行迭代器功能, 适用于处理 CPU 密集型计算任务 rayon 现有框架无法完美适配移动端(一) Core Thread Thread Worker Worker task task CPU 融合 Fusion of IO/CPU intensive 南向调度融合:异步并行迭代器 将数据容器内的数据进行递归二分,对左 半和右半分别生成一个异步任务。最终对 单个数据执行用户业务逻辑 IO & CPU 融合 南向调度融合 IO & CPU 通过设置不同优先级,进 入不同线程池调度 线程池根据负载监控(任务平均等待 时间等数据)进行线程池动态扩缩 容。 任务窃取0 码力 | 25 页 | 1.64 MB | 1 年前3新一代分布式高性能图数据库的构建 - 沈游人
领 先水平。” 以终为始,以行为知,这一项目从图计算所面临的挑战出发,解决了大规模图数据所产生 的建模能力不足、结构知识难用、巨量数据难算等技术挑战,实现了大规模复杂异质图数 据的表示学习模型、语义推荐和风险管理关键技术,构建了完整的兼具理论指导与应用检 验的大规模图数据智能分析系统与平台,满足了大数据时代从复杂异质图数据中进行知识 发现的重要需求。最终获得国内外授权发明专利 43 项, 链接预测 连接强度 一致行动人 同事关系 实际控制人 可能认识的人 上下游 同爱好的人 亲属关系 … 人与人、企业与企业、企业与人之间的 复杂、潜在关系推导和挖掘 为已有的分析模型增加“关系特征”维 度 客户贡献度 客户信用分 客户忠诚度 客户欺诈分 客户风险度 违约概率 客户资质 … 集团关系 社群关系 欺诈团伙 担保关系 资金圈 / 链 … 设别出带有某种共同特征 Productivity • Modern development tools • Lots of amazing libraries Rust 编译通过了 bug 比 cpp 少上 百倍 !!! 图模型—— Labeled Property Graph Model Arbitrary (key,value) pairs where key identifies a property and value0 码力 | 38 页 | 24.68 MB | 1 年前3Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇
Async Rust 观测与调试的痛点 Async Rust 回顾 • 特性: Future 灵活的可组合性 • 任意定制 Poll 的执行逻辑 (Join / Select / Timeout) • 动态的调用关系 • 痛点:观测与调试工具无法理解灵活的执行逻辑 • Backtrace 不够直观 ( 调用栈 -> 调用树 ) • Tracing 无法追踪调用关系的变化 Async Rust 观测与调试的痛点 计算:分布式流计算任务,实时增量维护 • 存储: S3 上的 Shared-storage 存储状态和数据 Await Tree 在 RisingWave 中的应用 • 技术挑战 • 计算任务需长期执行,稳定性要求高 • 算子逻辑复杂,计算与存储读写穿插,强依赖 Async • Await-Tree 的应用 • 数次帮助解决棘手的 Async Stuck 问题 • 长期于生产环境部署,性能开销极低 Backtrace 的补充0 码力 | 37 页 | 8.60 MB | 1 年前3GPU Resource Management On JDOS
Management On JDOS 梁永清 liangyongqing1@jd.com 提供的服务 1. 用于实验的 GPU 容器 2.基于 Kubeflow 的机器学习训练服务 3.模型管理和模型 Serving 服务 Experiment Training Serving 均基于容器,不对业务方直接提供 GPU 物理机 GPU 实验 JDOS 常规的容器服务 ,使用 gpu 的 Serving 服务 提供统一便捷的 Serving 服务,只需用户指定模型,即可提供 grpc 和 rest 服务,同时使用 GPU 复用 +HPA 提高 GPU 利用率 创建 Serving 与训练集成 • 用户只需要简单选择机房和 镜像填写模型名即可完成 Serving 服务创建 自有模型 • 用户只需要填写模型地址即 可 GPU 监控 • 容器监控服务,自适 应 GPU 容器,可根据0 码力 | 11 页 | 13.40 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程
然而却出错了:因为 size() 是 const 函 数,而 mutex::lock() 却不是 const 的。 逻辑上 const 而部分成员非 const : mutable • 我们要为了支持 mutex 而放弃声明 size() 为 const 吗?不必, size() 在逻辑 上仍是 const 的。因此,为了让 this 为 const 时仅仅给 m_mtx 开后门,可以用 compare_exchange_strong 可修改他的值 。 方便同学们理解的伪代码 • 为了方便理解,可以假想 atomic 里面是这样实现的: • 可以看到其中 compare_exchange_strong 的逻辑最为复 杂,一般简称 CAS (compare-and-swap) ,他是并行编程 最常用的原子操作之一。实际上任何 atomic 操作,包括 fetch_add ,都可以基于 CAS 来实现:这就是0 码力 | 79 页 | 14.11 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 14 C++ 标准库系列课 - 你所不知道的 set 容器
首先搞懂 set 内部是怎么确定 两个元素 a 和 b 相等的: • !(a < b) && !(b < a) • 也就是说他 set 内部没有用到 == 运算符,而是调用了两次 比较函子来判断的。逻辑是: • 若 a 不小于 b 且 b 不小于 a ,则视为 a 等于 b ,所以 这就是为什么 set 只需要一个 比较函子,不需要相等函子的 原因。 set 的排序:自定义排序函数 • 所以我们这里写了 (int *p = arr; p != arr + n; ++p) { • int value = *p; • } • 小彭老师说过建议用前置 ++ 运算符,区别我们上一期说 过了。前置比较高效且符合逻辑,后置对 C 语言考试有 用。 从 C 语言指针到 C++ 迭代器( 5 ) • 上节课说了,迭代器就是在模仿 C 语言指针。 • 那么 C++ 的迭代器模式也就呼之欲出了: • set0 码力 | 83 页 | 10.23 MB | 1 年前3
共 22 条
- 1
- 2
- 3