发明名称 一种在龙芯计算平台上实现独立显卡显存分配的方法
摘要 本发明提供一种在龙芯计算平台上实现独立显卡显存分配的方法,采用TTM显存管理方法解决了显存访问控制问题。步骤一:基于TTM算法设计面向TTM算法的数据结构定义,创建buffer object数据结构及其基类,实现数据的替换与CPU的映射;步骤二:设计隔离机制实现数据同步,通过对创建的缓冲区fence以实现对缓冲区加锁,进而实现对数据的同步,实现同一时刻多进程或多处理器核对同一缓冲区对象空间的访问:步骤三:采用基于龙芯3B处理器芯片二级cache锁机制的内核调用方法,通过在操作系统内核中增加两个系统调用sys_scache_lock和sys_scacheunlock,实现对龙芯芯片内二级缓存进行加锁,提高DMA对显存数据的快速存取和读写,结合步骤二的数据同步,实现显卡显存数据访问控制。
申请公布号 CN104572509A 申请公布日期 2015.04.29
申请号 CN201410830800.6 申请日期 2014.12.26
申请人 中国电子科技集团公司第十五研究所 发明人 张超;屈涛;梁瑛
分类号 G06F12/12(2006.01)I 主分类号 G06F12/12(2006.01)I
代理机构 北京理工大学专利中心 11120 代理人 仇蕾安;高燕燕
主权项 一种在龙芯计算平台上实现独立显卡显存分配的方法,其特征在于,包括以下步骤:步骤一:基于TTM算法设计面向TTM算法的数据结构定义,创建buffer object数据结构及其基类,实现数据的替换与CPU的映射;步骤二:设计隔离机制实现数据同步,通过对创建的缓冲区fence以实现对缓冲区加锁,进而实现对数据的同步,实现同一时刻多进程或多处理器核对同一缓冲区对象空间的访问:2.1定义fence及其对象的数据结构,每当创建一个缓冲区对象时,TTM会生成一个对应的fence,当其他的进程想要访问这个缓冲区对象时,首先申请fence,如果不成功则将此进程放入等待队列,当fence被释放时,触发fence完成中断,并去等待队列中寻找优先级最高的进程,唤醒进程,执行相应操作;2.2当应用程序调用步骤一所述的buffer object时,首先查看fence中的count值;若其大于0则将对count实行减1操作,同时对缓冲区对象进行相应操作,操作完毕后将对count值实行加1操作,调用needed_flush函数查看哪些信号需要被触发,其中needed_flush函数为通知哪些类型的信号在被调用的时候会被触发的函数;之后调用flush函数,其中flush函数为触发位域中对应的信号类型的函数,并且通过needed_flush函数的结果来管理位域的各个位;若count值小于或者等于0,则将此应用程序放入等待队列中;然后调用wait函数,wait函数用于判断当前进程或子进程是否结束,其返回值为非零值时说明驱动会覆盖TTM的wait函数,返回0表明wait函数返回正常,如果wait函数返回值非0,则调用驱动的wait函数,然后继续等待;当应用程序在等待队列的首位时,等待信号的到来,如果信号发生,进行和上面的程序同样的操作;如果等待时间超过fence的生存周期,则触发lockup函数,lockup函数为返回向量或数组中的数值函数,判断是GPU的lockup还是其他,如果是GPU,重启GPU,继续等待;如果不是,增加生存周期,继续等待;步骤三:采用基于龙芯3B处理器芯片二级cache锁机制的内核调用方法,通过在操作系统内核中增加两个系统调用sys_scache_lock和sys_scacheunlock,实现对龙芯芯片内二级缓存进行加锁,提高DMA对显存数据的快速存取和读写,结合步骤二的数据同步,实现显卡显存数据访问控制。
地址 100083 北京市海淀区北四环中路211号
您可能感兴趣的专利