KR101085330B1 - 컴파일 방법 및 컴파일러 - Google Patents

컴파일 방법 및 컴파일러 Download PDF

Info

Publication number
KR101085330B1
KR101085330B1 KR1020097011902A KR20097011902A KR101085330B1 KR 101085330 B1 KR101085330 B1 KR 101085330B1 KR 1020097011902 A KR1020097011902 A KR 1020097011902A KR 20097011902 A KR20097011902 A KR 20097011902A KR 101085330 B1 KR101085330 B1 KR 101085330B1
Authority
KR
South Korea
Prior art keywords
processing block
processing
scheduler
statement
intermediate language
Prior art date
Application number
KR1020097011902A
Other languages
English (en)
Other versions
KR20090089382A (ko
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 후지쯔 가부시끼가이샤
Publication of KR20090089382A publication Critical patent/KR20090089382A/ko
Application granted granted Critical
Publication of KR101085330B1 publication Critical patent/KR101085330B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/458Synchronisation, e.g. post-wait, barriers, locks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • 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)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

컴퓨터에 의해, 미리 결정된 타이밍에 도중 결과를 출력하고 시계열적으로 처리되는 소프트웨어의 컴파일을 행하는 컴파일 방법은, 소프트웨어의 소스 코드에 포함되는 처리 시퀀스로부터 병렬성 및 조건 분기에 관한 처리 블록을 추출하는 추출 단계와, 추출된 처리 블록의 리스트럭쳐링을 행하여 실행 코드를 자동적으로 생성하는 생성 단계를 포함한다.

Description

