使用GPU/CPU体系结构的RSA的高效实现的制作方法与工艺

文档序号:12557145阅读:338来源:国知局
使用GPU/CPU体系结构的RSA的高效实现的制作方法与工艺
使用GPU/CPU体系结构的RSA的高效实现背景图形处理单元上的通用计算(GPGPU)是使用通常只处理计算机图形的计算的图形处理单元(GPU)来为传统上由CPU处理的应用程序执行计算的技术。GPU越来越多地用于通用计算。GPU更加适合于带有丰富的并行性的面向吞吐量的工作负荷,诸如任务并行(粗粒的(coarsegrained))或数据并行(细粒的(finegrained))计算。相比之下,CPU更加适合于等待时间敏感的并具有隐式指令级并行性的应用程序。可以得益于GPGPU的一个特定示例是RSA处理。RSA是用于公钥加密的算法。缩写词RSA代表Rivest、Shamir,以及Adleman,他们是首先公开地描述该算法的个人。RSA加密与解密是从计算上来说昂贵的算法。更多研究工作聚焦于加速RSA解密,因为解密从计算上来说比加密昂贵得多。最近的CPU上的RSA解密的最佳CPU实现仍耗费大约0.7百万个周期。将这样的昂贵的操作分摊到GPU可以提高效率并使CPU解脱,来执行其他任务。然而,简单地将CPURSA实现移植到GPU将导致较差的性能,而不会使用GPU的并行处理能力。相应地,需要改善的技术来解决这些及其他问题。附图简述图1示出了适用于实现本发明的各实施例的异构硬件体系结构的框图。图2示出了适用于实现本发明的各实施例的示例工具集和执行模型的框图。图3示出了适用于实现本发明的各实施例的示例编程模型的框图。图4示出了逻辑流程的一个实施例。图5示出了逻辑流程的一个实施例。图6示出了可以适用于实现本发明的各实施例的系统的实施例。图7示出了其中可以实现图6的系统的小形状因子设备的各实施例。详细描述异构型处理器体系结构将GPU以及CPU集成到同一管芯上。尽管CPU更加适合于等待时间敏感的并具有隐式指令级并行性的应用程序,但是,GPU针对带有丰富的并行性的面向吞吐量的工作负荷。当面向吞吐量的和面向等待时间的处理核存在于同一管芯上时,可能希望利用一前一后(intandem)操作的这样的核来解决异构工作负荷。从性能角度来看,位于处理器管芯上的GPU可以从尖端CPU制造过程接收到增强以及访问大的芯片上缓存。此外,在CPU和GPU存储器之间传输数据的开销可以通过共享同一个主存储器来消除。然而,为了充分利用这样的有效率的集成的体系结构,需要能够在现有的开发环境内无缝地利用GPU加速的编程平台。C用于媒体(C-for-media:Cm)平台就是这样的平台。最初开发Cm平台是为了在集成的GPU上启用供应商特定的专有的视频处理算法。传统上,视频处理阶段的加速是通过嵌入在图形驱动器中的内核来实现的。当应用程序作出应用程序编程接口(API)调用时,驱动器将访问并执行这些内核以提供加速服务。Cm平台可以描述为用于利用异构型处理器体系结构中的CPU和GPU的协作执行环境。Cm平台的组件可以包括Cm语言、其实现(例如,编译器)和Cm运行时。Cm语言可以是对C/C++的简单扩展,该扩展在较高的抽象级别提供表达数据并行性的直观接口。Cm语言被设计成有效率地利用GPU的单指令多数据(SIMD)能力。Cm运行时管理执行环境,而同时支持允许开发人员从它们的现有的C/C++应用程序调用GPU的API。Cm编译器可以从以Cm编写的针对GPU的源代码生成优化的GPU机器代码指令,其中从下层GPU硬件中提取尽可能多的并行性。Cm编译器也可以包括允许在GPU上运行Cm程序的实时转换器(Jitter)。Cm平台的目标是允许程序员保留他们的现有的为CPU并行化和/或优化的应用程序,但是,将应用程序的数据-并行或“整体并行(massive-parallel)”的段委托给管芯上的GPU。现代CPU对于通过各种体系结构技术来最小化连续的程序的执行时间以隐藏存储器等待时间并提取指令级并行性是理想的。此外,多个CPU以及每个CPU的多线程功能更加适合于粗粒的任务级并行性。另一方面,GPU是主要设计用于麻烦地并行的图形应用程序的面向吞吐量的处理器。因此,在它们的通用并且可编程的形式下,GPU天然地适合于带有丰富的并行性的数据并行程序段。Cm平台提供统一的编程环境以利用包括CPU和GPU的异构型处理器的全部潜力。如上文所提及的,RSA加密以及特别是解密是从计算上来说昂贵的公钥密码算法。将这样的昂贵的操作分摊到GPU可以使CPU解脱,来执行其他任务。Cm平台可以通过让CPU建立GPU环境、执行主要RSA函数,并将数据传递到执行实际计算的GPU,来利用异构型处理器体系结构中的CPU和GPU。RSA处理RSA涉及公钥和私钥。公钥已为每个人所知,并用于加密消息。利用公钥加密的消息只能使用私钥来解密。典型的RSA实现涉及三个步骤:密钥生成,加密与解密。密钥生成用于RSA算法的公钥和私钥可以按如下方式来生成。通信各方可以选择两个随机质数p和q。出于安全目的,整数p和q应该是随机地选择的,并应该是类似的比特长度。然后,通信各方可以计算乘积为n=pq。然后,可以将n用作公钥和私钥的模。然后,可以计算其中,是欧拉函数(Euler'stotientfunction)。整数e可以被选择为使得e和(n)是互质,然后,可以释放e,作为公钥指数。可以根据公式((d*e)模来确定私钥指数d。公钥可以由模n和公共(或加密)指数e构成。私钥包括模n和必须保密的私有的(或解密)指数d。加密作为示例,第一方可以将其公钥(n,e)传输到第二方,并将私钥(d)保密。假设,第二方希望向第一方发送消息M。第二方可以首先通过使用被称为“填充方案”商定的可逆协议,将M转换为整数m,以使得0<m<n。然后,第二方根据下列公式来计算密文c:c=memodn这可以使用求幂的方法通过平方来快速地完成。然后,第二方可以将c传输到第一方。解密然后,第一方可以通过使用其私钥指数d,通过计算下列公式,从c恢复m:m=cdmodn给定m,第一方可以通过颠倒填充方案,来恢复原始消息M。在实践中,可以有使用预先计算出的值来计算cd的更有效率的方法。例如,使用中国剩余算法(ChineseRemainderAlgorithm)以及下面的作为私钥的一部分存储的预先计算出的值来优化:p和q,dp=d(modp-1),dq=d(modq-1)和qInv=q-1modp,接收方可以按如下方式更有效率地计算幂m=cdmodpq:h=qInv*(m1-m2)modpm=m2+(h*q)这可以比计算m=cdmodpq更有效率,尽管将要计算两个模取幂(modularexponentiation)。原因是,这两个模取幂两者都使用较小的指数和较小的模。现有的RSA计算机实现一般被设计用于CPU执行,不会利用GPU的单指令多数据(SIMD)指令集。然而,简单地将上面的CPU实现的RSA算法移植到GPU将导致较差的性能,而不会使用GPU的并行处理能力。呈现了RSA计算机实现,该实现被量身订制以针对GPU的硬件支持的SIMD大小和对准要求以及使用GPU上的SIMD指令来加速RSA处理的能力。最终结果可能是RSA处理的显著的改进。为使用GPU的并行处理能力,可以实现此处可以称为“循环剥离”的编译器优化技术。循环剥离可以获得更高效矢量代码,用于在GPU上执行。现在将参考附图,全部附图中相同的参考编号用于表示相同的元件。在下面的描述中,为了进行说明,阐述了很多具体细节以便提供对本发明的全面理解。然而,显而易见,可以没有这些具体细节的情况下实施各新颖实施方式。在其他情况下,以框图形式示出了各个公知的结构和设备以便于描述本发明。本发明将涵盖落入所要求保护的主题的精神和范围内的所有修改、等效方案和替换方案。图1示出了适用于实现本发明的RSA处理实施例的异构硬件体系结构的简化框图。CPU110和GPU120彼此可以进行通信,以便CPU110可以执行主函数,诸如,例如,RSA主函数115。CPURSA主函数115可以被编码为使得它可以对可以在GPU120上执行的进程(例如,GPU函数125、130、135)作出函数调用。尽管CPU110更加适合于等待时间敏感的并具有隐式指令级并行性的应用程序,但是,GPU120针对带有丰富的并行性的面向吞吐量的工作负荷。可以被CPU110上的RSA主函数115调用的GPU函数125、130、135可以包括执行模取幂操作的滑动窗口(slidingwindow)函数125,利用蒙哥马利空间(Montgomeryspace)中的逐字的降低来执行模乘法操作的mulredc函数130,以及,执行大数乘法操作的addmul函数135。GPU函数125、130、135可以负责执行与RSA算法相关联的大型的并且从计算上来说昂贵的数学运算。RSA主函数115可以将中国剩余定理(ChineseRemainderTheorem)的数据参数传递到GPU函数125、130、135。上文所描述的参数可以重新表述为:其中,M表示经历RSA处理的加密消息的普通文本。可以将M的RSA解密公式转发到GPU120,来进行计算。首先,可以加载由CPU110传递的RSA参数。滑动窗口函数125可以使用mulredc函数130来利用一半大小计算两个模取幂,如下所示:modpmodq然后,可以使用mulredc函数130来计算公式的其余部分,以利用蒙哥马利空间中的逐字的降低的模乘法操作来导出M,并将结果返回到CPU110。在计算M时,mulredc函数130可以调用addmul函数135,来执行完成对M的计算所需的大数乘法操作。在计算M时,addmul函数可以是最频繁调用的函数,并且如果它可以被优化,则可以提供较高的RSA处理效率。图2示出了示例Cm平台工具集和执行模型的框图,而图3示出了根据本发明的各实施例的适用于实现RSA处理的Cm平台编程模型的实施例的框图。从程序员的角度来看,使用Cm编程模型300的应用程序(例如,RSA)包括两个模块:要在CPU上执行的主应用程序225,以及针对GPU120的GPUCm内核205。主应用程序225可以是可以通过C++编译器230编译为用于在CPU110上执行的二进制应用程序235的普通C/C++程序。然而,为使用GPU120来加速代码的某些段,开发人员可能需要通过插入到主应用程序225中的Cm运行时API调用来设置并调用GPU120。针对GPU的代码可能需要被组织到GPUCm内核205,GPUCm内核205可以以Cm语言编写并可以由Cm编译器210处理,以创建可以在GPU260上执行的机器代码。GPUCm内核205可以实例化为用户指定数量的线程325-n。然后,可以将每一个线程325-n调度到叫做执行单元(EU)365-n的按序SIMD处理单元上运行。与开放计算语言(OpenCL)或计算统一的设备体系结构(CUDA)不同,Cm中的单个线程325-n对数据的块332-n进行操作。对数据的块332-n的SIMD计算以Cm表达,并通过Cm编译器210被高效转换为指令集体系结构(ISA)文件220。作为示例,在图3中示出了要在CPU110上执行的主机main()函数310。主机main()(主())函数310可以包括初始化并设置GPU120和GPU内核205(行3和5),调用GPU120以执行GPU内核205(行6),以及读回输出(行7)的代码。为清楚起见,使用宏指令来隐藏实际运行时API。函数主机main()310下面所示出的函数testl()(测试1())320可以利用Cm关键字″_GPU_MAIN_″(_GPU_主_)来注释,以指出函数testl()320可以是在GPU120上执行的CmGPU内核205。从GPUCm内核205实例化的线程325-n可以对数据空间230的用户确定的块332-n操作,并可以由线程调度器368派遣在GPU120中的一个或多个EU365-n上运行。在单个GPU调用中,可以有来自多个GPUCm内核205的线程325-n。只有一个线程325-n可以在单个EU365-n上执行,直到其完成,但是,每个EU365-n都可以具有多个同时驻留的线程325-n,它们被时间分片以提高整体执行吞吐量。每一个EU365-n都可以包括多个SIMD通道374,这些通道374可以被用来执行其SIMD指令,指令可以是其ISA的一部分,并由Cm编译器210从GPUCm内核205生成。每个EU365-n也都可以访问大的通用寄存器文件(GRF),以降低存储器访问开销。为取得最佳性能,将内核的整个工作组保留在GRF372内是合理的。通过GPU120内的共同的GPU缓存362和可以与所有CPU共享的大的处理器级别的缓存350,可以进一步对EU365-n隐藏存储器访问等待时间。在图3的所示出的Cm并行处理模型300中,程序员可以标识算法中的数据级别的并行性,并重构现有的顺序码,如果需要,公开GPUCm内核205中的细粒的并行性。在概念上,数据空间330可能需要被分成线程和EU友好的块332-n,以及以GPUCm内核205表达的对它们的计算。如函数testl()320GPUCm内核205所说明的,此特定GPUCm内核205中的典型的计算周期可以包括:(i)将数据块从存储器340读取到GRF372(行7和8),(ii)对读取数据的操作(行9-11),以及,(iii)将来自GRF372的计算出的输出写入到存储器340(行12)。可以鼓励程序员尽可能多地公开数据的块332-n内的并行性,因为Cm编译器210可以负责降低并行性的程度,以匹配在EU365-n中可用的资源。如图2所示,GPUCm内核205可以由Cm编译器210编译为中间语言共同的ISA文件220。公共ISA是可以被转换以在任何当前或未来的GPU上运行的高级的,通用的汇编语言。在运行时,CmJIT编译器245可以将公共ISA文件220转换为GPU可执行代码。接下来,可以由C++编译器230将主应用程序225编译为二进制应用程序235。在运行时,二进制应用程序235可以调用Cm-运行时API,以设置在GPU120上并在其上执行。Cm运行时240可以给应用程序提供所需的硬件抽象层。Cm运行时240可以管理设备创建、建立输入和输出缓存、执行内核创建、建立线程自变量、以及向GPU120派遣内核。在内核创建过程中,Cm运行时240可以调用CmJIT编译器245,来从公共ISA文件220生成GPU二进制。随后,可以完全以硬件由GPU的线程调度器368来执行线程创建和调度。如此,CPU110负责创建命令队列,使任务排队,创建存储器,将数据传递到GPU,从GPU120获取结果,而GPU120执行真正的RSA计算。此处所包括的是一个或多个表示用于执行所公开的体系结构的新颖方面的示例性方法的流程图。尽管出于解释简明的目的,此处例如以流程图形式示出的一个或多个方法被示出并且描述为一系列动作,但是可以理解,各方法不受动作的次序的限制,因为根据本发明,某些动作可以按与此处所示并描述的不同的次序和/或与其他动作同时发生。例如,本领域的技术人员将明白并理解,方法可被替换地表示为一系列相互相关联的状态或事件,诸如以状态图的形式。此外,并非方法中所示出的所有动作都是新颖实现所必需的。图4示出了用于在异构CPU/GPU处理体系结构上实现RSA处理的各实施例的逻辑流程的一个实施例。逻辑流程400可以代表由此处所描述的一个或多个实施例执行的某些或全部操作。在图4所示出的实施例中,在框405,逻辑流程400可以将RSA参数从CPU110传递到GPU120。例如,参数Cp、Cq、p、q、dp、dq以及q-1modp可以从由CPU110执行的RSA主函数115传递到由GPU120执行的滑动窗口函数125。各实施例不仅限于此示例。在框410,逻辑流程400可以计算模取幂。例如,滑动窗口函数125可以接收RSA参数Cp、Cq、p、q、dp、dq,以及q-1modp,并可以开始处理它们,以求解M,加密的消息。逻辑流程400可以使用具有窗口大小=5的滑动窗口函数125来计算一半大小的两个模取幂,modp,以及modq。在滑动窗口函数125内,可以对mulredc函数125作出十六(16)个调用,来预先计算参数Cp、Cq、p、q、dp、dq以及q-1modp的表。一旦预先计算出了表,就可以在内循环的条件分支内,再次调用mulredc函数125。各实施例不仅限于此示例。逻辑流程400可以在框415计算公式的其余部分,以导出M。例如,滑动窗口函数125可以调用mulredc函数130,以执行,例如,多个模乘法操作以及sub、add、mul、mulredc、redc操作以计算公式的其余部分,以导出M。对于大数字模取幂操作,由滑动窗口函数125执行的滑动窗口方法可以比二进制扫描方法更高效。这是因为,滑动窗口函数125使用较少的模乘法操作来执行模取幂操作。可以选择窗口大小(5),作为速度和存储预先计算出的参数表所需的存储器要求之间的合理的折衷。数学函数sub可以执行大数减法。数学函数add可以执行大数加法。数学函数mul可以执行模乘法。数学函数redc可以执行模简化。mulredc和redc可以用于滑动窗口函数中,sub可以被mulredc使用。sub和add也可以用于主RSA计算过程中,以导出M。各实施例不仅限于此示例。在框420,逻辑流程400可以调用addmul135。例如,mulredc函数130可以调用addmul函数135,以执行大数乘法操作。可以使用矢量条状提取(stripmining)和循环剥离技术来优化addmul函数135。各实施例不仅限于此示例。逻辑流程400可以在框425将M的解密的值返回到CPU110。例如,GPU120在完成其计算以及计算M之际可以将其结果返回到在CPU110上执行的RSA主函数115。各实施例不仅限于此示例。循环剥离第一RSA优化技术可以被称为“循环剥离”。循环剥离通过使矢量操作数更好地符合特定硬件支持的SIMD大小和对准要求,导致更好的矢量代码。循环剥离技术可以对于addmul函数实现,以显著改善RSA处理效率,因为在计算M时addmul是调用最多的函数。将任意矢量长度的高级别指令,特别是循环内的,最佳地简化为硬件支持的矢量宽度的过程可以被称为“矢量条状提取”。循环剥离可以通过生成较高矢量宽度的较少的指令,这些指令更好地使用关键内循环内的可用的指令带宽,来改善矢量条状提取编译器优化。例如,此处所描述的循环剥离和代码优化示例能够将内循环中的shift(移位)操作从机器代码的7个mov(移动)减到3个mov。此减少可以导致改善的RSA处理效率。RSA算法的关键内循环当前可以在表1中编码为:表1上面的shift操作可以由,例如,Cm编译器编译为供GPU执行的机器代码,当符合硬件支持的SIMD大小和GPU的对准要求时,该机器代码包括七个mov,如表2所示。表2mov(4)r54.1<1>:udr50.0<4;4,1>:ud{Alignl}mov(2)r54.5<1>:udr50.4<2;2,1>:ud{Align1}mov(1)r54.7<1>:udr50.6<0;1,0>:ud{Alignl}mov(1)r55.0<1>:udr50.7<0;1,0>:ud{Align1}mov(4)r55.1<1>:udr51.0<4;4,1>:ud{Alignl}mov(2)r55.5<1>:udr51.4<2;2,1>:ud{Align1}mov(1)r55.7<1>:udr51.6<0;1,0>:ud{Align1}诸如Cm之类的矢量语言的关键编译器优化涉及将任意大矢量长度的高级别Cm源代码指令简化为较小的矢量长度的分量源代码指令的序列,较小的矢量长度等于或小于由硬件中的指令支持的最大矢量长度。GPU编译器优化目标是最大化编译的机器代码指令的矢量长度,以更好地使用由硬件所提供的指令带宽,并由此最大化性能。对于GPU,实现八(8)或十六(16)指令宽度最佳地使用可用指令带宽,因为指令流水线将内部地将具有十六(16)矢量长度的指令简化为具有八(8)矢量长度的分量指令。此优化的目标的的障碍是,简化的指令操作数必须根据硬件的操作数对齐规则来对齐。在传统的矢量条状提取中,输入源代码指令是标量指令。编译器必须通过一般等于由硬件支持的最大矢量长度的因素来展开代码的循环,以使得(i)被展开的指令可以被合并成等于最大硬件支持的宽度的宽度的矢量指令,以及(ii)指令操作数尊重硬件的操作数对准要求。然而,在Cm平台中,源代码已经包括矢量指令。如此,不需要编译器展开循环。源代码已经是矢量形式,虽然宽度大于硬件支持的宽度。问题变为将矢量指令分解为成份矢量(constituentvector)指令的问题,其中每一个成份矢量指令(i)具有等于或小于最大硬件支持的宽度的矢量宽度,以及(ii)指令操作数尊重硬件的操作数对准要求。此处所描述的优化将成份矢量指令的矢量长度最大化为可用指令带宽。一般而言,与经典矢量条状提取相比,已经处在矢量形式的条状提取代码应该产生好得多的结果。这是因为,传统矢量条状提取中所使用的输入源代码处于标量形式,并不总是可以非常轻松地通过必需的因素展开循环。对于RSA内核源代码的关键内循环,对于类型Dword(双字)的本地矢量指令允许的最大硬件宽度是八(8)。由于关键shift操作中的未对齐的目的地区域(r54.1:d),因此,不能将源代码编译为此宽度的简化的指令,指令不能被高效地条状提取。如上所示,对于关键shift操作,可以将源代码编译为宽度4、2、1、1、4、2、1的七(7)个机器代码指令。由于所有编译的机器代码指令的宽度小于八(8)个,因此,机器代码指令中没有一个最佳地使用可用指令带宽,并且总体性能受到损失。可以改善条状提取优化阶段,以利用两个编译器导出的观测值来为关键内循环中的shift生成更高效代码。首先,如果操作数是较小的大小,则编译器可以为操作获取较高的SIMD大小。这可以使用ushort操作数代替uint操作数来实现。GPU中的单个未经压缩的指令可以对十六(16)个short或八(8)个iht操作。其次,根据源代码的关键内循环的第二迭代,移位的值是可以通过使用ushort类型来表示的0(诸个)或1(诸个)。这是基于构建的定义使用链接确定的。在表1所示出的示例中,有两个对于内循环中的变量prod的使用的定义。一个定义是对于位于循环之外的prod的初始化,而另一个定义是从同一个循环内的合并语句携带的循环。另外,可以判断,虽然来自循环外面的prod的初始化定义的结果需要Dword精度,循环携带的定义的结果只是1(诸个)和0(诸个)仅要求word(字)精度。基于两个观测值,可以在条状提取之前,剥离内循环的第一迭代。然后,内循环的其余部分的关键shift操作中所使用的操作数prod的类型可以从u32降低到u16。shift的类型也可以降低,因为循环外面的其初始化定义是0,这可以在ushort中表示,并且其循环携带的定义是刚刚降低到内循环的剥离的其余部分中的word类型的prod。循环剥离步骤可仅在可以预料这样做将允许随后的矢量条状提取优化生成更好的矢量代码的情况下才执行。基于以上所述,可以重新编写内循环的优化的变换的代码,如表3所示,其中,剥离的循环中所使用的类型降低的操作数被命名为wshift和wprod。表3上面的优化的代码可以被编译为包括四(4)个mov的机器代码指令,如表4所示。表4mov(8)r19.1<1>:uwr17.0<8;8,1>:tuw{Alignl}mov(4)r19.9<1>:uwr17.8<4;4,1>:uw{Alignl}mov(2)r19.13<1>:uwr17.12<2;2,1>:uw{Alignl}mov(1)r19.15<1>:uwr17.14<0;1,0>:uw{Alignl}值得注意的是,只有表4所示出的机器代码指令序列中的第一mov最佳地使用GPU硬件的可用指令带宽,而其他三个mov指令仍不能充分使用可用指令带宽。尽管如此,编译的指令吞吐量比已编译为包括七(7)个未充分使用的mov的机器代码的原始未优化的代码更好(参见表2)。此时,可以对类型降低的变量的布局作出额外的优化,以进一步减少内循环中的mov的数量。例如,16宽的wshift变量可以被拆分成两个9宽的wshift1和wshift2变量。此改善的布局可以导致表5所示出的下列变换的优化的代码,其中,剥离的循环中所使用的类型降低的操作数现在命名为wshift1、wshift2,以及wprod。表5内循环中的shift操作序列现在可以被编译为包括3个mov的机器代码指令,如下面的表6所示。表6mov(8)r19.1<1>:uwr17.0<8;8,1>:uw{Alignl}mov(1)r22.0<1>:uwr17.7<0;1,0>:uw{Alignl}mov(8)r22.1<1>:uwr17.8<8;8,1>:uw{Alignl}这可能是最佳机器代码指令序列,因为只有shift操作中的一个指令未充分使用可用带宽,这是不能避免的。虽然SIMD16merge(合并)指令被拆分成两个SIMD8指令,但是,指令吞吐量保持不变,因为指令流水线将内部地自动地将SIMD16指令细分为两个SIMD8指令。图5示出了根据本发明的各实施例的逻辑流程500的一个实施例,其中,描述了用于优化RSA处理的矢量条状提取和循环剥离技术。逻辑流程500可以表示由此处所描述的一个或多个实施例执行的某些或全部操作。从只有CPU的实现将RSA处理直接移植到CPU和GPU的组合将可能不会导致对可用资源的最高效使用。为CPU编写的RSA代码可以不优化以在GPU上运行。通过矢量条状提取和循环剥离,RSA代码可以被优化,以在异构CPU/GPU平台上更有效率地运行。在图5所示出的实施例中,逻辑流程500可以在框505对源代码的内循环体执行初始矢量条状提取。矢量条状提取是最佳地将任意矢量长度的高级别指令,特别是源代码的循环内的,简化为硬件支持的矢量宽度的过程。例如,为只有CPU的实现编写的矢量条状提取的代码的shift操作(参见,表1)可能导致七(7)个机器代码指令(参见,表2)。然而,七(7)个机器代码指令中没有一个利用GPU的最大可用指令硬件带宽八(8),从而导致总体性能受损。在框510,逻辑流程500可以判断从内循环编译的机器代码的一个以上的指令是否低于GPU指令带宽利用阈值。由上所述,初始矢量条状提取的代码可能导致七(7)个机器代码指令,它们中一个也没有使用总的可用指令带宽。如此,内循环可以是用于优化的候选,假设可以符合某些额外条件。如果机器代码指令集包括不超过一个的未充分使用的指令,则没有需要进一步优化。各实施例不仅限于此示例。在框515,逻辑流程500可以判断未充分使用的机器代码指令是否符合三(3)个额外的准则。例如,第一准则可以是判断未充分使用的机器代码指令是否与源代码中的两(2)个定义相关联。第一定义是在内循环外面发生的初始化定义,而第二定义是循环携带的定义。第二准则可以是判断初始化定义是否具有dword(双字)的操作类型,而循环携带的定义具有word(字)或byte(字节)操作类型。第三准则可以是判断初始化定义和循环携带的定义的目的地是否相同,以及是否是类型dword。如果所有三个上面的准则都不符合,则代码可能没有资格用于此处所描述的优化的类型。各实施例不仅限于此示例。在框520,逻辑流程500可以丢弃初始矢量条状提取结果。例如,如果符合上面陈述的三个准则,则内循环源代码可以是由编译器可优化的。在这样的情况下,可以丢弃在框505获取的初始矢量条状提取结果。各实施例不仅限于此示例。在框525,逻辑流程500可以执行循环剥离过程。例如,可以在条状提取代码之前,剥离内循环的第一迭代。然后,逻辑流程500可以将在框515中标识的操作数prod的类型从u32降低到在代码的内循环的其余部分的关键shift操作中所使用的u16。shift的类型也可以降低,因为循环外面的其初始化定义是0,这可以在ushort中表示,并且它的其他循环携带的定义是刚刚降低到代码的内循环的剥离的其余部分中的word类型的prod。各实施例不仅限于此示例。在框530,逻辑流程500可以对内循环重新执行矢量条状提取优化。例如,在矢量条状提取之后,可以重新编写内循环的优化的变换的代码,如表5所示。剥离的循环中所使用的类型降低的操作数现在命名为wshift和wprod。各实施例不仅限于此示例。在框535,逻辑流程500可以再次判断从源代码的内循环编译的机器代码的一个以上的指令是否低于指令带宽利用阈值。在上面的框530之后,重复执行的矢量条状提取的代码可能导致四(4)个机器代码指令,其中只有一个使用总的可用指令带宽。如此,源代码的内循环可以是用于进一步优化的候选,因为有一个以上的未充分使用的机器代码指令。如果有少于两个的未充分使用可用的GPU硬件带宽的机器代码指令,那么,RSA代码优化过程完成。各实施例不仅限于此示例。在框540,逻辑流程500可以尝试进一步的代码优化,以改善可变布局以生成更好的条状提取结果。例如,可以对类型降低的变量的布局作出额外的优化,以进一步减少编译源代码的内循环之后的mov的数量。例如,16宽的wshift变量可以被拆分成两个9宽的wshift1和wshift2变量。此改善的布局可以导致表5所示出的变换的代码,其中,源代码的剥离的循环中所使用的类型降低的操作数现在命名为wshift1、wshift2,以及wprod。各实施例不仅限于此示例。在框545,逻辑流程500可以对源代码的内循环重新执行矢量条状提取。例如,编译在框540生成的代码可能会产生三(3)个机器代码mov指令。这可能是最佳序列,因为只有shift操作中的机器代码指令中的一个未充分使用可用的GPU硬件带宽,这是不能避免的。虽然SIMD16合并指令被拆分成两个SIMD8指令,但是,指令吞吐量保持不变,因为指令流水线将内部地自动地将SIMD16指令细分为两个SIMD8指令。各实施例不仅限于此示例。各实施例可以使用硬件元件、软件元件或两者的组合来实现。硬件元件的示例可包括处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、感应器等等)、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片集等等。软件的示例可包括软件组件、程序、应用程序、计算机程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(API)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号,或其任何组合。判断一个实施例是否使用硬件元件或软件元件来实现可以根据任意数量的因素而不同,如所希望的计算速率、功率级别、耐热性、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度,及其他设计或性能约束。图6示出了可以适用于实现本发明的GPGPURSA处理实施例的系统600的实施例。在各实施例中,系统600可以是实现RSA的媒体系统,虽然系统600不仅限于此上下文。例如,系统600可以集成到个人计算机(PC)、膝上型计算机、超膝上型计算机、平板电脑、触摸板、便携式计算机、手持式计算机、掌上电脑、个人数字助理(PDA)、蜂窝电话、蜂窝电话/PDA的组合、电视机、智能设备(例如,智能电话、智能平板电脑或智能电视机)、移动因特网设备(MID)、消息接发设备、数据通信设备等等。在各实施例中,系统600包括耦合到显示器620的平台602。平台602可以从诸如内容服务设备630、或内容分发设备640之类的内容设备或其他类似的内容源接收内容。包括一个或多个导航特征的导航控制器650可以被用来与例如平台602和/或显示器620进行交互。在下文中更详细地描述这些组件中的每一个。在各实施例中,平台602可以包括芯片组605、处理器610、存储器612、存储614、图形子系统615、应用程序616、和/或无线电618的任何组合。芯片组605可以在处理器610、存储器612、存储614、图形子系统615、应用程序616和/或无线电618之间提供相互通信。例如,芯片组605可以包括能够与存储614进行相互通信的存储器适配器(未描绘)。处理器610可以实现为复杂指令系统计算机(CISC)或精简指令集计算机(RISC)处理器、x86指令集兼容的处理器、多核,或任何其他微处理器或中央处理单元(CPU)。在各实施例中,处理器610可以包括双核处理器、双核移动处理器等等。存储器612可以实现为易失性存储器设备,诸如,但不仅限于,随机存取存储器(RAM)、动态随机存取存储器(DRAM),或静态RAM(SRAM)。存储器614可以实现为非易失性存储器设备,诸如,但不仅限于,磁盘驱动、光盘驱动、磁带驱动、内部存储设备、附连存储设备、闪存、电池供电的SDRAM(同步DRAM),和/或网络可访问的存储设备。在各实施例中,存储器614可以包括当,例如,包括多个硬盘驱动器时,提高存储器性能或对有价值的数字媒体的增强的保护的技术。图形子系统615可以对诸如静止图像或视频之类的图像执行处理,供显示。图形子系统615可以是,例如,图形处理单元(GPU)或视觉处理单元(VPU)。模拟或数字接口可以被用来可通信地耦合图形子系统615和显示器620。例如,接口可以是高清晰度多媒体接口、显示端口(DisplayPort)、无线HDMI,和/或遵循无线HD的技术中的任何一个。图形子系统615可以被集成到处理器610或芯片组605中。图形子系统615可以是可通信地耦合到芯片组605的独立卡。此处所描述的图形和/或视频处理技术可以以各种硬件体系结构来实现。例如,图形和/或视频功能可以集成在芯片组内。替代地,可以使用单独的图形和/或视频处理器。作为再一个实施例,图形和/或视频功能可以通过通用处理器(包括多核处理器)来实现。在又一实施例中,功能可以在消费电子产品中实现。无线电618可以包括能够使用各种合适的无线通信技术传输和接收信号的一个或多个无线电。这样的技术可以涉及跨一个或多个无线网络的通信。示例性无线网络包括(但不仅限于)无线局域网(WLAN)、无线人域网(WPAN)、无线城域网(WMAN)、蜂窝网络,以及卫星网络。在跨这样的网络的通信中,无线电618可以根据任何版本的一个或多个适用的标准来操作。在各实施例中,显示器620可以包括任何电视机类型监视器或显示器。显示器620可以包括,例如,计算机显示器屏幕、触摸屏显示器、视频监视器、类似于电视机的设备,和/或电视机。显示器620可以是数字和/或模拟的。在各实施例中,显示器620可以是全息显示器。同样,显示器620还可以是可以接收视觉投影的透明表面。这样的投影可以传达各种形式的信息、图像,和/或对象。例如,这样的投影可以是对于移动增强的现实(MAR)应用程序的视觉覆盖。在一个或多个软件应用程序616的控制下,平台602可以在显示器622上显示用户界面620。在各实施例中,内容服务设备630可以由任何国家的,国际的和/或独立的服务托管,并由此可以被平台602例如通过因特网来访问。内容服务设备630可以耦合到平台602和/或显示器620。平台602和/或内容服务设备630可以耦合到网络660以往返于网络660进行通信(例如,发送和/或接收)媒体信息。内容分发设备640还可以耦合到平台602和/或显示器620。在各实施例中,内容服务设备630可以包括有线电视盒、个人计算机、网络、电话、启用因特网的设备或能够分发数字信息和/或内容的电器,以及能够通过网络660或直接在内容提供商和平台602和/或显示器620之间单方向地或双向地传递内容的任何其他类似的设备。可以理解,内容可以通过网络660往返于系统600中的组件中的任何一个和内容提供商单向地和/或双向地传递。内容的示例可以包括任何媒体信息,包括,例如,视频、音乐、医学和游戏信息等等。内容服务设备630接收内容,诸如有线电视节目,包括媒体信息、数字信息和/或其他内容。内容提供商的示例可以包括任何有线或卫星电视或电台或因特网内容提供商。所提供的示例不限制本发明的各实施例。在各实施例中,平台602可以从具有一个或多个导航特征的导航控制器650接收控制信号。控制器650的导航特征可以被用来例如与用户界面622进行交互。在各实施例中,导航控制器650可以是指示设备,该指示设备可以是计算机硬件组件(具体地,人机接口设备),可使用户向计算机中输入空间(例如,连续的和多维)数据。诸如图形用户界面(GUI)、电视机和监视器之类的许多系统可使用户使用物理手势控制并向计算机或电视机提供数据。控制器650的导航特征的移动可以通过指针、光标、焦点环,或显示在显示器上的其他可视指示器,在显示器上反射(例如,显示器620)。例如,在软件应用616的控制下,位于导航控制器650上的导航特征可以被例如映射到用户界面622上显示的虚拟导航特征。在各实施例中,控制器650可以不是单独的组件,而是集成到平台602和/或显示器620中。然而,各实施例不仅限于在所示出的或此处所描述的上下文中的元件。在各实施例中,驱动器(未示出)可以包括允许用户立即打开和关闭平台602的技术,类似于电视机,例如,当启用时,在初始引导之后,按下按钮。程序逻辑可以允许平台602当平台被“关闭”时向媒体适配器或其他内容服务设备630或内容分发设备640流送内容。另外,芯片组605还可以包括,例如,对于5.1环绕声音频和/或高清晰度6.1环绕声音频的硬件和/或软件支持。驱动器可以包括集成的图形平台的图形驱动器。在各实施例中,图形驱动器可以包括外围组件互连(PCI)Express图形卡。在各种实施例中,可以集成系统600所示出的组件的任何一个或更多。例如,可以集成平台602和内容服务设备630,或者也可以集成平台602和内容分发设备640,或者,例如,也可以集成平台602、内容服务设备630,以及内容分发设备640。在各种实施例中,平台602和显示器620可以是集成单元。例如,可以集成显示器620和内容服务设备630,或者也可以集成显示器620和内容分发设备640。这些示例不限制本发明。在各种实施例中,系统600可以实现为无线系统、有线系统,或两者的组合。当实现为无线系统时,系统600可以包括适用于通过无线共享介质进行通信的组件和接口,诸如一个或多个天线、发射器、接收器、收发器、放大器、滤波器、控制逻辑等等。无线共享介质的示例可以包括诸如RF频谱之类的无线范围的某些部分等等。当实现为有线系统时,系统600可以包括适用于通过有线通信介质进行通信的组件和接口,诸如输入/输出(I/O)适配器、将I/O适配器与相应的有线通信介质连接的物理连接器、网络接口卡(NIC)、光盘控制器、视频控制器、音频控制器等等。有线通信介质的示例可包括,线路、电缆、金属导线、印刷电路板(PCB)、后面板、交换机结构、半导体材料、双绞线、同轴电缆、光纤等等。平台602可以建立一个或多个逻辑或物理信道以传递信息。信息可以包括媒体信息和控制信息。媒体信息可以是指表示给用户的内容的任何数据。内容的示例可以包括,例如,来自语音谈话、视频会议、流式视频、电子邮件消息、语音邮件消息、字母数字符号、图形、图像、视频、文本等等的数据。来自语音谈话的数据可以是,例如,语音信息、静默时间长度、背景噪声、舒适噪声、音调等等。控制信息可以是指表示用于自动化系统的命令、指令或控制字的任何数据。例如,控制信息可以用来通过系统路由媒体信息,或指示节点以预先确定的方式处理媒体信息。然而,各实施例不仅限于图6中所示出的或所描述的上下文中的元件。如上文所描述的,系统600可以以不同的物理样式或形状因子来体现。图7示出了其中可以实现系统600的小形状因子设备700的各实施例。在各实施例中,例如,设备700可以实现为具有无线能力的移动计算设备。移动计算设备可以是指具有处理系统和移动电源(诸如,例如,一个或多个电池)的任何设备。如上文所描述的,移动计算设备的示例可以包括个人计算机(PC)、膝上型计算机、超膝上型计算机、平板电脑、触摸板、便携式计算机、手持式计算机、掌上电脑、个人数字助理(PDA)、蜂窝电话、蜂窝电话/PDA的组合、电视机、智能设备(例如,智能电话、智能平板电脑或智能电视机)、移动因特网设备(MID)、消息传送设备、数据通信设备等等。移动计算设备的示例还可以包括被配置为由人佩带的计算机,诸如腕计算机、手指计算机、戒指计算机、眼镜计算机、皮带计算机、臂带计算机、鞋计算机、衣服计算机,及其他可佩带的计算机。例如,在各实施例中,移动计算设备可以实现为能够执行计算机应用程序以及语音通信和/或数据通信的智能电话。虽然可以利用作为示例实现为智能电话的移动计算设备描述一些实施例,但是,可以理解,其他实施例也可以使用其他无线移动计算设备来实现。在此上下文中,实施例不受限制。如图7所示,设备700可以包括外壳702、显示器704、输入/输出(I/O)设备706,以及天线708。设备700还可以包括导航特征712。显示器704可以包括用于显示适合于移动计算设备的信息的任何合适的显示单元。I/O设备706可以包括用于向移动计算设备中输入信息的任何合适的I/O设备。I/O设备706的示例可以包括字母数字键盘、数字键区、触摸板、输入键、按钮、开关、往复式开关、麦克风、扬声器、语音识别设备以及软件等等。信息还可以通过麦克风输入到设备700中。这样的信息可以通过语音识别设备来数字化。在此上下文中,实施例不受限制。各实施例可以使用硬件元件、软件元件或两者的组合来实现。硬件元件的示例可包括处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、感应器等等)、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等等。软件的示例可包括软件组件、程序、应用程序、计算机程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(API)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号,或其任何组合。判断一个实施例是否使用硬件元件或软件元件来实现可以根据任意数量的因素而不同,如所希望的计算速率、功率级别、耐热性、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度,及其他设计或性能约束。至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性的指令来实现,指令表示处理器内的各种逻辑,指令在由机器读取时使机器制造执行此处所描述的技术的逻辑。被称为“IP核”的这样的表示可以存储在有形的机器可读介质中,并提供给各种客户或生产设施,以加载到实际制造逻辑或处理器的制造机器中。至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性的指令来实现,指令表示处理器内的各种逻辑,指令在由机器读取时使机器制造执行此处所描述的技术的逻辑。被称为“IP核”的这样的表示可以存储在有形的机器可读介质中,并提供给各种客户或生产设施,以加载到实际制造逻辑或处理器的制造机器中。可以使用表达“一个实施例”或“实施例”以及它们的派生词来描述某些实施例。这些术语意味着,参考实施例所描述的特定功能、结构或特征包括在至少一个实施例中。在本说明书中的不同位置出现短语“在一个实施例中”不一定都是指同一个实施例。进一步地,可以使用表达“耦合”和“连接”以及它们的派生词来描述某些实施例。这些术语不一定作为彼此的同义词。例如,可以使用术语“连接”和/或“耦合”来描述某些实施例,以指出两个或更多元件彼此处于直接的物理或电接触的状态。然而,术语″耦合″也可以意味着,两个或更多彼此不直接接触,但是仍彼此合作或进行交互的元件。值得强调的是,提供“摘要”以使读者快速地弄清一技术公开的本质。但应理解,它不能被用来解释或限制权利要求的范围或含义。此外,在前面的″具体实施方式″中,可以看出,各种特点可以组合在一个实施例中,以便简化说明。本发明的此方法不应被解释为反映带权利要求的各实施例需要比每一个权利要求中明确地列举的特点更多的特点的意图。相反,如下面的权利要求所反映的,本发明的主题在于少于所公开的单一实施例的所有特点。如此,下面的权利要求被包括到“具体实施方式”,每一个权利要求本身也作为单独的实施例。在所附权利要求书中,术语“包括”和“其特征在于”被用作相应的术语“包含”和“其中”的普通英语等效词。此外,术语“第一”、“第二”、“第三”等等只用作标记,并不旨在对它们的对象施加数值要求。上文所描述的包括所公开的体系结构的示例。当然,描述每一个可以想到的组件和/或方法的组合是不可能的,但本领域内的普通技术人员应该认识到,许多其他组合和排列都是可能的。因此,该新颖体系结构旨在涵盖所有这些落入所附权利要求书的精神和范围内的更改、修改和变化。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1