浮点数运算方法、装置及存储介质转让专利

申请号 : CN201811105891.1

文献号 : CN109408028B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘歆宁

申请人 : 东软集团股份有限公司

摘要 :

本申请提供一种浮点数运算方法、装置及存储介质,其中,该方法包括:将获取到的待计算浮点数转换成像素值,将该像素值拷贝到GPU中进行像素运算得到运算结果,将该运算结果转换成浮点数进行输出。该技术方案,将CPU中的浮点数运算转换成GPU中的像素值运算,不仅提高了浮点数的运算效率,而且降低了占用的CPU资源,避免了大量浮点数运算对计算机设备内部其他移动应用及业务逻辑运行效率的影响。

权利要求 :

1.一种浮点数运算方法,其特征在于,包括:

将获取到的待计算浮点数转换成像素值;

将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果;

将所述运算结果转换成浮点数进行输出;

所述将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果,包括:通过零拷贝的方式将存储在中央处理器CPU中的所述像素值读取到所述GPU中进行像素运算,得到所述运算结果;

所述将获取到的待计算浮点数转换成像素值之后,所述方法还包括:将所述像素值存储至预设存储地址对应的存储空间中;

相应的,所述通过零拷贝的方式将存储在中央处理器CPU中的所述像素值读取到所述GPU中进行像素运算,得到所述运算结果,包括:获取所述预设存储地址与所述GPU的缓存区的映射关系;

根据所述预设存储地址、所述映射关系,将所述像素值读取到所述GPU的缓存区中,以使所述GPU对所述像素值进行像素运算,得到所述运算结果;

获取所述GPU的所述运算结果。

2.根据权利要求1所述的方法,其特征在于,所述将获取到的待计算浮点数转换成像素值,包括:将获取到的所述待计算浮点数进行拆分并转换,得到红绿蓝透明RGBA格式的所述像素值;

相应的,所述方法还包括:根据所述RGBA格式的像素值形成图片;

相应的,将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果,包括:将所述图片拷贝到所述GPU中进行像素运算,得到运算结果。

3.一种浮点数运算装置,其特征在于,包括:获取模块、处理模块和输出模块;

所述获取模块,用于获取待计算浮点数;

所述处理模块,用于将获取到的所述待计算浮点数转换成像素值,将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果;

所述输出模块,用于将所述运算结果转换成浮点数进行输出;

所述处理模块,用于将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果,具体为:所述处理模块,具体用于通过零拷贝的方式将存储在中央处理器CPU中的所述像素值读取到所述GPU中进行像素运算,得到所述运算结果;

所述处理模块,用于将获取到的待计算浮点数转换成像素值之后,将所述像素值存储至预设存储地址对应的存储空间中;

相应的,所述处理模块,具体用于通过零拷贝的方式将存储在中央处理器CPU中的所述像素值读取到所述GPU中进行像素运算,得到所述运算结果,具体为:所述处理模块,具体用于获取所述预设存储地址与所述GPU的缓存区的映射关系,根据所述预设存储地址、所述映射关系,将所述像素值读取到所述GPU的缓存区中,以使所述GPU对所述像素值进行像素运算,得到所述运算结果,获取所述GPU的所述运算结果。

4.根据权利要求3所述的装置,其特征在于,所述处理模块,用于将获取到的待计算浮点数转换成像素值,包括:所述处理模块,具体用于将获取到的所述待计算浮点数进行拆分并转换,得到红绿蓝透明RGBA格式的所述像素值;

所述处理模块,还用于根据所述RGBA格式的像素值形成图片;

所述处理模块,用于将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果,具体为:所述处理模块,具体用于将所述图片拷贝到所述GPU中进行像素运算,得到运算结果。

5.一种浮点数运算装置,包括处理器、存储器及存储在所述存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如上述权利要求1或2所述的方法。

6.一种存储介质,其特征在于,所述存储介质中存储有指令,当其在计算机上运行时,使得计算机执行如权利要求1或2所述的方法。

说明书 :

浮点数运算方法、装置及存储介质

技术领域

[0001] 本申请涉及计算机技术领域,尤其涉及一种浮点数运算方法、装置及存储介质。

