具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本公开一部分实施例,而不是全部的实施例,不能将它们理解为对本申请保护范围的限定。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
在本公开中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。
如前文所描述,在传统的对目标算子进行搜索的技术方案中,搜索速度慢。
为了至少部分地解决上述问题以及其他潜在问题中的一个或多个,本公开提出了对目标算子进行搜索的方法、计算设备和计算机可读存储介质。在本公开的实施例中,通过基于哈希算法来计算目标算子的第二类型参数(需完全匹配的参数)的哈希值,并基于目标算子的第二类型参数的哈希值来确定对目标算子进行搜索的搜索范围,在所确定的搜索范围中搜索与目标算子相匹配的算子,至少能够大幅缩小搜索范围,减少搜索时间,从而搜索速度快。
进一步地,在本公开的实施例中,搜索范围为表格,并且表格是预先配置的,至少能够加快搜索速度和避免重复计算。
进一步地,在本公开的实施例中,在表格包括多个信息条目的情况下,通过按照多个信息条目中的每一个信息条目所对应的提前编译类型静态形状算子的计算量从小到大的顺序,对多个信息条目进行排序,并在表格中从第一个信息条目开始逐个信息条目地搜索与目标算子相匹配的提前编译类型静态形状算子,能够搜索到最优的提前编译类型静态形状算子。
进一步地,在本公开的实施例中,通过判断目标算子相对于提前编译类型静态形状算子的有效计算占比是否满足约束条件,至少能够避免浪费资源;另外,通过判断目标算子的第二类型参数是否完全匹配提前编译类型静态形状算子的相应的第二类型参数,至少能够避免哈希冲突,提高搜索结果的准确性。
更进一步地,在本公开的实施例中,在存在匹配的提前编译类型静态形状算子的情况下,获取提前编译类型静态形状算子;在不存在匹配的提前编译类型静态形状算子的情况下,获取提前编译类型动态形状算子;在提前编译类型动态形状算子也不存在的情况下,才通过即时编译来获取与目标算子相匹配的算子;至少能够兼顾匹配时间和算子性能两方面的要求。
下面通过几个具体的实施例对本公开进行说明。为了保持本公开实施例的以下说明清楚且简明,可省略已知功能和已知部件的详细说明。当本公开实施例的任一部件在一个以上的附图中出现时,该部件在每个附图中由相同的参考标号表示。
图1图示了根据本公开实施例的用于对目标算子进行搜索的计算设备100的示意图。如图1所示,计算设备100包括参数获取模块120和算子搜索模块140。需要说明的是,计算设备100可以包括未示出的附加部件,本公开的范围在此方面不受限制。
关于参数获取模块120,其被配置为获取目标算子的参数,目标算子的参数可以包括第一类型参数和第二类型参数,其中第一类型参数是无需完全匹配的参数,第二类型参数是需完全匹配的参数。
关于算子搜索模块140,其被配置为对目标算子进行搜索。例如,算子搜索模块140可以被配置为基于哈希算法,计算目标算子的第二类型参数的哈希值;基于目标算子的第二类型参数的哈希值,确定对目标算子进行搜索的搜索范围;以及基于目标算子的参数,在所确定的搜索范围中搜索与目标算子相匹配的算子。
需要说明的是,参数获取模块120和算子搜索模块140取决于实际情况可以实现为硬件、软件或固件,本公开的实施例对此不作限制。
例如,计算设备100可以执行以下结合图2至图3和图5至图7所描述的方法。
图2图示了根据本公开实施例的用于对目标算子进行搜索的方法200的流程图。例如,方法200可以由结合图1所描述的计算设备100执行,也可以由结合图8所描述的电子设备800执行。应当理解的是,方法200还可以包括未示出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
在步骤202,计算设备100获取目标算子的参数,目标算子的参数包括第一类型参数和第二类型参数,其中第一类型参数是无需完全匹配的参数,第二类型参数是需完全匹配的参数。
关于目标算子,其是期望调用的算子。例如,目标算子是用户为了对特定形状的数据进行特定的处理而期望调用的算子。需要说明的是,目标算子的类型可以取决于实际情况而定,本公开的实施例对此不作限制。例如,目标算子可以包括卷积算子、矩阵乘法算子、平均池化算子等。
关于目标算子的参数,其用于指示目标算子的相关信息。例如,可以基于目标算子的参数,对目标算子进行搜索,将目标算子与可调用的算子进行匹配。例如,目标算子的参数可以指示目标算子的名称、算子输入输出数据形状、属性设置等。需要说明的是,目标算子的参数取决于目标算子而定,本公开的实施例对此不作限制。
关于第一类型参数,其指代在对目标算子进行搜索、将目标算子与可调用的算子进行匹配时,无需完全匹配(又称为无需精确匹配)的参数。例如,第一类型参数可以是与算子输入输出数据形状有关的、需向上匹配的参数,其中第一类型参数是向上匹配的参数指代:如果目标算子的第一类型参数小于或者等于可调用的算子的相应的第一类型参数,则目标算子的第一类型参数与可调用的算子的相应的第一类型参数匹配。需要说明的是,取决于实际情况,第一类型参数可以是与算子输入输出数据形状有关的参数中的部分或全部,本公开的实施例对此不作限制。还需要说明的是,取决于实际情况,第一类型参数也可以是与目标算子的其他相关信息有关的、通过其他匹配规则进行匹配的参数,本公开的实施例对此不作限制。另外,第一类型参数可以参考后续结合图4A和图4B所描述的实施例,在此不再赘述。
关于第二类型参数,其指代在对目标算子进行搜索、将目标算子与可调用的算子进行匹配时,需完全匹配(又称为需精确匹配)的参数。例如,第一类型参数可以是与算子的名称、属性设置有关的参数。例如,如果目标算子的第二类型参数与可调用的算子的相应的第二类型参数相同,则目标算子的第二类型参数与可调用的算子的相应的第二类型参数匹配。需要说明的是,取决于实际情况,第二类型参数也可以是与目标算子的其他相关信息有关的参数,本公开的实施例对此不作限制。例如,第二类型参数可以是与算子输入输出数据形状有关的参数中的部分。另外,第二类型参数可以参考后续结合图4A和图4B所描述的实施例,在此不再赘述。
关于获取目标算子的参数,其例如可以包括:计算设备100接收输入信息,从输入信息中解析出目标算子的参数。例如,计算设备100可以从所接收的与目标算子相关的算子描述符中,基于预设的参数分类规则,分别解析出目标算子的第一类型参数和第二类型参数。
在步骤204,计算设备100基于哈希算法,计算目标算子的第二类型参数的哈希值。
关于哈希算法,其又称为散列算法,可以将任意长度的关键字映射为一个固定长度的哈希值,从而实现数据的压缩。例如,哈希算法可以包括以下至少一项:直接定址法、数字分析法、平方取中法、折叠法、32位循环冗余校验、SpiHash、MurMurHash、CityHash、xxHash。需要说明的是,上述所列举的哈希算法仅是示例性的,而不是对本公的限制。
关于第二类型参数的哈希值,其指代基于哈希算法将第二类型参数所映射成的哈希值。例如,第二类型参数的哈希值的数据量显著小于第二类型参数的数据量。例如,相同的第二类型参数映射成相同的哈希值,不同的第二类型参数通常映射成不同的哈希值。例如,第二类型参数的哈希值可以参考后续结合图4A和图4B所描述的实施例,在此不再赘述。
关于计算目标算子的第二类型参数的哈希值,其例如可以包括:计算设备100将目标算子的多个第二类型参数映射成一个哈希值。需要说明的是,计算目标算子的第二类型参数的哈希值的过程取决于哈希算法而定,本公开的实施例对此不作限制。
在步骤206,计算设备100基于目标算子的第二类型参数的哈希值,确定对目标算子进行搜索的搜索范围。
关于搜索范围,其是对与目标算子相匹配的算子进行搜索的范围。例如,搜索范围可以为表格。例如,表格与特定的哈希值相关联,并且表格可以包括可调用的算子的集合中的部分可调用的算子的所对应的信息条目,该部分可调用的算子的第二类型参数的哈希值均与该特定的哈希值相同。信息条目可以用于目标算子与可调用的算子的匹配,信息条目至少包括可调用的算子的参数。例如,表格可以是预先配置的,也可以是实时配置的,本公开的实施例对此不作限制。需要说明的是,在表格是预先配置的情况下,至少能够加快搜索速度和避免重复计算。还需要说明的是,搜索范围取决于实际情况也可以采用表格之外的其他形式,本公开的实施例对此不作限制。另外,关于如何划分表格可以参考后续结合图3、图4A和图4B所描述的实施例。
关于确定对目标算子进行搜索的搜索范围。例如,计算设备100可以将搜索范围确定为与目标算子的第二类型参数的哈希值相关联的表格。例如,与目标算子的第二类型参数的哈希值相关联的表格中包括可调用的算子的集合中的部分可调用的算子的所对应的信息条目,该部分可调用的算子的第二类型参数的哈希值均与目标算子的第二类型参数的哈希值相同。
在步骤208,计算设备100基于目标算子的参数,在所确定的搜索范围中搜索与目标算子相匹配的算子。
关于所确定的搜索范围,其不再是可调用的算子的总集合所对应的范围,而是可调用的算子的总集合中的部分可调用的算子所对应的范围,即所确定的范围是可调用的算子的总集合所对应的范围的子范围。例如,所确定的搜索范围显著小于可调用的算子的总集合所对应的范围。
例如,与目标算子相匹配的算子为与目标算子相匹配的提前编译类型静态形状算子。例如,计算设备100可以基于目标算子的第一类型参数和第二类型参数,在所确定的搜索范围中搜索与目标算子相匹配的提前编译类型静态形状算子。关于提前编译类型静态形状算子,其中提前编译类型指代算子是提前编译生成的算子,静态形状指代算子是被配置为仅能处理一种特定形状的数据的算子。
另外,关于在所确定的搜索范围中搜索与目标算子相匹配的算子可以参考后续结合图5所描述的实施例,在此不再赘述。
在本公开的实施例中,通过基于哈希算法来计算目标算子的第二类型参数(需完全匹配的参数)的哈希值,并基于目标算子的第二类型参数的哈希值来确定对目标算子进行搜索的搜索范围,在所确定的搜索范围中搜索与目标算子相匹配的算子,至少能够大幅缩小搜索范围,减少搜索时间,从而搜索速度快。
图3图示了根据本公开实施例的划分表格的方法300的流程图。例如,方法300可以由结合图1所描述的计算设备100执行,也可以由结合图8所描述的电子设备800执行。应当理解的是,方法300还可以包括未示出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
在步骤302,计算设备100基于哈希算法,计算多个提前编译类型静态形状算子的第二类型参数的哈希值。
例如,计算多个提前编译类型静态形状算子的第二类型参数的哈希值的哈希算法及其过程与计算目标算子的第二类型参数的哈希值的哈希算法及其过程相同。
关于哈希算法和计算多个提前编译类型静态形状算子的第二类型参数的哈希值,类似于步骤204的相关描述,在此不再赘述。
在步骤304,计算设备100基于多个提前编译类型静态形状算子的第二类型参数的哈希值,将多个提前编译类型静态形状算子中的每个提前编译类型静态形状算子所对应的信息条目划分到多个表格中。
关于信息条目,其例如包括提前编译类型静态形状算子的名称、第一类型参数、第二类型参数以及第二类型参数的哈希值。需要说明的是,信息条目可以取决于实际情况而定,本公开的实施例对此不作限制。例如,信息条目还可以包括提前编译类型静态形状算子的计算量。
关于将多个提前编译类型静态形状算子中的每个提前编译类型静态形状算子所对应的信息条目划分到多个表格中,其例如包括:将第二类型参数的哈希值相同的提前编译类型静态形状算子所对应的信息条目划分到相同的表格中;响应于多个表格中的任一表格包括多个信息条目,计算任一表格所包括的多个信息条目中的每一个信息条目所对应的提前编译类型静态形状算子的计算量;以及按照多个信息条目中的每一个信息条目所对应的提前编译类型静态形状算子的计算量从小到大的顺序,对多个信息条目进行排序。需要说明的是,关于计算提前编译类型静态形状算子的计算量,可以参考后续结合图5所描述的实施例,在此不再赘述。例如,在一个示例中,响应于表格中的多个信息条目已进行排序,在表格中从第一个信息条目开始逐个信息条目地搜索与目标算子相匹配的提前编译类型静态形状算子。
需要说明的是,按照计算量从小到大的顺序来对多个信息条目进行排序仅是示例性的,而不是对本公开的限制。例如,还可以按照计算量从大到小的顺序来对多个信息条目进行排序。还需要说明的是,从第一个信息条目开始逐个信息条目地搜索仅是示例性的,而不是对本公开的限制。例如,还可以采用折半查找算法在已排序的表格中进行搜索。例如,折半查找算法可以包括差值查找和斐波那契查找。
在本公开的实施例中,在表格包括多个信息条目的情况下,按照多个信息条目中的每一个信息条目所对应的提前编译类型静态形状算子的计算量从小到大的顺序,对多个信息条目进行排序,并在表格中从第一个信息条目开始逐个信息条目地搜索与目标算子相匹配的提前编译类型静态形状算子,能够搜索到最优的提前编译类型静态形状算子。
图4A和图4B图示了根据本公开实施例的第一类型参数、第二类型参数以及第二类型参数的哈希值的示意图。在图4A和4B中,序号1至序号8分别对应不同的算子。需要说明的是,图4A和4B中的算子可以是目标算子,也可以是可调用的提前编译类型静态形状算子。
在图4A中,序号1至序号4所对应的算子均是矩阵乘法算子,算子的第二类型参数对应于op_type、transpose_a、transpose_b、matrix_a_data_type、matrix_b_data_type和output_data_type(参考图4A中阴影背景部分),第一类型参数对应于matrix_a_shape和matrix_b_shape,哈希值对应于hash_value(参考图4A中斜线背景部分)。如图4A所示,由于序号1所对应的算子的第二类型参数与序号2所对应的算子的第二类型参数相同,所以序号1所对应的算子的哈希值和序号2所对应的算子的哈希值相同,均为a。例如,在序号1所对应的算子和序号2所对应的算子是可调用的提前编译类型静态形状算子的情况下,可以将序号1所对应的算子的信息条目和序号2所对应的算子的信息条目划分到相同的表格中;另外,例如响应于序号1所对应的算子的计算量小于序号2所对应的算子的计算量,序号1所对应的算子的信息条目排序在序号2所对应的算子的信息条目之前。
在图4B中,序号5至序号8所对应的算子均是卷积算子,算子的第二类型参数对应于op_type、dilation、padding、stride、groups、weight_data_type、input_data_type和output_data_type(参考图4B中阴影背景部分),第一类型参数对应于out_channels、in_channels、kernel_size、batch_size、input_height和input_width,哈希值对应于hash_value(参考图4B中斜线背景部分)。如图4B所示,由于序号5所对应的算子的第二类型参数与序号6所对应的算子的第二类型参数相同,所以序号5所对应的算子的哈希值和序号6所对应的算子的哈希值相同,均为d。例如,在序号5所对应的算子和序号6所对应的算子是可调用的提前编译类型静态形状算子的情况下,可以将序号5所对应的算子的信息条目和序号6所对应的算子的信息条目划分到相同的表格中;另外,例如响应于序号5所对应的算子的计算量小于序号6所对应的算子的计算量,序号5所对应的算子的信息条目排序在序号6所对应的算子的信息条目之前。
例如,在序号1至序号8所对应的算子是所有的可调用的提前编译类型静态形状算子的情况下,序号1所对应的算子和序号2所对应的算子划分到第一表格中,序号3所对应的算子划分到第二表格中,序号4所对应的算子划分到第三表格中,序号5所对应的算子和序号6所对应的算子划分到第四表格中,序号7所对应的算子划分到第五表格中,序号8所对应的算子划分到第六表格中,其中第一表格至第六表格是不同的表格。
图5图示了根据本公开实施例的在所确定的搜索范围中搜索与目标算子相匹配的算子的方法500的流程图。
在步骤502,计算设备100基于目标算子的参数,计算目标算子的计算量。
关于目标算子的计算量,其由计算量评价指标进行表示。例如,计算量评价指标可以为乘加累积操作数(Multiply-Accumulate Operations,MACs)。例如,响应于目标算子是卷积算子,目标算子的MACs为输出通道*批尺寸*输出高度*输出宽度*输入通道*过滤器高度*过滤器宽度;响应于目标算子是矩阵乘法算子,目标算子的MACs为左矩阵高度*左矩阵宽度*右矩阵宽度。需要说明的是,计算量评价指标可以取决于实际情况而定,本公开的实施例对此不作限制。例如,计算量评价指标还可以为浮点运算次数(Floating PointOperations,FLOPs)。
在步骤504,计算设备100基于所确定的表格中的提前编译类型静态形状算子的参数,计算提前编译类型静态形状算子的计算量。
关于提前编译类型静态形状算子的计算量,其由计算量评价指标进行表示。例如,用于表示提前编译类型静态形状算子的计算量的计算量评价指标与用于表示目标算子的计算量的计算量评价指标相同,计算量评价指标的计算方式可以参考目标算子的计算量的相关描述,在此不再赘述。
需要说明的是,提前编译类型静态形状算子的计算量例如可以包括在提前编译类型静态形状算子所对应的信息条目中,在这种情况下,无需重复计算,至少能够减少搜索时间。
在步骤506,计算设备100判断目标算子的计算量是否小于或者等于提前编译类型静态形状算子的计算量。
例如,如果目标算子的计算量小于或者等于提前编译类型静态形状算子的计算量,则继续进行到步骤508。
例如,如果目标算子的计算量大于提前编译类型静态形状算子的计算量,并且在表格已按照提前编译类型静态形状算子的计算量从小到大的顺序对多个信息条目进行了排序的情况下,则计算设备100继续搜索表格中的下一个信息条目。
在步骤508,计算设备100判断目标算子的第一类型参数是否匹配提前编译类型静态形状算子的相应的第一类型参数。
例如,判断目标算子的第一类型参数是否向上匹配提前编译类型静态形状算子的相应的第一类型参数。
例如,如果目标算子的第一类型参数匹配提前编译类型静态形状算子的相应的第一类型参数,则继续进行步骤510。
例如,如果目标算子的第一类型参数不匹配提前编译类型静态形状算子的相应的第一类型参数,并且在表格已按照提前编译类型静态形状算子的计算量从小到大的顺序对多个信息条目进行了排序的情况下,则计算设备100继续搜索表格中的下一个信息条目。
在步骤510,计算设备100将提前编译类型静态形状算子作为候选的、与目标算子相匹配的算子。
需要说明的是,在本公开的实施例中,响应于将提前编译类型静态形状算子作为候选的、与目标算子相匹配的算子,计算设备100可以直接将提前编译类型静态形状算子作为与目标算子相匹配的算子,但这并不是对本公开的限制。例如,计算设备100也可以通过进一步的判断来确定是否将提前编译类型静态形状算子作为与目标算子相匹配的算子,这可以参考后续结合图6所描述的实施例。
图6图示了根据本公开实施例的在所确定的搜索范围中搜索与目标算子相匹配的算子的方法600的流程图。例如,方法600可以由结合图1所描述的计算设备100执行,也可以由结合图8所描述的电子设备800执行。应当理解的是,方法600还可以包括未示出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
在步骤602,计算设备100基于目标算子的计算量和提前编译类型静态形状算子的计算量,计算目标算子相对于提前编译类型静态形状算子的有效计算占比。
关于目标算子相对于提前编译类型静态形状算子的有效计算占比,其为用于指示目标算子的计算量与提前编译类型静态形状算子的计算量之间的相对大小关系的相对计算量评价指标。例如,目标算子相对于提前编译类型静态形状算子的有效计算占比可以计算为目标算子的计算量与提前编译类型静态形状算子的计算量的比值。
需要说明的是,取决于实际情况,也可以采用其他的计算方式来计算目标算子相对于提前编译类型静态形状算子的有效计算占比,本公开的实施例对此不作限制。还需要说明的是,取决于实际情,也可以采用其他的相对计算量评价指标来指示目标算子的计算量与提前编译类型静态形状算子的计算量之间的相对大小关系,本公开的实施例对此不作限制。
在步骤604,计算设备100判断有效计算占比是否满足约束条件。
关于约束条件,其例如可以以特定区间或阈值的方式进行设定。例如,有效计算占比是否满足约束条件可以为有效计算占比是否大于或等于阈值。例如,阈值可以是预先设定的。例如,阈值可以是0.5。需要说明的是,阈值也可以是动态调整的,本公开的实施例对此不作限制。
在步骤606,如果有效计算占比满足约束条件,则计算设备100判断目标算子的第二类型参数是否完全匹配提前编译类型静态形状算子的相应的第二类型参数。
在步骤608,如果目标算子的第二类型参数完全匹配提前编译类型静态形状算子的相应的第二类型参数,则计算设备100获取提前编译类型静态形状算子作为与目标算子相匹配的算子。
例如,如果目标算子的第二类型参数完全匹配提前编译类型静态形状算子的相应的第二类型参数,则计算设备100调用提前编译类型静态形状算子。
在本公开的实施例中,通过判断目标算子相对于提前编译类型静态形状算子的有效计算占比是否满足约束条件,至少能够避免浪费资源;另外,虽然搜索范围是基于目标算子的第二类型参数的哈希值确定的,但存在哈希冲突(不同的关键字被映射为了相同的哈希值)的可能性,通过判断目标算子的第二类型参数是否完全匹配提前编译类型静态形状算子的相应的第二类型参数,至少能够避免哈希冲突,提高搜索结果的准确性。
另外,响应于所有的提前编译类型静态形状算子均不与目标算子相匹配,计算设备100还可以获取提前编译类型动态形状算子作为与目标算子相匹配的算子或通过即时编译来获取与目标算子相匹配的算子。以下结合图7所描述的实施例进行说明。
图7图示了根据本公开实施例的获取与目标算子相匹配的算子的方法700的流程图。例如,方法700可以由结合图1所描述的计算设备100执行,也可以由结合图8所描述的电子设备800执行。应当理解的是,方法700还可以包括未示出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
在步骤702,响应于所确定的表格中的所有的提前编译类型静态形状算子均不与目标算子相匹配,计算设备100判断是否存在提前编译类型动态形状算子。
关于提前编译类型动态形状算子,其中动态形状指代算子是被配置为能够处理非特定形状的数据的算子。例如,提前编译类型动态形状算子能够处理任意形状的数据。又例如,提前编译类型动态形状算子能够处理在形状的特定维度上任意大小的数据。需要说明的是,提前编译类型动态形状算子相对于提前编译类型静态形状算子通常性能较差。
在步骤704,如果存在提前编译类型动态形状算子,则计算设备100获取提前编译类型动态形状算子作为与目标算子相匹配的算子。
在步骤706,如果不存在提前编译类型动态形状算子,则计算设备100通过即时编译来获取与目标算子相匹配的算子。
例如,计算设备100通过即时编译来生成与目标算子相匹配的算子。需要说明的是,通过即时编译来获取与目标算子相匹配的算子相对于获取提前编译类型静态形状算子或获取提前编译类型动态形状算子通常时间较长。
在本公开的实施例中,在存在匹配的提前编译类型静态形状算子的情况下,获取提前编译类型静态形状算子;在不存在匹配的提前编译类型静态形状算子的情况下,获取提前编译类型动态形状算子;在提前编译类型动态形状算子也不存在的情况下,才通过即时编译来获取与目标算子相匹配的算子;至少能够兼顾匹配时间和算子性能两方面的要求。
另外,在本公开的一个实施例,还提供了一种计算设备,计算设备包括:至少一个处理器;以及至少一个存储器,至少一个存储器被耦合到至少一个处理器并且存储用于由至少一个处理器执行的指令,指令当由至少一个处理器执行时,使得计算设备执行如上所述的匹配算子的方法。
另外,在本公开的一个实施例,还提供了一种计算机可读存储介质,其上存储有计算机程序代码,计算机程序代码在被运行时执行如上所述的匹配算子的方法。
图8图示了用于实现本公开实施例的示例性电子设备800的框图。例如,如图1所示的计算设备100可以由电子设备800来实施。如图所示,电子设备800包括中央处理单元(CPU)802,其可以根据存储在只读存储器(ROM)804中的计算机程序指令或者从存储单元816加载到随机存取存储器(RAM)806中的计算机程序指令,来执行各种适当的动作和处理。在随机存取存储器806中,还可存储电子设备800操作所需的各种程序和数据。中央处理单元802、只读存储器804以及随机存取存储器806通过总线808彼此相连。输入/输出(I/O)接口810也连接至总线808。
电子设备800中的多个部件连接至输入/输出接口810,包括:输入单元812,例如键盘、鼠标、麦克风等;输出单元814,例如各种类型的显示器、扬声器等;存储单元816,例如磁盘、光盘等;以及通信单元818,例如网卡、调制解调器、无线通信收发机等。通信单元818允许设备800通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
上文所描述的各个过程和处理,例如方法200、300、500、600和700,可由中央处理单元802执行。例如,在一些实施例中,方法200、300、500、600和700可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元816。在一些实施例中,计算机程序的部分或者全部可以经由只读存储器804和/或通信单元818而被载入和/或安装到电子设备800上。当计算机程序被加载到随机存取存储器806并由中央处理单元802执行时,可以执行上文描述的方法200、300、500、600和700的一个或多个动作。
本公开涉及方法、装置、系统、电子设备、计算机可读存储介质和/或计算机程序产品。计算机程序产品可以包括用于执行本公开的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是——但不限于——电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘计算设备。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。