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

048、从MemRef到LLVM的最终降级路径

048、从MemRef到LLVM的最终降级路径

昨晚调试一个MLIR生成的向量化代码,跑在RISC-V开发板上,发现内存访问总是错位。GDB进去一看,MemRef的offset计算完全不对——明明是个二维数组的连续内存,结果每次load都跳到奇怪的位置。折腾到凌晨两点,最后发现是MemRef降级到LLVM时,strides和sizes的映射顺序搞反了。这个坑,今天必须写清楚。

MemRef在MLIR中的真实面目

很多人把MemRef当成“带形状的指针”,这个理解在高层优化阶段勉强能用,但到了降级阶段会害死人。MemRef本质上是一个结构化描述符,它包含的不只是数据指针,还有一组描述内存布局的元数据。

看一个典型的MemRef类型:memref<2x3xf32>。在MLIR内部,它被表示为一个包含以下字段的结构体:

  • allocatedPtr:分配内存的起始地址(用于deallocation)
  • alignedPtr:对齐后的数据起始地址(实际访问用这个)
  • offset:相对于alignedPtr的偏移量(通常为0,但动态形状时会变)
  • sizes:每个维度的长度
  • strides:每个维度在内存中的步长(以元素为单位)

这里踩过坑:很多人以为strides就是siz

http://www.jsqmd.com/news/1069980/

相关文章:

  • 汽车LIN SBC集成设计:ATA663232/55芯片选型、硬件与调试全解析
  • 用 LLM-as-judge 给 Agent 答案自动打分
  • Microchip嵌入式开发资源全攻略:从数据手册到社区支持的高效导航
  • Origin 2025 下载Origin2025安装教程——科学绘图与数据分析入门
  • 企业云盘选型避坑指南:5个中小团队最容易踩的文档管理误区
  • text2sql 怎么把表结构喂给模型
  • 广州做小程序的公司有哪些,哪家更靠谱?
  • ATtiny1634 EEPROM编程与时钟配置实战:嵌入式低功耗设计核心
  • DeepSeek 出来的内容如何去除 # 和 ** 符号?用 DS随心转整理成 Word 更省事
  • Meilisearch:一个为搜索速度而生的开源引擎
  • 自动采集数据集指南
  • 主表 + 扩展表设计模式
  • 制造业质量大迁徙:LIMS如何走出实验室,奔向供应链与全生命周期
  • 基于Microchip ATA8520评估套件的SIGFOX物联网节点开发实战指南
  • 2026年GEO信源媒体发稿平台全盘点:三种模式、代表玩家与适用场景
  • 【2026】FreeOK官网入口,一键直达在线观看
  • 基于ATA6663/ATA6664的LIN收发器开发板实战指南:从硬件连接到软件调试
  • ATtiny1634端口复用实战:ADC、PWM与中断的协同配置
  • ATxmega B1模拟比较器实战:配置、调试与PCB设计避坑指南
  • 蓝牙双模模块开发实战:从AT指令到SPP/BLE数据透传
  • 【昇腾/AscendC开发】直调模式 VS 算子框架模式? Ascend C 开发模式与入口点选择指南
  • 灯箱制作公司怎么选?内行人揭秘关键考量因素
  • ClockStudio图表进阶:双Y轴与高级工具实战指南
  • 从稳压到基准:CD47温度补偿齐纳基准源原理、选型与实战指南
  • 3C塑料件全尺寸检测方案横评
  • 高带宽闭环控制抗振秘籍
  • ATtiny1634 AVR汇编编程实战:从指令集到混合编程
  • Microchip ATA840x UHF发射器应用指南:从芯片选型到天线设计实战
  • XMEGA A3BU嵌入式开发实战:低功耗、高精度ADC与时钟系统深度优化
  • 卵巢早衰备孕还有机会吗