背景技术

[0002] 随着移动应用越来越复杂,以及人工智能(artificial intelligence,AI)技术的兴起,需要应用大量浮点数运算的场景越来越多,由于浮点数运算对计算机设备的性能有较大的影响,因而,浮点数运算方法在实际应用中越来越重要。
[0003] 现有技术中,计算机设备中的浮点数运算是在中央处理器(central processing unit,CPU)中逐条进行的,即,CPU对获取到的待计算的浮点数进行逐条计算。但是,在CPU中串行进行大量复杂浮点数运算时,不但CPU的运算效率低,而且浮点数运算会占用大量的CPU资源,严重影响了计算机设备内部其他移动应用及业务逻辑运行效率。

发明内容

[0004] 本申请提供一种浮点数运算方法、装置及存储介质,以解决现有浮点数运算在CPU中进行存在的运算效率低,影响计算机设备内部其他移动应用及业务逻辑运行效率的问题。
[0005] 本申请第一方面提供的一种浮点数运算方法,包括:
[0006] 将获取到的待计算浮点数转换成像素值;
[0007] 将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果;
[0008] 将所述运算结果转换成浮点数进行输出。
[0009] 在第一方面的一种可能实现方式中,所述将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果,包括:
[0010] 通过零拷贝的方式将存储在中央处理器CPU中的所述像素值读取到所述GPU中进行像素运算,得到所述运算结果。
[0011] 在第一方面的上述可能实现方式中,所述将获取到的待计算浮点数转换成像素值之后,所述方法还包括:
[0012] 将所述像素值存储至预设存储地址对应的存储空间中;
[0013] 相应的,所述通过零拷贝的方式将存储在中央处理器CPU中的所述像素值读取到所述GPU中进行像素运算,得到所述运算结果,包括:
[0014] 获取所述预设存储地址与所述GPU的缓存区的映射关系;
[0015] 根据所述预设存储地址、所述映射关系,将所述像素值读取到所述GPU的缓存区中,以使所述GPU对所述像素值进行像素运算,得到所述运算结果;
[0016] 获取所述GPU的所述运算结果。
[0017] 在第一方面的另一种可能实现方式中,所述将获取到的待计算浮点数转换成像素值,包括:
[0018] 将获取到的所述待计算浮点数进行拆分并转换,得到红绿蓝透明RGBA格式的所述像素值;
[0019] 相应的,所述方法还包括:根据所述RGBA格式的像素值形成图片;
[0020] 相应的,将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果,包括:
[0021] 将所述图片拷贝到所述GPU中进行像素运算,得到运算结果。
[0022] 本申请第二方面提供一种浮点数运算装置,包括:获取模块、处理模块和输出模块;
[0023] 所述获取模块,用于获取待计算浮点数;
[0024] 所述处理模块,用于将获取到的所述待计算浮点数转换成像素值,将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果;
[0025] 所述输出模块,用于将所述运算结果转换成浮点数进行输出。
[0026] 在第二方面的一种可能实现方式中,所述处理模块,用于将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果,具体为:
[0027] 所述处理模块,具体用于通过零拷贝的方式将存储在中央处理器CPU中的所述像素值读取到所述GPU中进行像素运算,得到所述运算结果。
[0028] 在第二方面的上述可能实现方式中,所述处理模块,还用于在将获取到的待计算浮点数转换成像素值之后,将所述像素值存储至预设存储地址对应的存储空间中;
[0029] 相应的,所述处理模块,具体用于通过零拷贝的方式将存储在中央处理器CPU中的所述像素值读取到所述GPU中进行像素运算,得到所述运算结果,具体为:
[0030] 所述处理模块,具体用于获取所述预设存储地址与所述GPU的缓存区的映射关系,根据所述预设存储地址、所述映射关系,将所述像素值读取到所述GPU的缓存区中,以使所述GPU对所述像素值进行像素运算,得到所述运算结果,获取所述GPU的所述运算结果。
[0031] 在第二方面的另一种可能实现方式中,所述处理模块,用于将获取到的待计算浮点数转换成像素值,包括:
[0032] 所述处理模块,具体用于将获取到的所述待计算浮点数进行拆分并转换,得到红绿蓝透明RGBA格式的所述像素值;
[0033] 所述处理模块,还用于根据所述RGBA格式的像素值形成图片;
[0034] 所述处理模块,用于将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果,具体为:
[0035] 所述处理模块,具体用于将所述图片拷贝到所述GPU中进行像素运算,得到运算结果。
[0036] 本申请第三方面提供一种浮点数运算装置,包括处理器、存储器及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述第一方面以及第一方面各可能实现方式中任一种所述的方法。
[0037] 本申请第四方面提供一种存储介质,所述存储介质中存储有指令,当其在计算机上运行时,使得计算机执行如第一方面以及第一方面各可能实现方式中任一种所述的方法。
[0038] 本申请实施例提供的浮点数运算方法、装置及存储介质,通过将待计算浮点数转换成像素值,利用该计算机设备内的GPU对该像素值进行运算,最后将GPU的运算结果转换成浮点数输出,提高了浮点数的运算效率,而且浮点数转换成的像素值在GPU中运算,降低了占用的CPU资源,避免了大量浮点数运算对计算机设备内部其他移动应用及业务逻辑运行效率的影响。

