一种数据预取方法及终端设备与流程

文档序号:19879088发布日期:2020-02-08 06:46阅读:270来源:国知局
一种数据预取方法及终端设备与流程

本申请涉及终端技术领域,尤其涉及一种数据预取方法及终端设备。



背景技术:

随着终端设备的普及,各种应用程序(application)不断涌现,比如腾讯聊天软件(qq)、微信、邮箱、王者荣耀等,以满足用户的多样性需求。通常,终端设备中的这些应用程序运行在中央处理器(centralprocessingunit,cpu)上,以实现相应的功能。

因此,应用程序在cpu上的运行速度对用户的体验有很大影响。以王者荣耀为例,如果cpu的性能较差,游戏画面容易出现卡顿,流畅性差,导致用户体验差。因此,cpu性能的提升是各个厂家都面临的问题。



技术实现要素:

本申请实施例提供一种数据预取方法和终端设备,用以提升cpu的性能。

第一方面,本申请实施例提供了一种终端设备,所述终端设备例如为智能手机、ipad等。所述终端设备包括cpu核组、三级缓存、预取器和存储器,其中,所述cpu核组,用于向所述三级缓存的第一缓存下发数据访问请求,所述数据访问请求中携带有第一地址,所述第一地址为所述cpu核组当前需要访问的数据在所述存储器中的地址;所述预取器,用于根据第一预取算法、所述第一地址和历史数据访问请求,生成第一预取地址;根据所述第一预取地址从所述存储器中与所述第一预取地址对应的数据加载到所述第一缓存中。

在本申请实施例中,终端设备中的预取器可以根据cpu核组当前需要的数据在存储器中的第一地址、历史数据访问请求和预取算法,生成预取地址,并将与生成的预取地址对应的数据加载到第一缓存中,当cpu核组后续需要与预取地址对应的数据时,可以从第一缓存中读取,无需从存储器中读取,有助于提高cpu核组的运行速率。

在一种可能的实现方式中,所述预取器在用于根据第一预取算法、所述第一地址和历史访问请求生成第一预取地址时,包括:所述预取器,用于根据所述第一预取算法和历史数据访问请求中携带的地址,生成第一地址偏移量;所述预取器,用于根据所述第一地址偏移量和所述第一地址生成所述第一预取地址。

在本申请实施例中,终端设备中的预取器根据历史数据访问请求和预取算法计算地址偏移量,然后根据地址偏移量和cpu核组当前需要访问的数据在存储器中的第一地址确定预取地址。通过这种方式,预取器可以实时的根据当前需要访问的数据在存储器中的第一地址确定预取地址,并将与预取地址对应的数据加载到第一缓存中,当cpu核组后续需要访问所述与预取地址对应的数据时,可以从第一缓存中读取,而无需从存储器中读取,提高了cpu核组的运行速率。

在一种可能的实现方式中,所述第一缓存为所述三级缓存中的第三级缓存。

在本申请实施例中,终端设备中的三级缓存中的最后一级缓存即第三级缓存具有预取能力,即预取器可以根据最后一级缓存的历史数据访问请求、cpu核组当前需要访问的数据在存储器中的第一地址、第一预取算法生成预取地址,并将与预取地址对应的数据加载到最后一级缓存中,当cpu核组后续需要访问所述与预取地址对应的数据时,可以从最后一级缓存中读取,而无需从存储器中读取,提高了cpu核组的运行速率。

在一种可能的实现方式中,所述cpu核组,用于向所述三级缓存的第一缓存下发数据访问请求,包括:所述cpu核组,用于向所述三级缓存中的第一级缓存下发数据访问请求;其中,所述第一级缓存的缓存控制器,用于确定第一级缓存中没有与第一地址相对应的数据时,将所述数据访问请求发送给第二级缓存;所述第二级缓存的缓存控制器,用于确定第二级缓存中没有与第一地址相对应的数据时,将所述数据访问请求发送给第三级缓存;或者所述cpu核组,用于向所述三级缓存的第一缓存下发数据访问请求,包括:所述cpu核组,用于向所述三级缓存中的第一级缓存下发数据访问请求;其中,所述第一级缓存的缓存控制器,用于确定第一级缓存中没有与第一地址相对应的数据时,将所述数据访问请求发送给第二级缓存;所述第二级缓存的缓存控制器,用于确定二级缓存中没有与第一地址相对应的数据时,向所述cpu核组反馈响应信息;所述cpu核组,在接收到所述响应信息之后,向所述第三级缓存下发所述数据访问请求。

在本申请实施例中,所述cpu核组向所述三级缓存的第一缓存下发数据访问请求可以有两种方式。方式一:cpu核组向三级缓存中的第一级缓存下发数据访问请求;当第一级缓存中没有与第一地址相对应的数据时,将所述数据访问请求发送给第二级缓存;当所述第二级缓存中没有与第一地址相对应的数据时,将所述数据访问请求发送给第三级缓存;方式二:cpu核组向三级缓存中的第一级缓存下发数据访问请求;当第一级缓存中没有与第一地址相对应的数据时,将所述数据访问请求发送给第二级缓存;当第二级缓存中没有与第一地址相对应的数据时,向所述cpu核组反馈响应信息;cpu核组在接收到所述响应信息之后,向第三级缓存下发所述数据访问请求。终端设备中的三级缓存中的最后一级缓存即第三级缓存具有预取能力,即预取器可以根据最后一级缓存的历史数据访问请求、cpu核组当前需要访问的数据在存储器中的第一地址、第一预取算法生成预取地址,并将与预取地址对应的数据加载到最后一级缓存中,当cpu核组后续需要访问所述与预取地址对应的数据时,可以从最后一级缓存中读取,而无需从存储器中读取,提高了cpu核组的运行速率。

在一种可能的实现方式中,所述预取器存储有多种预取算法,所述预取器根据所述终端设备当前运行的应用程序从所述多种预取算法中确定所述第一预取算法。

在本申请实施例中,终端设备中的预取器中有多种预取算法,终端设备可以根据当前运行的应用程序从多种预取算法中确定一种预取算法。在这种方式中,终端设备运行不同的应用程序时,可以采用不用的预取算法,较为灵活。

在一种可能的实现方式中,所述预取器根据数据预取时的命中率或未命中率确定所述第一预取算法;其中,所述命中率为预取数据中被所述cpu核组访问的数据占所述预取数据的比例,所述未命中率为所述预取数据中被未被所述cpu核组访问的数据占所述预取数据的比例。

在本申请实施例中,终端设备可以根据数据预取时的命中率或未命中率确定所述第一预取算法。比如,终端设备可以选择命中率较高(比如高于预设命中率)的预取算法为第一预取算法,或者选择未命中率较低(比如低于预设未命中率)的预取算法为第一预取算法。通过这种方式,终端设备可以选择命中率较高的预取算法,即预取数据中被所述cpu核组访问的数据占所述预取数据的比例较大,有助于提升了cpu核组的运行速率。

在一种可能的实现方式中,所述预取器中有n个预取算法,其中每个预取算法在一个周期内生效,所述预取器还用于:在n个周期中的每一个周期内,根据在所述每一个周期内生效的预取算法进行数据预取;确定所述n个周期中每一个周期内生效的预取算法进行数据预取的n个第一命中率;确定所述n第一命中率中最大的第一命中率,确定所述最大的第一命中率对应的预取算法为所述第一预取算法;其中,所述第一命中率为所述预取器根据一个周期内生效的预取算法将预取数据存储到所述第一缓存后,所述预取数据中被所述cpu核组访问的数据占所述预取数据的比例。

在本申请实施例中,终端设备中的预取器中有n个预取算法,其中每个预取算法在一个周期内生效,预取器可以选择n个预取算法中命中率最高的预取算法为第一预取算法。通过这种方式,终端设备可以采用一个命中率较高的预取算法进行数据预取,即预取数据中被所述cpu核组访问的数据占所述预取数据的比例较大,有助于提升了cpu核组的运行速率。

在一种可能的实现方式中,所述存储器为ddrsdram。

在本申请实施例中,存储器可以有多种类型,ddrsdram只是一种举例,本申请实施例对此不作限定。

第二方面,本发明实施例提供了一种数据预取的方法,该方法适用于终端设备中。终端设备例如为智能手机、ipad等。方法包括:向三级缓存的第一缓存下发数据访问请求,所述数据访问请求中携带有第一地址,所述第一地址为所述cpu核组当前需要访问的数据在所述存储器中的地址;根据第一预取算法、所述第一地址和历史数据访问请求,生成第一预取地址;根据所述第一预取地址从所述存储器中将与所述第一预取地址对应的数据加载到所述第一缓存中。

在一种可能的实现方式中,所述根据第一预取算法、所述第一地址和历史访问请求生成第一预取地址,包括:根据所述第一预取算法和历史数据访问请求中携带的地址,生成第一地址偏移量;根据所述第一地址偏移量和所述第一地址生成第一预取地址。

在一种可能的实现方式中,所述第一缓存为所述三级缓存中的第三级缓存。

