矩阵计算性能优化-初探

背景

矩阵计算无论是在高性能计算还是深度学习中,都是比较常用的操作,常规的矩阵相乘包括大量的浮点数计算或者乘加运算,是典型的计算密集型算子。矩阵运算的性能直接展示了程序员设计的矩阵算法对CPU的利用能力。

FLOPS和FLOPs

  • FLOPS 意指每秒浮点运算次数。用来衡量硬件的性能
  • FLOPs 是浮点运算次数,可以用来衡量算法/模型复杂度

在性能优化的过程中,我们首先需要获取当前硬件的FLOPS,再通过FLOPs / cost_time 获取当前算法每秒的浮点运算次数,通过比较两者之间的差距,衡量自己对CPU的利用能力。

那么,同样是计算,为什么利用能力会有差距呢? 现代计算机系统使用多级缓存来减少处理器与主存之间的数据传输延迟。矩阵计算算法设计主要考虑如何使用更好的数据访问模式以减少cache miss。 在硬件水平相同,不考虑并行处理与分布式计算带来的通信开销的情况下,降低cache miss,可以显著提高性能。

矩阵计算常规实现

以下是一个矩阵计算的常规实现

C++ 复制代码
void naive_gemm(const float* A, const float* B, float* C, const int M, const int N, const int K) { 
    for (int m = 0; m < M; ++m) {  // 循环1
        for (int n = 0; n < N; ++n) {  // 循环2
            for (int k = 0; k < K; ++k) {  // 循环3
                C[m * N + n] += A[m * K + k] * B[k * N + n];
            }
        } 
    } 
}

为了方便后面讲述,这里为每个循环添加了标记

我们可以看到,每次循环都会获取不同列的值,在矩阵本身按行存储的同时,相当于每次获取同一列的不同数据时,都要读取。这会大大增加cache miss的频率。

矩阵计算优化1

C++ 复制代码
void naive_gemm(const float* A, const float* B, float* C, const int M, const int N, const int K) { 
    for (int m = 0; m < M; ++m) {  // 循环1
        for (int k = 0; k < K; ++k) {  // 循环3
            for (int n = 0; n < N; ++n) {  // 循环2
                C[m * N + n] += A[m * K + k] * B[k * N + n];
            }
        } 
    } 
}

通过对循环进行重排我们发现,

每次循环从获取B的每列不同值变成了每行不同值,这就让我们可以通过一次读取矩阵一行的数据写入cache这个行为可以获得收益,而不是每次循环都会造成cache miss。通过这种方式可以大大增加矩阵计算的性能。

相关推荐
山东点狮信息科技有限公司5 小时前
企业级开源OA系统推荐
vue.js·spring boot·性能优化·系统架构·开源
吾AI科技9 小时前
基于Tez引擎的 Hive SQL 性能优化
大数据·hive·性能优化·tez
爱喝水的鱼丶1 天前
SAP-ABAP:ALV数据导出增强——实现Excel/PDF/CSV多格式自定义导出
开发语言·性能优化·sap·abap·erp
春卷同学1 天前
HarmonyOS掌上记账APP开发实践第22篇:Scroll + List 虚拟列表 — 长列表性能优化全攻略
性能优化·list·harmonyos
丁小未2 天前
Unity 极致高效的IM设计方案教程
unity·性能优化·游戏引擎·im
SelectDB2 天前
快手从 ClickHouse 到 Apache Doris 的百 PB 数据、200+集群迁移实践
数据库·性能优化·开源
Ashley的成长之路2 天前
前端性能优化实战手册·第1篇:从 Lighthouse 60 到 95 的完整路径
前端·性能优化
不羁的木木3 天前
HarmonyOS APP实战-基于Image Kit的图像处理APP - 第12篇:性能优化与内存管理
图像处理·性能优化·harmonyos
2301_768103493 天前
HarmonyOS趣味相机实战第5篇:CameraKit资源释放、PixelMap生命周期与预览黑屏排查
性能优化·harmonyos·arkts·camerakit·pixelmap
段一凡-华北理工大学3 天前
AI Agent 从入门到封神:24 讲打造你的超级智能体~系列文章23:从Demo到上线:Agent应用的架构设计、性能优化与成本控制实战
运维·网络·人工智能·性能优化·高炉炼铁·工业智能体