一种GPU多线程纹理映射SystemC建模结构技术领域
本发明属于计算机图形领域,尤其涉及一种GPU多线程纹理映射SystemC建模结
构。
背景技术
纹理映射是给计算机产生的3D图形表面贴上各种纹理图像,以提高图形的真实
感。纹理映射属于像素处理阶段,用于加速计算密集性和存储访问密集性的纹理操作,一个
主要的运算就是找出屏幕空间像素(x,y,z)在纹理空间所对应的纹理元素所在存储空间的
地址(即纹素地址),然后将所选中的纹理元素颜色进行滤波,并用这个值替换屏幕空间的
像素颜色,从而完成纹理映射。也就是说,先将屏幕空间的像素坐标转换到参数空间(u,v),
再由参数空间转换到纹理图像空间,其特点就是计算量大,且有实时性要求。
对于系统的软/硬件协调设计和协同验证(Co-verification),模拟速度非常重
要。为了提高效率,必须在设计过程的早期阶段启用有效的硬件/软件系统模拟。为了克服
在传统RTL级建模速度慢的的局限性,又鉴于SystemC支持硬件/软件协同设计,能够描述由
硬件和软件组成的复杂系统的结构,支持在C++环境下对硬件、软件和接口的描述。本文使
用SystemC2.0的事务级模型(Transaction Level Models,TLM)进行不同抽象级别建模。
SystemC最基本的结构单元是???module),??榭梢园渌?榛蚬?process)和方
法(method),通过在其中加入时序细节,可以实现功能???、通信???、软件??楹陀布?br />块在各种系统级层次上的抽象,其引进的端口和信号的数据类型描述、时钟和延时的概念,
可以评估系统的性能、探索系统的结构。
发明内容
本发明的目的是:
提供一种GPU多线程纹理映射SystemC建模结构,用于加速计算密集性和存储访问
密集性的纹理操作,实现了“4个fragment的纹理操作”以及每个fragment内部“多个分量”
的操作并行执行,可以避免繁琐的电路信号设计、快速评估大规模硬件系统的架构。
本发明的解决方案是:
一种GPU多线程纹理映射SystemC建模结构,包括:
纹理参数获取和Level计算单元(1)、纹素地址计算单元(2)、数据组装与任务分配
单元单元(3)、纹素数据提取和格式转换单元(4)、纹素过滤、纹素数据归一化单元(5)和纹
理映射状态与控制参数单元(6);
纹理参数获取和Level计算单元(1)输出接口与纹素地址计算单元(2)的输入接口
相连接,纹理参数获取和Level计算单元(1)的根据统一染色体阵列(USA)输入的纹理Quad
请求的纹理单元ID信息,从纹理映射状态与控制参数单元(6)读取纹理映射类型mapType和
过滤模式filterMode、baselevel以及baselevel层的纹理图像分辨率参数width、height、
depth、lod_bias参数,并和统一染色体阵列输入的纹理Quad请求Quad_mask与坐标变量s,
t,r一起代入Level计算流程中,得到常驻纹理的level层的值,并从纹理映射状态与控制参
数单元(6)读取level层纹理图像分辨率参数的width、height、depth,将所述常驻纹理的
level层的值、level层纹理图像分辨率参数的width、height、depth、纹理映射类型
mapType、纹理过滤模式filterMode和统一染色体阵列输入的纹理Quad请求坐标变量s,t,
r,输入给纹素地址计算单元(2);
纹素地址计算单元(2)根据纹理参数获取和Level计算单元(1)输入的统一染色体
阵列输入的纹理Quad请求坐标变量s,t,r和level层纹理图像分辨率参数的width、height、
depth,首先计算指定Level层的纹理坐标,得到第Level层纹素坐标地址(i0,j0,k0),(i1,j
1,k1);其次,纹素地址计算单元(2)将纹素坐标地址(i0,j0,k0),(i1,j 1,k1)带入wrap模
式对Level层的坐标调整算法中,得到每个小分量wrap调整处理后的纹理坐标地址(i0,j0,
k0),(i1,j 1,k1);再次,纹素地址计算单元(2)根据输入的纹理过滤模式filterMode和纹
理映射类型mapType,对纹理坐标进行纹素采样处理,并产生1到n个纹素坐标;并根据wrap
模式对Level层的坐标调整算法对多个纹素坐标进行处理,最后,并将最终的包含纹素采样
坐标的纹素采样请求输出给数据组装与任务分配单元(3);
数据组装与任务分配单元(3),根据当前外部纹理存储器的ready状态,如果ready
状态为1,总是允许本单元向纹理存储L1TCache发送纹素采样请求;否则,将整个纹理流水
线停滞;同时,通过与外部纹理存储器的接口将纹素采样请求传送给外部纹理存储器进行
请求寻址处理,并设置请求完成标识,数据组装与任务分配单元(3)通过内部进程不断检测
外部纹理存储器返回的完成标识状态,如果返回数据有效,则将外部纹理存储器处理后的
请求结果按照请求的先后顺序进行排序,输出给纹素数据提取和格式转换单元(4);
纹素数据提取和格式转换单元(4),先从纹理映射状态与控制参数单元(6)读取当
前纹理请求在纹理Cache内部存储格式internalformat,根据外部纹理存储器返回的存储
格式,从纹素数据提取和格式转换单元(4)获取的请求结果中提取出纹理格式中的R、G、B、
A、Lum、Int和Depth,将不同内部格式转换为RGBA格式的颜色数据,并结果输出给纹素过滤
操作、纹素数据归一化单元(5);
纹素过滤操作、纹素数据归一化单元(5),当纹理过滤模式为临近采样模式,意味
着不需要执行过滤操作,这种类型的纹理请求在过滤??楸弧巴复?;否则,需要根据纹理过
滤模式filterMode,对多个纹理采样值通过线性、或双线性,或三线性插值计算,得到一个
过滤后的纹素值,将结果进行纹素数据归一化,最后,将所述结果通过与统一染色阵列之间
的接口函数输出给外部统一染色阵列。
本发明的优点是:
本发明使用SystemC进行事务级周期精确建模,同时用C++语言来描述软件,可以
使得系统设计的硬件和软件建模统一采用C++语言来实现;基于SystemC的设计方法支持设
计者在不同层次上建模,减小了代码量和工作量,提供了更高的工作效率;实现了“4个
fragment的纹理操作”以及每个fragment内部“多个分量”的操作并行执行,可以避免繁琐
的电路信号设计、快速评估大规模硬件系统的架构,适用于电路早期的系统级设计开发,对
同类产品、功能实现提供有效参考。
附图说明
图1是本发明中一种GPU多线程纹理映射SystemC建模结构的原理框图;
图2是本发明纹理映射单元的事务级建模实现框图;
图3是对图2和图3的图标识说明示意图;
图4是level计算流程示意图;
注释:
1、Quad不完整:指quad包含了不足4个的fragment,可以通过quad_mask的有效位
数得知;
2、启用mipmap:缩小过滤器被设置为使用mipmap,其对应相应的过滤模式有:
nearest_mipmap_nearest,linear_mipmap_nearest,nearest_mipmap_linear,和linear_
mipmap_linear;
图5是纹理Nearest模式下Level纹素坐标计算示意图;
图6是纹理Linear模式下Level纹素坐标计算示意图;
图7是wrap模式对Level层纹素坐标I的调整示意图。
图8是纹素过滤流程图。
具体实施方式
下面结合附图和具体实施例,对本发明的技术方案进行清楚、完整地表述。显然,
所表述的实施例仅是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,
本领域技术人员在没有做出创造性劳动前提所获得的所有其他实施例,都属于本发明的保
护范围。
本发明提供一种GPU多线程纹理映射SystemC建模结构,如图1所示,包括:
纹理参数获取和Level计算单元(1)、纹素地址计算单元(2)、数据组装与任务分配
单元单元(3)、纹素数据提取和格式转换单元(4)、纹素过滤、纹素数据归一化单元(5)和纹
理映射状态与控制参数单元(6);
纹理参数获取和Level计算单元(1)输出接口与纹素地址计算单元(2)的输入接口
相连接,纹理参数获取和Level计算单元(1)的根据统一染色体阵列(USA)输入的纹理Quad
请求的纹理单元ID信息,从纹理映射状态与控制参数单元(6)读取纹理映射类型mapType和
过滤模式filterMode、baselevel以及baselevel层的纹理图像分辨率参数width、height、
depth、lod_bias参数,并和统一染色体阵列输入的纹理Quad请求Quad_mask与坐标变量s,
t,r一起代入如图4所示的Level计算流程中,主要包括:纹理坐标预处理、scalar计算、λ计
算和mimap层level计算,得到常驻纹理的level层的值,并从纹理映射状态与控制参数单元
(6)读取level层纹理图像分辨率参数的width、height、depth,将所述常驻纹理的level层
的值、level层纹理图像分辨率参数的width、height、depth、纹理映射类型mapType、纹理过
滤模式filterMode和统一染色体阵列输入的纹理Quad请求坐标变量s,t,r,输入给纹素地
址计算单元(2);
纹素地址计算单元(2)根据纹理参数获取和Level计算单元(1)输入的统一染色体
阵列输入的纹理Quad请求坐标变量s,t,r和level层纹理图像分辨率参数的width、height、
depth,首先计算指定Level层的纹理坐标,具体算法过程如图5和图6所示,得到第Level层
纹素坐标地址(i0,j0,k0),(i1,j1,k1);其次,纹素地址计算单元(2)将纹素坐标地址(i0,
j0,k0),(i1,j1,k1)带入如图7所示的“wrap模式对Level层的坐标调整算法”中,得到每个
小分量wrap调整处理后的纹理坐标地址(i0,j0,k0),(i1,j1,k1);再次,纹素地址计算单元
(2)根据输入的纹理过滤模式filterMode和纹理映射类型mapType,对纹理坐标进行纹素采
样处理(纹素采样规则参见表1的openGL2.0的纹素过滤模式),并产生1到n个纹素坐标;并
根据上文提到的如图7所示的wrap模式对Level层的坐标调整算法对多个纹素坐标进行处
理,最后,并将最终的包含纹素采样坐标的纹素采样请求输出给数据组装与任务分配单元
(3);
表1
注:
当放大过滤和缩小过滤器被设置为nearest模式,则纹理映射操作仅使用
baselevel的图像;nearest_mipmap_nearest(临近采样)和linear_mipmap_nearest(线性
采样)都使用d个mipmap层数据,d,k的值来自纹理映射状态与控制参数单元;nearest_
mipmap_linear和linear_mipmap_linear需要获取2个临近mipmap层的纹理值,以2D为例,
nearest_mipmap_linear需要从2个mipmap层各读取1个纹素值,2个层之间执行一次线性插
值,linear_mipmap_linear需要从2个mipmap层各读取4个纹素值,执行双线性插值之后,2
个层之间的结果再执行1次线性插值。
数据组装与任务分配单元(3),根据当前外部纹理存储器(纹理L1Cache)的ready
状态,如果ready状态为1,总是允许本单元向纹理存储L1TCache发送纹素采样请求;否则,
将整个纹理流水线停滞;同时,通过与外部纹理存储器(纹理L1Cache)的接口将纹素采样请
求传送给外部纹理存储器进行请求寻址处理,并设置请求完成标识,数据组装与任务分配
单元(3)通过内部进程不断检测外部纹理存储器返回的完成标识状态,如果返回数据有效,
则将外部纹理存储器(纹理L1Cache)处理后的请求结果按照请求的先后顺序进行排序,输
出给纹素数据提取和格式转换单元(4);
纹素数据提取和格式转换单元(4),先从纹理映射状态与控制参数单元(6)读取当
前纹理请求在纹理Cache内部存储格式internalformat(参照OpenGl2.0支持的内部纹理格
式),根据外部纹理存储器(纹理L1Cache)返回的存储格式(如表2所示),从纹素数据提取和
格式转换单元(4)获取的请求结果中提取出纹理格式中的R、G、B、A、Lum、Int和Depth,根据
表3将不同内部格式转换为RGBA格式的颜色数据,并结果输出给纹素过滤操作、纹素数据归
一化单元(5);
表2 Cache输出的纹素数据格式
表3各种颜色到RGBA的转换规则
基本内部格式
R
G
B
A
Alpha
0
0
0
Alpha
Luminance
Lum
Lum
Lum
1
Luminance_alpha
Lum
Lum
Lum
Alpha
Intensity
Int
Int
Int
Int
RGB
R
G
B
1
RGBA
R
G
B
A
纹素过滤操作、纹素数据归一化单元(5),当纹理过滤模式为临近采样模式,意味
着不需要执行过滤操作,这种类型的纹理请求在过滤??楸弧巴复?;否则,需要根据纹理过
滤模式filterMode,对多个纹理采样值通过线性、或双线性,或三线性插值计算,得到一个
过滤后的纹素值,将结果进行纹素数据归一化,即,本??槭淙胛猂GBA格式,每个分量为
8bit的纹素数据,经过归一化操作后的纹素数据每个分量宽度为32bit,取值范围为[0,1]
之间,最后,将所述结果通过与统一染色阵列之间的接口函数输出给外部统一染色阵列。
实施例
下面结合附图和具体实施例对本发明的技术方案做进一步详细描述。
如图1所示,一种GPU多线程纹理映射SystemC建模结构,采用SystemC语言和
Transaction Level Modeling(TLM,事务级建模)方法,模型中各功能??橥ü挛窦督涌?br />的函数、而不是通过硬件信号的连接来实现通信的,各个??槟诓慷及烁髯远懒?、并行
执行的进程,每个进程都只有一个共同的事件触发——时钟上升沿,对纹理映射单元进行
周期精确的硬件建模;每个进程都可以调用各自??榈氖挛窦督涌谥械暮?,来相互传递
信息。
映射单元包括纹理参数获取和Level计算单元(1)、纹素地址计算单元(2)、纹理存
储访问数据组装与任务分配单元单元(3)、纹素数据提取和格式转换单元(4)、纹素过滤操
作、纹素数据归一化(5)和纹理映射状态与控制参数单元(6)。
如图3所示,纹理参数获取和Level计算单元(1),用于根据USA纹理请求输入的
QUAD的“纹理单元ID”从(6)纹理映射状态与控制参数单元获取相关纹理参数,确定纹理映
射类型(maptype),然后计算level层次的值,确定纹理的过滤模式(filtermode)等。如图2
所示,模型设计时采用“Level计算进程”(level_compute_Thread)和流水pipeline_0实现,
其中USA请求标识信息(usa_access_request)过调用usa_access_tau_export接口函数实
现,当“Level计算进程”检测到usa_access_request有效时,将指针data_pointer_level_
compute指向USA输入请求的数据首地址,为“Level计算进程”提供必要的数据信息,“Level
计算进程”主要完成算法功能主要有:纹理坐标预处理(computer_texture_coordinate)、
scalar计算(computer_scalar)、λ计算(computer_lambda)和mimap层level计算(compute_
level_and_alpha)等,并将最后的运算结果输入到pipeline_0实现流水操作传递给下一级
纹素地址计算单元(2);
如图4所示,纹素地址计算单元(2),用于根据(1)纹理参数获取和Level计算单元
输入的纹理映射类型(maptype)、过滤模式(filtermode)计算指定level的纹理坐标;根据
wrap mode对超出[0,1]范围的归一化纹理坐标做进一步处理;在指定filter mode,产生1
到n个纹素坐标;然后根据wrap mode对多个纹素坐标进行处理。如图2所示,建模设计时采
用“纹素地址计算进程”(address_compute_Thread)和流水pipeline_1实现,其中当“纹素
地址计算进程”检测到流水pipeline_0[n-1]非空时,将pipeline_0[n-1]的数据指针传递
给纹素地址计算指针(data_pointer_address_compute),为“纹素地址计算进程”提供必要
的数据信息,“纹素地址计算进程”主要完成算法功能主要有:坐标wrap mode处理(wrap_
mode_adjust)、过滤系统计算(compute_whd_prameter)、纹素地址采样计算(compute_
level_coordinate)等,并将最后的运算结果输入到pipeline_1实现流水操作传递给下一
级纹理存储访问数据组装与任务分配单元单元(3);
纹理存储访问数据组装与任务分配单元单元(3),如图2所示,用于当纹理存储器
(L1纹理cache)的ready状态,如果ready状态为1,通过cache_read_port总是允许本单元向
纹理存储器发送纹素采样请求(一个quad多个纹素坐标)。否则,将整个纹理流水线停滞;同
时,通过与纹理存储器(L1纹理cache)的接口函数,通过进程不断检测cache_return_
export接口函数返回结果有效情况,如果返回数据有效,则将结果按照请求的先后顺序进
行排序,并将结果通过数据指针data_pointer赋值给下一级送给纹素数据提取和格式转换
单元(4)的数据指针data_pointer_format_convert;
纹素数据提取和格式转换单元(4),用于根据纹理的内部格式internalformat从
cache获取的32bit纹素数据中提取纹素各分量的值,将不同内部格式转换为RGBA格式的颜
色数据。如图2所示,建模设计时采用“纹素地址计算进程”(format_convert_Thread)和流
水pipeline_2实现,其中当“纹素格式转换进程”检测到由cache_return_export接口函数
返回的变量cache_return_request有效时,则读取数据指针data_pointer_format_
convert的数据,为“纹素格式转换进程”提供必要的数据信息,“纹素格式转换进程”主要完
成算法功能主要有:通过texture_parameter_read_port读取纹理寄存器状态参数数据、纹
素格式RGBA转换(format_convert)计算等,并将最后的运算结果输入到pipeline_3实现流
水操作传递给下一纹素过滤操作、纹素数据归一化(5);
如图5所示,纹素过滤操作、纹素数据归一化单元(5),当纹理的过滤模式
(filtermode)为临近采样模式(nearest),意味着不需要执行过滤操作,这种类型的纹理请
求在过滤??楸弧巴复?。否则,需要根据过滤模式,对多个纹理采样值通过线性、或双线性,
或三线性插值计算,得到一个过滤后的纹素值,将结果进行纹素数据归一化,即将输入RGBA
格式,每个分量为8bit的纹素数据,经过归一化操作之后的纹素数据每个分量的宽度为
32bit,取值范围:[0,1]之间。如图2所示,建模设计时采用“纹素过滤进程”(data_filtert_
Thread)和流水pipeline_3实现,其中,如图8所示,当“纹素过滤进程”检测到流水
pipeline_3[n-1]非空时,读取将pipeline_3[n-1]的数据指针,为“纹素过滤进程”提供必
要的数据信息,“纹素过滤进程”主要完成算法功能主要有:根据不同的纹理映射类型
(maptype)、过滤模式(filtermode)进行纹素值过滤和归一化计算等,并将最后的结果通过
与统一染色阵列(USA)之间的接口函数输出给USA。
最后应说明的是,以上事实例仅用以说明本发明的技术方案,而非对其限制;尽管
参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可
以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而
这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范
围。