KR20090017400A - 프로그램 변환장치 및 컴파일러 프로그램 - Google Patents
프로그램 변환장치 및 컴파일러 프로그램 Download PDFInfo
- Publication number
- KR20090017400A KR20090017400A KR1020080033556A KR20080033556A KR20090017400A KR 20090017400 A KR20090017400 A KR 20090017400A KR 1020080033556 A KR1020080033556 A KR 1020080033556A KR 20080033556 A KR20080033556 A KR 20080033556A KR 20090017400 A KR20090017400 A KR 20090017400A
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- instructions
- code
- parallelization
- command
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3404—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for parallel or distributed programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24561—Intermediate data storage techniques for performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/02—Input arrangements using manually operated switches, e.g. using keyboards or dials
- G06F3/023—Arrangements for converting discrete items of information into a coded form, e.g. arrangements for interpreting keyboard generated codes as alphanumeric codes, operand codes or instruction codes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
명령 실행의 고속화를 더욱 철저하게 도모하는 프로그램 변환장치 및 컴파일러 프로그램을 제공한다. 본 발명에 따른 프로그램 변환장치 및 컴파일러 프로그램은, 프로그램 소스 코드를 변환해서 복수의 명령을 포함하는 중간 코드를 생성하고, 상기 중간 코드로부터 2개의 병렬화 후보 명령으로 이루어지는 적어도 1개의 조합을 추출하는 동시에 상기 병렬화 후보 명령마다 의존 관계를 가지는 의존 관계 명령을 추출한다. 그리고, 상기 병렬화 후보 명령마다, 해당 병렬화 후보 명령에 대해서 추출된 의존 관계 명령의 실행 위치에 기초하여 해당 병렬화 후보 명령의 이동 가능 범위를 판별하고, 상기 2개의 병렬화 후보 명령의 공통 이동 가능 범위에 포함되는 1개의 실행 위치로 상기 2개의 병렬화 후보 명령을 이동함으로써 상기 중간 코드를 수정해서 명령 코드를 생성한다.
프로그램 변환, 컴파일러 프로그램, 중간코드 생성, 병렬화 후보 명령, 의존 관계 명령, 이동 가능 범위 판별
Description
본 발명은, C 언어 등의 프로그램 언어로 기술된 소스 코드를 전자계산기에서 실행가능한 명령 코드로 변환하는 프로그램 변환장치 및 컴파일러 프로그램에 관한 거이다.
최근, 전자 계산기의 프로세서에는, 어드레스 생성 유닛과 연산 실행 유닛을 독립적으로 가지는 아키텍쳐가 사용되도록 되고 있다. 이러한 아키텍쳐에 있어서는, 예를 들면 전송 명령과 연산 명령을 병렬해서 실행하는 것이 가능해진다. 1개의 명령의 실행 사이클수가 1 사이클로 했을 경우, 종래의 전송 명령과 연산 명령의 실행에는 2사이클 필요로 했지만, 어드레스 생성 유닛과 연산 실행 유닛을 독립적으로 가지는 것에 의해 전송 명령과 연산 명령을 동시, 즉 병렬 실행 명령으로 치환함으로써 실행 시간을 1사이클로 단축하는 것이 가능해진다.
그런데, C언어로 기술된 소스 코드를 전송 명령이나 연산 명령 등의 명령 코 드로 변환하기 위해서는, 소프트웨어인 C 컴파일러를 사용함으로써 상기 소스 코드를 바탕으로 일단 중간 코드를 생성하고, 생성된 중간 코드를 바탕으로 하여 다시 각종의 최적화를 행해서 최종적인 명령 코드를 생성하는 것이 행해진다. 이때, 상기한 것과 같이 병렬 실행 명령에 대해서는, C 컴파일러가 중간 코드를 바탕으로 하여 2개의 명령을 1개의 병렬 실행 명령으로 변환하는 것이 행해진다. 이러한 중간 코드 레벨에 있어서의 병렬화를 위한 프로그램 변환기술에 관해서는 특허문헌 1이 참조된다.
[특허문헌 1] 일본국 특개 2001-282549호 공보
그렇지만, 종래의 방법에서는, 병렬화의 후보가 된 2개의 명령이 있어서 이것들을 동시 실행 위치로 이동하려고 했을 경우에, 이들의 사이에 의존 관계가 있는 다른 명령이 있는 경우는 획일적으로 명령 이동이 불가능하다고 판별되어, 병렬화가 행해지지 않는다고 하는 결점이 있었다. 여기에서, 의존 관계란, 먼저 실행된 명령에 의해 갱신된 데이터나 플래그를 후속하는 명령이 참조하는 것 등으로 하여, 어떤 명령의 실행 조건이 선행하는 명령의 실행 결과가 되거나, 혹은 어떤 명령의 실행 결과가 후행하는 명령의 실행 조건이 되는 관계를 의미하고, 이러한 관계가 있는 경우에는 명령을 실행하는 명령순서가 제약을 받게 된다.
도 1은, 의존 관계가 있음으로써 명령 이동이 행해지지 않는 구체적인 예를 나타내고 있다. 여기에서는, 설명을 위해 다음의 의사적인 중간명령을 사용한다. 즉, INSTPn(n은 명령 순서에 할당되는 번호)은 병렬화의 대상이 될 수 있는 명령으로, 예를 들면 INSTP1 및 INSTP2끼리는 병렬화가능한 것을 의미한다. INSTNn은 병렬화의 대상이 안되는 명령을 나타내고 있다. 각 명령의 뒤의 괄호 내에 다른 명령이 기술되어 있는 것은, 그 명령과 자신과의 사이에 의존 관계가 있는 것을 나타내고 있다. 도면의 아래쪽으로 각 명령이 명령순으로 실행된다.
도 1a를 참조하면, INSTN1과 INSTP5과, INSTP2과 INSTN4, INSTN3과 INSTP5, INSTN4과 INSTP2, INSTP5과 INSTN1 및 INSTN3과의 각각은 명령 사이에 의존 관계가 있다. 또한, INSTP2와 INSTP5의 2개의 명령은 병렬화가능한 명령이다.
이 경우, INSTP2과 INSTP5를 동시 실행 위치로 이동하는 것이 시도된다. 그러나, INSTP2은 INSTN4의 사이의 의존 관계에 의해 INSTP5의 위치로 이동할 수 없고, 또한, INSTP5은, INSTN3과의 사이의 의존 관계에 의해 INSTP2의 위치로 이동 할 수 없다고 판별된다. 결과적으로, INSTP2과 INSTP5의 병렬화는 행해지지 않게 되어, 명령 실행의 고속화가 도모되지 않게 된다.
도 1b를 참조하면, INSTN1과 INSTP5과, INSTP2과 INSTN3, INSTN3과 INSTP2, INSTN4과 INSTP5, INSTP5과 INSTN1 및 INSTN4의 각각은 명령간에 의존 관계가 있다. 또한, INSTP2와 INSTP3의 2개의 명령은 병렬화가능한 명령이다.
이 경우, INSTP2과 INSTP5를 동시 실행 위치로 이동하는 것이 시도된다. 그러나, INSTP2은 INSTN3와의 사이의 의존 관계에 의해 INSTP5의 위치로 이동할 수 없고, 또한, INSTP5은, INSTN4과의 사이의 의존 관계에 의해 INSTP2의 위치로 이동 할 수 없다고 판별된다. 결과적으로, 이 경우도 INSTP2과 INSTP5의 병렬화는 행해지지 않게 된다. 이상의 구체적인 예와 마찬가지로, 종래의 방법에 있어서는 실행 위치 병렬화에 의한 고속화가 충분하지 않았다.
본 발명의 목적은, 명령 실행의 고속화를 보다 철저하게 도모하는 프로그램 변환장치 및 컴파일러 프로그램을 제공하는 것이다.
본 발명에 따른 프로그램 변환장치는, 프로그램 소스 코드를 명령 코드로 변환하는 프로그램 변환장치로서, 상기 소스 코드를 변환해서 복수의 명령을 포함하는 중간 코드를 생성하는 중간 코드 생성수단과, 상기 중간 코드로부터, 2개의 병렬화 후보 명령으로 이루어지는 적어도 1개의 조합을 추출하는 병렬화 후보 명령 추출 수단과, 상기 병렬화 후보 명령마다, 해당 병렬화 후보 명령과 의존 관계를 가지는 의존 관계 명령을 상기 중간 코드로부터 추출하는 의존 관계 명령 추출 수단과, 상기 병렬화 후보 명령마다, 해당 병렬화 후보 명령에 대해서 추출된 의존 관계 명령의 실행 위치에 기초하여 해당 병렬화 후보 명령의 이동 가능 범위를 판별하는 이동 가능 범위 판별 수단과, 상기 2개의 병렬화 후보 명령의 공통 이동 가능 범위에 포함되는 1개의 실행 위치로 상기 2개의 병렬화 후보 명령을 이동함으로써 상기 중간 코드를 수정하고, 수정된 중간 코드를 변환함으로써 상기 명령 코드를 생성하는 명령 코드 생성수단을 포함하는 것을 특징으로 한다,
본 발명에 따른 컴파일러 프로그램은, 프로그램 소스 코드를 명령 코드로 변 환하는 수단으로서 컴퓨터를 기능시키기 위한 컴파일러 프로그램으로서, 상기 소스 코드를 변환해서 복수의 명령을 포함하는 중간 코드를 생성하는 중간 코드 생성수단과, 상기 중간 코드로부터, 2개의 병렬화 후보 명령으로 이루어지는 적어도 1개의 조합을 추출하는 병렬화 후보 명령 추출 수단과, 상기 병렬화 후보 명령마다, 해당 병렬화 후보 명령과 의존 관계를 가지는 의존 관계 명령을 상기 중간 코드로부터 추출하는 의존 관계 명령 추출 수단과, 상기 병렬화 후보 명령마다, 해당 병렬화 후보 명령에 대해서 추출된 의존 관계 명령의 실행 위치에 기초하여 해당 병렬화 후보 명령의 이동 가능 범위를 판별하는 이동 가능 범위 판별 수단과, 상기 2개의 병렬화 후보 명령의 공통 이동 가능 범위에 포함되는 1개의 실행 위치로 상기 2개의 병렬화 후보 명령을 이동함으로써 상기 중간 코드를 수정하고, 수정된 중간 코드를 변환함으로써 상기 명령 코드를 생성하는 명령 코드 생성수단을 기능시키는 것을 특징으로 한다.
본 발명에 따른 프로그램 변환장치 및 컴파일러 프로그램에 따르면, 보다 빈틈이 없는 명령 코드의 실행 위치 병렬화가 행해져, 명령 실행의 고속화가 보다 철저해진다.
본 발명의 실시예에 대해서 첨부의 도면을 참조하면서 상세하게 설명한다.
<제1 실시예>
도 2는, 제1 실시예를 나타내고, 프로그램 변환장치를 포함하는 전체의 구성을 보이고 있다. 프로그램 변환장치(20)는, 소스 코드(10)를 입력으로서 받아들여, 상기 소스 코드를 명령 코드(40)로 변환해서 출력하는 장치이다. 소스 코드(10)는, C 언어 등의 프로그램 언어로 기술된 소스 코드의 데이터로서, 통신 네트워크나 기억매체 등의 다양한 수단에 의해 프로그램 변환장치(20)에 받아들인다. 명령 코드(40)는, 목적으로 되는 전자 계산기에서 실행가능한 명령 코드 데이터로서, 통신 네트워크나 기억매체 등의 다양한 수단에 의해 전자 계산기를 향해서 출력된다. 본 실시예에 있어서, 명령 코드(40)를 실행하는 전자 계산기로서는, 어드레스 생성 유닛과 연산 실행 유닛을 독립적으로 가짐으로써, 복수의 명령을 병렬해서 실행하는 것을 가능하게 하는 병렬 아키텍쳐의 프로세서를 구비하는 전자 계산기를 전제로 하고 있다.
프로그램 변환장치(20)는, 중간 코드 생성부(21)와, 의존 관계 명령 추출부(22)와, 병렬화 후보 명령 추출부(23)와, 병렬화 실행부(24)와, 명령 코드 생성부(25)와, 병렬화 가능 명령 테이블(26)을 포함한다. 이들 각 부분(21∼26)은, 프로그램 변환장치(20)를 1개의 컴퓨터 장치로 했을 경우의 컴파일러 프로그램(30)으로서 실현되어도 된다.
중간 코드 생성부(21)는, 받아들인 소스 코드(10)를 바탕으로 하여 중간 코드를 생성하고, 생성된 중간 코드를 의존 관계 명령 추출부(22) 및 병렬화 후보 명 령 추출부(23)에 공급하는 기능을 구비한다. 소스 코드(10)의 데이터가 C 언어에 의해 작성되어 있는 경우에는, 중간 코드는 예를 들면 어셈블러 언어에 의해 기술될 수 있다.
의존 관계 명령 추출부(22)는, 공급된 중간 코드를 바탕으로 하여, 각 명령간의 의존 관계를 검사하여, 명령마다 의존 관계가 있는 의존 관계 명령을 추출하고, 이러한 의존 관계를 병렬화 실행부(24)에 통지하는 기능을 구비한다. 병렬화 후보 명령 추출부(23)는, 공급된 중간 코드를 바탕으로 하여, 동시에 실행, 즉 병렬화가 가능한 병렬화 후보 명령의 조합을 추출하고, 추출된 조합을 병렬화 실행부(24)에 통지하는 기능을 구비한다. 어떤 명령과 다른 명령이 병렬화가능한가 아닌가의 판정은, 미리 병렬화가능한 명령의 조합이 설정된 병렬화 가능 명령 테이블(26)을 참조하는 것으로 행해진다.
병렬화 실행부(24)는, 의존 관계 명령 추출부(22)로부터 통지된 의존 관계와, 병렬화 후보 명령 추출부(23)로부터 통지된 병렬화 후보 명령을 바탕으로 하여, 병렬화 후보 명령인 2개의 명령의 이동 위치를 획정해서 중간 코드에 대하여 병렬화를 실행하는 기능을 구비한다. 명령 코드 생성부(25)는, 병렬화 실행부(24)에 의해 병행화가 행해진 중간 코드를 바탕으로 하여 재차 일반적인 컴파일러 처리에 의해 명령 코드를 생성하는 기능을 구비한다.
이때, 프로그램 변환장치(20)는, 1개의 퍼스널컴퓨터 등의 전자계산기에 의해 실현되어도 된다. 그 경우, 중간 코드 생성부(21)와, 의존 관계 명령 추출부(22)와, 병렬화 후보 명령 추출부(23)와, 병렬화 실행부(24)와, 명령 코드 생성 부(25)는, 1개의 컴파일러 프로그램(30)으로서 컴퓨터인 프로그램 변환장치(20)를 기능시키게 된다.
도 3은, 도 2에 표시된 병렬화 가능 명령 테이블의 설정예를 나타내고 있다. 도시된 것과 같이 병렬화 가능 명령 테이블(26)에 있어서, 예를 들면 명령 A의 메모리 전송 명령과, 명령 B의 산술연산 명령, 논리연산 명령 및 시프트 연산 명령이 병렬화가능한 것으로 설정된다. 명령의 종류의 예로서 어셈블러 언어에 있어서의 표기가 도면 우측에 표시되어 있다.
도 4는, 제1 실시예에 있어서의 병렬화의 처리 순서를 보이고 있다. 전제로서, 소스 코드가 프로그램 변환장치에 입력되고, 상기 소스 코드가 프로그램 변환장치에 포함되는 중간 코드 생성부(도 2 참조)에 의해 중간 코드로 이미 변환된 것으로 한다. 이 병렬화의 처리 순서는, 프로그램 변환장치에 포함되는 의존 관계 명령 추출부, 병렬화 후보 명령 추출부 및 병렬화 실행부(도 2 참조)에 의해 실행된다.
우선, 중간 코드에 포함되는 명령마다 의존 관계 명령을 추출한다(스텝 S1).여기에서, 의존 관계 명령이란, 어떤 명령에 대해서 해당 명령에 선행해서 그것의 실행 조건을 제공하는 의존 관계를 가지는 명령 혹은 해당 명령에 후행해서 그것의 실행 결과를 따르는 의존 관계를 가지는 명령을 의미한다.
스텝 S1에 병행하여, 또는 이 다음에, 중간 코드로부터 병렬화가 가능한 명령의 조합을 추출한다(스텝 S2). 병렬화 가능인가 아닌가의 판정은, 병렬화 가능 명령 테이블을 참조해서 병렬화가능한 명령의 조합인지의 여부를 판정하는 것으로 행해진다. 이어서, 병렬화가능한 명령의 조합 중에서 병렬화의 대상이 되는 병렬화 후보 명령의 조합의 2개의 명령을 추출한다(스텝 S3). 즉, 병렬화가 가능한 명령 중에서 의존 관계 명령을 서로 포함하는지 않는 2개의 명령의 조합을 추출한다.
다음에, 상기 2개의 명령 중에서 이동가능한 명령을 판별한다(스텝 S4). 구체적으로는, 우선 상기 2개의 명령의 어느 것을 다른 쪽의 위치로 이동하는 것이 가능인가 아닌가를 판정함에 의해 이동가능한 명령을 판별한다(스텝 S41). 이 경우, 상기 2개의 명령의 실행 위치 사이에, 이동하려고 하는 명령에 대응하는 의존 관계 명령이 없을 경우에는 해당 이동하려고 하는 명령은 다른 쪽의 위치로 이동 가능하다고 판별한다. 이어서, 종래의 방법과 같은 방법으로 스텝 S5의 병렬화를 실행한다.
한편, 이동 가능이 아니라고 판별했을 경우에는, 2개의 명령의 각각의 공통 이동 가능 범위로 이동할 수 있는가 아닌가를 판정한다(스텝 S42). 즉, 2개의 명령마다 해당 명령의 의존 관계 명령의 실행 위치에 기초하여 이동 가능 범위를 산출해 낸다. 명령의 이동 가능 범위란 해당 명령에 있어서 선행하는 의존 관계 명령의 다음의 실행 위치부터 후행하는 의존 관계 명령의 실행 위치의 직전까지이다. 그리고, 상기 2개의 명령의 이동 가능 범위의 중복하는 위치, 즉 공통 이동 가능 범위를 추출한다. 중복하는 위치가 복수 있는 경우에도 1개의 위치가 추출된 시점에서 추출을 종료하면 된다. 만약, 공통 이동 가능 범위가 있을 경우에는, 그 공통 이동 가능 범위의 예를 들면 선두위치에 있어서 병렬화를 실행한다(스텝 S5). 한편, 공통 이동 가능 범위가 없을 경우에는, 해당 2개의 명령에 관해서는 병렬화가 불가 능하다고 판정해서 스텝 S3으로 되돌아가, 다른 병렬화 후보 명령의 2개의 명령을 새롭게 추출한다.
스텝 S5의 병렬화의 실행은, 상기 2개의 명령 중에서 어느 한쪽을 다른 쪽의 위치로 이동하거나, 혹은 상기 2개의 명령을 모두 공통 이동 가능 범위 내의 동일위치로 이동함으로써 병렬화를 실현한다(스텝 S5). 이상의 병렬화 실행의 순서는, 처리 대상이 된 중간 코드의 모두에 대해서 행해지고, 병렬화에 의한 수정이 행해진 중간 코드는 명령 코드 생성부에서 변환되어서 명령 코드가 생성된다.
도 5는, 도 3에 표시된 처리 순서에 있어서 명령을 이동하는 형태를 설명하고 있다. 도 5a를 참조하면, INSTP2과 INSTP5은 도 4에 도시된 순서 스텝 S1∼S3에 의해 산출된 병렬화가능한 2개의 명령의 조합이다. 그러나, INSTP2은, INSTN4과의 사이의 의존 관계에 의해 INSTP5의 위치로 이동 할 수 없고, 또한, INSTP5은, INSTN3과의 사이의 의존 관계에 의해 INSTP2의 위치로 이동 할 수 없기 때문에, 공통 이동 가능 위치의 추출 처리의 순서(스텝 S42)가 실행되게 된다.
도 5b를 참조하면, 상기한 구체예에서 설명을 위한 위치 식별 이름을 부가한 것이 표시되어 있다. 여기에서, INSTP2의 이동 가능 범위는, 상기 예의 「위치 A」로부터 「위치 D」의 범위이다. 또한, INSTP5의 이동 가능 위치는 「위치 D」로부터 「위치 F」의 범위이다. 따라서, INSTP2과 INSTP5의 이동 가능 범위의 중복 부분으로서 「위치 D」가 산출된다. 따라서, 양 명령을 공통되는 이동 가능 위치인 「위치 D」로 이동함으로써 병렬화를 행할 수 있다.
이상의 제1 실시예에 있어서, 본 발명에 따른 프로그램 변환장치 및 컴파일 러 프로그램을 적용함으로써, 종래에는, 병렬화의 대상이 되는 2개의 명령 사이에 의존 관계가 있는 명령이 존재하고 있음으로써, 이동 불가능하다고 판정되어 병렬화가 행해지지 않은 경우에도, 2개의 명령에 중복되는 이동 가능 범위가 있으면 병렬화를 행할 수 있다. 이에 따라, 보다 철저한 프로그램의 실행 고속화가 도모된다.
<제2 실시예>
도6은, 제2 실시예에 있어서의 병렬화의 처리 순서를 나타내고 있다. 제2 실시예는, 제1 실시예에 있어서의 동일한 장치 구성(도 2 참조)에 있어서 제1 실시예 에 있어서와는 다른 처리 순서를 포함하는 구성이다. 즉, 명령 이동을 복수의 명령으로 이루어지는 세트 단위로 이동을 행하는 것이다. 이 방법에서는, 제1 실시예에 있어서 나타낸 병렬화 순서 중의, 스텝 S4의 「이동가능한 명령 추출 처리」에 있어서, 병렬화 후보 명령인 2개의 명령의 어느쪽도 이동할 수 없다고 판별되었을 경우에, 2개의 명령 중 한쪽의 명령을, 그 명령과 의존 관계가 있는 명령군의 세트 단위로 정리해서 이동함으로써 2개의 명령의 병렬화를 행하는 것이다.
도 6을 참조하면, 이동가능한 명령의 추출에 관련되는 처리 순서만 도시되어 있다. 전제로서, 제1 실시예에 있어서의 스텝 S1∼S3의 처리 순서는 이미 행해지고 있는 것으로 한다. 즉, 병렬화 후보 명령의 적어도 1개의 조합이 추출되어 있는 것으로 한다.
그래서, 병렬화 후보 명령의 2개의 명령 중 어느 것을 다른 쪽의 위치로 이 동하는 것이 가능한가 아닌가가 제1 실시예의 경우와 같은 방법으로 판정된다(스텝 S41). 이동 가능이 아니라고 판정되었을 경우에는 2개의 명령의 공통 이동 가능 범위로 이동할 수 있는가 아닌가가 판정된다(스텝 S42). 스텝 S41 및 S42의 어느 하나에 있어서 이동 가능하다고 판정되면, 스텝 S5에 있어서의 세트 단위의 병렬화를 실행한다.
한편, 스텝 S42에 있어서 공통 이동 가능 범위가 없다고 판정되었을 경우, 2개의 명령에 대해서 세트 단위로 다른 쪽의 위치로 이동 가능한가 아닌가를 판정한다(스텝 S43). 만약, 세트 단위로 이동 가능이 아니라고 판정되었을 경우에는, 해당 2개의 명령에 관한 병렬화를 단념하고 스텝 S3로 되돌아가, 새롭게 병렬화 후보 명령을 추출한다. 한편, 세트 단위로 이동가능하다고 판정되었을 경우에는, 해당 2개의 명령에 대해서 세트 단위의 병렬화를 행하기 위해 스텝 S5의 병렬화의 실행을 행할 수 있다. 이하에 그 구체적인 예를 설명한다.
도7a에 도시된 것과 같이, 전제로서, INSTP1과 INSTP4은 이미 스텝 4 이전의 순서에 의해 추출된 병렬화 후보 명령인 2개의 명령의 조합이다. INSTP1의 이동 가능 범위는, 「위치 A」로부터 「위치 B」의 범위이다. 또한, INSTP4의 이동 가능 위치는 「위치 D」로부터 「위치 E」의 범위이다. 따라서, INSTP1과 INSTP4의 이동 가능 범위의 중복 부분이 없어, 양 명령에 공통되는 이동 가능 위치로의 이동에 의한 병렬화가 불가능하다고 판별되고 있다.
도 7b에 도시된 것과 같이, INSTP1 및 INSTP4의 각각의 의존 관계로부터 명령의 세트가 설정된다. INSTP1 및 이것과 의존 관계에 있는 INSTN2과의 세트 1, INSTP4 및 이것과 의존 관계에 있는 INSTN3의 세트 2, 및 INSTP4 및 이것과 의존 관계에 있는 INSTN5의 세트 3이 설정된다. 그리고, INSTP1과 INSTP4을 병렬화하기 위한 이동 위치 후보를 세트마다 설정한다. INSTP1과 INSTP4을 같은 명령 실행 위치로 하기 때문에, 세트 1의 이동 위치 후보는 「위치 E」, 세트 2의 이동 위치 후보는 「위치 A」, 그리고 세트 3의 이동 위치 후보는 「위치 B」가 된다.
다음에, 각 세트가 그 이동 위치 후보에게 이동 가능한가 아닌가를 판별한다. 이 판별은, 각 세트에 포함되는 각 명령에 대해서 해당 명령으로부터 세트의 이동 위치 후보까지의 사이에, 해당 명령의 세트를 제외한 다른 세트 내에 해당 명령에 대응하는 의존 관계 명령이 있는가 아닌가를 주사하는 것에 의해 행해진다.
세트 1에 대해서 주사하면, INSTP1 또는 INSTN2의 위치부터 「위치 E」의 사이에 의존 관계 명령이 존재하지 않기 때문에, 세트 1은 「위치 E」로 이동가능하다고 판별된다. 세트 2에 대해서 주사하면, INSTN3 또는 INSTP4의 위치부터 「위치 A」의 사이에 의존 관계 명령이 존재하지 않기 때문에, 세트 2는 「위치 A」로 이동가능하다고 판별된다. 세트 3에 대해서 주사하면, INSTP4 또는 INSTN5의 위치부터 「위치 B」의 사이에 INSTP4에 있어서 의존 관계 명령인 INSTN3이 있기 때문에, 세트 3은 「위치 B」에는 이동할 수 없다고 판별된다. 따라서, 세트1과 세트2를 이동함으로써 병렬화가 가능하다고 판별된다. 이 경우, 예를 들면 먼저 판별된 「세트 1을 위치 E로 이동한다」를 채용하여, INSTP1과 INSTP4의 병렬화를 행하는 것으로 한다.
도8은, 도 6에 도시된 처리 순서가 실행됨으로써 얻어지는 병렬화의 실제 예 를 나타내고 있다. 리스트 L1에 대해서 보면 병렬화전의 중간 코드의 기술 예가 도시되어 있다. 여기에서, 세트 1에 속하는 MOVX 명령(명령 1)과 세트 2에 속하는 SUB 명령(명령 4)이 병렬화 후보 명령이다. 리스트 L2를 보면 리스트 L1의 내용을 병렬화한 후의 중간 코드가 표시되어 있다. 여기에서, MOVX 명령(명령 1)과 SUB 명령(명령 4)은 가로로 병기된다. 이에 따라, 명령 1과 명령 4는 동시에 실행되게 된다.
이상의 제2 실시예에 있어서, 본 발명에 따른 프로그램 변환장치 및 컴파일러 프로그램을 적용함으로써, 제1 실시예에 있어서와 같이 공통 이동 가능 범위가 없기 때문에 병렬화가 행해지지 않는 경우에도, 병렬화 후보 명령을 의존 관계 명령과 세트 단위로 이동하는 것이 가능하면 병렬화를 행할 수 있다. 이에 따라, 더욱 철저한 병렬화가 실현된다.
이상의 복수의 실시예에 있어서는, 소스 코드를 C 언어에 의해 기술된 예에 관하여 설명되었지만, 본 발명에 관한 한정은 없으며 소스 코드는 C 언어 이외의 다양한 프로그램 언어에 의해 기술되어 있어도 된다. 또한, 명령 코드는 전자 계산기에 제공되는 명령 코드로 해서 설명되었지만, 본 발명에 있어서의 명령 코드는, 병렬화 아키텍쳐의 프로세서에 제공되는 명령 코드이면 되며, 퍼스널컴퓨터나 서버 컴퓨터 뿐만 아니라, 특정한 기능 장치에 삽입되어서 특화된 처리 기능을 실현하는 DSP(Digital Signal Processor)에 제공되는 명령 코드라도 된다.
도 1은 종래의 방법에 있어서의 명령 실행 순서의 병렬화의 구체적인 예를 도시한 도면이다.
도 2는 제 1 실시예를 나타내고, 프로그램 변환장치를 포함하는 전체의 구성을 나타낸 블록도이다.
도 3은 도 2에 도시된 병렬화 가능 명령 테이블의 설정예를 도시한 도면이다.
도 4는 제1 실시예에 있어서의 병렬화의 처리 순서를 나타내는 흐름도이다.
도 5는 도 3에 도시된 처리 순서에 있어서 명령을 이동하는 모양을 설명하는 설명도이다.
도 6은 제2 실시예에 있어서의 병렬화의 처리 순서를 나타내는 흐름도이다.
도7a는 도 6에 도시된 처리 순서에 있어서 전제가 되는 명령 배열을 설명하는 설명도이다.
도 7b는 도 6에 도시된 처리 순서에 있어서 세트 단위에 명령 이동을 행하는 형태를 설명하는 설명도이다.
도 8은 도 6에 도시된 처리 순서가 실행됨으로써 얻어지는 병렬화의 실제 예를 나타낸 도면이다.
* 도면의 주요부분에 대한 부호의 설명 *
10: 소스 코드
20: 프로그램 변환장치
21: 중간 코드 생성부
22: 의존 관계 명령 추출부
23: 병렬화 후보 명령 추출부
24: 병렬화 실행부
25: 명령 코드 생성부
26: 병렬화 가능 명령 테이블
30: 컴파일러 프로그램
40: 명령 코드
Claims (6)
- 프로그램 소스 코드를 명령 코드로 변환하는 프로그램 변환장치로서,상기 프로그램 소스 코드를 변환해서 복수의 명령을 포함하는 중간 코드를 생성하는 중간 코드 생성수단과,상기 중간 코드로부터, 2개의 병렬화 후보 명령으로 이루어지는 적어도 1개의 조합을 추출하는 병렬화 후보 명령 추출 수단과,상기 병렬화 후보 명령마다, 해당 병렬화 후보 명령과 의존 관계를 가지는 의존 관계 명령을 상기 중간 코드로부터 추출하는 의존 관계 명령 추출 수단과,상기 병렬화 후보 명령마다, 해당 병렬화 후보 명령에 대해서 추출된 의존 관계 명령의 실행 위치에 기초하여 해당 병렬화 후보 명령의 이동 가능 범위를 판별하는 이동 가능 범위 판별 수단과,상기 2개의 병렬화 후보 명령의 공통 이동 가능 범위에 포함되는 1개의 실행 위치로 상기 2개의 병렬화 후보 명령을 이동함으로써 상기 중간 코드를 수정하고, 수정한 중간 코드를 변환함으로써 상기 명령 코드를 생성하는 명령 코드 생성수단을 포함하는 것을 특징으로 하는 프로그램 변환장치.
- 제 1항에 있어서,상기 의존 관계 명령 추출 수단은, 해당 병렬화 후보 명령에 선행해서 그것의 실행 조건을 제공하는 의존 관계를 가지는 명령 혹은 해당 병렬화 후보 명령에 후행해서 그것의 실행 결과를 따르는 의존 관계를 가지는 명령을 상기 의존 관계 명령으로서 추출하는 것을 특징으로 하는 프로그램 변환장치.
- 제 1항 또는 제 2항에 있어서,상기 명령 코드 생성수단은, 상기 공통 이동 가능 범위가 없을 경우에, 상기 병렬화 후보 명령과 이것에 대응하는 의존 관계 명령을 포함하는 명령군을 단위로 하여 실행 위치를 이동함으로써 상기 중간 코드를 수정하는 것을 특징으로 하는 프로그램 변환장치.
- 프로그램 소스 코드를 명령 코드로 변환하는 수단으로서 컴퓨터를 기능시키기 위한 컴파일러 프로그램으로서,상기 프로그램 소스 코드를 변환해서 복수의 명령을 포함하는 중간 코드를 생성하는 중간 코드 생성수단과,상기 중간 코드로부터, 2개의 병렬화 후보 명령으로 이루어지는 적어도 1개의 조합을 추출하는 병렬화 후보 명령 추출 수단과,상기 병렬화 후보 명령마다, 해당 병렬화 후보 명령과 의존 관계를 가지는 의존 관계 명령을 상기 중간 코드로부터 추출하는 의존 관계 명령 추출 수단과,상기 병렬화 후보 명령마다, 해당 병렬화 후보 명령에 대해서 추출된 의존 관계 명령의 실행 위치에 기초하여 해당 병렬화 후보 명령의 이동 가능 범위를 판별하는 이동 가능 범위 판별 수단과,상기 2개의 병렬화 후보 명령의 공통 이동 가능 범위에 포함되는 1개의 실행 위치로 상기 2개의 병렬화 후보 명령을 이동함으로써 상기 중간 코드를 수정하고, 수정한 중간 코드를 변환함으로써 상기 명령 코드를 생성하는 명령 코드 생성수단을 기능시키는 것을 특징으로 하는 컴파일러 프로그램.
- 제 4항에 있어서,상기 의존 관계 명령 추출 수단은, 해당 병렬화 후보 명령에 선행해서 그것의 실행 조건을 제공하는 의존 관계를 가지는 명령 혹은 해당 병렬화 후보 명령에 후행해서 그것의 실행 결과를 따르는 의존 관계를 가지는 명령을 상기 의존 관계 명령으로서 추출하는 것을 특징으로 하는 컴파일러 프로그램.
- 제 4항 또는 제 5항에 있어서,상기 명령 코드 생성수단은, 상기 공통 이동 가능 범위가 없을 경우에, 상기 병렬화 후보 명령과 이것에 대응하는 의존 관계 명령을 포함하는 명령군을 단위로 하여 실행 위치를 이동함으로써 상기 중간 코드를 수정하는 것을 특징으로 하는 컴파일 러 프로그램.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007211289A JP2009048252A (ja) | 2007-08-14 | 2007-08-14 | プログラム変換装置及びコンパイラプログラム |
JPJP-P-2007-00211289 | 2007-08-14 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20090017400A true KR20090017400A (ko) | 2009-02-18 |
Family
ID=40364006
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020080033556A KR20090017400A (ko) | 2007-08-14 | 2008-04-11 | 프로그램 변환장치 및 컴파일러 프로그램 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20090049434A1 (ko) |
JP (1) | JP2009048252A (ko) |
KR (1) | KR20090017400A (ko) |
CN (1) | CN101369235A (ko) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101245494B1 (ko) * | 2011-01-06 | 2013-03-25 | 대한민국(환경부 국립환경과학원장) | 배열의 병렬화 포인트 탐색 방법 및 장치 |
KR102236700B1 (ko) * | 2019-11-18 | 2021-04-05 | 연세대학교 산학협력단 | 패킷 프로세싱 프로그램 병렬화 컴파일 장치 및 방법 |
KR20220079692A (ko) * | 2019-12-12 | 2022-06-13 | 미쓰비시덴키 가부시키가이샤 | 데이터 처리 실행 장치, 데이터 처리 실행 방법 및 기록 매체에 저장된 데이터 처리 실행 프로그램 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPWO2008072334A1 (ja) * | 2006-12-14 | 2010-03-25 | 富士通株式会社 | コンパイル方法及びコンパイラ |
EP2361408A4 (en) * | 2008-12-01 | 2012-05-23 | Kpit Cummins Infosystems Ltd | METHOD AND SYSTEM FOR PARALLELIZING SEQUENCEL COMPUTER PROGRAM CODES |
CN102662720B (zh) * | 2012-03-12 | 2015-01-28 | 天津国芯科技有限公司 | 一种多发射嵌入式处理器编译器的优化方法 |
GB2514618B (en) * | 2013-05-31 | 2020-11-11 | Advanced Risc Mach Ltd | Data processing systems |
CN103870310B (zh) * | 2014-02-18 | 2017-07-14 | 小米科技有限责任公司 | 程序编译方法及相关装置 |
CN107003884B (zh) * | 2014-12-04 | 2019-12-24 | 华为技术有限公司 | 编译器以及用于编译源代码的方法 |
CN104866369B (zh) * | 2015-05-22 | 2018-05-08 | 广州华多网络科技有限公司 | 一种数据处理的方法以及装置 |
WO2017107154A1 (zh) * | 2015-12-24 | 2017-06-29 | 华为技术有限公司 | 一种矩阵运算的源到源转换方法及源到源编译器 |
CN111125644B (zh) * | 2018-11-01 | 2022-05-27 | 百度在线网络技术(北京)有限公司 | 应用产品的信息隐藏方法和装置 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS58149570A (ja) * | 1982-02-27 | 1983-09-05 | Fujitsu Ltd | ベクトル命令のスケジユ−リング処理方式 |
JPS6336337A (ja) * | 1986-07-30 | 1988-02-17 | Nec Corp | スカラ/ベクトル命令の融合スケジユ−リング処理方式 |
JP3175768B2 (ja) * | 1990-06-19 | 2001-06-11 | 富士通株式会社 | 複合型命令スケジューリング処理装置 |
JP3311462B2 (ja) * | 1994-02-23 | 2002-08-05 | 富士通株式会社 | コンパイル処理装置 |
US6139199A (en) * | 1997-06-11 | 2000-10-31 | Sun Microsystems, Inc. | Fast just-in-time (JIT) scheduler |
US6988183B1 (en) * | 1998-06-26 | 2006-01-17 | Derek Chi-Lan Wong | Methods for increasing instruction-level parallelism in microprocessors and digital system |
US6526572B1 (en) * | 2000-02-09 | 2003-02-25 | Hewlett-Packard Company | Mechanism for software register renaming and load speculation in an optimizer |
JP3641997B2 (ja) * | 2000-03-30 | 2005-04-27 | 日本電気株式会社 | プログラム変換装置及び方法並びに記録媒体 |
US6651247B1 (en) * | 2000-05-09 | 2003-11-18 | Hewlett-Packard Development Company, L.P. | Method, apparatus, and product for optimizing compiler with rotating register assignment to modulo scheduled code in SSA form |
JP3902147B2 (ja) * | 2003-03-04 | 2007-04-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体 |
US7689958B1 (en) * | 2003-11-24 | 2010-03-30 | Sun Microsystems, Inc. | Partitioning for a massively parallel simulation system |
JP4778286B2 (ja) * | 2005-09-28 | 2011-09-21 | パナソニック株式会社 | コンパイラ装置 |
US20090125894A1 (en) * | 2007-11-14 | 2009-05-14 | Nair Sreekumar R | Highly scalable parallel static single assignment for dynamic optimization on many core architectures |
-
2007
- 2007-08-14 JP JP2007211289A patent/JP2009048252A/ja active Pending
-
2008
- 2008-04-11 KR KR1020080033556A patent/KR20090017400A/ko not_active Application Discontinuation
- 2008-06-20 CN CNA2008101269630A patent/CN101369235A/zh active Pending
- 2008-06-20 US US12/142,815 patent/US20090049434A1/en not_active Abandoned
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101245494B1 (ko) * | 2011-01-06 | 2013-03-25 | 대한민국(환경부 국립환경과학원장) | 배열의 병렬화 포인트 탐색 방법 및 장치 |
KR102236700B1 (ko) * | 2019-11-18 | 2021-04-05 | 연세대학교 산학협력단 | 패킷 프로세싱 프로그램 병렬화 컴파일 장치 및 방법 |
KR20220079692A (ko) * | 2019-12-12 | 2022-06-13 | 미쓰비시덴키 가부시키가이샤 | 데이터 처리 실행 장치, 데이터 처리 실행 방법 및 기록 매체에 저장된 데이터 처리 실행 프로그램 |
Also Published As
Publication number | Publication date |
---|---|
JP2009048252A (ja) | 2009-03-05 |
CN101369235A (zh) | 2009-02-18 |
US20090049434A1 (en) | 2009-02-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20090017400A (ko) | 프로그램 변환장치 및 컴파일러 프로그램 | |
US11216258B2 (en) | Direct function call substitution using preprocessor | |
JP6141365B2 (ja) | 逐次コンピュータプログラムコードを並列処理する方法及びシステム | |
KR101279179B1 (ko) | 병렬 프로그램 생성 방법 | |
TWI463404B (zh) | 編譯系統以及編譯方法 | |
JPH0667868A (ja) | アルゴリズムを記号評価する方法およびアルゴリズムをトランスレートする装置 | |
JP2015084251A (ja) | ソフトウェア・アプリケーションの性能向上 | |
JPH11242597A (ja) | Javaバイトコードデータのフローグラフの生成方法 | |
JP3651774B2 (ja) | コンパイラ及びそのレジスタ割付方法 | |
CN105988854B (zh) | 动态编译方法及装置 | |
US8117604B2 (en) | Architecture cloning for power PC processors | |
Bahmann et al. | Perfect reconstructability of control flow from demand dependence graphs | |
Sun et al. | WCCV: Improving the vectorization of IF-statements with warp-coherent conditions | |
Hohenauer et al. | Retargetable code optimization with SIMD instructions | |
WO2017204139A1 (ja) | データ処理装置、データ処理方法、およびプログラム記録媒体 | |
JP5215813B2 (ja) | プログラム変換方法及びプログラム変換装置 | |
Posadas et al. | Accelerating host-compiled simulation by modifying ir code: Industrial application in the spatial domain | |
Shao et al. | A survey of available information recovery of binary programs based on machine learning | |
Liu et al. | Towards a universal and portable assembly code size reduction: A case study of RISC-V ISA | |
Posadas Cobo et al. | Accelerating host-compiled simulation by modifying IR code: industrial application in the spatial domain | |
JP2019219992A (ja) | 計算機システム、計算機処理方法及び計算機処理プログラム | |
Gasper et al. | Automatic parallelization of sequential C code | |
JP3551352B2 (ja) | ループ分割方法 | |
Almghawish et al. | An automatic parallelizing model for sequential code using Python | |
CN118363606A (zh) | 一种PHP OPCache反编译方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
WITN | Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid |