KR20160003485A - 원격 함수 호출을 위한 자동 코드 생성 - Google Patents

원격 함수 호출을 위한 자동 코드 생성 Download PDF

Info

Publication number
KR20160003485A
KR20160003485A KR1020140081990A KR20140081990A KR20160003485A KR 20160003485 A KR20160003485 A KR 20160003485A KR 1020140081990 A KR1020140081990 A KR 1020140081990A KR 20140081990 A KR20140081990 A KR 20140081990A KR 20160003485 A KR20160003485 A KR 20160003485A
Authority
KR
South Korea
Prior art keywords
code
rpc
function
source code
generating
Prior art date
Application number
KR1020140081990A
Other languages
English (en)
Inventor
임채석
김신규
안민욱
Original Assignee
삼성전자주식회사
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 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020140081990A priority Critical patent/KR20160003485A/ko
Priority to US14/753,844 priority patent/US9672084B2/en
Publication of KR20160003485A publication Critical patent/KR20160003485A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

원격 함수 호출(Remote Procedure Call: RPC)을 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 획득하고, 상기 RPC를 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 분석하여, RPC 호출을 위한 코드 및 RPC 함수 실행을 위한 코드를 생성하는 원격 함수 호출을 위한 코드 생성 방법이 개시된다.

Description

