CN108022269A - 一种GPU压缩纹理存储Cache的建模结构 - Google Patents
一种GPU压缩纹理存储Cache的建模结构 Download PDFInfo
- Publication number
- CN108022269A CN108022269A CN201711202135.6A CN201711202135A CN108022269A CN 108022269 A CN108022269 A CN 108022269A CN 201711202135 A CN201711202135 A CN 201711202135A CN 108022269 A CN108022269 A CN 108022269A
- Authority
- CN
- China
- Prior art keywords
- texture
- storage
- request
- units
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/001—Model-based coding, e.g. wire frame
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Abstract
本发明属于计算机图形领域,提供一种GPU压缩纹理存储Cache的建模结构,包括:纹理存储状态与控制寄存器(1)、纹理请求非阻塞存储L1单元(2)、纹理解压缩单元(3)和纹理压缩存储L2单元(4)。本发明基于SystemC对纹理存储访问过程进行功能建模,采用基于4*4纹素块Tile的S3TC解压缩算法,压缩后纹理图像的数据为128bit存储,存储大小为原始4/3倍。根据纹理内部图象不同格式(intFormat),在DDR中压缩纹理采用32bit紧凑格式存储,压缩纹理单元内部支持8bit,16bit,32bit格式的纹理存储访问,提高了存储资源占用率。
Description
技术领域
本发明属于计算机图形领域,涉及一种GPU压缩纹理存储Cache的建模结构。
背景技术
随着图形学的飞速发展,3D图形技术除了在个人计算机、工作站有大量应用外,在移动电话、汽车导航等嵌入式领域也取得长足发展。纹理存储访问在3D图形处理中对于DDR带宽需求非常大。压缩是减少存储和传输信息需要的数据量的机制,因为纹理数据消耗大量内存,所以采取有效的压缩算法能够有效降低3D图形处理对DDR带宽的需求。
发明内容
本发明的目的是:提供一种GPU压缩纹理存储Cache的建模结构,采用SystemC语言和Transaction Level Modeling(TLM,事务级建模)方法对纹理存储访问过程进行功能建模,采用基于4x4的纹素块的S3TC压缩算法,压缩后纹理图像的数据为128bit,存储大小为原始4/3倍。根据纹理内部不同纹理格式(intFormat),DDR存储单元采用32bit紧凑格式,纹理压缩存储L2单元支持8bit,16bit,32bit的纹理存储访问,采用该方式极大提高存储资源占用率,采用纹理压缩极大减少对DDR带宽的需求。
本发明的解决方案是:
一种GPU压缩纹理存储Cache的建模结构,包括:纹理存储状态与控制寄存器1、纹理请求非阻塞存储L1单元2、纹理解压缩单元3和纹理压缩存储L2单元4;
纹理存储状态与控制寄存器1,用于为纹理请求非阻塞存储L1单元2提供控制与状态信息,通过纹理参数存储单元的接口服务函数访问外部纹理存储参数,包括绑定纹理对象编号、绑定对象分级细化mipmap的level层号、DDR中纹理内部存储格式、DDR内部纹素存储的基地址、DDR内部纹理数据存储大小,通过纹理请求非阻塞存储L1单元2的接口服务函数获取该控制信息,通过与纹理请求非阻塞存储L1单元2的接口服务函数将该信息输出给纹理请求非阻塞存储L1单元2,如图1所示,纹理存储状态与控制寄存器单元1的输出端与纹理请求非阻塞存储L1单元2输入端相连接;
纹理请求非阻塞存储L1单元2(以下简称L1Cache),用于接收、存储并处理外部纹理映射单元发起的多个纹素请求;首先,在每个时钟上升沿,循环检测外部纹理映射单元发起的纹素请求,当请求使能有效时,采用寄存器保存请求编号、请求数据过滤模式、映射类型、纹素坐标地址描述信息;其次,读取当前多请求纹素坐标地址,根据访问地址进行请求合并与冲突检测,将请求地址相同的进行合并后产生m个地址并送往该单元内部m个端口的非压缩Cache,如果多个请求无法合并为m个请求,其中m为最大的端口访问数,则分多次访问纹理请求非阻塞存储L1单元2,如果请求命中,则将访问结果的纹素值结果存储至寄存器中,根据请求数据过滤模式和映射类型,当循环检测到纹理请求对应的所有纹素值结果都准备好,则设置Ready就绪标志,根据纹理存储状态与控制寄存器1中的控制信息,通知外部纹理映射单元读取纹素值,如果请求不命中,则将该请求信息打包处理并且暂存,并向纹素压缩单元3发起缺失请求,纹理请求非阻塞存储L1单元2在完成当前缺失请求信息暂存后继续开始下一次的请求;纹理请求非阻塞存储L1单元2更新访问过程不会影响其后续请求访问命中流水线,只有当纹理压缩存储L2单元4将需要更新的block块经过纹理解压缩单元3解压缩之后存储至待更新的fillbuffer缓存时,一方面,纹理请求非阻塞存储L1单元2查询fillbuffer暂存的请求后否有命中,另一方面,纹理请求非阻塞存储L1单元2将该block块数据更新到其DataRam中;如图6所示,是L1Cache单元与L2Cache单元内部block存储纹素映射关系,即中间的解压缩算法由纹理解压缩单元3完成,如图1所示,纹理请求非阻塞存储L1单元2的输入端口与纹理存储状态与控制寄存器1的输出端口连接;
纹理解压缩单元3,一方面用于处理纹理请求非阻塞存储L1单元2发起的纹素地址缺失请求,另一方面用于采用S3TC解压算法处理纹理压缩存储L2单元4返回的纹理数据;首先,当通过纹理请求非阻塞存储L1单元2接口的服务函数检测到纹理请求非阻塞存储L1单元2发起的缺失请求时,读取请求中纹素坐标地址,进行压缩地址转换;然后,根据压缩后的纹素请求地址向纹理压缩存储L2单元4发起缺失请求,并进行时钟周期等待,直到纹理压缩存储L2单元4返回需要的block块数据,该单元需要根据请求中携带的纹理存储内部格式进行数据判断,如果是压缩格式类型的,则根据S3TC算法进行解压缩处理,否则,如果是8bit、16bit或32bit的数据格式,则根据紧凑型的存储方式进行解压缩处理,并将解压缩结果返回给L1Cache单元2进行更新。如图1所示,纹理解压缩单元3的输入端与纹理非压缩单元2的输出端口连接,纹理解压缩单元3输出端口与纹理压缩单元的输入端口连接。
纹理压缩存储L2单元4(以下简称L2Cache),接收、处理纹理解压缩单元3发起的缺失请求,L2Cache内部数据是按二维方式存储纹素的,即保持DDR中相同的纹素存储方式,L2Cache内部block大小设计为8192bit,分32组,可以实现16*16的二维方式存储,采用单端口单bank的Cache设计,映射方式为4路组相联方式,首先,当纹理压缩存储L2单元4接口服务函数检测到S3TC单元的缺失访问请求时,先锁存缺失请求信息,读取该请求携带的压缩纹素地址分量,与L2Cache单元内部Cache的Bank的标示索引TagIndex进行地址命中比较,如果地址命中,则将命中流水线的数据进行组合返回给纹理解压缩单元3,若请求地址不命中,L2Cache的更新会阻塞后续访问请求,将缺失的二维纹素地址进行线性地址转化成满足AXI总线访问DDR存储区的线性地址,向外部AXI总线发起访问DDR纹理存储区的请求,并循环检测AXI总线的应答请求,直到收到AXI总线的应答后,将请求结果通过与纹理解压缩单元3的接口服务函数返回给纹理解压缩单元3进行解压缩处理,如图1所示,纹理压缩存储L2单元的输入端口与4和纹理解压缩单元3输出端口连接,纹理压缩存储L2单元4的输出端口与外部AXI总线的输入端口连接。
本发明基于SystemC对纹理存储访问过程进行功能建模,具有的优点:
a.采用基于4x4的纹素块Title的S3TC压缩算法,纹理被压缩为固定4*4大小的tile块,压缩后纹理图像的数据为128bit存储,存储大小为原始4/3倍。
b.根据纹理内部不同纹理格式(intFormat),DDR存储单元采用32bit紧凑格式存储纹素,支持8bit,16bit,32bit的纹理存储访问,提高存储资源占用率;
c.为了进一步减少DDR访问存储带宽需求,DDR内部采用压缩格式存储;
d.采用该功能模型结构,经过验证后不仅可以重用做参考模型,可以极大避免繁琐电路设计,快速验证存储压缩算法准确率,更能有效提高存储验证效率。
附图说明
图1是本发明压缩纹理存储单元的建模结构框图。
图2是本发明图片说明图。
图3是本发明纹理L1Cache单元的流水线设计图。
图4是本发明S3TC单元纹理解压缩算法图。
图5是本发明纹素压缩地址的线性转换算法过程示意图。
图6本发明是L1Cache单元与L2Cache单元内部block存储纹素映射关系。
具体实施方式
下面结合附图和具体实施例,对本发明的技术方案进行清楚、完整地表述。显然,所表述的实施例仅是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提所获得的所有其他实施例,都属于本发明的保护范围。
一种GPU压缩纹理存储Cache的建模结构,包括:纹理存储状态与控制寄存器1、纹理请求非阻塞存储L1单元2、纹理解压缩单元3和纹理压缩存储L2单元4。
纹理存储状态与控制寄存器1,用于为纹理请求非阻塞存储L1单元2提供控制与状态信息,通过纹理参数存储单元的接口服务函数访问外部纹理存储参数,包括绑定纹理对象编号(texObjId)、绑定对象分级细化mipmap的level层号、双倍速率同步动态随机存储器(以下简称DDR)中纹理内部存储格式(intFormat)、DDR内部纹素存储的基地址(texImageBA)、DDR内部纹理数据存储大小(texImageSize)等控制信息,通过纹理请求非阻塞存储L1单元2的接口服务函数获取该控制信息,通过与纹理请求非阻塞存储L1单元2的接口服务函数将该信息输出给纹理请求非阻塞存储L1单元2,如图1所示,纹理存储状态与控制寄存器单元1的输出端与纹理请求非阻塞存储L1单元2输入端相连接。
纹理请求非阻塞存储L1单元2,用于接收、存储并处理外部纹理映射单元发起的多个纹素请求(texelQeq),本设计为全相联、多端口、多bank,非阻塞、流水访问,首先,在每个时钟上升沿,循环检测外部纹理映射单元发起的纹素请求,当请求使能有效时,采用寄存器保存请求编号、请求数据过滤模式(filterMode)、映射类型(mapType)、纹素坐标地址(texelCoord)等请求描述信息;其次,读取当前多请求纹素坐标地址,根据访问地址进行请求合并与冲突检测,将请求地址相同的进行合并后产生m个地址并送往该单元内部m个端口的非压缩Cache,如果多个请求无法合并为m个请求(m为最大的端口访问数),则分多次访问L1Cache,如果请求命中,则将访问结果的纹素值结果(texelData)存储至寄存器中,根据请求数据过滤模式(filterMode)和映射类型(mapType),当循环检测到纹理请求对应的所有纹素值结果都准备好,则设置Ready就绪标志,根据纹理存储状态与控制寄存器1中的控制信息,通知外部纹理映射单元读取纹素值,如果请求不命中,则将该请求信息打包处理并且暂存,并向纹素压缩单元3发起缺失请求,由于是非阻塞设计,L1Cache在完成当前缺失请求信息暂存后继续开始下一次的请求,L1Cache更新访问过程不会影响L1Cache后续请求访问命中流水线,只有当纹理压缩存储L2单元4(简称L2Cache)将需要更新的block块经过纹理解压缩单元3解压缩之后存储至待更新的fillbuffer缓存时,一方面,L1Cache查询fillbuffer暂存的请求后否有命中,另一方面,L1Cache将该block块数据更新到L1Cache的DataRam中。如图6所示,是L1Cache单元与L2Cache单元内部block存储纹素映射关系,即中间的解压缩算法由纹理解压缩单元3完成,如图1所示,纹理请求非阻塞存储L1单元2的输入端口与纹理存储状态与控制寄存器1的输出端口连接。
纹理解压缩单元3,一方面用于处理纹理请求非阻塞存储L1单元2发起的纹素地址缺失请求,另一方面用于采用S3TC解压算法处理纹理压缩存储L2单元4返回的纹理数据,首先,当通过纹理请求非阻塞存储L1单元2接口的服务函数检测到L1Cache发起的缺失请求时,读取请求中纹素坐标地址(texelCoord),进行压缩地址转换;然后,根据压缩后的纹素请求地址向纹理压缩存储L2单元4发起缺失请求,并进行时钟周期等待,直到纹理压缩存储L2单元4返回需要的block块数据,假定quad是纹理相邻的纹素地址,DDR中9个相邻的纹素可能被压缩到相邻的1~4个压缩块内,按照4*4*32bit的块压缩后96bit,该单元需要根据请求中携带的纹理存储内部格式(intFormat),如表1所示,进行数据判断,如果是压缩格式类型的,则根据S3TC算法进行解压缩处理,否则,如果是其他类型如8bit,16bit或32bit的数据格式,则根据紧凑型的存储方式进行解压缩处理,并将解压缩结果返回给L1Cache单元进行更新,如图1所示,纹理解压缩单元3的输入端与纹理非压缩单元2的输出端口连接,纹理解压缩单元3输出端口与纹理压缩单元的输入端口连接。
表1 OpenGL 2.0支持的内部纹理格式(intFormat)
Sized Internal Format | RBits | GBits | BBits | ABits | LBits | IBits | DBits |
ALPHA | 8 | ||||||
ALPHA4 | 4 | ||||||
ALPHA8 | 8 | ||||||
ALPHA12 | 12 | ||||||
ALPHA16 | 16 | ||||||
DEPTHCOMPONENT | 8 | ||||||
DEPTHCOMPONENT16 | 16 | ||||||
DEPTHCOMPONENT24 | 24 | ||||||
DEPTHCOMPONENT32 | 32 | ||||||
LUMINANCE | 8 | ||||||
LUMINANCE4 | 4 | ||||||
LUMINANCE8 | 8 | ||||||
LUMINANCE12 | 12 | ||||||
LUMINANCE16 | 16 | ||||||
LUMINANCEALPHA | 8 | 8 | |||||
LUMINANCE4ALPHA4 | 4 | 4 | |||||
LUMINANCE6ALPHA2 | 2 | 6 | |||||
LUMINANCE8ALPHA8 | 8 | 8 | |||||
LUMINANCE12ALPHA4 | 4 | 12 | |||||
LUMINANCE12ALPHA12 | 12 | 12 | |||||
LUMINANCE16ALPHA16 | 16 | 16 | |||||
INTENSITY | 8 | ||||||
INTENSITY4 | 4 | ||||||
INTENSITY8 | 8 | ||||||
INTENSITY12 | 12 | ||||||
INTENSITY16 | 16 | ||||||
R3G3B2 | 3 | 3 | 2 | ||||
RGB4 | 4 | 4 | 4 | ||||
RGB5 | 5 | 5 | 5 | ||||
RGB8 | 8 | 8 | 8 | ||||
RGB10 | 10 | 10 | 10 | ||||
RGB12 | 12 | 12 | 12 | ||||
RGB16 | 16 | 16 | 16 | ||||
RGBA2 | 2 | 2 | 2 | 2 | |||
RGBA4 | 4 | 4 | 4 | 4 | |||
RGB5A1 | 5 | 5 | 5 | 1 | |||
RGBA8 | 8 | 8 | 8 | 8 | |||
RGB10A2 | 10 | 10 | 10 | 2 | |||
RGBA12 | 12 | 12 | 12 | 12 | |||
RGBA16 | 16 | 16 | 16 | 16 |
纹理压缩存储L2单元4(以下简称L2Cache),接收、处理解压缩单元3发起的缺失请求,L2Cache内部数据是按二维方式存储纹素的,即保持DDR中相同的纹素存储方式,L2Cache内部block大小设计为8192bit,分32组,可以实现16*16的二维方式存储,采用单端口单bank的Cache设计,映射方式为4路组相联方式,首先,当L2Cache单元4接口服务函数检测到S3TC单元的缺失访问请求时,先锁存缺失请求信息,读取该请求携带的压缩纹素地址分量,与L2Cache单元4内部Cache的Bank的标示索引TagIndex进行地址命中比较,如果地址命中,则将命中流水线的数据进行组合返回给纹理解压缩单元3,若请求地址不命中,L2Cache的更新会阻塞后续访问请求,将缺失的二维纹素地址进行线性地址转化成满足AXI总线访问DDR存储区的线性地址,向外部AXI总线发起访问DDR纹理存储区的请求,并循环检测AXI总线的应答请求,直到收到AXI总线的应答后,将请求结果通过与纹理解压缩单元3的接口服务函数返回给纹理解压缩单元3进行解压缩处理,如图1所示,纹理压缩存储L2单元的输入端口与4和纹理解压缩单元3输出端口连接,纹理压缩存储L2单元的输出端口与外部AXI总线的输入端口连接。
下面结合附图和具体实施例对本发明的技术方案做进一步详细描述。
如图1和图2所示,一种GPU压缩纹理存储Cache的建模结构,采用SystemC语言和Transaction Level Modeling(TLM,事务级建模)方法对纹理存储访问过程进行功能建模,采用基于4x4的纹素块的S3TC压缩算法,4*4的Tile压缩后纹理图像的数据为128bit存储,存储大小为原始4/3倍。根据纹理内部不同纹理格式intFormat(具体定义如表1所示),非压缩存储单元采用32bit紧凑格式存储纹素,支持8bit,16bit,32bit的纹理存储访问,提高存储资源占用率。
如图1所示,压缩纹理存储单元包括:纹理存储状态与控制寄存器1、纹理请求非阻塞存储L1单元2、解压缩单元3和纹理压缩存储L2单元4;
纹理存储状态与控制寄存器1,用于为纹理请求非阻塞存储L1单元2提供控制与状态信息,通过纹理参数存储单元的tmuParame2CsrIf接口服务函数访问外部纹理存储参数,包括绑定纹理对象编号(texObjId)、绑定对象分级细化mipmap的level层号、双倍速率同步动态随机存储器(以下简称DDR)中纹理内部存储格式(intFormat)、DDR内部纹素存储的基地址(texImageBA)、DDR内部纹理数据存储大小(texImageSize)等控制信息,通过纹理请求非阻塞存储L1单元2的接口服务函数获取该控制信息,通过与纹理请求非阻塞存储L1单元2的接口服务函数将该信息输出给纹理请求非阻塞存储L1单元2,如图1所示,纹理存储状态与控制寄存器单元1的输出端与纹理请求非阻塞存储L1单元2输入端相连接,tmuParame2CsrIF接口包括tmuParame2CsrPort和tmuParame2CsrExport端口,tmuParame2CsrExport端口实现的服务函数包括“取外部纹理参数寄存器Reg_Read(addr,regdata)函数”和“写寄存器Write_Read(addr,regdata)函数”,其中addr表示寄存器的读/写寄存器地址,regdata表示寄存器的读/写寄存器数据。
纹理请求非阻塞存储L1单元2,用于接收、存储并处理外部纹理映射单元发起的多个纹素请求(texelQeq),本设计为全相联、多端口、多bank,非阻塞、流水访问Cache,当纹理流水线来的纹素地址访问相同的cache块时合并访问(本设计中L1Cache采用9端口设计,可支持4个纹理流水线同时产生16个请求合并后访问9个纹素地址,读出9个Cache数据,最后可以打包组装16个纹素数据返回给外部纹理映射单元),首先,在每个时钟上升沿,循环检测外部纹理映射单元发起的纹素请求,当请求使能有效时,采用寄存器保存请求编号、请求数据过滤模式(filterMode)、映射类型(mapType)、纹素坐标地址(texelCoord)等请求描述信息;其次,读取当前多请求纹素坐标地址,根据访问地址进行请求合并与冲突检测,将请求地址相同的进行合并后产生9个地址并送往该单元内部9个端口的非压缩Cache,如果多个请求无法合并为9个请求(9为最大的端口访问数),则分多次访问L1Cache,访问L1Cache时,根据纹理存储状态与控制寄存器1中的控制信息,将基地址texImageBA、纹素地址(texelCoord)水平分量坐标i和垂直坐分量标j的高位部分进行拼接得到tagAddr,(即如果纹理存储内部格式是32bit存储,则取tagAddr={texImageBA,i[12:3],j[12:3]}、如果纹理存储内部格式intFormat(具体如表1所示)是16bit存储,则取tagAddr={texImageBA,i[12:4],j[12:3]},如果纹理存储内部格式intFormat是8bit存储,则取tagAddr={texImageBA,i[12:4],j[12:4]}),将tagAddr与纹理请求非阻塞存储L1单元2内部存储Cache的Bank索引标示数组TagIndex[M](M深度值可根据bank具体设计设置)进行轮训比较,如果请求地址命中,则计算bank内部纹素数值的偏移地址dataOffset,(即,如果纹理存储内部格式intFormat是32bit存储,则取dataOffset={i[2:0],j[2:0]}、如果纹理存储内部格式intFormat是16bit存储,则取dataOffset={i[3:0],j[2:0]},如果纹理存储内部格式intFormat是8bit存储,则取data Offset={i[3:0],j[3:0]}即dataOffset={i[2:0],j[2:0]}),根据dataOffset寻址纹理请求非阻塞存储L1单元2内部Cache的bank数据存储Ram,得到缩纹素结果值(texelData),并将纹素值(texelData)存储至寄存器中,根据请求数据过滤模式(filterMode)和映射类型(mapTy pe),若当前纹素请求的所有纹素值结果都准备好,则置Ready标志,并通过tmu2Uncompr eCacheIf的“Get_Uncompre_Cache_Data()服务函数”将纹素结果值(texelData)返回给外部纹理映射单元;如果请求地址不命中,则将该请求信息打包处理并且暂存,通过uncompreC ache2DecodeIf的“Request_Decompress()服务函数”向纹理解压缩单元3,发起纹素地址缺失请求,由于是非阻塞设计,L1Cache在完成当前缺失请求信息暂存后继续开始下一次的请求,L1Cache更新访问过程不会影响L1Cache后续请求访问命中流水线,如图6所示,是L1Cache单元与L2Cache单元内部block存储纹素映射关系,即中间的解压缩算法由纹理解压缩单元3完成,只有当纹理压缩存储L2单元4(简称L2Cache)将需要更新的block块经过纹理解压缩单元3解压缩之后存储至待更新的fillbuffer缓存时,一方面,L1Cache查询fi llbuffer暂存的请求后否有命中,另一方面,L1Cache将该block块数据更新到L1Cache的D ataRam中。如图1所示,纹理请求非阻塞存储L1单元2的输入端口与纹理存储状态与控制寄存器1的输出端口连接,纹理请求非阻塞存储L1单元2的输出端口与纹理解压缩单元3相连接,模型设计时,tmu2UncompreCacheIF接口包括tmu2UncompreCachePort和tmu2Unc ompreCacheExport端口,其中tmu2UncompreCacheExport实现外部纹理映射单元访问纹理请求非阻塞存储L1单元2的所有服务函数,外部纹理映射单元内部的“CTHREAD类型进程”通过tmu2UncompreCacheIF接口调用“Get_Uncompre_Cache_Request_Status()函数”,不断检测纹理非压缩单元2的工作状态,如果“空闲,”调用该接口的“Get_Uncompre_Cache_Data()函数”,向纹理请求非阻塞存储L1单元2发起纹理缺失请求,并通过“Set_Uncompre_Cac he_Request_Status()函数”设置纹理非压缩单元2当前为请求忙状态,直到检测纹理非压缩单元2请求处理完成done状态,则通过“Set_Uncompre_Cache_Request_Status()函数”设置纹理非压缩单元2为“空闲”状态,并通过“Get_Uncompre_Cache_Data()函数”将请求结果返回给外部纹理映射单元。
纹理解压缩单元3,一方面用于处理处理纹理请求非阻塞存储L1单元2发起的纹素地址缺失请求,另一方面用于采用S3TC解压算法处理纹理压缩存储L2单元4返回的纹理数据,首先,当通过uncompreCache2DecodeIf接口的服务函数检测到L1Cache发起的缺失请求时,读取请求中纹素坐标地址(texelCoord),并进行请求信息组包,即数据组包成结构体(S_Te xCacheData&reqData),如图1注所示,其次,纹理解压缩单元3通过decode2CompreUni tIf接口服务函数向纹理压缩存储L2单元4发起缺失访问请求,并循环周期等待直到纹理压缩存储L2单元4返回请求应答素数据,最后,纹理解压缩单元3根据请求中数据组包的纹理存储内部格式(intFormat),如果是压缩格式类型的,则进行S3TC算法解压缩处理,编码时以4*4的Tile内的每个点作为color0和color1进行编码遍历,将得到的编码结果进行比较,选择最优的结果作为输出,解码具体算法过程如图4所示。如果是8bit,16bit或32bit的数据格式,则根据紧凑型的存储方式进行解压缩处理,并通过uncompreCache2DecodeIf的“Request_Decompress()服务函数”将结果返回给纹理请求非阻塞存储L1单元2。如图1所示,纹理解压缩单元3的输入端与纹理非压缩单元2的输出端口连接,纹理解压缩单元3输出端口与纹理压缩单元的输入端口连接,建模设计时,uncompreCache2DecodeIF接口包括uncompreCache2DecodePort和uncompreCache2DecodeExport两个端口,uncompreCache2DecodeExport端口实现“访问纹理解压缩单元3的Request_Decompress()服务函数”,该函数保存解压缩处理结果。
其中,上述S_TexCacheData结构体为:struct S_TexCacheData
图4中:
*color2代表Rcolor2,Gcolor2,Bcolor2,Acolor2;
*color3代表Rcolor3,Gcolor3,Bcolor3,Acolor3;
纹理解压缩单元S3TC压缩算法过程如下:
1.纹理压缩存储L2单元返回纹理解压缩单元96bit数据{s3tcDataIn[0],s3tcDataIn[1],s3tcDataIn[2]};
2.设置Color0=s3tcDataIn[0],Color1=s3tcDataIn[1],则纹素颜色分量R、G、B和A对应的解压分量如下:
RColor2=color0.range(31,24)*2/3+color1.range(31,24)*1/3,
RColor3=color0.range(31,24)*1/3+color1.range(31,24)*2/3;
GColor2=color0.range(23,16)*2/3+color1.range(23,16)*1/3,
GColor3=color0.range(23,16)*1/3+color1.range(23,16)*2/3;
BColor2=color0.range(15,8)*2/3+color1.range(15,8)*1/3,
BColor3=color0.range(15,8)*1/3+color1.range(15,8)*2/3;
AColor2=color0.range(7,0)*2/3+color1.range(7,0)*1/3,
AColor3=color0.range(7,0)*1/3+color1.range(7,0)*2/3;
s3tcDataIn[2]每2bit进入Table[16]寄存器;
3.根据Table[16]每个2bit分量值,通过16个Mux matirx选择器选择Color0~*Color3之一输出,最后得到4*4的Tile的纹理压缩数据。
纹理压缩存储L2单元4,一方面用于接收处理AXI总线返回的纹理压缩像素数据,另一方面接收处理解压缩单元3发起的缺失请求,首先,通过decode2CompreUnitIF循环检测到纹理解压缩单元3发起的缺失访问请求(texlQeq)有效时,读取该请求携带的压缩纹素地址(texelComprCoord)分量,将请求地址(texelCompreCoord)的水平分量i与垂直分量j的高位部分进行拼接,得到压缩存储bank索引地址tagIndex,将计算得到压缩存储bank索引地址tagIndex与内部Cahche的tag标示寄存器数组tagTagIndex[M](M的深度值可根据设计设置)值进行轮询比较,如果请求命中,则根据纹素请求地址(texelCompreCoord)水平分量i与垂直分量j低位部分拼接得到偏移寻址OffsetAdr,寻址缩存储单元4内部Cache的bank的数据存储Ram,并将寻址得到纹素值(texelCompreData)返回给解压缩单元3,如果请求地址不命中,则将压缩后的纹素请求地址坐标(texelCompreCoord)进行线性地址axi2ddrAddr转化,具体算法过程如附图5所示,向外部AXI总线发起访问Ddr纹理存储区的请求,循环检测直到AXI总线的应答,收到AXI总线的应答结果后,将结果返回给解压缩单元3进行解压缩处理。如图1所示,纹理压缩存储L2单元的输入端口与4和纹理解压缩单元3输出端口连接,纹理压缩存储L2单元的输出端口与外部Axi总线的输入端口连接。模型设计时,decode2CompreUnitIf接口包括decode2CompreUnitPort和decode2CompreUnitExp ort端口,decode2CompreUnitExport端口实现访问纹理压缩存储L2单元4的所有服务函数,如“解压单元访问函数Request_Decompress()服务函数”,当纹理压缩存储L2单元4内部请求缺失时,通过compreUnit2AxiIF接口的“Get_Axi_Bus_Request_Status()服务函数”获取当前Axi的总线空闲状态,如果Axi总线“空闲”,通过调用Axi总线“Get_Axi_Bus_Data()服务函数”实现访问Dddr的目的,当访问请求应答后,通过纹理解压缩单元内部解析后,最后,通过decode2CompreUnitIF的Request_Decompress()服务函数返回给纹理解压缩单元。
最后应说明的是,以上事实例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (1)
1.一种GPU压缩纹理存储Cache的建模结构,其特征在于,所述建模结构包括:纹理存储状态与控制寄存器(1)、纹理请求非阻塞存储L1单元(2)、纹理解压缩单元(3)和纹理压缩存储L2单元(4);其中:
所述纹理存储状态与控制寄存器(1),用于为纹理请求非阻塞存储L1单元(2)提供控制与状态信息,通过纹理参数存储单元的接口服务函数访问外部纹理存储参数,包括绑定纹理对象编号、绑定对象分级细化mipmap的level层号、DDR中纹理内部存储格式、DDR内部纹素存储的基地址、DDR内部纹理数据存储大小,通过纹理请求非阻塞存储L1单元(2)的接口服务函数获取该控制信息;
所述纹理请求非阻塞存储L1单元(2),用于接收、存储并处理外部纹理映射单元发起的多个纹素请求;首先,在每个时钟上升沿,循环检测外部纹理映射单元发起的纹素请求,当请求使能有效时,采用寄存器保存请求编号、请求数据过滤模式、映射类型、纹素坐标地址描述信息;其次,读取当前多请求纹素坐标地址,根据访问地址进行请求合并与冲突检测,将请求地址相同的进行合并后产生m个地址并送往该单元内部m个端口的非压缩Cache,如果多个请求无法合并为m个请求,其中m为最大的端口访问数,则分多次访问纹理请求非阻塞存储L1单元(2),如果请求命中,则将访问结果的纹素值结果存储至寄存器中,根据请求数据过滤模式和映射类型,当循环检测到纹理请求对应的所有纹素值结果都准备好,则设置Ready就绪标志,根据纹理存储状态与控制寄存器(1)中的控制信息,通知外部纹理映射单元读取纹素值,如果请求不命中,则将该请求信息打包处理并且暂存,并向纹素压缩单元(3)发起缺失请求,纹理请求非阻塞存储L1单元(2)在完成当前缺失请求信息暂存后继续开始下一次的请求;纹理请求非阻塞存储L1单元(2)更新访问过程不会影响其后续请求访问命中流水线,只有当纹理压缩存储L2单元(4)将需要更新的block块经过纹理解压缩单元(3)解压缩之后存储至待更新的fillbuffer缓存时,一方面,纹理请求非阻塞存储L1单元(2)查询fillbuffer暂存的请求后否有命中,另一方面,纹理请求非阻塞存储L1单元(2)将该block块数据更新到其DataRam中;
所述纹理解压缩单元(3),一方面用于处理纹理请求非阻塞存储L1单元(2)发起的纹素地址缺失请求,另一方面用于采用S3TC解压算法处理纹理压缩存储L2单元(4)返回的纹理数据;首先,当通过纹理请求非阻塞存储L1单元(2)接口的服务函数检测到纹理请求非阻塞存储L1单元(2)发起的缺失请求时,读取请求中纹素坐标地址,进行压缩地址转换;然后,根据压缩后的纹素请求地址向纹理压缩存储L2单元(4)发起缺失请求,并进行时钟周期等待,直到纹理压缩存储L2单元(4)返回需要的block块数据,该单元需要根据请求中携带的纹理存储内部格式进行数据判断,如果是压缩格式类型的,则根据S3TC算法进行解压缩处理,否则,如果是8bit、16bit或32bit的数据格式,则根据紧凑型的存储方式进行解压缩处理,并将解压缩结果返回给L1Cache单元(2)进行更新;
所述纹理压缩存储L2单元(4),用于接收、处理解压缩单元(3)发起的缺失请求;纹理压缩存储L2单元(4)内部数据是按二维方式存储纹素的,即保持DDR中相同的纹素存储方式,L2Cache内部block大小为8192bit,分32组,可以实现16*16的二维方式存储,采用单端口单bank的Cache设计,映射方式为4路组相联方式,首先,当纹理压缩存储L2单元(4)接口服务函数检测到S3TC单元的缺失访问请求时,先锁存缺失请求信息,读取该请求携带的压缩纹素地址分量,与纹理压缩存储L2单元(4)内部Cache的Bank的标示索引TagIndex进行地址命中比较,如果地址命中,则将命中流水线的数据进行组合返回给纹理解压缩单元(3),若请求地址不命中,L2Cache的更新会阻塞后续访问请求,将缺失的二维纹素地址进行线性地址转化成满足AXI总线访问DDR存储区的线性地址,向外部AXI总线发起访问DDR纹理存储区的请求,并循环检测AXI总线的应答请求,直到收到AXI总线的应答后,将请求结果通过与纹理解压缩单元(3)的接口服务函数返回给纹理解压缩单元(3)进行解压缩处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711202135.6A CN108022269B (zh) | 2017-11-24 | 2017-11-24 | 一种GPU压缩纹理存储Cache的建模系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711202135.6A CN108022269B (zh) | 2017-11-24 | 2017-11-24 | 一种GPU压缩纹理存储Cache的建模系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108022269A true CN108022269A (zh) | 2018-05-11 |
CN108022269B CN108022269B (zh) | 2021-09-14 |
Family
ID=62077217
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711202135.6A Active CN108022269B (zh) | 2017-11-24 | 2017-11-24 | 一种GPU压缩纹理存储Cache的建模系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108022269B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109118422A (zh) * | 2018-07-10 | 2019-01-01 | 西安科技大学 | 一种嵌入式移动图形处理器的纹理Cache及处理方法 |
CN109614086A (zh) * | 2018-11-14 | 2019-04-12 | 西安翔腾微电子科技有限公司 | 基于SystemC的面向GPU纹理缓冲区数据存储TLM模型及实现结构 |
CN109634583A (zh) * | 2018-11-14 | 2019-04-16 | 西安翔腾微电子科技有限公司 | 一种基于SystemC的GPU颜色存储Cache模块的硬件TLM模型及实现结构 |
CN110942417A (zh) * | 2019-11-18 | 2020-03-31 | 中国航空工业集团公司西安航空计算技术研究所 | 一种gpu纹素取值方法 |
CN110992240A (zh) * | 2019-11-18 | 2020-04-10 | 中国航空工业集团公司西安航空计算技术研究所 | 一种可编程纹理处理器系统 |
CN111008515A (zh) * | 2019-11-18 | 2020-04-14 | 中国航空工业集团公司西安航空计算技术研究所 | 一种面向gpu硬件子纹理替换存储算法的tlm微结构 |
CN111028127A (zh) * | 2019-11-18 | 2020-04-17 | 中国航空工业集团公司西安航空计算技术研究所 | 一种gpu子纹理替换存储方法 |
CN112489146A (zh) * | 2020-12-10 | 2021-03-12 | 苏州速显微电子科技有限公司 | 一种基于图像分布的定长纹理压缩数据存储系统 |
CN113778526A (zh) * | 2021-11-12 | 2021-12-10 | 北京微核芯科技有限公司 | 一种基于Cache的流水线的执行方法及装置 |
CN116467227A (zh) * | 2023-06-19 | 2023-07-21 | 深流微智能科技(深圳)有限公司 | Tmu系统和tmu系统的运算优化方法 |
CN116862749A (zh) * | 2023-06-20 | 2023-10-10 | 北京麟卓信息科技有限公司 | 一种基于自适应解码缓存的压缩纹理渲染优化方法 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901042A (zh) * | 2010-08-27 | 2010-12-01 | 上海交通大学 | 多gpu系统中基于动态任务迁移技术的降功耗方法 |
CN102254297A (zh) * | 2010-10-15 | 2011-11-23 | 威盛电子股份有限公司 | 多着色器系统及其处理方法 |
US20120320067A1 (en) * | 2011-06-17 | 2012-12-20 | Konstantine Iourcha | Real time on-chip texture decompression using shader processors |
US20160103715A1 (en) * | 2014-10-09 | 2016-04-14 | The Regents Of The University Of Michigan | Issue control for multithreaded processing |
CN105550979A (zh) * | 2015-12-11 | 2016-05-04 | 中国航空工业集团公司西安航空计算技术研究所 | 一种高数据通量纹理Cache层次结构 |
CN105630441A (zh) * | 2015-12-11 | 2016-06-01 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于统一染色技术的gpu体系架构 |
CN106204709A (zh) * | 2014-09-16 | 2016-12-07 | 三星电子株式会社 | 用于处理纹理的方法和设备 |
CN106408634A (zh) * | 2015-07-29 | 2017-02-15 | 三星电子株式会社 | 纹理处理设备和方法 |
CN106683158A (zh) * | 2016-12-12 | 2017-05-17 | 中国航空工业集团公司西安航空计算技术研究所 | 一种GPU纹理映射非阻塞存储Cache的建模结构 |
CN106683171A (zh) * | 2016-12-12 | 2017-05-17 | 中国航空工业集团公司西安航空计算技术研究所 | 一种GPU多线程纹理映射SystemC建模结构 |
CN107077717A (zh) * | 2014-12-18 | 2017-08-18 | 英特尔公司 | 促进计算设备上的图形处理单元上的工作负荷执行的动态流水线化 |
-
2017
- 2017-11-24 CN CN201711202135.6A patent/CN108022269B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901042A (zh) * | 2010-08-27 | 2010-12-01 | 上海交通大学 | 多gpu系统中基于动态任务迁移技术的降功耗方法 |
CN102254297A (zh) * | 2010-10-15 | 2011-11-23 | 威盛电子股份有限公司 | 多着色器系统及其处理方法 |
US20120320067A1 (en) * | 2011-06-17 | 2012-12-20 | Konstantine Iourcha | Real time on-chip texture decompression using shader processors |
CN106204709A (zh) * | 2014-09-16 | 2016-12-07 | 三星电子株式会社 | 用于处理纹理的方法和设备 |
US20160103715A1 (en) * | 2014-10-09 | 2016-04-14 | The Regents Of The University Of Michigan | Issue control for multithreaded processing |
CN107077717A (zh) * | 2014-12-18 | 2017-08-18 | 英特尔公司 | 促进计算设备上的图形处理单元上的工作负荷执行的动态流水线化 |
CN106408634A (zh) * | 2015-07-29 | 2017-02-15 | 三星电子株式会社 | 纹理处理设备和方法 |
CN105550979A (zh) * | 2015-12-11 | 2016-05-04 | 中国航空工业集团公司西安航空计算技术研究所 | 一种高数据通量纹理Cache层次结构 |
CN105630441A (zh) * | 2015-12-11 | 2016-06-01 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于统一染色技术的gpu体系架构 |
CN106683158A (zh) * | 2016-12-12 | 2017-05-17 | 中国航空工业集团公司西安航空计算技术研究所 | 一种GPU纹理映射非阻塞存储Cache的建模结构 |
CN106683171A (zh) * | 2016-12-12 | 2017-05-17 | 中国航空工业集团公司西安航空计算技术研究所 | 一种GPU多线程纹理映射SystemC建模结构 |
Non-Patent Citations (2)
Title |
---|
JHE-YU LIOU 等: "Re-visit blocking texture cache design for modern GPU", 《2014 INTERNATIONAL SOC DESIGN CONFERENCE》 * |
马安国: "高效能GPGPU体系结构关键技术研究", 《中国博士学位论文全文数据库 信息科技辑》 * |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109118422A (zh) * | 2018-07-10 | 2019-01-01 | 西安科技大学 | 一种嵌入式移动图形处理器的纹理Cache及处理方法 |
CN109118422B (zh) * | 2018-07-10 | 2023-05-05 | 西安科技大学 | 一种嵌入式移动图形处理器的纹理Cache及处理方法 |
CN109614086B (zh) * | 2018-11-14 | 2022-04-05 | 西安翔腾微电子科技有限公司 | 基于SystemC和TLM模型的GPU纹理缓冲区数据存储硬件及存储装置 |
CN109614086A (zh) * | 2018-11-14 | 2019-04-12 | 西安翔腾微电子科技有限公司 | 基于SystemC的面向GPU纹理缓冲区数据存储TLM模型及实现结构 |
CN109634583A (zh) * | 2018-11-14 | 2019-04-16 | 西安翔腾微电子科技有限公司 | 一种基于SystemC的GPU颜色存储Cache模块的硬件TLM模型及实现结构 |
CN111028127B (zh) * | 2019-11-18 | 2023-06-13 | 中国航空工业集团公司西安航空计算技术研究所 | 一种gpu子纹理替换存储方法 |
CN111028127A (zh) * | 2019-11-18 | 2020-04-17 | 中国航空工业集团公司西安航空计算技术研究所 | 一种gpu子纹理替换存储方法 |
CN111008515A (zh) * | 2019-11-18 | 2020-04-14 | 中国航空工业集团公司西安航空计算技术研究所 | 一种面向gpu硬件子纹理替换存储算法的tlm微结构 |
CN110992240A (zh) * | 2019-11-18 | 2020-04-10 | 中国航空工业集团公司西安航空计算技术研究所 | 一种可编程纹理处理器系统 |
CN111008515B (zh) * | 2019-11-18 | 2023-06-09 | 中国航空工业集团公司西安航空计算技术研究所 | 一种面向gpu硬件子纹理替换存储算法的tlm微结构 |
CN110942417A (zh) * | 2019-11-18 | 2020-03-31 | 中国航空工业集团公司西安航空计算技术研究所 | 一种gpu纹素取值方法 |
CN110942417B (zh) * | 2019-11-18 | 2023-06-30 | 中国航空工业集团公司西安航空计算技术研究所 | 一种gpu纹素取值方法 |
CN112489146A (zh) * | 2020-12-10 | 2021-03-12 | 苏州速显微电子科技有限公司 | 一种基于图像分布的定长纹理压缩数据存储系统 |
CN113778526A (zh) * | 2021-11-12 | 2021-12-10 | 北京微核芯科技有限公司 | 一种基于Cache的流水线的执行方法及装置 |
CN116467227A (zh) * | 2023-06-19 | 2023-07-21 | 深流微智能科技(深圳)有限公司 | Tmu系统和tmu系统的运算优化方法 |
CN116467227B (zh) * | 2023-06-19 | 2023-08-25 | 深流微智能科技(深圳)有限公司 | Tmu系统和tmu系统的运算优化方法 |
CN116862749A (zh) * | 2023-06-20 | 2023-10-10 | 北京麟卓信息科技有限公司 | 一种基于自适应解码缓存的压缩纹理渲染优化方法 |
CN116862749B (zh) * | 2023-06-20 | 2023-11-21 | 北京麟卓信息科技有限公司 | 一种基于自适应解码缓存的压缩纹理渲染优化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108022269B (zh) | 2021-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108022269A (zh) | 一种GPU压缩纹理存储Cache的建模结构 | |
US20210312668A1 (en) | Real time on-chip texture decompression using shader processors | |
CN106683158B (zh) | 一种GPU纹理映射非阻塞存储Cache的建模系统 | |
CN109214504B (zh) | 一种基于fpga的yolo网络前向推理加速器设计方法 | |
US20070244850A1 (en) | Perfect multidimensional spatial hashing | |
US10152765B2 (en) | Texture processing method and unit | |
CN109871510B (zh) | 二维卷积运算处理方法、系统、设备及计算机存储介质 | |
US20070245119A1 (en) | Perfect hashing of variably-sized data | |
US8237710B1 (en) | Methods and apparatus for fill rule evaluation over a tessellation | |
CN109255750A (zh) | 图形处理系统 | |
US20110216068A1 (en) | Edge processing techniques | |
US20140028693A1 (en) | Techniques to request stored data from a memory | |
US20070008330A1 (en) | Texture cache control using a data dependent slot selection scheme | |
US7336284B2 (en) | Two level cache memory architecture | |
CA2558657A1 (en) | Embedded system with 3d graphics core and local pixel buffer | |
CN110214338A (zh) | 增量颜色压缩到视频的应用 | |
KR100806345B1 (ko) | 3차원 그래픽 가속기 그리고 텍스쳐 데이터 독출 방법 | |
US20060187229A1 (en) | Page based rendering in 3D graphics system | |
KR20220019791A (ko) | 듀얼 Buffer 아키텍처에 기반한 텍스처 매핑 하드웨어 가속기 | |
CN112419463B (zh) | 一种模型数据处理方法、装置、设备及可读存储介质 | |
JP3365293B2 (ja) | Dram,ロジック混載lsiを使ったキャッシュメモリ及びそれを用いたグラフィックスシステム | |
US10706607B1 (en) | Graphics texture mapping | |
US7737988B1 (en) | Using font filtering engines for texture blitting | |
US20240127526A1 (en) | Texture sampling method and apparatus based on merge processing of texel requests | |
CN116883575B (zh) | 建筑群渲染方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |