高性能计算的内存模型研究

如何加速矩阵乘法 矩阵的内存格式矩阵A中第i行第j列可以表示为A[i][j]。但是在系统底层的内存中,只有连续的存储空间,编译器会将高级语言的二维数组的访存转换为对一维内存的访问。将二维坐标映射成一维坐标有很多方法,直接的有两种行主序(row-majororder)和列主序(column-majororder)。简单地说,对于前面提到的A[i][j]元素,如果映射为一维数组,既可以用行主序的方式,如果一行的内存元素有lda个,则A[i][j]对应于A[i+j*lda]。的做法。利用寄存器减少访存次数。... 阅读详情

本文首先将建立一个简单的高性能计算内存模型,随后以矩阵乘为例,探讨分块矩阵乘法是如何在内存访问上对整个的矩阵乘计算进行加速的。最后,本文会将该内存模型与Roofline Model结合并进行一个简单的讨论。

1. 基础:一个简单的高性能计算内存模型

本文所述的内存模型具有以下特点:

  • 在内存层级方面,只具有两级:fast mem和slow mem;

  • 对于slow mem,其读写操作的时间相同,对于fast mem,其读写操作的时间可以忽略;

  • 在算法运行开始,所有的数据都在slow mem中;

在以上内存模型的基础上,给定以下参数:

  • m:需要在slow mem和fast mem之间搬运的数据量;

  • tm:从slow mem搬运一次数据(读或写)的时间;

  • f:需要进行的算数运算数量(例如在推理引擎中即为算子的计算量);

  • tf:进行一次算数运算的时间(可认为远小于tm);

基于以上模型,我们可以认为对于任意算法,其执行时间应由两部分组成,即内存搬运时间以及实际的计算时间:

在以上公式中,我们定义 CI=f/m ,其描述了每从slow mem中搬运一次数据能够进行的计算的数量,并将其称为计算密度。则以上公式可最终修改为:

2. 矩阵乘算法分析

在本章中,我们会以上述内存模型作为基础,对矩阵乘 C=C+A∗B 进行分析。同时为了简化计算,设置输入输出矩阵均为长度为n的方阵。根据计算量公式,以上矩阵乘的计算量f可以很容易得到,为2n^3。

最朴素的矩阵乘

在我们实现矩阵乘时,最为朴素的方式是三层循环,其伪代码以及访存分析如下:

for i = 1 to n
  {read row i of A into fast memory}        total n^2 to read
  for j = 1 to n
    {read C[i,j] into fast memory}          total n^2 to read
    {read column j of B into fast memory}   total n^3 to read
    for k = 1 to n
      C[i,j] = C[i,j] + A[i,k] * B[k,j]
    {write C[i,j] back to slow memory}      total n^2 to write

由以上分析,可以得到上述算法的计算密度:

可以看到,在最朴素的矩阵乘中,其计算密度仅为2。

分块矩阵乘

分块矩阵乘是加速矩阵乘算法的常用手段。这里为了简化分析,我们只对矩阵乘进行一次分块,并设置分块数为N,则其分块大小b为 n/N ,如下图所示:

1cc6b35a605c5049ae82aeeed1b9c8fa.png

在以上背景下,分块矩阵乘的伪代码以及访存分析如下:

for i = 1 to N
  for j = 1 to N
    {read block C(i,j) into fast memory}        total N^2 * b^2 = n ^ 2 to read
    for k = 1 to N
      {read block A(i,k) into fast memory}      total N^3 * b^2 = N * n^2 to read
      {read block B(k,j) into fast memory}      total N^3 * b^2 = N * n^2 to read
      C(i,j) = C(i,j) + A(i,k) * B(k,j)  {do a matrix multiply on blocks}
    {write block C(i,j) back to slow memory}    total N^2 * b^2 = n ^ 2 to write

在以上分块策略下,我们可以获得该算法的计算密度:

可以看到,计算密度由之前的2提升到了分块矩阵的大小b。假设fast mem的大小为M,则为了获得最佳性能,我们需要保证在分块矩阵进行计算时,其数据都能够驻留在fast mem中,在最理想情况(即不考虑临时变量以及代码段等占用fast mem)下,分块矩阵的尺寸b最大可为sqrt(M/3),即计算密度 CI=O(sqrt(M))。

以上结论也符合我们的基本认知,即cache size越大,我们对矩阵分块时的分块大小就可以设置的越大,其相应的计算密度也会越大,整个矩阵乘所需的计算时间就会减小了。

3. 结合Roofline Model进行讨论

如果读者接触过Roofline Model,可能早已发现我们定义的计算密度CI就是Roofline Model的横轴。在上面的矩阵乘示例中,我们通过使用分块矩阵乘,提高了计算密度,对应于Roofline Model,算法的横坐标向右移动,在相同带宽下也就提高了算法的计算速度。