원격 함수 호출을 위한 자동 코드 생성{AUTOMATIC CODE GENERATION FOR REMOTE PROCEDURE CALL}
본 개시는 컴파일러에서의 처리에 적용될 수 있는 프로그래밍 모델에 관한 것이다. 구체적으로는 원격 함수 호출을 위한 자동 코드 생성 방법에 적용될 수 있는 프로그래밍 모델에 관한 것이다.
원격 함수 호출(Remote Procedure Call: 이하, 'RPC'라고 함)은 주 처리기가 부 처리기의 함수를 주 처리기 내부의 함수 호출 인터페이스를 사용하여 호출하는 기술이다.
도 1은 함수 호출 방법으로서, 지역 호출(local call)과 원격 호출(remote call)을 개략적으로 나타낸 도면이다.
도 1의 (a)에 나타낸 바와 같이, 지역 호출인 경우, 사이트(Site) A의 프로세스 p가 함수 P를 호출한다. 함수의 호출과 함수의 실행은 동일한 사이트 A 에서 수행된다.
도 1의 (b)에 나타낸 바와 같이, 원격 호출인 경우, 도 1의 (a)와 마찬가지로 사이트 A의 프로세서 p는 동일한 함수 P를 호출하는데 실제 수행은 원격의 다른 사이트 B에서 일어난다. 이때 함수 호출의 의미 및 효과는 도 1의 (a)의 경우와 동일하다. 즉, 도 1의 (a) 및 도 1의 (b)의 경우에 있어서, 함수 호출을 위한 입력 정보가 같고, 함수 실행에 의한 출력도 동일한 결과를 얻을 수 있다. 사이트 A와 사이트 B는 각각 주 처리기 및 부 처리기에 해당한다고 볼 수 있다. 예를 들어, 주 처리기와 부 처리기의 관계는 클라이언트와 서버의 관계가 될 수 있다. 또는, CPU(Central Processing Unit)와 DSP(Digital Signal Processor)의 관계가 될 수도 있다. 주 처리기와 부 처리기의 둘 사이에서는 통신을 통해서 함수 요청 및 응답이 이루어진다.
일부 실시예들은, 원격 함수 호출을 위한 자동 코드 생성 방법을 제시하기 위한 것이다. 일부 실시예들은, 원격 함수 호출을 위한 코드를 자동적으로 생성하는 컴파일러를 포함하는 데이터 처리 장치를 제시하기 위한 것이다.
일부 실시예에 따른 원격 함수 호출을 위한 코드 생성 방법은, 원격 함수 호출(Remote Procedure Call: RPC)을 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 획득하는 단계; 및 상기 RPC를 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 분석하여, RPC 호출을 위한 코드 및 RPC 함수 실행을 위한 코드를 생성하는 단계를 포함할 수 있다.
상기 RPC를 수행할 부분을 나타내는 정보는 어노테이션(annotation)일 수 있다.
상기 코드를 생성하는 단계는, RPC 스터브(stub) 코드 생성에 필요한 인터페이스 기술을 생성하는 단계를 포함할 수 있다.
상기 RPC 호출을 위한 코드는 주 처리기 소스 코드이고, 상기 RPC 함수 실행을 위한 코드는 부 처리기 소스 코드일 수 있다.
상기 코드를 생성하는 단계는, RPC 처리 단계를 포함하고, 상기 RPC 처리 단계는, 상기 부 처리기에서 수행되는 함수 코드를 생성하는 단계; 상기 주 처리기와 상기 부 처리기 간 공유 데이터를 공유 메모리에 할당하는 코드를 생성하는 단계; 및 상기 RPC를 위한 함수 인자 전달 코드를 생성하는 단계를 포함할 수 있다.
상기 코드를 생성하는 단계는, 전역 변수 처리 단계를 포함하고, 상기 전역 변수 처리 단계는, 상기 RPC를 수행하는 함수에서 함수 외부의 전역 변수를 사용하는 부분을 찾아내는 데이터 흐름 분석 단계; 상기 찾아낸 함수 외부의 전역 변수를 상기 부 처리기 소스 코드에 선언 및 정의하는 단계; 및 상기 주 처리기 소스 코드 및 상기 부 처리기 소스 코드에 상기 전역 변수에 대한 공유 및 복사 코드를 삽입하는 단계를 포함할 수 있다.
상기 코드를 생성하는 단계는, 메모리 관리 유닛(Memory Management Unit: MMU)의 유무를 판단하는 단계; 및 상기 MMU가 있는 것으로 판단한 경우, 가상 주소와 물리 주소 사이에서 변환하기 위한 가상-물리 주소 변환 단계를 포함하고, 상기 가상-물리 주소 변환 단계는, 상기 RPC를 수행하는 함수의 변수의 데이터 타입을 분석하는 단계; 상기 변수의 데이터 타입 분석 결과에 따라, 주소 변환 대상 변수를 선정하는 단계; 및 상기 선정된 주소 변환 대상 변수들에 대해서 RPC 호출 전과 호출 후에 가상-물리 주소 변환 코드를 삽입하는 단계를 포함할 수 있다.
일부 실시예에 따른 데이터 처리 장치는, 원격 함수 호출(RPC)을 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 저장하는 저장부, 및 상기 RPC를 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 분석하여, RPC 호출을 위한 코드 및 RPC 함수 실행을 위한 코드를 생성하는 컴파일러를 포함할 수 있다.
상기 RPC를 수행할 부분을 나타내는 정보는 어노테이션일 수 있다.
상기 컴파일러는, RPC 스터브 코드 생성에 필요한 인터페이스 기술을 생성할 수 있다.
상기 RPC 호출을 위한 코드는 주 처리기 소스 코드이고, 상기 RPC 함수 실행을 위한 코드는 부 처리기 소스 코드일 수 있다.
상기 컴파일러는, 상기 부 처리기에서 수행되는 함수 코드를 생성하고, 상기 주 처리기와 상기 부 처리기 간 공유 데이터를 공유 메모리에 할당하는 코드를 생성하고, 및 상기 RPC를 위한 함수 인자 전달 코드를 생성할 수 있다.
상기 컴파일러는, 상기 RPC를 수행하는 함수에서 함수 외부의 전역 변수를 사용하는 부분을 데이터 흐름 분석을 통해서 찾아내고, 상기 찾아낸 함수 외부의 전역 변수를 상기 부 처리기 소스 코드에 선언 및 정의하고, 및 상기 주 처리기 소스 코드 및 상기 부 처리기 소스 코드에 상기 전역 변수에 대한 공유 및 복사 코드를 삽입할 수 있다.
메모리 관리 유닛을 더 포함하고, 상기 컴파일러는, 상기 RPC를 수행하는 함수의 변수의 데이터 타입을 분석하고, 상기 변수의 데이터 타입 분석 결과에 따라, 주소 변환 대상 변수를 선정하고, 및 상기 선정된 주소 변환 대상 변수들에 대해서 RPC 호출 전과 호출 후에 가상 주소와 물리 주소 사이에서 변환하기 위한 가상-물리 주소 변환 코드를 삽입할 수 있다.
일부 실시예에 따른 프로그램이 기록된 컴퓨터로 판독 가능한 기록 매체는 상기 코드 생성 방법을 컴퓨터로 실행시키기 위한 프로그램이 기록된 컴퓨터로 판독 가능한 기록 매체일 수 있다.
도 1은 함수 호출 방법으로서, 지역 호출과 원격 호출을 개략적으로 나타낸 도면이다.
도 2는 일부 실시예에 따라 스터브를 이용하여 RPC를 구현하는 시스템을 개략적으로 나타내는 도면이다.
도 3은 일부 실시예에 따른 인터페이스 기술 및 스터브 코드 생성을 개략적으로 나타낸 도면이다.
도 4는 일부 실시예에 따른 함수 호출 방식의 원격 함수 호출 코드 생성 방법의 흐름도이다.
도 5는 일부 실시예에 따른 원격 함수 호출을 위한 코드 생성 방법의 흐름도이다.
도 6은 일부 실시예에 따른 코드 어노테이션 방식의 원격 함수 호출 코드 생성 방법의 흐름도이다.
도 7은 코드 어노테이션 방식 RPC를 설명하기 위한 일부 실시예를 나타내는 도면이다.
도 8은 일부 실시예에 따른 컴파일러 분석을 통한 코드 생성 방법을 개략적으로 나타내는 흐름도이다.
도 9는 일부 실시예에 따른 원격 함수 호출 처리를 나타내는 흐름도이다.
도 10은 일부 실시예에 따른 전역 변수 처리를 나타내는 흐름도이다.
도 11은 전역 변수 처리의 일 실시예를 나타내는 도면이다.
도 12은 일부 실시예에 따른 가상-물리 주소 변환을 나타내는 흐름도이다.
도 13은 가상-물리 주소 변환의 일 실시예를 나타내는 도면이다.
도 14는 일부 실시예에 따른 데이터 처리 장치의 개략적인 블록도이다.
도 15는 일부 실시예에 따라, 도 4의 함수 호출 방식의 RPC를 사용하여 얼굴 인식(Face Detection)을 구현하는 코드를 개략적으로 나타내는 도면이다.
도 16은 일부 실시예에 따라, 도 6의 코드 어노테이션 방식의 RPC를 사용하여 얼굴 인식을 구현하는 코드를 개략적으로 나타내는 도면이다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다.
본 명세서에서 사용되는 용어에 대해 간략히 설명하고, 본 발명에 대해 구체적으로 설명하기로 한다.
본 발명에서 사용되는 용어는 본 발명에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 발명의 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서 본 발명에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 발명의 전반에 걸친 내용을 토대로 정의되어야 한다.
명세서 전체에서 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있음을 의미한다. 또한, 명세서에서 사용되는 "부"라는 용어는 소프트웨어, FPGA 또는 ASIC과 같은 하드웨어 구성요소를 의미하며, "부"는 어떤 역할들을 수행한다. 그렇지만 "부"는 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. "부"는 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 재생시키도록 구성될 수도 있다. 따라서, 일 예로서 "부"는 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로 코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들 및 변수들을 포함한다. 구성요소들과 "부"들 안에서 제공되는 기능은 더 작은 수의 구성요소들 및 "부"들로 결합되거나 추가적인 구성요소들과 "부"들로 더 분리될 수 있다.
아래에서는 첨부한 도면을 참고하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략한다.
도 2는 일부 실시예에 따라 스터브를 이용하여 RPC를 구현하는 시스템을 개략적으로 나타내는 도면이다.
도 2에서는 주 처리기로서, 예를 들어, 클라이언트(200)를, 부 처리기로서, 예를 들어, 서버(250)를 사용하는 실시예를 도시하고 있다. RPC 동작을 위해서는 클라이언트(200) 측의 클라이언트 스터브(Stub)(210)와 서버(250) 측의 서버 스터브(260)가 필요하다. 양쪽 스터브(210, 260)는 함수 호출 인터페이스가 동일하고 통신 서브시스템(220, 270)을 통해서 네트워크(240) 상에서 메시지를 주고 받는다. 네임 서비스(230)는 네트워크 내에서 사용자명이나 컴퓨터명에 관한 정보를 제공하는 것으로서, 도 2의 예에서는 네임 서비스(230)에 클라이언트(200)와 서버(250)에 관한 데이터베이스를 준비해두고 클라이언트 스터브(210)나 서버 스터브(260)로부터의 조회에 응한다.
도 3은 일부 실시예에 따른 인터페이스 기술 및 스터브 코드 생성을 개략적으로 나타낸 도면이다.
도 3을 참조하면 RPC를 사용하기 위해서 프로그래머는 다음의 작업을 해야 한다. 구체적으로 프로그래머는 인터페이스 기술, 스터브 생성, 주 처리기에서 호출 코드 작성, 부 처리기에서 함수 코드 작성, 주 처리기 및 부 처리기 코드 컴파일을 포함하는 작업을 해야 한다. 도 3에서는 주 처리기로서, 예를 들어, 클라이언트를, 부 처리기로서, 예를 들어, 서버를 사용하는 실시예를 도시하고 있다.
- 인터페이스 기술: 양쪽 스터브의 자동 생성을 위해서 인터페이스 기술 언어(Interface Description Language: 이하, 'IDL'이라 함)를 사용하여 함수 인터페이스를 기술한다. 인터페이스 기술은 입력 파라미터의 데이터 타입 및 전달 방식, 반환 데이터 타입을 포함하는 함수 호출 인터페이스에 대한 모든 정보와 추가적으로 버전, 구동 방식 등에 대한 정보를 담고 있다. 도 3에서는 예를 들어, 'proc.x'라는 이름의 인터페이스 기술을 작성한다.
- 스터브 생성: 인터페이스 기술을 입력으로 IDL 컴파일러(rpcgen)를 사용하여 주 처리기와 부 처리기의 양쪽 스터브 코드를 생성한다. rpcgen 컴파일러는 RPC 클라이언트와 서버의 스터브 코드를 자동적으로 생성하기 위한 것이다. RPC의 스터브 코드는 다른 기종 간의 컴퓨터와 응용 소프트웨어 사이에서 자료를 교환할 때 개방 환경을 만들어 주기 위한 외부 데이터 표현 방식(XDR: eXternal Data Representation) 등을 사용한다. RPC에서 다른 기종의 컴퓨터나 응용 소프트웨어에서 데이터를 사용하기 전에 데이터를 자신의 컴퓨터 내에서 XDR 형식으로 변환하고 다른 컴퓨터에서 사용할 때는 XDR 형식으로 변환된 데이터를 사용하고자 하는 컴퓨터 시스템에서 사용하는 데이터 표현 방식으로 변환한 뒤 사용할 수 있다. 그런데, 사용자가 직접 통신 규격에 적합하도록 인코딩/디코딩, 각종 입력값의 변환 등을 고려하여 XDR을 사용한 스터브 코드를 작성하는 것은 번거롭다. rpcgen 컴파일러를 사용함으로써, 사용자들은 클라이언트와 서버의 프로그램(실행 코드)을 생성하기 위한 클라이언트의 RPC 호출 코드와 서버의 RPC 함수 코드만 작성하게 될 수 있다. 또한 rpcgen 컴파일러는 클라이언트와 서버 사이에 데이터를 전송하기 위하여 사용자가 정의한 어떠한 데이터 유형이든지 XDR 형식으로 변환하는 XDR 함수들을 생성할 수 있다. 도 3에서는 예를 들어, 'proc.x'라는 이름의 인터페이스 기술을 입력으로 rpcgen을 사용하여 클라이언트 스터브 코드(client stub: 'proc_clnt.c'), 서버 스터브 코드(server stub: 'proc_svc.c'), 변환 코드(conversions: 'proc_xdr.c'), 정의 헤더(definitions: 'proc.h')를 자동적으로 생성한다.
- 주 처리기에서 호출 코드 작성: 생성된 함수에 파라미터를 전달하여 호출하고 결과를 반환받는 코드를 작성한다. 도 3에서는, 예를 들어, 주 처리기가 클라이언트가 될 수 있고, 클라이언트 애플리케이션의 소스 코드로서 'client_proc.c'를 프로그래머가 작성한다.
- 부 처리기에서 함수 코드 작성: RPC를 통해 전달된 함수 파라미터를 이용하여 실제 함수를 수행하고 결과를 RPC로 반환하는 코드를 작성한다. 도 3에서는, 예를 들어, 부 처리기가 서버가 될 수 있고, 서버 애플리케이션의 소스 코드로서 'server_proc.c'를 프로그래머가 작성한다.
- 주 처리기 및 부 처리기 코드 컴파일: 클라이언트 및 서버를 대상으로 각각 소스 코드를 컴파일하여 수행 바이너리를 생성한다. 도 3에서는, 예를 들어, 클라이언트에서 프로그래머가 작성한 'client_proc.c' 소스 코드와 rpcgen에서 생성한 클라이언트 스터브 코드를 포함하는 코드들을 컴파일한다. 서버에서는 프로그래머가 작성한 'server_proc.c' 소스 코드와 rpcgen에서 생성한 서버 스터브 코드를 포함하는 코드들을 컴파일한다. 컴파일러로는 gcc(GNU Compiler Collection) 컴파일러 등을 사용할 수 있다. 컴파일에는 운영 체제나 소프트웨어 개발 환경 제공자 등에 의해 제공되는 서브 루틴, 함수 등의 라이브러리가 사용될 수 있다. 컴파일 결과, 클라이언트 측과 서버 측 각각에서의 수행 바이너리, 즉, 실행 코드가 생성된다.
도 3의 rpcgen를 사용하는 실시예의 경우에도, 클라이언트 애플리케이션과 서버 애플리케이션에 대한 소스 코드는 RPC 호출 및 수행을 고려하여 작성된다.
도 4는 일부 실시예에 따른 함수 호출 방식의 원격 함수 호출 코드 생성 방법의 흐름도이다. 도 4에서는 함수 호출 방식의 RPC를 사용하기 위하여 프로그래머가 고려해야 하는 요소들을 나타내고 있다.
도 4에서는 주 처리기로서, 예를 들어, CPU를 사용하고, 부 처리기로서, 예를 들어, DSP를 사용하는 실시예에서의 함수 호출 방식의 RPC를 사용하는 것을 도시하고 있다. 프로그래머는 응용 소스 코드(400)에 RPC를 적용한 결과물로서, CPU 소스 코드(470)와 DSP 소스 코드(480)로 분할되도록 작성하고, 또한, CPU와 DSP 사이에서의 인터페이스 기술(490)을 작성한다. 즉, 함수 호출 방식의 RPC는 프로그래머가 함수 인터페이스 기술(490) 및 RPC 호출 및 수행을 위한 소스 코드(470, 480)를 직접 작성해야 한다. 이때 프로그램의 올바른 동작을 위해서는 프로그래머가 고려하여 코드를 작성해야 하는 단계로서, 인터페이스 기술 작성(410), DSP 함수 코드 작성(420), 공유 메모리 할당(430), 함수 인자 전달(440), 전역 변수 처리(450), 가상-물리 주소 변환(460) 등의 단계들이 있다. 이러한 단계들에서 코드를 직접 작성하는 것은 프로그래머에게 많은 부담을 주게 된다. 이는 RPC의 작성 과정에서 개발 시간 및 오류 가능성이 많이 증가하는 문제점으로 작용한다.
일부 실시예는 코드 어노테이션(Annotation) 방식의 RPC를 제안하기 위한 것이다. 일부 실시예는 응용 소스 코드의 동작에 대한 수정 없이 RPC를 수행할 부분에 프로그래머가 표식을 달면 이를 컴파일러가 분석하여 인터페이스 기술 및 소스 코드를 자동으로 생성하기 위한 것이다. 또한, 일부 실시예는 프로그래머가 수행해야 하는 단계를 대폭 줄이며 개발 시간을 단축하고 오류 가능성을 배제하기 위한 것이다.
도 5는 일부 실시예에 따른 원격 함수 호출을 위한 코드 생성 방법의 흐름도이다.
단계 510에서, 원격 함수 호출(Remote Procedure Call: RPC)을 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 획득한다.
단계 520에서, 단계 510에서 획득한 RPC를 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 분석하여, RPC 호출을 위한 코드 및 RPC 함수 실행을 위한 코드를 생성한다.
도 6은 일부 실시예에 따른 코드 어노테이션 방식의 원격 함수 호출 코드 생성 방법의 흐름도이다.
이하에서는, 도 6을 참조하여 응용 소스 코드(600)에서 RPC를 수행할 위치에 코드 어노테이션(610)을 행함으로써, 도 4에서 상술한 인터페이스 기술 작성(410), DSP 함수 코드 작성(420), 공유 메모리 할당(430), 함수 인자 전달(440), 전역 변수 처리(450), 가상-물리 주소 변환(460) 등의 단계들을 컴파일러 분석(620)에 의하여 자동적으로 수행하고, CPU 소스 코드(670)와 DSP 소스 코드(680), 인터페이스 기술(690)을 자동적으로 작성할 수 있는 일부 실시예에 대해서 설명한다.
일부 실시예에 따른 RPC를 위한 자동 코드 생성은 다음과 같다.
단계 610에서는, 소스 코드(600)에서 RPC를 수행할 위치에 어노테이션 표식을 획득한다.
단계 620에서는, 컴파일러가 어노테이션된 코드를 분석하여 RPC 수행에 필요한 CPU 소스 코드(670)와 DSP 소스 코드(680)를 자동 생성한다. 이 때, 컴파일러는 인터페이스 기술(690)도 자동 생성할 수 있다.
도 6에 나타낸 것처럼 코드 어노테이션 방식의 원격 함수 호출 코드 생성 방법은 크게 코드 어노테이션(610)과 컴파일러 분석(620)의 두 단계를 포함한다.
- 코드 어노테이션(Annotation)
코드 어노테이션(610) 단계는 응용 소스 코드(600)에서 RPC로 수행할 부분에 컴파일러가 이해하는 표시를 획득하는 것이다. 어노테이션 방식은 응용 소스 코드(600)에 부가적인 정보를 제공할 수 있는 방식이면 제한이 없다.
도 7은 코드 어노테이션 방식 RPC를 설명하기 위한 일부 실시예를 나타내는 도면이다. 도 7에서는 C 전처리기 문법인 '#pragma'를 사용하였다. 초기 CPU 코드(710)에서 RPC로 수행할 부분(단일 문장(statement) 또는 괄호로 묶어진 코드 블럭)에 '#pragma rpc' 라는 어노테이션을 획득한다. 이후 컴파일러 분석(620)을 통해서 초기 CPU 코드(710)로부터 수정된 CPU 코드(720) 및 DSP 코드(730)를 생성한다. 수정된 CPU 코드(720)는 RPC를 호출하는 부분이 포함되어 있고, 생성된 DSP 코드(730)에서는 해당 함수를 수행하는 부분이 포함되어 있다. 예를 들어, 'result=12+34;'라는 문장에 대하여 RPC를 수행하면, CPU 코드(720)에서는 데이터 입력으로서, '12', '34'를 사용하고, 데이터 출력으로서 'result'를 사용하는 함수 'add'를 호출하는 코드 'result=add(12,34)'를 생성한다. 이 때, DSP 코드(730)로는 입력 'int a', 'int b'를 사용하여 'a+b'를 반환(return)하는 'add' 함수를 수행하는 코드 'int add(int a, int b) { return a+b; }'를 생성한다.
상술한 바와 같이, 컴파일러에서 어노테이션을 기입한 부분의 CPU 코드를 분석하여, 예컨대, 입력과 출력 부분은 CPU 코드에 생성하고, 함수 처리 부분은 DSP 코드로 분리하여 생성함으로써, RPC 코드를 자동적으로 작성하도록 구성할 수 있다.
RPC를 위한 스터브 코드는 인터페이스 기술을 생성하여 기존 IDL 컴파일러(예를 들어, rpcgen)를 사용할 수도 있고, 일부 실시예에 따른 컴파일러에서 스터브 코드를 직접 생성할 수도 있다.
- 컴파일러 분석
컴파일러 분석(620) 단계는 어노테이션된 CPU 코드로부터 컴파일러 분석을 통해서 RPC 수행을 위한 CPU 및 DSP 코드를 생성하는 것이다. 이때, 도 4에서 프로그래머가 직접 작성해야 하는 코드 부분을 컴파일러 분석을 통해서 각각 자동적으로 생성한다. 컴파일러 분석의 대상은 올바른 RPC 수행을 위해 프로그래머가 고려해서 작성해야 하는 모든 코드에 해당된다.
도 8은 일부 실시예에 따른 컴파일러 분석을 통한 코드 생성 방법을 개략적으로 나타내는 흐름도이다. 컴파일러 분석에서는 원격 함수 호출(RPC) 처리(820), 전역 변수 처리(840), 메모리 관리 유닛(Memory Management Unit, 이하, 'MMU'라고 함: 860)이 있는 경우, 가상-물리 주소 변환(880)을 수행한다.
도 9는 일부 실시예에 따른 원격 함수 호출 처리를 나타내는 흐름도이다.
- 원격 함수 호출(RPC) 처리(820)
단계 822에서는 RPC 스터브 생성을 위한 인터페이스 기술을 생성한다. 인터페이스 기술을 이미 갖고 있거나 다른 구성 요소(예컨대, 보조 기억 장치 등의 저장부, 네트워크 통신부 등)로부터 제공받을 경우에는 인터페이스 기술을 생성하지 않을 수도 있다.
단계 824에서는 DSP 함수 코드를 생성한다.
단계 826에서는 CPU와 DSP간 공유 데이터를 공유 메모리에 할당하는 코드를 생성한다.
단계 828에서는 RPC 호출을 위한 함수 인자 전달 코드를 생성한다.
도 10은 일부 실시예에 따른 전역 변수 처리를 나타내는 흐름도이다.
- 전역 변수 처리(840)
단계 842에서는, 데이터 흐름 분석을 행한다.
단계 844에서는, 데이터 흐름 분석 과정에서 변수가 분석 가능한지 여부를 판단한다. 분석 가능하지 않은 변수가 존재할 경우에 대한 처리는 후술할 것이다.
단계 846에서는, RPC 수행 함수에서 함수 바깥의 변수, 즉, 전역 변수를 사용하는 부분을 단계 842에서의 데이터 흐름 분석을 통해서 찾아낸다.
단계 852에서는, 해당 변수를 DSP 코드에 선언 및 정의한다.
단계 854에서는, CPU 및 DSP 코드에 변수 공유 및 복사 코드를 삽입한다.
예를 들어, 도 11은 전역 변수 처리의 일 실시예를 나타내는 도면이다. 도 10에서 전역 변수 처리와 관련된 코드는 굵게(bold) 표시되어 있다. RPC 수행 함수는 DSP 코드인 'interface_server.c'에 작성되어 있고, 함수 바깥의 변수로서 'global'을 사용함을 알 수 있다. 따라서, 'global'을 DSP 코드에 선언 및 정의하고, CPU 코드('main.c')와 DSP 코드('interface_serve.c')에 변수 'global'을 공유시키고 복사 코드를 삽입한다.
도 10의 단계 844에서는 데이터 흐름 분석 과정에서 분석 가능하지 않은 변수가 존재하는지 여부를 판단한다. 예를 들어, 'void *d'와 같이, 변수 d에 대하여 타입을 지정하지 않고 범용으로 사용가능한 포인터를 선언하여 사용하는 경우가 있다. 이러한 포인터를 사용할 때, 프로그래머가 직접 코드를 작성하는 경우에는 필요에 따라, 'int' 타입이나 'float' 타입으로 프로그래머의 판단에 따라 적절히 변환하여 사용할 수 있다. 또는, 프로그램의 실행 단계에서 사용되는 데이터 값의 형태에 따라, 'int' 타입이나 'float' 타입으로 적절히 변환하여 사용될 수 있다. 그러나, 일부 실시예와 같이, 컴파일러가 자동적으로 코드를 생성할 경우에는, 'void *d'와 같이 타입이 지정되지 않은 포인터를 어떻게 처리해야 할지 컴파일러가 결정할 수 없다. 이러한 분석 불가능한 변수가 발생한 경우, 컴파일러는 분석 불가능한 변수를 표시(단계 848)하고, 분석 불가능한 변수에 대하여, 예컨대, 'int' 타입을 지정하거나, 조건문('if', 'else' 등)에 따라 처리하도록 하는 것과 같이 추가적으로 어노테이션을 획득(단계 850)하여 컴파일러가 처리하게 된다.
도 12는 일부 실시예에 따른 가상-물리 주소 변환을 나타내는 흐름도이다.
- 가상-물리 주소 변환(880)
도 8의 단계 860에서는 MMU가 존재하는지 여부를 판단한다.
MMU가 존재하는 경우, 단계 880에서 가상 물리 주소 변환을 수행한다.
도 12의 단계 882에서는, RPC 함수의 변수의 데이터 타입을 분석한다.
단계 884에서는, 분석 가능한 변수인지 여부를 판단한다. 분석 가능하지 않은 변수가 존재할 경우에 대한 처리는 후술할 것이다.
단계 886에서는, 단계 882의 변수 타입 분석 결과에 따라 주소 변환 대상 변수를 선정한다.
단계 888에서는, 선정된 주소 변환 대상 변수의 데이터 타입이 포인터인지 여부를 판단하여, 포인터인 경우 포인터의 대상이 되는 변수도 분석 대상으로 삼는다.
단계 894에서는, 최종적으로 확정된 주소 변환 대상 변수들에 대해서 RPC 호출 전후로 가상-물리 주소 변환 코드를 삽입한다.
예를 들어, 도 13은 가상-물리 주소 변환의 일 실시예를 나타내는 도면이다. CPU와 DSP가 공유 메모리로서, DSP의 DRAM을 사용하는 경우가 있을 수 있다. 이 때, CPU에서는 변수 arg에 대한 메모리의 가상 주소로서 'vaddr_arg'인 '0xB0000000'를 사용하고, DSP에서는 변수 arg에 대한 메모리의 물리 주소로서 'paddr_arg'인 '0x20000000'를 사용할 수 있다. 이 경우, RPC를 수행할 때, 변수 arg에 대하여 CPU와 DSP에서 가상-물리 주소 변환이 필요하게 된다. 변수 arg의 예의 경우, 변수 arg에 대한 물리 주소를 가상 주소로부터 변환할 경우, 오프셋 'mmap_offset = 0xB0000000 - 0x20000000'을 사용하여 'paddr_arg = vaddr_arg - mmap_offset'과 같이 변환할 수 있다. 한편, 공유 DRAM에서의 화살표는 포인터를 나타내는 것이다.
RPC 함수의 변수의 데이터 타입을 분석하는 과정에서도 도 10에서의 데이터 흐름 분석 과정과 관련하여 설명한 바와 같이, 단계 884에서 분석 가능한 변수인지 여부를 판단한 결과, 분석 불가능한 변수가 발생할 수 있다. 분석 불가능한 변수에 대한 처리는 도 10에서 설명한 바와 마찬가지로 컴파일러는 분석 불가능한 변수를 표시(단계 890)하고, 분석 불가능한 변수에 대하여 추가적으로 어노테이션을 획득(단계 892)하여 컴파일러가 처리하게 된다.
도 14는 일부 실시예에 따른 데이터 처리 장치(1400)의 개략적인 블록도이다.
도 14를 참조하면, 데이터 처리 장치(1400)는 저장부(1410)와 컴파일러(1420)를 포함한다. 도면에서는 생략하였지만, 데이터 처리 장치(1400)는 키보드, 마우스, 터치 패널 등의 입력부와 디스플레이 등의 출력부, 네트워크 통신을 위한 통신부, 프린터, 스캐너 등의 주변 기기 등을 더 포함할 수 있다. 또한, 컴파일러(1420)는 CPU 등의 프로세서에 의해 실행되는 프로그램의 형태로 구현될 수도 있다. 데이터 처리 장치(1400)는, 예를 들어, 컴퓨터, 서버, 클라이언트, 모바일 디바이스 등, 소스 코드를 컴파일하는 기능을 수행할 수 있는 장치일 수 있다.
저장부(1410)는 원격 함수 호출(RPC)을 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 저장할 수 있다. 저장부(1410)에는 데이터 처리 장치의 작동을 위한 운영 체제, 응용 기능의 실행을 위한 애플리케이션 프로그램, 프로그램의 수행 과정에서 생성되고 사용되는 데이터 등도 저장될 수 있다.
컴파일러(1420)는 RPC를 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 분석하여, RPC 호출을 위한 코드 및 RPC 함수 실행을 위한 코드를 생성한다. RPC를 수행할 부분을 나타내는 정보는 어노테이션이 될 수 있다. 컴파일러(1420)는 RPC 스터브 코드 생성에 필요한 인터페이스 기술도 생성할 수 있다. RPC 호출을 위한 코드는 주 처리기 소스 코드일 수 있고, RPC 함수 실행을 위한 코드는 부 처리기 소스 코드일 수 있다.
컴파일러(1420)는, 부 처리기에서 수행되는 함수 코드를 생성하고, 주 처리기와 부 처리기 간 공유 데이터를 공유 메모리에 할당하는 코드를 생성하고, 및 RPC를 위한 함수 인자 전달 코드를 생성할 수 있다.
컴파일러(1420)는, RPC를 수행하는 함수에서 함수 외부의 전역 변수를 사용하는 부분을 데이터 흐름 분석을 통해서 찾아내고, 찾아낸 함수 외부의 전역 변수를 부 처리기 소스 코드에 선언 및 정의하고, 주 처리기 소스 코드 및 부 처리기 소스 코드에 전역 변수에 대한 공유 및 복사 코드를 삽입할 수 있다.
데이터 처리 장치(1400)는 메모리 관리 유닛(MMU)을 더 포함할 수 있다. MMU가 있는 경우, 컴파일러(1420)는 RPC를 수행하는 함수의 변수의 데이터 타입을 분석하고, 변수의 데이터 타입 분석 결과에 따라, 주소 변환 대상 변수를 선정하고, 및 선정된 주소 변환 대상 변수들에 대해서 RPC 호출 전과 호출 후에 가상 주소와 물리 주소 사이에서 변환하기 위한 가상-물리 주소 변환 코드를 삽입할 수 있다.
도 15는 일부 실시예에 따라, 도 4의 함수 호출 방식의 RPC를 사용하여 얼굴 인식(Face Detection)을 구현하는 코드를 개략적으로 나타내는 도면이다.
도 4의 응용 소스 코드(400)는 도 15의 CPU 코드인 좌측의 'main.c'에 대응될 수 있다. 프로그래머는 도 4의 인터페이스 기술 작성(410), DSP 함수 코드 작성(420), 공유 메모리 할당(430), 함수 인자 전달(440), 전역 변수 처리(450), 가상-물리 주소 변환(460)을 위하여 도 15에서 굵게(bold) 표시한 코드를 직접 작성하여야 한다. 프로그래머의 작업에 의해 도 4의 CPU 소스 코드(470)인 도 15의 우측의 'main.c'와 도 4의 DSP 소스 코드(480)인 도 15의 'interface_server.c'와 도 4의 인터페이스 기술(490)인 도 15의 'interface.x'의 결과물을 직접 작성하게 된다.
도 16은 일부 실시예에 따라, 도 6의 코드 어노테이션 방식의 RPC를 사용하여 얼굴 인식을 구현하는 코드를 개략적으로 나타내는 도면이다.
도 6의 응용 소스 코드(600)는 도 16의 코드의 좌측의 'main.c'에 대응될 수 있다. 프로그래머는 도 6의 코드 어노테이션(610)으로서 도 16의 굵게 표시한 코드 '#pragma rpc'만 작성하면 된다. 도 6의 CPU 소스 코드(670)인 도 16의 우측의 'main.c'와 도 6의 DSP 소스 코드(680)인 도 16의 'interface_server.c'와 도 6의 인터페이스 기술(690)인 'interface.x'는 일부 실시예에 따른 도 6의 컴파일러 분석(620)에 의하여 자동적으로 생성된다.
코드 어노테이션 방식의 RPC를 사용하는 일부 실시예에 따르면, 프로그래머가 수행해야 하는 단계를 대폭 줄일 수 있으므로, 프로그래머의 RPC 사용에 있어서 편의성이 향상된다. 또한, 프로그래머가 작성해야 하는 코드가 감소하므로, 개발 시간이 단축되고, 오류 가능성을 배제할 수 있다.
일부 실시예에서는 예를 들어, 주 처리기로서 CPU를 사용하고, 부 처리기로서 DSP를 사용하여 설명하였으나, 본 발명은 이러한 실시예만으로 한정되지 않는다.
예를 들어, 멀티코어(Multicore) DSP를 사용하는 경우, 분담(offload) 대상이 되는 코어(Core)를 자동적으로 선정하는 기능을 추가할 수 있다. 예컨대, 음성 처리 DSP와 화상 처리 DSP를 함께 사용하는 경우, 음성 인식 기능에 대한 RPC 수행은 음성 처리 DSP를 사용하도록 선정하고, 얼굴 인식 기능에 대한 RPC 수행은 화상 처리 DSP를 사용하도록 선정할 수도 있다.
또한, 예를 들어, 멀티코어 CPU를 사용하는 경우, 부 처리기로서 다른 CPU 코어로의 분담(offloading) 기능을 추가할 수 있다. 주 처리기와 부 처리기의 관계는 CPU와 DSP의 관계 뿐만 아니라, CPU와 CPU, DSP와 DSP 등의 관계가 될 수도 있고, 클라이언트와 서버의 관계, 컴퓨터와 컴퓨터의 관계, 모바일 디바이스와 서버의 관계, 웨어러블 디바이스와 스마트폰의 관계 등 분산 처리가 가능한 경우에 적용할 수 있다.
한편, 본 발명은 컴퓨터로 읽을 수 있는 기록 매체에 컴퓨터가 읽을 수 있는 코드로 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록 매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록 장치를 포함한다.
컴퓨터가 읽을 수 있는 기록 매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현하는 것을 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산 방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다. 그리고 본 발명을 구현하기 위한 기능적인(functional) 프로그램, 코드 및 코드 세그먼트들은 본 발명이 속하는 기술 분야의 프로그래머들에 의하여 용이하게 추론될 수 있다.
이제까지 본 발명에 대하여 바람직한 실시 예를 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 본 발명을 구현할 수 있음을 이해할 것이다. 그러므로 상기 개시된 실시 예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 한다.