附图说明

[0039] 图1为本申请实施例提供的计算机设备的结构示意图;
[0040] 图2为本申请实施例提供的浮点数运算方法实施例一的流程示意图;
[0041] 图3为浮点数转换成RGBA格式的像素值的转换示意图;
[0042] 图4为像素值之间的运算示意图;
[0043] 图5为本申请实施例提供的浮点数运算方法实施例二的流程示意图;
[0044] 图6为本申请实施例提供的浮点数运算方法实施例三的流程示意图;
[0045] 图7为本申请实施例提供的浮点数运算装置实施例一的结构示意图;
[0046] 图8为本申请实施例提供的浮点数运算装置实施例二的结构示意图。

具体实施方式

[0047] 为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0048] 本申请实施例提供的浮点数运算方法应用于计算机设备中,图1为本申请实施例提供的计算机设备的结构示意图。如图1所示,该计算机设备包括:CPU 11、图形处理器(graphics processing unit,GPU)12、至少一个应用13。在本实施例中,当该计算机设备上的多个应用13在该计算机设备上运行时,每个应用13可能会产生多种需要CPU 11进行大量的浮点数运算以支持每个应用的运行。但是,CPU 11进行浮点数运算时的效率低,且存在影响计算机设备内部其他移动应用及业务逻辑运行效率的问题,CPU 11可以将需要运算的浮点数转换成像素值,多个像素值形成一个图片,将该图片发送给GPU 12,由该GPU 12进行运算。
[0049] 具体的,该CPU 11首先获取多个应用正常运行所需的待计算浮点数,并将待计算浮点数转换成像素值,该像素值可以用红绿蓝透明(red,green,blue,alpha)RGBA格式表示,其次将根据RGBA格式的像素值形成的图片拷贝到GPU 12中,由GPU 12执行图片中像素值之间的运算,得到运算结果,最后,CPU 11获取GPU 12的运算结果,并对其进行显示。
[0050] 值得说明的是,GPU 12也可以直接从应用13处获取从由待运算浮点数转换成的像素值,并对其进行运算。
[0051] 示例性的,图1示出的实施例以计算机设备包括CPU 11、GPU 12、至少一个应用13为例进行说明。在本实施例中,CPU 11和GPU 12分别与至少一个应用13连接,该CPU 11和GPU 12连接。值得说明的是,该计算机设备还可以包括存储器、收发器、输入输出设备等其他设备。本申请实施例并不对计算机设备的具体组成进行限定,其可以根据实际情况进行限定。
[0052] 本身实施例针对现有浮点数运算方法在中央处理器CPU中逐条进行时可能存在的运算效率低,影响计算机设备内部其他移动应用及业务逻辑运行效率的问题,提出了一种浮点数运算方法、装置及存储介质,通过将待计算浮点数转换成像素值,利用该计算机设备内的GPU对像素值进行运算得到运算结果,并反馈给CPU,最后由CPU将运算结果转换成浮点数进行输出,提高了浮点数的运算效率,此外,由于将转换得到的像素值置于GPU中进行运算,减小了占用的CPU资源,降低了浮点数运算对计算机设备内部其他移动应用及业务逻辑运行效率的影响。
[0053] 下面,通过具体实施例对本申请的技术方案进行详细说明。需要说明的是,下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
[0054] 图2为本申请实施例提供的浮点数运算方法实施例一的流程示意图。该浮点数运算方法的执行主体可以是计算机设备中的CPU。具体的,如图2所示,该浮点数运算方法可以包括如下步骤:
[0055] 步骤21:将获取到的待计算浮点数转换成像素值。
[0056] 在本实施例中,中央处理器CPU在进行浮点数运算之前,可以从计算机设备上的应用中获取待计算浮点数或者接收用户输入的待计算浮点数,并将该待计算的浮点数转换成像素值。
[0057] 通常情况下,每个浮点数由32位比特表示,由于GPU支持的像素之间的运算,而每个像素值可以用红绿蓝透明RGBA格式来表示,即像素值(xx,xx,xx,xx),其中,xx具体可以用十进制数表示。因而,可以将32位比特数的浮点数转换成4维8位比特的数值,形成像素值(xx,xx,xx,xx)。例如,图3为浮点数转换成RGBA格式的像素值的转换示意图。如图3所示,对于32位比特的浮点数(11001100001100111010101001010101),其可以分成4个部分,分别为11001100、00110011、10101010、01010101。其中,11001100转换成十进制数为204,00110011转换成十进制数为51,10101010转换成十进制数为170,01010101转换成十进制数为85,因而,该浮点数(11001100001100111010101001010101)对应RGBA格式的像素值(204,51,170,
85)。
[0058] 示例性的,在该步骤21之前,该方法还可以包括:接收用户输入的待计算浮点数。
[0059] 具体的,为了支持集成有人工智能的各种应用程序,计算机设备的CPU可以在该计算机设备的人机交互界面上获取待计算浮点数,具体的,该待计算浮点数可以是用户输入的。
[0060] 值得说明的是,该CPU获取的待计算浮点数也可以是计算机设备中的应用为了实现某一功能产生的待计算浮点数,本申请实施例并不限定待计算浮点数的获取方式,其可以根据实际情况确定。
[0061] 步骤22:将上述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果。
[0062] 在本实施例中,CPU将获取到的待计算浮点数转换成像素值之后,可以将该像素值拷贝到GPU中进行像素计算,进而得到运算结果。
[0063] 具体的,由于CPU是整个计算机设备的运算核心和控制核心,其主要解释计算机指令以及处理计算机软件中的数据。由于随着计算机设备的功能多样化和智能化,需要CPU处理的浮点数的数量会急剧增加,若所有的浮点数运算均由CPU执行,则势必会降低CPU的运算效率,且会影响计算机设备中其他应用和逻辑计算的运行效率。但是,鉴于GPU擅长大规模的并行计算,即图片中像素值之间的运算是并列的,因而,CPU可以将转换得到的像素值拷贝到GPU中,由该GPU进行像素值间的并行运算。
[0064] 例如,图4为像素值之间的运算示意图。如图4所示,对于由多个像素值组成的纹理x(即图片x)和纹理y(即图片y),在GPU中,该GPU可以对纹理x和纹理y中的每个像素值的每个分量进行运算,比如,纹理x和纹理y对应位置的像素值之间可以执行输出=sinx+ey+xy的运算。
[0065] 在本实施例中,CPU将浮点数转换成的像素值拷贝到GPU中时,每个像素值除以256再转换成浮点数的像素值进行计算,浮点数的像素值即可以满足CPU浮点数的运算要求,也满足GPU并行计算的运算规则,提高了运算效率。
[0066] 值得说明的是,图4所示实施例中像素值实际上是转换后的浮点数的像素值,本实施例也不限定图4中像素值的具体数值,其可以根据实际情况进行确定,此处不再赘述。
[0067] 关于本步骤22的具体实现方案可参见下述图5和图6所示实施例中的记载,此处不再赘述。
[0068] 步骤23:将上述运算结果转换成浮点数进行输出。
[0069] 在本申请实施例中,CPU得到GPU的运算结果之后,可以对该运算结果进行处理。由于CPU中的运算结果一般是以浮点数进行输出的,因而,CPU可以将获取到的运算结果转换成浮点数输出。
[0070] 具体的,该步骤23(将上述运算结果转换成浮点数进行输出)可以通过如下步骤实现:
[0071] 步骤A1:将上述运算结果转换成浮点数格式的运算结果。
[0072] 步骤A2:将该浮点数格式的运算结果进行显示。
[0073] 在本实施例中,CPU获取到GPU的运算结果之后,首先根据像素值与浮点数之间的转换规则,将该运算结果转换成浮点数格式的运算结果,进而将该浮点数格式的运算结果进行显示。
[0074] 当上述浮点数是用户通过人机交互界面输入的,相应的,该浮点数格式的运算结果可以通过该人机交互界面显示出来。或者,若待处理浮点数是CPU为了实现某一应用的功能获取到的,则该浮点数格式的运算结果则可以用于上述应用使用,以使该应用可以实现对应的功能。
[0075] 值得说明的是,GPU也可以将像素值格式的运算结果在GPU中转换成浮点数格式的运算结果,再反馈给CPU或者由CPU到GPU中获取,CPU在得到该浮点数格式的运算结果后进行输出显示。由于GPU可以将像素值格式的运算结果并行转换成浮点数格式的运算结果,转换效率高。
[0076] 本申请实施例提供的浮点数运算方法,通过将获取到的待计算浮点数转换成像素值,将该像素值拷贝到GPU中进行像素运算,得到运算结果,最后将该运算结果转换成浮点数进行输出。该技术方案中,将CPU中的浮点数运算转换成GPU中的像素值运算,降低了占用的CPU资源,避免了大量浮点数运算对计算机设备内部其他移动应用及业务逻辑运行效率的影响。
[0077] 进一步的,在上述实施例的基础上,图5为本申请实施例提供的浮点数运算方法实施例二的流程示意图。如图5所示,在本实施例中,上述21(将获取到的待计算浮点数转换成像素值)可以通过如下步骤实现:
[0078] 步骤51:将获取到的待计算浮点数进行拆分并转换,得到红绿蓝透明RGBA格式的像素值。
[0079] 在本实施例中,由于GPU可以对像素值格式的图片进行运算,因而,CPU可以将获取到的待计算浮点数转换成像素值,具体的,将每个32位比特的浮点数转换成红绿蓝透明RGBA格式的像素值,进而利用RGBA格式的像素值来表示图片的一个色彩空间。
[0080] 相应的,在该步骤51之后,该浮点数运算方法还可以包括步骤52:
[0081] 步骤52:根据该RGBA格式的像素值形成图片。
[0082] 在本实施例中,多个像素值可以形成一张图片,因而,在CPU得到多个像素值之后,可以将每个并排设置形成GPU可以处理的图片。
[0083] 相应的,上述步骤22(将上述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果)可以通过如下步骤实现:
[0084] 步骤53:将上述图片拷贝到GPU中进行像素运算,得到运算结果。
[0085] 在本实施例中,CPU得到由多个像素值形成的图片之后,可以通过零拷贝的方式,即数据地址映射的方式将得到的图片拷贝到GPU中,进而由该GPU对图片之间的像素值进行运算,得到运算结果(例如,像素值格式的运算结果)。
[0086] 本申请实施例提供的浮点数运算方法,通过将上述待计算浮点数进行拆分并转换,得到红绿蓝透明RGBA格式的像素值,根据该RGBA格式的像素值形成图片,并将该图片拷贝到GPU中进行像素运算得到运算结果。该技术方案,通过图片的形式拷贝到GPU中进行像素运算,提高了拷贝效率,同时,减轻了CPU的处理负担。
[0087] 在本申请的另一种可能实现方式中,上述步骤22(将上述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果)可以通过如下步骤实现:
[0088] 通过零拷贝的方式将存储在中央处理器CPU中的像素值读取到该GPU中进行像素运算,得到运算结果。
[0089] CPU可以借助于数据映射函数将CPU中的数据拷贝到GPU中。具体的,在本申请的实施例中,该数据映射函数可以是glMapBuffer函数,其可以将一个GPU缓存区对象中的数据映射为客户端中的地址空间,进而可以使用该glMapBuffer函数将CPU转换得到的像素值读取到GPU中。
[0090] 由于CPU与GPU互相映射,因而CPU与GPU之间的数据拷贝方式为零拷贝,提高了数据从CPU到GPU的拷贝效率。
[0091] 在本实施例中,通过零拷贝的方式将存储在中央处理器CPU中的像素值读取到该GPU中进行像素运算得到运算结果,提高了CPU与GPU的拷贝效率,为提高计算机设备中的浮点数运算效率提供了实现可能。
[0092] 在上述实施例的基础上,图6为本申请实施例提供的浮点数运算方法实施例三的流程示意图。如图6所示,在本实施例中,在上述21(将获取到的待计算浮点数转换成像素值)之后,该浮点数运算方法还可以包括如下步骤:
[0093] 步骤61:将上述像素值存储至预设存储地址对应的存储空间中。
[0094] 在本实施例中,当CPU将获取到的浮点数转换成像素值之后,该CPU可以将该像素值存储在该CPU中,例如,按照CPU与GPU空间映射的关系,可以将该像素值存储至CPU的预设存储地址对应的存储空间中,以便CPU可以将该预设存储地址对应存储空间中的像素值通过零拷贝的方式拷贝到GPU中。
[0095] 相应的,上述通过零拷贝的方式将存储在中央处理器CPU中的像素值读取到该GPU中进行像素运算,得到运算结果的步骤具体可以解释如下:
[0096] 步骤62:获取上述预设存储地址与该GPU的缓存区的映射关系。
[0097] 在本实施例中,该计算机设备中存储有CPU的存储地址与GPU的缓存区的映射关系,因而,当CPU将转换得到的像素值存储至预设存储地址对应的存储空间中之后,可以根据该预设存储地址在CPU中进行查找,获取上述预设存储地址与该GPU的缓存区的映射关系。
[0098] 步骤63:根据该预设存储地址、上述映射关系,将上述像素值读取到GPU的缓存区中,以使该GPU对像素值进行像素运算,得到运算结果。
[0099] 在本实施例中,CPU可以根据该像素值对应的预设存储地址、该预设存储地址与该GPU的缓存区的映射关系,将预设存储地址对应存储空间中的像素值读取到GPU的缓存区中,这样GPU可以对缓存区中的像素值进行运算,得到运算结果。
[0100] 步骤64:获取该GPU的运算结果。
[0101] 在本实施例中,GPU对像素值进行像素运算得到运算结果之后,可以将该运算结果反馈给CPU。作为一种示例,GPU可以将该运算结果存储在缓存区中,通过GPU的缓存区与CPU的存储地址的关系,GPU可以将该运算结果拷贝到CPU的存储地址对应的空间中,从而使得该CPU获取到该运算结果。作为另一种示例,该GPU在得到运算结果之后,可以直接将该运算结果发送给CPU,从而使得该CPU获取到该运算结果。
[0102] 本申请实施例提供的浮点数运算方法,CPU将获取到的待计算浮点数转换成像素值之后,还将该像素值存储至预设存储地址对应的存储空间中,再获取该预设存储地址与GPU的缓存区的映射关系,根据该预设存储地址、该映射关系,将该像素值读取到GPU的缓存区中,以使该GPU对上述像素值进行像素运算得到运算结果,最后获取到该GPU的所述运算结果。该技术方案,通过预设存储地址与GPU的缓存区的映射关系,实现了CPU和GPU数据的拷贝,为在GPU中实现像素值的运算奠定了基础,相应的提高了浮点数运算的效率。
[0103] 值得说明的是,在本实施例中,通过将CPU的复杂浮点数运算转换为在GPU中的并行的图片运算,大幅提高运行速度,而且GPU支持大多数的的浮点数运算,如加减乘除、指数、多项式等,因而,本申请实施例的浮点数运算方法应用范围广,实现灵活。
[0104] 下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
[0105] 图7为本申请实施例提供的浮点数运算装置实施例一的结构示意图。该浮点数运算装置可以集成在计算机设备中,也可以为一计算机设备。如图7所示,该浮点数运算装置可以包括:获取模块71、处理模块72和输出模块73。
[0106] 其中,该获取模块71,用于获取待计算浮点数。
[0107] 该处理模块72,用于将获取到的所述待计算浮点数转换成像素值,将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果。
[0108] 该输出模块73,用于将所述运算结果转换成浮点数进行输出。
[0109] 在本申请的一种可能实现方式中,所述处理模块72,用于将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果,具体为:
[0110] 所述处理模块72,具体用于通过零拷贝的方式将存储在中央处理器CPU中的所述像素值读取到所述GPU中进行像素运算,得到所述运算结果。
[0111] 在本申请的上述可能实现方式中,所述处理模块72,还用于在将获取到的待计算浮点数转换成像素值之后,将所述像素值存储至预设存储地址对应的存储空间中;
[0112] 相应的,所述处理模块72,具体用于通过零拷贝的方式将存储在中央处理器CPU中的所述像素值读取到所述GPU中进行像素运算,得到所述运算结果,具体为:
[0113] 所述处理模块72,具体用于获取所述预设存储地址与所述GPU的缓存区的映射关系,根据所述预设存储地址、所述映射关系,将所述像素值读取到所述GPU的缓存区中,以使所述GPU对所述像素值进行像素运算,得到所述运算结果,获取所述GPU的所述运算结果。
[0114] 在本申请的另一种可能实现方式中,所述处理模块72,用于将获取到的待计算浮点数转换成像素值,包括:
[0115] 所述处理模块72,具体用于将获取到的所述待计算浮点数进行拆分并转换,得到红绿蓝透明RGBA格式的所述像素值;
[0116] 所述处理模块72,还用于根据所述RGBA格式的像素值形成图片;
[0117] 所述处理模块72,用于将所述像素值拷贝到图形处理器GPU中进行像素运算,得到运算结果,具体为:
[0118] 所述处理模块72,具体用于将所述图片拷贝到所述GPU中进行像素运算,得到运算结果。
[0119] 本申请实施例提供的装置,可用于执行图2、图5和图6所示实施例中的方法,其实现原理和技术效果类似,在此不再赘述。
[0120] 需要说明的是,应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,确定模块可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上确定模块的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里所述的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
[0121] 例如,以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(application specific integrated circuit,ASIC),或,一个或多个微处理器(digital signal processor,DSP),或,一个或者多个现场可编程门阵列(field programmable gate array,FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(central processing unit,CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,SOC)的形式实现。
[0122] 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘solid state disk(SSD))等。
[0123] 图8为本申请实施例提供的浮点数运算装置实施例二的结构示意图。如图8所示,该浮点数运算装置,可以包括:处理器81和存储器82及存储在所述存储器82上并可在所述处理器81上运行的计算机程序,所述处理器81执行所述计算机程序时实现如上述图2、图5和图6所示实施例的方法。
[0124] 具体的,在本申请实施例中,该处理器81可以包括中央处理器811和图形处理器822。
[0125] 其中,该中央处理器811,用于获取待处理浮点数,并将获取到的待计算浮点数转换成像素值,将所述像素值拷贝到图形处理器GPU中。
[0126] 该图形处理器822,用于对上述像素值进行像素运算,得到运算结果。
[0127] 该中央处理器811,还用于获取图形处理器822得到的所述运算结果,并将所述运算结果转换成二进制进行输出。
[0128] 本申请实施例还提供一种存储介质,所述存储介质中存储有指令,当其在计算机上运行时,使得所述计算机执行如上述图2、图5和图6所示实施例的方法。
[0129] 本申请实施例还提供一种运行指令的芯片,所述芯片用于执行上述图2、图5和图6所示实施例的方法。
[0130] 本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系;在公式中,字符“/”,表示前后关联对象是一种“相除”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中,a,b,c可以是单个,也可以是多个。
[0131] 可以理解的是,在本申请的实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本申请的实施例的范围。
[0132] 可以理解的是,在本申请的实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请的实施例的实施过程构成任何限定。
[0133] 最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。