本发明属于软件设计领域,涉及一种面向GPU实现的虚拟IO ringbuffer的方法。
背景技术:
ringbuffer是GPU设计中图形命令传输的重要组成部分,负责主机的GPU之间的命令交互,主机和GPU交互一般由主机接口完成,公开的资料中ringbuffer设计都是直接IO操作,直接IO操作导致ringbuffer数据存储时要进行频繁IO操作,性能低且会导致主机接口操作频繁切换降低主机接口带宽利用率。
技术实现要素:
发明目的:
为了解决现有技术中的问题,本发明提供一种面向GPU实现的虚拟IO ringbuffer的方法,数据存储时频繁的IO操作,提高ringbuffer数据存储速率和主机接口带宽利用率。
技术方案:
本发明的技术方案是:
一种面向GPU实现的虚拟IO ringbuffer的方法,包括:
步骤1、ringbuffer接口(1)初始化ringbuffer虚拟IO控制(2)和ringbuffer IO控制(3)所包含的所有信息;所述所有信息包括:ringbuffer IO控制(3)的读指针、写指针、ringbuffer大小、数据传输启动控制;ringbuffer虚拟IO控制(2)的空闲空间首地址和空闲空间大小;所述ringbuffer虚拟IO控制(2)的空闲空间首地址是指ringbuffer IO控制(3)中ringbuffer的空闲空间首地址;所述ringbuffer虚拟IO控制(2)的空闲空间大小是指ringbuffer IO控制(3)中ringbuffer的空闲空间大小;
步骤2、当有数据需要存储到ringbuffer上时,首先判断ringbuffer虚拟IO控制(2)中记载的ringbuffer的空闲空间大小是否能够存储当前数据,若可以则直接将待存储数据写入ringbuffer的空闲空间首地址开始的连续空间内,数据存储完成后更新ringbuffer IO控制(3)中的写指针信息;若不可以则ringbuffer虚拟IO控制(2)向ringbuffer IO控制(3)发起同步操作,更新ringbuffer虚拟IO控制(2)信息,重新进行数据存储操作;
步骤3、当收到数据传输启动命令时,发送ringbuffer IO控制(3)中ringbuffer上存储的数据信息,发送完成后更新ringbuffer IO控制(3)中的读指针信息;当ringbuffer中的数据存储满空间时,主动发起数据传输操作,发送完成后更新ringbuffer IO控制(3)中的读指针信息。
ringbuffer IO控制(3)中:
读指针:表示当前ringbuffer数据搬移到的地址或地址标记;
写指针:表示当前ringbuffer数据存储的地址或者地址标记;
ringbuffer大小:ringbuffer空间总大小;
数据传输启动:用于控制ringbuffer中当前存储数据的传输,可被动启动数据传输操作,也可主动启动数据传输操作。
有益效果:
本发明的优点是:本发明提供了一种面向GPU实现的虚拟IO ringbuffer的方法,通过建立虚拟IO操作方式,减少ringbuffer软硬件同步次数,尤其是在ringbuffer频繁的IO操作时,大幅提高ringbuffer数据存储速率和主机接口带宽利用率。
附图说明
图1为一种面向GPU实现的虚拟IO ringbuffer的方法示意图。
具体实施方式
下面结合附图和实施例对本发明做进一步的说明:
一种面向GPU实现的虚拟IO ringbuffer的方法,如图1所示,包括:
步骤1、ringbuffer接口(1)初始化ringbuffer虚拟IO控制(2)和ringbuffer IO控制(3)所包含的所有信息;所述所有信息包括:ringbuffer IO控制(3)的读指针、写指针、ringbuffer大小、数据传输启动控制;ringbuffer虚拟IO控制(2)的空闲空间首地址和空闲空间大小;所述ringbuffer虚拟IO控制(2)的空闲空间首地址是指ringbuffer IO控制(3)中ringbuffer的空闲空间首地址;所述ringbuffer虚拟IO控制(2)的空闲空间大小是指ringbuffer IO控制(3)中ringbuffer的空闲空间大小;
步骤2、当有数据需要存储到ringbuffer上时,首先判断ringbuffer虚拟IO控制(2)中记载的ringbuffer的空闲空间大小是否能够存储当前数据,若可以则直接将待存储数据写入ringbuffer的空闲空间首地址开始的连续空间内,数据存储完成后更新ringbuffer IO控制(3)中的写指针信息;若不可以则ringbuffer虚拟IO控制(2)向ringbuffer IO控制(3)发起同步操作,更新ringbuffer虚拟IO控制(2)信息,重新进行数据存储操作;
步骤3、当收到数据传输启动命令时,发送ringbuffer IO控制(3)中ringbuffer上存储的数据信息,发送完成后更新ringbuffer IO控制(3)中的读指针信息;当ringbuffer中的数据存储满空间时,主动发起数据传输操作,发送完成后更新ringbuffer IO控制(3)中的读指针信息。
ringbuffer IO控制(3)中:
读指针:表示当前ringbuffer数据搬移到的地址或地址标记;
写指针:表示当前ringbuffer数据存储的地址或者地址标记;
ringbuffer大小:ringbuffer空间总大小;
数据传输启动:用于控制ringbuffer中当前存储数据的传输,可被动启动数据传输操作,也可主动启动数据传输操作。