OpenCL程序编译方法和编译器技术

技术编号:11169534 阅读:126 留言:1更新日期:2015-03-19 04:25
本申请实施例提供了一种开放运算语言OpenCL程序编译方法和编译器,所述方法包括:获取OpenCL程序的源程序文件,并确定所述源程序文件中定义的操作数据的第一数据传输模式;计算所述操作数据分别在所述第一数据传输模式和第二数据传输模式下的执行消耗时间,所述第二数据传输模式与所述第一数据传输模式不同,所述执行消耗时间包括所述操作数据的数据传输时间和设备程序执行时间;选择所述执行消耗时间较小的数据传输模式作为所述源程序文件编译时所述操作数据的编译数据传输模式;按照所述编译数据传输模式生成编译执行代码文件。本申请实施例有效保证了程序执行效率。

【技术实现步骤摘要】
OpenCL程序编译方法和编译器
本申请涉及计算机处理
,更具体的说是涉及一种OpenCL程序编译方法 和编译器。
技术介绍
OpenCL (Open Computing Language,开放运算语言)是面向异构系统首个通用目 的的并行编程开放式、免费标准语言,其为软件开发人员提供了统一的编程环境,以便于为 高性能计算服务器、桌面计算系统、手持设备等编写高效轻便的代码。 OpenCL程序主要分成两部分:设备程序和主机程序。例如一个异构系统由CPU和 GPU组成时,在CPU上运行的程序为主机程序时,在GPU上运行的程序即为设备程序。OpenCL 程序的执行过程主要包括:主机程序控制数据从主机端传输到设备端,设备端执行设备程 序对数据进行处理,主机程序控制将处理结果数据从设备端传输到主机端。 由上述OpenCL程序的执行过程可知,影响OpenCL程序执行效率的主要是数据传 输阶段以及设备程序执行阶段,因此OpenCL程序提供了两种数据传输模式,即复制模式和 映射模式。复制模式是指将数据从主机内存复制到设备内存,或者从设备内存复制到主机 内存,由于数据需要在系统真正复制传输,因此在复制模式下,OpenCL程序在数据传输阶段 耗时较长,但是在设备程序执行时,由于数据已经位于设备内存中,因此设备程序执行阶段 耗时较短;映射模式是指在数据传输阶段,仅是建立设备内存到主机内存的映射关系,数据 仍是位于主机内存中,因此数据传输阶段的耗时较短,但是设备程序执行时,需要访问主机 内存中的数据,导致设备执行阶段耗时较长。 专利技术人在实现本专利技术的过程中发现,现有技术中,为了保证OpenCL程序的执行效 率,通常是由技术人员预先根据系统的不同应用场景,以及硬件平台等特征,选用合适的 数据传输模式编写OpenCL程序,但是现有的这种方式,用户主观性较大,并不能有效保证 OpenCL程序的执行效率。
技术实现思路
本申请提供了一种OpenCL程序编译方法和编译器,用以解决现有技术中不能有 效保证OpenCL程序执行效率的技术问题。 为实现上述目的,本申请提供如下技术方案: 第一方面,提供了一种开放运算语言OpenCL程序编译方法,包括: 获取OpenCL程序的源程序文件,并确定所述源程序文件中定义的操作数据的第 一数据传输模式; 计算所述操作数据分别在所述第一数据传输模式和第二数据传输模式下的执行 消耗时间,所述第二数据传输模式与所述第一数据传输模式不同,所述执行消耗时间包括 所述操作数据的数据传输时间和设备程序执行时间; 选择所述执行消耗时间较小的数据传输模式作为所述源程序文件编译时所述操 作数据的编译数据传输模式; 按照所述编译数据传输模式生成编译执行代码文件。 在所述第一方面的第一种可能实现方式中,所述计算所述操作数据分别在第一数 据传输模式和第二数据传输模式下的程序执行消耗时间包括: 验证所述操作数据按照所述第二数据传输模式处理时,所述操作数据是否安全; 当所述操作数据安全时,计算所述操作数据分别在所述第一数据传输模式和所述 第二数据传输模式下时的程序执行消耗时间。 结合所述第一方面的第一种可能实现方式,还提供了所述第一方面的第二种可能 实现方式,当所述第一数据传输模式为复制模式,所述第二数据传输模式为映射模式,所述 验证所述操作数据按照所述第二数据传输模式处理,所述操作数据是否安全包括: 分析在程序执行过程中,是否存在主机端对所述操作数据的写操作,若否,确定所 述操作数据按照所述第二数据传输模式处理时安全; 当所述第一数据模式为映射模式,所述第二数据传输模式为复制模式时,所述验 证所述操作数据按照所述第二数据传输模式处理,所述操作数据是否安全包括: 分析在程序执行过程中,是否存在设备端对所述操作数据的写操作,若否,确定所 述操作数据按照所述第二数据传输模式处理时安全。 结合所述第一方面或所述第一方面的上述任一种可能实现方式,还提供了所述第 一方面的第三种可能实现方式,所述第一数据传输模式为复制模式,所述第二数据传输模 式为映射模式时;或,所述第一数据传输模式为映射模式,所述第二数据传输模式为复制模 式; 所述计算所述操作数据分别在第一数据传输模式和第二数据传输模式下的执行 消耗时间包括: 根据所述操作数据的总数据量以及数据传输速率,计算复制模式下所述操作数据 的数据传输时间; 根据设备程序执行过程中,对所述操作数据的内存访问总数据量以及访问设备端 的内存访问速率,计算复制模式下所述操作数据的设备程序执行时间; 将所述复制模式下计算的数据传输时间以及设备程序执行时间之和,作为所述操 作数据在复制模式下的执行消耗时间; 根据主机端与设备端的映射关系建立以及消除时间,计算映射模式下所述操作数 据的数据传输时间; 根据设备程序执行过程中,对所述操作数据的内存访问总数据量以及访问主机端 的内存访问速率,计算映射模式下所述操作数据的设备程序执行时间; 将所述映射模式下计算的数据传输时间以及设备程序执行之和,作为所述操作数 据在映射模式下的执行消耗时间。 结合所述第一方面的第三种可能实现方式,还提供了所述第一方面的第四种可能 实现方式,所述对所述操作数据的内存访问总数据量为根据源程序文件中定义的设备程序 的工作项数量以及单位工作项的内存访问数据量计算得到。 结合所述第一方面的第三种可能实现方式,还提供了所述第一方面的第五种可能 实现方式,所述数据传输速率、所述访问设备端的内存访问速率或者所述访问主机端的内 存访问速率是根据当前异构系统执行硬件平台的硬件特征预先确定的。 第二方面,提供了一种编译器,包括: 模式确定模块,用于获取OpenCL程序的源程序文件,并确定所述源程序文件中定 义的操作数据的第一数据传输模式; 计算模块,用于计算所述操作数据分别在所述第一数据传输模式和第二数据传输 模式下的执行消耗时间,所述第二数据传输模式与所述第一数据传输模式不同,所述执行 消耗时间包括所述操作数据的数据传输时间和设备程序执行时间; 模式选择模块,用于选择消耗时间较小的数据传输模式作为所述源程序文件编译 时所述操作数据的编译数据传输模式。 编译模块,用于按照所述编译数据传输模式生成编译执行代码文件。 在所述第二方面的第一种可能实现方式中,还包括: 验证模块,用于验证所述操作数据按照第二数据传输模式处理时,所述操作数据 是否安全,若是,再触发所述计算模块。 结合所述第二方面的第一种可能实现方式,还提供了所述第二方面的第二种可能 实现方式,所述验证模块具体用于当所述第一数据传输模式为复制模式,所述第二数据传 输模式为映射模式,分析在程序执行过程中,是否存在主机端对所述操作数据的写操作,若 否,确定所述操作数据安全;或者,当所述第一数据模式为映射模式,所述第二数据传输模 式为复制模式时,分析在程序执行过程中,是否存在设备端对所述操作数据的写操作,若 否,确定所述数据安全。 结合所述第二方面或所述第二方面的上述任一种可能实现方式,所述第一数据传 输模式为复本文档来自技高网
...
OpenCL程序编译方法和编译器

