C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理用户) CMake 3.12 及以上(跨平台作业) Git 2.x (作业上传到 GitHub ) CUDA Toolkit 10.0 以上( GPU 专题) 从一个案例看 C++ 的历史 • 求一个列表中所有数的和: # 参考资料 - [ 热心观众整理的学习资料 ](https://github.com/jiayaozhang/OpenVDB_and_TBB) - [C++ 官方文档 ](https://en double 等基础类型 2. void *, Object * 等指针类型 3. 完全由这些类型组成的类 • 这些类型被称为 POD ( plain-old-data )。 • POD 的存在是出于兼容性和性能的考虑。 << 取决于内存的随机值 编译器默认生成的构造函数:无参数( POD 陷阱解决方案) • 不过我们可以手动指定初始化 weight 为 0 。 • 通过 {} 语法指定的初始化值,会在编译器自 int{}; 会打印出 0 编译器默认生成的构造函数:初始化列表(感谢 C++11 ) • 当一个类(和他的基类)没有定义任何构造函 数,这时编译器会自动生成一个参数个数和成 员一样的构造函数。 • 他会将 {} 内的内容,会按顺序赋值给对象的每 一个成员。 • 目的是为了方便程序员不必手写冗长的构造函 数一个个赋值给成员。 • 不过初始化列表的构造函数只支持通过 {} 或 = {} 来构造,不支持通过0 码力 | 96 页 | 16.28 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南CMAKE_MODULE_PATH 这个列表 中的所有路径下查找 XXX.cmake 这个文件。 • 这样你可以在 XXX.cmake 里写一些你常用的函数,宏,变量等。 十三、你知道吗? CMake 也有 include 功能 • 和 C/C++ 的 #include 一样, CMake 也有一个 include 命令。 • 你写 include(XXX) ,则他会在 CMAKE_MODULE_PATH 这个列表 中的所有路径下查找 PARENT_SCOPE) 才能修改到外面的变量。 第二章:第三方库 / 依赖项配置 用 find_package 寻找系统中安装的第三方库并链接他们 find_package 命令 • 常用参数列表一览: • find_package([version] [EXACT] [QUIET] [CONFIG] [MODULE] • [REQUIRED] find_package 说是找“包”,到底是在找什么? • find_package(OpenCV) 实际上是在找一个名为 OpenCVConfig.cmake 的文件。 • 注:出于历史兼容性考虑,除了 OpenCVConfig.cmake 以外 OpenCV-config.cmake 这 个文件名也会被 CMake 识别到。 • 同理, find_package(Qt5) 则是会去找名为 0 码力 | 56 页 | 6.87 MB | 1 年前3
Borsh 安全高效的二进制序列化第三届中国 Rust 开发者大会 安全高效的二进制序列化 Daniel Wang @ NEAR Borsh • 运行、编码效率 • 确定性 • 跨平台兼容性 二进制序列化的问题 Binary Object Representation Serializer for Hashing • 字节级别确定性 • 执行速度快 Borsh • 轻量级 • 每一个对象与其二进制表示之间都存在一个双射映射0 码力 | 21 页 | 3.35 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 13 C++ STL 容器全解之 vectornoexcept; • int const &operator[](size_t i) const noexcept; vector 容器:构造函数 • 除了先指定大小再一个个构造之外,还可 以直接利用初始化列表( C++11 新特性) 在构造时就初始化其中元素的值。 • 例如创建具有 6, 1, 7, 4 四个元素的 vector : • vectora = {6, 1, 7, 4}; 在运算符重载上,沙雕的 C++ 标准 委员会规定, operator++(int) 这个重 载是后置自增 p++ ,不带任何参数的 operator++() 这个重载是前置自增, 之所以这样是因为同名函数只能通过 参数列表类型来区分,这个 int 类型 参数没有任何实际意义,只是为了区 分不同的重载……编译器会在 p++ 的 时候自动改成调用 p.operator++(0) 。 vector 容器: begin • range )。区间可以是一个容器的全部, 例如 {a.begin(), a.end()} 区间;也可以是一个容器的部分,例如 {a.begin() + 1, a.end() - 1} 相当于去头去尾后的列表,相当于 Python 中的 a[1:-1] 。 • 区间这个概念在 C++20 被高度强化了亿下,之后的课我们研究一下他。 vector 容器: begin 和 end • begin 可以获取指向第一个元素所在位置的迭代 0 码力 | 90 页 | 4.93 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 03 现代 C++ 进阶:模板元编程lambda 表达式允许我们 在函数体内创建一个函数,大大地方便了 函数式编程。 • 语法就是先一个空的 [] ,然后是参数列表 ,然后是 {} 包裹的函数体。 • 再也不用被迫添加一个全局函数了! lambda 表达式:返回类型 • lambda 表达式的返回类型写在参数列表 后面,用一个箭头 -> 表示。 lambda 表达式:自动推导返回类型 • 如果 lambda 表达式不通过 -> 离声明和实现,或者想加快编译,这时如 果再用 template class 作为参数就不行了 。 • 为了灵活性,可以用 std::function 容器。 • 只需在后面尖括号里写函数的返回类型和 参数列表即可,比如: • std::function; 如何避免用模板参数 2 :无捕获的 lambda 可以传为函数指针 • 另外,如果你的 lambda 没有捕获任何局 tuple :结构化绑定 • 可是需要一个个去 get 还是好麻烦。 • 没关系,可以用结构化绑定的语法: • auto [x, y, ...] = tup; • 利用一个方括号,里面是变量名列表,即 可解包一个 tuple 。里面的数据会按顺序 赋值给每个变量,非常方便。 tuple :结构化绑定为引用 • 结构化绑定也支持绑定为引用: • auto &[x, y, ...] = 0 码力 | 82 页 | 12.15 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南MSVC 上也会看见 build/mylib/mylib.vcxproj 的生成。 project 的初始化: LANGUAGES 字段 • project( 项目名 LANGUAGES 使用的语言列表 ...) 指定了该项目使用了哪些编程语言。 • 目前支持的语言包括: • C : C 语言 • CXX : C++ 语言 • ASM :汇编语言 • Fortran :老年人的编程语言 find_package 生成的伪对象 (imported target) 都按照“包名 :: 组件名”的格式命名。 你可以在 find_package 中通过 COMPONENTS 选项,后面跟随一个列表表示需要用的组件。 测试一下能否找到 Qt 的头文件并编译通过 常见问题:小彭老师, Windows 上找不到 Qt5 包怎么办?我明明安装 了! 你是 Windows 系统,可能你安装了 Qt5 表示是错误信息,但之后的语句仍继续 执行 message 可以用于打印变量 如果 set 没加引号会怎样?会变成分号分割的列表 set(myvar hello world) 其实等价于: set(myvar “hello;world”) 如果 message 没加引号会怎样?会把列表里的字符串当成他的关键字 结论:除非确实需要列表,建议始终在你不确定的地方加上引号,例如: set(sources “main.cpp” “mylib0 码力 | 166 页 | 6.54 MB | 1 年前3
GPU Resource Management On JDOS生成镜像服务) – 选择存储来源:对接了内部的存储 – 填写代码地址,执行的命令等 – 可以选择是否监控训练,提供 tensorboard 任务列表 可以指定 git 的 commit-id 发起任务 任务详情 可以查看具体的容器列表,以及查看容器的日志和事件 Serving 服务 提供统一便捷的 Serving 服务,只需用户指定模型,即可提供 grpc 和 rest 服务,同时使用0 码力 | 11 页 | 13.40 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器k k k k k k k k k k k v v v v v v setmap 第四章:哈希散列表 高效的查找离不开我 高效的查找离不开我 unordered_set 查找为什么高效 • 为什么哈希散列表 unorered_set 会比线性数组 vector 在查找这一点上更高效? • 你看,我们刚才只判断了 3 次就找到了目标。这还是最坏的情况,最好只需要 0 码力 | 90 页 | 8.76 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起tbbmalloc REQUIRED) • target_link_libraries(myexec PUBLIC TBB::tbb TBB::tbbmalloc) 第三方库 - 常用 package 列表 1. fmt::fmt 2. spdlog::spdlog 3. range-v3::range-v3 4. TBB::tbb 5. OpenVDB::openvdb 6. Boost::iostreams0 码力 | 32 页 | 11.40 MB | 1 年前3
共 9 条
- 1













