新一代分布式高性能图数据库的构建 - 沈游人银行证券保险 企业、公安部、上海市公安局、武汉市公安局等 100+ 公安机构,国家电网、 国信通产业集团等电力能源行业提供数据智能产品解决方案及长期服务。 海致专注为政府、金融、能源等客户提供大数据处理、分析、挖掘服务,在互 联网技术基础上,打造专业、易用的企业级大数据实战应用产品及解决方案。 北京中关村总部 武汉运维中心 深圳研发中心 上海应用中心 专注于数据智能技术赋能中国数字经济发展 伴随市场对于知识图谱应用的不断深入,图数据规模和应用性能之间的矛盾愈 加凸显,海致针对以上背景展开了系统性的技术攻关,解决了图数据的高效存 储、索引及复制难题,提出了基于图缩减的高效分析方法,并孵化出了一个大 规模图数据分析平台 AtlasGraph 。 5 获得 2022 年中国电子学会科学技术奖科技进步一等奖 中国电子学会发布的《 2022 中国电子学会科学技术奖公告》,海 致星图与北京邮电 应用”项目,斩获“科学技术奖科技进步一等奖”,这也是国内电子信 息领域的最高奖项。 该奖项由数十名院士评审,历经三轮,从三百余个申报项目中遴选 而出。由院士等组成的科技成果鉴定委员会认为:“该成果技术复杂 度高,研制难度大,创新性强,项目成果整体达到国际先进水平, 其中异质图建模与表示学习技术和超大规模图学习系统处于国际领 先水平。” 以终为始,以行为知,这一项目从图计算所面临的挑战出发,解决了大规模图数据所产生0 码力 | 38 页 | 24.68 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - Zeno 中的现代 C++ 最佳实践 我们的目的是让基类能调用派生类的函数,其实本来是可以通过虚函数的,但是: • 1. 虚函数是运行时确定的,有一定的性能损失。 • 2. 拷贝构造函数无法作为虚函数。 • 这就构成了 CRTP 的两大常见用法: • 1. 更高性能地实现多态。 • 2. 伺候一些无法定义为虚函数的函数,比如拷贝构造,拷贝赋值等。 • https://www.jianshu.com/p/ec8a01cba496 move_assign 对应于移动赋值 , move_clone 对应于移动构造,全了! • 就这样把 C++ 的四大特殊函数变成了多 态的虚函数,这就是被小彭老师称为自动 虚克隆 (auto-vitrual-clone) 的大法。 Zeno 中对 OpenVDB 对象的封装 • 开源的体积数据处理库 OpenVDB 中有许多“网格”的类(可以理解为多维数组),例如: • openvdb::Vec3fGrid0 码力 | 54 页 | 3.94 MB | 1 年前3
基于 Rust Arrow Flight 的物联网和时序数据传输及转换工具 霍琳贺),专为物联网、工业互联网、金融、 IT 运维监控等场景设计并优化,具有极强的弹性伸缩能力。同时它还带有内建的缓存、流式计算、数据订阅等 系统功能,能大幅减少系统设计的复杂度,降低研发和运营成本,是一个极简的时序数据处理平台。 采用关系型数据库模型 需要建库、建表, 为提升写入和查询效率,要求一个数据采集点一张表 为实现多表聚合,引入超级表概念 子表通过超级表创建,带有标签,通过标签实现多表 R u s t 使 用 taosX - 物联网数据接入问题 • 多种不同协议数据对接,开发复杂度高 • 模块之间关联性不高但模块组成复杂,可维护性差 • 大量设备大量数据归集存储,存储压力大 • 数据总线 / 消息队列消息接入,定制化程度要求高 • 数据业务逻辑自定义需求强 • 一定的实时数据分析能力 taosX - 功能路线图 集群运维 数据接入 流式处理 流式处理 数据分享0 码力 | 29 页 | 2.26 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串里没有,所以这个是真正必要的语言本身的改动。 • 而 java 就是在语言层面,直接在 jvm 里引入了引用计数,宣称“一切皆对象”,虽然方便了 富连网业务中常见的面向对象编程范式,但也妨碍了 java 进军数据处理,高性能计算等领域 。 java 第八帝国 cpp 第十一共和国 chrono 和 complex 也定义了一些 literials std::literials 内部定义一览 std::0 码力 | 162 页 | 40.20 MB | 1 年前3
谈谈MYSQL那点事key_buffer_size 8M 512M 用来存放索引区块的缓存值 , 建议 128M 以上,不要大于内存的 30% read_buffer_size 128K 64M 用来做 MyISAM 表全表扫描的缓冲大 小 . 为从数据表顺序读取数据的读操 作保留的缓存区的长度 myisam_sort_buffer_size 16M 128M 设置 , 恢复 , 修改表的时候使用的缓冲 大小,值不要设的太大 服务优化 512M 在日志组中每个日志文件的大小 , 一般是 innodb_buffer_pool_size 的 25% ,官方推荐是 innodb_buffer_pool_size 的 40-50%, 设置大 一点来避免在日志文件覆写上不必要的缓冲池刷新 行为 innodb_log_buffer_size 128K 64M 用来缓冲日志数据的缓冲区的大小 . 推荐是 8M , 官方推荐该值小于 16M ,最好是 数据查询:编写简洁高效的 SQL SQL 语句 语句 应用优化 应用优化 应用优化方式 应用优化方式 应用优化 应用优化 表结构设计原则 表结构设计原则 选择字段的一般原则是保小不保大,能用占用字节 少的字段就不用大字段。比如,主键,强烈建议用 int 整型 . 不用 bigint ,为什么 ? 省空间啊。空间是什么 ? 空间就是效率!按 4 个字节和按 32 个字节定位一条记 录,谁快谁慢太明显了。涉及几个表做0 码力 | 38 页 | 2.04 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器因为引用最多只有 8 字节(指针的大小),而他指向的 V 可能是非常大的(比如 string 类型在栈上的空间就要消耗 32 字节,更不用说可能堆上还有),深拷贝一下要花费不少 时间。 • for (auto [k, v]: m) { • print(k, v); • } map 的遍历:不修改也建议加引用 k v (假如非常大的话) map 中的 堆空间 执行你这段代码 的栈空间 的栈空间 & ( 深拷贝,浪费时间 ) v (假如非常大的话) • 其实,就算遍历时不修改,还是建议加引用,在 K 和 V 类型尺寸很大时,可以节省性能 。 • 因为引用最多只有 8 字节(指针的大小),而他指向的 V 可能是非常大的(比如 string 类型在栈上的空间就要消耗 32 字节,更不用说可能堆上还有),深拷贝一下要花费不少 时间。 • for (auto &[k, v]: v]: m) { • print(k, v); • } map 的遍历:不修改也建议加引用 k v (假如非常大的话) 执行你这段代码 的栈空间 & & ( 建立引用 ) map 中的 堆空间 • 何况 structural-binding 捕获的引用比刚刚图示的还要优化。他只会保存一个指向 pair 类 型的指针,然后在你使用 k 和 v 时再去按偏移量访问里面的 first0 码力 | 90 页 | 8.76 MB | 1 年前3
Zadig 面向开发者的云原生 DevOps 平台研发透明化:不同项目清晰可见的效率、质量、进度 进度管理:根据团队客观数据,预测和确定项目规划 迭代进度一目了然 项目从无到有可核算 管理有数据科学依据 解放管理,更多时间花在 业务创新 平台运维 业务压力大,能力建设缓慢: • 大量工作花在工具链维护 • 项目间依赖复杂,环境管理难 • 交付版本依赖工单,发布风险高 • 公共资源 / 业务资源利用率低 赋能多业务:一个平台解决了多异构项目的管理和规范 孤岛,打造成长型组织 企业收益分析 现存方案 典型代表 方案特点分析 Zadig 方案优势 传统 Jenkins 方案 GitLab + Jenkins + 脚本化 运行效率低,管理维护成本高 方案局限性大,安全性风险高 无法支持敏捷交付模式;手工维护成本 高,阻碍业务交付效率 面向多服务并行部署,安全发布, 0 维护负担 支撑云原生构建 / 运行环境,多云异构支持及企业 级登录权限支持 传统运维管理类平台 500-2000 万之间 使用和学习门槛高;随业务发展扩展性差 局限性大,内部推广难度极高,做完后维 护成本高价值难被证明 低采购成本、低实施成本, 内置模板库和最佳实践;高扩展性、技术先进性强 ,可灵活广泛接入现有工具链和业务场景 基于代码管理的 DevOps 方 案 Gitee 平台 GitLab 平台 局限性大、全流程安全性低 维护成本高 支持多个服务并行构建部署、产品级发布,可灵活0 码力 | 59 页 | 81.43 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型希的压力。但意味着键值在空间上需要具有一定的局域性,否 则 会浪费分块中一 部分空间。 然而我们这里是 要用他记录粒子 经过的点,因此 具有一定空间局 域性,能够被分 块优化。 实际上空间局域 性正是稀疏网格 能够实现的一大 前提,稍后详细 讨论。 在 16x16 分块的基础上,只用一个 bit 存储 图片解释稀疏的好处 传统稠密二维数组 无边界稀疏分块哈希表 有了无边界的稀疏网格,再也不用担心二维数组要分配多大了。 局域性的特点,减轻哈希表的压 力,同时在每个块内部也可以快乐地 SIMD 矢量化, CPU 自动预取之类的。 第 2 章:位运算 稀疏的好处:坐标可以是负数 这样即使坐标为负数,或者可以是任意大的坐标,都不会产生越界错误。 但是分块存储时负数却导致出错了 为什么 segf 了? 按理说不会越界才对? C 语言 % 的特色:负数 • 7 % 4 = 3 • -7 % 4 = -3 • 因此我们可以把数据类型变小,这样所需的内存 量就变小,从而内存带宽也可以减小! • 对于右边这种内存瓶颈的循环体,从 4 字节的 int 改成 int8_t ,理论上可以增加 4 倍速度! • 这就是量化数据类型的思想,把占空间大的数据 类型转换成较小的(损失一定精度,换来性能) 。 • 因此如果你的程序不需要那么高精度,可以考虑 用小点的数据类型。 8 个 bit 合并进一个 int8_t :每个占据 1/8 字节0 码力 | 102 页 | 9.50 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程• CUDA 的语法,基本完全兼容 C++ 。包括 C+ +17 新特性,都可以用。甚至可以把任何一个 C++ 项目的文件后缀名全部改成 .cu ,都能编 译出来。 • 这是 CUDA 的一大好处, CUDA 和 C++ 的关 系就像 C++ 和 C 的关系一样,大部分都兼容 ,因此能很方便地重用 C++ 现有的任何代码库 ,引用 C++ 头文件等。 • host 代码和 device Hello, world! 打印了三遍! • 原来,三重尖括号里的第二个参数决定着启动 kernel 时所用 GPU 的线程数量。 • GPU 是为并行而生的,可以开启很大数量的 线程,用于处理大吞吐量的数据。 获取线程编号 • 可以通过 threadIdx.x 获取当前线程的编 号,我们打印一下试试看。 • 这是 CUDA 中的特殊变量之一,只有在 核函数里才可以访问。 • 可以看到线程编号从 cudaFree 。这样 分配出来的地址,不论在 CPU 还是 GPU 上都是一模一样的,都可以访问。而 且拷贝也会自动按需进行(当从 CPU 访 问时),无需手动调用 cudaMemcpy ,大 大方便了编程人员,特别是含有指针的一 些数据结构。 注意不要混淆 • 主机内存 (host) : malloc 、 free • 设备内存 (device) : cudaMalloc 、 cudaFree0 码力 | 142 页 | 13.52 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 13 C++ STL 容器全解之 vectorhttps://github.com/parallel101/course C++ 标准库五大件:容器( container ) C++ 标准库五大件:迭代器( iterator ) C++ 标准库五大件:算法( algorithm ) C++ 标准库五大件:仿函数( functor ) C++ 标准库五大件:分配器( allocator ) 侯捷 STL 侯捷 STL vector 容器 noexcept; • int const &operator[](size_t i) const noexcept; vector 容器: operator[] • 值得注意的是, [] 运算符在索引超出数组大 小时并不会直接报错,这是为了性能的考虑。 • 如果你不小心用 [] 访问了越界的索引,可能 会覆盖掉别的变量导致程序行为异常,或是访 问到操作系统未映射的区域导致奔溃。 • int &operator[](size_t0 码力 | 90 页 | 4.93 MB | 1 年前3
共 23 条
- 1
- 2
- 3













