2.Event queue
每个record都有一个类型,相同类型的record会被链在一起,然后通过一个event queue来管理。驱动里共维护了30个这样的event queue,正好和GPU的event指令表示的范围相吻合。如下图:
[attach]269[/attach]
五、Command queue执行流程分析
1.command queue初始化
初始化很简单,就是在command queue中添加了wait/link指令。wait指令的作用是让GPU空闲n个周期,link指令指向的是command queue中wait指令的地址,这样就形成了一个“闭环”,GPU就不会跑飞了,如下图所示:
[attach]261[/attach]
2.在context buffer中添加link指令
context buffer中的link指令指向command buffer首地址。如下图
[attach]262[/attach]
3.再次添加wait/link指令
[attach]263[/attach]
4.在command buffer中添加link指令
command buffer中的link指向command queue中的wait指令地址,如下图所示:
5.将command queue中此时第一个wait指令改成link指令
command queue中改完后的link指令指向context buffer首地址,从此刻开始,GPU就跳转到context buffer中运行了。如下图:
6.在command queue中添加event指令
8.将此时command queue中的第一个wait指令改成link指令
command queue中改完后的link指向command queue中的event指令地址,如下图所示: