C++高性能并行编程与优化 - 课件 - 性能优化之无分支编程 Branchless Programming
做测试? • 优化级别在 -O1 以上时,对于只有两个分支的 if-else ,编译器往往会自动检测到可以优化,帮你 应用“妙用加减乘”了,无法体现手动优化的意义。 不同写法的性能测试 • 我们照常编写了测试用例,禁止内联优化,同样生成 10^7 个随机数( -512 到 512 区间)。 • 至于为什么采用需要三个分支的 clamp 做测试? • 优化级别在 -O1 以上时,对于只有两个分支的 函数体内。 • 微软编译器的同学,要把 __attribute__((noinline)) 换成 __declspec(noinline) 才能编译。 不同写法的性能测试 可以看到不论是哪个优化级别,“妙用加减乘”的效果都是碾压 ifelse 的。 “ 摆大烂”的效果和 ifelse 几乎一样,也就是说根本没用,三目运算符还是生成了 低效的跳转指令,自己不上进,还指望编译器来救你?你还不如坐等天上掉馅饼。0 码力 | 47 页 | 8.45 MB | 1 年前3Borsh 安全高效的二进制序列化
Object Representation Serializer for Hashing • 字节级别确定性 • 执行速度快 Borsh • 轻量级 • 每一个对象与其二进制表示之间都存在一个双射映射 • 不同的对象的二进制表示一定不同 • 便于基于二进制表示进行 Hash 字节级别确定性 • 在 Rust 中, borsh 并没有使用 serde • 全部逻辑原生实现 • 序列化、反序列化速度大幅领先其他解决方案0 码力 | 21 页 | 3.35 MB | 1 年前3C++高性能并行编程与优化 - 课件 - Zeno 中的现代 C++ 最佳实践
• 小彭老师小技巧: • []{ xxx; yyy; return zzz; }() • 可以在表达式层面里插入一个语句块,本 质上是立即求值的 lambda 表达式(内部 是分号级别,外部是逗号级别)。 • 在函数体内也可以这样: • [&]{ xxx; yyy; return zzz; }() • 来在语句块内使用外部的局部变量。 带有构造函数和解构函数的类 • 实际上,只需定义一个带有构造函数和解构函0 码力 | 54 页 | 3.94 MB | 1 年前3新一代分布式高性能图数据库的构建 - 沈游人
海致高性能图计算院士专家工作站 海致获得“ 2021 年 CCF 科学技术奖科技进步卓越奖” CCF 科学技术奖被认为是计算机科学与技术领域最具影响力的专业奖项之一, 其中科技进步卓越奖是 CCF 科技进步奖评选中的最高级别奖项,旨在嘉奖在计 算机科学、技术或工程领域具有重要发现、发明、原始创新,在相关领域有一 定国际影响的优秀成果, AtlasGraph 的获奖证明了其技术领先性、创新性、 重要性,在自主可控浪 • 最短路径、全路径分析 • 按实体、边类型匹配查询 • 子图识别、环路识别等在 线图挖掘分析 • 实体、边可视化统计分析 • 树、层次、分组等多种布 局方式 • 基于 D3 自研的万级别实 体展现 可视化图探索分析 AtlasGraph 架构及实现 图技术简介 Takeway AtlasGraph 图数据库关键特性 - 基于 RUST 语言保证性能优势 - 分布式架构性能可线性扩展0 码力 | 38 页 | 24.68 MB | 1 年前3Zadig 面向开发者的云原生 DevOps 平台
来实现对设备状态的定义和管理,同时设备端使用 Agent 来和云端做交互,利用 Zadig 能力完成车端和云端服务的迭代更新 过程: 主机方式接入资源设备 • 支持系统主机管理的同时支持了项目级别的主机管理,项目成员可 以自己上下线资源设备 • 主机管理支持强大的探活机制 (TCP/HTTP 协议 ) ,精准检测资源设 备是否在线。 • 服务可以查看到关联的主机资源,支持登录主机,方便开发登录资0 码力 | 59 页 | 81.43 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程
才能继续和用户交互。 • 下载完成前,整个界面都会处于“未响应”状 态,用户想做别的事情就做不了。 现代 C++ 中的多线程: std::thread • C++11 开始,为多线程提供了语言级别的 支持。他用 std::thread 这个类来表示线 程。 • std::thread 构造函数的参数可以是任意 lambda 表达式。 • 当那个线程启动时,就会执行这个 lambda0 码力 | 79 页 | 14.11 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针
,而不是空指针。从而会去调用 func(int) 的那个重载。 现代 C++ 推荐用 nullptr 表示空指针 • 好在 C++11 引入了 nullptr 关键字,空指 针第一次有了语法级别的支持。 nullptr 的 类型是 std::nullptr_t ,他可以隐式转换为任 意类型的指针。 • 这样总算可以区分 func(int*) 和 func(int) 的重载了。 •0 码力 | 128 页 | 2.95 MB | 1 年前3
共 7 条
- 1