具体实施方式
在本申请说明书全文(包括权利要求)中所使用的“耦接(或连接)”一词可指任何直接或间接的连接手段。举例而言,若文中描述第一装置耦接(或连接)于第二装置,则应该被解释成该第一装置可以直接连接于该第二装置,或者该第一装置可以通过其他装置或某种连接手段而间接地连接至该第二装置。本申请说明书全文(包括权利要求)中提及的“第一”、“第二”等用语是用以命名元件(element)的名称,或区别不同实施例或范围,而并非用来限制元件数量的上限或下限,亦非用来限制元件的次序。另外,凡可能之处,在图式及实施方式中使用相同标号的元件/构件/步骤代表相同或类似部分。不同实施例中使用相同标号或使用相同用语的元件/构件/步骤可以相互参照相关说明。
图1是依照本发明的一实施例的一种电子装置100的电路方块(circuit block)示意图。图1所示电子装置100包括中央处理器110、存储器120以及协同处理器130。在以下说明中,依照不同的设计需求,中央处理器110以及(或是)协同处理器130的实现方式可以是硬件(hardware)、固件(firmware)、软件(software,即程序)或是前述三者中的多者的组合形式。
中央处理器110耦接至存储器120。依照设计需求,中央处理器110可以包括中央处理单元(central processing unit,CPU)、控制器、微控制器(micro-controller)、微处理器(micro-processor)、专用集成电路(Application-specific integrated circuit,ASIC)、数字信号处理器(digital signal processor,DSP)、现场可编程门阵列(FieldProgrammable Gate Array,FPGA)或是其他中央处理电路,而存储器120可以包括只读存储器(Read Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、快闪存储器(FLASH memory)以及(或是)储存装置。所述储存装置包括硬盘(hard disk drive,HDD)、固态硬盘(Solid-state drive,SSD)或是其他储存装置。在另一些实施例中,所述记录介质可以包括“非临时性计算机可读取介质(non-transitory computer readable medium)”,例如带(tape)、盘(disk)、卡(card)、半导体存储器、可编程设计的逻辑电路等。存储器120适于放置操作系统(Operation System,OS)与(或)应用程序(application program)的部分(或全部)编程码(programming codes)。中央处理器110可以从存储器120读取并执行所述编程码,从而实现以下诸实施例所述的中央处理器110的相关功能。而且,所述编程码也可经由任意传输介质(通信网络或广播电波等)而提供给所述电子装置100(或中央处理器110)。所述通信网络例如是因特网(Internet)、有线通信(wired communication)网络、无线通信(wireless communication)网络或其它通信介质。
依照设计需求,协同处理器130可以包括控制器、微控制器、微处理器、ASIC、DSP、FPGA或是其他处理电路。协同处理器130经由总线耦接至中央处理器110。中央处理器110可以发出一个或多个命令给协同处理器130。依照中央处理器110的命令,协同处理器130可以进行功能操作。举例来说,在一些实施例中,协同处理器130可以包括图形处理器(GraphicProcessing Unit,GPU)以及(或是)其他协同处理电路。在一些应用情境中,中央处理器110发送给协同处理器130的这些命令可以包括寄存器设置命令、绘图命令(drawing command)与(或)其他命令。依照中央处理器110的命令,GPU(协同处理器130)可以进行绘图操作。
依照设计需求,在图1所示实施例中,协同处理器130可以包括至少一个命令处理单元与至少一个寄存器(register)。依据协同处理器130的这个(或这些)寄存器的内容,所述命令处理单元可以执行(或控制)协同处理器130的功能操作。举例来说,所述寄存器以被配置为存放至少一个绘图参数。依据协同处理器130的这个(或这些)寄存器的绘图参数,所述命令处理单元可以执行(或控制)协同处理器130的绘图操作。
协同处理器130的每一个寄存器的大小(位的数量)可以依照设计需求来定义。举例来说,一个寄存器的大小可以是32位。这32位的功能可以依照设计需求来定义。在一个寄存器的32位中,可能有单一位被用来表示(存放)协同处理器130的一个操作参数,也可能使用多个位来表示(存放)协同处理器130的一个操作参数。亦即,一个寄存器可以存放协同处理器130的多个操作参数。更甚者,一个寄存器的全部位(例如32位)可能被用来表示(存放)协同处理器130的一个操作参数。
中央处理器110可以发出寄存器设置命令给协同处理器130,以便设置(改变)协同处理器130的任何一个寄存器的部分或全部内容(亦即一个或多个操作参数,例如绘图参数)。通过设置(改变)协同处理器130的这些寄存器的内容(操作参数),中央处理器110可以控制协同处理器130的功能操作(例如绘图操作)。
图2是依照本发明的一实施例的一种命令数量减少方法的流程示意图。请参照图1与图2。于步骤S210中,中央处理器110可以执行操作系统(Operation System,OS)与(或)应用程序的编程码,以及(或是)执行其他编程码。在执行所述编程码的过程中,中央处理器110可以产生多个原始寄存器设置命令。所述多个原始寄存器设置命令的每一个适于设置协同处理器130的至少一个寄存器的至少一个位。这些原始寄存器设置命令可以被暂存在存储器120与(或)中央处理器110的快取存储器(CACHE memory,未绘示)。
一般而言,所述多个原始寄存器设置命令中的部分寄存器设置命令(在此称为第一原始寄存器设置命令)可能具有地址连续性。亦即,这些第一原始寄存器设置命令的多个设置目标具有地址连续性。于步骤S220中,中央处理器110可以融合这些第一原始寄存器设置命令(亦即,具有地址连续性的原始寄存器设置命令),以产生至少一个经融合寄存器设置命令。经融合后,于步骤S230中,中央处理器110可以将所述至少一个经融合寄存器设置命令传输给协同处理器130。因此,电子装置100可以执行图2所示命令数量减少方法,以减少中央处理器110传输给协同处理器130的寄存器设置命令的数量。因为中央处理器110传输给协同处理器130的寄存器设置命令的数量可以被有效减少,所以中央处理器110与协同处理器130之间的总线的频宽可以更有效率。另一方面,因为这些寄存器设置命令的数量被减少,协同处理器130解析这些寄存器设置命令的负担可以被有效减轻,进而提升协同处理器130的命令处理速度和效能。
以下将以多个实施范例来说明步骤S220的不同实施方式。须注意的是,依照应用环境与条件的不同,协同处理器130的寄存器的定址方式可能会有所不同,而所述原始寄存器设置命令的格式(语法)亦可能会有所不同。举例来说,为定址方便,协同处理器130的这些寄存器可以被划分为多个寄存器组(register group),其中每个寄存器组被分配一个组号GID。在一个寄存器组内部的每一个寄存器可以按照内部偏移(offset)进行定址。
在此将说明第一实施例。第一实施例将采用“排序合并法”。在第一实施例中,带掩码(mask)的寄存器设置命令“SetRMask”将被用来作为所述原始寄存器设置命令的范例。在此假设,这个带掩码的寄存器设置命令的语法为SetRMask(GID,O,M,V),其中GID表示寄存器组的组号,O表示在一个寄存器组内部的偏移,M表示掩码,而V表示值(value)。另外假设,在执行编程码的过程中,中央处理器110可以产生表1所示多个原始命令。在表1中,Draw_command表示绘图命令。
表1:中央处理器110所产生的原始命令及其产生顺序
顺序 |
原始命令 |
1 |
SetRMask(1,2,0x000000FF,0x00000078) |
2 |
SetRMask(2,0,0xFFF00000,0x87600000) |
3 |
SetRMask(1,2,0x03000000,0x02000000) |
4 |
SetRMask(2,2,0xFF000000,0xAA000000) |
5 |
SetRMask(1,5,0x000000F0,0x00000070) |
6 |
SetRMask(2,1,0xFFF00000,0x12300000) |
7 |
SetRMask(2,0,0x00000FF0,0x00000320) |
8 |
SetRMask(1,5,0x00070000,0x00040000) |
9 |
SetRMask(1,2,0x0001F800,0x00005000) |
10 |
SetRMask(1,2,0x00F00000,0x00300000) |
11 |
SetRMask(1,5,0x0000F000,0x00005000) |
12 |
SetRMask(1,2,0x00000700,0x00000600) |
13 |
SetRMask(1,5,0xFF000000,0x12000000) |
14 |
SetRMask(3,2,0x0000000F,0x00000001) |
15 |
SetRMask(2,2,0x00FFF000,0x00BBB000) |
16 |
SetRMask(2,0,0x0000000F,0x00000001) |
17 |
SetRMask(1,2,0x000E0000,0x00040000) |
18 |
SetRMask(2,0,0x000FF000,0x00054000) |
19 |
SetRMask(1,2,0xF0000000,0x10000000) |
20 |
SetRMask(3,2,0xFF000000,0x22000000) |
21 |
SetRMask(2,2,0x00000FFF,0x00000CCC) |
22 |
SetRMask(1,5,0x00000008,0x00000008) |
23 |
SetRMask(3,2,0x00FFFFF0,0x00555550) |
24 |
SetRMask(2,1,0x000FFFFF,0x00045678) |
25 |
Draw_command |
在第一实施例中,中央处理器110可以依照表1所示多个原始寄存器设置命令的设置目标的地址,将这些原始寄存器设置命令进行排序。举例来说,中央处理器110可以依照升幂(升序)方式排序表1所示原始寄存器设置命令。排序后的原始命令为表2。
表2:原始命令经排序后的新顺序
原始顺序 |
新顺序 |
原始命令 |
1 |
1 |
SetRMask(1,2,0x000000FF,0x00000078) |
12 |
2 |
SetRMask(1,2,0x00000700,0x00000600) |
9 |
3 |
SetRMask(1,2,0x0001F800,0x00005000) |
17 |
4 |
SetRMask(1,2,0x000E0000,0x00040000) |
10 |
5 |
SetRMask(1,2,0x00F00000,0x00300000) |
3 |
6 |
SetRMask(1,2,0x03000000,0x02000000) |
19 |
7 |
SetRMask(1,2,0xF0000000,0x10000000) |
22 |
8 |
SetRMask(1,5,0x00000008,0x00000008) |
5 |
9 |
SetRMask(1,5,0x000000F0,0x00000070) |
11 |
10 |
SetRMask(1,5,0x0000F000,0x00005000) |
8 |
11 |
SetRMask(1,5,0x00070000,0x00040000) |
13 |
12 |
SetRMask(1,5,0xFF000000,0x12000000) |
16 |
13 |
SetRMask(2,0,0x0000000F,0x00000001) |
7 |
14 |
SetRMask(2,0,0x00000FF0,0x00000320) |
18 |
15 |
SetRMask(2,0,0x000FF000,0x00054000) |
2 |
16 |
SetRMask(2,0,0xFFF00000,0x87600000) |
24 |
17 |
SetRMask(2,1,0x000FFFFF,0x00045678) |
6 |
18 |
SetRMask(2,1,0xFFF00000,0x12300000) |
21 |
19 |
SetRMask(2,2,0x00000FFF,0x00000CCC) |
15 |
20 |
SetRMask(2,2,0x00FFF000,0x00BBB000) |
4 |
21 |
SetRMask(2,2,0xFF000000,0xAA000000) |
14 |
22 |
SetRMask(3,2,0x0000000F,0x00000001) |
23 |
23 |
SetRMask(3,2,0x00FFFFF0,0x00555550) |
20 |
24 |
SetRMask(3,2,0xFF000000,0x22000000) |
25 |
25 |
Draw_command |
在完成排序后,中央处理器110可以将设置目标的地址为相同一个寄存器的多个“第一原始寄存器设置命令”(亦即,具有地址连续性的原始寄存器设置命令)合并为一个经融合寄存器设置命令。举例来说,表2所示新顺序1至7的这些原始寄存器设置命令,其设置目标的地址均为“在组号1的寄存器组内,偏移2”。新顺序1至7的原始寄存器设置命令的设置目标为相同一个寄存器,因此中央处理器110可以将表2所示新顺序1至7的这些原始寄存器设置命令合并为一个经融合寄存器设置命令“SetRMask(1,2,0xF3FFFFFF,0x12345678)”。表2所示其余原始寄存器设置命令可以依此类推。
融合后的命令为表3。从表3可以看出,中央处理器110传输给协同处理器130的寄存器设置命令的数量可以被有效减少。因此,中央处理器110与协同处理器130之间的总线的频宽可以更有效率。另一方面,因为这些寄存器设置命令的数量被减少,协同处理器130解析这些寄存器设置命令的负担可以被有效减轻,进而提升协同处理器130的命令处理速度和效能。
表3:原始命令与经融合寄存器设置命令
接下来将说明第二实施例。第二实施例亦采用“排序合并法”。在第二实施例中,未带掩码的寄存器设置命令“SetR”将被用来作为所述原始寄存器设置命令的范例。这个寄存器设置命令“SetR”可以连续设置一个或多个寄存器。在此假设,这个寄存器设置命令的语法为SetR(GID,O,N,V1,…,VN),其中GID表示寄存器组的组号,O表示在一个寄存器组内部的偏移,N表示寄存器数量,而V1,…,VN分别表示这N个寄存器的值。另外假设,在执行编程码的过程中,中央处理器110可以产生表4所示多个原始命令。在表4中,Draw_command表示绘图命令。
表4:中央处理器110所产生的原始命令及其产生顺序
顺序 |
原始命令 |
1 |
SetR(2,3,2,0x22221111,0x22222222) |
2 |
SetR(3,3,2,0x33333333,0x33334444) |
3 |
SetR(3,1,1,0x33331111) |
4 |
SetR(3,5,1,0x33335555) |
5 |
Draw_command |
在第二实施例中,中央处理器110可以依照表4所示多个原始寄存器设置命令的设置目标的地址,将这些原始寄存器设置命令进行排序。举例来说,中央处理器110可以依照升幂(升序)方式排序表4所示原始寄存器设置命令。排序后的原始命令为表5。
表5:原始命令经排序后的新顺序
原始顺序 |
新顺序 |
原始命令 |
1 |
1 |
SetR(2,3,2,0x22221111,0x22222222) |
3 |
2 |
SetR(3,1,1,0x33331111) |
2 |
3 |
SetR(3,3,2,0x33333333,0x33334444) |
4 |
4 |
SetR(3,5,1,0x33335555) |
5 |
5 |
Draw_command |
在完成排序后,中央处理器110可以将设置目标的地址为连续地址的多个寄存器的多个“第一原始寄存器设置命令”(亦即,具有地址连续性的原始寄存器设置命令)合并为一个经融合寄存器设置命令。举例来说,表5所示新顺序3至4的这些原始寄存器设置命令,其设置目标的地址为连续地址的三个寄存器(亦即,“在组号3的寄存器组内,偏移3、4与5的三个寄存器”)。表5所示新顺序3至4的原始寄存器设置命令的设置目标的地址为连续地址的三个寄存器,因此中央处理器110可以将表5所示新顺序3至4的这些原始寄存器设置命令合并为一个经融合寄存器设置命令“SetR(3,3,3,0x33333333,0x33334444,0x33335555)”。
融合后的命令为表6。从表6可以看出,中央处理器110传输给协同处理器130的寄存器设置命令的数量可以被有效减少。因此,中央处理器110与协同处理器130之间的总线的频宽可以更有效率。另一方面,因为这些寄存器设置命令的数量被减少,协同处理器130解析这些寄存器设置命令的负担可以被有效减轻,进而提升协同处理器130的命令处理速度和效能。
表6:原始命令与经融合寄存器设置命令
以下将说明第三实施例。第三实施例亦采用“排序合并法”。在第三实施例中,带掩码的寄存器设置命令“SetRMask”与未带掩码的寄存器设置命令“SetR”将被用来作为所述原始寄存器设置命令的范例。在此假设,在执行编程码的过程中,中央处理器110可以产生表7所示多个原始命令。在表7中,Draw_command表示绘图命令。
表7:中央处理器110所产生的原始命令及其产生顺序
在第三实施例中,中央处理器110可以依照表7所示多个原始寄存器设置命令的设置目标的地址,将这些原始寄存器设置命令进行排序。举例来说,中央处理器110可以依照升幂(升序)方式排序表7所示原始寄存器设置命令。排序后的原始命令为表8。
表8:原始命令经排序后的新顺序
在完成排序后,中央处理器110可以进行“第一合并操作”,以将表8所示这些原始寄存器设置命令整理为一个中间命令群(如下述表9所示)。其中,所述“第一合并操作”包括:中央处理器110可以将在表8所示这些原始寄存器设置命令中设置目标的地址为相同一个寄存器的多个设置命令合并为一个经合并寄存器设置命令。所述:第一合并操作:可以参照表2与表3的相关说明去类推,故不再赘述。所述“第一合并操作”融合后的命令为表9。从表9可以看出,寄存器设置命令的数量可以被有效减少。
表9:原始命令与经合并寄存器设置命令
在完成“第一合并操作”后,中央处理器110可以进行“第二合并操作”,以将表9所示中间命令群整理为经融合命令群(如下述表10所示)。其中,所述“第二合并操作”包括:中央处理器110可以将在表9所示中间命令群中,设置目标的地址为连续地址的多个寄存器的多个寄存器设置命令(若命令为带掩码的寄存器设置命令“SetRMask”,则其掩码需为“0xFFFFFFFF”)合并为一个经融合寄存器设置命令。所述“第二合并操作”可以参照表5与表6的相关说明去类推,故不再赘述。
表10:原始命令与经融合寄存器设置命令
所述“第二合并操作”合并后的命令为表10。从表10可以看出,中央处理器110传输给协同处理器130的寄存器设置命令的数量可以被有效减少(从29个命令减少为5个命令)。因此,中央处理器110与协同处理器130之间的总线的频宽可以更有效率。另一方面,因为这些寄存器设置命令的数量被减少,协同处理器130解析这些寄存器设置命令的负担可以被有效减轻,进而提升协同处理器130的命令处理速度和效能。
以下将说明第四实施例。第四实施例将采用“寄存器缓冲区法”。中央处理器110可以初始化至少一个缓冲区,其中所述至少一个缓冲区是以一对一方式对应于协同处理器130的寄存器。举例来说,若协同处理器130有10个寄存器,则中央处理器110可以初始化10个缓冲区。这些缓冲区可以被设置在存储器120与(或)中央处理器110的快取存储器(未绘示)。
在第四实施例中,带掩码的寄存器设置命令“SetRMask”与未带掩码的寄存器设置命令“SetR”将被用来作为所述原始寄存器设置命令的范例。在此假设,在执行编程码的过程中,中央处理器110可以产生表7所示多个原始命令。为了方便解说,在此假设协同处理器130的这些寄存器可以被划分为三个寄存器组(组号分别为1、2与3),其中每个寄存器组具有7个寄存器。因此,中央处理器110可以初始化3*7=21个缓冲区,如表11所示。每一个缓冲区具有掩码栏位与值栏位。
表11:中央处理器110的经初始化的缓冲区
中央处理器110可以伪执行表7所示这些原始寄存器设置命令,以将这些原始寄存器设置命令的多个设置值对应地填入表11所示这些缓冲区。举例来说,中央处理器110可以伪执行表7所示顺序“1”的原始寄存器设置命令SetRMask(1,2,0x000000FF,0x00000078),以将“0x000000FF”与“0x00000078”分别并入组号1且偏移2的缓冲区的掩码栏位与值栏位。然后中央处理器110可以伪执行表7所示顺序“2”的原始寄存器设置命令SetRMask(2,0,0xFFF00000,0x87600000),以将“0xFFF00000”与“0x87600000”分别并入组号2且偏移0的缓冲区的掩码栏位与值栏位。以此类推,中央处理器110可以伪执行表7所示顺序“3”、“4”与“5”的原始寄存器设置命令,以将这些原始寄存器设置命令的掩码与值分别并入表11所示这些缓冲区的掩码栏位与值栏位。在中央处理器110伪执行表7所示顺序“1”至“5”后,中央处理器110的所述21个缓冲区的内容如表12所述。
表12:中央处理器110伪执行表7所示顺序“1”至“5”后的缓冲区
以此类推,中央处理器110可以伪执行表7所示顺序“1”至“28”的原始寄存器设置命令,以将这些原始寄存器设置命令的掩码与值分别并入表11所示这些缓冲区的掩码栏位与值栏位。在中央处理器110伪执行表7所示顺序“1”至“28”后,中央处理器110的所述21个缓冲区的内容如表13所示。
表13:中央处理器110伪执行表7所示顺序“1”至“28”后的缓冲区
在完成对表7所示所有原始寄存器设置命令的伪执行后,中央处理器110可以扫描中央处理器110的所述21个缓冲区(如表13所示),以将在这些缓冲区中被填入设置值的相同一个缓冲区转换为一个经融合寄存器设置命令(“SetRMask”或“SetR”),以及(或是)将在这些缓冲区中被填入设置值且连续地址的多个缓冲区转换为所述至少一个经融合寄存器设置命令(“SetRMask”或“SetR”)。
举例来说,表13所示组号1且偏移2的缓冲区被填入设置值,因此中央处理器110可以将这个相同缓冲区的掩码栏位与值栏位转换为一个经融合寄存器设置命令SetRMask(1,2,0xF3FFFFFF,0x12345678)。表13所示组号1且偏移5的缓冲区被填入设置值,因此中央处理器110可以将这个相同缓冲区的掩码栏位与值栏位转换为一个经融合寄存器设置命令SetRMask(1,5,0xFF07F0F8,0x12045078)。
表13所示组号2且偏移0至4的五个缓冲区被填入设置值,且这五个缓冲区的地址为连续,且这五个缓冲区的掩码栏位皆为“0xFFFFFFFF”(亦即,这个缓冲区的所有位都被设置了值),因此中央处理器110可以将这五个缓冲区转换为未带掩码的一个经融合寄存器设置命令SetR(2,0,5,0x87654321,0x12345678,0xAABBBCCC,0x22221111,0x22222222)。表13所示组号3且偏移1至5的五个缓冲区被填入设置值,且这五个缓冲区的地址为连续,且这五个缓冲区的掩码栏位皆为“0xFFFFFFFF”,因此中央处理器110可以将这五个缓冲区转换为一个经融合寄存器设置命令SetR(3,1,5,0x33331111,0x22555551,0x33333333,0x33334444,0x33335555)。
因此,中央处理器110可以将表13所示这21个缓冲区转换为4个经融合寄存器设置命令。亦即,中央处理器110可以将表7所示29个原始寄存器设置命令转换为4个经融合寄存器设置命令。因此,中央处理器110传输给协同处理器130的寄存器设置命令的数量可以被有效减少,使得中央处理器110与协同处理器130之间的总线的频宽可以更有效率。另一方面,因为被传输给协同处理器130的这些寄存器设置命令的数量被减少,协同处理器130解析这些寄存器设置命令的负担可以被有效减轻,进而提升协同处理器130的命令处理速度和效能。
以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化,因此本发明的保护范围当以本申请的权利要求书所界定的范围为准。