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

外设数据到昇腾310推理卡 之五 3403ATU

目录

存储器事务地址空间

ATU 两个方向

outbond

inbond

3403 outbond示例

ATU_REGION_CTRL2

寄存器相关位说明

inbound方向的默认配置

310i pro inbound方向的默认配置

外设到推理卡

总结


存储器事务地址空间

地址空间类型大小起始地址结束地址说明
存储器事务地址空间256M0x0300000000x03FFFFFFF在此空间内的读写操作将在 PCIe 链路上转换为PCIe 协议所定义的存储器读写事务(需地址转换功能配合,地址转换功能请参考地地址转换单元ATU(Address Translation Unit ))。
扩展存储器事务地址空间4G0x3 0000 00000x3 FFFF FFFF支持大地址空间扩展为PCIe 存储器事务地址空间。 在此空间内的读写操作将在 PCIe 链路上转换为PCIe 协议所定义的存储器读写事务(需地址转换功能配合,地址转换功能请参考地址转换单元ATU(Address Translation Unit ))。

ATU 两个方向

 

outbond

即3403 作为事务的发起方。从CPU 地址空间 流转到PCIE地址空间的过程

inbond

即3403 作为事务的接收方。从PCIE地址空间流转到CPU 地址空间 的过程

 

3403 outbond示例

3403 DMA作为主,发起请求事务,从飞腾CPU内存读取数据。

*   1) 采用映射表项2
*   2) 3403侧的地址为0x30000000,即3403对此地址段访问就可以访问到对端内存
*   3) RC侧的基地址为 0x22_0000_0000
*   4)3403侧限制了共享内存的大小,即为256Mstruct dev_addr atu_addr;atu_addr.phy_addr = 0x103D0000;atu_addr.virt_addr = 0;atu_addr.reg_len = 0x1000;if (NULL == ioremap_system_mem(&atu_addr))return -1;write_reg(atu_addr.virt_addr, 0x900, 2); //采用映射表2,支持8个映射表write_reg(atu_addr.virt_addr, 0x90c, 0x30000000); //映射的源地址,即3403侧的地址write_reg(atu_addr.virt_addr, 0x914, 0x3fffffff);  //映射地址的空间大小,总共256M#if 0 //固定内存地址write_reg(atu_addr.virt_addr, 0x918, 0);write_reg(atu_addr.virt_addr, 0x91c, 0x22);
#elsewrite_reg(atu_addr.virt_addr, 0x918, g_buffer_base);  //映射到的目的地址,write_reg(atu_addr.virt_addr, 0x91c, g_buffer_base >> 32); //映射到的目的地址的高位
#endifprintf("buffer base addr:0x%llx\n", g_buffer_base);write_reg(atu_addr.virt_addr, 0x904, 0);write_reg(atu_addr.virt_addr, 0x908, 0x80000000); //使能此区域

 1) 采用映射表2

  2) 设置3403侧的源地址

  3) 设置PCIE侧的目的地地址。

  4) 使能此region。当3403访问0x3000 0000~0x3fff ffff之间的区域时,通过ATU 翻译到中间地址空间的目的地址,而飞腾端不需要配置ATU或者说pcie地址空间与飞腾CPU地址空间是一一对应的,即可以访问到飞腾CPU设备。

    

ATU_REGION_CTRL2

通过这一组寄存器,可以实现对发送方向和接收方向的各 8 个地址转换区的配置

寄存器相关位说明

1)  匹配模式。地址匹配 or bar 匹配模式。

在上述的outbond例程中,我们采用了地址匹配模式。

在后续的inbound使用中,我们采用BAR 匹配模式。

 

 2) bar的编号

 

inbound方向的默认配置

[root@localhost ~]# lspci -vv -s b:0.0
0b:00.0 Multimedia controller: Hunan Goke Microelectronics Co., Ltd Device 0928 (rev 02)Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-Latency: 0Interrupt: pin A routed to IRQ 255NUMA node: 0Region 0: Memory at 800 65800000 (32-bit, non-prefetchable) [size=8M]Region 1: Memory at 800 66200000 (32-bit, non-prefetchable) [size=64K]Region 2: Memory at 800 66000000 (32-bit, non-prefetchable) [size=1M]Region 3: Memory at 800 66100000 (32-bit, non-prefetchable) [size=1M]Region 4: Memory at 800 66210000 (32-bit, non-prefetchable) [size=64K]Region 5: Memory at 800 66220000 (32-bit, non-prefetchable) [size=4K]

310i pro inbound方向的默认配置

Region 0: Memory at 58000000 (64-bit, non-prefetchable) [size=8M]
Region 2: Memory at 1020000000 (64-bit, prefetchable) [size=128M]
Region 4: Memory at 1000000000 (64-bit, prefetchable) [size=512M]

 是否和3403非常像。

外设到推理卡

  此时我们需要3403侧配置为inbound,采用bar4 映射到3403 或者310i pro 的某段内存。

  通过类似outbond的简单配置,就可以实现如下红色线部分RC都512M内存的读写。

   而FPGA通过绿色线访问512M内存,则需要走P2P流程。

 

总结

   虽然我们无从知晓AI卡的详细设计,但通过分析3403的实现及AI卡的外部信息,可以窥测内部实现是一脉相承的。

    通过对外的编程接口文档《CANN社区版 8.1.RC1.alpha001 AscendCL应用软件开发指南(C&C++) 01.pdf》说明: 

  也可以知晓上述的实现是完全可行。

  310i pro此region 4的实现大概率是滑动的,毕竟region大小只有4G,而模块内存为24G或者48G

 

  英伟达在这方面已经做的比较完善,详细可以参考: (81 封私信) 【研究综述】浅谈GPU通信和PCIe P2P DMA - 知乎

http://www.dtcms.com/a/313266.html

相关文章:

  • 【分析学】Hilbert 空间
  • python脚本-ATE测试数据stdf文件自动处理之概率分布图、直方图、数据分布图
  • 说说对泛型的理解?
  • 数据资产——解读2025 数据提供合同(示范文本)【附全文阅读】
  • linux扩展磁盘容量到home下
  • Python篇---import
  • 线段树学习笔记 - 区间最值操作
  • 实战案例:容器数据卷四部曲(三)目录数据卷
  • DDR SDRAM中的DQS与DQ信号
  • 【网络安全】日志文件格式
  • 数据结构——单向链表
  • Kali基础知识点【1】
  • Pytorch-04 搭建神经网络架构工作流
  • TikTokShop-美国本土跨境-达人邀约_影刀RPA源码解读
  • 8.1.3 TiDB集群方案雨Replication原理
  • 关于逻辑回归的相关知识大全
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘scikit-learn’问题
  • 【AI】持久化聊天记忆(隔离对话)
  • ELECTRICAL靶机攻略
  • Linux驱动学习(四)字符设备
  • PyTorch生成式人工智能(24)——使用PyTorch构建Transformer模型
  • HBK公司核心产品和业务简析
  • 架构——异地多活成熟的架构模式
  • useSelector useDispatch
  • 高级开发 | 零人工干预的 @Value 实时刷新
  • 直流无刷电机(一)
  • ElementUI之使用以及表单验证
  • lumerical——锥形波导偏振转换
  • 第九章:了解特殊场景下的redis
  • 解决dify前端页面中公式显示的问题