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

无数据

分类

全部后端开发(18)C++(16)Rust(2)数据库(1)系统运维(1)MySQL(1)DevOps(1)

语言

全部中文(简体)(19)中文(简体)(1)

格式

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

    com/video/BV1fa411r7zp 课程 PPT 和代码: https://github.com/parallel101/course 本课涵盖:稀疏矩阵、 unordered_map 、空间稀 疏网格、位运算、浮点的二进制格式、内存带宽优 化 面向人群:图形学、 CFD 仿真、深度学习编程人 员 第 0 章:稀疏矩阵 稠密数组存储矩阵 用 foreach 包装一下枚举的过程 改用 16x16 分块存储 分块能减少 unordered_map 中存储的表项数量,从而减轻哈 希的压力。但意味着键值在空间上需要具有一定的局域性,否 则 会浪费分块中一 部分空间。 然而我们这里是 要用他记录粒子 经过的点,因此 具有一定空间局 域性,能够被分 块优化。 实际上空间局域 性正是稀疏网格 能够实现的一大 前提,稍后详细 讨论。 在 16x16 分块的基础上,只用一个 bit 存储 有了无边界的稀疏网格,再也不用担心二维数组要分配多大了。 坐标可以无限延伸,甚至可以是负数!比如 (-1,2) 等…… 他会自动在写入时分配 16x16 的子网格,称之为叶节点 (leaf node) ,而这里的 unordered_map 就是充当根节点 (root node) 。 图片解释稀疏的好处 传统稠密二维数组 无边界稀疏分块哈希表 此外,还是按需分配内存,即使被写入的部分奇形怪状也不会浪费内存。
    0 码力 | 102 页 | 9.50 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化

    2667*16*2=42672 MB/s • 那么,频率相同的情况下,可以考虑插两块 8GB 的内存, 比插一块 16GB 的内存更快,不过价格可能还是翻倍的。 • 系统会自动在两者之间均匀分配内存,保证读写均匀分配 到两个内存上,实现内存的并行读写,这和磁盘 RAID 有 一定相似之处。 验证一下刚刚的 parallel_add 是不是用足了全部带宽 • 刚刚 a 数组的大小是 1024 MB 4 个字节时,实际会导致 0x0040~0x0080 的 64 字节数据整个被读取到缓存中。 • 这就是为什么我们喜欢把数据结构的起始地址和大小对齐到 64 字节,为的是不要浪费缓存行的存储空间。 缓存的工作机制:写 • 缓存中存储的数据结构: • struct CacheEntry { • bool valid, dirty; • uint64_t address; 量无关,和访问的每个字节所在的缓存行 数量有关。 • 可见,能否很好的利用缓存,和程序访问 内存的空间局域性有关。 缓存行决定数据的粒度(续) • 所以我们设计数据结构时,应该把数据存 储的尽可能紧凑,不要松散排列。最好每 个缓存行里要么有数据,要么没数据,避 免读取缓存行时浪费一部分空间没用。 重新认识结构体 重新认识 AOS * *
    0 码力 | 147 页 | 18.88 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针

    如果你没看出来(哪怕是其中一个),那就要好好上小彭老师的课哦! 字节( byte ) 和位( bit )有什么区别 • 众所周知,计算机是二进制的,存储的实际上是一个个 0 和 1 。 • 每个存储 0 或 1 的空间称为一个位( bit ),一位可以存储 0 或 1 两个可能的值。 • 现在的计算机都会把 8 个位打包成一个字节( byte ),也就是说: 1 字节 = 8 位。 • 一字节可以表示 0 到 11111111 + 00000010 = 100000001 • 正好和普通的二进制加法一样,只需要丢弃最前面的那一位进位就可以了。 • 这样就重用了现有的无符号加法器,从而节省了宝贵的电路板空间。 • 补码和反码一样,让有符号整数可以表示 -128 到 127 。 • 其中负数的范围反而比正数大是因为要回避 -0 。 字节的单位: KB , MB , GB , TB • 计算机中规定“一千”是 是用不到。 知识拓展 • 虽然 64 位计算机的寄存器能处理 64 位的整数,实际上的内存地址并没有 64 位。 • 实际上地址的高 16 位始终和第 48 位一致(符号扩展),也就是虚拟地址空间只有 48 位。 • 而经过 MMU 映射后实际给内存的地址只有 39 位,因此如今的 x64 架构实际上只能访 问 512GB 内存,如果插了超过这个大小的内存条他也不会认出来。 • 此外,
    0 码力 | 128 页 | 2.95 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串

    新特性:自定义字面量后缀 • 如果你觉得 using namespace std; 太危险了不想用他。 • 可以只用 using namespace std::literials; • 这个特殊的名字空间里包含了所有的 operator“” 函数。 小彭老师锐评:何谓“键盘压力” • 高情商:键盘压力,指的是程序员敲击键盘时产生的心理压力。 • 低情商:键盘压力,指的是 rust 键盘侠对 cpp 一样,是内存中连续的数组。注 意这里原来 [4, 4+2) 这里的子字符串为 “ lo” ,替换成 “ pful” 。而因为 “ pful” 比 “ lo” 宽了 2 格,所以为了预留出这 2 格额外的空间,就得 把后面的 “ world” 在内存中整体平移了 2 格(和 vector 的 insert 一 样)。这意味着 replace 最坏是 O(n) 复杂度的,然而如果原来的子字 符串和新的子字符串一样长度,例如 string(“world”, 3) 和 s += “wor” 等价。 • 性能如何? append 的扩容方式和 vector 的 push_back 一样,每次超过 capacity 就预留两倍空间,所以重复调用 append 的复杂度其实是 amortized O(n) 的。 • 函数原型: • string &append(string const &str);
    0 码力 | 162 页 | 40.20 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程

    ize()) • 即可自动帮你检查错误代码并打印在终端,然后退出。还会 报告出错所在的行号,函数名等,很方便。 堆上分配试试? • 那你可能会想,难道是因为我的 ret 创建 在栈上,所以 GPU 不能访问,才出错的 ? • 于是你试图用 malloc 在堆上分配一个 int 来给 GPU 访问,结果还是失败了。 原因: GPU 使用独立的显存,不能访问 CPU 内存 • 原来, (host) 。 GPU 使 用的内存称为设备内存 (device) ,他是显卡上板载 的,速度更快,又称显存。 • 而不论栈还是 malloc 分配的都是 CPU 上的内存 ,所以自然是无法被 GPU 访问到。 • 因此可以用用 cudaMalloc 分配 GPU 上的显存, 这样就不出错了,结束时 cudaFree 释放。 • 注意到 cudaMalloc 的返回值已经用来表示错误代 码,所以返回指针只能通过 *pret 访问其 返回值了。但是不行,因为 GPU 访问不 了 CPU 的内存地址,同理, CPU 也访 问不了 GPU 的内存地址。一访问 CPU 就奔溃了。 跨 GPU/CPU 地址空间拷贝数据 • 因此可以用 cudaMemcpy ,他能够在 GPU 和 CPU 内存之间拷贝数据。 • 这里我们希望把 GPU 上的内存数据拷贝到 CPU 内存上,也就是从设备内存 (device)
    0 码力 | 142 页 | 13.52 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅

    互。并在主线程中等待该任务组里的任务 全部执行完毕。 • 区别在于,一个任务不一定对应一个线程 ,如果任务数量超过 CPU 最大的线程数, 会由 TBB 在用户层负责调度任务运行在 多个预先分配好的线程,而不是由操作系 统负责调度线程运行在多个物理核心。 封装好了: parallel_invoke 更好的例子 第 1 章:并行循环 时间复杂度( time-efficiency )与工作量复杂度( 8-5_12 任务域: tbb::task_arena 任务域:指定使用 4 个线程 嵌套 for 循环 嵌套 for 循环:死锁问题 死锁问题的原因 • 因为 TBB 用了工作窃取法来分配任务: 当一个线程 t1 做完自己队列里全部的工 作时,会从另一个工作中线程 t2 的队列 里取出任务,以免 t1 闲置浪费时间。 • 因此内部 for 循环有可能“窃取”到另一个 外部 for :创建另一个任务域,这样不同域之间就不会窃取工作 解决 3 :同一个任务域,但用 isolate 隔离,禁止其内部的工作被窃取 (推荐) 第 5 章:任务分配 https://link.springer.com/chapter/10.1007%2F978-1-4842-4398-5_12 并行:如何均匀分配任务到每个线程? • 对于并行计算,通常都是 CPU 有几个核心就开 几个线程,因为我们只要同时执行就行了嘛。 • 比如
    0 码力 | 116 页 | 15.85 MB | 1 年前
    3
  • ppt文档 谈谈MYSQL那点事

    每个线程的排序缓存大小,一般按照内存可 以设置为 2M 以上,推荐是 16M ,该选项对 排序 order by , group by 起作用 record_buffer 128K 64M 每个进行一个顺序扫描的线程为其扫描的每 张表分配这个大小的一个缓冲区,可以设置 为 2M 以上 table_cache 64 1024 为所有线程打开表的数量。增加该值能增加 mysqld 要求的文件描述符的数量。 MySQL 对每个唯一打开的表需要 少的字段就不用大字段。比如,主键,强烈建议用 int 整型 . 不用 bigint ,为什么 ? 省空间啊。空间是什么 ? 空间就是效率!按 4 个字节和按 32 个字节定位一条记 录,谁快谁慢太明显了。涉及几个表做 join 时, 效果 就更明显了。更小的字段类型占用的内存就更少,占用 的磁盘空间和磁盘 I/O 也会更少,而且还会占用更少的 带宽。因此 . 在日常选择字段时必须要遵守这一规则。
    0 码力 | 38 页 | 2.04 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程

    桌面应用软件就是开启了一个进程。 • 线程是进程中的一个实体,是被系统独立分配和调度的基本单位。也有说,线程是 CPU 可 执行调度的最小单位。也就是说,进程本身并不能获取 CPU 时间,只有它的线程才可以。 • 从属关系:进程 > 线程。一个进程可以拥有多个线程。 • 每个线程共享同样的内存空间,开销比较小。 • 每个进程拥有独立的内存空间,因此开销更大。 • 对于高性能并行计算,更好的是多线程。
    0 码力 | 79 页 | 14.11 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化

    rdx, rbx, rsi, rdi, rsp, rbp, r8, r9, r10, r11, ..., r15 • 其中 r8 到 r15 是 64 位 x86 新增的寄存器,给了汇编程序员更大的空间,降低了编译 器处理寄存器翻车( register spill )的压力。 • 因此 64 位比 32 位机器相比,除了内存突破 4GB 限制外,也有一定性能优势。 8 位, 16 位, 32 编译器优化:举个例子 编译器优化:我毕竟不是万能的 结论:尽量避免代码复杂化,避免使用会造 成 new/delete 的容器。 简单的代码,比什么优化手段都强。 造成 new/delete 的容器:我是说,内存分配在堆上的容器 • 存储在堆上(妨碍优化): • vector, map, set, string, function, any • unique_ptr, shared_ptr, weak_ptr
    0 码力 | 108 页 | 9.47 MB | 1 年前
    3
  • ppt文档 C++高性能并行编程与优化 - 课件 - 13 C++ STL 容器全解之 vector

    container ) C++ 标准库五大件:迭代器( iterator ) C++ 标准库五大件:算法( algorithm ) C++ 标准库五大件:仿函数( functor ) C++ 标准库五大件:分配器( allocator ) 侯捷 STL 侯捷 STL vector 容器 vector 容器:构造函数 • vector 的功能是长度可变的数组,他里面的数据 存储在堆上。 • vector 的目标长度大于原有的容量时, 就需要重新分配一段更大的连续内存,并 把原数组长度的部分移动过去,多出来的 部分则用 0 来填充。这就导致元素的地址 会有所改变,从而过去 data 返回的指针 以及所有的迭代器对象,都会失效。 vector 容器: resize 到更小尺寸不会导致 data 失效 • 当 resize 的目标长度小于原有的容量时, 不需要重新分配一段连续的内存也不会造 成元素的移动(这个设计是为了性能考 ,因此重新扩容到 5 是不需要重 新分配内存的,也就不会移动元素导致指 针失效。 vector 容器: capacity 函数查询实际的最大容量 • 可以用 capacity() 函数查询已经分配内存的大小,即最大容 量。 • 而 size() 返回的其实是已经存储了数据的数组长度。 • 可以发现当 resize 指定的新长度一个超过原来的最大容量时 时,就会重新分配一段更大容量的内存来存储数组,只有这时
    0 码力 | 90 页 | 4.93 MB | 1 年前
    3
共 20 条
  • 1
  • 2
前往
页
相关搜索词
C++高性性能高性能并行编程优化课件100712150806MySQL050413
IT文库
关于我们 文库协议 联系我们 意见反馈 免责声明
本站文档数据由用户上传或本站整理自互联网,不以营利为目的,供所有人免费下载和学习使用。如侵犯您的权益,请联系我们进行删除。
IT文库 ©1024 - 2025 | 站点地图
Powered By MOREDOC AI v3.3.0-beta.70
  • 关注我们的公众号【刻舟求荐】,给您不一样的精彩
    关注我们的公众号【刻舟求荐】,给您不一样的精彩