在一种可能的实现方式中,向所述三级缓存的第一缓存下发数据访问请求,包括:向所述三级缓存中的第一级缓存下发数据访问请求;其中,所述第一级缓存的缓存控制器,用于确定第一级缓存中没有与第一地址相对应的数据时,将所述数据访问请求发送给第二级缓存;所述第二级缓存的缓存控制器,用于确定第二级缓存中没有与第一地址相对应的数据时,将所述数据访问请求发送给第三级缓存;或者向所述三级缓存的第一缓存下发数据访问请求,包括:向所述三级缓存中的第一级缓存下发数据访问请求;其中,所述第一级缓存的缓存控制器,用于确定第一级缓存中没有与第一地址相对应的数据时,将所述数据访问请求发送给第二级缓存;所述第二级缓存的缓存控制器,用于确定二级缓存中没有与第一地址相对应的数据时,生成响应信息;接收到所述响应信息,向所述三级缓存中的第三级缓存下发所述数据访问请求。

在一种可能的实现方式中,在根据第一预取算法、所述第一地址和历史数据访问请求,生成第一预取地址之前,所述方法还包括:根据终端设备当前运行的应用程序从所述多种预取算法中确定所述第一预取算法。

在一种可能的实现方式中,所述终端根据数据预取时的命中率或未命中率确定所述第一预取算法,其中,所述命中率为预取数据中被所述cpu核组访问的数据占所述预取数据的比例,所述未命中率为所述预取数据中被未被所述cpu核组访问的数据占所述预取数据的比例。

在一种可能的实现方式中,终端中有n个预取算法,其中每个预取算法在一个周期内生效,所述方法还包括:在n个周期中的每一个周期内,根据在所述每一个周期内生效的预取算法进行数据预取;确定所述n个周期中每一个周期内生效的预取算法进行数据预取的n个第一命中率;确定所述n第一命中率中最大的第一命中率,确定所述最大的第一命中率对应的预取算法为所述第一预取算法;其中,所述第一命中率为所述预取器根据一个周期内生效的预取算法将预取数据存储到所述第一缓存后,所述预取数据中被所述cpu核组访问的数据占所述预取数据的比例。

在一种可能的实现方式中,所述存储器为ddrsdram。

第三方面,本发明实施例提供了一种终端设备,终端设备例如为智能手机、ipad等。所述终端设备包括cpu核组、至少一级缓存、预取器和存储器,其中,所述cpu核组,用于向所述至少一级缓存的第一缓存下发数据访问请求,所述数据访问请求中携带有第一地址,所述第一地址为所述cpu核组当前需要访问的数据在所述存储器中的地址;所述预取器,用于根据第一预取算法、所述第一地址和历史数据访问请求,生成第一预取地址;根据所述第一预取地址从所述存储器中与所述第一预取地址对应的数据加载到所述第一缓存中。

在本申请实施例中,终端设备具有至少一级缓存,比如一级缓存、二级缓存、三级缓存、四级缓存等。终端设备中的预取器可以根据cpu核组当前需要的数据在存储器中的第一地址、历史数据访问请求和预取算法,生成预取地址,并将与生成的预取地址对应的数据加载到第一缓存(至少一级缓存中的某一级缓存)中,当cpu核组后续需要与预取地址对应的数据时,可以从第一缓存中读取,无需从存储器中读取,有助于提高cpu核组的运行速率。

在一种可能的实现方式中,所述预取器,用于根据第一预取算法、所述第一地址和历史访问请求生成第一预取地址,包括:所述预取器,用于根据所述第一预取算法和历史数据访问请求中携带的地址,生成第一地址偏移量;所述预取器,用于根据所述第一地址偏移量和所述第一地址生成所述第一预取地址。

在本申请实施例中,终端设备中的预取器可以根据历史数据访问请求和预取算法计算地址偏移量,然后根据地址偏移量和cpu核组当前需要访问的数据在存储器中的第一地址确定预取地址。通过这种方式,预取器可以实时的根据当前需要访问的数据在存储器中的第一地址确定预取地址,并将与预取地址对应的数据加载到第一缓存中,当cpu核组后续需要访问所述与预取地址对应的数据时,可以从第一缓存中读取,无需从存储器中读取,提高了cpu核组的运行速率。

在一种可能的实现方式中,所述第一缓存为所述至少一级缓存中的最后一级缓存。

在本申请实施例中,终端设备具有至少一级缓存,比如一级缓存、二级缓存、三级缓存、四级缓存等。所述至少一级缓存中的最后一级缓存具有预取能力,即预取器可以根据最后一级缓存的历史数据访问请求、cpu核组当前需要访问的数据在存储器中的第一地址、预取算法生成预取地址,并将与预取地址对应的数据加载到最后一级缓存中,当cpu核组后续需要访问所述与预取地址对应的数据时,可以从最后一级缓存中读取,无需从存储器中读取,提高了cpu核组的运行速率。

在一种可能的实现方式中,所述至少一级缓存包括两级缓存,所述第一缓存为所述两级缓存中的二级缓存;所述cpu核组,用于向所述至少一级缓存的第一缓存下发数据访问请求,包括:所述cpu核组,用于向所述两级缓存中的一级缓存下发数据访问请求;其中,所述一级缓存的缓存控制器,用于确定一级缓存中没有与第一地址相对应的数据时,将所述数据访问请求发送给所述二级缓存;或者所述cpu核组,用于向所述至少一级缓存的第一缓存下发数据访问请求,包括:所述cpu核组,用于向所述两级缓存中的一级缓存下发数据访问请求;其中,所述一级缓存的缓存控制器,用于确定一级缓存中没有与第一地址相对应的数据时,向所述cpu核组反馈响应信息;所述cpu核组,在接收到所述响应信息之后,向所述两级缓存中的二级缓存下发所述数据访问请求。

在本申请实施例中,以至少一级缓存包括两级缓存为例,第一缓存为两级缓存中的最后一级缓存即二级缓存,cpu核组向二级缓存下发数据访问请求可以有两种方式。方式一:cpu核组向二级缓存中的一级缓存下发数据访问请求;当一级缓存中没有与第一地址相对应的数据时,将所述数据访问请求发送给二级缓存;方式二:cpu核组向二级缓存中的一级缓存下发数据访问请求;当一级缓存中没有与第一地址相对应的数据时,向所述cpu核组反馈响应信息;cpu核组在接收到所述响应信息之后,向二级缓存下发所述数据访问请求。终端设备中的两级缓存中的最后一级缓存即二级缓存具有预取能力,即预取器可以根据最后一级缓存的历史数据访问请求、cpu核组当前需要访问的数据在存储器中的第一地址、预取算法生成预取地址,并将与预取地址对应的数据加载到最后一级缓存中,当cpu核组后续需要访问所述与预取地址对应的数据时,可以从最后一级缓存中读取,无需从存储器中读取,提高了cpu核组的运行速率。

在一种可能的实现方式中,所述预取器存储有多种预取算法,所述预取器根据所述终端设备当前运行的应用程序从所述多种预取算法中确定所述第一预取算法。

在本申请实施例中,终端设备中的预取器中有多种预取算法,终端设备可以根据当前运行的应用程序从多种预取算法中确定一种预取算法。在这种方式中,终端设备运行不同的应用程序时,可以采用不用的预取算法,较为灵活。

在一种可能的实现方式中,所述预取器根据数据预取时的命中率或未命中率确定所述第一预取算法;其中,所述命中率为预取数据中被所述cpu核组访问的数据占所述预取数据的比例,所述未命中率为所述预取数据中被未被所述cpu核组访问的数据占所述预取数据的比例。

在本申请实施例中,终端设备可以根据数据预取时的命中率或未命中率确定所述第一预取算法。比如,终端设备可以选择命中率较高(比如高于预设命中率)的预取算法为第一预取算法,或者选择未命中率较低(比如低于预设未命中率)的预取算法为第一预取算法。通过这种方式,终端设备可以选择命中率较高的预取算法,即预取数据中被所述cpu核组访问的数据占所述预取数据的比例较大,有助于提升了cpu核组的运行速率。

在一种可能的实现方式中,所述预取器中有n个预取算法,其中每个预取算法在一个周期内生效,所述预取器还用于:在n个周期中的每一个周期内,根据在所述每一个周期内生效的预取算法进行数据预取;确定所述n个周期中每一个周期内生效的预取算法进行数据预取的n个第一命中率;确定所述n第一命中率中最大的第一命中率,确定所述最大的第一命中率对应的预取算法为所述第一预取算法;其中,所述第一命中率为所述预取器根据一个周期内生效的预取算法将预取数据存储到所述第一缓存后,所述预取数据中被所述cpu核组访问的数据占所述预取数据的比例。

在本申请实施例中,终端设备中的预取器中有n个预取算法,其中每个预取算法在一个周期内生效,预取器可以选择n个预取算法中命中率最高的预取算法为第一预取算法。通过这种方式,终端设备可以采用一个命中率较高的预取算法进行数据预取,即预取数据中被所述cpu核组访问的数据占所述预取数据的比例较大,有助于提升了cpu核组的运行速率。

在一种可能的实现方式中,所述存储器为ddrsdram。

在本申请实施例中,存储器可以有多种类型,ddrsdram只是一种举例,本申请实施例对此不作限定。

第四方面,本发明实施例提供了一种数据预取的方法,该方法适用于终端设备中。终端设备例如为智能手机、ipad等。所述方法包括:向所述至少一级缓存的第一缓存下发数据访问请求,所述数据访问请求中携带有第一地址,所述第一地址为所述cpu核组当前需要访问的数据在所述存储器中的地址;根据第一预取算法、所述第一地址和历史数据访问请求,生成第一预取地址;根据所述第一预取地址从所述存储器中将与所述第一预取地址对应的数据加载到所述第一缓存中。

