C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南
怎么路径里动不动夹杂几个转移符、空格、特殊符号?这谁顶得住啊 。 高情商: Windows 是最适合练习你 C 语言转移符使用水平的地方 。 更通用的方式: find_package 更好的做法是用 CMake 的 find_package 命令。 find_package(TBB REQUIRED) 会查找 /usr/lib/cmake/TBB/TBBConfig.cmake 这个配置文 件,并根据里面的配置信息创建时候是纯头文件,而 find_package(spdlog REQUIRED) 时却 变成预编译链接库的版本。(嗯,其实不是 PUBLIC 而是 INTERFACE ,因为伪对象没有实体) 和古代 CMake 做对比:为什么 PUBLIC 属性的传播机制如此便利 现代 CMake : 古代 CMake : 和 find_package(TBB CONFIG REQUIRED) REQUIRED) 有什么区别? 其实更好的是通过 find_package(TBB CONFIG REQUIRED) ,添加了一个 CONFIG 选项。 这样他会优先查找 TBBConfig.cmake (系统自带的)而不是 FindTBB.cmake (项目作者常 把他塞在 cmake/ 目录里并添加到 CMAKE_MODULE_PATH )。这样能保证寻找包的这个 .cmake 脚本是和系统自带的 tbb 0 码力 | 166 页 | 6.54 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化
内部的高速缓存 • 原来 CPU 的厂商早就意识到了内存延迟高,读写效率低 下的问题。因此他们在 CPU 内部引入了一片极小的存储 器——虽然小,但是读写速度却特别快。这片小而快的 存储器称为缓存( cache )。 • 当 CPU 访问某个地址时,会先查找缓存中是否有对应的 数据。如果没有,则从内存中读取,并存储到缓存中; 如果有,则直接使用缓存中的数据。 • 这样一来,访问的数据量比较小时,就可以自动预先加 struct CacheEntry { • bool valid; • uint64_t address; • char data[64]; • }; • CacheEntry cache[512]; • 当 CPU 读取一个地址时: • 缓存会查找和该地址匹配的条目。如果找到,则给 CPU 返 回缓存中的数据。如果找不到,则向主内存发送请求,等读 取到该地址的数据,就创建一个新条目。 CacheEntry { • bool valid, dirty; • uint64_t address; • char data[64]; • }; • CacheEntry cache[512]; • 当 CPU 写入一个地址时: • 缓存会查找和该地址匹配的条目。如果找到,则修改缓存 中该地址的数据。如果找不到,则创建一个新条目来存储 CPU 写的数据,并标记为脏( dirty0 码力 | 147 页 | 18.88 MB | 1 年前3谈谈MYSQL那点事
服务优化 服务优化 公共选项 公共选项 选项 缺省值 推荐值 说明 max_connections 100 1024 MySQL 服务器同时处理的数据库连接的最大 数量 query_cache_size 0 ( 不打开 ) 128M 查询缓存区的最大长度,按照当前需求,一 倍一倍增加,本选项比较重要 sort_buffer_size 512K 128M 每个线程的排序缓存大小,一般按照内存可 by , group by 起作用 record_buffer 128K 64M 每个进行一个顺序扫描的线程为其扫描的每 张表分配这个大小的一个缓冲区,可以设置 为 2M 以上 table_cache 64 1024 为所有线程打开表的数量。增加该值能增加 mysqld 要求的文件描述符的数量。 MySQL 对每个唯一打开的表需要 2 个文件描述符。 服务优化 服务优化 MyISAM MyISAM MySQL MySQL 部分自带函数,索引将失效,同时将无 部分自带函数,索引将失效,同时将无 法 法 使用 使用 MySQL MySQL 的 的 Query Cache Query Cache ,比如 ,比如 LEFT(), SUBSTR(), LEFT(), SUBSTR(), TO_DAYS() TO_DAYS() DATE_FORMAT(),0 码力 | 38 页 | 2.04 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南
set(key val PARENT_SCOPE) 才能修改到外面的变量。 第二章:第三方库 / 依赖项配置 用 find_package 寻找系统中安装的第三方库并链接他们 find_package 命令 • 常用参数列表一览: • find_package([version] [EXACT] [QUIET] [CONFIG] [MODULE] • nd_package.html find_package 命令用法举例 • find_package(OpenCV) • 查找名为 OpenCV 的包,找不到不报错,事后可以通过 ${OpenCV_FOUND} 查询是否找到。 • find_package(OpenCV QUIET) • 查找名为 OpenCV 的包,找不到不报错,也不打印任何信息。 • find_package(OpenCV cmake 进程,不再继续往下执行)。 • find_package(OpenCV REQUIRED COMPONENTS core videoio) • 查找名为 OpenCV 的包,找不到就报错,且必须具有 OpenCV::core 和 OpenCV::videoio 这 两个组件,如果没有这两个组件也会报错。 • find_package(OpenCV REQUIRED OPTIONAL_COMPONENTS 0 码力 | 56 页 | 6.87 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起
引用系统中预安装的第三方库 • 可以通过 find_package 命令寻找系统中的包 / 库: • find_package(fmt REQUIRED) • target_link_libraries(myexec PUBLIC fmt::fmt) • 为什么是 fmt::fmt 而不是简单的 fmt ? • 现代 CMake 认为一个包 (package) 可以提供多个库,又称组件 (components) 还挺像的) 。 • 你可以指定要用哪几个组件: • find_package(TBB REQUIRED COMPONENTS tbb tbbmalloc REQUIRED) • target_link_libraries(myexec PUBLIC TBB::tbb TBB::tbbmalloc) 第三方库 - 常用 package 列表 1. fmt::fmt 2. spdlog::spdlog OpenVDB::openvdb 6. Boost::iostreams 7. Eigen3::Eigen 8. OpenMP::OpenMP_CXX • 不同的包之间常常有着依赖关系,而包管理器的作者为 find_package 编写的脚本(例如 /usr/lib/cmake/TBB/TBBConfig.cmake )能够自动查找所有依赖,并利用刚刚提 到的 PUBLIC PRIVATE 正确处理依赖项,比如如果你引用了0 码力 | 32 页 | 11.40 MB | 1 年前3Bazel
clang 编译 CC=clang CXX=clang++ bazel build …2 制作镜像 docker run -v $(pwd):/curve -v /root/.cache/bazel:/root/.cache/bazel -it opencurvedocker/curve-base:build-debian11 # 容器内 cd /curve/curvefs make build0 码力 | 6 页 | 4.69 MB | 5 月前3使用硬件加速Tokio - 戴翔
Software Enqueue Software Producer Consumer Consumer Consumer • Synchronization latency • Memory/Cache latency • CPU cycles latency DLB : Dynamic Load Balance DLB Enqueue Logic Head and Tail pointers Balancer Producer Producer Consumer Consumer Consumer • No Synchronization latency • No memory/cache latency • No CPU cycles DLB-Assist Channel Intro Hardware Senders Receive Senders Senders Receive0 码力 | 17 页 | 1.66 MB | 1 年前3Building Robot Apps
Barcelona The problem Level up Bluetooth Scan Connect Send Command s https:// www.npmjs.com/package/nativescript-bluet ooth Sending commands Service / Characteristics Sending commands Protocol • Reading commands Protocol Reading data Gotcha #2 aka Are you for real? https://www.npmjs.com/package/nativescript-mip-ble Show me the code V2 - Native SDK Taking it a step further0 码力 | 18 页 | 14.80 MB | 1 年前3CeresDB Rust 生产实践 任春韶
org/beta/unstable-book/language-features/generators.html 生产实践 – Async lock Req0 Req1 Req2 Memory cache https://docs.rs/tokio/1.28.2/tokio/sync/ struct.Mutex.html#which-kind-of-mutex-should-you-use 生产实践0 码力 | 22 页 | 6.95 MB | 1 年前3Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇
Panic Hook 里打印 Await-Tree Async Stuck : Future Detach Await Tree 在 RisingWave 中的应用 • S3 Block Cache Single-Flight Async Stuck :环形资源依赖 Await Tree 在 RisingWave 中的应用 • gRPC Streaming 连接复用 & 反压 Await-Tree0 码力 | 37 页 | 8.60 MB | 1 年前3
共 16 条
- 1
- 2