KR20080066402A - 공통중간코드를 이용한 병렬 임베디드 소프트웨어의 설계방법 - Google Patents

공통중간코드를 이용한 병렬 임베디드 소프트웨어의 설계방법 Download PDF

Info

Publication number
KR20080066402A
KR20080066402A KR1020070003821A KR20070003821A KR20080066402A KR 20080066402 A KR20080066402 A KR 20080066402A KR 1020070003821 A KR1020070003821 A KR 1020070003821A KR 20070003821 A KR20070003821 A KR 20070003821A KR 20080066402 A KR20080066402 A KR 20080066402A
Authority
KR
South Korea
Prior art keywords
code
architecture
task
cic
common intermediate
Prior art date
Application number
KR1020070003821A
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 KR1020070003821A priority Critical patent/KR20080066402A/ko
Publication of KR20080066402A publication Critical patent/KR20080066402A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • 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

Abstract

본 발명은 공통중간코드를 이용한 병렬 임베디드 소프트웨어의 설계 방법에 관한 것으로, 더욱 상세하게는 멀티태스킹 병렬 임베디드 소프트웨어를 명세하기 위해 아키텍쳐에 독립적인 공통중간코드(CIC: Common Intermediate Code)를 정의하고 공통중간코드로 작성된 프로그램으로부터 각 프로세서에서 수행될 임베디드 소프트웨어를 자동 생성하는 방법에 관한 것이다.
이를 위하여 본 발명은, 아키텍쳐에 독립적으로 공통중간코드를 정의하는 단계, 공통중간코드를 이용하여 병렬 프로그램을 명세하고, 아키텍쳐와 실시간 제약조건, 태스크간의 의존 관계를 별도의 환경명세파일로 기술하는 단계, 공통중간코드에서 사용하는 응용프로그래밍 인터페이스 (API: Application Programming Interface)를 실제로 사용하는 타겟 프로세서의 API로 변환하는 단계, 데이터병렬성을 표현하기 위한 사용한 OpenMP 디렉티브를 MPI 라이브러리를 이용하여 변환하는 단계, 그리고 환경명세파일을 참고로 하여 각 프로세서별로 할당된 태스크들의 수행 스케쥴을 정하여 프로세서 별로 최종 소프트웨어를 생성하는 단계로 이루어진 것에 특징이 있다.
병렬프로그램, 공통중간코드, CIC, 코드자동생성, 임베디드 소프트웨어

Description