在一种可能的实现方式中,所述根据第一预取算法、所述第一地址和历史访问请求生成第一预取地址,包括:根据所述第一预取算法和所述历史数据访问请求中携带的地址,生成第一地址偏移量;根据所述第一地址偏移量和所述第一地址生成所述第一预取地址。

在一种可能的实现方式中,所述第一缓存为所述至少一级缓存中的最后一级缓存。

在一种可能的实现方式中,若所述至少一级缓存包括两级缓存,所述第一缓存为所述两级缓存中的二级缓存;向所述至少一级缓存的第一缓存下发数据访问请求,包括:向所述两级缓存中的一级缓存下发数据访问请求;其中,所述一级缓存的缓存控制器,用于确定一级缓存中没有与第一地址相对应的数据时,将所述数据访问请求发送给所述二级缓存;或者向所述至少一级缓存的第一缓存下发数据访问请求,包括:向所述两级缓存中的一级缓存下发数据访问请求;其中,所述一级缓存的缓存控制器,用于确定一级缓存中没有与第一地址相对应的数据时,生成响应信息;基于所述响应信息,向所述两级缓存中的二级缓存下发所述数据访问请求。

在一种可能的实现方式中,在根据第一预取算法、所述第一地址和历史数据访问请求,生成第一预取地址之前,所述方法还包括:根据终端设备当前运行的应用程序从所述多种预取算法中确定所述第一预取算法。

在一种可能的实现方式中,所述终端根据数据预取时的命中率或未命中率确定所述第一预取算法,其中,所述命中率为预取数据中被所述cpu核组访问的数据占所述预取数据的比例,所述未命中率为预取数据中被未被所述cpu核组访问的数据占所述预取数据的比例。

在一种可能的实现方式中,终端中有n个预取算法,其中每个预取算法在一个周期内生效,所述方法还包括:在n个周期中的每一个周期内,根据在所述每一个周期内生效的预取算法进行数据预取;确定所述n个周期中每一个周期内生效的预取算法进行数据预取的n个第一命中率;确定所述n第一命中率中最大的第一命中率,确定所述最大的第一命中率对应的预取算法为所述第一预取算法;其中,所述第一命中率为所述预取器根据一个周期内生效的预取算法将预取数据存储到所述第一缓存后,所述预取数据中被所述cpu核组访问的数据占所述预取数据的比例。

在一种可能的实现方式中,所述存储器为ddrsdram。

第五方面,本发明实施例提供了一种终端设备,包括至少一个处理器和存储器;所述存储器用于存储一个或多个计算机程序;当所述存储器存储的一个或多个计算机程序被所述至少一个处理器执行时,使得所述终端设备实现第二方面或者第二方面的任意一种可能的设计的方法;或者,当所述存储器存储的一个或多个计算机程序被所述至少一个处理器执行时,使得所述终端设备实现第四方面或者第四方面的任意一种可能的设计的方法。

第六方面,本申请实施例还提供了一种终端设备,所述终端设备包括执行第二方面或者第二方面的任意一种可能的设计的方法的模块/单元;或者所述终端设备包括执行第四方面或者第四方面的任意一种可能的设计的方法的模块/单元;其中,这些模块/单元可以通过硬件实现,也可以通过硬件执行相应的软件实现。

第七方面,本发明实施例提供了一种计算机存储介质,所述计算机可读存储介质包括计算机程序,当计算机程序在终端设备上运行时,使得所述终端设备实现第二方面或者第二方面的任意一种可能的设计的方法;或者,当计算机程序在终端设备上运行时,使得所述终端设备实现第四方面或者第四方面的任意一种可能的设计的方法。

第八方面,本发明实施例提供了一种包含指令的计算机程序产品,当所述计算机程序产品在终端上运行时,使得所述终端执行第二方面或上述第二方面的任意一种可能的设计的方法;或者当所述计算机程序产品在终端上运行时,使得所述终端执行第四方面或上述第四方面的任意一种可能的设计的方法。

其中,上述实现方式中的cpu核组可以包括大核组、小核组、或者大核组和小核组。

附图说明

图1为本申请实施例提供的一种终端设备的结构示意图;

图2为本申请实施例提供的具有二级缓存的终端设备的结构示意图;

图3为本申请实施例提供的具有三级缓存的终端设备的结构示意图;

图4为本申请实施例提供的一种具有二级缓存的终端设备的结构示意图;

图5为本申请实施例提供的一种数据预取方法的流程示意图;

图6为本申请实施例提供的终端设备通过一种预取算法进行数据预取的示意图;

图7为本申请实施例提供的另一种具有二级缓存的终端设备的结构示意图;

图8为本申请实施例提供的终端设备通过预取算法1进行数据预取的示意图;

图9为本申请实施例提供的终端设备通过预取算法2进行数据预取的示意图;

图10为本申请实施例提供的终端设备通过预取算法3进行数据预取的示意图;

图11为本申请实施例提供的预取器的训练模式和工作模式的示意图;

图12为本申请实施例提供的预取器的训练模式和工作模式的示意图;

图13为本申请实施例提供的预取器的三种模式之间的切换示意图;

图14为本申请实施例提供的具有三级缓存的终端设备的结构示意图;

图15为本申请实施例提供的ddrsdram的三种状态之间的切换示意图;

图16为本申请实施例提供的在llccache有预取和无预取时ddrsdram的三种状态的对比示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

以下,对本申请中的部分用语进行解释说明,以便与本领域技术人员理解。

终端设备,又可以称为用户设备(userequipment,ue)。比如,智能手机、平板电脑、各类可穿戴设备、车载设备、掌上电脑等。终端设备中可以安装各种应用程序(application,简称app)。

应用程序,例如为完成某项或多项工作的计算机程序。通常一个应用程序可以实现相应的功能,它可以具有可视的用户界面,用户可以通过该用户界面实现与终端设备的交互。应用程序的种类较多,比如,应用程序包括:用于游戏的各种app,王者荣耀,qq斗地主,qq开心消消乐等;用于购物的各种app,淘宝、京东等;用于旅行的各类app,携程app等;或者用于获取位置的各类app,百度地图、高德地图等;用于聊天通信的各类app,短信、彩信、各种邮箱、微信、腾讯聊天软件(qq)、whatsappmessenger、连我(line)、照片分享(instagram)、kakaotalk、钉钉等。

本申请实施例涉及的预取技术,终端设备具有一种预先将cpu可能需要的数据预取到缓存中的技术。举例来说,cpu在运行过程中,可以将某个数据预先从存储器中取出来存储到缓存中。这样,如果cpu在后续运行过程中需要访问该数据时,由于数据已经在缓存中了,cpu可以直接在缓存中访问数据,不需要在存储器中查找数据,即通过预取技术,可以减少cpu访问存储器内存所带来的延迟,提高cpu运行速率。

本申请实施例涉及的预取算法,可以有多种,比如,obl算法(one-blocklook-ahead,obl)算法、ibl算法(infinite-blocklook-ahead,ibl)等等。

本申请实施例涉及的预取地址,即终端设备根据预取算法计算的得到的地址,该预取地址可以用于指示cpu后续需要的数据在存储器中的地址。cpu可以根据所述预取地址在存储器中寻找与所述预取地址对应的数据,并将该数据加载到缓存中。

本申请实施例涉及的多个,是指大于或等于两个。

另外,需要理解的是,在本申请的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。本申请实施例提供一种数据预取方法及终端设备,该方法适用于终端设备中。图1示出了一种可能的终端设备的结构图。参阅图1所示,所述终端设备100包括:射频(radiofrequency,rf)电路110、电源120、处理器130、存储器140、输入单元150、显示单元160、摄像头170、通信接口180、以及无线保真(wirelessfidelity,wifi)模块190等部件。本领域技术人员可以理解,图1中示出的终端设备的结构并不构成对终端设备的限定,本申请实施例提供的终端设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

下面结合图1对所述终端设备100的各个构成部件进行具体的介绍:

所述rf电路110可用于通信或通话过程中,数据的接收和发送。特别地,所述rf电路110在接收到基站的下行数据后,发送给所述处理器130处理;另外,将待发送的上行数据发送给基站。通常,所述rf电路110包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(lownoiseamplifier,lna)、双工器等。

此外,rf电路110还可以通过无线通信与网络和其它设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(globalsystemofmobilecommunication,gsm)、通用分组无线服务(generalpacketradioservice,gprs)、码分多址(codedivisionmultipleaccess,cdma)、宽带码分多址(widebandcodedivisionmultipleaccess,wcdma)、长期演进(longtermevolution,lte)、电子邮件、短消息服务(shortmessagingservice,sms)等。

wifi技术属于短距离无线传输技术,所述终端设备100可以通过wifi模块190可以连接接入点(accesspoint,ap),从而实现数据网络的访问。所述wifi模块190可用于通信过程中,数据的接收和发送。

所述终端设备100可以通过所述通信接口180与其它设备实现物理连接。可选的,所述通信接口180与所述其它设备的通信接口可以通过电缆连接,实现所述终端设备100和其它设备之间的数据传输。

由于在本申请实施例中,所述终端设备100能够实现通信业务,向其它联系人发送信息,因此所述终端设备100需要具有数据传输功能,即所述终端设备100内部需要包含通信模块。虽然图1示出了所述rf电路110、所述wifi模块190、和所述通信接口180等通信模块,但是可以理解的是,所述终端设备100中存在上述部件中的至少一个或者其它用于实现通信的通信模块(如蓝牙模块),以进行数据传输。

