一种GPU纹理映射非阻塞存储Cache的建模结构的制作方法

文档序号:11922393阅读:291来源:国知局
一种GPU纹理映射非阻塞存储Cache的建模结构的制作方法与工艺

本发明属于计算机图形领域,尤其涉及一种GPU纹理映射非阻塞率存储Cache(高速缓冲存储器)的SystemC建模结构。



背景技术:

随着图形学的飞速发展,3D图形技术除了在个人计算机、工作站有大量应用外,在移动电话、汽车导航等嵌入式领域也取得长足发展。鉴于3D图形渲染中运算量大、需要处理数以万计的顶点或像素数据,为了能在移动设备实现实时渲染3D图形,就要求图形处理系统具有非常快的处理速度,但是移动设备等的存储容量有效、大量的图元、纹理数据无法全部加载,需要频繁的与外部存储器进行交互,有限的数据带宽和数据处理速度成为嵌入式系统的主要瓶颈。



技术实现要素:

本发明的目的是:

提供一种GPU纹理映射非阻塞率存储Cache的建模结构,采用SystemC语言和Transaction Level Modeling(TLM,事务级建模)方法,对纹理存储Cache访问过程进行周期精确的硬件建模,采用输入请求冲突检测及请求合并划分、多端口、多Bank、非阻塞流水的多进程方式,实现纹理访问请求数据的并行处理,能有效实现纹理访问数据的大规模并行性和高吞吐率的需求。

本发明的解决方案是:

一种GPU纹理映射非阻塞率存储Cache的建模结构,包括:

纹理Cache存储状态与控制单元(1)、缺失信息状态保持寄存器存储单元(MSHR)(2)、多请求合并与冲突检测单元(3)和纹理存储Cache核单元(4);

纹理Cache存储状态与控制寄存器单元(1)为纹理Cache访问缺失信息状态保持寄存器存储单元(2)提供控制与状态信息,包括Cache使能,纹理请求数据过滤模式(filterMode),映射类型(mapType),纹素地址的使能信息;

缺失信息状态保持寄存器存储单元(2),用于保存每个外部纹理映射单元发送的每个纹理请求保存一个MSHR寄存器,其中包括纹理请求的标识validBit,请求的控制标志信息warp_id和quad_id、16个纹素请求地址(u0,u1,……u15,v0,v1,……v15,w0,w1,……w15)、请求纹素返回的结果值(Data0,Data1,……Data15)以及15个小请求处理完成的对应的完成状态(Rdy0,Rdy1……Rdy15)和当前纹理请求完成使能Enable,另外缺失信息状态保持寄存器存储单元(2)从纹理Cache存储状态与控制寄存器单元(1)读取过滤模式(filterMode)填入当前纹理请求的MSHR寄存器中,缺失信息状态保持寄存器存储单元(2)内部进程不断检测当前请求的标识validBit,当该标识validBit有效时,将该纹理请求的16个纹素请求地址(u0,u1,……u15,v0,v1,……v15,w0,w1,……w15)输出给多请求合并与冲突检测单元(3);

多请求合并与冲突检测单元(3),从MSHR里获取有最多16个纹素地址,且设置合并上限m,如果16个纹素地址合并后数目小于等于m个,将16个纹素地址1次输出给纹理存储Cache核单元(4);如果16个纹素地址合并后数目大于m个,将16个纹素地址分为2次输出给纹理存储Cache核单元(4);如果16个纹素地址中至少有2个纹素地址的Bank的索引地址相同,将16个纹素地址分为2次输出给纹理存储Cache核单元(4);

纹理存储Cache核单元(4),用m个端口独立、并行处理来自多请求合并与冲突检测单元(3)的最多m个纹素地址,如果纹素地址的高位部分与纹理存储Cache核单元(4)内部cahe的bank索引地址相同时,则认为该纹素地址命中,然后将纹理地址的低位部分作为偏移地址访问纹理Cache内部DataRam内的16个纹理像素数据,并将纹理像素数据返回给多请求合并与冲突检测单元(3),多请求合并与冲突检测单元(3)在通过与缺失信息状态保持寄存器存储单元(2)之间的接口函数,将16个纹理像素数据填入缺失信息状态保持寄存器存储单元(2)的请求纹素返回的结果值(Data0,Data1,……Data15),并设置16个小请求的状态(Rdy0,Rdy1……Rdy15)和当前纹理请求完成使能Enable均为有效;如果纹素地址高位部分与纹理存储Cache核单元(4)内部cahe的bank索引地址不相同时,则认为该纹素地址缺失,则将当前纹素地址进行线程转换后,再经过纹理压缩与解压缩后访问DDR3显示存储器,并将DDR3显示存储器返回的8*8大小的纹理数据送入纹理Cache进行Block替换,并将更新的纹理像素数据返回给多请求合并与冲突检测单元(3),多请求合并与冲突检测单元(3)在通过与缺失信息状态保持寄存器存储单元(2)之间的接口函数,将16个纹理像素数据填入缺失信息状态保持寄存器存储单元(2)的请求纹素返回的结果值(Data0,Data1,……Data15),并设置16个小请求的状态(Rdy0,Rdy1……Rdy15)和当前纹理请求完成使能Enable均为有效。

