与显卡进行通信的汇编指令是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
dududupapapa
V2EX    程序员

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

  •  
  • &nsp; dududupapapa 2023-09-24 11:28:59 +08:00 3056 次点击
    这是一个创建于 817 天前的主题,其中的信息可能已经有所发展或是发生改变。
    学习汇编的时候看到,与南桥设备通信的指令是 IN/OUT ,与内存通信的指令是 MOV ,但是没有找到与显卡进行 pcie 通信的汇编指令,所以感到很疑惑
    17 条回复    2023-09-27 11:33:40 +08:00
    churchmice
        1
    churchmice  
       2023-09-24 11:48:55 +08:00 via Android   1
    因为你之前学的是错的
    dududupapapa
        2
    dududupapapa  
    OP
       2023-09-24 11:51:59 +08:00
    @churchmice 对的是啥
    leonshaw
        3
    leonshaw  
       2023-09-24 12:00:57 +08:00 via Android   1
    看看 MMIO 和 DMA
    e9pWeUbh9PGCnp95
        4
    e9pWeUbh9PGCnp95  
       2023-09-24 12:38:20 +08:00   3
    就是把 pcie 的 bar 空间映射到统一的地址空间里面, 实际的操作就和读写内存一样
    fangjue
        5
    fangjue  
       2023-09-24 16:48:31 +08:00   2
    IN/OUT 、MOV 甚至中断都会用到,比如在 Windows 设备管理器中找到你的显卡,看看属性中资源标签页,里面会详细列出你的显卡用到的 I/O 端口、内存地址范围和中断编号。
    TESTFLIGHT2021
        6
    TESTFLIGHT2021  
       2023-09-24 20:04:57 +08:00   1
    MMIO 和 DMA
    显卡自己有 DMA 控制器 你也可也用 CPU 的 DMA
    dududupapapa
        7
    dududupapapa  
    OP
       2023-09-24 20:10:20 +08:00
    @leonshaw 看了一下,然后我就不太理解 cpu 上的 PCI x16 通信引脚有啥作用了。。。毕竟都直接通过内存控制了
    dududupapapa
        8
    dududupapapa  
    OP
       2023-09-24 20:21:20 +08:00
    @TESTFLIGHT2021 cpu 现在都集成了 pcie 控制器,这个控制器实现了 pcie 协议,是不是这个控制器里也就包含了固件。然后汇编指令不能够直接让 cpu 通过 PCI x16 通讯引脚发送数据,而是只能通过 MIMO 或者 DMA 机制,让 PCI x16 通讯引脚发送数据。是这样吗
    TESTFLIGHT2021
        9
    TESTFLIGHT2021  
       2023-09-24 20:26:37 +08:00
    @dududupapapa 你不需要关注底层 显卡的地址空间已经映射到了 CPU 寻址空间里
    TESTFLIGHT2021
        10
    TESTFLIGHT2021  
       2023-09-24 20:27:37 +08:00
    一般是 memory map 不是 IO 操作
    dududupapapa
        11
    dududupapapa  
    OP
       2023-09-24 20:34:48 +08:00
    @TESTFLIGHT2021 因为查了一下 cpu 的引脚描述,发现既有内存数据引脚,又有 PCI x16 通信引脚,搞不清与显卡的通信到底是通过内存数据引脚,还是 PCI x16 通信引脚,毕竟汇编语言里没有直接向 PCI x16 通信引脚发送数据的指令,就很在意就是了。我只想要知道一个大概的通信逻辑就满足了
    TESTFLIGHT2021
        12
    TESTFLIGHT2021  
       2023-09-24 20:39:03 +08:00
    @dududupapapa 那不是你需要了解的。。
    RobertYang
        13
    RobertYang  
       2023-09-25 14:36:26 +08:00   1
    @dududupapapa 先去了解下 PCIe 总线知识,PCIe 是个复杂的串行总线,现代设备都是直接把 PCIe EP 设备的内存地址直接映射到 CPU 的特定 MEM 区域,CPU 使用正常的访存指令访问对应的地址就能被 PCIe 控制器捕获并且从 PCIe 总线送出。IO 指令只是 X86 访问特殊地址空的方式,PCIe 同时支持 MEM 和 IO 两种访问方式,IO 指令也不是单独给 PCI 设备用的,只是 IO 和 MEM 访问不同的地址域罢了。
    AirCrusher
        14
    AirCrusher  
       2023-09-25 14:36:31 +08:00   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
       2023-09-25 16:44:02 +08:00
    @RobertYang 谢谢谢谢。。。之前就是这里没想明白,原来是控制器捕获然后送出
    RobertYang
        16
    RobertYang  
       2023-09-27 11:28:11 +08:00   1
    @dududupapapa SOC 上的内存地址分配你都可以理解成,CPU 送出的地址到一个 interconnect 结构上,按照对应的地址 map 分发到设置好的控制器总线上。PCIe 也不例外,PCIe 控制器在简化的角度来看可以看成一个转换桥,把 CPU 内部总线的数据包跟 PCIe 总线的数据包互相转化罢了。
    RobertYang
        17
    RobertYang  
       2023-09-27 11:33:40 +08:00   1
    @RobertYang 所以这里是两步,第一步是 CPU 的 Write 指令在总线形成一个数据包送到 interconnect 上,interconnect 通过地址对应关系,将这个数据包送到 PCIe 控制器上(outbound 方向),PCIe 控制器将这个包转换成 PCIe 总线的数据送出,显卡收到这个数据包。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2206 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 00:28 PVG 08:28 LAX 16:28 JFK 19:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86