C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南
build ,称为构建阶段( build ),这时才实际调用编译器来编译代码 • 在配置阶段可以通过 -D 设置缓存变量。第二次配置时,之前的 -D 添加仍然会被保留。 • cmake -B build -DCMAKE_INSTALL_PREFIX=/opt/openvdb-8.0 • ↑ 设置安装路径为 /opt/openvdb-8.0 (会安装到 /opt/openvdb-8.0/lib/libopenvdb 0/lib/libopenvdb.so ) • cmake -B build -DCMAKE_BUILD_TYPE=Release • ↑ 设置构建模式为发布模式(开启全部优化) • cmake -B build ← 第二次配置时没有 -D 参数,但是之前的 -D 设置的变量都会被保留 • (此时缓存里仍有你之前定义的 CMAKE_BUILD_TYPE 和 CMAKE_INSTALL_PREFIX ) 语言 解决:改成 project( 项目名 LANGUAGES C CXX) 即可 也可以先设置 LANGUAGES NONE ,之后再调用 enable_language(CXX) 这样可以把 enable_language 放到 if 语句里,从而只有某些选项开启才启用某语言之类的 设置 C++ 标准: CMAKE_CXX_STANDARD 变量 • CMAKE_CXX_STANDARD0 码力 | 166 页 | 6.54 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南
pybmain ,他们 分别在各自的目录下有自己的 CMakeLists.txt 。 二、根项目的 CMakeLists.txt 配置 • 在根项目的 CMakeLists.txt 中,设置了默 认的构建模式,设置了统一的 C++ 版本 等各种选项。然后通过 project 命令初始 化了根项目。 • 随后通过 add_subdirectory 把两个子项 目 pybmain 和 biology txt 负责处理全局有效的设定。而子 项目的 CMakeLists.txt 则仅考虑该子项目自身的设定,比 如他的头文件目录,要链接的库等等。 四、子项目的头文件 • 这里我们给 biology 设置了头文件搜索路径 include 。 • 因为子项目的 CMakeLists.txt 里指定的路径都是相对路径 ,所以这里指定 include 实际上是:根 /biology/include 。 这时你需要手动指定一个变量告诉他在哪儿,可以是普通变量 ${Qt5_DIR} ,也可以是环 境变量 $ENV{Qt5_DIR} ,两个中只要设置了任何一个 find_package 都可以识别到。 • 变量一般通过命令行 -DQt5_DIR=”C:/Program Files/Qt5.12.1/lib/cmake/Qt5” 设置。 举例, Windows 系统, Qt5 • 例如我把 Qt5 安装到了 D:/Qt5.12.1 。0 码力 | 56 页 | 6.87 MB | 1 年前3谈谈MYSQL那点事
性配置 针对不同的应用情况进行合理配置 针对不同的应用情况进行合理配置 针对 针对 my.cnf my.cnf 进行配置,后面设置是针对内存为 进行配置,后面设置是针对内存为 16G 16G 的服务器进行的合理设置 的服务器进行的合理设置 服务优化 服务优化 MySQL MySQL 配置原则 配置原则 服务优化 服务优化 公共选项 公共选项 选项 缺省值 推荐值 说明 sort_buffer_size 512K 128M 每个线程的排序缓存大小,一般按照内存可 以设置为 2M 以上,推荐是 16M ,该选项对 排序 order by , group by 起作用 record_buffer 128K 64M 每个进行一个顺序扫描的线程为其扫描的每 张表分配这个大小的一个缓冲区,可以设置 为 2M 以上 table_cache 64 1024 为所有线程打开表的数量。增加该值能增加 myisam_sort_buffer_size 16M 128M 设置 , 恢复 , 修改表的时候使用的缓冲 大小,值不要设的太大 服务优化 服务优化 InnoDB InnoDB 选项 选项 选项 缺省值 推荐值 说明 innodb_buffer_pool_size 32M 10G InnoDB 使用一个缓冲池来保存索引和原始数据 , 这里你设置越大 , 你在存取表里面数据时所需要的 磁盘 I/O 越少,一般是内存的一半,不超过0 码力 | 38 页 | 2.04 MB | 1 年前3夏歌-使用Rust构建LLM应用
Telegram 机器人 Cargo.toml "0.1.0" 基于 ChatGPT 的 Telegram 机器人 telegram 机器人的基础设置 "0.1.0" 基于 ChatGPT 的 Telegram 机器人 Open AI 的基础设置 获取 chat_id "0.1.0" 基于 ChatGPT 的 Telegram 机器人 当 Telegram 收到 规定好的 GitHub 这个机器人可以: "0.1.0" 使用 Rust 构建 PR review 机器人 Cargo.toml "0.1.0" 使用 Rust 构建 PR review 机器人 设置 OpenAI 与 GitHub 基本信息 "0.1.0" 使用 Rust 构建 PR review 机器 1. 状态为 Open 的 PR 2. 状态为 Open Telegram 机器人 Cargo.toml "0.1.0" 基于 ChatGPT 的 Telegram 机器人 telegram 机器人的基础设置 "0.1.0" 基于 ChatGPT 的 Telegram 机器人 Open AI 的基础设置 获取 chat_id "0.1.0" 基于 ChatGPT 的 Telegram 机器人 当 Telegram 收到 规定好的0 码力 | 36 页 | 38.31 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程
com/cuda/cuda-compiler-driver-nvcc/index.html#extended-notation 针对不同的架构,使用不同的代码 通过 CMake 设置架构版本号 • 可以用 CMAKE_CUDA_ARCHITECTURES 这个变量 ,设置要针对哪个架构生成 GPU 指令码。 • 小彭老师的显卡是 RTX2080 ,他的版本号是 75 ,因 此最适合他用的指令码版本是 75 。 • 如果不指定,编译器默认的版本号是 不够优化,但是至少能用。也就是要求:编译期指定的 版本 ≤ 运行时显卡的版本。 CMAKE_CUDA_ARCHITECTURES 会自动转换成 --gpu-code 等编 译 flag 版本号不要太新了 • 比如这里设置了 RTX3000 系列的架构版 本号 86 ,在 RTX2080 上就运行不出结 果。 • 最坑的是他不会报错!也不输出任何东西 !就像没有那个 kernel 一样!所以一定 要注意调对你的版本号。否则就会这样 GT-630 已经被 CUDA 11 废除,因此本课程要 求同学有 GTX900 及以上显卡。如果需要在老显卡上运行的话 ,可以看下面那个链接,查一下你的显卡对应的版本号是多少 ,然后在 CMake 里设置个一样的,应该就能用了。 小彭老师每日锐评 • 顺便, Pascal 、 Turing 、 Ampere 什么的高大上架构名,那个是老黄拿来营销用的。 • 我们不考虑韭菜情怀的话不用管,我们只需要指定架构的版本号是多少就行啦。0 码力 | 142 页 | 13.52 MB | 1 年前3Rust 异步并发框架在移动端的应用 - 陈明煜
CFS 调度 : 线程优先级 • 设置线程的 Nice 值给予线程不同的权重 2 个线程 A 和 B 。 A 的权重是 1024 , B 的权重是 2048 。那么 A 获得 CPU 的时间比例是 1024/ (1024 + 2048) = 33.3% Task priority and quality of service 任务优先级调度 对框架内的工作线程设置优先级,使其 拥有不同权重。 • 南向调度融合:异步并行迭代器 将数据容器内的数据进行递归二分,对左 半和右半分别生成一个异步任务。最终对 单个数据执行用户业务逻辑 IO & CPU 融合 南向调度融合 IO & CPU 通过设置不同优先级,进 入不同线程池调度 线程池根据负载监控(任务平均等待 时间等数据)进行线程池动态扩缩 容。 任务窃取 Fusion of IO/CPU intensive 结构化并发0 码力 | 25 页 | 1.64 MB | 1 年前3应用 waPC (rust) 做软件测试工具
• Instantiate • Invoke - command with data • Guest 指 wasm • Operation 是我们要在 wasm 里注册 命名 • 以数据的长度,设置 wasm 的 linear memory 的指针 • Guest 可执行任务 • Guest 也可返回请求 host Invoke(ctx,operation,payload) WAPC0 码力 | 30 页 | 2.50 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 性能优化之无分支编程 Branchless Programming
。 • 而 IEEE 浮点标准规定了 NaN 乘任何数都得 NaN ,所以 x < 0 时不会得到 0 而是会 得到 NaN ,和原来预期的结果不同。 • 且 sqrt 遇到 x 为负数时会设置 errno 为 EDOM ,产生副作用。而原先的三目运算 符 ?: 由于具有“短路”特性,当 x < 0 时第一个分支 sqrt(x) 不会执行,没有副作用。不一 样了! • 总之,对于这种有副作用的函数,或是有可能返回0 码力 | 47 页 | 8.45 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型
不过计算起来比较复杂,需要很多位运算。 • 不过的确是提升了 8 倍性能。 图片解释 8 个 bit 如何合并到一个 int8_t • 通过位运算: • bits |= 1 << n; • 可以设置 bits 的第 n 位为 1 。 • bits |= 0 << n; • 则没有任何改变。 std::vector:标准库帮你实现好了 • 其实标准库的 vector 0 码力 | 102 页 | 9.50 MB | 1 年前3Zadig 面向开发者的云原生 DevOps 平台
解放测试,全面自动化 提升效率,建设质量体系 安全 安全建设被动: • 安全建设缺乏时机和抓手 • 出现问题,影响业务进度 前置安全服务:全流程嵌入安全检测,避免流入业务环节。 全流程安全门禁:关键环节设置安全门禁,快速反馈研发改进 故障拦截率提升 1-3 倍 业务响应效率提升 3-5 倍 全流程安全建设 更多价值体现 组织 靠流程和个人,效率越来越低 • 低人效 / 低质量 / 低效率0 码力 | 59 页 | 81.43 MB | 1 年前3
共 15 条
- 1
- 2