本发明的优点是:

本发明采用SystemC语言和Transaction Level Modeling(TLM,事务级建模)结构,对纹理存储Cache访问过程进行周期精确的硬件建模,采用输入请求冲突检测及请求合并划分、多端口、多Bank、非阻塞流水的多进程方式,实现纹理访问请求数据的并行处理,能有效实现纹理访问数据的大规模并行性和高吞吐率的需求。另外,采用这种建模结构有效可以避免繁琐的电路信号设计、快速评估大规模硬件系统的架构,适用于电路早期的系统级设计开发,对同类产品、功能实现提供有效参考。

附图说明

图1是本发明纹理映射非阻塞率存储Cache的SystemC建模的原理框图。

图2是本发明中非阻塞率存储Cache单元内部事务级建模框图。

图3是本发明图片说明图。

图4是纹理Cache的MSHR管理和数据输出进程流程图。其中,

条件1:

(filterMode=nearest)&&(mapType=1D||2D||3D||CUBE));

(filterMode=linear)&&(mapType=1D||2D||CUBE));

(filterMode=nearest_mipmap_nearest)&&(mapType=1D||2D||CUBE||3D));

(filterMode=linear_mipmap_nearest)&&(mapType=1D||2D||CUBE));

(filterMode=nearest_mipmap_lineart)&&(mapType=1D||2D||CUBE));

(filterMode=linear_mipmap_linear)&&(mapType=1D);

条件2:

(filterMode=linear)&&(mapType=3D));

(filterMode=linear_mipmap_nearest)&&(mapType=3D));

(filterMode=linear_mipmap_linear)&&(mapType=2D||CUBE));

条件3:

(filterMode=linear)&&(mapType=3D));

(filterMode=linear_mipmap_nearest)&&(mapType=3D));

(filterMode=linear_mipmap_linear)&&(mapType=3D));

图5是纹理Cache的请求处理进程流程图。

具体实施方式

下面结合附图和具体实施例,对本发明的技术方案进行清楚、完整地表述。显然,所表述的实施例仅是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提所获得的所有其他实施例,都属于本发明的保护范围。

一种GPU纹理映射非阻塞率存储Cache的建模结构,包括:

纹理Cache存储状态与控制单元(1)、缺失信息状态保持寄存器存储单元(MSHR)(2)、多请求合并与冲突检测单元(3)和纹理存储Cache核单元(4);

纹理Cache存储状态与控制寄存器单元(1)为纹理Cache访问缺失信息状态保持寄存器存储单元(2)提供控制与状态信息,包括Cache使能,纹理请求数据过滤模式(filterMode),映射类型(mapType),纹素地址的使能信息;

缺失信息状态保持寄存器存储单元(2),用于保存每个外部纹理映射单元发送的每个纹理请求保存一个MSHR寄存器,其中包括纹理请求的标识validBit,请求的控制标志信息warp_id和quad_id、16个纹素请求地址(u0,u1,……u15,v0,v1,……v15,w0,w1,……w15)、请求纹素返回的结果值(Data0,Data1,……Data15)以及15个小请求处理完成的对应的完成状态(Rdy0,Rdy1……Rdy15)和当前纹理请求完成使能Enable,另外缺失信息状态保持寄存器存储单元(2)从纹理Cache存储状态与控制寄存器单元(1)读取过滤模式(filterMode)填入当前纹理请求的MSHR寄存器中,缺失信息状态保持寄存器存储单元(2)内部进程不断检测当前请求的标识validBit,当该标识validBit有效时,将该纹理请求的16个纹素请求地址(u0,u1,……u15,v0,v1,……v15,w0,w1,……w15)输出给多请求合并与冲突检测单元(3);