공통중간코드를 이용한 병렬 임베디드 소프트웨어의 설계 방법 {The method of designing parallel embedded software with common intermediate code }
도 1은 본 발명에서 공통중간코드로 작성된 병렬 프로그램으로부터 프로세서별 코드를 자동생성하기 위한 과정을 나타내는 흐름도
도 2는 본 발명에서 정의한 공통중간코드의 구조와 하드웨어 플랫폼, 제약사항, 태스크 구조를 명세한 환경명세파일의 구조
도 3은 공통중간코드에서 사용하는 응용프로그래밍 인터페이스(API)를 타겟 프로세서에서 사용하는 API로 변환하는 과정을 나타내는 흐름도
[문헌1] Message Passing Interface, http://www-unix.mcs.anl.gov/mpi/
[문헌2] OpenMP Fortran/C Application Program Interface, http://www.openmp.org/
본 발명은 공통중간코드를 이용한 병렬 임베디드 소프트웨어의 생성 방법에 관한 것으로, 더욱 상세하게는 멀티태스킹 병렬 임베디드 소프트웨어를 명세하기 위해 아키텍쳐에 독립적인 공통중간코드(CIC: Common Intermediate Code)를 정의하고 공통중간코드로 작성된 프로그램으로부터 각 프로세서에서 수행될 임베디드 소프트웨어를 자동 생성하는 방법에 관한 것이다.
일반적으로 병렬 프로그램은 하나의 응용을 복수의 프로세서를 사용하여 병렬적으로 수행시켜서 성능 향상을 얻기 위한 목적으로 사용된다. 가장 널리 쓰이는 방법은 공유메모리를 이용하여 프로세서들이 서로 통신을 하는 아키텍쳐를 가정하고 만들어진 OpenMP 디렉티브를 사용하는 것과 분산메모리 구조의 아키텍쳐를 가정하고 메시지 패싱으로 프로세서간 통신을 수행하도록 하는 MPI 라이브러리를 사용하는 것이다. 이때 각 프로세서별로 수행되는 코드는 C 혹은 Fortran와 같은 순차적인 프로그래밍 언어로 작성된다.
그러나 상기의 방법은 타겟 아키텍쳐와 운영체제가 바뀔 때마다 프로그래밍을 다시 해 주어야 하는 문제가 있다. 그리고 임베디드 소프트웨어를 작성할 때에 필요한 실시간적인 제약 조건과 메모리 요구량에 대한 고려를 하기 어렵다는 문제점이 있다.
본 발명은 상기와 같은 문제점을 해소하기 위해, 응용프로그램을 구성하는 태스크들의 병렬성을 아키텍쳐에 독립적으로 기술할 수 있도록 하는 공통중간코드를 정의 하고, 이와 별도로 아키텍쳐의 특징과 태스크들의 실시간 제약조건, 메모리 크기, 그리고 태스크들의 의존관계를 별도의 환경명세파일로 명세하도록 하며, 공통중간코드와 환경명세파일로부터 각 프로세서에서 수행될 프로그램을 자동 생성하도록 함으로써, 아키텍쳐에 특화된 병렬프로그램을 빠르고 효율적으로 작성하도록 하는데 그 목적이 있다.
이와 같은 목적을 달성하기 위하여 본 발명은 아키텍쳐에 독립적으로 공통중간코드를 정의하는 단계, 공통중간코드를 이용하여 병렬 프로그램을 명세하고, 아키텍쳐와 실시간 제약조건, 태스크간 의존 관계를 별도의 환경명세파일로 기술하는 단계, 공통중간코드에서 사용하는 응용프로그래밍 인터페이스 (API: Application Programming Interface)를 실제로 사용하는 타겟 프로세서의 API로 변환하는 단계, 데이터병렬성을 표현하기 위한 사용한 OpenMP 디렉티브를 MPI 라이브러리를 이용하여 변환하는 단계, 그리고 환경명세파일을 참고로 하여 각 프로세서별로 할당된 태스크들의 수행 스케쥴을 정하여 프로세서 별로 최종 소프트웨어를 생성하는 단계로 이루어진 것에 특징이 있다.
상술한 목적, 특징들 및 장점은 첨부된 도면과 관련한 다음의 상세한 설명을 통하여 보다 분명해 질 것이다. 이하, 첨부된 도면을 참조하여 본 발명을 상세히 설명하면 다음과 같다.
도 1은 본 발명에서 이루어지는 방법에 의하여 응용프로그램을 명세하고 그로부터 타겟에 특화된 코드를 프로세서별로 생성하는 방법을 전체적으로 보여주는 흐름도이다.
도 1에 도시된 바와 같이, 본 발명에서 병렬 프로그램은 직접 기존의 C 혹은 포트란과 같은 순차적 수행을 가정한 프로그래밍 언어를 사용하여 기술하지 않고, 운영체제 및 하드웨어와 독립적인 공통중간코드(CIC)형태로 코드를 작성한다(1).
공통중간코드로 알고리즘을 명시하는 것과 동시에 하드웨어 아키텍쳐의 구성, 시스템의 제약 사항, 태스크의 의존관계를 정의하는 환경명세파일을 작성한다(2).
CIC 코드 내부에 운영체제의 서비스가 필요하거나 프로세서간 통신이 필요한 부분은 응용프로그래밍 인터페이스 (API)를 이용하여 프로그램하게 된다. 그 다음 단계는 이 API 들을 타겟 프로세서에서 사용하는 API 로 변환하는 단계이다 (3).
CIC 코드에서 병렬적으로 수행 가능한 여러 함수의 병렬성은 각각을 별도의 태스크로 분할하는 방법을 통해 표현하고 동일 함수가 여러 데이터에 대해 병렬적으로 수행이 가능한 부분은 OpenMP 디렉티브를 넣어 병렬성을 표현한다. 따라서 그 다음단계에서는 OpenMP 디렉티브를 사용하여 표현되어 있는 병렬성이 있는 코드를 MPI를 사용한 코드로 변환한다 (4). OpenMP가 포함된 CIC 코드는 복수의 스레드 및 MPI를 이용한 코드로 변환이 되며, 타겟 플랫폼에 최적화된 MPI 라이브러리가 포팅이 되어 있다면 이 방법을 통해 병렬화로 인한 높은 성능을 효율적으로 얻을 수 있다.
마지막 단계로 변환된 CIC 코드가 타겟 플랫폼에서 효율적으로 동작하는 최종 C 코드로 변환 하는 단계(5)를 통하여 프로세서별로 최종 소프트웨어가 생성된다.
도 2는 공통중간코드의 구조와 환경명세파일의 구조를 도시한다.
CIC 내부에서 태스크의 명세는 도 2의 (나)와 같이 크게 세 개의 함수로 구성되는데, 태스크 내부 알고리즘을 수행하기 전에 초기화를 위해 사용하는 init(), 알고리즘의 수행 내용이 담겨있는 go(), 마무리를 위해 프로그램이 종료되기 전 불리는 wrapup()이 그 세 개의 함수이며, 도1의 (5) 단계에서 CIC가 C코드로 변환되는 과정에서 타겟 플랫폼에 최적화된 운영체제 코드 및 스케쥴링 코드를 생성할 때 이 함수들을 적절히 호출하는 코드를 자동 생성한다. 이 방법을 통해 하나의 알고리즘 명세로부터 다양한 플랫폼에 대해 특성화 된 코드를 자동적으로 얻을 수 있다.
또한 하드웨어 아키텍쳐의 특징, 운영체제 유무, 시스템의 제약 사항, 태스크들의 의존관계등의 정보는 도 2의 (가)와 같이 XML 형태의 별도 환경명세파일로 작성된다. CIC 코드를 타겟 플랫폼에 특화된 C 코드로 변환 될 때 사용하는데, 하드웨어 플랫폼에 대한 정보는 사용된 프로세서 리스트, 프로세서 별 메모리 맵과 운영체제 사용가능 여부를 포함하며(6), 제약 사항에 대한 정보는 메모리 및 전력 소모 제약 사항과 태스크 별 데드라인을 포함하고(7), 태스크 구조에 대한 정보는 태스크의 분할 여부에 대한 정보들을 포함한다(8).
도 3 은 공통중간코드가 사용하는 API를 타겟 프로세서가 사용하는 API로 변환하는 플로우를 도시한다.
공통중간코드가 사용하는 API는 파일을 접근하는 API, 태스크간 통신을 위한 API, 각종 하드웨어 장치를 접근하는 API 등을 포함한 운영체제가 제공해주는 각종 서비스를 공통된 형태의 API 형태로 정의해 놓은 것으로, 일반적으로 각 운영체제마다 다른 형태를 지니고 있으며, 따라서 이 단계에서 먼저 타겟 프로세서에 타겟 운영 체제가 사용 가능한지를 조사하여(10) 가능한 경우엔 운영체제에 맞는 형태의 API로 변환을 하고(11), 운영체제가 없는 경우, 혹은 타겟 운영체제 API로 변환하지 못한 API는 운영체제가 제공해주는 서비스 함수가 아닌 타겟에 특화된 코드를 직접 생성한다(12). 이 방법을 통해서 특정 운영체제를 고려하지 않은 알고리즘 및 프로그램 설계가 가능해지며, 프로그램 재 사용성도 높아지게 된다.
표 1은 CIC를 기술하기 위해 정의한 운영체제가 제공해주는 서비스의 API 분류 및 목록을 보여주는 테이블이다.
분류 API
Scheduling SET_SCHED_PARAM
YIELD_CPU
Memory MALLOC, FREE
Thread THREAD_CREATE, THREAD_JOIN
THREAD_EXIT, THREAD_DETACH
THREAD_KILL
Communication and Synchronization MQ_RECEIVE, MQ_SEND
COND_WAIT, COND_SIGNAL
SEM_WAIT, SEM_POST
MUTEX_LOCK, MUTEX_UNLOCK, MUTEX_TRY_LOCK
SHM_SEND, SHM_RECV
BARRIER_WAIT
I/O access OPEN
READ,WRITE
SEEK, SELECT
CLOSE
Signal & Timer SET_TIMER, GET_TIMER
SIGNAL, SLEEP
Process FORK, EXEC, EXIT
WAITPID, GETPID
Socket SOCK_CREATE, SOCK_BIND
SOCK_LISTEN, SOCK_ACCEPT
SOCK_CONNECT, SOCK_SEND, SOCK_RECV
이상에서 상술한 바와 같이 본 발명은, 응용 프로그램을 아키텍쳐 독립적인 공통중 간코드를 사용하여 명세하도록 하여, 하드웨어 아키텍쳐의 구조와 운영체제가 변경되어도 동일한 명세를 재 사용하도록 함으로써 응용 프로그램을 다시 작성해야 하는 문제를 해결하고, 아키텍쳐와 실시간 제약조건, 태스크간의 의존관계를 별도의 환경명세파일로 명세하고 이를 고려하여 태스크를 스케쥴하도록 프로세서별 프로그램을 자동 생성하도록 하여 병렬 임베디드 소프트웨어를 작성하는 시간을 줄이도록 한다.