例如,当所述终端设备100为手机时,所述终端设备100可以包含所述rf电路110,还可以包含所述wifi模块190和蓝牙模块;当所述终端设备100为计算机时,所述终端设备100可以包含所述通信接口180,还可以包含所述wifi模块190;当所述终端设备100为平板电脑时,所述终端设备100可以包含所述wifi模块。可以理解的,计算机和平板电脑也可以包含蓝牙模块。

所述存储器140可用于存储软件程序。所述处理器130通过运行存储在所述存储器140的软件程序,从而执行所述终端设备100的各种功能应用以及数据处理。

可选的,所述存储器140可以包括存储程序区的存储器和存储数据区的存储器。其中,存储程序区可存储操作系统、各种应用程序的软件程序和/或模块,处理器130可以运行存储在存储器140中的各种应用程序的软件程序和/或模块,以实现相应的功能。其中,存储数据区可存储数据、各种图片、视频文件等多媒体文件等,以便处理器130调用。

此外,所述存储器140可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件。

所述输入单元150可用于接收用户输入的数字或字符信息,以及产生与所述终端设备100的用户设置以及功能控制有关的键信号输入。

可选的,输入单元150可包括触控面板151以及其它输入设备152。

其中,所述触控面板151,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在所述触控面板151上或在所述触控面板151附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,所述触控面板151可以包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给所述处理器130,并能接收所述处理器130发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现所述触控面板151。

可选的,所述其它输入设备152可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。

所述显示单元160可用于显示由用户输入的信息或提供给用户的信息以及所述终端设备100的各种菜单。所述显示单元160可以为所述终端设备100的显示系统,用于呈现界面,实现人机交互。

所述显示单元160可以包括显示面板161。可选的,所述显示面板161可以采用液晶显示屏(liquidcrystaldisplay,lcd)、有机发光二极管(organiclight-emittingdiode,oled)等形式来配置。

其中,触控面板151和显示单元160可以理解为触摸显示屏。

进一步的,所述触控面板151可覆盖所述显示面板161,当所述触控面板151检测到在其上或附近的触摸操作后,传送给所述处理器130以确定触摸事件的类型,随后所述处理器130根据触摸事件的类型在所述显示面板161上提供相应的视觉输出。

虽然在图1中,所述触控面板151与所述显示面板161是作为两个独立的部件来实现所述终端设备100的输入和输入功能,但是在某些实施例中,可以将所述触控面板151与所述显示面板161集成而实现所述终端设备100的输入和输出功能。

所述处理器130是所述终端设备100的控制中心,利用各种接口和线路连接各个部件,通过运行或执行存储在所述存储器140内的软件程序和/或模块,以及调用存储在所述存储器140内的数据,执行所述终端设备100的各种功能和处理数据,从而实现基于所述终端设备的多种业务。

可选的,所述处理器130可以是cpu。处理器130也可以包括应用处理器和调制解调处理器。

可选的,所述处理器130可以包括一个或多个处理单元。可选的,所述处理器130可以是应用处理器,当然,所述处理器130也可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到所述处理器130中。

所述摄像头170,用于实现所述终端设备100的拍摄功能,拍摄图片或视频。

所述终端设备100还包括用于给各个部件供电的电源120(比如电池)。可选的,所述电源120可以通过电源管理系统与所述处理器130逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗等功能。

尽管未示出,所述终端设备100还可以包括至少一种传感器、音频电路等,在此不再赘述。

以图1所示的终端设备100是手机为例,处理器130以cpu为例。用户在使用终端设备100中的某个应用程序时,cpu需要运行该应用程序的软件程序,才能实现该应用程序中的相应的功能。具体而言,cpu在运行该应用程序的软件程序时,可以从存储器140中找到相应的软件程序,然后运行该软件程序。为了提升cpu的运行速度,终端设备中可以引用缓存(cache)技术来提升cpu运行速度。

cpu缓存技术,即,当cpu读取数据时,先从缓存中查找需要的数据,如果该缓存中存在cpu需要的数据,则cpu可以直接从缓存中读取数据,如果在缓存中不存在cpu需要的数据,cpu再从存储器中查找。以存储器可以为双倍速率动态随机存取存储器(doubledataratesynchronousdynamicrandomaccessmemory,ddrsdram)为例。由于cpu缓存的运行速度比ddrsdram快得多,所以cpu从cpu缓存中读取数据比从ddrsdram中读取数据要快很多。因此,cpu缓存技术的引入,提升了cpu的运行速率。

其中,cpu缓存可以分为一级缓存(l1cache)、二级缓存(l2cache)。cpu在运行过程中,先从一级缓存中读取数据,当一级缓存中没有需要的数据时,再从二级缓存中读取数据,当二级缓存中也没有需要的数据时,再从ddrsdram中读取数据。通常,cpu在读取数据时,有80%的数据可以在一级缓存中读取到,剩余20%的数据中的一部分数据可以从二级缓存中读取到,另一部分数据可以从ddrsdram中读取。因此,一级缓存和二级缓存可以满足cpu的大部分需求,cpu从ddrsdram中读取的数据量较小,大大的提升了cpu的运行速度。

图2示出了具有二级缓存的终端设备的结构示意图。如图2所示,终端设备包括:大核(例如乱序核)组和小核(例如顺序核)组。大核组中包含4个核,分别为core0-3,小核组也包括4个核,分别为core0-3。每个核上可以集成有一级缓存(l1cache)。一个应用程序的不同线程被配置在不同的核上运行。比如,一个应用程序的部分线程被配置到大核组上的core0运行,另一部分线程被配置到小核组上的core0上运行,多核共同完成该应用程序的运行。以大核组上的core0为例,core0在运行该应用程序的某个线程时,先从core0中的一级缓存201中读取数据,若一级缓存201中没有需要的数据,core0通过监听控制接口(snoopcontrolunit,scu)从二级缓存202中读取数据。当二级缓存202中没有需要的数据时,通过总线从ddrsdram中读取数据。

图3示出了具有三级缓存的终端设备的结构示意图。与图2不同的是,大核组和小核组中每个核上具有一级缓存和二级缓存。以大核组上的core0为例,core0在运行应用程序的线程时,先从core0中的一级缓存301中读取数据,若一级缓存301中没有需要的数据,core0从二级缓存302中读取数据。当二级缓存302中没有需要的数据时,通过scu(snoopcontrolunit,scu)接口从三级缓存303中读取数据。当三级缓存303中没有需要的数据时,通过总线从ddrsdram中读取数据。

cpu缓存的容量不会太大(因为cpu缓存占用芯片面积,而芯片面积不能做太大),即一级缓存和二级缓存中存储的数据量较少。因此,为了尽可能的保证cpu需要的数据存在于cpu缓存中,终端设备可以采用预取技术(关于预取技术前述已经描述过,为了说明书简洁,在此不多赘述)。

本申请实施例提供一种数据预取方法和终端设备。该终端设备中包括至少一级缓存,且至少一级缓存中的最后一级缓存具有预取能力,从而提升了cpu的运行效率。本申请实施例涉及的数据预取方法可以适用于图2所示的具有二级缓存的终端设备中,也可以适用于图3所示的具有三级缓存的终端设备中,还可以适用于可能出现的具有四级或者更多级缓存的终端设备中。

图4示出了本申请实施例提供的具有二级缓存的终端设备的结构示意图。如图4所示,终端设备400包括cpu核组401、预取器402,二级缓存(llccache)403,总线404和ddr控制器405和ddrsdram406。其中,预取器402和cpu核组401、二级缓存403分别通信连接。

在本申请实施例中,预取器402中可以预存有一种预取算法,也可以预存有多种预取算法。预取器402中的预取算法的数量不同,可以有不同的处理方式。下面分别进行介绍这两种情况。

在一种实施例中,预取器402中存储有一个预取算法。请参见图5,为本申请实施例提供的数据预取方法的流程示意图,在图5中,以终端设备是图4所示的终端设备400为例。如图5所示,通过终端设备400实现数据预取包括:

第1步,cpu核组401向二级缓存403下发数据访问请求,该数据访问请求中携带有第一地址,所述第一地址用于指示cpu核组401当前需要访问的数据在所述存储器中的地址。

其中,第一步的实现方式可以有多种。第一种方式,cpu核组401向一级缓存发送数据访问请求,当一级缓存中没有与所述数据访问请求对应的数据时,一级缓存将所述数据访问请求转发给二级缓存(比如,一级缓存中具有缓存控制器,该缓存控制器可以在确定一级缓存中没有与第一地址相对应的数据时,将所述数据访问请求转发给二级缓存)。第二种方式,cpu核组401向一级缓存下发数据访问请求,一级缓存中的缓存控制器在确定一级缓存中没有与第一地址相对应的数据时,向cpu核组401反馈响应信息(该响应信息用于指示一级缓存中没有与第一地址对应的数据)。cpu核组401在接收到所述响应信息之后,向二级缓存403下发数据访问请求。

cpu核组401可以采用这两种方式中的任一种方式向二级缓存403下发数据访问请求,应理解,对于历史数据访问请求也可以采用同样的方式。