多请求合并与冲突检测单元(3),从MSHR里获取有最多16个纹素地址,且设置合并上限m,如果16个纹素地址合并后数目小于等于m个,将16个纹素地址1次输出给纹理存储Cache核单元(4);如果16个纹素地址合并后数目大于m个,将16个纹素地址分为2次输出给纹理存储Cache核单元(4);如果16个纹素地址中至少有2个纹素地址的Bank的索引地址相同,将16个纹素地址分为2次输出给纹理存储Cache核单元(4);

纹理存储Cache核单元(4),用m个端口独立、并行处理来自多请求合并与冲突检测单元(3)的最多m个纹素地址,如果纹素地址的高位部分与纹理存储Cache核单元(4)内部cahe的bank索引地址相同时,则认为该纹素地址命中,然后将纹理地址的低位部分作为偏移地址访问纹理Cache内部DataRam内的16个纹理像素数据,并将纹理像素数据返回给多请求合并与冲突检测单元(3),多请求合并与冲突检测单元(3)在通过与缺失信息状态保持寄存器存储单元(2)之间的接口函数,将16个纹理像素数据填入缺失信息状态保持寄存器存储单元(2)的请求纹素返回的结果值(Data0,Data1,……Data15),并设置16个小请求的状态(Rdy0,Rdy1……Rdy15)和当前纹理请求完成使能Enable均为有效;如果纹素地址高位部分与纹理存储Cache核单元(4)内部cahe的bank索引地址不相同时,则认为该纹素地址缺失,则将当前纹素地址进行线程转换后,再经过纹理压缩与解压缩后访问DDR3显示存储器,并将DDR3显示存储器返回的8*8大小的纹理数据送入纹理Cache进行Block替换,并将更新的纹理像素数据返回给多请求合并与冲突检测单元(3),多请求合并与冲突检测单元(3)在通过与缺失信息状态保持寄存器存储单元(2)之间的接口函数,将16个纹理像素数据填入缺失信息状态保持寄存器存储单元(2)的请求纹素返回的结果值(Data0,Data1,……Data15),并设置16个小请求的状态(Rdy0,Rdy1……Rdy15)和当前纹理请求完成使能Enable均为有效。

实施例

下面结合附图和具体实施例对本发明的技术方案做进一步详细描述。

如图1、图2和图3所示,一种GPU纹理映射非阻塞率存储Cache的建模结构,采用SystemC语言和Transaction Level Modeling(TLM,事务级建模)方法,对纹理存储Cache访问过程进行周期精确的硬件建模。纹理映射单元包括4个功能模块,这4个功能单元模型采用输入请求冲突检测及请求合并划分、多端口、多Bank、非阻塞流水的多进程方式,实现纹理访问请求数据的并行处理。

纹理映射非阻塞存储Cache单元包括纹理Cache存储状态与控制单元(1)、缺失信息状态保持寄存器存储单元(MSHR)(2)、多请求合并与冲突检测单元(3)和纹理存储Cache核单元(4);

如图2所示,纹理Cache存储状态与控制寄存器单元(1)为纹理Cache访问缺失信息状态保持寄存器存储单元(2)提供必要的控制与状态信息,包括Cache使能,纹理请求数据过滤模式(filterMode),映射类型(mapType),纹素地址的使能信息;建模设计时通过texture_cache_read_port端口访问纹理参数存储,获取如Cache使能,请求数据过滤模式(filterMode)或映射类型(mapType)等,纹理Cache存储状态与控制单元(1)的输出与缺失信息状态保持寄存器存储单元(MSHR)(2)双向连接;