컴파일 방법 및 컴파일러{COMPILE METHOD AND COMPILER}
본 발명은, 컴파일 방법 및 컴파일러에 관한 것으로, 특히 내장 기기 상에 있어서의 소프트웨어의 실행 코드를 자동적으로 생성하는 컴파일 방법 및 컴파일러에 관한 것이다.
도 1은 내장 기기 상에 있어서의 소프트웨어의 실행 코드를 생성하는 종래의 컴파일러의 구성을 도시하는 도면이다. 도 1에 도시하는 컴파일러는, 내장 기기의 소프트웨어를 단일 애플리케이션으로서 효율적으로 실행하기 위해, 실행 코드의 최적화를 행한다. 도 1에 도시하는 컴파일러는, 번역 장치(프론트 엔드)(2), 최적화 장치(미들 패스)(4) 및 코드 생성 장치(백 엔드)(5)를 갖는다. 프론트 엔드(2)는 소스 코드(1)로부터 중간 언어(3-1)를 생성하고, 미들 패스(4)는 중간 언어(3-1)로부터 중간 언어(3-2)를 생성한다. 백 엔드(5)는, 중간 언어(3-2)로부터 최적화된 실행 코드(6)를 생성한다. 컴파일에 의한 번역 작업의 과정에서, 미들 패스(4)에 있어서 불필요한 변수의 삭제나 명령의 패킹, 호출 함수의 인라인 전개 등의 단순한 재구축(리스트럭쳐링)을 행한다.
이러한 실행 코드의 최적화를 위한 리스트럭쳐링에서는, 명령 코드의 삭제나 단순 치환을 행하여, 소스 코드(1)에 기술된 처리 시퀀스의 구조 그 자체를 변경하 는 것과 같은 리스트럭쳐링은 행하지 않는다.
동화상 처리나 통신 처리 등의 처리의 실행을 개시한 후에는, CPU의 처리 능력에 관계없이 미리 결정된 시각에 있어서 주기적으로 도중의 연산 결과를 출력하는 것과 같은 시계열 처리의 소프트웨어가 있다. 이러한 시계열적(시퀀셜)으로 기술된 소프트웨어를 도 1에 도시하는 컴파일러로 컴파일하여 실행 코드를 생성한 경우, 처리의 개시로부터 종료까지의 전체 연산량이 CPU의 처리 능력에 적당한 경우에 있어서도, 도 2에 도시하는 예와 같이 처리(P3, P4)가 개시되는 순서에 따라서는, 처리가 시간에 맞지 않고 지연을 발생시키는 경우가 있다. 도 2는 시계열 처리(시퀀셜 처리)의 지연을 설명하는 도면이다. 도 2에 있어서, P1∼P4는 처리를 나타내고, t1은 개시 조건 판단 시각, t2는 처리 P3의 실제의 종료 시각, t3은 처리 P4의 기대 종료 시각, t4는 처리 P4의 실제의 종료 시각, t5는 처리 P3의 기대 종료 시각을 나타낸다. 이 경우, 처리 P4의 실제의 종료 시각(t4)은, 처리 P4의 기대 종료 시각(t3)보다 느려, 지연(D1)이 생기고 있다.
일반적으로는, 상기한 바와 같이 평균적인 CPU의 처리 능력이 충분하더라도, 국소적인 처리의 관점에서는 CPU의 처리 능력이 불충분한 상태가 발생할 수 있다고 상정되는 경우, 소프트웨어는 도 3에서 도시하는 바와 같이 설계 단계에서 버퍼(8)를 정의함으로써 처리 지연의 문제를 회피한다. 도 3은 시계열 처리의 지연의 회피를 설명하는 도면이다. 도 3 중, 도 2와 동일 부분에는 동일 부호를 붙이고, 그 설명은 생략한다. 도 3에 있어서, P3y, P4y는 각각 y번째로 실행되는 처리 P3, P4, P4z는 z번째로 실행되는 처리 P4, t2y는 처리 P3y의 실제의 종료 시각, t3y는 처리 P4y의 기대 종료 시각, t5y는 처리 P3y의 기대 종료 시각이다.
도 4는 종래의 동적 스케쥴러의 이미지를 도시하는 도면이다. 도 4 중, 11은 태스크 또는 스레드, 12는 태스크 또는 스레드(11)로부터 보고되는 실행 정보 테이블, 13은 정보 테이블에 기초하여 스케쥴링을 행하는 동적 스케쥴러, 14는 오퍼레이팅 시스템(OS)(16) 내의 컨텍스트 스위치·프로세스 관리 기능, 15는 동적 스케쥴러(13)의 지시에 의한 스위치를 나타낸다. 종래의 내장 기기로 효율적으로 복수의 태스크 또는 스레드(11)를 병렬(동시)로 실행하는 경우, 도 4에 도시하는 동적 스케쥴러(13)에서는, 애플리케이션에 동적인 프로파일링 기능을 갖게 하여, 메모리나 CPU 사용량을 수시 OS(16)에 보고한다. 동적 스케쥴러(13)는, 항상 수집된 정보의 정보 테이블(12)을 참조하여 동적으로 태스크 또는 스레드(11)의 우선도를 정의하고, OS(16)의 컨텍스트 스위치·프로세스 관리 기능(14)에 의해 태스크 또는 스레드(11)의 스위치(15)를 행한다.
이와 같이 복수의 태스크 또는 스레드(11)를 효율적으로 실행하기 위한 동적 스케쥴러(13)는, OS(16)와 연동한 애플리케이션과는 별도의 동작을 하는 소프트웨어, 즉, 외부(또는, 외부 부착의) 스케쥴러이다. 이 때문에, 대상으로 하는 소프트웨어가 필요로 하는 CPU의 연산량의 관점에서는, 이러한 동적 스케쥴러(13)는 순수한 오버헤드로 간주된다.
그래서, 정보 테이블(12)을 참조하여 우선도를 정의하는 동적 스케쥴러(13)에 의한 오버헤드를 발생시키지 않기 때문에, 일반적으로는 라운드 로빈, 혹은, 미리 고정적으로 설정된 우선도에 따라 능동적으로 동작하지 않는 오버헤드가 작은 스케쥴러를 이용하는 수법이 있지만, 모든 소프트웨어를 효율적으로 실행할 수는 없다.
처리 시간을 최단으로 하는 실행 코드를 생성하고, 또한, 동적 스케쥴러(13)에 의한 오버헤드를 회피하기 위해서는, 실행 코드 중에 실행 개시를 정의하는 정적 스케쥴러 기구를 매립하는 수법이 이용되는 경우가 있다.
정적 스케쥴러는, 메모리나 CPU의 사용량을 동적으로 보고하지 않는 대체 수단으로서, 컴파일 시에 분기 명령에 착안하여, 분기 명령으로부터 점프하는 종속 처리의 메모리나 CPU의 사용량에 대해, 분기 예측의 계수를 곱한 예상의 정보 테이블에 기초하여 컴파일 시에 스케쥴링을 결정한다.
정적 스케쥴러는, 동적으로 최적의 처리를 행하는 동적 스케쥴러에 대해, 실행시의 스케쥴링에 대한 오버헤드는 작지만, 특히 실행마다 연산량이나 취급하는 데이터량이 변화되는 것과 같은 구조의 소프트웨어에서는, 스케쥴링 정밀도가 떨어지고, 처리 시간을 최단으로 행할 수 있다고 할 수는 없다. 이 때문에, 정적 스케쥴러는, 일반적으로는 CPU 상에서 처리를 행하고 싶은 연산량을 미리 알고 있는 소프트웨어에 이용된다.
종래의 컴파일러는, 코드 레벨의 최적화나 시계열적으로 기술된 소스 코드의 컴파일 시에 데이터 의존이나 제어 의존의 해석을 행하여, 병렬 실행 가능한 처리를 분할하고, 병렬로 배치된 CPU에 대한 실행 코드를 생성한다. 이와 같이 하여, 시계열적으로 기술된 소스 코드로부터 보다 많은 병렬성을 추출하여, 실행 개시로부터 종료까지의 처리 시간을 최단으로 행할 수 있는 실행 코드를 생성한다.
동적 스케쥴러는, 예컨대 특허 문헌 1이나 특허 문헌 2에 제안되어 있다. 또한, 다중 레벨 스케쥴러는, 예컨대 특허 문헌 2에 제안되어 있다.
[특허 문헌 1] 일본 특허 공개 평성 6-110688호 공보
[특허 문헌 2] 일본 특허 공개 제2003-84989호 공보
[특허 문헌 3] 일본 특허 공개 평성 8-212070호 공보
(발명의 개시)
(발명이 해결하고자 하는 과제)
내장 기기의 소프트웨어 실행 환경은, 고도화하는 OS나 컴파일 환경에 의해 변화하고 있고, 퍼스널 컴퓨터(PC)나 워크 스테이션 등에서 동작하고 있었던 범용의 소프트웨어가 내장 기기에 의해 동작하도록 되어 오고 있다. 한편, 내장 기기에서는, CPU나 메모리 등의 한정된 리소스를 이용하여, 대상으로 하는 소프트웨어를 효율적으로 실행하는 것이 요구되고 있다.
종래의 내장 기기에서는, 리스트럭쳐링을 수반하지 않는 코드 최적화 레벨의 컴파일러가 기동되거나, 혹은, 복수의 태스크 또는 스레드가 기동하는 것과 같은 소프트웨어 구성인 경우에는 스케쥴러가 기동된다.
한편, 소프트웨어를 보다 효율적으로 동작시키기 위해서는, 소프트웨어의 실장자에 의해 대상이 되는 내장 기기에 알맞은 이식 작업을 수동으로 행할 필요가 있었다.
이와 같이, 내장 기기가 한정된 소프트웨어 실행 환경에서는, 소프트웨어, 특히 시계열적으로 기술된 소스 코드로, 또한, 미리 결정된 시각에 주기적으로 도중의 연산 결과를 출력하는 것과 같은 시계열 처리를 행하는 애플리케이션을 실행할 때에, 낮은 오버헤드, 높은 스케쥴링 정밀도, CPU나 메모리 등의 리소스의 효율적인 이용을 가능하게 하는 실행 코드를 컴파일러에 의해 자동적으로 생성하는 것이 요구되고 있다.
그래서, 본 발명은, 한정된 소프트웨어 실행 환경에서도 소프트웨어의 실행 코드를 효율적으로 생성하는 것이 가능한 컴파일 방법 및 컴파일러를 실현하는 것을 목적으로 한다.
(과제를 해결하기 위한 수단)
상기의 과제는, 컴퓨터에 의해, 미리 결정된 타이밍에 도중 결과를 출력하고 시계열적으로 처리되는 소프트웨어의 컴파일을 행하는 컴파일 방법으로서, 상기 컴퓨터에 의해, 상기 소프트웨어의 소스 코드에 포함되는 처리 시퀀스로부터 병렬성 및 조건 분기에 관한 처리 블록을 추출하는 추출 단계와, 상기 컴퓨터에 의해, 추출된 처리 블록의 리스트럭쳐링을 행하여 실행 코드를 자동적으로 생성하는 생성 단계를 포함하는 것을 특징으로 하는 컴파일 방법에 의해 달성할 수 있다.
상기 과제는, 컴퓨터에 의해, 미리 결정된 타이밍에 도중 결과를 출력하고 시계열적으로 처리되는 소프트웨어의 컴파일을 행하는 컴파일러로서, 상기 컴퓨터에 의해, 상기 소프트웨어의 소스 코드를 제1 중간 언어로 번역하여 기억부에 보존하는 프론트 엔드와, 상기 컴퓨터에 의해, 상기 기억부에 보존된 상기 제1 중간 언어에 기초하여 상기 소스 코드에 포함되는 처리 시퀀스로부터 병렬성 및 조건 분기에 관한 처리 블록을 추출하고, 추출된 처리 블록의 리스트럭쳐링을 행하여 제2 중간 언어를 생성하여 기억부에 보존하는 미들 패스와, 상기 컴퓨터에 의해, 상기 기억부에 보존된 상기 제2 중간 언어에 기초하여 실행 코드를 자동적으로 생성하는 백 엔드를 구비한 것을 특징으로 하는 컴파일러에 의해 달성할 수 있다.
[발명의 효과]
본 발명에 따르면, 한정된 소프트웨어 실행 환경에서도 소프트웨어의 실행 코드를 효율적으로 생성하는 것이 가능한 컴파일 방법 및 컴파일러를 실현할 수 있다.
도 1은 종래의 컴파일러의 구성을 도시하는 도면이다.
도 2는 시계열 처리의 지연을 설명하는 도면이다.
도 3은 시계열 처리의 지연의 회피를 설명하는 도면이다.
도 4는 종래의 동적 스케쥴러의 이미지를 도시하는 도면이다.
도 5는 본 발명의 컴파일러의 일 실시예의 구성을 도시하는 도면이다.
도 6은 소프트웨어를 구성하는 소스 코드의 분류를 설명하는 도면이다.
도 7은 스테이트먼트의 의존 관계를 표현한 의존 그래프의 일례를 도시하는 도면이다.
도 8은 도 7의 의존 그래프를 바탕으로 처리 순서를 교체한 예를 도시하는 도면이다.
도 9는 소프트웨어의 흐름 구성예를 도시하는 도면이다.
도 10은 실시예의 제1 단계의 처리를 도시하는 흐름도이다.
도 11은 무조건 점프 및 루프 처리의 블록의 연산 대입 처리 블록으로서의 재정의를 설명하는 도면이다.
도 12는 연산 대입 처리 블록끼리의 재정의를 설명하는 도면이다.
도 13은 스레드화 처리 블록 및 스케쥴러화 처리 블록의 재정의를 설명하는 도면이다.
도 14는 스레드화 처리 블록 및 스케쥴러화 처리 블록을 설명하는 도면이다.
도 15는 실시예의 제2 단계의 처리를 도시하는 흐름도이다.
도 16은 스레드화 처리 블록에의 스테이트먼트의 추가 방법을 설명하는 도면이다.
도 17은 스케쥴러화 처리 블록에의 스테이트먼트의 추가 방법을 설명하는 도면이다.
도 18은 최외곽 스케쥴러화 처리 블록의 타이머 처리를 설명하는 도면이다.
도 19는 실시예의 제3 단계의 처리를 설명하는 흐름도이다.
도 20은 실시예의 동작 시의 타이밍 차트의 이미지를 도시하는 도면이다.
도 21은 도 2의 종래 수법과 실시예의 타이밍 차트의 이미지를 비교하는 도면이다.
도 22는 실시예의 스케쥴러화 처리 블록의 이미지를 도시하는 도면이다.
도 23은 실제의 프로그램에 대해 컴파일을 행한 경우의 리소스의 이용 효율의 측정 결과를 종래 수법과 실시예에 대해 도시하는 도면이다.
<도면의 주요 부분에 대한 부호의 설명>
31: 소스 코드 32: 프론트 엔드
33-1, 33-2: 중간 언어 34: 미들 패스
35: 백 엔드 36: 실행 코드
81: 태스크 또는 스레드 83: 동적 스케쥴러
84: 컨텍스트 스위치·프로세스 관리 기능
86: OS 88: 타이머 기능
(발명을 실시하기 위한 최선의 형태)
본 발명의 컴파일 방법 및 컴파일러에서는, 내장 기기 상에서 동작하는 소프트웨어 중, 시계열적으로 기술된 소프트웨어의 소스 코드를, 컴파일 시에 있어서의 중간 언어의 프리프로세싱에 의해 태스크 또는 스레드화하고, 스케쥴링 코드를 생성하는 리스트럭쳐링을 행함으로써, 작은 오버헤드의 실현과 CPU 등의 리소스의 이용 효율의 향상을 가능하게 할 수 있는 실행 코드를 생성한다.
즉, 내장 기기 상에서 동작하는 애플리케이션 중, 동화상 처리나 통신 처리등의 시계열 처리를 행하는 것과 같은 루프 구성의 애플리케이션에 있어서, 컴파일의 초기 단계에서 구조 해석이 끝난 중간 언어(중간 코드) 상에 스테이트먼트 레벨로 분류된 처리 블록으로부터, 조건 분기의 처리 블록으로 구성되는 스케쥴러의 구축, 타이머 핸들러화 및 조건 분기 후에 실행되는 연산 대입 처리의 처리 블록의 추출, 스레드화를 행하고, 웨이트에 의한 CPU의 해방(릴리스), 시그널에 응답하는 웨이크업(Wake-Up) 기구를 삽입하는 것과 같은 재구축(리스트럭쳐링)을 행함으로써 실행 시에 필요한 타이밍에 필요한 연산 처리를 행하고, 불필요할 때에는 CPU를 해방하는 것과 같은 구조에 의해 CPU를 포함하는 리소스의 이용 효율을 향상시킨다.
이와 같이, 본 발명에서는, 실행 대상의 소프트웨어의 바탕이 되는 소스 코드를 컴파일 과정의 중간 언어 레벨로 해석, 분류하여, 추출된 처리 블록으로부터 병렬(동시)로 처리 가능한 처리 블록 및 스케쥴링에 관한 처리 블록으로서 재정의하고, 필요 최저한의 스테이트먼트를 삽입한다. 이에 따라, 불필요한 외부 스테이트먼트(코드)를 삭제하고, 대상으로 하는 소프트웨어의 전용 스케쥴러를 리스트럭쳐링에 의해 실현할 수 있다.
[실시예]
도 5는 본 발명의 컴파일러의 일 실시예의 구성을 도시하는 도면이다. 컴파일러의 본 실시예는, 본 발명의 컴파일 방법의 일 실시예를 채용한다. 본 실시예에서는, 본 발명이 내장 기기 상에 있어서의 소프트웨어의 실행 코드를 생성하는 경우에 적용되어 있다. 내장 기기는, CPU 등의 프로세서와 메모리 등의 기억부를 구비하고, 프로세서가 기억부에 저장된 프로그램을 실행하는 주지의 하드웨어 구성을 갖는 컴퓨터(또는 컴퓨터 시스템)이다.
도 5에 도시하는 컴파일러는, 내장 기기의 소프트웨어를 단일의 애플리케이션으로서 효율적으로 실행하기 위해, 실행 코드의 최적화를 행한다. 도 5에 도시하는 컴파일러는, 번역 장치(프론트 엔드)(32), 최적화 장치(미들 패스)(34) 및 코드 생성 장치(백 엔드)(35)를 갖는다. 프론트 엔드(32)는 소스 코드(31)로부터 중간 언어(33-1)를 생성하여 기억부에 보존하고, 미들 패스(34)는 기억부에 보존된 중간 언어(33-1)로부터 중간 언어(33-2)를 생성하여 기억부에 보존한다. 백 엔드(35)는, 기억부에 보존된 중간 언어(33-2)로부터 최적화된 실행 코드(36)를 생성하고, 필요에 따라 기억부에 보존한다. 컴파일에 의한 번역 작업의 과정에서, 미들 패스(34)에 있어서 불필요한 변수의 삭제나 명령의 패킹, 호출 함수의 인라인 전개 등의 단순한 리스트럭쳐링을 행한다. 프론트 엔드(32)나 백 엔드(35)는 단순한 번역 장치이고, 능동적으로 실행 코드의 최적화를 행하는 경우는 없다. 실행 코드의 최적화를 행하지 않는 경우에는, 프론트 엔드(32)가 생성한 중간 언어(33-1)를 직접 백 엔드(35)가 해독하여, 실행 코드를 생성하기 때문에, 미들 패스(34)는 사용되지 않는다.
일반적으로, 컴파일 처리는, 소스 코드로 나타낸 처리 시퀀스를 대상으로 하는 CPU 등의 연산 장치(프로세서)가 해독할 수 있는 실행 코드로 변환한다. 또한, 미들 패스에서는, 전파하지 않는 변수 및 수식문의 삭제나 서브루틴의 인라인 전개, 혹은, 루프를 이터레이션(iteration) 단위로 전개하는 언롤링 처리 등의 범용적인 최적화 수법에 의해, 보다 효율적인 실행 코드를 생성한다.
이에 비해, 본 실시예는, 미들 패스(34)에 내장되는 효율적인 실행 코드의 생성 수법에 특징이 있다. 도 5에 도시하는 미들 패스(34)는, 중간 언어(33-1)를 입력으로 하고, 이하에 나타내는 단계에 따라 리스트럭쳐링을 행하여, 중간 언어(33-2)를 생성한다. 중간 언어(33-1)의 레벨로 리스트럭쳐링을 행한다. 이 때문에, 프론트 엔드(32) 및 백 엔드(35)에 대해서는 종래와 동일한 것을 변경하지 않 고 사용 가능하고, 미들 패스(34)는 기존의 컴파일러에 범용적으로 내장하는 것이 가능하다.
도 6은 소프트웨어를 구성하는 소스 코드(31)의 분류를 설명하는 도면이다. 도 6은 소프트웨어를 구성하는 소스 코드(31)를 스테이트먼트 레벨로 분류한 경우를 나타내고, 모든 소스 코드(31)는 중간 언어(33-1)로 번역된 후, 이하 중 어느 하나의 처리 구분(ps1∼ps4)으로 분류할 수 있다. 처리 구분(ps1)은, 연산 및 메모리나 레지스터 등의 기억부에 연산 결과의 대입을 행하는 연산 대입 처리인 것을 나타낸다. 처리 구분(ps2)은, 백엣지를 포함하는 점프 명령으로 나타내는 루프 처리, 즉, 백엣지 점프인 것을 나타낸다. 처리 구분(ps3)은, 조건 분기 혹은 조건부 점프 명령으로 표시되는 분기 처리인 것을 나타낸다. 처리 구분(ps4)은 서브루틴이나 함수콜 등을 나타내고, 무조건 점프 명령인 것을 나타낸다.
본 실시예에서는, 임의의 구성의 중간 언어(33-1)에 착안하여 리스트럭쳐링을 행하기 때문에, 범용적인 최적화 처리가 어디에서 행해져도 상관없지만, 루프 구조를 그대로 사용하기 때문에, 리스트럭쳐링을 행하기 전에 언롤링 수법 등의 루프 최적화 수법은 적용하지 않는 것으로 한다.
컴파일러는, 중간 언어(33-2)를 생성할 때에 반드시 변수 테이블을 내부에 가지고, 중간 언어(33-2)의 각 스테이트먼트는 오름순으로 채번(採番)되어 있고, 참조하는 변수(식의 우변)와, 정의하는 변수(식의 좌변)을 갖는다. x번째의 스테이트먼트를 Sx로 나타낸 경우, Sx의 참조 변수의 집합체를 (식 1), Sx의 정의 변수의 집합을 (식 2)로 나타낸다.
Use(Sx) (식 1)
Def(Sx) (식 2)
(식 1) 및 (식 2)는, 집합화된 스테이트먼트 그룹(SG)에도 적용되고, y번째의 스테이트먼트 그룹(SGy)에 대해 동일하게 (식 3) 및 (식 4)를 정의한다.
Use(SGx) (식 3)
Def(SGx) (식 4)
또한, 정의 및 참조되는 변수가 존재하지 않는 경우의 표현으로서, 공집합φ을 이용한다.
스테이트먼트(Sx)가 조건 분기문인 경우, 조건을 판정하기 위한 참조 변수만이 존재하기 때문에, (식 5)가 성립한다.
Def(Sx)=φ, Use(Sx)≠ φ (식 5)
스테이트먼트(Sx)가 서브루틴 콜(subroutine call)에 기인하는 무조건 점프문인 경우, (식 6)이 성립한다.
Def(Sx)=Use(Sy)= φ (식 6)
스테이트먼트 간의 의존 관계는, 상호 정의 및 참조하는 변수 집합에 대해 동일한 요소가 포함되는지의 여부로 정의된다. m번째 및 n번째의 스테이트먼트에 관해, (식 1) 및 (식 2)로부터 유도되는 변수의 집합체에 있어서, m<n의 관계로 (식 7)이 성립하는 경우, 정방향 의존이 존재한다.
Def(Sm)∩Use(Sn)≠ φ (식 7)
여기서, Sm과 Sn이 정방향 의존(δ)인 것을 표현하는 식으로서 (식 8)을 정 의한다.
SmδSn (식 8)
m>n의 관계에서 (식 7)이 성립하는 경우, 역방향 의존이 존재한다. Sm과 Sn이 역방향 의존(δi)인 것을 표현하는 식으로서, (식 9)를 정의한다.
SmδiSn (식 9)
또한, (식 10)이 성립하는 경우, 출력 의존이 존재한다.
Def(Sm)= Def(Sn) (식 1O)
Sm과 Sn이 출력 의존(δo)인 것을 표현하는 식으로서, (식 11)을 정의한다.
SmδoSn (식 11)
(식 11)이 성립하는 Sm, Sn에 대해, m<k<n의 관계를 만족하는 임의의 k에 대해 (식 12)가 성립하는 경우, Sm으로 정의되는 변수는 어디에도 참조되지 않고, Sn 에 있어서 덮어쓰기 되기 때문에, Sm을 삭제하는 것이 가능하다.
(Def(Sm)= Def(Sn))∩Use(Sk)= φ (식 12)
(식 8), (식 9) 및 (식 11)을 일반적으로는 의존 방정식이라고 부르고, 모든 스테이트먼트에 대해 (식 1) 및 (식 2)를 유도함으로써, 각 스테이트먼트의 의존 관계를 표현한 의존 그래프를 작성할 수 있다.
도 7은 스테이트먼트의 의존 관계를 표현한 의존 그래프의 일례를 나타내는 도면이다. 도 7 중, Sa∼Sf는 스테이트먼트를 나타낸다. 도 7에 나타내는 예에서는, 스테이트먼트(Sa)의 정의 결과를 스테이트먼트(Sd)가 참조하고, 스테이트먼트(Sd)가 참조하고 있는 변수를 스테이트먼트(Sf)에서 정의하는 것을 나타내고 있 다. 또한, 스테이트먼트(Sb)의 정의 변수는 어디에도 사용되지 않고, 스테이트먼트(Sf)에서 재정의되기 때문에 (식 12)가 성립한다고 간주되고, 스테이트먼트(Sb)는 코드 중에서 삭제되게 된다.
원칙으로서 (식 8), (식 9) 및 (식 11)의 관계에 있는 스테이트먼트는, 하등 의존 관계에 있는 스테이트먼트이고, 처리 순서를 교체하는 것은 할 수 없다. 다시 말해, (식 8), (식 9) 및 (식 11) 중 어느 쪽의 관계도 성립하지 않는 스테이트먼트끼리는, 처리 순서의 교체를 행할 수 있다.
상기의 관점에서, 도 7에 있어서, (식 13)에 나타내는 바와 같이 스테이트먼트(Sa)와 스테이트먼트(Sd)로 구성되는 그룹을 SGx, 스테이트먼트(Sc)와 스테이트먼트(Se)로 구성되는 그룹을 SGy로 한 경우, 이들은 (식 14)로부터 의존 관계가 없기 때문에, 상호 처리 순서를 교체하는 것이 가능하다. (식 14)에 있어서, 「¬δ」은 의존 관계가 없는 것을 나타낸다. 또한, 전술한 바와 같이 스테이트먼트(Sb)는 삭제 가능하기 때문에, 도 7에서 나타내는 의존 그래프는 도 8에 도시하는 그래프와 등가가 된다. 도 8은 도 7의 의존 그래프를 바탕으로 스테이트먼트의 처리 순서를 교체한, 즉, 소트된 예를 나타내는 도면이다.
SGx=(Sa, Sd), SGy=(Sc, Se) (식 13)
즉,
Def(SGx)= Def(Sa)∪Def(Sd), Use(SGx)= Use(Sa)∪Use(Sd)
Def(SGy)= Def(Sc)∪Def(Se), Use(SGy)= Use(Sc)∪Use(Se)
또한,
(Def(Sa) 혹은 Def(Sd)∩(Use(Se) 혹은 Use(Se))= φ
(Use(Sa) 혹은 Use(Sd)∩(Def(Se) 혹은 Def(Se))= φ
(Def(Sa) 혹은 Def(Sd)∩(Def(Se) 혹은 Def(Se))= φ
가 성립하기 때문에, (식 14)를 얻을 수 있다.
SGx¬δ SGy (식 14)
도 9는 소프트웨어의 흐름 구성예를 도시하는 도면이다. 도 9중, ps1∼ps4은 각각 도 6에 도시하는 처리 구분(ps1∼ps4)의 처리에 대응하는 처리 블록을 나타낸다. 중간 언어로 전개된 스테이트먼트의 열은, 도 9에서 도시하는 바와 같이, 복수 대입 처리의 처리 블록(ps1)의 사이에 조건 분기의 처리 블록(ps3) 혹은 무조건 점프의 처리 블록(ps4)이 끼워진 형태를 취한다. 조건 분기의 처리 블록(ps3) 및 무조건 점프의 처리 블록(ps4)은, 데이터 의존이 아니라 제어 구조를 나타내는 것으로, 처리 흐름이 일단 도중에서 끊긴다고 간주되기 때문에, 도 5에 도시하는 미들 패스(34)의 처리 단위를, 조건 분기의 처리 블록(ps3) 및 무조건 점프의 처리 블록(ps4)의 스테이트먼트로 구획된 연산 대입 처리의 처리 블록(ps1), 즉, 대입 스테이트먼트의 집합이라고 생각한다.
본 실시예에서는, 제1 단계의 처리로서, 도 9에 도시하는 연산 대입 처리의 처리 블록(ps1)에 대해, 상기 스테이트먼트 간의 의존 방정식에 기초하는 배열 교환을 행하는 것으로 한다. 도 10은 본 실시예의 제1 단계를 나타내는 흐름도이다. 도 10에 있어서, 입력은 중간 언어(33-1)이고, 출력도 중간 언어(33-1)이다.
도 10에 도시하는 제1 단계는, 모든 제어 스테이트먼트로 구획된 연산 대입 스테이트먼트의 그룹에 대해 행해진다. 우선, 단계 St1에서 정의 및 참조되는 변수의 추출이 행해지고, 단계 St2에서 의존 그래프의 정의가 행해진다. 또한, 단계 St3에서 불필요한 스테이트먼트의 삭제가 행해지고, 단계 St4에서 의존 그래프에 기초하는 스테이트먼트의 소트가 행해진다.
제1 단계의 의존 해석에 있어서, 종래는 컴파일 단계에서 포인터 변수 등의 의존 관계를 명확하게 추출할 수 없는 경우가 있었다. 본 실시예의 제1 단계는, 제2 단계 이후의 조작을 보다 간편하게 행하기 위한 전처리이기 때문에, 반드시 모든 의존 관계를 추출할 수 있을 필요는 없다.
본 실시예의 제2 단계에서는, 상기한 중간 언어 레벨로 정리된 스테이트먼트 열에 대해, 후술하는 방식에 따라 스테이트먼트의 그룹의 결합 및 재정의를 행한다. 또한, 제2 단계에서는, 상기 처리 구분으로 분류된 처리 블록을 결합하는 작업을 행하지만, 일반적인 소프트웨어는, 네스트 구조의 루프, 상자 구성의 조건 분기, 서브루틴 부하(配下)의 루프, 조건 분기 등의 계층 구조를 갖는다. 이 때문에, 본 실시예의 제2 단계에서 행하는 조작은, 네스트 또는 상자 구조에 있는 가장 내측의 계층의 처리 블록으로부터 순서대로 행해가는 것으로 한다.
네스트 또는 상자 구조의 가장 내측의 처리 블록은, 반드시 연산 대입 처리의 처리 블록으로 되어 있다. 제1 단계에 있어서, 가장 내측의 처리 블록에 존재한 스테이트먼트가 의존 방정식의 해에 의해 삭제된 경우에는, 해당하는 상자 구조도 삭제된다.
네스트 또는 상자 구조의 가장 내측의 처리 블록의 처리에 있어서는, 호출원 의 처리 블록이 무조건 점프, 즉, 콜되는 서브루틴의 본체인 경우에는, 이것을 전단 처리 구분의 무조건 점프의 처리 블록과 결합하고 재그룹화하여, 연산 대입 처리 블록으로서 재정의한다.
일반적인 코드 최적화에 있어서, 스테이트먼트가 인라인 전개되어 있으면, 이 조작은 제1 단계의 처리에 있어서 통상의 연산 대입 처리 블록의 정리와 함께 처리되지만, 본 실시예에 있어서는, 스테이트먼트가 인라인 전개될 필요는 없고, 단순히 스테이트먼트의 그룹화가 행해지는 것만으로 좋다.
네스트 또는 상자 구조의 가장 내측의 처리 블록의 처리에 있어서는, 호출 원의 처리 블록이 루프 처리(백엣지 점프)의 처리 블록, 즉, 루프 내부에 조건 분기 등의 제어 구조를 수반하지 않는 단순 루프의 본체인 경우에는, 이것을 재그룹화하여, 연산 대입 처리 블록으로서 재정의한다.
도 11은 무조건 점프 및 루프 처리(백엣지 점프)의 처리 블록의 연산 대입 처리 블록으로서의 재정의를 설명하는 도면이다. 도 11에 도시하는 바와 같이, 호출원의 처리 블록이 무조건 점프의 처리 블록인 경우에는, 이것을 전단 처리 구분의 무조건 점프의 처리 블록과 결합하고 재그룹화하여, 연산 대입 처리 블록으로서 재정의한다. 또한, 도 11에 도시하는 바와 같이, 호출원의 처리 블록이 루프 처리(백엣지 점프)의 처리 블록인 경우에는, 이것을 재그룹화하여, 연산 대입 처리 블록으로서 재정의한다.
상기와 같은 연산 대입 처리 블록의 재정의를 행한 결과, 네스트 또는 상자의 동일 계층에 연산 대입 처리 블록이 종렬로 배열되는 경우가 있다. 이 경우, 종 렬로 배열된 연산 대입 처리 블록은 결합되고, 다시 연산 대입 처리 블록으로서 재정의된다.
도 12는 연산 대입 처리 블록끼리의 재정의를 설명하는 도면이다. 도 12에 있어서, 「대입 연산」은 대입 연산 처리 블록을 나타내고, 파선으로 둘러싸인 처리 블록은 결합된 처리 블록을 나타낸다.
다음으로, 호출원의 처리 블록이 조건 분기 처리의 처리 블록인 경우, 즉, 조건 분기의 진위 어느 하나의 종속절에 대응하는 경우, 특히 처리 블록 사이의 결합 처리를 행하지 않고, 이것을 스레드화 처리 블록으로서 재정의한다.
도 13은 스레드화 처리 블록 및 스케쥴러화 처리 블록의 재정의를 설명하는 도면이다. 네스트 또는 상자 구조의 계층적인 해석에 의해, 스레드화 처리 블록의 구성 요소는 반드시 하나의 처리 블록으로는 한정되지 않고, 또한, 스레드화 처리 블록의 구성 요소는 연산 대입 처리 블록만으로는 한정되지 않는다.
또한, 어떤 처리 블록의 후속의 처리 블록이 조건 분기 처리인 경우, 이들 처리 블록을 결합하고, 스케쥴러화 처리 블록으로서 재정의한다.
스레드화 처리 블록과 스케쥴러화 처리 블록에는 밀접한 관계가 있고, 스레드화 처리 블록은 조건 분기로부터의 종속절이기 때문에, 반드시 해당하는 조건 분기를 포함한 스케쥴러화 처리 블록과 연휴(連携)하는 것이 된다.
상기한 처리 블록화를 대상으로 하는 코드에 대해, 네스트나 상자 구조도 고려하여 스레드화 처리 블록 및 스케쥴러화 처리 블록을 재정의한다. 도 14는 스레드화 처리 블록 및 스케쥴러화 처리 블록을 설명하는 도면이다. 도 14에 도시하는 프로그램 중, 41은 도 14에 있어서 계층의 가장 상위에 속하는 스케쥴러화 처리 블록, 42는 스케쥴러화 처리 블록(41)에 종속하는 스레드화 처리 블록, 43은 스케쥴러화 처리 블록(41)의 한단계 아래에 포함되는 스케쥴러화 처리 블록, 44는 스케쥴러화 처리 블록(43)에 종속하는 스레드화 처리 블록, 45는 스레드화 처리 블록(42)의 한단계 아래에 포함되는 스케쥴러화 처리 블록, 46은 스케쥴러화 처리 블록(45)에 종속하는 스레드화 처리 블록을 각각 나타낸다.
도 15는 본 실시예의 제2 단계의 처리를 도시하는 흐름도이다. 도 15에 있어서, 입력은 중간 언어(33-1)이고, 출력도 중간 언어(33-1)이다.
도 15에 도시하는 제2 단계는, 상기 제1 단계에서 행한 의존 그래프에 기초하는 스테이트먼트의 소트의 결과에 대해 행해진다. 우선, 단계 St11은 처리 블록화를 대상으로 하는 프로그램의 코드에 대해, 네스트 또는 상자 구조에 있는 가장 내측의 계층의 처리 블록으로부터 순서대로 처리를 개시한다. 단계 St12는 호출원의 처리 블록이 조건 분기 처리인지의 여부를 판정한다. 단계 St12의 판정 결과가 YES이면, 단계 St13은 조건 분기의 종속절을 스레드화 처리 블록으로서 재정의하고, 처리는 단계 St11로 되돌아가, 네스트 또는 상자 구조에 있는 가장 내측의 계층의 다음 계층의 처리 블록의 처리를 개시한다. 한편, 단계 St12의 판정 결과가 NO이면, 단계 St14는 후속의 처리 블록이 조건 분기 처리에 계속되는 것인지의 여부를 판정하여, 판정 결과가 NO이면, 처리는 단계 St11로 되돌아가, 네스트 또는 상자 구조에 있는 가장 내측의 계층의 다음 계층의 처리 블록의 처리를 더 개시한다. 또한, 후속의 처리 블록이 조건 분기 처리이고 단계 St14의 판정 결과가 YES이 면, 단계 St15는 이들 처리 블록과 후속의 처리 블록을 결합하여 스케쥴러화 처리 블록으로서 재정의한다. 단계 St15 후, 처리는 단계 St11로 되돌아가, 네스트 또는 상자 구조에 있는 가장 내측의 계층의 다음 계층의 처리 블록의 처리를 개시한다.
본 실시예의 제2 단계에서는, 상기한 중간 언어 레벨에 의해 정리된 스테이트먼트 열에 대해, 후술하는 방식에 따라 스테이트먼트의 그룹의 결합 및 재정의를 행한다. 또한, 제2 단계에서는, 상기 처리 구분에 의해 분류된 처리 블록을 결합하는 작업을 행하지만, 일반적인 소프트웨어는, 네스트 구조의 루프, 상자 구성의 조건 분기, 서브루틴 부하의 루프, 조건 분기 등의 계층 구조를 갖는다. 이 때문에, 본 실시예의 제2 단계에서 행하는 조작은, 네스트 또는 상자 구조에 있는 가장 내측의 계층의 처리 블록으로부터 순서대로 행해가는 것으로 한다.
본 실시예의 제3 단계에서는, 제2 단계에서 그룹화를 행한 스케쥴러화 처리 블록 및 스레드화 처리 블록에 제어 스테이트먼트를 부가하여, 스레드와 스케쥴러로서 최종적인 중간 언어(중간 코드)를 생성한다.
조건 분기 및 조건을 산출하는 연산과, 그것에 종속하는 처리 블록의 호출은, 동적 스케쥴러와 스케쥴링되는 스레드의 관계와 등가이다. 본 실시예에서는, 외부(또는, 외부 부착의) 스케쥴러를 사용하지 않는 구조로 하기 때문에, 스케쥴러화 처리 블록의 구조에 스레드의 컨텍스트 스위치 기능과 동일한 움직임을 하는 구조를 설치한다. 또한, 스레드화 처리 블록에는, 스케쥴러의 요구 시에만 동작하는 구조를 설치한다.
그래서, 본 실시예의 제3 단계에서는, 스케쥴러화 처리 블록과 그것에 종속 하는 스레드화 처리 블록에 대해 다음과 같은 조작을 행한다.
도 16은 스레드화 처리 블록에의 스테이트먼트의 추가 방법을 설명하는 도면이다. 우선, 도 16에 51로 나타내는 바와 같이 스레드화 처리 블록(55)을 루프로 둘러싸고, 52로 나타내는 바와 같이 루프의 입구 부분(선두 부분)에 시그널을 수신대기하여, 시그널을 수신할 때까지는 CPU를 해방(릴리스)하는 웨이트(wait) 기구와 같은 OS의 서비스콜을 삽입한다. 또한, 53, 54로 나타내는 바와 같이, 스레드화된 처리 블록끼리가 병렬 동작하는 것도 고려하여, 병렬 실행(동시 실행)하는 처리 블록을 (식 8), (식 9) 및 (식 11)로 유도되는 의존 방정식에 기초하여 해석하고, 의존 관계에 있는 경우, 세마포어(Semaphore)나 뮤텍스(Mutex)에 의한 배타 제어 코드를 삽입한다. 즉, 53으로 나타내는 바와 같이 배타 록을 걸고, 54로 나타내는 바와 같이 배타 록을 해제한다. 상기한 조작에 의해, 구조가 변경된 스레드화 처리 블록(55)을 이벤트 처리 스레드(59)로서 정의하여 기동하는 것과 같은 코드를 프로그램 본체에 추가할 수 있다.
상기한 조작에 의해, 처리 동작을 행하지 않더라도 좋은 타이밍에서는, 이벤트 처리 스레드(59)는 CPU를 해방하고 있기 때문에, 불필요한 CPU 리소스를 사용하지 않는다.
도 17은 스케쥴러화 처리 블록에의 스테이트먼트의 추가 방법을 설명하는 도면이다. 스케쥴러화 처리 블록에는 조건 분기 처리가 포함되어 있고, 그 조건 분기가 발생하는 타이밍이 상기한 이벤트 처리 스레드(59)를 기동하는 타이밍(스케쥴링함)이라고 생각된다. 그래서, 조건 분기 후의 종속절에, 도 17에 61로 도시하는 바 와 같이 종속하는 이벤트 처리 스레드(59)가 기대하는 시그널(즉, 조건 A 또는 B가 성립하면 동작시키는 이벤트에 대한 시그널)을 발행하는 스테이트먼트(코드)를 삽입하여, 이것을 스케쥴러화 처리 블록(69)으로서 정의한다.
기초가 되는 소스 코드(31) 중, 스케쥴러화 처리 블록(65)이 상자 구조의 내부에 있는 경우, 그 스케쥴러화 처리 블록(65)을 기동하는 것은 그 부모계층에 있는 스케쥴러화 처리 블록이다. 도 14의 예에서는, 시그널에 응답하는 웨이크업 기구가 삽입된 것과 같은 리스트럭쳐링에 의해, 45로 나타내는 상자의 내측의 스케쥴러화 처리 블록은, 41로 나타내는 상위 계층의 스케쥴러화 처리 블록으로부터의 시그널 발신을 계기로, 다이나믹하게 기동되게 된다.
본 실시예에서는, 주로 시계열 처리, 즉, 미리 결정된 타이밍에 도중의 연산 결과를 출력하는 것과 같은 범용적인 프로그래밍 언어로 기술된 프로그램을 상정하고 있고, 이러한 프로그램은, 일반적으로는 프로그램의 가장 상위의 계층에서 루프 구조를 취한다. 본 실시예의 제2 단계의 처리를 행하면, 반드시 최외곽 루프에 둘러싸인 스케쥴러화 처리 블록, 즉, 최외곽 스케쥴러화 처리 블록이 존재하는 것이 된다.
상기 최외곽 스케쥴러화 처리 블록을 기동하는 동적 시그널 발생 장치는 없기 때문에, 최외곽 스케쥴러화 처리 블록에 대해서는, 도 18에 도시하는 바와 같이, OS의 타이머 기능을 이용하여, 주기적으로 OS에서 시그널(타이머 신호)을 송신하고, 자동 기동시키는 것과 같은 타이머 핸들러와 같은 구조를 내장한다. 도 18은 최외곽 스케쥴러화 처리 블록의 타이머 처리를 설명하는 도면이다. 도 18 중, 도 17과 동일 부분에는 동일 부호를 붙이고, 그 설명은 생략한다. 도 18에 있어서, 64는 OS로부터 주기적으로 송신되는 시그널(타이머 신호), 65A는 최외곽 스케쥴러화 처리 블록, 69A는 61로 도시하는 바와 같이 종속하는 이벤트 처리 스레드(59)가 기대하는 시그널(즉, 조건 A 또는 B가 성립하면 동작시키는 이벤트에 대한 시그널)을 발행하는 스테이트먼트(코드)가 삽입되고 정의된 스케쥴러화 처리 블록을 나타낸다.
도 19는 본 실시예의 제3 단계의 처리를 설명하는 흐름도이다. 도 19에 있어서, 입력은 중간 언어(33-1)이고, 출력은 중간 언어(33-2)이다.
도 19에 도시하는 제3 단계는, 상기 제2 단계에서 그룹화를 행한 스케쥴러화 처리 블록 및 스레드화 처리 블록에 대해 행해진다. 우선, 단계 St21은 처리의 대상이 되는 처리 블록이 스레드화 처리 블록인지, 혹은, 스케쥴러화 처리 블록인지를 판정한다. 처리 대상이 되는 처리 블록이 스레드화 처리 블록인 경우, 단계 St22∼St25의 스레드화 처리 블록에 스테이트먼트를 추가하는 처리가 행해진다. 한편, 처리 대상이 되는 처리 블록이 스케쥴화 처리 블록인 경우, 단계 St26∼St28의 스케쥴러화 처리 블록에 스테이트먼트를 추가하는 처리가 행해진다.
단계 St22는 도 16에 51로 나타내는 바와 같이 스레드화 처리 블록(55)을 루프로 둘러싼다. 단계 St23은 도 16에 52로 나타내는 바와 같이 루프의 입구 부분에 시그널을 수신 대기하고, 시그널을 수신할 때까지는 CPU를 해방(릴리스)하는 웨이트(wait) 기구와 같은 OS의 서비스콜을 삽입한다. 단계 St24는 도 16에 53, 54로 나타내는 바와 같이 스레드화된 처리 블록끼리가 병렬 동작하는 것도 고려하여, 병 렬 실행(동시 실행)하는 처리 블록을 (식 8), (식 9) 및 (식 11)로 유도되는 의존 방정식에 기초하여 해석하고, 의존 관계에 있는지의 여부를 판정한다. 단계 S24의 판정 결과가 YES인 경우, 단계 S25는 세마포어(Semaphore)나 뮤텍스(Mutex)에 의한 배타 제어 코드를 삽입하고, 처리는 종료한다. 한편, 단계 St24의 판정 결과가 NO이면 처리는 종료한다.
단계 St26은 조건 분기 후의 종속절에 도 17에 61로 나타내는 바와 같이 종속하는 이벤트 처리 스레드(59)가 기대하는 시그널(즉, 조건 A 또는 B가 성립하면 동작시키는 이벤트에 대한 시그널)을 발행하는 송신 기구(스테이트먼트)를 삽입하고, 이것을 스케쥴러화 처리 블록(69)으로서 정의한다. 단계 St27은 스케쥴러화 처리 블록이 최외곽 스케쥴러화 처리 블록인지의 여부를 판정한다. 단계 St27의 판정 결과가 YES이면, 단계 St28은 타이머 핸들러를 내장하고, 처리는 종료한다. 한편, 단계 St27의 판정 결과가 NO이면, 처리는 종료한다.
상기 제3 단계의 조작을 행함으로써, 소스 코드(31) 중에 포함된 처리 시퀀스로부터 동적 스케쥴러 기능을 도출할 수 있고, 외부 스케쥴러를 이용하는 경우와 같은 오버헤드가 발생하지 않는다. 또한, 불필요한 버퍼링을 행할 필요가 없기 때문에, 메모리의 이용 효율이 높아진다. 또한, 각 처리 블록은, 필요 시에 CPU를 사용하는 것과 같은 구조, 즉, 처리 동작이 불필요한 때에는 CPU를 해방하는 구조도 동시에 내장되기 때문에, CPU의 리소스도 효율적으로 사용하는 것이 가능하게 된다.
도 20은 본 실시예의 동작 시의 타이밍 차트의 이미지를 도시하는 도면이다. 도 20은 OS의 타이머 기능을 이용하여 얻어지는 주기적인 시그널(타이머 신호), 스케쥴러화 처리 블록에 의해 실현되는 동적 스케쥴러, 및 이벤트 처리 스레드(ET1, ET2)의 타이밍을 도시한다.
네스트 또는 상자 구조로 되어 있는 코드 중, 동일 계층에 있는 스케쥴러가 있고, 또한, 상기 (식 14)로 도출되는 스테이트먼트(또는 처리 블록)의 순서의 교체가 가능한 경우, 스케쥴러화 처리 블록의 처리 순서를 교체함으로써 동적 스케쥴링에 있어서의 할당 우선도 제어의 사고 방식을 도입하는 것이 가능하다. 일반적으로, 동적 스케쥴러의 할당 우선도 결정은, 휴리스틱(heuristic)인 알고리즘을 따라 행해지고, CPU의 사용량(처리 블록의 크리티컬 패스), 메모리의 사용량(데이터 사용량) 등을 알고리즘이 판단에 이용하는 파라미터(또는 계수)로 하여 사용한다. 우선도의 소트의 열쇠가 되는 파라미터를 결정하기에 있어서, 최량의 해(解)를 얻기 위해서는 대상으로 하는 소프트웨어의 성질에 의존하는 경우가 크다.
본 실시예에서는, 상기 제1 단계∼제3 단계의 처리를 컴파일러의 미들 패스(34)에 내장하기 때문에, 일반적인 컴파일러에 의한 최적화의 수법으로서 2패스 컴파일의 생각을 도입할 수 있다. 일반적인 2패스 컴파일러에서는, 첫번째의 컴파일로 생성된 실행 코드에 기초하여 실제로 내장 기기 등을 동작시켜 프로파일링을 행하고, 프로파일링의 결과에 기초하여 두번째의 컴파일을 행한다.
프로파일링을 이용하는 2패스 컴파일을 허용하는 컴파일러에 본 실시예를 적용한 경우, 스케쥴러화 처리 블록의 우선도에 의한 소트를, 이 프로파일링 결과에 기초하여 행할 수 있다. 따라서, 본 수법을 이용함으로써 보다 정밀도가 높은 스케 쥴링 결과를 얻을 수 있게 된다.
이와 같이 하여, 미들 패스(34)는, 도 5의 백 엔드(35)가 해독 가능한 중간 언어(33-2)를 생성하고, 컴파일러는 실행 코드(36)를 생성한다.
도 21은 도 2의 종래 수법과 본 실시예의 타이밍 차트의 이미지를 비교하는 도면이다. 도 21 중 도 2 및 도 20과 동일 부분에는 동일 부호를 붙이고, 그 설명은 생략한다. 도 21의 상부는 본 실시예의 동작 타이밍을 도시하고, 하부는 도 2의 종래 수법의 동작 타이밍을 도시한다. 도 21에 있어서, OH1은 본 실시예에 있어서의 복수 스레드화에 의해 생기는 오버헤드를 도시하고, R1은 본 실시예에 있어서의 CPU 해방 기간을 도시한다. 본 실시예에 따르면, 처리 P3의 실제의 종료 시간은 종래 수법에 있어서의 종료 시간(t2)보다 다소 지연되지만, 처리 P4를 확실하게 기대 종료 시간(t3)까지 종료할 수 있다. 이 때문에, 본 실시예에서는, 시계열 처리함으로써 정기적으로 도중 연산 결과를 출력하는 것과 같은 소프트웨어에 있어서, 종래 수법에서 생겼던 분기 타이밍의 일탈에 의한 처리 완료 시간의 지연을 회피할 수 있다. 또한, 본 실시예에서는, 도 3의 종래 수법과 같은 버퍼링을 행할 필요가 없기 때문에, 메모리의 이용 효율이 높게 된다.
도 22는 본 실시예의 스케쥴러화 처리 블록, 즉, 동적 스케쥴러의 이미지를 도시하는 도면이다. 도 22 중, 81은 태스크 또는 스레드, 82는 CPU의 아이들 상태, 83은 컨텍스트 스위치 기능을 가지고 스케쥴링을 행하는 동적 스케쥴러, 84는 OS(86) 내의 프로세스 관리 기능, 85은 동적 스케쥴러(83)의 지시에 의한 스위치, 88은 OS(86) 내의 타이머 기능을 도시한다. 내장 기기에 의해 효율적으로 복수의 태스크 또는 스레드(81)를 병렬(동시)로 실행하는 경우, 도 22에 도시하는 동적 스케쥴러(83)는 OS(86)의 타이머 기능(88)으로부터의 시그널에 기초하여 동적으로 태스크 또는 스레드(81)의 우선도를 정의하고, 그 컨텍스트 스위치 기능 및 OS(86)의 프로세스 관리 기능(84)에 의해 태스크 또는 스레드(81)의 스위치(85)를 행한다. 본 실시예에 따르면, 스레드와 타이머 핸들러로 분해된 소스 코드(31)는, 능동적으로 CPU를 해방하여 아이들 상태(82)로 하기 때문에, 불필요한 CPU의 리소스를 사용하지 않는다. 또한, 동적 스케쥴러(83)를 구성하는 스케쥴러화 처리 블록은, 원래 소스 코드(31) 중에 존재하는 코드이기 때문에, 복수 스레드화에 의해 생기는 오버헤드도 매우 작다.
도 23은 실제의 프로그램에 대해 컴파일을 행한 경우의 리소스의 이용 효율의 측정 결과를 상기 종래 수법과 실시예에 대해 도시하는 도면이다. 도 23에 도시하는 바와 같이, 프로그램 PA는 동화상 플레이어의 소프트웨어이고, 프로그램 PB는 통신 처리의 소프트웨어이다. 프로그램 PA, PB는, 어느 것이나 시계열 처리를 기본으로 하고, 미리 결정된 타이밍에 도중 결과를 출력하는 소프트웨어이다. 프로그램 PC는 정지 화상 처리의 소프트웨어이고, 프로그램 PD는 산술 연산의 소프트웨어이다. 프로그램 PC는 XGA의 압축 화상의 신장을 행하는 소프트웨어이다. 프로그램 PD는 이미 프로그래머에 의해 소스 코드 레벨로 최적화가 행해진 유체 계산용의 소프트웨어이다.
도 23으로부터도 알 수 있듯이, 본 실시예에 따르면, 모든 프로그램 PA∼PD에 대해, CPU 부하가 상기 종래 수법의 경우에 비해 저감되는 것이 확인되었다. 또 한, 본 실시예에 따르면, 프로그램 PA, PB, PC에 대해서는, 메모리 사용량이 상기종래 수법의 경우에 비해 저감되는 것이 확인되었다. 또한, 본 실시예에 따르면, 프로그램 PA, PB, PC에 대해서는, CPU의 소비 전력을 피크 시의 소비 전력보다 저감할 수 있는 것이 확인되었다. 또한, 본 실시예에 따르면, 프로그램 PC에 대해서는, 스레드화의 효과는 적지만, 제1 단계의 스테이트먼트 조정에 의한 효과가 보였다.
이와 같이, 주로 시계열 처리형의 프로그램의 완성도에도 의하지만, 본 실시예에 따르면, CPU 및 메모리, 즉, 리소스의 사용량은, 종래 수법을 이용하는 경우에 비해 30% 전후 저감하는 것을 확인할 수 있었다. 또한, 부차 효과로서 CPU의 아이들 상태를 생성할 수 있기 때문에, CPU의 소비 전력을 저감하는 효과도 있는 것이 확인되었다.
본 발명은 CPU나 메모리 등의 리소스를 갖는 각종 전자 기기에 적용 가능하고, 특히 리소스가 한정된 내장 기기에 적합하다.
이상, 본 발명을 실시예에 의해 설명했지만, 본 발명은 상기 실시예에 한정되지 않고, 본 발명의 범위 내에서 여러 가지의 변형 및 개량이 가능한 것은 물론이다.

Claims (20)

  1. 컴퓨터에 의해, 미리 결정된 타이밍에 도중 결과를 출력하고 시계열적으로 처리되는 소프트웨어의 컴파일을 행하는 컴파일 방법으로서,
    상기 컴퓨터에 의해, 상기 소프트웨어의 소스 코드에 포함되는 처리 시퀀스로부터 병렬성 및 조건 분기에 관한 처리 블록을 추출하는 추출 단계와,
    상기 컴퓨터에 의해, 추출된 처리 블록의 리스트럭쳐링을 행하여 실행 코드를 자동적으로 생성하는 생성 단계
    를 포함하고,
    상기 추출 단계는, 연산과 상기 컴퓨터의 메모리 및 레지스터에 연산 결과의 대입을 행하는 연산 대입 처리의 처리 블록에 대해, 스테이트먼트 간의 의존 방정식에 기초하는 재배열을 행하여 중간 언어 레벨로 정리된 스테이트먼트 열을 구하는 제1 단계와, 상기 정리된 스테이트먼트 열에 대해 스테이트먼트의 그룹의 결합 및 재정의를 행하는 제2 단계를 포함하며,
    상기 생성 단계는, 상기 제2 단계에서 그룹화를 행한 스케쥴러화 처리 블록 및 스레드화 처리 블록에 제어 스테이트먼트를 부가하고, 스레드와 스케쥴러로서 최종적인 중간 언어를 생성하는 제3 단계를 포함하고,
    상기 스케쥴러화 처리 블록은, 후속의 처리 블록이 조건 분기 처리이면 처리 블록과 결합되어 재정의된 것이고,
    상기 스레드화 처리 블록은, 호출원의 처리 블록이 조건 분기 처리이면 조건 분기의 종속절이 재정의된 것을 특징으로 하는 컴파일 방법.
  2. 삭제
  3. 삭제
  4. 제1항에 있어서,
    상기 제3 단계는, 상기 제2 단계에서 그룹화를 행한 스케쥴러화 처리 블록 및 스레드화 처리 블록에 대해 행해지고,
    처리 대상이 되는 처리 블록이 스레드화 처리 블록인 경우는 스레드화 처리 블록에 스테이트먼트를 추가하는 처리를 행하며,
    처리 대상이 되는 처리 블록이 스케쥴화 처리 블록인 경우는 스케쥴러화 처리 블록에 스테이트먼트를 추가하는 처리를 행하는 것을 특징으로 하는 컴파일 방법.
  5. 제1항에 있어서,
    상기 제3 단계는, 연산 처리가 불필요한 기간에 있어서 상기 컴퓨터를 해방하는 기구를 포함하는 제어 스테이트먼트를 부가하는 것을 특징으로 하는 컴파일 방법.
  6. 컴퓨터에 의해, 미리 결정된 타이밍에 도중 결과를 출력하고 시계열적으로 처리되는 소프트웨어의 컴파일을 행하는 컴파일러로서,
    상기 컴퓨터에 의해, 상기 소프트웨어의 소스 코드를 제1 중간 언어로 번역하여 기억부에 보존하는 프론트 엔드와,
    상기 컴퓨터에 의해, 상기 기억부에 보존된 상기 제1 중간 언어에 기초하여 상기 소스 코드에 포함되는 처리 시퀀스로부터 병렬성 및 조건 분기에 관한 처리 블록을 추출하고, 추출된 처리 블록의 리스트럭쳐링을 행하여 제2 중간 언어를 생성하여 기억부에 보존하는 미들 패스와,
    상기 컴퓨터에 의해, 상기 기억부에 보존된 상기 제2 중간 언어에 기초하여 실행 코드를 자동적으로 생성하는 백 엔드
    를 구비하고,
    상기 미들 패스는, 연산과 상기 기억부에 연산 결과의 대입을 행하는 연산 대입 처리의 처리 블록에 대해, 스테이트먼트 간의 의존 방정식에 기초하는 재배열 을 행하여 상기 제1 중간 언어 레벨로 정리된 스테이트먼트 열을 구하는 제1 단계와, 상기 정리된 스테이트먼트 열에 대해 스테이트먼트의 그룹의 결합 및 재정의를 행하는 제2 단계를 포함하며,
    상기 미들 패스는, 상기 제2 단계에서 그룹화를 행한 스케쥴러화 처리 블록 및 스레드화 처리 블록에 제어 스테이트먼트를 부가하여, 스레드와 스케쥴러로서 상기 제2 중간 언어를 생성하는 제3 단계를 포함하고,
    상기 스케쥴러화 처리 블록은, 후속의 처리 블록이 조건 분기 처리이면 처리 블록과 결합되어 재정의된 것이고,
    상기 스레드화 처리 블록은, 호출원의 처리 블록이 조건 분기 처리이면 조건 분기의 종속절이 재정의된 것을 특징으로 하는 컴파일러.
  7. 삭제
  8. 삭제
  9. 제6항에 있어서,
    상기 스케쥴러화 처리 블록은 스레드의 컨텍스트 스위치 기능을 포함하고, 상기 스레드화 처리 블록은 스케쥴러의 요구 시에만 동작하는 구조를 포함하는 것을 특징으로 하는 컴파일러.
  10. 제6항에 있어서,
    상기 제3 단계는, 최외곽 루프에 둘러싸인 스케쥴러화 처리 블록에 대해서는, 상기 컴퓨터의 OS의 타이머 기능을 이용하여 주기적으로 시그널을 송신하여 자동 기동시키는 타이머 핸들러의 구조를 내장하는 것을 특징으로 하는 컴파일러.
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
KR1020097011902A 2006-12-14 2006-12-14 컴파일 방법 및 컴파일러 KR101085330B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2006/324966 WO2008072334A1 (ja) 2006-12-14 2006-12-14 コンパイル方法及びコンパイラ

Publications (2)

Publication Number Publication Date
KR20090089382A KR20090089382A (ko) 2009-08-21
KR101085330B1 true KR101085330B1 (ko) 2011-11-23

Family

ID=39511366

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097011902A KR101085330B1 (ko) 2006-12-14 2006-12-14 컴파일 방법 및 컴파일러

Country Status (6)

Country Link
US (1) US20090254892A1 (ko)
EP (1) EP2093667A4 (ko)
JP (1) JPWO2008072334A1 (ko)
KR (1) KR101085330B1 (ko)
CN (1) CN101563673A (ko)
WO (1) WO2008072334A1 (ko)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5209059B2 (ja) 2008-10-24 2013-06-12 インターナショナル・ビジネス・マシーンズ・コーポレーション ソース・コード処理方法、システム、及びプログラム
US8875111B2 (en) * 2009-04-23 2014-10-28 Microsoft Corporation Intermediate language representation and modification
US8689191B2 (en) * 2010-03-05 2014-04-01 International Business Machines Corporation Correct refactoring of concurrent software
US8863128B2 (en) * 2010-09-30 2014-10-14 Autodesk, Inc System and method for optimizing the evaluation of task dependency graphs
US9430204B2 (en) 2010-11-19 2016-08-30 Microsoft Technology Licensing, Llc Read-only communication operator
US9507568B2 (en) 2010-12-09 2016-11-29 Microsoft Technology Licensing, Llc Nested communication operator
US9395957B2 (en) * 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
US8464232B2 (en) * 2010-12-27 2013-06-11 Aleksandr F. Urakhchin Compiler compiler system with syntax-controlled runtime and binary application programming interfaces
US9239732B2 (en) * 2011-02-16 2016-01-19 Microsoft Technology Licensing Llc Unrolling aggregation operations in asynchronous programming code having multiple levels in hierarchy
CN102193812B (zh) * 2011-06-03 2014-03-26 深圳市茁壮网络股份有限公司 一种代码编译方法、主机及系统
KR101277145B1 (ko) * 2011-12-07 2013-06-20 한국과학기술연구원 공통 표현을 이용한 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
US9286040B2 (en) * 2012-01-18 2016-03-15 Mobilesmith, Inc. Software builder
US9251554B2 (en) 2012-12-26 2016-02-02 Analog Devices, Inc. Block-based signal processing
KR101449657B1 (ko) * 2013-03-05 2014-10-13 한국과학기술연구원 연산자의 값의 범위를 이용한 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
US9298433B2 (en) 2013-05-02 2016-03-29 Facebook, Inc. Optimizing intermediate representation of script code for fast path execution
JP6287018B2 (ja) * 2013-10-04 2018-03-07 富士通株式会社 可視化方法、表示方法、情報処理装置、可視化プログラム及び表示プログラム
CN103699377B (zh) * 2013-12-04 2017-02-01 国家电网公司 一种对程序代码进行重构操作组合的方法
US8978010B1 (en) * 2013-12-18 2015-03-10 Sap Ag Pruning compilation dependency graphs
US20150193358A1 (en) * 2014-01-06 2015-07-09 Nvidia Corporation Prioritized Memory Reads
CN104391733B (zh) * 2014-12-10 2017-11-24 华中科技大学 一种依据依赖关系动态编译软件包的方法
US9830134B2 (en) * 2015-06-15 2017-11-28 Qualcomm Incorporated Generating object code from intermediate code that includes hierarchical sub-routine information
JP6500626B2 (ja) 2015-06-16 2019-04-17 富士通株式会社 計算機、コンパイラプログラム、リンクプログラムおよびコンパイル方法
JP2017228029A (ja) 2016-06-21 2017-12-28 株式会社デンソー 並列化方法、並列化ツール、車載装置
US10558441B2 (en) * 2018-03-12 2020-02-11 International Business Machines Corporation Compiler for restructuring code using iteration-point algebraic difference analysis
WO2020056176A1 (en) * 2018-09-13 2020-03-19 The University Of Chicago System and method of optimizing instructions for quantum computers

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5255385A (en) * 1990-02-26 1993-10-19 Hitachi, Ltd. Method of testing program, and compiler and program testing tool for the method
EP0518420A3 (en) 1991-06-13 1994-08-10 Ibm Computer system for concurrent processing of multiple out-of-order instructions
US5347654A (en) * 1992-02-03 1994-09-13 Thinking Machines Corporation System and method for optimizing and generating computer-based code in a parallel processing environment
JPH0736680A (ja) 1993-07-23 1995-02-07 Omron Corp 並列化プログラム開発支援装置
US5592679A (en) 1994-11-14 1997-01-07 Sun Microsystems, Inc. Apparatus and method for distributed control in a processor architecture
JP2882475B2 (ja) * 1996-07-12 1999-04-12 日本電気株式会社 スレッド実行方法
JPH10228382A (ja) * 1997-02-14 1998-08-25 Nec Corp コンパイル方式
JPH11259437A (ja) * 1998-03-12 1999-09-24 Hitachi Ltd 不要バリア命令の削減方式
JP2000207223A (ja) * 1999-01-12 2000-07-28 Matsushita Electric Ind Co Ltd 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体
JP3641997B2 (ja) * 2000-03-30 2005-04-27 日本電気株式会社 プログラム変換装置及び方法並びに記録媒体
JP2002007364A (ja) * 2000-06-22 2002-01-11 Fujitsu Ltd 並列計算機システムのジョブスケジューリングを行うスケジューリング装置
JP3664473B2 (ja) * 2000-10-04 2005-06-29 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの最適化方法及びこれを用いたコンパイラ
US7089557B2 (en) * 2001-04-10 2006-08-08 Rusty Shawn Lee Data processing system and method for high-efficiency multitasking
JP3772713B2 (ja) 2001-09-12 2006-05-10 日本電気株式会社 プライオリティ動的制御方式、プライオリティ動的制御方法およびプライオリティ動的制御用プログラム
JP4783005B2 (ja) * 2004-11-25 2011-09-28 パナソニック株式会社 プログラム変換装置、プログラム変換実行装置およびプログラム変換方法、プログラム変換実行方法。
US8010956B1 (en) * 2005-01-28 2011-08-30 Oracle America, Inc. Control transfer table structuring
US7613595B2 (en) * 2005-03-01 2009-11-03 The Math Works, Inc. Execution and real-time implementation of a temporary overrun scheduler
US7966610B2 (en) * 2005-11-17 2011-06-21 The Mathworks, Inc. Application of optimization techniques to intermediate representations for code generation
JP4923240B2 (ja) * 2006-01-17 2012-04-25 国立大学法人東京工業大学 プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム
US8146066B2 (en) * 2006-06-20 2012-03-27 Google Inc. Systems and methods for caching compute kernels for an application running on a parallel-processing computer system
JP2009048252A (ja) * 2007-08-14 2009-03-05 Oki Electric Ind Co Ltd プログラム変換装置及びコンパイラプログラム

Also Published As

Publication number Publication date
CN101563673A (zh) 2009-10-21
EP2093667A4 (en) 2012-03-28
WO2008072334A1 (ja) 2008-06-19
US20090254892A1 (en) 2009-10-08
JPWO2008072334A1 (ja) 2010-03-25
KR20090089382A (ko) 2009-08-21
EP2093667A1 (en) 2009-08-26

Similar Documents

Publication Publication Date Title
KR101085330B1 (ko) 컴파일 방법 및 컴파일러
US5828886A (en) Compiling apparatus and method for promoting an optimization effect of a program
US5557761A (en) System and method of generating object code using aggregate instruction movement
US8037465B2 (en) Thread-data affinity optimization using compiler
Raman et al. Parcae: a system for flexible parallel execution
US20090172353A1 (en) System and method for architecture-adaptable automatic parallelization of computing code
Kritikakou et al. Run-time control to increase task parallelism in mixed-critical systems
KR102402584B1 (ko) 사용자 어플리케이션의 특성에 따른 연산 디바이스 동적 제어 기법
JP5036523B2 (ja) プログラム並列化装置
JP2016192153A (ja) 並列化コンパイル方法、並列化コンパイラ、及び車載装置
Muller et al. Competitive parallelism: Getting your priorities right
Nguyen et al. Cache-conscious offline real-time task scheduling for multi-core processors
JP6427053B2 (ja) 並列化コンパイル方法、及び並列化コンパイラ
JP6488739B2 (ja) 並列化コンパイル方法、及び、並列化コンパイラ
Yuan et al. Compiling esterel for multi-core execution
Lutz et al. Helium: a transparent inter-kernel optimizer for opencl
Ohno et al. A GPGPU programming framework based on a shared-memory model
Bezati et al. Streamblocks: A compiler for heterogeneous dataflow computing (technical report)
Xue et al. A lifetime optimal algorithm for speculative PRE
JP6488738B2 (ja) 並列化コンパイル方法、及び、並列化コンパイラ
Didier et al. Efficient parallelization of large-scale hard real-time applications
So et al. Procedure cloning and integration for converting parallelism from coarse to fine grain
Ferrandi et al. Automatic parallelization of sequential specifications for symmetric mpsocs
Tran et al. Parallel programming with data driven model
Yuan Architectures specific compilation for efficient execution of esterel

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee