C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南function 的区别 • macro 相当于直接把代码粘贴过去,直接访问调用者的作用域。这里写的相对路径 include 和 src ,是基于调用者所在路径。 • function 则是会创建一个闭包,优先访问定义者的作用域。这里写的相对路径 include 和 src ,则是基于定义者所在路径。 https://cmake.org/cmake/help/latest/command/function • 查找名为 OpenCV 的包,找不到不报错,事后可以通过 ${OpenCV_FOUND} 查询是否找到。 • find_package(OpenCV QUIET) • 查找名为 OpenCV 的包,找不到不报错,也不打印任何信息。 • find_package(OpenCV REQUIRED) # 最常见用法 • 查找名为 OpenCV 的包,找不到就报错(并终止 cmake videoio) • 查找名为 OpenCV 的包,找不到就报错,且必须具有 OpenCV::core 和 OpenCV::videoio 这 两个组件,如果没有这两个组件也会报错。 • find_package(OpenCV REQUIRED OPTIONAL_COMPONENTS core videoio) • 查找名为 OpenCV 的包,找不到就报错,可具有 OpenCV::core0 码力 | 56 页 | 6.87 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 03 现代 C++ 进阶:模板元编程几个,然后每个运算符都要声明一个纯虚函数吗? 而且, Float 的乘法应该是 multiply(float) ,你也去 定义好几个重载吗?定义为 multiply(Numeric *) 的话 依然会违背你们的开 - 闭原则:比如 3.14f * 3 ,两 端是不同的类型,怎么处理所有可能类型的排列组合 ? 不如放弃类和方法的概念,欣然接受全局函数和重载 。 模板函数:定义 • 使用 template定义的 sumto.cpp 里,增加两个显式编译模板的声明: 一般来说,我会建议模板不要 分离声明和定义,直接写在头 文件里即可。如果分离还要罗 列出所有模板参数的排列组合 ,违背了开 - 闭原则。 模板的惰性:延迟编译 • 要证明模板的惰性,只需看这个例子: • 要是编译器哪怕细看了一眼:字符串怎么可能被写入呢?肯定是会出错的。 • 但是却没有出错,这是因为模板没有被调用,所以不会被实际编译! 中的变量 • lambda 函数体中,还可以使用定义他的 main 函数中的变量,只需要把方括号 [] 改成 [&] 即可: • 函数可以引用定义位置所有的变量,这个 特性在函数式编程中称为闭包 (closure) 。 lambda 表达式:修改 main 中的变量 • [&] 不仅可以读取 main 中的变量,还可 以写入 main 中的变量,比如可以通过 counter++ 记录该函数被调用了多少次: 0 码力 | 82 页 | 12.15 MB | 1 年前3
Rust 异步并发框架在移动端的应用 - 陈明煜保证了变量生命周期合法,使子任务可以捕获父任务的变量 结构化并发 Structured concurrency Scope Rust 线程中的结构化并发 阻塞等待所有 Scope 内的子线程任务完成 子线程执行的闭包中可以捕获 Scope 外的变 量 AsyncScope 将 std 库中 thread scope 的思想异步化 在同步环境阻塞等待子异步任务完成,在异步 环境异步等待子异步任务完成0 码力 | 25 页 | 1.64 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 14 C++ 标准库系列课 - 你所不知道的 set 容器erase 还支持输入两个迭代器作为参数。 • set.erase(beg, end) 可以删除集合中从 beg 到 end 之间的元素,包含 beg , 不包含 end 。也就是说他是个前开后闭 区间 [beg, end) ,毕竟这是标准库一贯 的作风。 • 注意: beg 必须在 end 之前,否则崩溃 。 • 用法举例: a.erase(a.find(2), a.find(4)); upper_bound(4)); • 会删除 set 中所有满足 2 ≤ x ≤ 4 的元素 • 注意这里变成 [2, 4] 两边都是闭区间了!因为 upper_bound 会返回指向大于 x 的元素,也 就是等于 x 的元素再之后一个元素,所以刚好 抵消了标准库的前开后闭区间效果…… • 右边的运行结果也可以看到他把 4 也删了。 • lower_bound(x) 找第一个大于等于 x 的元素0 码力 | 83 页 | 10.23 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起命令寻找系统中的包 / 库: • find_package(fmt REQUIRED) • target_link_libraries(myexec PUBLIC fmt::fmt) • 为什么是 fmt::fmt 而不是简单的 fmt ? • 现代 CMake 认为一个包 (package) 可以提供多个库,又称组件 (components) ,比如 TBB 这个包,就包含了 tbb tbb, tbbmalloc, tbbmalloc_proxy 这三个组件。 • 因此为避免冲突,每个包都享有一个独立的名字空间,以 :: 的分割(和 C++ 还挺像的) 。 • 你可以指定要用哪几个组件: • find_package(TBB REQUIRED COMPONENTS tbb tbbmalloc REQUIRED) • target_link_libraries(myexec PUBLIC OpenMP::OpenMP_CXX • 不同的包之间常常有着依赖关系,而包管理器的作者为 find_package 编写的脚本(例如 /usr/lib/cmake/TBB/TBBConfig.cmake )能够自动查找所有依赖,并利用刚刚提 到的 PUBLIC PRIVATE 正确处理依赖项,比如如果你引用了 OpenVDB::openvdb 那么 TBB::tbb 也会被自动引用。 • 其他包的引用格式和文档参考:0 码力 | 32 页 | 11.40 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南这样他会优先查找 TBBConfig.cmake (系统自带的)而不是 FindTBB.cmake (项目作者常 把他塞在 cmake/ 目录里并添加到 CMAKE_MODULE_PATH )。这样能保证寻找包的这个 .cmake 脚本是和系统自带的 tbb 版本是适配的,而不是项目作者当年下载的那个版本 的 .cmake 脚本。 当然,如果你坚持要用 find_package(TBB REQUIRED) 2.0 的包,容易出现一些奇奇怪怪的错误。 不建议大家这样用自己创建一个 cmake/ 目录来存用到的所有库的 finder ,尽量用系统 自带的,可以保证用的是系统自带库的那个配置。 find_package(Qt5 REQUIRED) 出错了 原因: Qt5 具有多个组件,必须指定你需要哪些组件 find_package 生成的伪对象 (imported target) 都按照“包名 :: 的头文件并编译通过 常见问题:小彭老师, Windows 上找不到 Qt5 包怎么办?我明明安装 了! 你是 Windows 系统,可能你安装了 Qt5 ,但是因为 Windows 系统的安装路径非常混乱, 没有固定的 /usr/lib 之类的默认路径可以搜索,所以出错了。 常见问题:小彭老师, Windows 上找不到 Qt5 包怎么办?我明明安装 了! • 假设你的 Qt5 安装在 C:\Qt\Qt50 码力 | 166 页 | 6.54 MB | 1 年前3
Go读书会第二期无类型常量与 iota 的应用 • 定义零值可用的类型 • 通过复合字面值的初始化 • 切片、字符串、 map 的原理、惯 用法与坑 每个 gopher 编写 Go 代码都会用到的 • Go 包导入相关 • 代码块与作用域 • 控制语句的惯用法与坑 Part4 – 语法基础:函数与方法 践行哲学,遵循惯例,认清本质,理解原理 • Init 函数 • 成为“一等公民” • defer 践行哲学,遵循惯例,认清本质,理解原理 • 高频使用的标准库包 ( net 、 http 、 strings 、 time 、 crypto 等 ) • Reflect 反射使用三大法则 • Cgo 使用的开销 • Unsafe 包的安全使用法则 “ 自带电池”,开箱即用 Part10 – 工程实践 践行哲学,遵循惯例,认清本质,理解原理 • Go module • 自定义 go 包导入路径 • Go 命令使用(包括代码生成)0 码力 | 26 页 | 4.55 MB | 1 年前3
Zadig 产品使用手册, Q C o n / M S U P / T G O / 极 客 时 间 效 能 特 邀 讲 师 。 为 数 百 研 发 团 队 , 数 千 名 工 程 师 提 供 效 能 实 战 培 训 , 包 括 腾 讯 P C G / T E G 、 字 节 跳 动 、 小 红 书 等 。 专 注 在 云 原 生 C I / C D 、 D e v O p s 、 平 台 工 程 架 构 等 大 的 研 究 和 应 用 。 主 导 研 发 的 Z a d i g 开 源 D e v O p s 软 件 工 程 平 台 已 被 2 0 0 0 多 家 企 业 广 泛 使 用 , 包 括 字 节 跳 动 飞 书 、 极 氪 、 小 鹏 、 路 特 斯 等 数 百 家 各 行 业 领 军 企 业 。 郭 健 ( G r a n t ) : K o d e R o v e r0 码力 | 52 页 | 22.95 MB | 1 年前3
谈谈MYSQL那点事, Delete SQL Delete SQL 性能。 性能。 Decimal Decimal 类型字段不要单独建立为索引,但覆盖索引可以 类型字段不要单独建立为索引,但覆盖索引可以 包 包 含这些字段。 含这些字段。 只有建立索引以后,表内的行才按照特地的顺序存储,按照 只有建立索引以后,表内的行才按照特地的顺序存储,按照 需要可以是 需要可以是 asc asc0 码力 | 38 页 | 2.04 MB | 1 年前3
应用 waPC (rust) 做软件测试工具GRPC • Testing platform • Support HTTP POST wasm API • Support websocket stand in for wasm API 抓包 - Wasm Mock Server wasm 工具 does not invent the wheel 软件测试工具 • 模拟数据规则 • 自动化测试 ModifyRequest(req0 码力 | 30 页 | 2.50 MB | 1 年前3
共 13 条
- 1
- 2