缺失信息状态保持寄存器存储单元(2),如图2所示,用于保存每个外部纹理映射单元发送的每个纹理请求保存一个MSHR寄存器,其中包括纹理请求的标识(validBit),请求的控制标志信息(warp_id和quad_id)、16个纹素请求地址(u0,u1,……u15,v0,v1,……v15,w0,w1,……w15)、请求纹素返回的结果值(Data0,Data1,……Data15)以及15个小请求处理完成的对应的完成状态(Rdy0,Rdy1……Rdy15)和当前纹理请求完成使能(Enable),另外缺失信息状态保持寄存器存储单元(2)从纹理Cache存储状态与控制寄存器单元(1)读取过滤模式(filterMode)填入当前纹理请求的MSHR寄存器中,缺失信息状态保持寄存器存储单元(2)内部进程不断检测当前请求的标识(validBit),当该标识(validBit)有效时,将该纹理请求的16个纹素请求地址(u0,u1,……u15,v0,v1,……v15,w0,w1,……w15)输出给多请求合并与冲突检测单元(3);如图4所示,模型设计时采用CTHREAD类型“纹理Cache的MSHR管理进程”(Cache_Mshr_Manage_Dataout_Thread)和一个深度为8(此处深度可根据具体需求进行配置)的数组mshrData[8]实现,其中数组mshrData[8]的每一个元素均是结构体,其中包含了纹理请求的所有信息(如纹素请求坐标地址,纹理过滤类型filterMode和纹理映射类型mapType,请求的数据有效输出标示datavalid,请求有效标示EnableBit,纹素请求的结果数据等信息),“纹理Cache的MSHR管理和数据输出进程”在每个时钟上升沿不断轮训检测每一维数组元素中的请求有效标示EnableBit,如果有效则读取其中的纹理过滤类型filterMode和纹理映射类型mapType,若满足条件1,则表示mshrData[reqCnt]的请求结果通过texture_cache_return_port返回给纹理映射单元;若满足条件2,则表示mshrData[reqCnt]和mshrData[reqCnt+1]的请求结果通过texture_cache_return_port返回给纹理映射单元,若满足条件3,则表示mshrData[reqCnt]、mshrData[reqCnt+1]、mshrData[reqCnt+2和mshrData[reqCnt+3]的请求结果通过texture_cache_return_port返回给纹理映射单元,并设置CacheDataValid有效,否则设置CacheDataValid无效函数并且函数返回,缺失信息状态保持寄存器存储单元(2)的输出与多请求合并与冲突检测单元(3)的双向相连;

多请求合并与冲突检测单元(3),如图2所示,实现访问多请求地址合并及访问冲突检测,(例如:在双线性过滤模式下,从MSHR里获取有最多16个纹素地址,且这16个纹素地址往往是可以合并为9个请求,如果合并后数目大于9个,则多请求合并与冲突检测单元(3)分为2次输出给纹理存储Cache核单元(4),其中冲突是指对纹理请求的地址所指向的Cache内部Bank地址索引进行比较,如果有2个请求的Bank的地址索引相同,则认为产生Bank冲突,这种情况也需要多请求合并与冲突检测单元(3)将冲突的请求分开为2次输出给纹理存储Cache核单元(4),多请求合并与冲突检测单元(3)的输出与纹理存储Cache核单元(4)的双向相连;

纹理Cache核单元(4),用于纹理像素数据缓存,实现纹理访问请求命中或缺失,如果命中则直接向纹理映射单元返回纹理数据,如果L1Cache发生缺失,经过纹理压缩与解压缩后访问DDR3显示存储器,并将返回的A*B大小的纹理数据送入Cache进行Block替换,并将像素数据返回给纹理映射单元。如图2所示,模型设计时采用CTHREAD类型“纹理Cache请求处理进程”(tmu_cache_req_deal_thread)和9端口Cache设计,支持纹素地址访问时的合并访问,内部有16个bank,设计为流水操作,每个Clk接收一组请求,每个Block大小设置为8*8纹素,共2048bit。如图5所示,“纹理Cache请求处理进程”在每个时钟上升沿不断检测是否有Cache请求标识,如果有则判断当前的请求个数reqCnt是否超多9个请求,如果不足,则依次读取请求数组CacheReq[reqCnt]的纹素坐标请求地址,如果请求的地址高位部分与纹理存储Cache核单元(4)内部cahe的bank索引Tag地址不相同时,则认为该请求缺失,则现将当前纹素请求的地址进行线程转换后访问外部DDR存储器,经过纹理压缩与解压缩后访问DDR3显示存储器,并将返回的8*8大小的纹理数据送入Cache进行Block替换,并将新更新的纹理像素数据返回给多请求合并与冲突检测单元(3),多请求合并与冲突检测单元(3)在通过与缺失信息状态保持寄存器存储单元(2)之间的接口函数,将16个纹理像素数据填入缺失信息状态保持寄存器存储单元(2)的请求纹素返回的结果值(Data0,Data1,……Data15),并设置16个小请求的状态(Rdy0,Rdy1……Rdy15)和当前纹理请求完成使能(Enable)均为有效;纹理存储Cache核单元(4)的与外部纹理cache压缩与解压缩的双向连接。

最后应说明的是,以上事实例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1