【技术保护点】
一种开放运算语言OpenCL程序编译方法,其特征在于,包括:获取OpenCL程序的源程序文件,并确定所述源程序文件中定义的操作数据的第一数据传输模式;计算所述操作数据分别在所述第一数据传输模式和第二数据传输模式下的执行消耗时间,所述第二数据传输模式与所述第一数据传输模式不同,所述执行消耗时间包括所述操作数据的数据传输时间和设备程序执行时间;选择所述执行消耗时间较小的数据传输模式作为所述源程序文件编译时所述操作数据的编译数据传输模式;按照所述编译数据传输模式生成编译执行代码文件。

【技术特征摘要】
1. 一种开放运算语言OpenCL程序编译方法,其特征在于,包括: 获取OpenCL程序的源程序文件,并确定所述源程序文件中定义的操作数据的第一数 据传输模式; 计算所述操作数据分别在所述第一数据传输模式和第二数据传输模式下的执行消耗 时间,所述第二数据传输模式与所述第一数据传输模式不同,所述执行消耗时间包括所述 操作数据的数据传输时间和设备程序执行时间; 选择所述执行消耗时间较小的数据传输模式作为所述源程序文件编译时所述操作数 据的编译数据传输模式; 按照所述编译数据传输模式生成编译执行代码文件。2. 根据权利要求1所述的方法,其特征在于,所述计算所述操作数据分别在所述第一 数据传输模式和第二数据传输模式下的程序执行消耗时间包括: 验证所述操作数据按照所述第二数据传输模式处理时,所述操作数据是否安全; 当所述操作数据安全时,计算所述操作数据分别在所述第一数据传输模式和所述第二 数据传输模式下的程序执行消耗时间。3. 根据权利要求2所述的方法,其特征在于,当所述第一数据传输模式为复制模式, 所述第二数据传输模式为映射模式,所述验证所述操作数据按照所述第二数据传输模式处 理,所述操作数据是否安全包括: 分析在程序执行过程中,是否存在主机端对所述操作数据的写操作,若否,确定所述操 作数据按照所述第二数据传输模式处理时安全; 当所述第一数据模式为映射模式,所述第二数据传输模式为复制模式时,所述验证所 述操作数据按照所述第二数据传输模式处理,所述操作数据是否安全包括: 分析在程序执行过程中,是否存在设备端对所述操作数据的写操作,若否,确定所述操 作数据按照所述第二数据传输模式处理时安全。4. 根据权利要求1?3任一项所述的方法,其特征在于,所述第一数据传输模式为复制 模式时,所述第二数据传输模式为映射模式;或,所述第一数据传输模式为映射模式时,所 述第二数据传输模式为复制模式; 所述计算所述操作数据分别在第一数据传输模式和第二数据传输模式下的执行消耗 时间包括: 根据所述操作数据的总数据量以及数据传输速率,计算复制模式下所述操作数据的数 据传输时间; 根据设备程序执行过程中,对所述操作数据的内存访问总数据量以及访问设备端的内 存访问速率,计算所述复制模式下所述操作数据的设备程序执行时间; 将所述复制模式下计算的数据传输时间以及设备程序执行时间之和,作为所述操作数 据在所述复制模式下的执行消耗时间; 根据主机端与设备端的映射关系建立以及消除时间,计算映射模式下所述操作数据的 数据传输时间; 根据设备程序执行过程中,对所述操作数据的内存访问总数据量以及访问主机端的内 存访问速率,计算所述映射模式下所述操作数据的设备程序执行时间; 将所述映射模式下计算的数据传输时间以及设备程序执行之和,作为所述操作数据在 所述映射模式下的执行消耗时间。5. 根据权利要求4所述的方法,其特征在于,所...

【专利技术属性】
技术研发人员:刘颖
申请(专利权)人:华为技术有限公司中国科学院计算技术研究所
类型:发明
国别省市:广东;44

网友询问留言 已有1条评论
  • 来自[天津市电信IDC机房] 2015年04月02日 16:08
    简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码(sourcecode)→预处理器(preprocessor)→编译器(compiler)→目标代码(objectcode)→链接器(Linker)→可执行程序(executables)
    0
1