在一种实现方式中,如果采用第一种方式,即二级缓存403接收到的数据访问请求是一级缓存转发的。即一级缓存可以向二级缓存403转发cpu核组401下发数据访问请求,但如果一级缓存具有预取能力,那么一级缓存还可以向二级缓存发送预取访问请求。其中,数据访问请求和预取访问请求不同。如果一级缓存具有预取能力,cpu核组401可以根据与一级缓存对应的预取算法,计算出预取地址后,根据该预取地址生成的预取访问请求,cpu核组401将该预取访问请求发送给一级缓存,当一级缓存中没有与所述预取访问请求对应的数据时,将所述预取访问请求下发给二级缓存402,如果二级缓存403中存在所述数据,cpu核组401将所述数据从二级缓存中加载到所述一级缓存中,如果二级缓存403中没有所述数据,cpu核组从存储器中将与所述预取访问请求对应的数据加载到一级缓存中。由此可见,二级缓存403接收到的访问请求可以包括两部分,一部分是数据访问请求,另一部分是预取访问请求。第一部分的数据访问请求就是前述的cpu核组401向一级缓存下发的数据访问请求。第二部分的预取访问请求是cpu核组401根据与一级缓存对应的预取算法,计算出的预取地址后,根据该预取地址生成的预取访问请求。也就是说,第一部分的数据访问请求中携带的地址不是经过预取算法的计算得到的,而第二部分中预取数据访问请求中携带的地址可以是经过一级缓存对应的预取算法得到的预取地址。因此,在本申请实施例中,如果采用第一种方式,预取器402可以过滤掉来自一级缓存的预取访问请求,得到一级缓存向二级缓存转发的数据访问请求。

一种可能的实现方式为,无论是预取访问请求还是数据访问请求,都可以携带一个标志位(tag),该标志位用于指示一个访问请求是预取访问请求,还是数据访问请求。比如,该标志位可以用二进制数字表示,比如分别用0、1表示。其中,0用于指示数据访问请求,1用于指示预取访问请求。预取器402可以过滤掉标志位为1的预取访问请求,保留标志位为0的数据访问请求。

在本申请实施例中,预取器402可以实时的监控二级缓存403接收到哪些数据访问请求,比如二级缓存403每接收到一个数据访问请求可以将该数据访问请求转发给预取器402,由预取器402作记录。或者,二级缓存403也可以自己记录接收到的数据访问请求,并将记录的数据访问请求存储在存储器中,以便使用。

因此,在第1步中,预取器402监控到二级缓存403接收到数据访问请求时,可以提取该数据访问请求中携带的第一地址,以便后续步骤使用。

第2步,预取器402根据存储的预取算法、历史数据访问请求以及第1步中提取的第一地址计算预取地址。

在第2步中,预取器402需要历史数据访问请求,可以理解的是,该历史数据访问请求可以是第1步中,二级缓存403在接收数据访问请求之前,接收到的数据访问请求。比如,第1步中,二级缓存403在t1时刻接收到一个数据访问请求,那么历史数据访问请求即二级缓存403在t1时刻之前接收到的数据访问请求。示例性的,历史数据访问请求可以是在t1时刻之前的预设时间段内接收的数据访问请求,若预设时间段例如为t3-t1的时间段,其中,t3小于t1。t3的取值可以根据实际情况而定,本申请实施例不作限定。

由图4可知,预取器402可以包括特征提取器4021和预取算法模块4022。因此,在第2步中,即预取器402根据存储的预取算法、历史数据访问请求以及第一地址计算预取地址的过程可以包括子步骤。比如,第2步包括:第2.1步,特征提取器4021可以从历史数据访问请求中提取特征信息。第2.2步,预取算法模块4022中存储有预取算法,可以根据该预取算法和第2.1步中特征提取器4021提取的特征信息计算地址偏移量。第2.3步,预取算法模块4022根据该地址偏移量和所述第一地址,得到预取地址。

在本申请实施例中,终端设备存储应用程序的软件程序时,每个应用程序对应一个存储位置。终端设备中可以存储应用程序的包名与存储位置之间的映射关系。其中,一个应用程序的软件程序可以以页为单位进行存储。比如,app1的软件程序存储在ddrsdram406中的位置1处,并且app1的软件程序有3页。其中每一页中的软件程序(函数和/或变量)被运行时,可以实现不同的功能;或者每一页中的每一行软件程序(函数和/或变量)被运行时,可以实现不同的功能。其中,页地址可以以page_addr(比如p0、p1等)表示,行地址可以以cachelineid(比如id1、id2)表示。那么p0,id10用于指示数据的存储地址在第0页第10行。通常,一页的所占的存储空间大小为4kb,而一个cachelineid所占的存储空间大小为64byte,因此每个页有64个cachelineid。

因此,cpu核组401下发的数据访问请求中可以携带较多的信息,比如携带有当前运行的应用程序的包名、当前需要的数据在存储器中的地址、数据访问请求的类型(读请求或写请求)等等。因此,第2.1步中,特征提取器4021可以从历史数据访问请求中提取的特征信息;所述特征信息可以包括当前运行的应用程序的包名、要访问的数据在存储器中的地址等;其中,地址可以包括页地址和行地址。应用程序的包名用于确定该应用程序的软件程序的存储位置;页地址和行地址可以用于确定cpu核组401需要访问的数据在该存储位置的软件程序中的哪页哪行的数据。在本申请实施例中,特征提取器4021从历史数据访问请求中提取页地址和行地址后,还可以对页地址和行地址进行预处理。以行地址为例,通常,终端设备在某页中存储应用程序的软件程序是以固定字节单位存储的,比如以4个字节为单位进行存储,即每4个字节存储一个数据,预取器402在访问数据时,也可以是以4个字节为单位读取数据。由于预取器402从历史数据访问请求中提取的行地址可能不是4个字节,所以预取器402可以将提取的行地址按照4个字节进行对齐,即将提取的行地址中所占的字节数不是4个字节的行地址按照地址对齐的方式转换为4个字节的整数倍的行地址,其中,地址对齐方式可以采用比如补充0字节的方式,本申请实施例不多赘述。

第2.1步中,特征提取器4021可以获取n条历史数据访问请求,提取每条历史数据访问请求的特征信息,得到n条特征信息。其中,n的取值,可以是终端设备在出厂时设置好的,也可以是用户在使用终端设备的过程中自定义的,n为正整数。

第2.2步,预取算法模块4022根据预取算法和第2.1步中特征提取器4021提取的特征信息,计算地址偏移量。

如前述内容可知,第2.1步中特征提取器4021提取的特征信息包括地址,在第2.2步中,可以使用特征信息中的地址,即预取算法模块4022根据预取算法和历史数据访问请求中携带的地址,计算地址偏移量。

示例性的,图6示出了本申请实施例提供的终端设备通过一种预取算法进行数据预取的示意图。图6中,以n是8为例,即预取算法模块4022根据从8个历史数据访问请求中提取的8个地址(页地址和行地址)。预取算法模块4022根据8个地址中每相邻的两个地址,计算地址偏移量,得到7个地址偏移量。从7个地址偏移量中确定一个地址偏移量。

请继续参见图6,8个地址中,第1个地址和第2个地址是相邻的两个地址,且第1个地址和第2个地址之间的地址偏移量是id3。第2个地址和第3个地址是相邻的两个地址,且第2个地址和第3个地址之间的地址偏移量是id1,以此类推。如图6所示,每相邻两个存储地址之间的地址偏移量分别是id3、id1、id2、id4、id1、id3、id1(共7个地址偏移量)。预取算法模块4022取这7个地址偏移量中出现次数最多的一个地址偏移量即id1,确定该地址偏移量为后续步骤中使用的地址偏移量。

第2.3步,预取算法模块4022根据第2.2步确定的地址偏移量和第1步中得到的第一地址,计算得到预取地址。

继续以图6为例,在第2.2步中,预取算法模块4022确定地址偏移量为id1。预取算法模块4022确定地址偏移量后,使用该地址偏移量进行数据预取。比如,请继续参见图6所示,t1时刻,二级缓存403接收的数据访问请求中携带的第一地址是p1,id1(即图6中的第9个地址),预取算法模块4022将p1,id1加上地址偏移量id1得到预取地址,即p1,id2。

请继续参见图6,之后,如果在t2时刻(t2>t1),二级缓存403又接收到一个数据访问请求,该数据访问请求中携带的地址是p1,id4(即图6中的第10个地址),那么预取算法模块4022根据该p1,id4以及地址偏移量id1确定预取地址为p1,id5。依次类推,图6中,第11个存储地址是p1,id5,那么预取算法模块4022根据该p1,id5以及地址偏移量id1确定预取地址为p1,id6。第12个存储地址是p1,id7,那么预取算法模块4022根据该p1,id7以及地址偏移量id1确定预取地址为p1,id8。第13个存储地址是p1,id11,那么预取算法模块4022根据该p1,id11以及地址偏移量id1确定预取地址为p1,id12。第14个存储地址是p1,id12,那么预取算法模块4022根据该p1,id12以及地址偏移量id1确定预取地址为p1,id13。第15个存储地址是p1,id15,那么预取算法模块4022根据该p1,id15以及地址偏移量id1确定预取地址为p1,id16。第16个存储地址是p1,id16,那么预取算法模块4022根据该p1,id16以及地址偏移量id1确定预取地址为p1,id17。

第3步,预取器402根据第2步中确定的预取地址从所述存储器中与所述预取地址对应的数据加载到所述二级缓存403中。

