CN103744682B - 一种分开编译异构混编程序的方法和系统 - Google Patents

一种分开编译异构混编程序的方法和系统 Download PDF

Info

Publication number
CN103744682B
CN103744682B CN201410035089.5A CN201410035089A CN103744682B CN 103744682 B CN103744682 B CN 103744682B CN 201410035089 A CN201410035089 A CN 201410035089A CN 103744682 B CN103744682 B CN 103744682B
Authority
CN
China
Prior art keywords
function
source program
markd
program
configuration
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201410035089.5A
Other languages
English (en)
Other versions
CN103744682A (zh
Inventor
倪素萍
杜学亮
林啸
谭吉来
卜中华
郭若杉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Silang Technology Co ltd
Original Assignee
Institute of Automation of Chinese Academy of Science
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Automation of Chinese Academy of Science filed Critical Institute of Automation of Chinese Academy of Science
Priority to CN201410035089.5A priority Critical patent/CN103744682B/zh
Publication of CN103744682A publication Critical patent/CN103744682A/zh
Application granted granted Critical
Publication of CN103744682B publication Critical patent/CN103744682B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种分开编译异构混编程序的方法及系统,方法包括:对源程序中受控处理器执行的函数配置标记;查找源程序中配置的标记,生成修改链表,其中修改链表中存储配置有标记的函数、函数类型及其位置;遍历修改链表,根据修改链表中存储的函数类型,对源程序中配置有标记的函数进行相应的编译。本发明通过简单的标记简化了复杂的受控处理器执行的控制流程,有效地减小了异构移植的代价,使混编程序看起来像编写同构处理器的程序一样。

Description

一种分开编译异构混编程序的方法和系统
技术领域
本发明属于计算机技术领域,涉及一种分开编译异构混编的方法和系统,用在异构处理器均支持同种语言编译器的情形,比如同支持C语言编译器,为应用程序员自动分离和编译程序。
背景技术
随着硬件异构的广泛应用,例如CPU加GPU的异构模式,已经越来越被各行各业广泛使用,取得很好的加速效果。随着异构系统的广泛应用,异构计算也因此得到了长足的发展。在异构计算里,已经有一些成熟的统一框架,例如NviDIA公司的CUDA(Compute UnifiedDevice Architecture)技术框架,它支持CPU和NviDIA的GPU直接编程;还有最早由苹果公司提出的OpenCL(Open Computing Language)技术框架,它支持的异构平台可以是CPU、GPU或者其他类型的处理器,是面向异构计算的一个通用标准。上面提到的异构计算平台,都需要对原始的代码进行分析,分离出异构处理器的相应程序,分别编译,得到最后的可执行文件。异构系统中通常是其中一个或多个体系结构相同的处理器作为主控处理器,另外的异构的处理器作为受控处理器,主控处理器控制受控处理器程序的运行和数据的交互。在上面的异构处理器中,CUDA架构只支持CPU和NviDIAGPU的异构,其体系结构不同,有很多繁杂的GPU的控制代码。OpenCL可支持异构处理器为同类型编译器的情形,比如CPU和另一类CPU构成的异构系统,均可支持C语言编译器,但因其要支持多种不同编译类型的异构系统,其体系复杂,因此混编程序也很繁杂。
发明内容
有鉴于此,本发明针对主控处理器和受控处理器均为CPU,但其体系结构是异构的情形,提出了一种异构混编程序的编译方法,基于异构处理器的同一语言的编译器,比如异构的二者都有C编译器,应用程序员编写程序时只需要简单标注出受控处理器需要执行的代码,本发明提出的方法将为程序自动编译出可执行的主控处理器目标码和受控处理器要执行的目标码。使得应用开发只需要关注本身应用功能的实现细节,而不必考虑异构编译和受控程序加载执行的细节过程,自动为应用开发者生成可以用于该异构处理系统中硬件平台的相关目标码。上述方法可为需要这类型的异构处理系统的应用开发提供很大的方便。
本发明所提出的一种分开编译异构混编程序的方法,其包括:
对源程序中受控处理器执行的函数配置标记;
查找源程序中配置的标记,生成修改链表,其中修改链表中存储配置有标记的函数、函数类型及其位置;
遍历修改链表,根据修改链表中存储的函数类型,对源程序中配置有标记的函数进行相应的编译。
本发明还提出了一种分开编译异构混编程序的系统,其包括:
标记配置模块:对源程序中受控处理器执行的函数配置标记;
标记查找模块:查找源程序中配置的标记,生成修改链表,其中修改链表中存储配置有标记的函数、函数类型及其位置;
编译模块:遍历修改链表,根据修改链表中存储的函数类型,对源程序中配置有标记的函数进行相应的编译。
本发明通过简单的标记简化了复杂的受控处理器执行的控制流程,有效地减小了异构移植的代价,使混编程序看起来像编写同构的处理器的程序一样。
附图说明
图1是一种异构处理系统的结构示意图;
图2是本发明中分开编译异构混编程序的方法的原理示意图;
图3是本发明中分开编译异构混编程序的方法流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步的详细说明。
本发明提出了一种异构混编程序的编译方法。该方法适用于异构处理系统,所谓异构处理系统是由多个异构处理器构成,且对于同一种语言支持不同的编译器,其中有一个主控处理器,其他均为受控处理器。
图1示出了一种异构处理系统的结构示意图。如图1所示,该异构处理系统包括主控处理器和受控处理器,其通过总线相连,从受控处理器的角度看,所述主控处理器用于控制受控处理器程序(即受控程序)的加载和执行,主控处理器程序(即主控程序)控制受控处理器的加载和执行,需要用到所述的加载运行库。但按照本发明的方法不需要代码中加入对加载运行库的调用来控制受控处理器执行相应程序段,只在相应函数上标记一下即可,本发明的方法将自动加入上面的加载运行库的函数调用,标记的函数将会在运行时通过加载运行库在受控处理器上运行。标记的方法推荐如下,在函数名前加入一个特殊的前缀,与程序中其他的前缀区分开来,比如函数名为function,欲加入受控程序的前缀为othercpu_,则该受控处理器要执行的函数名为othercpu_function。该前缀在本发明的实施例中配置模块中配置后,实施例将可根据该前缀来区分主控处即器程序段和受控处理器程序段。
本发明的作用是简化应用层的流程,使应用程序员看起来,只是通过简单的标记,就可以将功能函数置于受控处理器执行。
图2示出了本发明中分开编译异构混编程序的方法的原理示意图。如图2所示,应用程序只需要标记哪些程序/函数需要受控处理器执行,混编程序分离和编译方法,即本发明的实施例,将自动分离出应用程序的主控处理器程序和受控处理器程序,将主控和受控处理器的程序区分开来并分别编译,以供后续执行,如图2中的“分离和编译”。在执行时,主控处理器程序将会去调用加载和运行库的函数来加载受控处理器执行文件,运行并得到结果,如图中的黑粗线表示的流程。有了混编程序分离和编译方法,可以屏蔽处理器异构带来的差异,使应用编程人员看起来是为同一个处理器编程一样,需要做的事情是加入简单的前缀标记,就可将标记的程序段放入受控处理器执行。
图3是本发明提出的一种分开编译异构混编程序的方法示范性流程图。如图3所示,本发明所提出的一种分开编译异构混编程序的方法具体步骤包括:
配置函数标记,即对应用代码中需要受控处理器执行的函数配置标记,所配置的标记可以是函数的前缀,程序开发者可根据自己的需要安排这个前缀具体的写法,具体配置过程可由计算机程序自动完成。
查找标记,即根据上述的配置标记,查找到标记位置,并判断查找到配置有标记的函数类型属于函数调用还是函数实现,并根据不同的函数类型生成修改链表,其中修改链表中用于存储查找到的配置有标记的函数、函数类型以及在源程序中的位置;如果是函数调用,则源程序中配置有标记的函数所在代码行为主控处理器执行的主控处理器程序,如果是函数实现,则源程序中配置有标记的函数所在代码行为受控处理器程序执行的受控处理器程序;
编译执行,即遍历修改链表,如果修改链表中存储的配置有标记的函数类型为函数调用,则将源程序中该配置有标记的函数所在代码行用加载和运行库进行修改替换,得到在主控处理器运行的程序行,然后用主控处理器的工具链进行编译,生成主控处理器目标码。如果修改链表中存储的配置有标记的函数类型为函数实现,则将源程序中该函数中的子函数和需要的头文件提取出来,构成新的编译工程,用异构受控处理器的工具链进行编译,生成受控处理器目标码。
其中,加载和运行库,用于提供受控处理器目标码的加载和调用方法,并采用了全局变量法来进行参数的传递。
应用程序运行时执行流程说明如下,主执行文件按照应用代码的顺序执行,运行到标记函数时,上述方法已将其替换成受控处理器的加载和执行库中的函数调用,因此执行受控处理器的程序加载,并启动受控处理器运行受控处理器执行文件,得到调用结果;其中参数和结果通过全局变量法进行传递。
本发明还公开了一种分开编译异构混编程序的系统,其包括:
标记配置模块:对源程序中受控处理器执行的函数配置标记;
标记查找模块:查找源程序中配置的标记,生成修改链表,其中修改链表中存储配置有标记的函数、函数类型及其位置;
编译模块:遍历修改链表,根据修改链表中存储的函数类型,对源程序中配置有标记的函数进行相应的编译。
所述函数类型包括函数调用和函数实现。
编译模块包括:
主编译模块:函数类型为函数调用时,将源程序中相应位置处配置有标记的函数替换为加载和运行库链接,其中所述加载和运行库链接用于指向所述配置有标记的函数的可执行代码;
从编译模块:函数类型为函数实现时,将源程序中相应位置处配置有标记的函数中的子函数和需要的头文件提取出来,并使用受控处理器的工具链进行编译,生成所述配置有标记的函数的可执行代码。
对受控处理器执行的函数所配置的标记为函数的前缀。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (7)

1.一种分开编译异构混编程序的方法,其包括:
对源程序中受控处理器执行的函数配置标记;
查找源程序中配置的标记,生成修改链表,其中修改链表中存储配置有标记的函数、函数类型及其位置;
遍历修改链表,根据修改链表中存储的函数类型,对源程序中配置有标记的函数进行相应的编译;
所述函数类型包括函数调用和函数实现;对源程序中配置有标记的函数进行相应的编译包括:
函数类型为函数调用时,将源程序中相应位置处配置有标记的函数替换为加载和运行库链接,其中所述加载和运行库链接用于指向所述配置有标记的函数的可执行代码。
2.如权利要求1所述的方法,其中,对源程序中配置有标记的函数进行相应的编译包括:
函数类型为函数实现时,将源程序中相应位置处配置有标记的函数中的子函数和需要的头文件提取出来,并使用受控处理器的工具链进行编译,生成所述配置有标记的函数的可执行代码。
3.如权利要求1-2任一项所述的方法,其中,对受控处理器执行的函数所配置的标记为函数的前缀。
4.如权利要求1所述的方法,其中,受控处理器执行的函数由主控处理器加载和运行,所述主控处理器和受控处理器为异构处理器,且支持同一种程序语言的编译。
5.一种分开编译异构混编程序的系统,其包括:
标记配置模块:对源程序中受控处理器执行的函数配置标记;
标记查找模块:查找源程序中配置的标记,生成修改链表,其中修改链表中存储配置有标记的函数、函数类型及其位置;
编译模块:遍历修改链表,根据修改链表中存储的函数类型,对源程序中配置有标记的函数进行相应的编译;
所述函数类型包括函数调用和函数实现;所述编译模块包括:
主编译模块:函数类型为函数调用时,将源程序中相应位置处配置有标记的函数替换为加载和运行库链接,其中所述加载和运行库链接用于指向所述配置有标记的函数的可执行代码。
6.如权利要求5所述的系统,其中,编译模块还包括:
从编译模块:函数类型为函数实现时,将源程序中相应位置处配置有标记的函数中的子函数和需要的头文件提取出来,并使用受控处理器的工具链进行编译,生成所述配置有标记的函数的可执行代码。
7.如权利要求5-6任一项所述的系统,其中,对受控处理器执行的函数所配置的标记为函数的前缀。
CN201410035089.5A 2014-01-24 2014-01-24 一种分开编译异构混编程序的方法和系统 Active CN103744682B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410035089.5A CN103744682B (zh) 2014-01-24 2014-01-24 一种分开编译异构混编程序的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410035089.5A CN103744682B (zh) 2014-01-24 2014-01-24 一种分开编译异构混编程序的方法和系统

Publications (2)

Publication Number Publication Date
CN103744682A CN103744682A (zh) 2014-04-23
CN103744682B true CN103744682B (zh) 2017-02-08

Family

ID=50501702

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410035089.5A Active CN103744682B (zh) 2014-01-24 2014-01-24 一种分开编译异构混编程序的方法和系统

Country Status (1)

Country Link
CN (1) CN103744682B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104820613B (zh) * 2015-05-27 2018-03-27 北京思朗科技有限责任公司 一种异构多核程序的编译方法
CN105426226B (zh) * 2015-11-24 2018-07-06 无锡江南计算技术研究所 一种异构代码融合的编译和生成方法
CN109871512B (zh) * 2019-01-27 2020-05-22 中国人民解放军国防科技大学 面向异构融合体系结构的矩阵乘加速方法
CN110018831B (zh) * 2019-04-04 2022-11-08 中科寒武纪科技股份有限公司 程序处理方法、装置及计算机可读存储介质
CN110865814B (zh) * 2019-10-30 2021-11-16 上海天数智芯半导体有限公司 一种支持异构计算核架构的编译器实现方法和系统
CN113553061B (zh) * 2021-09-22 2021-12-17 西安芯瞳半导体技术有限公司 一种提升源程序执行性能的方法、装置及计算机存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101667034A (zh) * 2009-09-21 2010-03-10 北京航空航天大学 一种易扩展的、支持异构集群的监控系统
CN101866302A (zh) * 2010-06-12 2010-10-20 中兴通讯股份有限公司 一种检验应用模式适应性的装置及方法
CN101937395A (zh) * 2010-09-20 2011-01-05 南京大学 一种用于漏洞检测的检测对象程序特征提取方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101667034A (zh) * 2009-09-21 2010-03-10 北京航空航天大学 一种易扩展的、支持异构集群的监控系统
CN101866302A (zh) * 2010-06-12 2010-10-20 中兴通讯股份有限公司 一种检验应用模式适应性的装置及方法
CN101937395A (zh) * 2010-09-20 2011-01-05 南京大学 一种用于漏洞检测的检测对象程序特征提取方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
异构环境下分层并行通用计算模型的设计与实现;石文娟;《中国优秀硕士学位论文全文数据库 信息科技辑》;20130415(第04期);第I137-72页 *

Also Published As

Publication number Publication date
CN103744682A (zh) 2014-04-23

Similar Documents

Publication Publication Date Title
CN103744682B (zh) 一种分开编译异构混编程序的方法和系统
US8495598B2 (en) Control flow graph operating system configuration
CN104932905A (zh) 一种aadl到c语言的代码自动生成方法
Dorier et al. Lessons learned from building in situ coupling frameworks
CN103473072B (zh) 一种移动云计算应用程序开发方法
Mackey Introducing. NET 4.0: With Visual Studio 2010
US20120143589A1 (en) Multi-modal compiling apparatus and method for generating a hybrid codefile
Alomari et al. Comparative studies of six programming languages
CN103514027A (zh) 一种增强软件保护易用性的方法
US20110225213A1 (en) Loop control flow diversion
Rourke Learn WebAssembly: Build web applications with native performance using Wasm and C/C++
Ahmed et al. Managing genomic variant calling workflows with Swift/T
Al-Kofahi et al. Escaping AutoHell: a vision for automated analysis and migration of autotools build systems
CN103488519A (zh) 一种交互式脚本语言解释器的实现方法
Clement et al. Flacc: Towards OpenACC support for Fortran in the LLVM Ecosystem
US20190065161A1 (en) Supporting compiler variable instrumentation for uninitialized memory references
Nutter et al. JRuby
Scherer Hands-on JavaScript High Performance: Build Faster Web Apps Using Node. js, Svelte. js, and WebAssembly
Westrup et al. Using the go programming language in practice
Ramos et al. An Implementation of Python for Racket.
Keznikl et al. Extensible Polyglot Programming Support in Existing Component Frameworks
Melara et al. Using Spack to manage software on Cray supercomputers
US11567745B2 (en) Compiler adapted in graphics processing unit and non-transitory computer-readable medium
George et al. Programming language inter-conversion
US20240329983A1 (en) Development environment integrated with infrastructure cost estimation system

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20171129

Address after: 102412 Beijing City, Fangshan District Yan Village Yan Fu Road No. 1 No. 11 building 4 layer 402

Patentee after: Beijing Si Lang science and Technology Co.,Ltd.

Address before: 100190 Zhongguancun East Road, Beijing, No. 95, No.

Patentee before: Institute of Automation, Chinese Academy of Sciences

CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 201306 building C, No. 888, Huanhu West 2nd Road, Lingang New District, China (Shanghai) pilot Free Trade Zone, Pudong New Area, Shanghai

Patentee after: Shanghai Silang Technology Co.,Ltd.

Address before: 102412 room 402, 4th floor, building 11, No. 1, Yanfu Road, Yancun Town, Fangshan District, Beijing

Patentee before: Beijing Si Lang science and Technology Co.,Ltd.