Zadig 面向开发者的云原生 DevOps 平台部署测试环境 xN 部署预发环境 xN 部署生产环境 xN 部署 / 灰度上线 xN 监控 / 告警 xN 版本归档 xN 交付追踪 xN 数据度量 xN 服务、工单管理 事件、缺陷管理 想 法 用 户 运行阶段 需求阶段 研发阶段 现代软件交付挑战:开发 5 分钟,上线 2 小时 服务一:设计 | 代码编写 | 项目从无到有可核算 管理有数据科学依据 解放管理,更多时间花在 业务创新 平台运维 业务压力大,能力建设缓慢: • 大量工作花在工具链维护 • 项目间依赖复杂,环境管理难 • 交付版本依赖工单,发布风险高 • 公共资源 / 业务资源利用率低 赋能多业务:一个平台解决了多异构项目的管理和规范 团队高效协作:定义团队角色工作流模板,随时可用云上环境 价值清晰呈现:为管理者提供全视角效能数据,赋能数字决策 多套 values 方 案 一 : G e r r i t + Z a d i g 方 案 二 : G i t l a b + Z a d i g 非 核 心 服 务 : 采 用 单 分 支 模 型 m a s t e r 发 版 。 核 心 服 务 : 采 用 双 分 支 模 型 : m a s t e r 发 版 测 试 环 境 和 o n l i n e 发 版 生0 码力 | 59 页 | 81.43 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南1/msvc2017/lib/cmake/Qt5/Qt5Config.cmake ,那 么请你设置变量 Qt5_DIR 为 D:/Qt5.12.1/msvc2017/lib/cmake/Qt5 。有三种设置方法: • (1) 单次有效。在 configure 阶段,可以从命令行设置(注意要加引号): • cmake -B build -DQt5_DIR=”D:/Qt5.12.1/msvc2017/lib/cmake/Qt5” 1/lib/cmake/Qt5/Qt5Config.cmake ,那么请你设 置变量 Qt5_DIR 为 /opt/Qt5.12.1/lib/cmake/Qt5 。有三种设置方法: • (1) 单次有效。在 configure 阶段,可以从命令行设置: • cmake -B build -DQt5_DIR=”/opt/Qt5.12.1/lib/cmake/Qt5” • (2) 全局启用。修改你的 单项目有效。直接在你自己项目的 CMakeLists.txt 最开头写一行: • set(Qt5_DIR ”/opt/Qt5.12.1/lib/cmake/Qt5”) # 一定要加在最前面! 三种方案利弊分析 • 单次有效(通过命令行)最安全,小彭老师高度推荐。 • 全局有效(添加环境变量)可能影响以后其他项目。比如你 A 项目依赖 Qt5.12.1 ,你设置了环 境变量 Qt5_DIR=/opt/Qt5.120 码力 | 56 页 | 6.87 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程刚刚说过 CUDA 的优势在于对 C++ 的 完全支持。所以 __global__ 修饰的核函 数自然也是可以为模板函数的。 • 调用模板时一样可以用自动参数类型推导 ,如有手动指定的模板参数(单尖括号) 请放在三重尖括号的前面。 进一步:核函数可以接受函子( functor ),实现函数式编程 • 不过要注意三点: 1. 这里的 Func 不可以是 Func const & ,那样会 ( Streaming Multiprocessors )与板块( block ) • GPU 是由多个流式多处理器( SM )组成的。每个 SM 可以处理一个或多个板块。 • SM 又由多个流式单处理器( SP )组成。每个 SP 可以处理一个或多个线程。 • 每个 SM 都有自己的一块共享内存( shared memory ),他的性质类似于 CPU 中的缓 存——和主存相比很小,但是很 threadIdx=(0,1) 的线程 2 会访问 tmp[64] 也位于 bank 0…… 也就是说,同一个 warp 的所有线程都在访问 bank 0 !这导致读取无法并 行,必须串行排队,从而(单看共享内存的效率)会变慢 32 倍。(不过据说最新架构中好像把 bank 数降低到 16 个,也就是 half-warp 了) 故意把二维数组的跨步从 32 调为 33 :解决区块冲突 • 解决方法就是,把0 码力 | 142 页 | 13.52 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - Zeno 中的现代 C++ 最佳实践 并且即使多个线程同时调用了 func ,这个变量的 初始化依然保证是原子的( C++11 起)。 • 这就是函数静态初始化 (func-static-init) 大法。 函数静态初始化可用于“懒汉单例模式” • 如右图。 • getMyClassInstance() 会在第一次调用时创 建 MyClass 对象,并返回指向他的引用。 • 根据 C++ 函数静态变量初始化的规则,之后 的调用不会再重复创建。 Helper )执行得比全 局静态初始化( before_main )还早! 用包装,避免因为链接的不确定性打乱了静态初始化的顺序 • 利用这个发现,我们意识到可以把 functab 用所谓的“懒汉单例模式”包装成一 个 getFunctab() 函数,里面的 inst 变量 会在第一次进入的时候初始化。因为第一 次调用是在 defCat 中,从而保证是在所 有 emplace 之前就初始化过,因此不会0 码力 | 54 页 | 3.94 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起函数,并在终端显示出 Hello, world 。 厂商 C C++ Fortran GNU gcc g++ gfortran LLVM clang clang++ flang 多文件编译与链接 • 单文件编译虽然方便,但也有如下缺点: 1. 所有的代码都堆在一起,不利于模块化和理解。 2. 工程变大时,编译时间变得很长,改动一个地方就得全部重新编译。 • 因此,我们提出多文件编译的概念,文件之间通过符号声明相互引用。 标准库的功能,难免会用到一些第三方库。 • 最友好的一类库莫过于纯头文件库了,这里是一些好用的 header-only 库: 1. nothings/stb - 大名鼎鼎的 stb_image 系列,涵盖图像,声音,字体等,只需单头文件! 2. Neargye/magic_enum - 枚举类型的反射,如枚举转字符串等(实现方式很巧妙) 3. g-truc/glm - 模仿 GLSL 语法的数学矢量 / 矩阵库(附带一些常用函数,随机数生成等)0 码力 | 32 页 | 11.40 MB | 1 年前3
夏歌-使用Rust构建LLM应用Chat id 2. 将 prompt 传给 ChatGPT 3. 将每次 commit 的 hash 发给 ChatGPT 4. 规定 Review 单次 commit 时, ChatGPT 返回的格 式 "0.1.0" 使用 Rust 构建 PR review 机器人 函数的 trigger 1. 汇总所有的总结 "0.1.0"0 码力 | 36 页 | 38.31 MB | 1 年前3
基于 Rust Arrow Flight 的物联网和时序数据传输及转换工具 霍琳贺a o s X R u s t 使 用 TDengine Rust • OOXML - Excel 解析库 • xlsx2csv - Excel 转 CSV 工具 • Unqlite - 单文件非关系型数据库 • Wisecondor - 生物信息 CNV 分析 • mdsn - A Multi-address DSN(Data Source Name) parser. TDengine0 码力 | 29 页 | 2.26 MB | 1 年前3
Rust 异步并发框架在移动端的应用 - 陈明煜现有框架无法完美适配移动端(二) 移动端诉求:易用性 • IO 密集性任务与 CPU 密集型任务融合 异步并发框架如 tokio 大多用于处理大量 异步 IO 场景,而 CPU 密集型任务一般 使用 rayon 。 当前单框架提供的接口无法使用户在一个 任务中同时处理 IO 任务以及 CPU 任 务。 Incompatibility of the third party Runtime with Mobile 现有框架无法完美适配移动端(二)0 码力 | 25 页 | 1.64 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 03 现代 C++ 进阶:模板元编程const & ) • 同理, auto const & 可以定义常引用: 自动类型推导:函数返回引用 • 当然,函数的返回类型也可以是 auto & 或者 auto const & 。比如懒汉单例模式: 理解右值:即将消失的,不长时间存在于内存中的值 • 引用又称为左值( l-value )。左值通常对应着一个长时间存在于内 存中的变量。 • 除了左值之外,还有右值( r-value0 码力 | 82 页 | 12.15 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理自定义构造函数:单个参数(避免陷阱) 避免陷阱体现在哪里? • 加了 explicit 表示必须用 () 强制转换。 • 否则 show(80) 也能编译通过! • 所以,如果你不希望这种隐式转换, • 请给单参数的构造函数加上 explicit 。 • 比如 std::vector 的构造函数 vector(size_t n) 也是 explicit 的。 explicit 对多个参数也起作用!0 码力 | 96 页 | 16.28 MB | 1 年前3
共 10 条
- 1