还是以CPU上的矩阵乘法为例,我们在实际的GEMM编写时,会使用多种手段以减少CPU从主存中搬运数据的次数以及数量,包括但不限于数据对齐、对权重矩阵进行重排、调整循环顺序、合理设计分块大小以使内部计算数据均驻留在L2 cache中、适当插入软件Prefetch指令、使用向量指令读写等。可见要从内存的角度提高算法的计算密度并使其接近算法的理论极限,还是相当复杂的。

最后,本文的内容基本上来自课程cs267,如果您对本文讨论的内容感兴趣,可以搜索该课程进行更加深入的学习,也欢迎大家在评论区进行交流。


3b6853d914ddc154b03fa05272ed8e53.png

CUDA编程 - 使用cuda进行矩阵乘法的加速方法 - 学习记录 🐖:CUDA有规定,一个block中可以分配的 thread 的数量最大是 1024 个线程。如果大于 1024 会显示配置错误。假设是 A(4x8) * B(8x4) = C(4x4) 阅读详情

相关推荐

23、并行计算与高性能计算

本文全面介绍了并行计算与高性能计算(HPC)的基本概念、核心技术和实际应用。内容涵盖并行计算的分类、算法设计、编程模型(如MPI和OpenMP)、性能优化策略以及GPU/FPGA等加速技术。同时,结合科学计算、工程仿真和大数据分析等领域的具体案例,并行计算的实际价值得到了深入剖析。文章还探讨了并行计算面临的挑战及未来发展方向,为读者提供了一个系统性的学习与参考指南。

x2y3z4a5b的博客 125

GPU是如何加速矩阵乘法的?

矩阵乘法是一个常见的计算密集型任务,特别适合于 GPU(图形处理单元)并行计算。GPU 通过执行成千上万的小型、简单的操作(如浮点运算),可以显著加速矩阵乘法等并行任务。矩阵乘法在 GPU 的执行步骤下面是矩阵乘法在 GPU 上并行优化的一个概述,以及一个简单示例的执行步骤。1、分割任务GPU 并行计算的关键是将大型计算任务分割成许多小的任务,这些小任务可以同时在多个处理核心上执行。对于矩阵乘法,...

weixin_49393016的博客 1808

强度仿真-主题061-结构优化中的高性能计算与并行算法

高性能计算(High Performance Computing, HPC)是指利用超级计算机或计算机集群来解决复杂计算问题的技术。在结构优化领域,HPC使我们能够:结构优化面临的主要计算挑战包括:计算复杂度问题:内存需求:I/O瓶颈:并行计算的核心思想是将大问题分解为多个小问题,同时在多个处理器上执行:阿姆达尔定律(Amdahl’s Law): 其中:古斯塔夫森定律(Gustafson’s Law): 其中α为串行部分比例。Python提供了丰富的高性能计算工具: 2. 并行计算基础 2.1 并行计算模

kkchenjj的博客 87

程序性能优化探讨(6)——矩阵乘法优化之分块矩阵

有一种性格叫做偏执,有一种矩阵优化运算叫做分块。实话说,也许我这辈子也用不上这种随牛B但很复杂的算法,有些版本的教材直接删除这个内容。但越是这样我越想不过,因此借写这篇博客,把分块矩阵乘法彻底分析清楚。          把矩阵乘法进行分块优化,很奇妙的算法,假设我们要做11X11矩阵乘法,AXB = C原本是这样算的:         比如我们要计算C1.2,就要把上图的

u013471946的专栏 2万+

14、Vivado HLS在大数据与高性能计算加速中的应用

本文探讨了使用Vivado HLS在FPGA上实现硬件加速器,以提升大数据和高性能计算领域的性能表现。重点分析了内存数据库加速和科学计算中的多分辨率分析两个应用场景。实验表明,基于FPGA的硬件加速器相较于传统软件方法,能够实现显著的性能提升,例如在内存数据库加速中达到15-140倍的加速比,在多网格算法求解中也展现出更低的延迟和更高的吞吐量。同时,数据流式处理的优势也得到了充分展现,使得加速器能够高效地处理大规模数据。

night的博客 59

win10自动修复-无限循环【通用完美】超简单解决办法

2020.02.14今个我的笔记本电脑(Thinkpad Carbon 7 X1)(win10)早晨起来发现蓝屏,上面显示自动修复失败,重启后依然自动修复失败,不断手动重启,始终是修复失败。然后上网开始搜集资料找解决办法。 前边介绍关闭自动修复,如何找出错文件的方法;如果想看最终解决办法,直接看第三部分 上网就会发现这种现象很常见,同时是电脑自动安装系统更新,或者安装某些驱动出现。解决办法也大...

y15941300574的博客 19万+

【1】计算机原理-内存模型

内存模型

记录生命的轨迹 972