Claims (5)

  1. 병렬 임베디드 시스템을 위한 소프트웨어를 설계함에 있어서,
    아키텍쳐에 독립적인 공통중간코드를 사용하여 병렬 프로그램을 명세하는 단계,
    공통중간코드에서 사용된 응용프로그래밍 인터페이스(API)를 실제로 타겟 프로세서에서 사용하는 API로 변환하는 단계,
    공통중간코드에서 데이터병렬성을 표현하기 위하여 사용된 OpenMP 디렉티브를 MPI 라이브러리로 변환하고 태스크 코드를 복수개의 쓰레드 코드로 변환하는 단계,
    각 프로세서에 할당된 태스크 코드들을 통합하여 스케쥴하는 코드를 포함하여 프로세서별 최종 소프트웨어를 자동 생성하는 단계
    를 포함하는 병렬 임베디드 소프트웨어 설계 방법.
  2. 아키텍쳐에 독립적인 공통중간코드를 타겟 아키텍쳐에 최적화된 C 코드로 변환하기 위해 필요한 아키텍쳐, 실시간 제약조건, 메모리 크기, 태스크간의 의존관계 등의 정보를 태스크 프로그램과는 별도의 환경명세파일로 명세하고 이를 이용하여 태스크 의 스케쥴을 결정하도록 하는 코드 변환 방법 및 환경명세파일의 형태.
  3. 병렬 프로그램을 작성함에 있어서 공통중간코드에서,
    함수 수준의 병렬성을 표현하기 위해 분할된 태스크들을 별도의 독립된 코드 파일로 명세하고,
    함수 내에서 사용하는 데이터의 병렬성은 코드 내에 OpenMP 디렉티브를 사용하여 명세하도록 하여,
    함수 수준의 병렬성과 데이터 병렬성을 구별하여 명세하도록 한 명세 방법.
  4. 아키텍쳐의 구성과 운영체제의 종류에 무관하게 병렬 알고리즘을 명세하기 위하여,
    운영체제에 독립적인 코드 작성을 위해 운영체제가 제공하는 서비스를 추상화하여 응용프로그래밍 인터페이스(API)를 사용하여 코드를 작성하며,
    태스크의 스케쥴을 변경하여 코드를 생성할 수 있도록 하기 위해서 각 태스크 프로그램을 init(), go(), wrapup()의 세 가지 함수 형태로 정의하도록 한,
    공통중간코드에서의 태스크 명세 형태
  5. 운영체제에 독립적인 코드 작성을 위해 운영체제가 제공하는 서비스를 추상화하여정의한 응용프로그램 인터페이스(API) 목록
