C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串
to_string 。 • >> 可以模仿 cin ,取代 stoi/stof/stod 。 • 最重要的是他支持各种控制选项(如 hex ), 功能性比 to_string 和 stoi 更强大。 • 要导入他,只需 #include即可。 字符串常用操作 第 6 章 at 获取指定位置的字符 • s.at(i) 和 s[i] 都可以获取字符串中的第 i 个字符。 • 区别在于 3 字节才能存储。好处是这能完全兼容以前 const char * 的那套代码 ,包括 ‘ \0’ 结尾字符串都可以继续正常使用,不用全换到 wchar_t 里来。 小彭老师懒得讲了,直接粘贴图片好了 https://zhuanlan.zhihu.com/p/427488961 读写双方编码格式不同:会导致乱码 • 然而不同的编码格式之间并不兼容。 • 例如 GBK 规定“我”这个字对应的整数是 0 码力 | 162 页 | 40.20 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型
分块的基础上,只用一个 bit 存储 图片解释稀疏的好处 传统稠密二维数组 无边界稀疏分块哈希表 有了无边界的稀疏网格,再也不用担心二维数组要分配多大了。 坐标可以无限延伸,甚至可以是负数!比如 (-1,2) 等…… 他会自动在写入时分配 16x16 的子网格,称之为叶节点 (leaf node) ,而这里的 unordered_map 就是充当根节点 (root node) 。 图片解释稀疏的好处 传统稠密二维数组 改成 & 和 ~ 自动推算 B 和 Bmask ,顺便扁平化 Block 第 3 章:多层稀疏 用一个指针的数组来表示 图片解释:指针数组的原理 1 nul nul 2 3 nul nul nul nul 表示 nullptr (空指针) 图片解释:指针数组的稀疏 这样指针表中为 null 的部分,稠密叶节点的内存就省掉 了 垃圾回收 (garbage-collect) int8_t 存储是 1 字 节也就是 8bit 了。 • 因此还可以进一步优化,让八个 bit 占据同一个 字节。 • 不过计算起来比较复杂,需要很多位运算。 • 不过的确是提升了 8 倍性能。 图片解释 8 个 bit 如何合并到一个 int8_t • 通过位运算: • bits |= 1 << n; • 可以设置 bits 的第 n 位为 1 。 • bits |= 0 << n;0 码力 | 102 页 | 9.50 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南
时,同时添加同名的源文件和头文 件。 • 头文件中的声明和源文件中的实现一一对应。 九、一个模块依赖其他模块,则应导入他的头文件 • 如果新模块( Carer )中用到了其他模块( Animal )的类或函数,则需要 在新模块( Carer )的头文件和源文件中都导入其他模块( Animal )的头 文件。 • 注意不论是项目自己的头文件还是外部的系统的头文件,请全部统一采用 < 项目名 十、依赖其他模块但不解引用,则可以只前向声明不导入头文件 • 如果模块 Carer 的头文件 Carer.h 虽然引用了其他模块中的 Animal 类,但 是他里面并没有解引用 Animal ,只有源文件 Carer.cpp 解引用了 Animal 。 • 那么这个头文件是不需要导入 Animal.h 的,只需要一个前置声明 struct Animal ,只有实际调用了 Animal 成员函数的源文件需要导入 Animal (或抄别人开源项目里的)个 Find 文件,用起来很不方便。但是 vcpkg 会为所有第三方 库,即使是懒惰的 Jemalloc ,都配备一个 Config 文件方便你 find_package 导入。所以 用 vcpkg 时,尽量用 find_package(XXX CONFIG REQUIRED) 避免被 CMake 自带的 Find 文件误导找到别的地方(而非 vcpkg 安装的那个)的库。0 码力 | 56 页 | 6.87 MB | 1 年前3夏歌-使用Rust构建LLM应用
调用 OpenAI , 并把结果返回。 "0.1.0" 基于 ChatGPT 的 Telegram 机器人 在 ocr 这个 function 里 识别 图片中的文字, text_detection 是把识别的图片转化为 base64 https://github.com/flows-network/review-any- pr-with-chatgpt 使用 Rust 开头的 telegram command ,就启动不同的 Prompt "0.1.0" 基于 ChatGPT 的 Telegram 机器人 OCR 识别图片中的文 字, text_detection 是把识别 的图片转化为 base64 招聘 Rust 实习生 请与 vivian@secondstate.io 联系 一个小广告 Thank you !0 码力 | 36 页 | 38.31 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化
[xBase, xBase + blockSize) 上循环 。 循环分块:用图片来直观感受 BM_y_blur BM_y_blur_tiled 这种分块的循环,可以称之为 YXyx 序,前两个大写 YX 表示外层 大循环,后两个小写 yx 表示区间大小为 blockSize 的内层小循环 。 循环分块:用图片来直观感受 BM_y_blur BM_y_blur_tiled 分块以后,在 刚刚访问过的范围内,所以,只需缓存容量大于 blockSize*nblur 即可避免 cache miss 。 需要缓存: nx*nblur 需要缓存: blockSize*nblur 循环分块:用图片来直观感受 BM_y_blur BM_y_blur_tiled 但是这样有一个很大的问题,如果插桩的读取范围跨越了 block 的边界,反而会变得跨度更大,导致缓存彻底失效。 需要缓存: nx*nblur ,所以只要缓存容量小于 nx 就无 法命中。 矩阵转置优化:循环分块 • 解决方法当然还是循环分块。即 YXyx 序 。 • 这样只需要块的大小 blockSize^2 小于缓 存容量,即可保证全部命中。 图片直观感受矩阵转置的循环分块 BM_transpose BM_transpose_tiled 什么是莫顿码 (morton code) ?有什么用? • 如 x=x1x2x3, y=y1y2y30 码力 | 147 页 | 18.88 MB | 1 年前3基于 Rust Arrow Flight 的物联网和时序数据传输及转换工具 霍琳贺
高效聚合 高效写入 支持标准 SQL 写入,支持批量写入 支持 Schemaless 写入 支持从 Kafaka, MQTT, OPC, PI System 以及文 件直接导入 数据源导入时,可定义规则引擎 TDengine: 与上下游应用的关系 TDengine = Time-Series Database + Caching + Data Subscription + Avalibility 2022.12 2023.05 2023.09 Usability Functionality taosX - 集群运维 • 数据库复制 • 全量 / 增量备份 • 数据导入 / 导出 • 数据库迁移 • 异地容灾 taosX - 数据接入 Comming Soon taosX - 流式处理 taosX - Transformer • Parse {"parse":0 码力 | 29 页 | 2.26 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起
hello.h 一次了嘛 ~ • 后来,这个编译前替换的步骤逐渐变成编译器的了一部分,称为预处理阶段, #define 定 义的宏也是这个阶段处理的。 • 此外,在实现的文件 hello.cpp 中导入声明的文件 hello.h 是个好习惯,可以保证当 hello.cpp 被修改时,比如改成 hello(int) ,编译器能够发现 hello.h 声明的 hello() 和定 义的 hello(int) 这种形式表示不要在当前目录下搜索,只在系统目 录里搜索,” hello.h” 这种形式则优先搜索当前目录下有没有这个文件,找不到再搜索系统 目录。 • 此外,在实现的文件 hello.cpp 中也导入声明的文件 hello.h 是个好习惯: 1. 可以保证当 hello.cpp 被修改时,比如改成 hello(int) ,编译器能够发现 hello.h 声明的 hello() 和定义的 hello(int) ,那么 MyClass 会被 重复定义两遍: • 解决方案:在头文件前面加上一行: #pragma once • 这样当预处理器第二次读到同一个文件时,就会自动跳过 • 通常头文件都不想被重复导入,因此建议在每个头文件前加上这句话 头文件进阶 - 递归地使用头文件(再续) (自动跳过) CMake 中的子模块 • 复杂的工程中,我们需要划分子模块,通常一个库一个目录,比如: • 这里我们把0 码力 | 32 页 | 11.40 MB | 1 年前3Go读书会第二期
无类型常量与 iota 的应用 • 定义零值可用的类型 • 通过复合字面值的初始化 • 切片、字符串、 map 的原理、惯 用法与坑 每个 gopher 编写 Go 代码都会用到的 • Go 包导入相关 • 代码块与作用域 • 控制语句的惯用法与坑 Part4 – 语法基础:函数与方法 践行哲学,遵循惯例,认清本质,理解原理 • Init 函数 • 成为“一等公民” • defer 使用的开销 • Unsafe 包的安全使用法则 “ 自带电池”,开箱即用 Part10 – 工程实践 践行哲学,遵循惯例,认清本质,理解原理 • Go module • 自定义 go 包导入路径 • Go 命令使用(包括代码生成) • 常见的“坑” 构建、部署、代码生成、 Go“ 坑”大检阅 示例代码与勘误 践行哲学,遵循惯例,认清本质,理解原理 • https://github0 码力 | 26 页 | 4.55 MB | 1 年前3Zadig 产品使用手册
新版本全量发布 Sprint 发布 需求开发 测试验证 产品规划 变更发布 生产环境发布—— Istio 发布, 执行工作流更新生产环境 步骤包含:部署新版本 20% 流量导入新版本 -> 审批 -> 100% 流量导入新版本 Sprint 发布 需求开发 测试验证 产品规划 Sprint 发布 变更发布 需求开发 测试验证 产品规划 uat 发布——版本管理 生成版本信0 码力 | 52 页 | 22.95 MB | 1 年前3谈谈MYSQL那点事
SHOW INDEX INDEX FROM xxx FROM xxx 来查看表索引 来查看表索引 使用 使用 LOAD DATA LOAD DATA 导入数据比 导入数据比 INSERT INTO INSERT INTO 快多了 快多了 SELECT COUNT(*) FROM Tbl SELECT COUNT(*) FROM Tbl 在0 码力 | 38 页 | 2.04 MB | 1 年前3
共 14 条
- 1
- 2