Claims (15)

  1. 원격 함수 호출(Remote Procedure Call: RPC)을 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 획득하는 단계; 및
    상기 RPC를 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 분석하여, RPC 호출을 위한 코드 및 RPC 함수 실행을 위한 코드를 생성하는 단계를 포함하는 것을 특징으로 하는 원격 함수 호출을 위한 코드 생성 방법.
  2. 제 1 항에 있어서,
    상기 RPC를 수행할 부분을 나타내는 정보는 어노테이션(annotation)인 것을 특징으로 하는 원격 함수 호출을 위한 코드 생성 방법.
  3. 제 1 항에 있어서,
    상기 코드를 생성하는 단계는, RPC 스터브(stub) 코드 생성에 필요한 인터페이스 기술을 생성하는 단계를 포함하는 것을 특징으로 하는 원격 함수 호출을 위한 코드 생성 방법.
  4. 제 1 항에 있어서,
    상기 RPC 호출을 위한 코드는 주 처리기 소스 코드이고,
    상기 RPC 함수 실행을 위한 코드는 부 처리기 소스 코드인 것을 특징으로 하는 원격 함수 호출을 위한 코드 생성 방법.
  5. 제 4 항에 있어서,
    상기 코드를 생성하는 단계는, RPC 처리 단계를 포함하고,
    상기 RPC 처리 단계는,
    상기 부 처리기에서 수행되는 함수 코드를 생성하는 단계;
    상기 주 처리기와 상기 부 처리기 간 공유 데이터를 공유 메모리에 할당하는 코드를 생성하는 단계; 및
    상기 RPC를 위한 함수 인자 전달 코드를 생성하는 단계를 포함하는 것을 특징으로 하는 원격 함수 호출을 위한 코드 생성 방법.
  6. 제 4 항에 있어서,
    상기 코드를 생성하는 단계는, 전역 변수 처리 단계를 포함하고,
    상기 전역 변수 처리 단계는,
    상기 RPC를 수행하는 함수에서 함수 외부의 전역 변수를 사용하는 부분을 찾아내는 데이터 흐름 분석 단계;
    상기 찾아낸 함수 외부의 전역 변수를 상기 부 처리기 소스 코드에 선언 및 정의하는 단계; 및
    상기 주 처리기 소스 코드 및 상기 부 처리기 소스 코드에 상기 전역 변수에 대한 공유 및 복사 코드를 삽입하는 단계를 포함하는 것을 특징으로 하는 원격 함수 호출을 위한 코드 생성 방법.
  7. 제 1 항에 있어서,
    상기 코드를 생성하는 단계는,
    메모리 관리 유닛(Memory Management Unit: MMU)의 유무를 판단하는 단계; 및
    상기 MMU가 있는 것으로 판단한 경우, 가상 주소와 물리 주소 사이에서 변환하기 위한 가상-물리 주소 변환 단계를 포함하고,
    상기 가상-물리 주소 변환 단계는,
    상기 RPC를 수행하는 함수의 변수의 데이터 타입을 분석하는 단계;
    상기 변수의 데이터 타입 분석 결과에 따라, 주소 변환 대상 변수를 선정하는 단계; 및
    상기 선정된 주소 변환 대상 변수들에 대해서 RPC 호출 전과 호출 후에 가상-물리 주소 변환 코드를 삽입하는 단계를 포함하는 것을 특징으로 하는 원격 함수 호출을 위한 코드 생성 방법.
  8. 원격 함수 호출(RPC)을 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 저장하는 저장부, 및
    상기 RPC를 수행할 부분을 나타내는 정보를 포함하는 소스 코드를 분석하여, RPC 호출을 위한 코드 및 RPC 함수 실행을 위한 코드를 생성하는 컴파일러를 포함하는 것을 특징으로 하는 데이터 처리 장치.
  9. 제 8 항에 있어서,
    상기 RPC를 수행할 부분을 나타내는 정보는 어노테이션인 것을 특징으로 하는 데이터 처리 장치.
  10. 제 8 항에 있어서,
    상기 컴파일러는, RPC 스터브 코드 생성에 필요한 인터페이스 기술을 생성하는 것을 특징으로 하는 데이터 처리 장치.
  11. 제 8 항에 있어서,
    상기 RPC 호출을 위한 코드는 주 처리기 소스 코드이고,
    상기 RPC 함수 실행을 위한 코드는 부 처리기 소스 코드인 것을 특징으로 하는 데이터 처리 장치.
  12. 제 11 항에 있어서,
    상기 컴파일러는,
    상기 부 처리기에서 수행되는 함수 코드를 생성하고,
    상기 주 처리기와 상기 부 처리기 간 공유 데이터를 공유 메모리에 할당하는 코드를 생성하고, 및
    상기 RPC를 위한 함수 인자 전달 코드를 생성하는 것을 특징으로 하는 데이터 처리 장치.
  13. 제 11 항에 있어서,
    상기 컴파일러는,
    상기 RPC를 수행하는 함수에서 함수 외부의 전역 변수를 사용하는 부분을 데이터 흐름 분석을 통해서 찾아내고,
    상기 찾아낸 함수 외부의 전역 변수를 상기 부 처리기 소스 코드에 선언 및 정의하고, 및
    상기 주 처리기 소스 코드 및 상기 부 처리기 소스 코드에 상기 전역 변수에 대한 공유 및 복사 코드를 삽입하는 것을 특징으로 하는 데이터 처리 장치.
  14. 제 8 항에 있어서,
    메모리 관리 유닛을 더 포함하고,
    상기 컴파일러는,
    상기 RPC를 수행하는 함수의 변수의 데이터 타입을 분석하고,
    상기 변수의 데이터 타입 분석 결과에 따라, 주소 변환 대상 변수를 선정하고, 및
    상기 선정된 주소 변환 대상 변수들에 대해서 RPC 호출 전과 호출 후에 가상 주소와 물리 주소 사이에서 변환하기 위한 가상-물리 주소 변환 코드를 삽입하는 것을 특징으로 하는 데이터 처리 장치.
  15. 제 1 항 내지 제 7 항 중 어느 한 항의 코드 생성 방법을 컴퓨터로 실행시키기 위한 프로그램이 기록된 컴퓨터로 판독 가능한 기록 매체.