在第2步(具体是第2.3步)中,预取算法模块4022生成的8个预取地址包括p1,id2、p1,id5、p1,id6、p1,id8、p1,id12、p1,id13、p1,id16、p1,id17。预取算法模块4022可以每生成一个预取地址,可以向二级缓存403发送一个预取地址。由于二级缓存403中可能已经存在与所述一个预取地址对应的数据,所以二级缓存403接收到所述一个预取地址后,二级缓存403中缓存控制器确定没有与所述一个预取地址对应的数据时,可以向cpu核组401反馈响应信息。cpu核组401基于响应信息,从存储器中将与所述一个预取地址对应的数据加载到二级缓存403中。当然,预取算法模块4022也可以在生成8个预取地址后,将这8个预取地址一并发送给二级缓存403。举例来说,预取算法模块4022将8个预取地址发送给二级缓存403后,若二级缓存403中不存在与p1,id2对应的数据,可以向cpu核组发送响应信息,cpu核组401基于该响应信息,从存储器中将与p1,id2对应的数据加载到二级缓存403中。在本申请实施例中,当二级缓存403中没有某个预取地址对应的数据时,cpu核组401可以从存储器中将与某个预取地址对应的数据加载到二级缓存403中;当然,还有其它的方式,比如,当二级缓存403中没有某个预取地址对应的数据时,预取器402可以通过总线404从ddrsdram中406查找数据,并将查找到的某个预取地址对应的数据存储到二级缓存403中;或者,当二级缓存403中没有某个预取地址对应的数据时,二级缓存403自己可以根据预取地址从存储器中将与所述预取地址对应的数据加载到二级缓存403中。

图6只是列举了一种可能的预设算法,在实际应用中,预取算法模块4022还可以使用其它的预取算法进行数据预取,本申请实施例不作限定。

通过以上描述可知,本申请实施例提供的终端设备中包括预取器402,该预取器402可以根据cpu核组401向二级缓存403下发的数据访问请求、历史数据访问请求以及预取算法,计算预取地址,预取器402可以根据该预取地址从存储器中将与预取地址对应的数据加载到二级缓存403中。如果cpu后续需要该数据时,可直接从二级缓存403中读取,无需从ddrsdram406中读取,由于cpu从二级缓存403中读取数据的效率大于ddrsdram406中读取数据的效率,从而提升了cpu的运行效率。

在上述实施例中,预取器402中预存有一种预取算法,通过该预取算法进行数据预取。下面介绍另一实施例,在该实施例中,终端设备中的预取器中可以预存有多种预取算法,预取器可以从多种预取算法中选择一种预取算法进行数据预取,当选择出一种预取算法之后,按照图5所示的流程进行数据预取。

请参见图7所示,为本申请实施例提供的终端设备的结构示意图。图7以终端设备具有两级缓存为例。如图7所示,终端设备700可以包括cpu核组701、预取器702,二级缓存(l2cache)703,总线704、ddr控制器705和ddrsdram706。其中,预取器702中还包括特征提取器7020、预取算法模块组7021、预取效果检测模块7022、和预取输出判决器7023;其中,预取算法模块组7021中可以包括三个预取算法模块,分别为预取算法1模块、预取算法2模块、预取算法3模块,每个预取算法模块对应一种预取算法。

由于预取器702中存储有多种预取算法,所以预取器702在进行数据预取之前,可以从多种预取算法中确定一种预取算法。下面介绍预取器702从多种预设算法中确定一种预取算法的方式。

一种可能的实现方式为,预取器702可以根据当前的应用场景从多种预取算法中确定一种预取算法。比如,预取器702确定终端设备当前处于某种应用场景后,确定与该应用场景对应的预取算法。其中,应用场景可以是终端设备使用各种应用程序比如微信、邮箱、网页等场景。比如,终端设备中可以存储有应用程序和预取算法之间的映射关系,当终端设备确定当前处于某个应用程序时,基于所述映射关系确定于该应用程序对应的预取算法。应用程序和预取算法之间的映射关系可以设计人员根据大量实验得到的、并在终端设备出厂时设置好,也可以在用户使用终端设备的过程中设置。

可选的,如前述内容可知,预取器702中的特征提取器7020可以从数据访问请求中提取应用程序的包名。预取器702根据该应用程序的包括确定当前运行的应用程序后,基于应用程序和预取算法之间的映射关系,确定预取算法。比如,预取器702确定当前处于微信的应用场景,预取器702通过预取算法1模块进行数据预取。

另一种可能的实现方式为,预取器702可以通过训练的方式从多种预取算法中确定一种合适的预取算法。比如,预取器702可以具有两种模式,即训练模式和工作模式。在训练模式下,预取器702可以从多种预期算法中确定一种较为合适的预取算法。由前述内容可知,预取器得到预取地址后,将该预取地址对应的数据从存储器中加载到二级缓存703中。实际上,这些数据不一定都会被cpu核组701用到。如果这些数据中大部分数据被cpu核组701用到,即预取效果较好,如果这些数据中只有小部分数据被cpu核组701用到,则预取效果较差。因此,预取器702可以在训练模式下,判断采用哪种预取算法时,预取效果最好。以预取算法1为例,预取效果检测模块7022可以统计预取算法1模块生成的所有预取地址中哪些预取地址有用(哪些预取地址对应的数据被cpu核组701用到),哪些预取地址无用(哪些预取地址对应的数据未被cpu核组701用到),以得到预取算法1模块的预取效果。因此,在训练模式下,预取器702分别使用三种预取算法进行数据预取,确定其中预取效果最好的预取算法。

在本申请实施例中,在训练模式下,预取算法模块组7021中的每个预取算法模块在一个周期内生效。比如,在第一个周期内,预取算法1模块通过预取算法1进行数据预取。在第二个周期内,预取算法2模块通过预设算法2进行数据预取。在第三个周期内,预取算法3模块通过预设算法3进行数据预取。

可选的,这三个周期可以相同或者不同,预取器702的训练模式的时长为这三个周期之和。

在第一个周期内,特征提取器7020可以提取二级缓存703接收的n条历史数据访问请求中每条历史数据访问请求的地址。预取算法模块组7021中的预取算法1模块根据所述地址和预取算法1计算地址偏移量,然后根据该地址偏移量进行数据预取。其中,n可以为8也可以为16,具体可以根据实际情况而定。可选的,特征提取器7020可以在每个预取算法模块生效的周期内的刚开始的一段时间内从历史数据访问请求中提取地址;或者,特征提取器7020可以在每个预取算法模块生效的周期到达之前为将地址提取好,当所述周期到达时,所述每个预取算法模块使用该地址。

下面介绍两种确定预取算法1的预取效果的方式。下面的两种方式中均以预取效果是未命中(miss)率为例。

方式一,以n是16为例,请参见图8,为本申请实施例提供的终端设备通过预取算法1进行训练过程的示意图。如图8所示,预取器702通过16个地址中的前8个地址确定地址偏移量,然后根据该地址偏移量从第9个地址开始生成预取地址,即预取算法1模块生成了8个预取地址。预取算法1模块可以将这8个预取地址与提取的16个存储地址中的后8个存储地址进行比较,如果某个预取地址和后8个存储地址中的某一个存储地址一致,说明这个预取地址有用。比如,预取算法1模块生成的8个预取地址中有3个预取地址与提取的16个存储地址中的后8个存储地址中的3个存储地址相同,即图8中被填充的六边形。预取效果检测模块7022确定预取算法1模块的miss率为5/8。这里的miss率可以理解为,所有预取地址中未被实际用到的预取地址的总数与所有预取地址的总数的比值。对于预取算法1模块来说,预取地址的总数为8,其中未被实际用到的预取地址的总数为8-5=3,所以预取算法1模块的miss率为5/8。其中,miss率可以被称之为未命中率或其它名称,本申请实施例不限定。

方式二,预取算法1模块生成8个预取地址后,预取器702可以将这8个预取地址对应的数据从ddrsdram706中加载二级缓存403中。预取器702可以监控在预设时长内,二级缓存703中哪个预取地址对应的数据被cpu核组701读取过。比如,在预设时长内,预取算法1模块生成的8个预取地址中有3个预取地址(即图5中被填充的六边形)对应的数据被cpu核组701读取过,则预取效果检测模块7022确定预取算法1模块的miss率为5/8。

需要说明的是,预取效果还可以是命中率,命中率和miss率相对而言。命中率用于指示,所有预取地址中被实际用到的预取地址的总数与所有预取地址的总数的比值。继续以图8为例,预取算法1的miss率5/8,也就是说命中率为3/8。

以上只是列举了两种确定预取算法1模块的miss率的方式,在实际应用中,还可以有其它方式来确定预取算法1模块的miss率,本申请实施例不作限定。比如,特征提取器7020获取的数据访问请求可能不止16条,比如有256条,即提取的特征信息有256个,预取算法1模块可以以16个特征信息为一个周期,每16个特征信息进行一次前述的计算过程,即每通过16个特征信息进行一次计算,得到一个miss率,即总共得到16个miss率,取这16个miss率的平均值为预取算法1模块的最终的miss率。

当第一周期结束后,预取器702启动预取算法2模块,进入第二周期。在第二周期内,预取算法2模块开启时,预取器702可以关闭预取算法1模块。预取算法2模块进行数据预取的过程与预取算法1模块进行数据预取的过程类似,为了说明书的简洁,不多赘述。

图9示出了本申请实施例提供的终端设备通过预取算法2进行数据预取的示意图。图9以n是16为例,预取算法2模块计算前8个地址中每间隔1个地址的两个地址之间的地址偏移量。比如,第1个地址和第3个地址之间间隔1个地址,所以第1个地址和第3个地址之间的地址偏移量是id4,第2个地址和第4个地址之间间隔1个地址,所以第2个地址和第4个地址之间的地址偏移量是id3。以此类推,在图9中的前8个地址中,每间隔1个地址的两个地址之间的地址偏移量分别是id4、id3、id6、id5、id4、id4(共6个值)。预取算法2模块取这6个值中出现次数最多的一个值即id4,将该值作为地址偏移量。预取算法2模块确定地址偏移量后,根据该地址偏移量生成预取地址。

