积分充值
 首页
前端开发
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文库
  • 综合
  • 文档
  • 文章

无数据

分类

全部后端开发(17)C++(15)系统运维(1)Go(1)Rust(1)存储(1)

语言

全部中文(简体)(18)

格式

全部PPT文档 PPT(18)
 
本次搜索耗时 0.020 秒,为您找到相关结果约 18 个.
  • 全部
  • 后端开发
  • C++
  • 系统运维
  • Go
  • Rust
  • 存储
  • 全部
  • 中文(简体)
  • 全部
  • PPT文档 PPT
  • 默认排序
  • 最新排序
  • 页数排序
  • 大小排序
  • 全部时间
  • 最近一天
  • 最近一周
  • 最近一个月
  • 最近三个月
  • 最近半年
  • 最近一年
  • ppt文档 C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理

    pls/TBBtutorial.pdf) - [ 并行体系结构与编程 (CMU 15-418)](https://www.bilibili.com/video/av48153629/) - [ 深入理解计算机原理 (CSAPP)](http://csapp.cs.cmu.edu/) - [CMake “ 菜谱” ](https://www.bookstack.cn/read/CMake-Cookbook/README 编译器默认生成的构造函数:初始化列表(感谢 C++11 ) • 当一个类(和他的基类)没有定义任何构造函 数,这时编译器会自动生成一个参数个数和成 员一样的构造函数。 • 他会将 {} 内的内容,会按顺序赋值给对象的每 一个成员。 • 目的是为了方便程序员不必手写冗长的构造函 数一个个赋值给成员。 • 不过初始化列表的构造函数只支持通过 {} 或 = {} 来构造,不支持通过 () 如果一个类定义了拷贝构造函数或拷贝赋值函数, 那么您必须最好同时定义移动构造函数或移动赋值 函数,否则低效。 三五法则是前人总结的,避免犯错的经验。 只告诉做什么,不告诉为什么,是不深入的。 让我们通过撞南墙的方式来深入理解一下。 更多这样的前人经验可以参考: https://github.com/isocpp/ CppCoreGuidelines 三五法则:拷贝构造函数 • 在 = 时,默认是会拷贝的。比如右边这样:
    0 码力 | 96 页 | 16.28 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针

    std::fmod - - - powf pow std::pow - - - sqrtf sqrt std::sqrt - - - sinf sin std::sin 指针的本质究竟是什么? 理解内存地址的概念 地址 字节 内存就像一条长长的街道,街边有一间间小房子,每个房子里都住着一个字节。 而内存地址就是房子的门牌号, CPU 就是通过门牌号,来读取或修改指定房子里的字节。 而内存的容量实际上就是街道的长度,比如 float* • 任何类型都有相应的指针类型。 • int 类型的指针是 int* 。 • float 类型的指针是 float* 。 能够指向一个变量的指针究竟是什么? 地址 字节 指针 p 的内容实际上就是一个整数 4 ,也就是变量 x 中第一个字节的门牌号。 因为 int 类型的四个字节都是紧挨着,所以只需要知道第一个字节的地址就行了。 这样等会通过 * 运算符访问的时候,就可以访问从门牌号 传一个空指针,就表示“用户不想指定 这个参数”的意思。 C++ 可以用更安全的 func(std::optional pars) 来替代。 NULL 的定义为什么是这样的? • 如果你看过标准库的头文件内容,会看到 NULL 的 本质无非是一个宏。那为什么要这样定义呢? • 可见他在 C++ 中会直接定义为常数 0 ,而 C 语言 中却定义为 ((void*)0) ,为什么会区别对待? • 这是因为
    0 码力 | 128 页 | 2.95 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起

    GNU gcc g++ gfortran LLVM clang clang++ flang 多文件编译与链接 • 单文件编译虽然方便,但也有如下缺点: 1. 所有的代码都堆在一起,不利于模块化和理解。 2. 工程变大时,编译时间变得很长,改动一个地方就得全部重新编译。 • 因此,我们提出多文件编译的概念,文件之间通过符号声明相互引用。 • > g++ -c hello.cpp -o hello MyClass > a; // 声明一个由 MyClass 组成的数组 • 如果编译器不知道 vector 是个模板类,那他完全可以把 vector 看做一个变量名,把 < 解释为小于号,从而理解成判断‘ vector’ 这个变量的值是否小于‘ MyClass’ 这个变量的值。 • 正因如此,我们常常可以在 C++ 代码中看见这样的写法: typename decay::type • 的声明放到单独一个文件 hello.h 里,然后在需要用到 hello() 这个声 明的地方,打上一个记号, #include “hello.h” 。然后用一个小程序,自动在编译前把引号 内的文件名 hello.h 的内容插入到记号所在的位置,这样不就只用编辑 hello.h 一次了嘛 ~ • 后来,这个编译前替换的步骤逐渐变成编译器的了一部分,称为预处理阶段, #define 定 义的宏也是这个阶段处理的。 •
    0 码力 | 32 页 | 11.40 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程

    支持。他用 std::thread 这个类来表示线 程。 • std::thread 构造函数的参数可以是任意 lambda 表达式。 • 当那个线程启动时,就会执行这个 lambda 里的内容。 • 这样就可以一边和用户交互,一边在另一 个线程里慢吞吞下载文件了。 错误:找不到符号 pthread_create • 但当我们直接尝试编译刚才的代码,却在链接时发生了错误。 • 原来 重要 。 • 反面教材: blender 在运行物理解算的时候,界面会卡住,算完一帧后窗口才能刷新一遍 ,导致解算过程中基本别想做事,这一定程度上归功于 opengl 原始的单线程设计。 • 正面教材: zeno 可以在解算过程中,随时拖动滑块看前几帧的结果,编辑场景图,修改 节点间的连接,为下一次解算做准备,同时当前已经启动的物理解算还能在后台继续正常 运行。虽然 zeno 也用了 opengl 写入原子变量。 • 返回一个 bool 值,表示是否相等。 • 注意 old 这里传的其实是一个引用,因此 compare_exchange_strong 可修改他的值 。 方便同学们理解的伪代码 • 为了方便理解,可以假想 atomic 里面是这样实现的: • 可以看到其中 compare_exchange_strong 的逻辑最为复 杂,一般简称 CAS (compare-and-swap)
    0 码力 | 79 页 | 14.11 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - Zeno 中的现代 C++ 最佳实践

    相应的猫或是狗的 make_shared(*obj) ,这就实现了拷 贝的多态。 如何批量定义 clone 函数? • 可以定义一个宏 IOBJECT_DEFINE_CLONE ,其内容是 clone 的实现。这里我们用 std::decay_t 快速获取了 this 指针所指向的类型,也就是当前所在类的类型 。 • 宏的缺点是他不遵守命名空间的规则,宏的名 态的虚函数,这就是被小彭老师称为自动 虚克隆 (auto-vitrual-clone) 的大法。 Zeno 中对 OpenVDB 对象的封装 • 开源的体积数据处理库 OpenVDB 中有许多“网格”的类(可以理解为多维数组),例如: • openvdb::Vec3fGrid , FloatGrid , Vec3IGrid , IntGrid , PointsDataGrid • 我们并不知道他们之间的继承关系,可能有也可能没有。但是在
    0 码力 | 54 页 | 3.94 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化

    _Z5otheri 定义在同一个文件中,编 译器会直接调用,没有 @PLT 表示未定义 对象。减轻了链接器的负担。 编译器优化:内联化 只有定义在同一个文件的函数可以被内联 !否则编译器看不见函数体里的内容怎么 内联呢? 为了效率我们可以尽量把常用函数定义在 头文件里,然后声明为 static 。这样调用 他们的时候编译器看得到他们的函数体, 从而有机会内联。 内联:当编译器看得到被调用函数( other 1024 填充: SIMD 加速 paddd :四个 int 的加法 movdqa :加载四个 int 从 0 到 1024 填充: SIMD 加速(续) 看不懂?小彭老师解析一下。右边是方便大家理解的伪代码: 一次写入 4 个 int ,一次计算 4 个 int 的加法,从而更加高 效但这样有个缺点,那就是数组的大小必须为 4 的整数倍 否则就会写入越界的地址! 如果不是 4 的倍数?边界特判法
    0 码力 | 108 页 | 9.47 MB | 1 年前
    3
  • ppt文档 Go读书会第二期

    年 11 月下旬 初稿交付 2021 年 12 月出版 《 Go 语言精进之路》导读 第二部分 整体写作思路 异曲同工 精进之路,思维先行 – part1 践行哲学,遵循惯例,认清本质,理解原理 - (part2- part10) 精进之路,思维先行 异曲同工 “ 语言决定思维方式” - 萨丕尔假说 “ 我的语言之局限,即我的世界之局限” - 路德维 希 · 维特根斯坦(语言哲学奠基人) 站在语言设计者的高度理解 Go 的与众不同 Go 诞生 与演进 Go 设计哲 学 Go 编程思 维举例 怎么学习 Go 思维? 学习本质是一种模仿。要学习 Go 思维,就要 去模仿 go 团队、 go 社区的优秀项目和代 码,看看他们怎么做的 践行哲学,遵循惯例,认清本质,理解原理 Part2 – 项目基础:布局、代码风格与命名 践行哲学,遵循惯例,认清本质,理解原理 每个 gopher 践行哲学,遵循惯例,认清本质,理解原理 • 一致的变量声明形式 • 无类型常量与 iota 的应用 • 定义零值可用的类型 • 通过复合字面值的初始化 • 切片、字符串、 map 的原理、惯 用法与坑 每个 gopher 编写 Go 代码都会用到的 • Go 包导入相关 • 代码块与作用域 • 控制语句的惯用法与坑 Part4 – 语法基础:函数与方法 践行哲学,遵循惯例,认清本质,理解原理 •
    0 码力 | 26 页 | 4.55 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 03 现代 C++ 进阶:模板元编程

    ) • 同理, auto const & 可以定义常引用: 自动类型推导:函数返回引用 • 当然,函数的返回类型也可以是 auto & 或者 auto const & 。比如懒汉单例模式: 理解右值:即将消失的,不长时间存在于内存中的值 • 引用又称为左值( l-value )。左值通常对应着一个长时间存在于内 存中的变量。 • 除了左值之外,还有右值( r-value )。右值通常是一个表达式,代 int & , int const & • 左值例子: a, *p, p[a] • 右值类型: int && • 右值例子: 1, a + 1, *p + 1 • 不理解右值和右值引用?没关系,老师也不理解,跳过即可! 理解 const :常值修饰符 • 与 & 修饰符不同, int const 和 int 可以看做两个不同的类型。不过 int const 是不可写 入的。 • 因此 int 和 T2 类型相加以后的结果,并做 为返回的 vector 容器中的数据类型。 恭喜!你已经基本学废了自动类型推导! • 《基本鞋废》 • 怎么样,是不是非常方便呢? • 如果不理解,跳过即可! 函数也是对象:函数式编程 • 你知道吗?函数可以作为另一个函数的参数! 函数也是对象:函数式编程(续) • 而且,这个作为参数的函数也可以有参数! 函数式编程:函数作为模板类型
    0 码力 | 82 页 | 12.15 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化

    _MM_HINT_NTA 则是预取到非临时缓冲结构中, 可以最小化对缓存的污染,但是必须很快被用上。 重新理解 mem-bound :延迟隐藏 • 之前提到, 1 次浮点读写必须伴随着 32 次浮点加法的运算量,否则和只有 0 次加法的耗时没有任何区别,即内 存带宽成唯一瓶颈的 mem-bound 。可是按我们理解,“ 1 次读写 +0 次加法”应该会比“ 1 次读写 +8 次加法”快一 点点吧,因为 8 内存抵达了才能算,导致延迟隐藏失败。隐藏成功: a[0] a[1] a[2] 重新理解 mem-bound :延迟隐藏 • 之前提到, 1 次浮点读写必须伴随着 32 次浮点加法的运算量,否则和只有 0 次加法的耗时没有任何区别,即内 存带宽成唯一瓶颈的 mem-bound 。可是按我们理解,“ 1 次读写 +0 次加法”应该会比“ 1 次读写 +8 次加法”快一 点点吧,因为 8 指令的文档可以看这个网站: • https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html • 里面有详细说明每个指令对应的汇编,方便理解的伪代码,延迟和花费的时钟周期等。 第 4 章:循环合并法 两个循环体 • 原始的代码第一个循环体执行 a[i] = a[i] * 2 ,等乘法全 部结束了以后,再来一个循环体执行 a[i]
    0 码力 | 147 页 | 18.88 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程

    com/video/BV1fa411r7zp 课程 PPT 和代码: https://github.com/parallel101/course 前置条件 • 学过 C/C++ 语言编程。 • 理解 malloc/free 之类的概念。 • 熟悉 STL 中的容器、函数模板等。 • 英伟达 GTX900 及以上显卡。 • CUDA 11 及以上。 • CMake 3.18 及以上。 我负责监督你学习 如需总的线程编号: blockDim * blockIdx + threadIdx • 剧透一下:实际上 GPU 的板块相当于 CPU 的线程, GPU 的线程相当于 CPU 的 SIMD ,可以这样理解,但不完全等同。 图片解释板块和线程 • 如需总的线程数量: blockDim * gridDim • 如需总的线程编号: blockDim * blockIdx + threadIdx 三维的板块和线程编号 章的结尾。 第 6 章: thrust 库 替换成 CUDA 官方提供的 thrust::universal_vector • 虽然自己实现 CudaAllocator 很有趣,也 帮助我们理解了底层原理。但是既然 CUDA 官方已经提供了 thrust 库,那就 用他们的好啦。 • universal_vector 会在统一内存上分配, 因此不论 GPU 还是 CPU 都可以直接访
    0 码力 | 142 页 | 13.52 MB | 1 年前
    3
共 18 条
  • 1
  • 2
前往
页
相关搜索词
C++高性性能高性能并行编程优化课件0212010504gogolang030708
IT文库
关于我们 文库协议 联系我们 意见反馈 免责声明
本站文档数据由用户上传或本站整理自互联网,不以营利为目的,供所有人免费下载和学习使用。如侵犯您的权益,请联系我们进行删除。
IT文库 ©1024 - 2025 | 站点地图
Powered By MOREDOC AI v3.3.0-beta.70
  • 关注我们的公众号【刻舟求荐】,给您不一样的精彩
    关注我们的公众号【刻舟求荐】,给您不一样的精彩