NUMA-Aware Graph-Structured Analytics
NUMA-Aware Graph-Structured Analyticsppopp15TL;DR:numa-aware通过优化图数据放置和访问策略来减少随机和远程内存访问
本文基于两个见解:
随机或者交织分配图数据都会显著损害数据局部性和并行
顺序的节点间内存访问相比随机的节点内节点间访问都有更高的带宽基于这两个见解,Polymer的设计为
有区分的放置拓扑数据、应用定义的数据和可变运行时状态来最小远程访问
通过在NUMA节点间进行轻量级的复制来将随机远程访问转化为顺序远程访问除此之外,进一步构建了分层屏障来提高并行和局部性、针对倾斜图使用面向边的平衡分区、根据活动顶点比例的自适应数据结构。
background下面的图描述了ligra push和pull访问的数据及访问模式以边为中心的系统X-stream顺序的迭代边而不是点来避免对边的随机访问,引入了额外的洗牌阶段和“平铺策略”来改善对顶点的随机访问
Challenges and IssuesIssue 1: Data Layoutlinux默认使用first touch策略来将虚拟页绑定到物理页。图分析分为图的构建和计算两个 ...
GPU Graph Processing on CXL-Based Microsecond-Latency External Memory
START
Basic
# GPU Graph Processing on CXL-Based Microsecond-Latency External Memory
TL;DR:评估使用CXL拓展GPU图形处理负载的性能,当CXL外存延迟小到某个特定值,GPU图处理性能就跟在DRAM上一样
GPU图处理对外存延迟比较宽容,能够容忍几微秒的延迟
基于FPGA的flash设备证明毫秒级别的延迟性能跟DRAM类似,证明小地址对齐的重要性
基于FPGA的memory设备验证了只要延迟小于几个微秒,其性能就和DRAM一样
相比于CPU,GPU是延迟容忍的,因为有更多的并行计算资源,但是其受限于PCIe带宽,sota的方法EMOGI和BaM都实现了接近峰值的带宽
ANALYSIS𝑡=𝐷/𝑇D是需要读取的数据,T是读取速度,理想情况下D应当等于E边数,T应当接近带宽。然而由于读放大(read amplification factor, or RAF)的存在D/E是大于1的,细粒度的读取有助于减少读取的数据,提高性能。论文对T进行了详细的建模d是平均每次 ...
Latency-Tolerant Software Distributed Shared Memory
START
Basic
# Latency-Tolerant Software Distributed Shared Memory
TL;DR:DSM系统分布式共享内存,使集群表现得单机NUMA一样,使用任务委托来利用局部性,使用任务切换来隐藏延迟
## introduction
传统的DSM致力于拓展单机并行计算思想到集群,但是只有局部性好、共享数据有限、粗粒度同步的应用才会适合这种系统。
相比于利用局部性,Grappa依赖于并行来保持处理器忙碌来隐藏通信延迟
grappa使用IB互联,主要包含三个组件
全局地址空间
轻量级的用户级任务
聚合通信层
design
distributed shared memory:每个核心可以访问自己的内存,访问远程数据的操作通过delegate操作(函数)运行在拥有数据的核心上,包括简单的读写和同步操作(fetch-and-add)tasking system:轻量级的多线程和全局的工作窃取。通过多线程调度实现并发,长延迟操作会自动暂停,当操作完成时再开始。communication layer:将小的数据聚合成大的,基于active m ...
Fabric-Centric Computing
START
Basic
# Fabric-Centric Computing
hot'OS23
TL;DR:FCC:结构中心的计算,将内存结构视为系统中一等公民,用于在可组合基础设施上实例化、编排和回收计算。
与通信结构相比,memory fabric内存结构提供load/store语义、有限的缓存一致性,将FAM集成到主机处理器的层次结构中
FCC组件
Fabric Host Adapter (FHA)
Fabric Switch (FS)
Fabric Endpoint Adapter (FEA)
Fabric Attached Memory (FAM) and Fabric Attached Accelerators (FAA)
differences of memory fabric
同步执行:与通信结构(RDMA)的异步交互相比,内存结构的load/store是透明生成并同步处理的(同步和异步的优化方式不同了)
灵活的内存节点:包括 NUMA CC-NUMA NonCC-NUMA COMA(通过在内存中动态迁移和复制缓存对象来减少平均缓存缺失延迟 ...
SDM: Sharing-Enabled Disaggregated Memory System with Cache Coherent Compute Express Link
STARTBasic
SDM: Sharing-Enabled Disaggregated Memory System with Cache Coherent Compute Express LinkTL;DR:基于CXL的共享内存池,解决CXL缓存一致性成本高,拓展资源管理原语,保证用户透明
分离式内存用于拓容和高效的利用内存,然而其在高性能和用户透明这两方面做的不够好。虽然有硬件缓存一致性协议,但只是简单的使用会带来不可忽视的性能开销
SDM:不需修改用户程序启用共享,启用资源管理和预测内存访问
introduction分离式内存当前的挑战:
remote access overhead
user transoarency基于网络的访问有软件层的多重数据副本,即使是RDMA也对基于队列对的事务进行额外的复制操作 。地址转换开销也是重要因素。用户透明性:RDMA需要使用抽象动词来修改程序
前人的工作减少数据副本或者使用页置换来实现用户透明,但没有考虑分布式多节点缓存一致性的情况,CXL使用硬件确保缓存一致性,是解决上面问题的关键。
CXL的挑战:
2.0不支持多host缓存一致 ...
disaggregated memory
disaggregated memorySTARTBasic
Memory disaggregation: why now and what are the challenges过往比较成功的分离式内存的特点:解决紧迫的问题 技术上是可行的
为什么分离式内存是紧迫的问题:
首先,随着大数据转移到内存以便在内存数据库、数据分析、流分析和机器学习等各种系统和应用程序中进行更快的处理,对内存的需求正在激增。其次,由于内存 DIMM 密度和可连接到处理器的 DIMM 数量的物理限制,单个服务器的内存容量受到限制。第三,随着时间的推移,应用程序需要更多内存,但由于服务器 [1] 严格的内存填充规则,升级内存非常具有挑战性 - 例如,所有内存控制器应具有相同数量和大小的 DIMM,并且所有内存通道都应具有相同的容量。不遵守这些规则会导致内存带宽变差。第四,由于智能汽车、5G 手机、游戏机和数据中心等新用例的激增,内存成本不断增加。与此同时,供应仍然受到仅有三个存储器公司(三星、SK 海力士、美光)的寡头垄断的限制。因此,内存在系统成本中占据主导地位。事实上,云运营商报告称,内存占服务器成本的 50 ...
博客系统升级
博客系统升级挑战与问题:当前博客拓展性太差,许多功能没有实现审美疲劳,有些单调
目标:寻找一套拓展性解决方案,支持未来的功能拓展:新框架or hexo主题再探索解决当前想实现的功能
用户访问记录追踪
完善about、归档等界面
实现RSS
更换主题,提高文章中代码可读性等
博文自动发布(配合obsidian)
实现
修改主题为butterfly,默认支持特性多,可拓展
通过cloudfare进行用户访问记录分析
添加了about,tag、categories、link、about等页面,内容有待完善
RSS实现
代码可读性且复制性提高
自动发布流程: 创建文章自动创建front matter publish属性为true就复制文件到博客目录下 运行脚本部署推送
使用obsidian的linter插件来创建front matterfront matter格式
123456789---title:date:updated:tags:categories:coverpublished---
关于监听published属性要么外部脚本监听,要么obsidian内监听 ...
论文研究方向
论文研究方向基准测试:搭了一套真实系统进行性能测试
DirectCXLGouk D, Lee S, Kwon M, et al. Direct access,{High-Performance} memory disaggregation with {DirectCXL}[C]//2022 USENIX Annual Technical Conference (USENIX ATC 22). 2022: 287-294.
在最先进的实验平台探索CXL的性能表征,并为程序员提供了一些指南Sun Y, Yuan Y, Yu Z, et al. Demystifying CXL Memory with Genuine CXL-Ready Systems and Devices[J]. arXiv preprint arXiv:2303.15375, 2023.
异构计算Cabrera, A.M., A.R. Young, and J.S. Vetter. “Design and Analysis of CXL Performance Models for Tightly- ...
effective modern c++
条款一:类型推导1.参数类型是指针或引用,但不是万能引用
忽略掉指针和引用符号,对类型进行对应,如果形参无const,根据实参有没有const决定推导类型有没有const,如果形参有const,无论实参有没有const推导类型都有const
2.参数类型是万能引用
万能引用即右值引用T&&,如果实参是左值,则被推导成左值引用,注意即使实参不是引用也会被推到成左值引用,如果是右值,则为右值,是不是引用取决于实参。 保留const
3.参数类型既不是指针也不是引用
按值传递,直接推导类型,忽略const和volatile和引用。
数组的推导:由于数组和指针的混淆性,若不加引用号的话,数组会被推导成指针,若加了引用号,则会被推导成数组,并且可以获取数组大小,利用这一特性可以在编译期获取数组大小。
条款二:autoauto的类型推导和函数参数的类型推导同理
但是当auto声明的变量是大括号括起时,推导类型属于initializer_list<T>,特别注意只有auto能推导出大括号括起的初始化表达式,这也是auto和参数推导的唯一区别。
c++14支持auto推导 ...
性能优化技巧总结
0.前言本文是我的性能优化经验的一点总结,主要是通过各种优化竞赛积累下的经验,有些方法也适用于工程中。写这篇文章本意是作为自己的备忘录,如果能够给初学者朋友们一点帮助那就更好了。
本文应该会持续更新,我会把学到的优化方法和技巧都记录下来。
1.使用工具分析程序,找到热点优化的前提是抓住重点,找到程序热点。
工欲善其事,必先利其器
vtune:intel平台的话vtune已经十分好用了
gperftools:谷歌的性能优化工具集
perf:linux内核性能分析工具
nsight compute\system:cuda性能分析
返璞归真,手动插桩
2.预处理(减少重复计算)首先应当仔细阅读代码,理清代码结构,尽可能的通过预处理等手段减少不必要的计算,比如将循环中多次计算提前一次性算出等。这一步是很有必要的,因为大多数情况下程序的baseline都有许多重复计算,同时这一步也是后续优化的基础。
3.优化算法,降低时间复杂度优化计算密集型程序最有效的方法就是降低时间复杂度了,当然这一步是相当困难的,但有些算法或者算法的某个部分是可以降低时间复杂度的。针对算法的优化虽然困难,但是成效通 ...