比如,预取算法2模块通过前8个地址确定地址偏移量后,从第9个地址开始生成预取地址。第9个地址是p1,id1,那么预取算法2模块将该p1,id1加上地址偏移量id4,得到预取地址为p1,id5。第10个存储地址是p1,id4,那么预取算法2模块根据该p1,id4以及地址偏移量4确定预取地址为p1,id8。第11个存储地址是p1,id5,那么预取算法2模块根据该p1,id5以及地址偏移量4确定预取地址为p1,id9。第12个存储地址是p1,id7,那么预取算法2模块根据该p1,id7以及地址偏移量4确定预取地址为p1,id11。第13个存储地址是p1,id11,那么预取算法2模块根据该p1,id11以及地址偏移量4确定预取地址为p1,id15。第14个存储地址是p1,id12,那么预取算法2模块根据该p1,id12以及地址偏移量4确定预取地址为p1,id16。第15个存储地址是p1,id15,那么预取算法2模块根据该p1,id15以及地址偏移量4确定预取地址为p1,id19。第16个存储地址是p1,id16,那么预取算法2模块根据该p1,id16以及地址偏移量4确定预取地址为p1,id20。

综上所述,预取算法2模块最终生成的8个预取地址,包括p1,id5、p1,id8、p1,id9、p1,id11、p1,id15、p1,id16、p1,id19、p1,id20。预取器702可以按照前述列举的两种确定预取算法1模块的miss率的方式,来确定预取算法2模块的miss率。

举例来说,在预设时长内,预取算法2模块生成的8个预取地址中有4个预取地址(即图7中被填充的六边形)对应的数据被cpu核组701读取,则预取效果检测模块7022确定预取算法2模块的miss率为4/8。类似的,对于预取算法2模块来说,特征提取器7020获取的数据访问请求可能不止16条,比如有256条,即提取的特征信息有256个,预取算法2模块可以以16个特征信息为一个周期,每16个特征信息进行一次前述的计算过程,即每通过16个特征信息进行一次计算,得到一个miss率,即总共得到16个miss率,取这16个miss率的平均值最为预取算法1模块的最终的miss率。

当第二周期结束后,预取器702启动预取算法3模块,进入第三周期。在第三周期内,预取算法3模块开启时,预取器702可以关闭预取算法2模块。预取算法3模块进行数据预取的过程与预取算法1模块进行数据预取的过程类似,为了说明书的简洁,不多赘述。

在第三个周期内,预取算法3模块的计算过程同预取算法1模块和预取算法2模块的计算过程类似。因此,为了说明书的简洁,关于预设算法3模块的计算过程不作详细描述。本文给出预设算法3模块的数据预取过程的示意图,即图10。预设算法3模块进行数据预取后,预取效果检测模块7022确定预设算法3模块的miss率为6/8。

在训练模式下,预取效果检测模块7022确定三个预取算法模块各自的miss率之后,可以比较这三个miss率,确定miss较小的预取算法模块为最合适的预取算法模块。通过比较可知,预取算法2模块的miss率最低,即通过预取算法2模块进行数据预取时,预取到的数据被cpu核组701读取的可能性比较大。因此,预取效果检测模块7022确定预取算法2为预取效果最佳的预取算法。

在本申请实施例中,除了上述的三个周期外,预取器702还可以多设置一个周期即第四周期,在该第四周期内,预取器702无预取,即不采用任何预取算法。比如,在该第四周期内,预取器702中的预取算法1模块、预取算法2模块和预取算法3模块均处于关闭或者休眠状态。预取效果检测模块7022可以统计该第四周期内的miss率。若第四周期的miss率相对于前三个周期最低,那么预取器702确定不采用任何预取算法。第四周期可以发生在前述的三个周期之后,也可以发生在前述的三个周期之前。比如第一周期内,预取器702无预取,第二周期内,预取器702通过预取算法1模块进行数据预取,第三周期内,预取器702通过预取算法2模块进行数据预取,第四周期内,预取器702通过预取算法3进行数据预取。

在本申请实施例中,预取效果可以是miss率,还可以考虑每个预取算法模块的预取效率。如前述内容可知,预取器702产生预取地址后,该预取地址对应的数据可能已经存在于二级缓存中了,所以二级缓存不需要向ddrsdram706发出的预取地址。因此,预取效率可以理解为二级缓存向ddrsdram706发出的所有预取地址中实际被cpu用的预取地址的总数与所述发出的所有预取地址的总数的比值。可见,预取效率越高,即所有预取地址中被实际用到的预取地址越多,所以预取效率越高的预取算法越准确。因此,预取效果检测模块7022在考虑每个预取算法模块的预取效果时,可以考虑每个预取算法模块的miss率或者每个预取算法模块的预取效率(即确定预取效率最高预取算法模块),或者也可以同时考虑这两个因素。

预取器702确定最合适的预取算法模块之后,进入工作模式,在工作模式下,预取器702通过确定的最合适的预取算法模块进行数据预取。比如,预取器702在训练模式下,确定出最合适的预取算法是预取算法1,那么预取器702进入工作模式后,采用预取算法1执行一次图5所示的流程。

作为一种示例,请参见图11所示,图11示出了本申请实施例提供的预取器两种模式的切换示意图。预取器702中存储有m个预取算法时,可以设置m+1个周期。在训练模式下,第一个周期内,预取器702不采用预取算法,从第二个周期开始到第m+1个周期,每个周期采用一种预取算法。预取效果检测模块7022统计每个周期内的预取算法的miss率,得到m+1个miss率。预取效果检测模块7022确定m+1个miss率中miss率最低的预取算法。当第m+1个周期结束后,从第m+2个周期开始,预取器702自动进入工作模式。

作为另一种示例,请参见图12所示,图12示出了本申请实施例提供的预取器两种模式的切换示意图。预取器702中存储有m个预取算法时,设置m+1个周期。在训练模式下,第一个周期内,不采用预取算法。从第二个周期开始第m+1个周期,每个周期采用一种预取算法。预取效果检测模块7022统计每个周期内的预取算法的miss率。当某个周期内的预取算法的miss率小于等于预设的miss率时,预取效果检测模块7022触发预取器702进入工作模式。比如,预取效果检测模块7022确定第二个周期内的预取算法1的miss率小于等于预设的miss率,则触发预取器702进入工作模式,在工作模式下,预取器702通过预取算法1进行数据预取。通过这种方式,预取器702无需进行从第三个周期到第m+1个周期的训练,有助于提高效率。

在本申请实施例中,在训练模式下,预取效果检测模块7022确定最合适的预取算法模块后,将该预取算法模块的标识(比如预取算法模块的编号)发送给预取输出判决器7023,该预取输出判决器7023可以开启确定的预取算法模块,并关闭除所述确定出的预取算法之外的其它的预取算法模块,以使在工作模式下,预取器702通过确定的预取算法模块进行数据预取。

预取器702进入工作模式后,预取效果检测模块7022可以实时的监控采用当前的预取算法(即预取器702在训练模式下确定出的预设算法)进行数据预取的预取效果,当预取效果较差时,重新进入训练模式,即重新从多个预取算法中确定最合适的预取算法。

举例来说,在工作模式下,预取器702通过预取算法2模块进行数据预取,预取效果检测模块7022可以监控预取算法2模块的预取效果(miss率和/或预取效率)。当预取算法2模块的预取效果较差时,预取效果检测模块7022控制预取器702再次进入训练模块。比如,预取效果检测模块7022向预取输出判决器7023发送指令,以使预取输出判决器7023依次开启各个预取算法模块,进入训练模式。

在本申请实施例中,在工作模式下,预取效果检测模块7022可以统计n个周期内每个周期内通过预取算法2模块进行数据预取时的miss率。前面已经介绍过,预取效果检测模块7022获取每个预取算法模块的miss率的过程,为了说明书的简洁,在此不做赘述。预取效果检测模块7022根据每个周期的miss率确定是否需要再次进入训练模式。

作为一种示例,当某个周期的miss率大于预设miss率时,确定需要再次进入训练模式。

在本申请实施例中,预取器702中可以存储有预设miss率,该预设miss率的具体值,可以在终端设备出厂时设置好,也可以在用户使用终端设备的过程中,终端设备自学习设置的,本申请实施例对此不作限定。

作为另一种示例,当某个周期的miss率大于无预取时的miss率时,确定需要再次进入训练模式。如前述内容可知,在第四周期内,预取器702可以不采用任何预取算法,预取效果检测模块7022确定该周期内的miss率后,如果其它某个周期内的miss率大于该第四周期内的miss率,则确定需要再次进入训练模块。

作为又一种示例,预取效果检测模块7022确定n个周期的n个miss率之后,确定这n个miss率的方差,若该方差大于等于一个预设方差,确定需要重新进入训练模式。通常,n个miss率的方差较大时,认为当前的预取算法的预取效果不稳定,波动较大,所以预取器702需要再次进入训练模式确定合适的预取算法。

作为又一种示例,预取器702从多种预取算法中确定出一种预取算法后,预取器702通过确定出的预取算法进行数据预取,一段时间后,预取器702自动进入训练模式。

