发明内容
本申请提供了一种指令编译方法及图形处理装置,能够降低纹理坐标转换时的信令开销。
为了达到上述目的,本申请提供了以下技术方案:
第一方面,本申请提供了一种指令编译方法,指令编译方法包括:生成转换指令,所述转换指令包括源通用寄存器的标识,目标通用寄存器的标识以及位置指示信息,所述位置指示信息用于指示目标纹理坐标在所述目标通用寄存器中的目标存储位置,所述目标纹理坐标配置为将所述源通用寄存器中存储的源纹理坐标转换得到;发送所述转换指令。
可选的,所述转换指令具有目的操作域,所述目的操作域携带所述位置指示信息。
可选的,所述目标通用寄存器包括至少两个候选存储位置,所述目标存储位置选自所述至少两个候选存储位置。
可选的,相邻的至少两个转换指令包括不同的源通用寄存器,相邻的至少两个转换指令中位置指示信息指示同一目标通用寄存器中不同的目标存储位置。
可选的,所述目标通用寄存器具有32比特,所述至少两个候选存储位置包括高16位比特和低16位比特。
可选的,所述转换指令包括精度转换指令。
第二方面,本申请还提供一种图形处理装置,图形处理装置包括:多个通用寄存器,用于存储源纹理坐标或目标纹理坐标,所述目标纹理坐标配置为将所述源纹理坐标转换得到;调度执行器,用于接收转换指令,所述转换指令包括源通用寄存器的标识,目标通用寄存器的标识以及位置指示信息,所述位置指示信息用于指示所述目标纹理坐标在所述目标通用寄存器中的目标存储位置;运算单元,用于根据所述转换指令将所述源纹理坐标转换为所述目标纹理坐标,并将所述目标纹理坐标存储于所述目标存储位置。
可选的,所述转换指令具有目的操作域,所述目的操作域携带所述位置指示信息。
可选的,所述目标通用寄存器包括至少两个候选存储位置,所述目标存储位置选自所述至少两个候选存储位置。
可选的,相邻的至少两个转换指令包括不同的源通用寄存器,相邻的至少两个转换指令中位置指示信息指示同一目标通用寄存器中不同的目标存储位置。
可选的,所述目标通用寄存器具有32比特,所述至少两个候选存储位置包括高16位比特和低16位比特。
可选的,所述转换指令包括精度转换指令。
第三方面,本申请提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被运算处理单元运行以执行第一方面提供的方法。
第四方面,本申请提供了一种终端设备,终端设备包括第二方面提供的图形处理装置。
与现有技术相比,本申请实施例的技术方案具有以下有益效果:
本申请技术方案中,生成转换指令,转换指令包括源通用寄存器的标识,目标通用寄存器的标识以及位置指示信息,位置指示信息用于指示目标纹理坐标在目标通用寄存器中的目标存储位置,目标纹理坐标配置为将源通用寄存器中存储的源纹理坐标转换得到;发送转换指令。本申请通过在指令编译的过程中,使转换指令中包括位置指示信息,以指示目标纹理坐标在目标通用寄存器中的目标存储位置,能够实现在纹理坐标转换的过程中直接将目标纹理坐标存储至目标存储位置,无需额外的指令进行纹理坐标的移动,减小信令开销。
进一步地,相邻的至少两个转换指令中位置指示信息指示同一目标通用寄存器中不同的目标存储位置。本申请通过在不同的转换指令中指示同一目标通用寄存器中不同的目标存储位置,从而在纹理坐标转换的过程中自动实现纹理坐标的拼接,无需额外的指令进行纹理坐标的拼接,进一步减小信令开销。
具体实施方式
如背景技术中所述,现有技术的拼接指令操作会带来多余指令开销,增加编译器复杂度;在通用寄存器资源紧张时,还会因GPR溢出带来性能问题。
具体地,在存储纹理坐标时,编译器通过分析GPR使用情况,按纹理坐标维度分配出相应数目的GPR资源。当纹理坐标的维度数量很大时,需要引入的GPR数目也要很大。为了节省GPR资源,需要对低精度定点坐标数据进行数据拼接。例如,下面这几条指令(Fp2fxr2,r8;Fp2fx r3,r25;Shl r4,r3,16;Or r2, r2, r4),目的是拼接2个低精度定点坐标数据,分别为16bit和8bit。一个浮点坐标数据存放在GPR r8中,通过Fp2fx指令(用于32bit浮点数转定点数)转换为16bit的定点坐标数据,存放在GPR r2中。同样另一个浮点坐标数据存放在GPR r25中,通过Fp2fx指令转换为8bit的定点坐标数据,存放在GPR r3中。因两个定点坐标数据都是低精度定点数,可拼接存放在同一个GPR当中,通过Shl指令将GPR r3中存放的8bit定点数左移16bit,结果存放在GPR r4中。最后通过Or指令将16bit的GPR r2中存放的定点数和8bit r4中存放的定点数拼接在一起,将最终结果24bit的定点坐标数据存放在GPR r2中。
从上述方案中可以看出,现有技术中在拼接两个低精度定点坐标数据时,使用了两个Fp2fx指令,Shl指令以及Or指令;使用了GPR r8,r25,r2,r3和r4共5个通用寄存器。
本申请技术方案中,通过在指令编译的过程中,使转换指令中包括位置指示信息,以指示目标纹理坐标在目标通用寄存器中的目标存储位置,能够实现在纹理坐标转换的过程中直接将目标纹理坐标存储至目标存储位置,无需额外的指令进行纹理坐标的移动,减小信令开销。
进一步地,相邻的至少两个转换指令中位置指示信息指示同一目标通用寄存器中不同的目标存储位置。本申请通过在不同的转换指令中指示同一目标通用寄存器中不同的目标存储位置,从而在纹理坐标转换的过程中自动实现纹理坐标的拼接,无需额外的指令进行纹理坐标的拼接,进一步减小信令开销。
为使本申请的上述目的、特征和优点能够更为明显易懂,下面结合附图对本申请的具体实施例做详细的说明。
参见图1,指令编译方法可以由编译器运行,也即由编译器执行指令编译方法的各个步骤,以生成并发送转换指令。当然可以理解的是,指令编译方法也可以由其他任意适当的主体来执行。
具体地,指令编译方法具体可以包括以下步骤:
步骤101:生成转换指令。其中,转换指令包括源通用寄存器的标识,目标通用寄存器的标识以及位置指示信息,位置指示信息用于指示目标纹理坐标在目标通用寄存器中的目标存储位置,目标纹理坐标配置为将源通用寄存器中存储的源纹理坐标转换得到。
步骤102:发送转换指令。
可以理解的是,在具体实施中,上述方法的各个步骤可以采用软件程序的方式实现,该软件程序运行于芯片或芯片模组内部集成的处理器中。该方法也可以采用软件结合硬件的方式实现,本申请不作限制。
本实施例中,源通用寄存器是指存储有源纹理坐标的通用寄存器,目标通用寄存器是指存储有目标纹理坐标的通用寄存器。源纹理坐标是指待转换的纹理坐标,目标纹理坐标为转换后的纹理坐标。
本实施例中,转换指令可以用于指示对至少两个源通用寄存器中的源纹理坐标进行转换,例如,对至少两个源纹理坐标进行拼接,转换后的纹理坐标存储于目标通用寄存器中。具体地,转换指令包括源通用寄存器的标识以及目标通用寄存器的标识。此外,转换指令还包括位置指示信息。位置指示信息用于指示目标纹理坐标在目标通用寄存器中的目标存储位置。
具体地,可以由GPU执行上述转换指令。由于转换指令还包括位置指示信息,因此GPU在执行转换指令时,可以直接从转换指令中获知目标纹理坐标在目标通用寄存器中的目标存储位置,从而可以直接将目标纹理坐标存储在上述目标存储位置,无需额外的指令进行纹理坐标的移动,减小信令开销。
可以理解的是,源纹理坐标可以是预先存储至源通用寄存器的,目标通用寄存器可以是预先配置好的,本申请对此不作限制。
一并参照图2,图2示出了一种转换指令中位置指示信息。
本实施例中,目标通用寄存器为32比特的寄存器,位置指示信息可以指示目标通用寄存器的高16比特(high 16bits),如标识1所示。位置指示信息可以指示目标通用寄存器的低16比特(low 16bits),如标识0所示。
在一个具体实施例中,转换指令具有目的操作域,目的操作域携带位置指示信息。
本发明实施例对指令集架构(ISA)进行改进,在已有的转换指令的基础上新增目的操作域(dest position field), 目的操作域的值即为位置指示信息。例如,目的操作域占用一个比特,该比特的值为1时,目标存储位置为目标通用寄存器的高16比特;该比特的值为0时,目标存储位置为目标通用寄存器的低16比特。
具体地,目的操作域可以是转换指令中的预留比特或空闲比特,也可以在转换指令中新增比特作为目的操作域。
在一个具体实施例中,转换指令可以是精度转换指令,可以将具有较高精度的纹理坐标转换为具有较低精度的纹理坐标。具体可以包括单精度浮点数转定点数指令(Fp2fx指令),双精度浮点数转半精度浮点数指令(dp2hp指令),单精度转半精度指令,双精度转定点数指令等。
以单精度浮点数转定点数指令为例,本发明实施例中的转换指令的格式如下所示:Fp2fx.dpos0 r2,r8;Fp2fx.dpos1 r2, r25。上述转换指令表示,第一个源纹理坐标(浮点坐标数据)存放在GPR r8中,通过Fp2fx指令转换为定点数据后存放在GPR r2低16bit位置上。同样,第二个源纹理坐标(浮点坐标数据)存放在GPR r25中,通过Fp2fx指令转换定点数据后直接存放在GPR r2高16bit位置上。至此,完成了对两个源纹理坐标的拼接,GPR r2中存储的即是目标纹理坐标,也即第一个源纹理坐标转换得到的目标纹理坐标和第二个源纹理坐标转换得到的目标纹理坐标。
从上述方案中可以看出,本发明实施例在拼接两个低精度定点坐标数据时,仅使用了两个Fp2fx指令;仅使用了GPR r8,r25,r2共3个通用寄存器。相对于现有技术,本申请采用更少的信令以及更少的通用寄存器实现了对纹理坐标的拼接,减小了信令开销,同时也节省了通用寄存器的空间。这也意味着,相对于现有技术,本申请中调度器可以同时启动更多的线程,从而在提升GPU的性能。
在一个具体实施例中,目标通用寄存器可以包括至少两个候选存储位置,目标存储位置选自至少两个候选存储位置。
在前述实施例中,以候选存储位置为目标通用寄存器的高16比特和低16比特进行了说明,但实际应用中,候选存储位置的划分还可以有其他任意可实施的方式。
一并参照图3,目标通用寄存器为32比特的寄存器,目标通用寄存器包括四个候选存储位置,每一候选存储位置占用8比特。相应地,位置指示信息为11时,指示目标通用寄存器的高8比特;位置指示信息为00时,指示目标通用寄存器的低8比特;位置指示信息为10时,指示目标通用寄存器的高16比特中的低8比特;位置指示信息为01时,指示目标通用寄存器的低16比特中的高8比特。
在一个可选实施方式中,目标通用寄存器为32比特的寄存器,目标通用寄存器包括三个候选存储位置,其中一个候选存储位置占用16比特,剩余两个候选存储位置分别占用8比特。具体可以是,目标通用寄存器的低16比特,目标通用寄存器的高16比特中的高8比特和低8比特;或者,目标通用寄存器的高16比特,目标通用寄存器的低16比特中的高8比特和低8比特等。
需要说明的是,关于目标通用存储器的尺寸、各个候选存储位置的尺寸以及各个候选存储位置的划分,可以根据实际的应用场景进行适应性的设置,本申请对此不作限制。
在本申请一个非限制性的实施例中,相邻的至少两个转换指令包括不同的源通用寄存器,相邻的至少两个转换指令中位置指示信息指示同一目标通用寄存器中不同的目标存储位置。
为了实现对不同源纹理坐标的拼接,并且由于不同的源纹理坐标存储在不同的源通用寄存器中,本发明实施例在相邻的至少两个转换指令包括不同的源通用寄存器,并且相邻的至少两个转换指令中位置指示信息指示同一目标通用寄存器中不同的目标存储位置。
例如,转换指令的格式如下所示:Fp2fx.dpos0 r2,r8;Fp2fx.dpos1 r2, r25,对于上述两个相邻的Fp2fx指令,其中一个Fp2fx指令中包括的源通用寄存器为r8,另一个Fp2fx指令中包括的源通用寄存器为r25;相应地,其中一个Fp2fx指令中包括的目标存储位置为dpos0指示的目标通用寄存器r2的低16比特,另一个Fp2fx指令中包括的目标存储位置为dpos1指示的目标通用寄存器r2的高16比特。
具体地,相邻的至少两个转换指令可以形成转换指令序列,也就是说,转换指令序列包括多个转换指令,多个转换指令中位置指示信息指示同一目标通用寄存器中不同的目标存储位置。例如,目标通用寄存器具有32比特,两个候选存储位置包括高16位比特和低16位比特,则指令序列包括上述两个转换指令:Fp2fx.dpos0 r2,r8;Fp2fx.dpos1 r2, r25。
请参照图4,图4示出了一种图形处理装置的结构。
如图4所示,本申请提供的图形处理装置包括调度执行器401、运算单元402以及多个通用寄存器403。
其中,多个通用寄存器403用于存储源纹理坐标或目标纹理坐标。具体地,用于存储源纹理坐标的通用寄存器403为源通用寄存器,用于存储目标纹理坐标的通用寄存器403为目标通用寄存器。
调度执行器401用于接收转换指令。具体地,调度执行器401可以接收来自编译器的转换指令。调度执行器401将转换指令调度至运算单元402。运算单元402执行转换指令,也即根据转换指令将源纹理坐标转换为目标纹理坐标,并将目标纹理坐标存储于目标存储位置。
例如,在执行转换指令时,运算单元402从通用寄存器GPR1中读取源纹理坐标1,将其转换为目标纹理坐标1,并存储至通用寄存器GPRn的高16比特中;运算单元402从通用寄存器GPR2中读取源纹理坐标2,将其转换为目标纹理坐标2,并存储至通用寄存器GPRn的低16比特中。
请参照图5,图形处理装置还包括纹理贴图404,纹理贴图404可以向通用寄存器403发送请求,以请求读取纹理坐标;通用寄存器403返回纹理坐标至纹理贴图404。纹理贴图404可以对纹理坐标对应的纹理值基于特定的滤波算法进行计算。
具体地,纹理贴图404可以包括采样控制器和纹理协处理器。采样控制器从通用寄存器403中采集纹理坐标,纹理协处理器从采样控制器读取纹理坐标,并进行纹理值的计算。
在具体的应用中,图形处理装置中通用寄存器403的数量有限,而纹理贴图处理过程中存在大量低精度定点纹理坐标数据;并且随着纹理技术的发展,纹理坐标维度的提升,纹理坐标的数据量越来越大。本发明实施例通过对指令集架构(ISA)进行改进,使图形处理装置在纹理贴图过程中对纹理坐标进行拼接时,可以节省信令开销,并且节省通用寄存器的存储资源,提升了GPU性能,为纹理技术的发展提供了可靠的解决方案。
关于本申请实施例的更多具体实现方式,请参照前述实施例,此处不再赘述。
请参照图6,图6示出了一种指令编译装置。指令编译装置包括:
生成模块601,用于生成转换指令;
通信模块602,用于发送所述转换指令。
关于上述实施例中描述的各个装置、产品包含的各个模块/单元,其可以是软件模块/单元,也可以是硬件模块/单元,或者也可以部分是软件模块/单元,部分是硬件模块/单元。例如,对于应用于或集成于芯片的各个装置、产品,其包含的各个模块/单元可以都采用电路等硬件的方式实现,或者,至少部分模块/单元可以采用软件程序的方式实现,该软件程序运行于芯片内部集成的处理器,剩余的(如果有)部分模块/单元可以采用电路等硬件方式实现;对于应用于或集成于芯片模组的各个装置、产品,其包含的各个模块/单元可以都采用电路等硬件的方式实现,不同的模块/单元可以位于芯片模组的同一组件(例如芯片、电路模块等)或者不同组件中,或者,至少部分模块/单元可以采用软件程序的方式实现,该软件程序运行于芯片模组内部集成的处理器,剩余的(如果有)部分模块/单元可以采用电路等硬件方式实现;对于应用于或集成于终端设备的各个装置、产品,其包含的各个模块/单元可以都采用电路等硬件的方式实现,不同的模块/单元可以位于终端设备内同一组件(例如,芯片、电路模块等)或者不同组件中,或者,至少部分模块/单元可以采用软件程序的方式实现,该软件程序运行于终端设备内部集成的处理器,剩余的(如果有)部分模块/单元可以采用电路等硬件方式实现。
本申请实施例还公开了一种存储介质,所述存储介质为计算机可读存储介质,其上存储有计算机程序,所述计算机程序运行时可以执行图1中所示方法的步骤。所述存储介质可以包括只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random AccessMemory,RAM)、磁盘或光盘等。存储介质还可以包括非挥发性存储器(non-volatile)或者非瞬态(non-transitory)存储器等。
本申请实施例还公开了一种终端设备,所述终端设备包括前述的图形处理装置;或者,终端设备包括存储器和处理器,存储器上存储有可在处理器上运行的计算机程序,处理器运行计算机程序时执行前述指令编译方法的步骤。
本申请实施例中出现的“多个”是指两个或两个以上。
本申请实施例中出现的第一、第二等描述,仅作示意与区分描述对象之用,没有次序之分,也不表示本申请实施例中对设备个数的特别限定,不能构成对本申请实施例的任何限制。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令或计算机程序。在计算机上加载或执行所述计算机指令或计算机程序时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置和系统,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的;例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式;例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的部分步骤。
虽然本申请披露如上,但本申请并非限定于此。任何本领域技术人员,在不脱离本申请的精神和范围内,均可作各种更动与修改,因此本申请的保护范围应当以权利要求所限定的范围为准。