积分充值
 首页
前端开发
AngularDartElectronFlutterHTML/CSSJavaScriptReactSvelteTypeScriptVue.js构建工具
后端开发
.NetC#C++C语言DenoffmpegGoIdrisJavaJuliaKotlinLeanMakefilenimNode.jsPascalPHPPythonRISC-VRubyRustSwiftUML其它语言区块链开发测试微服务敏捷开发架构设计汇编语言
数据库
Apache DorisApache HBaseCassandraClickHouseFirebirdGreenplumMongoDBMySQLPieCloudDBPostgreSQLRedisSQLSQLiteTiDBVitess数据库中间件数据库工具数据库设计
系统运维
AndroidDevOpshttpdJenkinsLinuxPrometheusTraefikZabbix存储网络与安全
云计算&大数据
Apache APISIXApache FlinkApache KarafApache KyuubiApache OzonedaprDockerHadoopHarborIstioKubernetesOpenShiftPandasrancherRocketMQServerlessService MeshVirtualBoxVMWare云原生CNCF机器学习边缘计算
综合其他
BlenderGIMPKiCadKritaWeblate产品与服务人工智能亿图数据可视化版本控制笔试面试
文库资料
前端
AngularAnt DesignBabelBootstrapChart.jsCSS3EchartsElectronHighchartsHTML/CSSHTML5JavaScriptJerryScriptJestReactSassTypeScriptVue前端工具小程序
后端
.NETApacheC/C++C#CMakeCrystalDartDenoDjangoDubboErlangFastifyFlaskGinGoGoFrameGuzzleIrisJavaJuliaLispLLVMLuaMatplotlibMicronautnimNode.jsPerlPHPPythonQtRPCRubyRustR语言ScalaShellVlangwasmYewZephirZig算法
移动端
AndroidAPP工具FlutterFramework7HarmonyHippyIoniciOSkotlinNativeObject-CPWAReactSwiftuni-appWeex
数据库
ApacheArangoDBCassandraClickHouseCouchDBCrateDBDB2DocumentDBDorisDragonflyDBEdgeDBetcdFirebirdGaussDBGraphGreenPlumHStreamDBHugeGraphimmudbIndexedDBInfluxDBIoTDBKey-ValueKitDBLevelDBM3DBMatrixOneMilvusMongoDBMySQLNavicatNebulaNewSQLNoSQLOceanBaseOpenTSDBOracleOrientDBPostgreSQLPrestoDBQuestDBRedisRocksDBSequoiaDBServerSkytableSQLSQLiteTiDBTiKVTimescaleDBYugabyteDB关系型数据库数据库数据库ORM数据库中间件数据库工具时序数据库
云计算&大数据
ActiveMQAerakiAgentAlluxioAntreaApacheApache APISIXAPISIXBFEBitBookKeeperChaosChoerodonCiliumCloudStackConsulDaprDataEaseDC/OSDockerDrillDruidElasticJobElasticSearchEnvoyErdaFlinkFluentGrafanaHadoopHarborHelmHudiInLongKafkaKnativeKongKubeCubeKubeEdgeKubeflowKubeOperatorKubernetesKubeSphereKubeVelaKumaKylinLibcloudLinkerdLonghornMeiliSearchMeshNacosNATSOKDOpenOpenEBSOpenKruiseOpenPitrixOpenSearchOpenStackOpenTracingOzonePaddlePaddlePolicyPulsarPyTorchRainbondRancherRediSearchScikit-learnServerlessShardingSphereShenYuSparkStormSupersetXuperChainZadig云原生CNCF人工智能区块链数据挖掘机器学习深度学习算法工程边缘计算
UI&美工&设计
BlenderKritaSketchUI设计
网络&系统&运维
AnsibleApacheAWKCeleryCephCI/CDCurveDevOpsGoCDHAProxyIstioJenkinsJumpServerLinuxMacNginxOpenRestyPrometheusServertraefikTrafficUnixWindowsZabbixZipkin安全防护系统内核网络运维监控
综合其它
文章资讯
 上传文档  发布文章  登录账户
IT文库
  • 综合
  • 文档
  • 文章

无数据

分类

全部后端开发(27)C++(19)Rust(8)系统运维(2)DevOps(2)数据库(1)MySQL(1)云计算&大数据(1)Kubernetes(1)

语言

全部中文(简体)(29)中文(简体)(2)

格式

全部PPT文档 PPT(31)
 