Kali实战:LAMPSecurity CTF5靶场渗透全流程(附详细漏洞利用步骤)

本文详细解析了Kali Linux在LAMPSecurity CTF5靶场渗透中的全流程,包括靶场环境搭建、Web应用漏洞挖掘、横向移动与权限提升等关键步骤。通过实战案例演示了如何利用NanoCMS漏洞获取系统权限,并提供了详细的防御措施与加固建议,帮助安全人员提升渗透测试技能。

weixin_29230901的博客 211

C++20多线程优化与高性能计算的架构创新研究

利用C++协程(`std::coroutine`)或用户级线程框架(如boost::fiber)实现无中断的流水线任务执行。- 无锁架构:原子操作(`std::atomic`)与内存屏障(`memory_order`)减少锁竞争;- 细粒度控制:通过`std::thread`和`std::future`实现线程生命周期管理;- 基于`std::atomic_flag`或`Compare-And-Swap`实现无锁队列;- 通过`std::thread`局部静态变量与数据分区,减少跨线程缓存冲突;

fhQCKMly的博客 299

Dynamics CRM证书更换

  Dynamics CRM产品一般有两种认证方式。第一种是基于声明的内部访问也就是无证书单纯用账号密码验证。第二种就是联合身份认证,需要安装网站证书。   对于联合身份认证的情况因为需要安装证书,而且证书是有一个一年的有效期,所以运维人员每年都需要进行证书更换的操作。以下就是更换证书的方法及过程。 证书根据申请方式一般也分两种,第一种是自建证书,这种证书是没有机构认证的所以安装上之后网站因为没...

bzpfly的博客 877

美团mtgsig 3.1.0算法还原:从加密入口到d1生成的完整链路拆解

本文详细拆解了美团mtgsig 3.1.0签名算法的完整逆向过程。通过定位加密入口函数eH,理清a6、a5、a8到d1的生成依赖链,并运用插桩技术,在JSVMP混淆环境下逐步还原了核心参数的生成逻辑,为逆向工程实践提供了清晰的纯算还原方法论。

oo7890的博客 777

【高性能计算】Ⅰ

@TOC 总章节:并行编程 计算模型 GPU编程 分布式计算框架 1、概念性问题 为什么需要高性能计算? 什么是高性能计算? 为什么需要并行计算? 什么是并行计算? 高性能计算与并行计算、分布式计算及云计算的联系和区别? 1.1为什么需要高性能计算 除了科学计算之外还在其他领域有计算需求: 商业、医药、工程、人工智能(数据挖掘、深度学习) 例如:天气预报、动漫与影视创作、商业高性能计算(决策支持、风险监测、数据挖掘、供应链优化) 渲染农场:分布式并行集群计算系统 三种提高性能的方法:努力工作、工作得更有效率

RuRu_Bai的博客 3320

基于FPGA的 SelectIO IP核 的仿真验证-----( LVDS差分高速传输)

SelectIO IP核 的仿真验证

qq_43618170的博客 1万+

C语言的“文艺复兴“:在AI与高性能计算中的逆袭

当某些语言追逐"生产力"而牺牲性能边界时,C语言始终坚守着计算机科学的本质——对硬件的极致掌控与算法的最优实现。在AI模型参数突破百万亿、超算算力逼近百亿亿次的今天,C语言正在证明:真正的革命不在语法糖的增减,而在对计算本质的深刻理解。这场静默的文艺复兴,或许不是对过去的简单回归,而是计算文明螺旋上升的新起点。

weixin_65409651的博客 1688

LLM 大模型学习必知必会系列(十一):大模型自动评估理论和实战以及大模型评估框架详解

LLM 大模型学习必知必会系列(十一):大模型自动评估理论和实战以及大模型评估框架详解

丨汀、的博客 3216

【WRF教程第3.5期】预处理系统 WPS 详解:以4.5版本为例

预处理系统 WPS 详解:以4.5版本为例

WW、forever的博客 1422

北航CUDA编程专业课课件:开启高性能计算新篇章

