 新一代分布式高性能图数据库的构建 - 沈游人图注意力网络 • 图自编码器 图查询及其应用场景 图查询 • 使用图数据库的查询语言进行点边的关联查询,可以快速完成传统数据库难以完成的 多度点边关 联 当前图的典型应用场景 路径识别 群体挖掘 节点识别 相似节点 链接预测 连接强度 一致行动人 同事关系 实际控制人 可能认识的人 上下游 同爱好的人 亲属关系 …  人与人、企业与企业、企业与人之间的 复杂、潜在关系推导和挖掘 分布式事务技术方案 MVOCC 处理流程 全面的算法支持  覆盖全部常用算法 • 路径计算、社区检测、相似度计算 等  丰富的自研图算法 • 环路识别、链路识别、节点间全路径、 发散子图识别、汇聚子图识别、金字塔 子图识别 与图数据库的深度结合  使用 cypher 语句直接调用  支持在用户筛选出的子图上计算  灵活的参数设定 自研图计算系统架构、极致的性能优化  用户授权管理 • 中文及显示别名支持 图模型设计 WebUI—— 可视化图探索分析 【亮点】 • K 步邻居查询、属性过滤 • 最短路径、全路径分析 • 按实体、边类型匹配查询 • 子图识别、环路识别等在 线图挖掘分析 • 实体、边可视化统计分析 • 树、层次、分组等多种布 局方式 • 基于 D3 自研的万级别实 体展现 可视化图探索分析 AtlasGraph 架构及实现 图技术简介0 码力 | 38 页 | 24.68 MB | 1 年前3 新一代分布式高性能图数据库的构建 - 沈游人图注意力网络 • 图自编码器 图查询及其应用场景 图查询 • 使用图数据库的查询语言进行点边的关联查询,可以快速完成传统数据库难以完成的 多度点边关 联 当前图的典型应用场景 路径识别 群体挖掘 节点识别 相似节点 链接预测 连接强度 一致行动人 同事关系 实际控制人 可能认识的人 上下游 同爱好的人 亲属关系 …  人与人、企业与企业、企业与人之间的 复杂、潜在关系推导和挖掘 分布式事务技术方案 MVOCC 处理流程 全面的算法支持  覆盖全部常用算法 • 路径计算、社区检测、相似度计算 等  丰富的自研图算法 • 环路识别、链路识别、节点间全路径、 发散子图识别、汇聚子图识别、金字塔 子图识别 与图数据库的深度结合  使用 cypher 语句直接调用  支持在用户筛选出的子图上计算  灵活的参数设定 自研图计算系统架构、极致的性能优化  用户授权管理 • 中文及显示别名支持 图模型设计 WebUI—— 可视化图探索分析 【亮点】 • K 步邻居查询、属性过滤 • 最短路径、全路径分析 • 按实体、边类型匹配查询 • 子图识别、环路识别等在 线图挖掘分析 • 实体、边可视化统计分析 • 树、层次、分组等多种布 局方式 • 基于 D3 自研的万级别实 体展现 可视化图探索分析 AtlasGraph 架构及实现 图技术简介0 码力 | 38 页 | 24.68 MB | 1 年前3
 夏歌-使用Rust构建LLM应用5 调用 OpenAI , 并把结果返回。 "0.1.0" 基于 ChatGPT 的 Telegram 机器人 在 ocr 这个 function 里 识别 图片中的文字, text_detection 是把识别的图片转化为 base64 https://github.com/flows-network/review-any- pr-with-chatgpt 使用 Rust Slash 开头的 telegram command ,就启动不同的 Prompt "0.1.0" 基于 ChatGPT 的 Telegram 机器人 OCR 识别图片中的文 字, text_detection 是把识别 的图片转化为 base64 招聘 Rust 实习生 请与 vivian@secondstate.io 联系 一个小广告 Thank you !0 码力 | 36 页 | 38.31 MB | 1 年前3 夏歌-使用Rust构建LLM应用5 调用 OpenAI , 并把结果返回。 "0.1.0" 基于 ChatGPT 的 Telegram 机器人 在 ocr 这个 function 里 识别 图片中的文字, text_detection 是把识别的图片转化为 base64 https://github.com/flows-network/review-any- pr-with-chatgpt 使用 Rust Slash 开头的 telegram command ,就启动不同的 Prompt "0.1.0" 基于 ChatGPT 的 Telegram 机器人 OCR 识别图片中的文 字, text_detection 是把识别 的图片转化为 base64 招聘 Rust 实习生 请与 vivian@secondstate.io 联系 一个小广告 Thank you !0 码力 | 36 页 | 38.31 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 04 从汇编角度看编译器优化优化后: 挪到外面来:优化失败 然而只要去掉 (dt * dt) 的括号就会优化失败: 因为乘法是左结合的,就相当于 (b[i] * dt) * dt 编译器识别不到不变量,从而优化失败。 因此,要么帮编译器打上括号帮助他识别,要 么手动提取不变量到循环体外。 调用不在另一个文件的函数: SIMD 优化失败 因为编译器看不到那个文件的 other 函数里是什么,哪怕 other 在定0 码力 | 108 页 | 9.47 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 04 从汇编角度看编译器优化优化后: 挪到外面来:优化失败 然而只要去掉 (dt * dt) 的括号就会优化失败: 因为乘法是左结合的,就相当于 (b[i] * dt) * dt 编译器识别不到不变量,从而优化失败。 因此,要么帮编译器打上括号帮助他识别,要 么手动提取不变量到循环体外。 调用不在另一个文件的函数: SIMD 优化失败 因为编译器看不到那个文件的 other 函数里是什么,哪怕 other 在定0 码力 | 108 页 | 9.47 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南OpenCVConfig.cmake 的文件。 • 注:出于历史兼容性考虑,除了 OpenCVConfig.cmake 以外 OpenCV-config.cmake 这 个文件名也会被 CMake 识别到。 • 同理, find_package(Qt5) 则是会去找名为 Qt5Config.cmake 的文件。 • 这些形如 包名 + Config.cmake 的文件,我称之为包配置文件。 • 是找不到的。 • 这时你需要手动指定一个变量告诉他在哪儿,可以是普通变量 ${Qt5_DIR} ,也可以是环 境变量 $ENV{Qt5_DIR} ,两个中只要设置了任何一个 find_package 都可以识别到。 • 变量一般通过命令行 -DQt5_DIR=”C:/Program Files/Qt5.12.1/lib/cmake/Qt5” 设置。 举例, Windows 系统, Qt5 • 例如我把0 码力 | 56 页 | 6.87 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南OpenCVConfig.cmake 的文件。 • 注:出于历史兼容性考虑,除了 OpenCVConfig.cmake 以外 OpenCV-config.cmake 这 个文件名也会被 CMake 识别到。 • 同理, find_package(Qt5) 则是会去找名为 Qt5Config.cmake 的文件。 • 这些形如 包名 + Config.cmake 的文件,我称之为包配置文件。 • 是找不到的。 • 这时你需要手动指定一个变量告诉他在哪儿,可以是普通变量 ${Qt5_DIR} ,也可以是环 境变量 $ENV{Qt5_DIR} ,两个中只要设置了任何一个 find_package 都可以识别到。 • 变量一般通过命令行 -DQt5_DIR=”C:/Program Files/Qt5.12.1/lib/cmake/Qt5” 设置。 举例, Windows 系统, Qt5 • 例如我把0 码力 | 56 页 | 6.87 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 07 深入浅出访存优化不用等待,就可以直接开始处理 a[2] ,避免等待数据的 时候 CPU 空转浪费时间。 • 这种策略称之为预取( prefetch ),由硬件自动识别你程序的访存规律 ,决定要预取的地址。一般来说只有线性的地址访问规律(包括顺序、 逆序;连续、跨步)能被识别出来,而如果你的访存是随机的,那就没 办法预测。遇到这种突如其来的访存时, CPU 不得不空转等待数据的抵 达才能继续工作,浪费了时间。0 码力 | 147 页 | 18.88 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 07 深入浅出访存优化不用等待,就可以直接开始处理 a[2] ,避免等待数据的 时候 CPU 空转浪费时间。 • 这种策略称之为预取( prefetch ),由硬件自动识别你程序的访存规律 ,决定要预取的地址。一般来说只有线性的地址访问规律(包括顺序、 逆序;连续、跨步)能被识别出来,而如果你的访存是随机的,那就没 办法预测。遇到这种突如其来的访存时, CPU 不得不空转等待数据的抵 达才能继续工作,浪费了时间。0 码力 | 147 页 | 18.88 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 15 C++ 系列课:字符与字符串而且即使搞错了也能正常编译通过(一些高级的编译器会 给出警告),但是运行结果不对,或者还有可能崩溃。 泛型的 iostream 应运而生 • 得益于 C++ 的重载技术, cout 不用你手动指定类型,他 会自动识别参数的类型,帮你调用相应的格式化函数。 c_str 和 data 的区别 • s.c_str() 保证返回的是以 0 结尾的字符串首地址指针,总长度为 s.size() + 1 。 • s find_first_of 应用案例:按空格分割字符串 • 刚刚说 ASCII 的时候提到过 isspace 这个函数,他会把 ‘ ’、‘ \t’ 、‘ \v’ 、‘ \f’ 、‘ \n’ 、‘ \r’ 识别为空格(因为他们显示 出来的确都是空的),我姑且称之为空格类字符 ( whitespace )。 • 如何找到第一个出现的空格类字符?如果要找第一个出现 的空格,可以用 s.find(‘ ’) ,如果要找到第一个出现的空格0 码力 | 162 页 | 40.20 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 15 C++ 系列课:字符与字符串而且即使搞错了也能正常编译通过(一些高级的编译器会 给出警告),但是运行结果不对,或者还有可能崩溃。 泛型的 iostream 应运而生 • 得益于 C++ 的重载技术, cout 不用你手动指定类型,他 会自动识别参数的类型,帮你调用相应的格式化函数。 c_str 和 data 的区别 • s.c_str() 保证返回的是以 0 结尾的字符串首地址指针,总长度为 s.size() + 1 。 • s find_first_of 应用案例:按空格分割字符串 • 刚刚说 ASCII 的时候提到过 isspace 这个函数,他会把 ‘ ’、‘ \t’ 、‘ \v’ 、‘ \f’ 、‘ \n’ 、‘ \r’ 识别为空格(因为他们显示 出来的确都是空的),我姑且称之为空格类字符 ( whitespace )。 • 如何找到第一个出现的空格类字符?如果要找第一个出现 的空格,可以用 s.find(‘ ’) ,如果要找到第一个出现的空格0 码力 | 162 页 | 40.20 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 性能优化之无分支编程 Branchless Programming的时候手动优化才有优势,开 启 -O1 优化以后都区别不大了。 • 因此对于简单的分支,完全可以不考虑优化, 交给编译器自动优化掉。 • 一般只需要把 if-else 改成三目运算符 ?: 编 译器就能成功识别了(见开头的例子)。 • 建议只有当性能遇到瓶颈时,再去针对性对 “热代码”优化,而不是一股脑儿全部改成无分 支,影响可读性。 “ 妙用加减乘”的无分支优化是万能的吗? • return x0 码力 | 47 页 | 8.45 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 性能优化之无分支编程 Branchless Programming的时候手动优化才有优势,开 启 -O1 优化以后都区别不大了。 • 因此对于简单的分支,完全可以不考虑优化, 交给编译器自动优化掉。 • 一般只需要把 if-else 改成三目运算符 ?: 编 译器就能成功识别了(见开头的例子)。 • 建议只有当性能遇到瓶颈时,再去针对性对 “热代码”优化,而不是一股脑儿全部改成无分 支,影响可读性。 “ 妙用加减乘”的无分支优化是万能的吗? • return x0 码力 | 47 页 | 8.45 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 05 C++11 开始的多线程编程而已,用昂贵的 mutex 严重影响了效率 。 建议用 atomic :有专门的硬件指令加持 • 因此可以用更轻量级的 atomic ,对他的 += 等 操作,会被编译器转换成专门的指令。 • CPU 识别到该指令时,会锁住内存总线,放弃 乱序执行等优化策略(将该指令视为一个同步点 ,强制同步掉之前所有的内存操作),从而向你 保证该操作是原子 (atomic) 的(取其不可分割 之意),不会加法加到一半另一个线程插一脚进0 码力 | 79 页 | 14.11 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 05 C++11 开始的多线程编程而已,用昂贵的 mutex 严重影响了效率 。 建议用 atomic :有专门的硬件指令加持 • 因此可以用更轻量级的 atomic ,对他的 += 等 操作,会被编译器转换成专门的指令。 • CPU 识别到该指令时,会锁住内存总线,放弃 乱序执行等优化策略(将该指令视为一个同步点 ,强制同步掉之前所有的内存操作),从而向你 保证该操作是原子 (atomic) 的(取其不可分割 之意),不会加法加到一半另一个线程插一脚进0 码力 | 79 页 | 14.11 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 17 由浅入深学习 map 容器确实应该是两个不同的函数。 • 为什么 Python 不用区分读取和写入两个函数?只有统一的 [] ?因为 Python 作为老牌胶水语言,为了 用户体验做了些特殊处理。他的 ast 模块能自动识别 [] 位于等号左侧还是右侧,分成两个独立的函数 。 • 如果等号在左侧,则被他的 ast 模块视为写入上下文( store context ),翻译成 __setitem__ 。 • 如果等号在右侧,则被他的0 码力 | 90 页 | 8.76 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 17 由浅入深学习 map 容器确实应该是两个不同的函数。 • 为什么 Python 不用区分读取和写入两个函数?只有统一的 [] ?因为 Python 作为老牌胶水语言,为了 用户体验做了些特殊处理。他的 ast 模块能自动识别 [] 位于等号左侧还是右侧,分成两个独立的函数 。 • 如果等号在左侧,则被他的 ast 模块视为写入上下文( store context ),翻译成 __setitem__ 。 • 如果等号在右侧,则被他的0 码力 | 90 页 | 8.76 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 11 现代 CMake 进阶指南CMake 项目的构建分为两步: • 第一步是 cmake -B build ,称为配置阶段( configure ),这时只检测环境并生成构建规则 • 会在 build 目录下生成本地构建系统能识别的项目文件( Makefile 或是 .sln ) • 第二步是 cmake --build build ,称为构建阶段( build ),这时才实际调用编译器来编译代码 • 在配置阶段可以通过0 码力 | 166 页 | 6.54 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 11 现代 CMake 进阶指南CMake 项目的构建分为两步: • 第一步是 cmake -B build ,称为配置阶段( configure ),这时只检测环境并生成构建规则 • 会在 build 目录下生成本地构建系统能识别的项目文件( Makefile 或是 .sln ) • 第二步是 cmake --build build ,称为构建阶段( build ),这时才实际调用编译器来编译代码 • 在配置阶段可以通过0 码力 | 166 页 | 6.54 MB | 1 年前3
共 10 条
- 1