本次搜索耗时 0.019 秒,为您找到相关结果约 31 个.
  • 全部
  • 后端开发
  • C++
  • Rust
  • 系统运维
  • DevOps
  • 数据库
  • MySQL
  • 云计算&大数据
  • Kubernetes
  • 全部
  • 中文(简体)
  • 中文(简体)
  • 全部
  • PPT文档 PPT
  • 默认排序
  • 最新排序
  • 页数排序
  • 大小排序
  • 全部时间
  • 最近一天
  • 最近一周
  • 最近一个月
  • 最近三个月
  • 最近半年
  • 最近一年
  • ppt文档 Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇

    Await-Tree Async Rust 可观测性的灵丹妙药 赵梓淇 Bugen Zhao Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 设计原理与实现 2 回顾 Async Rust 的设计与痛点 1 Await-Tree 的 应用与真实案例 3 Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 设计原理与实现 poll 驱动的状态机 • 组合嵌套为调度单元: Task • async fn 语法糖 Async Rust 观测与调试的痛点 Async Rust 回顾 • 特性: Future 灵活的可组合性 • 任意定制 Poll 的执行逻辑 (Join / Select / Timeout) • 动态的调用关系 • 痛点:观测与调试工具无法理解灵活的执行逻辑 • Backtrace 不够直观 ( 痛点:观测与调试工具无法还原 Pending Task 的执行状态 • 难以得知 Task 阻塞的位置和原因 • 难以调试 Async Stuck • ? 如何解决? Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 设计原理与实现 2 回顾 Async Rust 的设计与痛点 1 Await-Tree 的 应用与真实案例 3 设计目标 Await Tree 的设计原理与实现
    0 码力 | 37 页 | 8.60 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 性能优化之无分支编程 Branchless Programming

    看比站 15 分钟 眼睛 吃饭 30 分钟 嘴巴,手 拉粑粑 20 分钟 屁股 洗脸 烧开水 刷牙 看比站 吃饭 拉粑粑 5 10 5 15 30 20 为什么需要流水线 • 更高效的办法是,观察每个任务都占用哪些 资源,所占用资源不冲突的可以同时进行, 节省时间。 • 例如洗脸需要眼睛嘴巴手,刷牙需要嘴巴手 ,那么洗脸和刷牙不能同时进行。但是烧开 水只需要占用煤气灶,和洗脸刷牙不冲突, 时是需要连续两次条件跳转指令的。 但是在 -O3 的淫威下,编译器把其中一个条件跳转自动优化掉了( cmovle 和 cmovl )。 可惜另一个 if-else 的条件跳转指令( js )没有被成功优化掉(编译器具有短视性)。 可以看到“摆烂”版本的三目运算符 ?: 和 if-else 其实是一样的,也只优化掉了其中一个条件跳转。 但是在“妙用加减乘”的版本里,两次比较依然都是高效的无分支指令( setg 和 cmovbe 交给编译器自动优化掉。 • 一般只需要把 if-else 改成三目运算符 ?: 编 译器就能成功识别了(见开头的例子)。 • 建议只有当性能遇到瓶颈时,再去针对性对 “热代码”优化,而不是一股脑儿全部改成无分 支,影响可读性。 “ 妙用加减乘”的无分支优化是万能的吗? • return x >= 0 ? sqrt(x) : 0; • 能不能优化成: • return (x >= 0)
    0 码力 | 47 页 | 8.45 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串

    例如 32 代表空格, 48 代表 ‘ 0’ , 65 代表 ‘ A’ , 97 代表 ‘ a’…… • 32~126 这些整数就用于是表示这些 可显示字符 (printable character) 的。 计算机如何表达字符 • 除了可显示字符 (printable character) 外, ASCII 还规定了一 类特殊的控制字符 (control character) : Enter 键,大家都是按 Ctrl+J 来换行的… … • 不过,如果直接在控制台输入 ‘ ^’ 和 ‘ C’ 两个字符并 没有 Ctrl+C 的效果哦!因为 ‘ ^C’ 是 Ctrl+C 输入之 后一次性显示出来的,并不是真的说 Ctrl 就是 ‘ ^’ 这 个字符。 C 语言字符串 第 2 章 C 语言中的字符类型 char • char c = ‘a’; • assert(c == 97); std::string 其实是同等 地位的。 • 虽然也可以给 std::string 定义很多个不同的 + 重载,每个针对不同的数字类 型( int 、 float 、 double )排列组合,但是这样没有可扩展性,而且影响编 译速度。 • 所以 cpp 说,你必须手动把 42 先转换为字符串,然后再和已有的字符串相 加: • “you have ” + std::to_string(42) + “
    0 码力 | 162 页 | 40.20 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - Zeno 中的现代 C++ 最佳实践

    (superdog)” 类,他继承自普通狗 (dog) 。 • 这时我们可以给 IObjectClone 新增一个模板参数 Base ,其默认值为 IObject 。 • 这样当用户需要的时候就 • 可指定第二个参数 Base , • 从而控制 IObjectClone 的 • 基类,也就相当于自己继 • 承自那个 Base 类了,不 • 指定的话就默认 IObject 。 IObject
    0 码力 | 54 页 | 3.94 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化

    2048 MB 的数据。 • 花费了 0.0656 秒。 • 因此带宽是 31198 MB/s 。 • 和理论带宽 42672 MB/s 相差不多,符合我的预期 。 第 2 章:缓存与局域性 针对不同数据量大小的带宽测试 • 我们试试看 a 不同的大小,对带宽有什么影响。 针对不同数据量大小的带宽测试(续) • 可见数据量较小时,实际带宽甚至超过了 理论带宽极限 42672 MB/s 跨步,则中间的缓存行没有被读取,从而变快了。 缓存行决定数据的粒度 • 结论:访问内存的用时,和访问的字节数 量无关,和访问的每个字节所在的缓存行 数量有关。 • 可见,能否很好的利用缓存,和程序访问 内存的空间局域性有关。 缓存行决定数据的粒度(续) • 所以我们设计数据结构时,应该把数据存 储的尽可能紧凑,不要松散排列。最好每 个缓存行里要么有数据,要么没数据,避 免读取缓存行时浪费一部分空间没用。 有更长的周转时间来隐藏他内部计算的延迟。所以本案例中 AOS 比 SOA 好。 AOS 、 SOA 、 AOSOA 哪家强:结论 • 如果几个属性几乎总是同时一起用的,比如位置矢量 pos 的 xyz 分量,可 能都是同时读取同时修改的,这时用 AOS ,减轻预取压力。 • 如果几个属性有时只用到其中几个,不一定同时写入,比如 pos 和 vel , 通常的情况都是 pos+=vel ,也就是 pos
    0 码力 | 147 页 | 18.88 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅

    的芯片? • 结论:狭义的摩尔定律没有失效。但晶体管数 量的增加,不再用于继续提升单核频率,转而 用于增加核心数量。单核性能不再指数增长! 你醒啦?免费午餐结束了! 指望靠单核性能的增长带来程序性 能提升的时代一去不复返了,现在 要我们动动手为多核优化一下老的 程序,才能搭上摩尔定律的顺风车 。 神话与现实: 2 * 3GHz < 6GHz • 一个由双核组成的 3GHz 的 CPU 实际上提供了 显然不是。甚至在两个处理器上同时运行两个线程也不见得可以获得两倍的性能。相似的 ,大多数多线程的应用不会比双核处理器的两倍快。他们应该比单核处理器运行的快,但 是性能毕竟不是线性增长。 • 为什么无法做到呢?首先,为了保证缓存一致性以及其他握手协议需要运行时间开销。在 今天,双核或者四核机器在多线程应用方面,其性能不见得的是单核机器的两倍或者四倍。 这一问题一直伴随 CPU 发展至今。 并发和并行的区别 • 运用多线程的方式和动机,一般分为两种。 个线程,但是只有 4 个处理器核心。 那么就会先执行 1,2,3,4 号线程,一段时间后自动切换 到 5,6,7,8 线程。当一个线程退出时候,系统就不会再 调度到他上去了,从而保证每个核心始终有事可做。 1 6 11 16 2 7 12 8 3 4 9 14 10 15 13 5 解决 2 :线程数量不变,但是用一个队列分发和认领任务 • 但是线程数量太多会造成调度的
    0 码力 | 116 页 | 15.85 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程

    sleep : std::this_thread::sleep_for • 可以用 std::this_thread::sleep_for 替代 Unix 类操作系统专有的的 usleep 。他可 以让当前线程休眠一段时间,然后继续。 • 而且单位也可以自己指定,比如这里是 milliseconds 表示毫秒,也可以换成 microseconds 表示微秒, seconds 表示 过程。简单来说,进程是程序(应用程序,可执行文件)的一次执行。比如双击打开一个 桌面应用软件就是开启了一个进程。 • 线程是进程中的一个实体,是被系统独立分配和调度的基本单位。也有说,线程是 CPU 可 执行调度的最小单位。也就是说,进程本身并不能获取 CPU 时间,只有它的线程才可以。 • 从属关系:进程 > 线程。一个进程可以拥有多个线程。 • 每个线程共享同样的内存空间,开销比较小。 • std::promise 。 • 然后在线程返回的时候,用 set_value() 设置返回值。在主线程里,用 get_future() 获取其 std::future 对象,进一步 get() 可 以等待并获取线程返回值。 std::future 小贴士 • future 为了三五法则,删除了拷贝构造 / 赋 值函数。如果需要浅拷贝,实现共享同一个 future 对象,可以用 std::shared_future
    0 码力 | 79 页 | 14.11 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化

    引用同一个头文件造成冲突,并不是必须 static 才内 联 如果你不确定某修改是否能提升性能,那你最好实际测一下,不要脑内模拟 inline 在现代 C++ 中有其他含义,但和内联没有关系,他是一个迷惑性的名字 “ 大厂面试官”笑话 • 同样沦为笑柄的还有 register 关键字,号称:可以让一个变量使用寄存器存储,更高效。 • 都能把等差数列求和优化成 5050 的编译器笑着看着你,说道:还要你提醒吗? ppt ,贴到他脸上即可。 • 明明实验一下就知道的事,还在照着上世纪谭某强教材念。古有纸上谈兵,今有脑内编程 。 • 计算机编程又不是量子物理广义相对论,我们每个人都有电脑,做一下实验很容易,可总 有所谓的“老师”就不肯动动手敲几行命令(写 doc 文件倒挺勤的),在那里传播假知识。 • 在线做编译器实验推荐这个网站: https://godbolt.org/ • 可以实时看源代码编译的结果,还能选不同的编译器版本和 如果优化了: b = b; 最后 b 没有改变。 导致优化后结果不一样,这就是 编译器放弃优化的原因。 告诉编译器别怕指针别名: __restrict 关键字 __restrict 是一个提示性的关键字,是程序员向 编译器保证:这些指针之间不会发生重叠! 从而他可以放心地优化成功: __restrict 关键字:只需加在非 const 的即可 实际上, __restrict 只需要加在所有具有写入
    0 码力 | 108 页 | 9.47 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 03 现代 C++ 进阶:模板元编程

    模板的应用:编译期优化案例(续) • 因此可以把 debug 改成模板参数,这样 就是编译期常量。编译器会生成两份函数 sumto 和 sumto 。前者保 留了调试用的打印语句,后者则完全为性 能优化而可以去掉打印语句。 • 后者其实在编译器看来就是 • if (false) std::cout << ... • 这样显然是会被他自动优化掉的。 模板的应用:编译期分支 • 更进一步,可以用 T> 等价。 • auto const & 也是同理,等价于模板函数 的 T const & 。 • 带 auto 参数的 lambda 表达式,和模板 函数一样,同样会有惰性、多次编译的特 性。 C++20 前瞻:函数也可以 auto , lambda 也可以 • 如右图,两者的用法可以互换,更方便了 。 • 老师也欢迎同学们在作业中尝试 C++20 新特性,如果你们有相应的编译环境的话 :结构化绑定 • 可是需要一个个去 get 还是好麻烦。 • 没关系,可以用结构化绑定的语法: • auto [x, y, ...] = tup; • 利用一个方括号,里面是变量名列表,即 可解包一个 tuple 。里面的数据会按顺序 赋值给每个变量,非常方便。 tuple :结构化绑定为引用 • 结构化绑定也支持绑定为引用: • auto &[x, y, ...] = tup;
    0 码力 | 82 页 | 12.15 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理

    int{3.14f} 会出错,因为 {} 是非强制转换。 2. Pig(“ 佩奇” , 3.14f) 不会出错,但是 Pig{“ 佩奇” , 3.14f} 会出错,原因同上,更安全。 3. 可读性: Pig(1, 2) 则 Pig 有可能是个函数, Pig{1, 2} 看起来更明确。 • 其实谷歌在其 Code Style 中也明确提出别再通过 () 调用构造函数,需要类型转换时应该 用: 等基础类型 2. void *, Object * 等指针类型 3. 完全由这些类型组成的类 • 这些类型被称为 POD ( plain-old-data )。 • POD 的存在是出于兼容性和性能的考虑。 << 取决于内存的随机值 编译器默认生成的构造函数:无参数( POD 陷阱解决方案) • 不过我们可以手动指定初始化 weight 为 0 。 • 通过 {} 语法指定的初始化值,会在编译器自 或删除拷贝构造函数和拷贝赋值函数,否则出错。 2. 如果一个类定义了拷贝构造函数,那么您必须同时 定义或删除拷贝赋值函数,否则出错,删除可导致 低效。 3. 如果一个类定义了移动构造函数,那么您必须同时 定义或删除移动赋值函数,否则出错,删除可导致 低效。 4. 如果一个类定义了拷贝构造函数或拷贝赋值函数, 那么您必须最好同时定义移动构造函数或移动赋值 函数,否则低效。 三五法则是前人总结的,避免犯错的经验。
    0 码力 | 96 页 | 16.28 MB | 1 年前
    3
共 31 条
  • 1
  • 2
  • 3
  • 4
前往
页
相关搜索词
赵梓Await-TreeRustC++高性性能高性能并行编程优化课件15070605040302
IT文库
关于我们 文库协议 联系我们 意见反馈 免责声明
本站文档数据由用户上传或本站整理自互联网,不以营利为目的,供所有人免费下载和学习使用。如侵犯您的权益,请联系我们进行删除。
IT文库 ©1024 - 2025 | 站点地图
Powered By MOREDOC AI v3.3.0-beta.70
  • 关注我们的公众号【刻舟求荐】,给您不一样的精彩
    关注我们的公众号【刻舟求荐】,给您不一样的精彩