北航CUDA编程专业课课件:开启高性能计算新篇章 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当今高性能计算领域,GPU的强大计算能力已成为加速科学研究与工程应用的关键。北航CUDA编程专业课课件,为您提供了一套全面、系统的CUDA编程教学资源,助您深入理解和掌握CUDA技术,提升程序运行效率。 项目技术分析 CUDA简介与基本概念 CUDA(Compute Un...

gitblog_06730的博客 337

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

perseverance51博客 4235

高性能计算架构演进:从SMP到MPP,如何选择适合的并行计算方案

并行计算是现代计算机科学的核心概念,它通过将计算任务分解到多个处理单元同时执行,以提升系统整体性能。其基本原理包括任务分解、数据分配和结果合并,关键技术涉及共享内存与分布式内存两种模型。在工程实践中,并行计算的价值在于能够有效解决海量数据处理、科学模拟和实时分析等大规模计算问题,广泛应用于天气预报、基因测序、人工智能训练和金融风险分析等场景。本文聚焦于SMP、COW、PVP和MPP这四种经典的高性能计算架构,深入剖析它们的设计思想、适用场景和性能特点,帮助开发者在面对系统架构选型时,能够基于计算密集型任务的

wangqiaowqo的专栏 614

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

为什么说高性能计算工程师越老越吃香?还难以被AI替代?

然而AIGC来了,好像宣布AI会取代所有人一样,如经验丰富的律师、医生、教师等等,尤其是贡献了AIGC最多代码和数据的程序员,尤其遭殃,成了被裁员最凶的职业。现在答案已经呼之欲出,正因为高性能计算学习有一定的门槛,称之为“具备科学家思维的工程师”也不过分,横跨多个行业,且不是码农,更注重团队协作,所以一定是经验更丰富的高性能计算工程师更受欢迎,会越老越吃香,难以被AI替代。这些竞赛提供了实践和竞争的机会,可以与同学或团队合作,解决实际的高性能计算问题,并在竞赛中展示自己的能力。

YDM6211的博客 1027

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C++高性能计算优化策略与实践

高性能计算(HPC)是解决复杂科学计算和工程问题的关键技术,而C++凭借其零成本抽象和直接内存控制能力成为该领域的首选语言。理解编译器优化、内存访问模式和SIMD向量化等底层原理,对于开发高效计算程序至关重要。通过合理配置编译器选项如-O3优化级别和使用特定指令如#pragma omp simd,可以显著提升数值计算性能。在实际应用中,这些技术特别适用于科学计算、金融建模和游戏开发等场景,其中矩阵运算和粒子系统等典型HPC任务通过缓存优化和并行计算能获得数量级的性能提升。现代C++特性如constexpr编

weixin_30231327的博客 236

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

CUDA与高性能计算开发资源全指南:从工具链到性能优化实战

在高性能计算领域,GPU加速已成为提升计算效率的核心技术。其原理在于利用GPU的众核架构进行大规模并行计算,通过CUDA等编程模型将计算任务映射到数千个线程上并发执行。这项技术的核心价值在于显著提升科学计算、人工智能训练、物理仿真等数据密集型应用的吞吐量。在实际工程中,开发者需要掌握完整的工具链,包括Nsight性能分析工具用于定位瓶颈,以及cuBLAS、NCCL等优化库来避免重复造轮子。针对CUDA编程,深入理解线程与内存层次结构是优化的基础,例如通过共享内存减少全局访问延迟,利用流并发实现计算与通信重叠

weixin_33742618的博客 383

高性能计算架构解析:SMP、COW、PVP、MPP的核心差异与应用场景

本文深入解析了高性能计算(HPC)中四种核心架构:SMP、COW、PVP和MPP的核心差异与应用场景。SMP采用共享内存模式,适合数据库等紧密耦合应用;COW集群性价比高,易于扩展,适合科研与互联网场景;PVP为向量计算而设计,追求极致性能;MPP则通过高速互联实现超大规模并行。文章结合实战经验,为不同预算和需求的项目提供了清晰的技术选型指南。

weixin_29214199的博客 565

HPC高性能计算课程(乔治亚理工)

HPC高性能计算

weixin_42849849的博客 621

探索高性能计算的新纪元:《CUDA并行程序设计:GPU编程指南》

探索高性能计算的新纪元:《CUDA并行程序设计:GPU编程指南》 【下载地址】CUDA并行程序设计GPU编程指南shanecook中文版全522页高清完整版分享 本资源是一份珍贵的编程资料,专注于NVIDIA CUDA技术的深度学习和应用开发——《CUDA并行程序设计:GPU编程指南》。这本书由shanecook编译的中...

gitblog_06633的博客 1079

量子计算与高性能计算融合:架构、技术与应用

量子计算作为突破经典计算极限的新范式,其核心在于利用量子比特的叠加态和纠缠态实现并行计算。这种特性使得量子算法在特定问题上(如因数分解、量子化学模拟)能实现指数级加速。高性能计算(HPC)与量子计算的融合,形成了混合计算架构,其中经典计算机处理通用任务,量子计算机专注加速核心模块。这种混合模式在量子化学、组合优化和量子机器学习等场景展现出巨大潜力。当前技术挑战包括量子比特的噪声敏感性和算法局限性,但通过变分量子算法(如VQE)和混合编程模型(如CUDA Quantum)等创新,正逐步推动实用化进程。

weixin_30386713的博客 427
上一篇: 实时性能评估框架nn-Meter解读
下一篇: DietCode:TVM中新的动态Shape解决方案
Linux基金会AI&Data基金会
博客等级 码龄6年 100粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux基金会AI&Data基金会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值