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

2023-09-24 11:28:59 +08:00
 dududupapapa
学习汇编的时候看到,与南桥设备通信的指令是 IN/OUT ,与内存通信的指令是 MOV ,但是没有找到与显卡进行 pcie 通信的汇编指令,所以感到很疑惑
2532 次点击
所在节点    程序员
17 条回复
churchmice
2023-09-24 11:48:55 +08:00
因为你之前学的是错的
dududupapapa
2023-09-24 11:51:59 +08:00
@churchmice 对的是啥
leonshaw
2023-09-24 12:00:57 +08:00
看看 MMIO 和 DMA
e9pWeUbh9PGCnp95
2023-09-24 12:38:20 +08:00
就是把 pcie 的 bar 空间映射到统一的地址空间里面, 实际的操作就和读写内存一样
fangjue
2023-09-24 16:48:31 +08:00
IN/OUT 、MOV 甚至中断都会用到,比如在 Windows 设备管理器中找到你的显卡,看看属性中资源标签页,里面会详细列出你的显卡用到的 I/O 端口、内存地址范围和中断编号。
TESTFLIGHT2021
2023-09-24 20:04:57 +08:00
MMIO 和 DMA
显卡自己有 DMA 控制器 你也可也用 CPU 的 DMA
dududupapapa
2023-09-24 20:10:20 +08:00
@leonshaw 看了一下,然后我就不太理解 cpu 上的 PCI x16 通信引脚有啥作用了。。。毕竟都直接通过内存控制了
dududupapapa
2023-09-24 20:21:20 +08:00
@TESTFLIGHT2021 cpu 现在都集成了 pcie 控制器,这个控制器实现了 pcie 协议,是不是这个控制器里也就包含了固件。然后汇编指令不能够直接让 cpu 通过 PCI x16 通讯引脚发送数据,而是只能通过 MIMO 或者 DMA 机制,让 PCI x16 通讯引脚发送数据。是这样吗
TESTFLIGHT2021
2023-09-24 20:26:37 +08:00
@dududupapapa 你不需要关注底层 显卡的地址空间已经映射到了 CPU 寻址空间里
TESTFLIGHT2021
2023-09-24 20:27:37 +08:00
一般是 memory map 不是 IO 操作
dududupapapa
2023-09-24 20:34:48 +08:00
@TESTFLIGHT2021 因为查了一下 cpu 的引脚描述,发现既有内存数据引脚,又有 PCI x16 通信引脚,搞不清与显卡的通信到底是通过内存数据引脚,还是 PCI x16 通信引脚,毕竟汇编语言里没有直接向 PCI x16 通信引脚发送数据的指令,就很在意就是了。我只想要知道一个大概的通信逻辑就满足了
TESTFLIGHT2021
2023-09-24 20:39:03 +08:00
@dududupapapa 那不是你需要了解的。。
RobertYang
2023-09-25 14:36:26 +08:00
@dududupapapa 先去了解下 PCIe 总线知识,PCIe 是个复杂的串行总线,现代设备都是直接把 PCIe EP 设备的内存地址直接映射到 CPU 的特定 MEM 区域,CPU 使用正常的访存指令访问对应的地址就能被 PCIe 控制器捕获并且从 PCIe 总线送出。IO 指令只是 X86 访问特殊地址空间的方式,PCIe 同时支持 MEM 和 IO 两种访问方式,IO 指令也不是单独给 PCI 设备用的,只是 IO 和 MEM 访问不同的地址域罢了。
AirCrusher
2023-09-25 14:36:31 +08:00
@dududupapapa 参考文章的第四部分
Exploring AMD GPU Scheduling Details by Experimenting With
“Worst Practices”, https://www.cs.unc.edu/~otternes/papers/rtns2021.pdf
dududupapapa
2023-09-25 16:44:02 +08:00
@RobertYang 谢谢谢谢。。。之前就是这里没想明白,原来是控制器捕获然后送出
RobertYang
2023-09-27 11:28:11 +08:00
@dududupapapa SOC 上的内存地址分配你都可以理解成,CPU 送出的地址到一个 interconnect 结构上,按照对应的地址 map 分发到设置好的控制器总线上。PCIe 也不例外,PCIe 控制器在简化的角度来看可以看成一个转换桥,把 CPU 内部总线的数据包跟 PCIe 总线的数据包互相转化罢了。
RobertYang
2023-09-27 11:33:40 +08:00
@RobertYang 所以这里是两步,第一步是 CPU 的 Write 指令在总线形成一个数据包送到 interconnect 上,interconnect 通过地址对应关系,将这个数据包送到 PCIe 控制器上(outbound 方向),PCIe 控制器将这个包转换成 PCIe 总线的数据送出,显卡收到这个数据包。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/976633

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX