当前位置: 首页 > news >正文

Leetcode 311 Sparse Matrix Multiplication 稀疏矩阵相乘

Problem

Given two sparse matrices A and B, return the result of AB.

You may assume that A’s column number is equal to B’s row number.

Example:

A = [
  [ 1, 0, 0],
  [-1, 0, 3]
]

B = [
  [ 7, 0, 0 ],
  [ 0, 0, 0 ],
  [ 0, 0, 1 ]
]

     |  1 0 0 |   | 7 0 0 |   |  7 0 0 |
AB = | -1 0 3 | x | 0 0 0 | = | -7 0 3 |
                  | 0 0 1 |

Solution

  • Transform B into defaultdict(dict)
from collections import defaultdict

def multiply(A, B):
    # 预处理矩阵B的非零元素:建立行号到{列号: 值}的映射
    b_nonzero = defaultdict(dict)
    for k in range(len(B)):           # 遍历B的每一行
        for j in range(len(B[0])):    # 遍历该行的每一列
            if B[k][j] != 0:
                b_nonzero[k][j] = B[k][j]
    
    m = len(A)
    n = len(B[0]) if B else 0
    result = [[0] * n for _ in range(m)]
    
    for i in range(m):
        for k in range(len(A[i])):
            a_val = A[i][k]
            if a_val != 0:
                if k in b_nonzero:
                    for j, b_val in b_nonzero[k].items():
                        result[i][j] += a_val * b_val
    
    return result


A = [
  [ 1, 0, 0],
  [-1, 0, 3]
]
B = [
  [ 7, 0, 0 ],
  [ 0, 0, 0 ],
  [ 0, 0, 1 ]
]
print(multiply(A,B))

GPU Solution,来自DeepSeek的总结

根据2025年最新研究进展,GPU处理稀疏矩阵乘法(SpMM/SparseGEMM)的主流算子可分为以下四个技术方向,均已在工业界和学术界得到广泛应用:

一、基于压缩格式的专用算子

  1. CSR(Compressed Sparse Row)格式优化型
    以NVIDIA cuSPARSE库的csrmm2为基础,通过合并行缓存(CRC)和共享内存优化,实现非零元素的连续访问。典型代表如GE-SpMM算子,通过将稀疏数据加载到共享内存,消除全局内存的随机访问开销,在GNN场景中相比cuSPARSE提升1.41倍性能。

  2. 块压缩混合型
    DeepSeek提出的DeepGEMM支持MoE稀疏结构,采用即时编译(JIT)和Hopper TMA技术,在FP8精度下实现1350+ TFLOPS的算力,尤其擅长处理分组或掩码式稀疏乘法。该算子通过将稀疏块与密集块分离计算,在小矩阵场景加速比达2.7倍。

二、异构协同计算架构

  1. CPU-GPU联合计算型
    apspgemm框架通过自适应面板分割和NUMA感知调度,将大规模稀疏矩阵分解为规则面板分配给CPU和GPU协同计算。采用异步流水线技术重叠数据传输与计算,在十亿级边规模的社交网络图中实现7.21倍性能提升。其核心创新在于亲和度规则驱动的负载均衡算法。

  2. 量化稀疏混合型
    清华团队KTransformers框架集成Marlin量化算子和llamafile稀疏算子,通过计算强度分析动态分配任务:将高计算强度MLA算子放在GPU,低强度稀疏路由放在CPU。这种异构划分使4090单卡可运行671B参数模型,推理速度达286 tokens/s。

三、硬件指令级优化

  1. 原子操作增强型
    SpGEMM-Upper算法通过两阶段内存预分配策略,结合GPU原子操作实现行压缩并行化。在代数多重网格(AMG)计算中,相比传统方法减少38%的全局内存访问,压缩阶段采用Warp级协同写入优化。

  2. 稀疏脉动阵列型
    密歇根大学改造TPU架构提出Sparse-TPU,支持矩阵分块压缩和条件执行。通过跳过全零块的计算,在Hopper架构上实现稀疏矩阵16倍加速,能耗降低4-19倍。其核心是扩展了传统脉动阵列对稀疏数据的适应性。

四、算法-硬件协同设计

  1. 哈夫曼调度型
    MIT与NVIDIA联合提出的SpArch架构,通过哈夫曼编码动态调度非零块的计算顺序,结合行预取器实现输入复用。实验显示该方案将部分积矩阵数量减少58%,DRAM访问量降低2.8倍。

  2. 即时编译优化型
    DeepGEMM的JIT编译器能根据稀疏模式自动生成最优内核代码,仅需300行核心逻辑即可超越专家手工调优性能。该技术特别适用于动态稀疏模式(如MoE模型中的专家路由)。


性能对比与选型建议

算子类型适用场景峰值性能代表方案
CSR格式优化中小规模规则稀疏200-400 GFLOPSGE-SpMM
异构协同计算十亿级超大规模稀疏5.6 TFLOPSapspgemm
量化稀疏混合千亿参数MoE模型推理286 tokens/sKTransformers
硬件指令级优化科学计算/AMG求解器16x加速比Sparse-TPU

当前工业界主流选择是结合量化稀疏混合型与异构协同计算,如DeepSeek-R1和GPT-4o等大模型均采用类似KTransformers的架构。学术界则更关注基于新型压缩格式和硬件指令的深度优化,如apspgemm框架已被集成到AMGX数学库中。

相关文章:

  • [特殊字符] LeetCode 1123. 最深叶节点的最近公共祖先 | DFS后序遍历题解
  • C# System.Text.Json 中 JsonConverter 使用详解
  • 智能指针【C++】
  • Android Compose入门和基本使用
  • 基于SSM的购物商城系统
  • Linux的: /proc/sys/net/ipv6/conf/ 笔记250405
  • 嵌入式学习笔记——大小端及跳转到绝对地址
  • labelme json 标签转yolo txt【记录】
  • 在Spring Boot中实现图片上传和修改
  • STM32看门狗原理与应用详解:独立看门狗 vs 窗口看门狗(上) | 零基础入门STM32第九十四步
  • 设计模式:为什么使用模板设计模式(不相同的步骤进行抽取,使用不同的子类实现)减少重复代码,让代码更好维护。
  • C++语言的网络编程
  • 第一章:服务架构演进史_《凤凰架构:构建可靠的大型分布式系统》_Notes
  • 英文单词记忆系统:基于PyQt5与DeepSeek大模型的智能学习工具
  • UDP学习笔记(四)UDP 为什么大小不能超过 64KB?
  • 高级:性能优化面试题深度剖析
  • Node.js局部生效的中间件
  • pyTorch框架-迁移学习-实现四种天气图片多分类问题
  • 【Windows批处理】命令入门详解
  • Rust 2024介绍 | 开发环境搭建详细教程(rust 1.85.0)
  • 价格列表 wordpress/seo怎么推广
  • 在线视频制作网站/如何自己创建网站
  • 做3个网站需要多大的服务器/网上怎么免费推广
  • 个人网站建设与实现毕业设计/品牌推广宣传词
  • 网站开发者工具/手机营销软件
  • 徐汇做网站公司/广州线下培训机构停课