Hidden Overhead of a Function APIperformance, we typically think about the function logic. We’ll see that a well designed function API can have an even larger impact.How will we compare performance? ● Benchmarks at this low level are advance(RandIter& iter, Diff n, random_access_iterator_tag) { iter += n; } ● Access token to make some API available only inside the library (like the default “package private” access modifier in Java) Empty0 码力 | 158 页 | 2.46 MB | 6 月前3
GraphBLAS: Building a C++ Matrix API for Graph Algorithmsthe important data structures and concepts? Prior work in the GraphBLAS community, C API Overview of our draft C++ API How might this interoperate with standard C++, graph library proposal? 4[DISTRIBUTION the important data structures and concepts? Prior work in the GraphBLAS community, C API Overview of our draft C++ API How might this interoperate with standard C++, graph library proposal? 5[DISTRIBUTION the important data structures and concepts? Prior work in the GraphBLAS community, C API Overview of our draft C++ API How might this interoperate with standard C++, graph library proposal? 6[DISTRIBUTION0 码力 | 172 页 | 7.40 MB | 6 月前3
C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南FindCURL.cmake 的注释,可以 看到 IMPORTED Targets 章节是在介绍现代 的用法,而 Result Variables 章节是在介绍 古代的用法,我们尽量用现代的那种就行。 官方文档: find_package 的两种模式 指定使用哪种模式 • find_package(TBB MODULE REQUIRED) • 只会寻找 FindTBB.cmake ,搜索路径: 1. • 例如: 1.2.0 , 0.6.8 , 18.11.0 • major 称为主版本号,出现功能重大变更,以至于和旧 API 不兼容的时候会增加该号。 • minor 称为次版本号,功能有所变更或增加,但依然和旧的 API 兼容时会增加该号。 • patch 称为补丁版号,功能没有改变,只是修复了一些 bug 就重新发布时会增加该号。 • 也有的软件不拘一格(例如我们的 ” ${XXX_INCLUDE_DIRS}) • 如果为空说明你变量名打错了, CMake 特色就是找不到变量不报错,而是视为空字符串。 • 去看一下 FindXXX.cmake 里的注释(那就是文档),到底是什么名字。 少见的 add_subdirectory 邪教 • 大部分第三方库都需要提前安装好,然后再 find_package 找到他,然后才能链接。 • 也有少数第三方库为了方便 0 码力 | 56 页 | 6.87 MB | 1 年前3
现代C++ 教程:高速上手C++11/14/17/20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 第 8 章文件系统 75 8.1 文档与链接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 8 C++ 中的编程范式。 现代 C++ 还为自身的标准库增加了非常多的工具和方法,诸如在语言自身标准的层面上制定了 std::thread,从而支持了并发编程,在不同平台上不再依赖于系统底层的 API,实现了语言层面的跨 平台支持;std::regex 提供了完整的正则表达式支持等等。C++98 已经被实践证明了是一种非常成功 的『范型』,而现代 C++ 的出现,则进一步推动这种范型,让 C++ server.start(); } 参考答案见此。 进一步阅读的参考资料 1. 知乎『如何评价 GCC 的 C++11 正则表达式?』中原库作者 Tim Shen 的回答 2. 正则表达式库文档 62 第 7 章并行与并发 第 7 章并行与并发 7.1 并行基础 std::thread 用于创建一个执行的线程实例,所以它是一切并发编程的基础,使用时需要包含头文件,它提供了很多基本的线程操作,例如 0 码力 | 83 页 | 2.42 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程t0 + 3; // 当前时间的三秒后 • usleep(3000000); // 让程序休眠 3000000 微秒,也就是 3 秒 • C 语言原始的 API ,没有类型区分,导致很容易弄错单位,混淆时间点和时间段。 • 比如 t0 * 3 ,乘法对时间点而言根本是个无意义的计算,然而 C 语言把他们看做一样的 long 类型,从而容易让程序员犯错。 other 陷入等待 后 func 里的 unlock() 永远得不到调用。 解决 1 : other 里不要再上锁 • 遇到这种情况最好是把 other 里的 lock() 去掉,并在其文档中说明:“ other 不是线 程安全的,调用本函数之前需要保证某 mutex 已经上锁。” 解决 2 :改用 std::recursive_mutex • 如果实在不能改的话,可以用0 码力 | 79 页 | 14.11 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理• 求一个列表中所有数的和: # 参考资料 - [ 热心观众整理的学习资料 ](https://github.com/jiayaozhang/OpenVDB_and_TBB) - [C++ 官方文档 ](https://en.cppreference.com/w/) - [C++ 核心开发规范 ](https://github.com/isocpp/CppCoreGuidelines/blob bookstack.cn/read/CMake-Cookbook/README.md) - [CMake 官方文档 ](https://cmake.org/cmake/help/latest/) - [Git 官方文档 ](https://git-scm.com/doc) - [GitHub 官方文档 ](https://docs.github.com/en) 古代: C 语言 近代: C++98 引入0 码力 | 96 页 | 16.28 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串,则默认 是 C 语言的 0 结尾字符串, find 还要去求 len = strlen(“str”) , 相对低效。 find 寻找子字符串 find 应用案例:计算子字符串出现了多少次 官方文档对 find 的描述 https://en.cppreference.com/w/cpp/string/basic_string/find 反向查找 rfind • find 是从字符串头部开始查找,返回第一次出现的地方。 char *s, size_t slen); replace 批量替换字符串 不是最高效的写法,最坏情况可达 O(mn) ,其中 m 是 “ pyb” 出现次数,如何优化?留作课后作业! 官方文档对 replace 的描述 https://en.cppreference.com/w/cpp/string/basic_string/replace 小彭老师表示: 边界情况总结 • s.substr(pos string &append(string_view sv); • size_t find(string_view sv, size_t pos) const noexcept; • 为什么我看官方文档上没写?标准库头文件里也没看到? • 其实是有的,只不过官方为了让头文件不依赖于 头 文件,把他们写成了模板,并利用类似 SFINAE 的机制给模板参数类型的设 0 码力 | 162 页 | 40.20 MB | 1 年前3
面向亿行 C/C++ 代码的静态分析系统设计及实践-肖枭高危,误报率偏高的高价值检查器 搭配其他误报率低的检查器 避免重要问题被忽略的同时降低 “感知误报率” 降低感知误报率 方法3:易于理解的报告 关键步骤高亮和行为解释 配套完善的文档 代码交叉索引 降低感知误报率 回忆下代码评审 时最不能忍的事 是啥?对,就是 不能像在IDE里 面一样查看符号 定义使用。 代码交叉索引 方法4:Bug生命周期跟踪 精确查找类似Bug,利用0 码力 | 39 页 | 6.88 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起)能够自动查找所有依赖,并利用刚刚提 到的 PUBLIC PRIVATE 正确处理依赖项,比如如果你引用了 OpenVDB::openvdb 那么 TBB::tbb 也会被自动引用。 • 其他包的引用格式和文档参考: https://cmake.org/cmake/help/latest/module/FindBLAS.html 安装第三方库 - 包管理器 • Linux 可以用系统自带的包管理器(如0 码力 | 32 页 | 11.40 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化stream 指令, 这样就可以和标准库优化过的 memset 一 样快了。 Intel Intrinsics Guide • _mm 系列指令出自头文件。 • 指令的文档可以看这个网站: • https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html • 里面有详细说明每个指令 0 码力 | 147 页 | 18.88 MB | 1 年前3
共 195 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20













