V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dududupapapa
V2EX  ›  程序员

与显卡进行通信的汇编指令是什么?

  •  
  •   dududupapapa · 216 天前 · 2233 次点击
    这是一个创建于 216 天前的主题,其中的信息可能已经有所发展或是发生改变。
    学习汇编的时候看到,与南桥设备通信的指令是 IN/OUT ,与内存通信的指令是 MOV ,但是没有找到与显卡进行 pcie 通信的汇编指令,所以感到很疑惑
    17 条回复    2023-09-27 11:33:40 +08:00
    churchmice
        1
    churchmice  
       216 天前 via Android   ❤️ 1
    因为你之前学的是错的
    dududupapapa
        2
    dududupapapa  
    OP
       216 天前
    @churchmice 对的是啥
    leonshaw
        3
    leonshaw  
       216 天前 via Android   ❤️ 1
    看看 MMIO 和 DMA
    unintialized
        4
    unintialized  
       216 天前   ❤️ 3
    就是把 pcie 的 bar 空间映射到统一的地址空间里面, 实际的操作就和读写内存一样
    fangjue
        5
    fangjue  
       215 天前   ❤️ 2
    IN/OUT 、MOV 甚至中断都会用到,比如在 Windows 设备管理器中找到你的显卡,看看属性中资源标签页,里面会详细列出你的显卡用到的 I/O 端口、内存地址范围和中断编号。
    TESTFLIGHT2021
        6
    TESTFLIGHT2021  
       215 天前   ❤️ 1
    MMIO 和 DMA
    显卡自己有 DMA 控制器 你也可也用 CPU 的 DMA
    dududupapapa
        7
    dududupapapa  
    OP
       215 天前
    @leonshaw 看了一下,然后我就不太理解 cpu 上的 PCI x16 通信引脚有啥作用了。。。毕竟都直接通过内存控制了
    dududupapapa
        8
    dududupapapa  
    OP
       215 天前
    @TESTFLIGHT2021 cpu 现在都集成了 pcie 控制器,这个控制器实现了 pcie 协议,是不是这个控制器里也就包含了固件。然后汇编指令不能够直接让 cpu 通过 PCI x16 通讯引脚发送数据,而是只能通过 MIMO 或者 DMA 机制,让 PCI x16 通讯引脚发送数据。是这样吗
    TESTFLIGHT2021
        9
    TESTFLIGHT2021  
       215 天前
    @dududupapapa 你不需要关注底层 显卡的地址空间已经映射到了 CPU 寻址空间里
    TESTFLIGHT2021
        10
    TESTFLIGHT2021  
       215 天前
    一般是 memory map 不是 IO 操作
    dududupapapa
        11
    dududupapapa  
    OP
       215 天前
    @TESTFLIGHT2021 因为查了一下 cpu 的引脚描述,发现既有内存数据引脚,又有 PCI x16 通信引脚,搞不清与显卡的通信到底是通过内存数据引脚,还是 PCI x16 通信引脚,毕竟汇编语言里没有直接向 PCI x16 通信引脚发送数据的指令,就很在意就是了。我只想要知道一个大概的通信逻辑就满足了
    TESTFLIGHT2021
        12
    TESTFLIGHT2021  
       215 天前
    @dududupapapa 那不是你需要了解的。。
    RobertYang
        13
    RobertYang  
       214 天前   ❤️ 1
    @dududupapapa 先去了解下 PCIe 总线知识,PCIe 是个复杂的串行总线,现代设备都是直接把 PCIe EP 设备的内存地址直接映射到 CPU 的特定 MEM 区域,CPU 使用正常的访存指令访问对应的地址就能被 PCIe 控制器捕获并且从 PCIe 总线送出。IO 指令只是 X86 访问特殊地址空间的方式,PCIe 同时支持 MEM 和 IO 两种访问方式,IO 指令也不是单独给 PCI 设备用的,只是 IO 和 MEM 访问不同的地址域罢了。
    AirCrusher
        14
    AirCrusher  
       214 天前   ❤️ 1
    @dududupapapa 参考文章的第四部分
    Exploring AMD GPU Scheduling Details by Experimenting With
    “Worst Practices”, https://www.cs.unc.edu/~otternes/papers/rtns2021.pdf
    dududupapapa
        15
    dududupapapa  
    OP
       214 天前
    @RobertYang 谢谢谢谢。。。之前就是这里没想明白,原来是控制器捕获然后送出
    RobertYang
        16
    RobertYang  
       213 天前   ❤️ 1
    @dududupapapa SOC 上的内存地址分配你都可以理解成,CPU 送出的地址到一个 interconnect 结构上,按照对应的地址 map 分发到设置好的控制器总线上。PCIe 也不例外,PCIe 控制器在简化的角度来看可以看成一个转换桥,把 CPU 内部总线的数据包跟 PCIe 总线的数据包互相转化罢了。
    RobertYang
        17
    RobertYang  
       213 天前   ❤️ 1
    @RobertYang 所以这里是两步,第一步是 CPU 的 Write 指令在总线形成一个数据包送到 interconnect 上,interconnect 通过地址对应关系,将这个数据包送到 PCIe 控制器上(outbound 方向),PCIe 控制器将这个包转换成 PCIe 总线的数据送出,显卡收到这个数据包。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2837 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:30 · PVG 14:30 · LAX 23:30 · JFK 02:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.