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

无数据

分类

全部后端开发(12)C++(11)Go(1)

语言

全部中文(简体)(12)

格式

全部PPT文档 PPT(12)
 
本次搜索耗时 0.022 秒,为您找到相关结果约 12 个.
  • 全部
  • 后端开发
  • C++
  • Go
  • 全部
  • 中文(简体)
  • 全部
  • PPT文档 PPT
  • 默认排序
  • 最新排序
  • 页数排序
  • 大小排序
  • 全部时间
  • 最近一天
  • 最近一周
  • 最近一个月
  • 最近三个月
  • 最近半年
  • 最近一年
  • ppt文档 C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型

    中存储的表项数量,从而减轻哈 希的压力。但意味着键值在空间上需要具有一定的局域性,否 则 会浪费分块中一 部分空间。 然而我们这里是 要用他记录粒子 经过的点,因此 具有一定空间局 域性,能够被分 块优化。 实际上空间局域 性正是稀疏网格 能够实现的一大 前提,稍后详细 讨论。 在 16x16 分块的基础上,只用一个 bit 存储 图片解释稀疏的好处 传统稠密二维数组 无边界稀疏分块哈希表 (active element) ,反之则是未激活 (inactive) 。 这就是稀疏的好处,按需分配,自动扩容。 分块则是利用了我们存储的数据常常有着空间局域性的特点,减轻哈希表的压 力,同时在每个块内部也可以快乐地 SIMD 矢量化, CPU 自动预取之类的。 第 2 章:位运算 稀疏的好处:坐标可以是负数 这样即使坐标为负数,或者可以是任意大的坐标,都不会产生越界错误。 但是分块存储时负数却导致出错了 | (b & ((1 << n) - 1)) 可以取出 a 的高 32-n 位, b 的低 n 位,组合成一个 32 位的整数。 解决: & 替代 % , >> 替代 / , | 替代 + 块编号直接为对齐的坐标, << 改成 & 和 ~ 自动推算 B 和 Bmask ,顺便扁平化 Block 第 3 章:多层稀疏 用一个指针的数组来表示 图片解释:指针数组的原理 1 nul
    0 码力 | 102 页 | 9.50 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化

    内存信息查看工具: dmidecode • 可以看到小彭老师电脑上插了 2 块内存,频率都是 2667 MHz ,数据的宽度是 64 位( 8 字节)。 • 理论极限带宽 = 频率 * 宽度 * 数量 2667*16*2=42672 MB/s • 那么,频率相同的情况下,可以考虑插两块 8GB 的内存, 比插一块 16GB 的内存更快,不过价格可能还是翻倍的。 • 系统会自动在两者之间均匀分配内存,保证读写均匀分配 可避免的会通过哈希函数得到随机的地址来访问,且 Value 类型可能小 于 64 字节,浪费部分带宽。怎么办? 解决:按 64 字节分块地随机访问 • 解决方法就是,把数据按 64 字节大小分块。随 机访问时,只随机块的位置,而块的内部仍然按 顺序访问。 • 可以看到 64 字节分块的效果拔群,但还是比顺 序访问慢一些,为什么?明明没有浪费带宽了? 缓存行预取技术:吃着一碗饭的同时,先喊妈妈烧下一碗饭 • 其实,当程序顺序访问 。所以我们选用页的大小,因为本 来就不能跨页顺序预取,所以被我们切断掉也无所谓。 • 另外,我们可以用 _mm_alloc 申请起始地址对齐到页边 界的一段内存,真正做到每个块内部不出现跨页现象。 手动预取: _mm_prefetch • 对于不得不随机访问很小一块的情况,还可以通过 _mm_prefetch 指令手动预取一个缓存行。 • 这里第一个参数是要预取的地址(最好对齐到缓存 行),第二个参数 _MM_HINT_T0
    0 码力 | 147 页 | 18.88 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程

    ?我觉得应该叫 threadNum 才比较合理? • 小彭老师也这么觉得,可能是历史遗留下 来的问题,就不追究了。 线程之上:板块 • CUDA 中还有一个比线程更大的概念,那就是板 块( block ),一个板块可以有多个线程组成。这 就是为什么刚刚获取线程数量的变量用的是 blockDim ,实际上 blockDim 的含义是每个板块 有多少个线程。 • 要指定板块的数量,只需调节三重尖括号里第一个 GPU 是由多个流式多处理器( SM )组成的。每个 SM 可以处理一个或多个板块。 • SM 又由多个流式单处理器( SP )组成。每个 SP 可以处理一个或多个线程。 • 每个 SM 都有自己的一块共享内存( shared memory ),他的性质类似于 CPU 中的缓 存——和主存相比很小,但是很快,用于缓冲临时数据。还有点特殊的性质,我们稍后会 讲。 • 通常板块数量总是大于 SM 的数量,这时英伟达驱动就会在多个 上,就会一直执行,直到他执行完退出,这样的好处是不存在保存和切换上下文(寄 存器,共享内存等)的开销,毕竟 GPU 的数据量比较大,禁不起这样切换来切换去…… • 一个 SM 可同时运行多个板块,这时多个板块共用同一块共享内存(每块分到的就少了) 。 • 而板块内部的每个线程,则是被进一步调度到 SM 上的每个 SP 。 无原子的解决方案: sum 变成数组 • 刚刚的数组求和例子,其实可以不需要原子操作。
    0 码力 | 142 页 | 13.52 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅

    对于并行计算,通常都是 CPU 有几个核心就开 几个线程,因为我们只要同时执行就行了嘛。 • 比如 cornell box 这个例子里,我们把图片均匀 等分为四块处理。然而发现 4 号线程所在的块, 由于在犄角旮旯里光线反弹的次数多,算得比其 他块的慢,而有的块却算得快。但是因为木桶原 理,最后花的时间由最慢的那个线程决定,因此 变成 1 分 30 秒了,多出来的 30 秒里 1 号和 2 号 核心在闲置着,因为任务简单已经算完了,只有 个线程,但还是把图像切分为 16 份。然后规定每一份按照 xy 轴坐标位置编号,比 如 (1,3) 等。 • 把 (x,y) 那一份,分配给 (x + y * 3) % 4 号线程。 这样总体来看每个线程分到的块的位置是随机的, 从而由于正太分布数量越大方差越小的特点,每个 线程分到的总工作量大概率是均匀的。 • GPU 上称为网格跨步循环( grid-stride loop )。 1 1 1 1 auto_partitioner 快 3.31 倍 原因 • tbb::simple_partitioner 能够按照给定的粒度 大小( grain )将矩阵进行分块。块内部小区 域按照常规的两层循环访问以便矢量化,块外 部大区域则以类似 Z 字型的曲线遍历,这样 能保证每次访问的数据在地址上比较靠近,并 且都是最近访问过的,从而已经在缓存里可以 直接读写,避免了从主内存读写的超高延迟。
    0 码力 | 116 页 | 15.85 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 13 C++ STL 容器全解之 vector

    } • 因为 } 标志着一个语句块的结束,在这里,他 会调用所有身处其中的对象的解构函数。比如 这里的 vector ,他的解构函数会释放动态数组 的内存(即自动 delete )。 • vector 会在退出作用域时释放内存,这时候所 有指向其中元素的指针,包括 data() 都会失效。 因此如果你是在语句块内获取的 data() 指针, 语句块外就无法访问了。 • 可见 data() data() 指针是对 vector 的一种引用,实 际对象生命周期仍由 vector 类本身管理。 vector 容器:延续生命周期 • 如果需要在一个语句块外仍然保持 data() 对 数组的弱引用有效,可以把语句块内的 vector 对象移动到外面的一个 vector 对象 上。 vector 在移动时指针不会失效,例如: • a = move(b) • 则会把 b 变成空数组,
    0 码力 | 90 页 | 4.93 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - Zeno 中的现代 C++ 最佳实践

    • []{ xxx; yyy; return zzz; }() • 可以在表达式层面里插入一个语句块,本 质上是立即求值的 lambda 表达式(内部 是分号级别,外部是逗号级别)。 • 在函数体内也可以这样: • [&]{ xxx; yyy; return zzz; }() • 来在语句块内使用外部的局部变量。 带有构造函数和解构函数的类 • 实际上,只需定义一个带有构造函数和解构函
    0 码力 | 54 页 | 3.94 MB | 1 年前
    3
  • ppt文档 Go读书会第二期

    的应用 • 定义零值可用的类型 • 通过复合字面值的初始化 • 切片、字符串、 map 的原理、惯 用法与坑 每个 gopher 编写 Go 代码都会用到的 • Go 包导入相关 • 代码块与作用域 • 控制语句的惯用法与坑 Part4 – 语法基础:函数与方法 践行哲学,遵循惯例,认清本质,理解原理 • Init 函数 • 成为“一等公民” • defer 的惯用法与坑 •
    0 码力 | 26 页 | 4.55 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 03 现代 C++ 进阶:模板元编程

    时, 却出了问题: • fac 似乎变成 32764 了? • 这是因为 [&] 捕获的是引用,是 fac 的地 址,而 make_twice 已经返回了,导致 fac 的引用变成了内存中一块已经失效的 地址。 • 总之,如果用 [&] ,请保证 lambda 对象 的生命周期不超过他捕获的所有引用的寿 命。 作为返回值:解决问题 • 这时,我们可以用 [=] 来捕获,他会捕
    0 码力 | 82 页 | 12.15 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理

    可以适当使用减轻初学者的压力,因为他的行为和 Python 等 GC 语言的引用计数机制很像。但从长远 来看是不行的,因为: 1. shared_ptr 需要维护一个 atomic 的引用计数器, 效率低,需要额外的一块管理内存,访问实际对象 需要二级指针,而且 deleter 使用了类型擦除技术 。 2. 全部用 shared_ptr ,可能出现循环引用之类的问题 ,导致内存泄露,依然需要使用不影响计数的原始
    0 码力 | 96 页 | 16.28 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南

    如果父模块里本来就定义了同名变量,则离开子模块后仍保持父模块原来设置的值。 如果子模块需要向父模块里传变量怎么办? • 可以用 set 的 PARENT_SCOPE 选项,把一个变量传递到上一层作用域(也就是父模 块)。 如果子模块需要向父模块里传变量怎么办? • 如果父模块里没有定义 MYVAR 的话,也可以用缓存变量向外部传变量(不推荐)。但是 这样就不光父模块可见了,父模块的父模块,到处都可见。 除了父子模块之外还有哪些是带独立作用域的
    0 码力 | 166 页 | 6.54 MB | 1 年前
    3
共 12 条
  • 1
  • 2
前往
页
相关搜索词
C++高性性能高性能并行编程优化课件1007080613gogolang030211
IT文库
关于我们 文库协议 联系我们 意见反馈 免责声明
本站文档数据由用户上传或本站整理自互联网,不以营利为目的,供所有人免费下载和学习使用。如侵犯您的权益,请联系我们进行删除。
IT文库 ©1024 - 2025 | 站点地图
Powered By MOREDOC AI v3.3.0-beta.70
  • 关注我们的公众号【刻舟求荐】,给您不一样的精彩
    关注我们的公众号【刻舟求荐】,给您不一样的精彩