C++高性能并行编程与优化 -  课件 - 11 现代 CMake 进阶指南find_package(Qt5 REQUIRED) 出错了 原因: Qt5 具有多个组件,必须指定你需要哪些组件 find_package 生成的伪对象 (imported target) 都按照“包名 :: 组件名”的格式命名。 你可以在 find_package 中通过 COMPONENTS 选项,后面跟随一个列表表示需要用的组件。 测试一下能否找到 Qt 的头文件并编译通过 常见问题:小彭老师, Windows ${MYVAR} 这个变量。如果有这个变量则会被替换为变量的值来进行接下来的比较, 否则保持原来字符串不变。 如果我加了 ${} 会怎么样呢? if (${MYVAR} MATCHES “Hello”) 会被翻译成 if (Hello MATCHES “Hello”) 但是因为找不到名为 Hello 的变量,所以会被直接当成普通的字符串来处理。 也就是 if (“Hello” MATCHES “Hello”) 从而会执行真分支,结果正常。 万一好巧不巧,正好定义了 Hello 这个变量呢? 然而假如存在 Hello 这个变量,其值为 “ world” 。 那么 if (${MYVAR} MATCHES “Hello”) 会被翻译成 if (Hello MATCHES “Hello”) 而因为 Hello 这个变量名存在,所以会被(出于历史原因的) if 进一步求值: if (“world” MATCHES “Hello”)0 码力 | 166 页 | 6.54 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 07 深入浅出访存优化众所周知,内存是一维的,因此任何二维数组,都必须被扁平化,才能储存在内存中。 • 对于 float a[3][4] 编译器实际上会把他变成一维数组 float a[3*4] ,然后把 a[i][j] 翻译为 a[i * 4 + j] 。 C++ 静态数组 • arraya; 可以在栈上分配有 n 个元素的一维数组。 • 通过 a[i] 访问第 i 个元素。 • array 翻译为 a[i * m + j] ,所以是列主序。 • Fortran 等非主流会把矩阵 A(i, j) 翻译为 a[i + j * n] ,所以是行主序。 • 手动扁平化时,如果用 a[i * m + j] 就是列主序。 • 手动扁平化时,如果用 a[i 0 码力 | 147 页 | 18.88 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 17 由浅入深学习 map 容器位于等号左侧还是右侧,分成两个独立的函数 。 • 如果等号在左侧,则被他的 ast 模块视为写入上下文( store context ),翻译成 __setitem__ 。 • 如果等号在右侧,则被他的 ast 模块视为读取上下文( load context ),翻译成 __getitem__ 。 • 也就是说 Python 的 [] 其实是调用了两个不同的运算符重载: • m[key] = val0 码力 | 90 页 | 8.76 MB | 1 年前3
 Rust与算法 - 谢波个人项目实践 学习中总结探索 2015 年发布,很多人近几年才知道 Rust , Rust 中国 大会也才第三届,期待 Rust 中国大会第十届 Rust 处于起步阶段 中文圈学习资料或书籍少,有部分是翻译国外产品,能 不能中国人向国外输出作品 Rust 缺少学习资源 Rust 未来大有可为 Rust 在操作系统,数据库,各种框架和工具上应用范围 广 写作动机 当情况不明时,抱着一个纯粹的目标干事就行了,其他0 码力 | 28 页 | 3.52 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南OpenCV::videoio 这 两个组件,如果没有这两个组件也会报错。 • find_package(OpenCV REQUIRED OPTIONAL_COMPONENTS core videoio) • 查找名为 OpenCV 的包,找不到就报错,可具有 OpenCV::core 和 OpenCV::videoio 这两个 组件,没有这两组件不会报错,通过 ${OpenCV_core_FOUND} ${OpenCV_core_FOUND} 查询是否找到 core 组件。 find_package 说是找“包”,到底是在找什么? • find_package(OpenCV) 实际上是在找一个名为 OpenCVConfig.cmake 的文件。 • 注:出于历史兼容性考虑,除了 OpenCVConfig.cmake 以外 OpenCV-config.cmake 这 个文件名也会被 CMake 识别到。 • 同理, ${XXX_LIBRARIES} ,有的又是 $ {XXX_LIBRARY} 非常沙雕,需要看相应 cmake 文件的注释,才能确定具体是怎么命名的 。 • 现代 CMake 就好多了,统一用 包名 :: 组件名 的格式。但是具体的组件名,还是要查看 cmake 文件中的注释才能确定。例如 CURL::libcurl OpenCV::core Qt5::core TBB::tbb 等。 现代和古代区别的总结 •0 码力 | 56 页 | 6.87 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 01 学 C++ 从 CMake 学起CMake 认为一个包 (package) 可以提供多个库,又称组件 (components) ,比如 TBB 这个包,就包含了 tbb, tbbmalloc, tbbmalloc_proxy 这三个组件。 • 因此为避免冲突,每个包都享有一个独立的名字空间,以 :: 的分割(和 C++ 还挺像的) 。 • 你可以指定要用哪几个组件: • find_package(TBB REQUIRED0 码力 | 32 页 | 11.40 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 15 C++ 系列课:字符与字符串这些整数,而 8 位整数的表示范围是 2^8 也就是 0~255 ,足以表示所有 ASCII 字符了(多余的部分实际上被用于表示 中文)。 • char 和整数无异,例如 ‘ a’ 实际上会被编译器翻译成他对应的 ASCII 码: 97 。写 ‘ a’ 和写 (char)97 是完全一样的,方便阅读的语法糖而已。 “char 即整数”思想应用举例 “char 即整数”思想应用举例 C 语言帮手函数0 码力 | 162 页 | 40.20 MB | 1 年前3
 Zadig 面向开发者的云原生 DevOps 平台Zadig 每天数百次构建部署持续交付 “ 星云科技是我们持续创业的新业务,我们从一开始就采用了公有云、云原生等最新的理念, 结合以往的技术经验,毫无悬念的直接选择 Zadig 作为持续交付的核心组件,从最头打造最 高效的研发体系。 Zadig 解决了云原生环境的持续交付的难题,与 GitLab 等已在业界广泛 ” 使用的系统集成顺畅,互操作性强,是目前行业中最优雅的方案 去年, 我们整个微服务已经达到了 400 多个,还用传统那种运维方式很消耗内部开发资源。我们在 探索过程中发现了 Zadig ,今天 Zadig 技术体系已经成为我们的核心持续交付组件。 —— 研发负责人 詹佳杭 3 个集群、 15 个项目、 240 个服务、 52 条工作流、 18 个环境, 2397 个交付物 构建 3907 次,部署 2446 次0 码力 | 59 页 | 81.43 MB | 1 年前3
共 8 条
- 1
 