KR1020140081990A 2014-07-01 2014-07-01 원격 함수 호출을 위한 자동 코드 생성 KR20160003485A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020140081990A KR20160003485A (ko) 2014-07-01 2014-07-01 원격 함수 호출을 위한 자동 코드 생성
US14/753,844 US9672084B2 (en) 2014-07-01 2015-06-29 Method of generating automatic code for remote procedure call

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140081990A KR20160003485A (ko) 2014-07-01 2014-07-01 원격 함수 호출을 위한 자동 코드 생성

Publications (1)

Publication Number Publication Date
KR20160003485A true KR20160003485A (ko) 2016-01-11

Family

ID=55017074

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140081990A KR20160003485A (ko) 2014-07-01 2014-07-01 원격 함수 호출을 위한 자동 코드 생성

Country Status (2)

Country Link
US (1) US9672084B2 (ko)
KR (1) KR20160003485A (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019112676A1 (en) * 2017-12-05 2019-06-13 Western Digital Technologies, Inc. Data processing offload using in-storage code execution
KR20200068557A (ko) * 2018-12-05 2020-06-15 한국전자통신연구원 펑션 실행 장치 및 방법
KR102407940B1 (ko) * 2021-12-06 2022-06-13 주식회사 플랜티넷 Rpc에 기반하여 외부 장치의 함수 또는 프로시저를 호출하는 전자 장치가 rpc 서비스를 사용하기 위한 인터페이스를 생성하는 방법, 그 컴퓨터 프로그램 및 그 전자 장치
KR102407941B1 (ko) * 2021-12-06 2022-06-13 주식회사 플랜티넷 Rpc에 기반하여 외부 장치의 함수 또는 프로시저를 호출하는 전자 장치가 사용자 인터페이스를 생성하는 방법, 그 컴퓨터 프로그램 및 그 전자 장치

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110114763B (zh) * 2016-12-22 2023-12-29 日本电信电话株式会社 数据处理系统及方法
US11010216B2 (en) * 2016-12-22 2021-05-18 Nippon Telegraph And Telephone Corporation RPC conversion processing system and RPC conversion method
US11216255B1 (en) * 2017-12-30 2022-01-04 ezbds, LLC Open compiler system for the construction of safe and correct computational systems
CN108829467B (zh) * 2018-04-28 2020-05-22 蜂助手股份有限公司 第三方平台对接实现方法、装置、设备及存储介质
CN109189379A (zh) * 2018-09-04 2019-01-11 百度在线网络技术(北京)有限公司 代码生成方法和装置

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6185611B1 (en) 1998-03-20 2001-02-06 Sun Microsystem, Inc. Dynamic lookup service in a distributed system
JP2000099332A (ja) 1998-09-25 2000-04-07 Hitachi Ltd 遠隔手続き呼び出し最適化方法とこれを用いたプログラム実行方法
US6912633B2 (en) * 2002-03-18 2005-06-28 Sun Microsystems, Inc. Enhanced memory management for portable devices
WO2004012083A2 (en) 2002-07-25 2004-02-05 Koninklijke Philips Electronics N.V. Source-to-source partitioning compilation
US7171539B2 (en) * 2002-11-18 2007-01-30 Arm Limited Apparatus and method for controlling access to a memory
US7529888B2 (en) * 2004-11-19 2009-05-05 Intel Corporation Software caching with bounded-error delayed update
US7774741B2 (en) * 2006-05-22 2010-08-10 Microsoft Corporation Automatically resource leak diagnosis and detecting process within the operating system
US8752006B1 (en) * 2007-07-02 2014-06-10 Cisco Technology, Inc. System and method and apparatus for automatically generating computer code for remote procedure calls
KR101603202B1 (ko) 2009-09-21 2016-03-14 삼성전자주식회사 이기종 멀티프로세서 시스템 온 칩에서의 rpc 데이터 배치 방법 및 장치
EP2579164B1 (en) * 2010-05-26 2021-01-06 Nec Corporation Multiprocessor system, execution control method, execution control program
US9378073B2 (en) 2012-08-14 2016-06-28 International Business Machines Corporation Remote procedure call for a distributed system

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019112676A1 (en) * 2017-12-05 2019-06-13 Western Digital Technologies, Inc. Data processing offload using in-storage code execution
US10565014B2 (en) 2017-12-05 2020-02-18 Western Digital Technologies, Inc. Data processing offload using in-storage code execution
CN111194437A (zh) * 2017-12-05 2020-05-22 西部数据技术公司 使用存储中代码执行的数据处理卸载
US11275615B2 (en) 2017-12-05 2022-03-15 Western Digital Technologies, Inc. Data processing offload using in-storage code execution
CN111194437B (zh) * 2017-12-05 2023-10-17 西部数据技术公司 使用存储中代码执行的数据处理卸载
KR20200068557A (ko) * 2018-12-05 2020-06-15 한국전자통신연구원 펑션 실행 장치 및 방법
KR102407940B1 (ko) * 2021-12-06 2022-06-13 주식회사 플랜티넷 Rpc에 기반하여 외부 장치의 함수 또는 프로시저를 호출하는 전자 장치가 rpc 서비스를 사용하기 위한 인터페이스를 생성하는 방법, 그 컴퓨터 프로그램 및 그 전자 장치
KR102407941B1 (ko) * 2021-12-06 2022-06-13 주식회사 플랜티넷 Rpc에 기반하여 외부 장치의 함수 또는 프로시저를 호출하는 전자 장치가 사용자 인터페이스를 생성하는 방법, 그 컴퓨터 프로그램 및 그 전자 장치

Also Published As

Publication number Publication date
US9672084B2 (en) 2017-06-06
US20160004579A1 (en) 2016-01-07

Similar Documents

Publication Publication Date Title
KR20160003485A (ko) 원격 함수 호출을 위한 자동 코드 생성
RU2520344C2 (ru) Кэширование генерируемого во время выполнения кода
JP5851396B2 (ja) 処理方法
KR101795844B1 (ko) 런타임 시스템
JP5893038B2 (ja) ユーザ定義型のコンパイル時境界検査
EP3123316B1 (en) Supporting dynamic behavior in statically compiled programs
US20180032420A1 (en) Debugging Tool For A JIT Compiler
JP2012053566A (ja) コード生成方法、システム及びプログラム
US8881123B2 (en) Enabling symbol resolution of private symbols in legacy programs and optimizing access to the private symbols
US8935686B2 (en) Error-code and exception-based function dispatch tables
US20090328016A1 (en) Generalized expression trees
US20090320007A1 (en) Local metadata for external components
US20150067653A1 (en) Automatic generation of analysis-equivalent application constructs
CN111913741A (zh) 对象拦截方法、装置、介质及电子设备
CN111771186A (zh) 编译器生成的异步可枚举对象
US20100010801A1 (en) Conflict resolution and error recovery strategies
US8661421B2 (en) Methods and apparatuses for endian conversion
US11321236B2 (en) Reduced instructions to generate global variable addresses
JP6011329B2 (ja) プログラム生成装置、プログラム生成方法、および、コンピュータ・プログラム
CN111782196A (zh) 基于mvp架构的开发方法及装置
US20110099534A1 (en) Information processing apparatus, execution program operation modification method, and recording medium
CN113918664B (zh) 一种数据处理方法以及装置
JP2002073579A (ja) 分散共有メモリ向けコンパイル方法
CN117075912B (zh) 用于程序语言转换的方法、编译方法及相关设备
Chang et al. A translation framework for automatic translation of annotated llvm ir into opencl kernel function

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application