通过PCI总线,CPU可以访问GPU的BIOS、状态/控制寄存器和显存。受限于PCI资源长度,CPU可以直接访问的显存范围也受到限制,那些不能直接访问的范围只能通过DMA方式间接访问。随着显存容量逐渐增大,CPU不能直接访问的显存范围也越来越多。
MMIO
MMIO是CPU直接访问GPU的方式:CPU往显存写后命令,GPU再以lockstep方式执行(lockstep方式:采用大量相同硬件部件同时处理相同的指令);CPU等待GPU指令完成后,再次往显存写入新的命令。这就是CPU和GPU之间的同步通信,常常用于不考虑性能的场景。
DMA
在显卡驱动中,DMA常常用于两种用途:
- 数据传输。例如,CPU直接通知GPU,以DMA方式直接从内存中获取计算所需的纹理数据。
- 命令FIFO。CPU和GPU在系统主存共享一段命令FIFO缓冲,CPU通过对命令FIFO填写命令,GPU会自动以DMA方式获取缓冲中的命令。
中断
GPU通常以中断方式通知CPU
- 命令完成
- 显示的垂直留白同步发生
- GPU错误
一般说来,显卡的中断处理程序执行时间要控制在毫秒级。