KR1020070003821A 2007-01-12 2007-01-12 공통중간코드를 이용한 병렬 임베디드 소프트웨어의 설계방법 KR20080066402A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020070003821A KR20080066402A (ko) 2007-01-12 2007-01-12 공통중간코드를 이용한 병렬 임베디드 소프트웨어의 설계방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020070003821A KR20080066402A (ko) 2007-01-12 2007-01-12 공통중간코드를 이용한 병렬 임베디드 소프트웨어의 설계방법

Publications (1)

Publication Number Publication Date
KR20080066402A true KR20080066402A (ko) 2008-07-16

Family

ID=39821281

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070003821A KR20080066402A (ko) 2007-01-12 2007-01-12 공통중간코드를 이용한 병렬 임베디드 소프트웨어의 설계방법

Country Status (1)

Country Link
KR (1) KR20080066402A (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102707955A (zh) * 2012-05-18 2012-10-03 天津大学 采用MPI和OpenMP编程实现支持向量机方法
US8549491B2 (en) 2008-12-05 2013-10-01 Electronics And Telecommunications Research Institute Apparatus and method for application testing of embedded system
US10031734B2 (en) 2014-04-11 2018-07-24 Samsung Electronics Co., Ltd Device and method for generating application package
KR20220086838A (ko) * 2020-12-17 2022-06-24 현대오토에버 주식회사 차량 소프트웨어 개발 시스템 및 방법

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8549491B2 (en) 2008-12-05 2013-10-01 Electronics And Telecommunications Research Institute Apparatus and method for application testing of embedded system
CN102707955A (zh) * 2012-05-18 2012-10-03 天津大学 采用MPI和OpenMP编程实现支持向量机方法
US10031734B2 (en) 2014-04-11 2018-07-24 Samsung Electronics Co., Ltd Device and method for generating application package
EP2930616B1 (en) * 2014-04-11 2021-06-09 Samsung Electronics Co., Ltd. Device and method for generating application package
KR20220086838A (ko) * 2020-12-17 2022-06-24 현대오토에버 주식회사 차량 소프트웨어 개발 시스템 및 방법

Similar Documents

Publication Publication Date Title
JP6018022B2 (ja) 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置
EP2950211B1 (en) Parallelism extraction method and method for making program
US8051412B2 (en) Global compiler for controlling heterogeneous multiprocessor
Pinho et al. P-SOCRATES: A parallel software framework for time-critical many-core systems
US8429394B1 (en) Reconfigurable computing system that shares processing between a host processor and one or more reconfigurable hardware modules
Zhou et al. Bamboo: a data-centric, object-oriented approach to many-core software
Pienaar et al. Automatic generation of software pipelines for heterogeneous parallel systems
Ventroux et al. SESAM/Par4All: a tool for joint exploration of MPSoC architectures and dynamic dataflow code generation
KR20080066402A (ko) 공통중간코드를 이용한 병렬 임베디드 소프트웨어의 설계방법
Jeong et al. Dataflow model–based software synthesis framework for parallel and distributed embedded systems
Matheou et al. FREDDO: an efficient framework for runtime execution of data-driven objects
JP6488739B2 (ja) 並列化コンパイル方法、及び、並列化コンパイラ
JP2016192152A (ja) 並列化コンパイル方法、並列化コンパイラ、及び車載装置
JP6488738B2 (ja) 並列化コンパイル方法、及び、並列化コンパイラ
Cartwright et al. Automating the design of mlut mpsopc fpgas in the cloud
Ravi et al. Semi-automatic restructuring of offloadable tasks for many-core accelerators
Lordan Gomis Programming models for mobile environments
Jääskeläinen et al. TCEMC: A co-design flow for application-specific multicores
Utture et al. Efficient lock‐step synchronization in task‐parallel languages
Marinkovic et al. An Automatic Instruction-Level Parallelization of Machine Code.
Schor et al. Reliable and Efficient Execution of Multiple Streaming Applications on Intel’s SCC Processor
Ramon-Cortes et al. AutoParallel: A Python module for automatic parallelization and distributed execution of affine loop nests
Kwon et al. Serialized parallel code generation framework for MPSoC
Schuele A coordination language for programming embedded multi-core systems
Gomis Programming models for mobile environments

Legal Events

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