如前述内容可知,预取器702可以通过应用场景比如应用程序确定合适的预取算法模块,还可以通过训练确定合适的预取算法。在实际应用中,这两种方式可以单独使用,也可以结合使用。比如,预取器702根据当前的应用场景确定出的预取算法模块有多个时,可以进一步通过训练从这多个预取算法模块中确定一种预设算法模块。再比如,预取器702确定当前的应用场景发生变化时,触发再次进入训练模式。

通常,当终端设备的应用场景变化(比如用户从微信的场景切换到王者荣耀的场景)时,cpu核组701需要读取的数据会发生较大的变化。假设终端设备在0-t1的时间段内处于微信的应用场景,在该场景中,预取器702通过训练模式确定最合适的预取算法是预取算法2。在t1-t2的时间段内,终端设备处于王者荣耀的场景,在该时间段内,如果仍然按照预取算法2进行数据预取的话,预取效果可能会降低,所以预取器702可以继续通过训练确定适合该王者荣耀场景的预取算法。因此,在本申请实施例中,预取器702中的预设效果检测模块7022可以监控各个预取算法模块进行数据预取时的预取效果,如果预取效果较差时,说明当前的预取算法不合适,再次进入训练模式,重新确定合适的预取算法,最终实现在不同的应用场景下,都能够尽可能的使用最合适的预取算法进行数据预取。

请参见图13,为本申请实施例提供的工作模式和训练模式之间的切换示意图。终端设备处于关闭状态(比如手机处于关机状态)时,预取器中的所有模块不工作,不上电,即预取器处于停止模式。当终端设备处于开启状态时,终端设备通过软件开关触发预取器开始工作(比如,cpu核组配置软件开关enablebit为1,控制预取器开始工作),进入训练模式,当训练周期到期后,预取器进入工作模式。在工作模式下,如果预取算法的miss率不满足条件(比如,某个周期的miss率大于无预取时的miss率,或者n个miss率的方差大于等于一个预设方差)时,再次进入训练模式。当然,在工作模式或者训练模式下,终端设备还可以通过软件开关控制预取器从工作模式或训练模式进入停止模式,即关闭预取器。比如,请继续参见图11,在训练模式下,cpu核组可以配置软件开关enablebit为0,即控制预取器进入停止模式;或者,在工作模式下,cpu核组也可以配置软件开关enablebit为0,即控制预取器进入停止模式。

图4或图7是以具有两级缓存的终端设备为例进行说明(预取器设置在cpu核组和二级缓存之间,即该预取器服务于二级缓存)。可以理解地,图4或图7中的预取器还可以适用于具有三级缓存的终端设备中。图14示出了本申请实施例提供的具有三级缓存的终端设备的结构示意图。在图14中,预取器设置在cpu核组和三级缓存之间,该预取器服务于三级缓存。

可以理解地,虽然图4、图7或者图14所示的终端设备中,预取器设置在cpu核组和最后一级缓存之间(比如图14所示的具有三级缓存的终端设备中,预取器设置在cpu核组和三级缓存之间),即预取器服务于最后一级缓存。当然,预取器还可以设置在一级缓存和二级缓存之间(比如图14所示的具体三级缓存的终端设备中,预取器设置在一级缓存和二级缓存之间),服务于二级缓存。即本申请实施例提供的预取器不仅可以服务于最后一级缓存,还可以服务于终端设备的任意一级缓存。

通过以上描述可知,本申请实施例的技术方案中,终端设备中的预取器为最后一级缓存提供预取能力,提高了cpu的运行效率。下面分别从不同的角度分析本申请实施例提供的终端设备(例如,最后一级缓存具有预取能力):

一,从cpu性能的角度来说:

通常,终端设备运行某应用程序时,画面越是流畅,用户体验越好。画面流畅度可以是由帧率决定,帧率越高,即每秒显示的帧数越多,画面越流畅。通常,终端设备显示每一帧图像需要执行的指令数是固定的。

需要说明的是,通常,cpu是以一定的周期工作的。一个应用程序的运行可能需要多个周期。比如,cpu在运行某个应用程序时,需要调用该应用程序的指令或数据,一个指令或数据的调用过程可能经过多个周期(cycleperinstruction,cpi)。通常cpi越低(即调用一个指令或数据需要的周期数越少),说明cpu的运行越快,cpi越高(即调用一个指令或数据需要的周期数越多),说明cpu的运行越慢。因为,如前面的描述可知,本申请实施例中,由于最后一级缓存具有预取能力,而且预取器可以在训练模式下,寻找miss率最小的预取算法(小于无预取时的miss率)。cpu读取数据效率提高,所以在读取一个指令或数据需要的时间缩短,即cpi降低。也就是说,终端设备显示一帧画面需要的时间减少,即画面更加流畅,从而进一步提升用户的体验。

二,从cpu功耗的角度来说:

如前述内容可知,采用本申请实施例的技术方案后,可以降低cpi。cpi降低之后,即cpu需要工作的周期数减少,即降低cpu工作时间,增加休眠时间。因为cpu休眠功耗相对工作功耗要低得多,因此技术可以降低cpu功耗。

三,从ddr控制器的角度来说:

通常,ddr控制器包括三种访问状态,自刷新状态、idle状态和访问状态。请参见图13,为本申请实施例提供的ddr的三种状态之间的切换示意图。如图15,当终端设备开机时,进入自刷新状态。当ddr控制器接收到一级缓存或者二级缓存发送的数据访问请求时,退出自刷新状态,进入idle状态。当idle状态持续一定时间后,进入访问状态。ddr控制器进入访问状态后,开始处理来自一级缓存或者二级缓存的数据访问请求。这三种状态中,访问状态功耗最高,其次是idle状态,功耗最低的是自刷新状态。也就是说,数据访问过程发生在ddr控制器处于访问状态下,idle状态和自刷新状态下都是无数据访问的状态。因此,在无访问的时候,为了节省功耗,可以尽量让ddr控制器处于最省电的自刷新状态,而不是idle状态。

由于,idle状态是自刷新状态切换到访问状态的过程中经过的一种状态,所以要减少idle状态的持续时间,可以通过减少自刷新状态和访问状态之间的切换次数来实现。由于本申请实施例提供的终端设备中的最后一级缓存具有预取能力,可以在正常数据访问时把预取数据一并读取到最后一级缓存中,所以有助于降低访问次数。访问次数降低后,即访问状态和自刷新状态之间的切换次数降低,即降低了idle状态的持续时间。

举例来说,请参见图16,为本申请实施例提供的llccache有预取和llccache无预取时,两种状态各自占的时间的对比示意图。如图16中的(a),t从0开始,先经过自刷新状态,然后进入idle状态,然后进入访问状态,在访问状态下,llccache访问数据d1,访问结束后,进入idle状态,再进入自刷新状态。之后,进入下一个流程,以访问数据d2和数据d3。之后,再进入下一个流程,以访问数据d4。可见,在图16的(a)中,llccache无预取时,自刷新状态和访问状态之间,切换了6次,即进入idle状态有6次。

如图16的(b),t从0开始,先经过自刷新状态,然后进入idle状态,再进入访问状态。由于终端设备中的最后一级缓存具有预取能力,可以在正常数据访问时把预取数据一并读取到最后一级缓存中,所以在访问状态下,llccache访问数据d1、数据d2和预取数据p1,访问结束后,进入idle状态,再进入自刷新状态。之后,进入下一个流程,以读取数据d3、数据d4和预取数据p2。因此,自刷新状态和访问状态之间的切换次数减少,即进入ddridle的次数由6次降低为4次,因此降低了ddridle的时间占比,提升了ddr自刷新状态的时间占比。

本申请的各实施方式可以任意进行组合,以实现不同的技术效果。

上述本申请提供的实施例中,从终端设备作为执行主体的角度对本申请实施例提供的方法进行了介绍。为了实现上述本申请实施例提供的方法中的各功能,终端设备可以包括硬件结构或硬件结构加软件模块的形式来实现上述各功能。上述各功能中的某个功能以硬件结构、软件模块、还是硬件结构加软件模块的方式来执行,取决于技术方案的特定应用和设计约束条件。

本发明实施例还提供一种计算机存储介质,该存储介质可以包括存储器,该存储器可存储有计算机程序,该计算机程序被执行时,可以使得终端设备执行包括如前述的图5所示的方法实施例中记载的终端设备所执行的全部步骤。

本发明实施例还提供一种包含计算机程序产品,当所述计算机程序产品在终端设备上运行时,可以使得所述终端设备执行包括如前述的图5所示的方法实施例中记载的终端设备所执行的全部步骤。

通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本申请实施例可以用硬件实现,或固件实现,或它们的组合方式来实现。当使用软件实现时,可以将上述功能存储在计算机可读介质中或作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是计算机能够存取的任何可用介质。以此为例但不限于:计算机可读介质可以包括ram、rom、电可擦可编程只读存储器(electricallyerasableprogrammablereadonlymemory,eeprom)、只读光盘(compactdiscread-onlymemory,cd-rom)或其它光盘存储、磁盘存储介质或者其它磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质。此外。任何连接可以适当的成为计算机可读介质。如本申请实施例所使用的,盘(disk)和碟(disc)包括压缩光碟(compactdisc,cd)、激光碟、光碟、数字通用光碟(digitalvideodisc,dvd)、软盘和蓝光光碟,其中盘通常磁性的复制数据,而碟则用激光来光学的复制数据。上面的组合也应当包括在计算机可读介质的保护范围之内。

总之,以上所述仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡根据本申请的揭露,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1