KR20070040805A - 비순환 패턴 인식 방법 - Google Patents

비순환 패턴 인식 방법 Download PDF

Info

Publication number
KR20070040805A
KR20070040805A KR1020077002473A KR20077002473A KR20070040805A KR 20070040805 A KR20070040805 A KR 20070040805A KR 1020077002473 A KR1020077002473 A KR 1020077002473A KR 20077002473 A KR20077002473 A KR 20077002473A KR 20070040805 A KR20070040805 A KR 20070040805A
Authority
KR
South Korea
Prior art keywords
program
variable
function
value
statement
Prior art date
Application number
KR1020077002473A
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 샌드브리지 테크놀로지스, 인코포레이티드
Publication of KR20070040805A publication Critical patent/KR20070040805A/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/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • 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/44Arrangements for executing specific programs
    • 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms

Abstract

본 발명은 최적화 컴파일러에 의해, 지정된 프로그램 내 어떤 변수가 상기 프로그램내의 지정된 변수들(x, y, ...)에 적용되는 지정된 수학적 함수(f(x,y,...))와 동일한지 여부를 결정하는 방법에 관한 것이다. 이 방법은: 입력들(x, y, ...)의 비트로 구성된 부울 함수로 상기 함수(f(x,y,..))의 비트 값들을 표현하는 단계와; 모든 변수(v)와 프로그램 문장(s)에 대해, 상기 프로그램 문장(s)이 실행될 때, 상기 입력들(x, y, ...)의 비트로 구성된 부울 함수(V(s,v)(x, y, ...))로 상기 변수(v)가 취한 값을 표현하는 단계와; 모든 프로그램 문장(s)에 대해, 상기 프로그램 문장이 수행되는 조건이 상기 입력( x, y, ...)의 비트로 구성된 부울 함수(C(s)(x, y, ...))로 표현하는 단계와; 그리고 부울 만족성 오라클을 이용하여, 상기 지정된 변수(v)와 프로그램 문장(s)에 대해, 부울 표현(C(s)(x,y,...) -> V(s,v)(x,y… )=f(x,y,...))을 유지하도록 결정하는 단계를 포함한다. 다른 실시예로, 본 발명에 따른 방법은 대응하는 선언(Pj(x, y,...))을 가지는 복수의 함수들(fj(x,y,..)로 상기 함수(f(x,y,...))의 값을 표현하는 단계와; 모든 변수(v)와 프로그램 문장(s)에 대해, 상기 프로그램 문장(s)가 수행될 때 상기 변수(v)가 취한 값을 각각 상기 선언(Pj(x,y,..)에 대한 복수의 함수들(Vj(s,v)(x,y,...))로 표현하는 단계와; 모든 프로그램 문장(s)에 대하여, 상기 프로그램 문장이 수행되는 조건을 각각 선언(Pj(x,y,..))에 대한 복수의 함수들(Cj(s)(x,y,...))로 표현하는 단계와; 그리고 상기 선언(Pj(x,y,..)) 및 상기 조 건(Cj(s)(x,y,...)이 참일 때마다, 상기 지정된 변수(v)와 프로그램 문장(s)에 대해 'Vj(s,v)(x,y,...)= fj(x,y… )'인지 여부를 결정하는 단계를 포함한다.

Description

비순환 패턴 인식 방법{METHOD FOR RECOGNITION OF ACYCLIC PATTERNS}
본 발명은 프로그램 내의 명령을 패턴 인식하기 위한 것으로, 더 구체적으로는 최적 컴파일러에 의해 비순환 패턴을 인식하기 위한 것이다.
참조문헌 목록이 마지막에 나열되며, 이는 본 발명을 이해하고 구현하는 데 필요하므로 이 명세서에 포함된다.
미디어 및 디지털 신호 처리 애플리케이션에 고정 소수점 포화 산술 연산이 널리 사용된다. 이진 B-비트 보수 연산(OP)이라 하면, 이의 포화 카운터파트(counterpart)가 오버플로우(overflow)를 검출하고 그 결과를 대표 숫자 범위의 제한 값으로 설정한다.
MaxB if OP(x,y) overflows
OPsat (x,y) = MinB if OP}(x,y) underflows (1)
OP(x,y) otherwise
GSM 표준의 음성 코덱이 포화 산술 연산의 방식으로 표현된다(Refs 1 and 2). 다수의 현대적인 프로세서 구조물(가령, TI C6x, Intel IA-32 및 ARM)들이 포 화 산술 명령들을 실행한다.
표준 프로그램 언어(예, ANSI C)는 포화 산술 연산을 위한 오퍼레이터들을 제공하지 않는다. 일반적으로, 애플리케이션 개발자들은 기본적인 이진 보수 산술 연산의 방식으로 이러한 연산을 수행하는 함수나 매크로로 구성된 라이브러리를 포함한다. 지정된 아키텍쳐(architecture)에서 고성능을 얻기 위해서, 이러한 라이브러리는 어셈블리에서 암호화되거나, 벤더 특정 라이브러리(vendor-specific libraries) 또는 언어 확장을 사용하여 암호화된다. 이는 명백히 소프트웨어 개발 및 유지를 복잡하게 한다. 다양한 언어 확장 및 표준들이 제안되어 왔다(Ref. 3). 그러나 개발된 벤더들을 표준화하는 데에 대한 통상적인 저항을 감안하면, 이들의 미래가 불투명하다. 따라서, 프로그래머들에게 이식 가능성과 효율성 사이에서 타협을 강요받는다.
이러한 타협 과제를 해결하는 방식은 컴파일러가 자동으로 코드 단편(fragment)을 인식하도록 하는 것이다. 이러한 코드 단편는 포화 산술 연산을 수행하고 이들을 적합한 기계 명령으로 변환한다. 이러한 해결 방식을 유효하게 하도록, 인식 알고리즘이 강력해야하고 서로 다른 코딩 스타일들에 걸쳐 동작하여야 한다. 이는 추상 구문 트리(abstract syntax trees)에 대한 간단한 패턴 매칭으로 시작할 수 있다.
그러나, 이러한 접근법의 한계는 분명하다. 왜냐하면, 포화 덧셈연산의 다양한 구현 예를 고려할 수 있기 때문이다. 미국 특허 출원 제10/382,578호에 예들이 기술되어 있다. 입증을 위해, 두 개의 포화 덧셈 명령들이 식 (1)의 정의에 대 해 등가(equivalent)라는 것을 입증하기 위해, 다양한 비트 조작 및 논리 연산들로 이루어진 시퀀스의 결과들 사이의 등가성을 증명할 필요가 있다. 애드-혹(ad-hoc) 접근법 대신에, 전형적인 대수 기반을 가지는 방법이 필요하다.
미국 특허 출원 제10/382,578호에, 포화 덧셈 및 뺄셈을 인식하는 방법이 상세히 기술되어 있다. 본 발명은 이러한 출원에 포함된 원리들이 어떠한 비순환 연산 동작에도 적용 가능하다는 것을 인정하며, 일반적인 용어로 표현될 수 있다.
본 발명은 최적화 컴파일러에 의해, 지정된 프로그램 내 어떤 변수가 상기 프로그램내의 지정된 변수들(x, y, ...)에 적용되는 지정된 수학적 함수(f(x,y,...))와 동일한지 여부를 결정하는 방법에 관한 것이다. 이 방법은: 입력들(x, y, ...)의 비트로 구성된 부울 함수로 상기 함수(f(x,y,..))의 비트 값들을 표현하는 단계와; 모든 변수(v)와 프로그램 문장(s)에 대해, 상기 프로그램 문장(s)이 실행될 때 상기 변수(v)가 취한 값을 상기 입력들(x, y, ...)의 비트로 구성된 부울 함수(V(s,v)(x, y, ...))로 표현하는 단계와; 모든 프로그램 문장(s)에 대해, 상기 프로그램 문장이 수행되는 조건이 상기 입력( x, y, ...)의 비트로 구성된 부울 함수(C(s)(x, y, ...))로 표현하는 단계와; 그리고 부울 만족성 오라클을 이용하여, 상기 지정된 변수(v)와 프로그램 문장(s)에 대해, 부울 표현(C(s)(x,y,...) -> V(s,v)(x,y...)=f(x,y,...))을 유지하도록 결정하는 단계를 포함한다. 다른 실시예로, 본 발명에 따른 방법은 대응하는 선언(Pj(x, y,...))을 가지는 복수의 함수들(fj(x,y,..)로 상기 함수(f(x,y,...))의 값을 표현하는 단계와; 모든 변수(v)와 프로그램 문장(s)에 대해, 상기 프로그램 문장(s)가 수행될 때 상기 변수(v)가 취한 값을 각각 상기 선언(Pj(x,y,..)에 대한 복수의 함수들(Vj(s,v)(x,y,...))로 표현하는 단계와; 모든 프로그램 문장(s)에 대하여, 상기 프로그램 문장이 수행되는 조건을 각각 선언(Pj(x,y,..))에 대한 복수의 함수들(Cj(s)(x,y,...))로 표현하는 단계와; 그리고 상기 선언(Pj(x,y,..)) 및 상기 조건(Cj(s)(x,y,...)이 참일 때마다, 상기 지정된 변수(v)와 프로그램 문장(s)에 대해 'Vj(s,v)(x,y,...)= fj(x,y...)'인지 여부를 결정하는 단계를 포함한다.
다른 실시예에서, 상기 하드웨어 명령(t=f(x,y,...))의 실시를 추가하는 단계와; 그리고 상기 하드웨어 명령(t)에 관하여 상기 프로그램 문장(s)에서 상기 변수(v)의 값이 상기 함수(f(x,y,...))와 같도록 각 프로그램 문장(s)에서 각각의 레퍼런스를 변수(v)로 교체하는 단계에 의하여, 상기 함수(f(x,y,...))의 값을 취하는 각 변수(v)의 값이 상기 유효한 함수(f(x,y,...)에 의해 계산되도록, 상기 프로그램이 변환된다. 여기서, 수학적 함수(f(x, y, ...))가 하드웨어에서 계산가능하며, 함수(f(x,y,...))의 값을 취하는 각 변수(v)의 값이 함수(f(x,y,...))에 대한 유효 하드웨어 명령에 의해 계산되도록 상기 프로그램이 변환된다.
이하에서 첨부된 도면을 참조하여 본 발명의 다양한 측면들이 상세히 설명될 것이다.
도 1은 본 발명에 원리를 구현하는 방법의 일 실시예를 나타내는 흐름도이다.
도 2는 본 발명의 원리를 구현하는 방법의 일 실시예를 나타내는 흐름도이다.
도 3은 일 그룹의 다이어그램과 데이터 흐름을 나타내는 도면이다.
이하의 설명은 발명이 속하는 분야의 기술자가 본 발명을 이용할 수 있도록 하기 위한 것이며, 구체적인 응용 예 및 필수 구성요소들을 포함한다. 첨부된 실시예들에 대해 다양한 변경을 할 수 있음은 당업자에게 자명하며, 여기에 정의된 일반적인 개념들이 본 발명의 사상 및 범위를 벗어나지 않는 한 다른 실시예들 및 응용 예들에 적용될 수 있다. 따라서, 본 발명은 이하의 실시예들에 한정되는 것이 아니며, 이하에 포함된 개념 및 특징들을 포함하는 넓은 범위 포함한다.
포화 산술 연산에 대한 자동 인식에 관한 한 벌의 기술들이 설명될 것이다. 대부분의 경우에, 인식 과제는 단지 하나의 부울 회로 등가성이다. 회로 등가성을 해결을 감안하여, 추상 해석(abstract interpretation)에 근거한 한 세트의 실질적인 근사 방법이 설명된다.
실험에 의하면, 포화 산술에 대한 의존 인식 동안에, 본 발명에 따른 기술은 작은 총 컴파일 시간을 가진다는 것을 알 수 있다. 본 발명에 따른 방법은 포화 산술에 제한을 가하지 않으며, 애드-위드-캐리(add-with-carry) 및 산술 쉬프트와 같은 다른 어구(idiom)들의 인식에 바로 적용가능하다.
포화 연산은 비순환 프로그램 단편(fragments)에 의해 정의될 수 있다. 따라 서, 이들의 결과값 및 중간값들은 입력의 관점에서 비트에 관한(bit-wise) 부울 표현으로 기술할 수 있다. 이러한 결과로 다름과 같은 해결책을 제안한다:
- 비순환 후보 코드 단편이 주어진 경우에, 이의 변수 값들을 표현하는 부울 표현을 추출
- 부울 표현 등가 오라클을 사용하여, 표현들 중 하나가 템플릿(template)과 일치하는 지 여부를 테스트
이러한 방법의 실용성을 테스트하기 위해, 이진 결정 다이아그램 패키지(BuDDy)(ref. 4)를 오라클로 사용하는 포화 덧셈에 대한 인식 알고리즘이 수행된다. 알고리즘은 후보 이진 보수 덧셈 연산(z=x+y)을 추출하고 이와 같은 연산에 의존하는 프로그램 내의 어떤 값들이 이의 포화된 값을 가지는 가를 찾아내는 시도를 한다. 프로그램의 제어 흐름 그래프의 각 에지에 대하여, 알고리즘이 에지가 수행되는 조건을 (가능한 언제든지) 산출한다. 이러한 조건이 x, y의 비트에 대한 부울 함수로 표현된다. 각각의 변수에 대해, 알고리즘이 모든 에지에서의 값을 x, y의 비트들에 대한 부울 함수로 계산한다.
BDD에 기반한 알고리즘의 아웃 라인은 다음과 같다:
ExactMatch ( G : program CFG, OP : the operation to match ) { repeat {
- Pick candidate values x and y
if none found, exit
- Let F be the Boolean expression for the bits of OP(x,y)
- For every edge e and variable v:
- Compute edge condition C(e)
- Compute variable value V(e,v)
- Identify program edges e and variables v such that:
∀x, y: C(e)(x,y) => (F(x,y) = V(e,v)(x,y))
(with Boolean expressions being tested via BDDs)
모든 후보 덧셈 연산(OP(x, y))에 대해, 알고리즘은 포화된 값에 대한 불린 표현 (F(x,y))을 형성한다. 또한, 이는 에지들(e)이 실행되는 조건(C(e))과 변수(V(e,v))의 값들을 후보 연산으로의 입력의 관점에 표현한다. 이후에, 알고리즘이 수행될 때, 알고리즘은 프로그램 위치들(에지들)과 포화된 값을 가지는 변수를 찾는다. 에지 조건들 및 변수 값들의 계산이 표준 추상 해석 과제에 따라 구(phrase)로 표현될 수 있다(Refs. 5, 6 and 7). 이 경우에, 추상 해석의 도메인은 후보 입력들에 대한 한 벌의 모든 부울 함수들이다. 이러한 제 1 실시예에 따른 방법이 도 1에 도시된다.
이러한 제 1 실시예를 이용하여 포화 덧셈을 검출하는 시간이 크다.- 예를 들면, 덧셈이 포화 덧셈임을 입증하는 데에는 각 시도(attempt) 당 10 밀리초가 필요하다. 대부분의 덧셈을 걸러내는 휴리스틱(heuristic)을 추가한 후에도, BDD 사용은 컴파일 시간에 수십 초를 추가할 수 있다. 이러한 방법을 사용하는 포화 곱셈을 인식하기 위한 시도가 있었으나, 처음 곱셈에 대해 BDD를 형성하는 동안 메모리가 초과하였다. 하드웨어 및/또는 부울 표현 등가성 또는 만족성(satisfiability) 오라클이 개선되면, 제 1 실시예는 예를 들면 포화 곱셈에 사용될 수 있다.
현재의 하드웨어 및 부울 해결자를 사용하는 어려움을 감안하여, 포화 산술 연산을 찾기 위한 빠른 근사 알고리즘이 제 2 실시예로 개발되었다. 프로그램 변수들의 값을 나타내는 부울 표현에 대한 근사가 구조화된다. 구조화에 의해, 근사가 크기 면에서 경계가 정해지고 등가성에 대한 테스트가 빠르게 이루어질 수 있다.
지정된 포화 연산(예, 덧셈)이 복수의 구문들(예, 전 범위, 하부 범위)을 사용하여 수행될 수 있으며, 각 구문들은 여러 방법로 수행될 수 있다. 각 구문들이 문장(statement)들과 변수들의 간단한 속성들의 관점에서 표현될 수 있다. 이는, 일반적인 부울 만족성을 해결하지 않고 프로그램 단편들의 등가성을 제공하도록 할 수 있다.
구문 인식의 과제는 다음과 같이 정의될 있다.
- 이진 보수 연산을 계산하는 문장은: z = x OP y 이고,
- 입력 x, y 및 결과 값 z의 관점에서 포화된 값이 정의된다. 이러한 정의는 서술형이어야 한다.
Figure 112007009431547-PCT00001
- OPsat(x,y,z)와 등가인 프로그램의 값들을 확인하는 것이 목표이다.
예를 들어, 전 범위 덧셈 구문이 다음과 같이 정의될 수 있다:
Figure 112007009431547-PCT00002
이하에 표시된 GSM EFR 코덱으로부터의 L_add 함수에서, 라인 14 상의 복귀 문장에서의 L_var_outvariable의 값이 이러한 정의와 일치한다. 이것이 자동으로 입증되는 경우에, 복귀 값이 포화 덧셈 명령을 사용하여 계산된다 (만일 목표 아키텍쳐 상에 이용 가능한 경우에) :
1: Word32 L_add(
2: Word32 L_varl , Word32 L_var2
3: ) {
4: Word32 L_var_out;
5: L_var_out = L_varl + L_var2;
6: if (((L_varl<[Lambda]>L_var2) & MIN_32)= =0)
7: {
8 : if ((L_var_out <[Lambda]> L_var 1 ) & MIN_32)
9: {
10: L__var_out =
11 : (L_varl < 0) ? MIN_32 : MAX_32;
12: }
13: }
14: return NATIVE_ADDS AT(L_var 1 ,L_var2);
15: }
이후에 데드-코드(Dead-code)소거가 최적 코드를 만들어 낸다:
1: Word32 L_add(
2: Word32 L_var 1 , Word32 L_var2
3: ) {
4: return NATIVE_ADDS AT(L_varl , L_var2);
5: }
초기에, 입력 프로그램이 문장들의 제어-흐름 그래프 (G = (N, E))로 대표되는 3-어드레스 형태로 낮춰진다. 노드들은 고유의 시작 노드 및 종결 노드들과 x:= OP (y, z) 형태의 할당 문장들과, IF(x ≠ 0) 형태의 스위치와 그리고 명백한 제어-흐름 병합을 포함한다.
가능한 스칼라 타입이 32-비트 인트(int)와 16-비트 쇼트(short)인 경우에, 도출(derivation)이 다른 비트-폭의 연산(가령, 8-비트 사인드 및 언사인드 픽셀 연산)으로 쉽게 일반화될 수 있다.
프로그램 위치 및 변수들(x 와 y) 주어지며, 그리고 태스크(task)가 지정 함수(f(x,y))의 값을 가지는 프로그램 수행에서 변수(v)를 확인하는 것이다. 의례적으로 다음과 같은 사항을 가정한다.
- 후보 프로그램 에지(e0)와 후보 변수들(x, y)
- 휴리스틱 증거(z). 이 증거(witness)는 선언을 단순화하도록 한다. 포화 연산의 경우에, 보통 증거는 비 포화 연산의 결과값이다.
- 함의(implications)의 선언 명제에 의해 표현되는 패턴 함수(f(x,y,z)):
Figure 112007009431547-PCT00003
목표는 이러한 에지(e)와 변수(v)를 확인하는 것이다. 변수(v)의 값은, 에지(e)가 수행될 때 f(x0,y0,z0)이고, 여기서 x0, y0 및 Z0는 후보 에지(e0)의 가장 최근 수행에서의 후보 변수들의 값이다.
지정된 후보 에지 및 후보 변수들에 대한 이러한 실시예에서, 식(2)의 각 조건에 대하여 추상 해석을 일단 수행한다. 추상 해석의 각각의 연속적인 예에서, 선언(predicate, Pj)이 참을 유지한다는 가정하에, 가변 값들(V(e,a)) 및 에지 조건들 또는 검증문(assertion, A(e))에 대한 근사값을 계산한다.
에지 검증문(A(e))은 후보 값(x, y) 및 증거 값(z)의 함수로 계산된다. 변수 값(V(e,v))은 에지(e)가 수행될 때 변수(v)의 값에 대한 정보를 나타낸다. V(e,v)도 역시 x, y 및 z의 함수이다.
후보 에지(e0)에서 x, y 및 z의 값들을 임시 값들(x0, y0, z0)로 저장하기 위해 프로그램이 조절된다. 그리고 나서, 모든 에지(e)에서 검증문은 (A(e)(x0, y0,z0))이며, 그리고 모든 변수(v)에 대해 검증문은 assert (V===V(e,v)(x0, y0,z0))임을 만족한다.
이러한 정의가 주어지면, 다음을 만족하는 한 변수(a)는 패턴 함수(f(x,y,z))의 값들을 가진다.
∀j:∀x,y,z : (A(e)(x,y,z)[∧]Pj(x,y,z))=>(V(e,a)(x,y,z)=fj(x,y,z)) (3)
달리 말하면, 식(2)의 각 조건(Pj)에 대해 (a) 에지(ㄷ)가 수행되지 않거나 또는 (b) 에지가 수행되는지 테스트 되고, 그리고 변수(a)가 근사 케이스(fj)와 같은지 테스트 된다. 제 2 실시예는 도 2에 도시된다.
검증문(assersion) 및 값들을 근사시키기 위해, 두 개의 래티스(lattice)가 사용된다: 하나는 조건이나 선언에 대한 것이고, 또 하나는 근사값에 대한 것이다.
Φ는 선언들의 래티스를 나타내며, ∧는 값들의 래티스를 나타낸다. 래티스들은 다음의 요건을 만족한다:
- Φ 및 ∧는 최상부 및 최하부 요소를 포함한다. 양쪽 모두는 접합(meet) 연산자와 비교 연산자를 정의하여야 한다. 비교 연산자는 잘-형성된 래티스를 위해 필요하다. 접합 연산자는 프로그램 병합 포인트에서 사용된다.
- Φ는 연언(conjuction), 선언(disjunction) 및 부정(negation)을 정의한다. Φ는 참 값 및 거짓 값을 모두를 포함하여야 한다. Φ는 연언, 선언, 참과 거짓에 대한 일반 대수 규칙이 유지되어야 한다는 점에서 반드시 유효해야한다.
- 중간 프로그램 언어 내의 모든 산술 연산(OP)에 대해, 래티스(∧)는 해석(OP)을 정의하여야 한다:∧x∧->∧.(모든 연산자들이 이진수라고 가정한다)
두 개의 함수가 개별적인 선언(predicate)에 대한 값을 연결한다:
- MayNonZero: ∧->Φ 함수는 값이 제로가 아닌 값이 될 수 있는지를 테스트함.
- MayZero: ∧->Φ 함수는 값이 제로가 될 수 있는지를 테스트함.
위의 MayNonZero 및 MayZero 함수들은 반드시 대조되는 결과를 생성할 필요가 없다. 종종, 동시에 값이 가능한 제로가 되게 그리고 가능한 제로가 아닌 값이 되게 근사해야할 필요가 있다.
이와 같은 정의들이 주어지면, 후보 에지(e0)에 관한 에지 검증문(A(e)) 및 가변 값(V(e,a))과, 후보 변수들(x, y) 및 증거(z)의 관점에서 프로그램의 추상 해석 정의된다. 식들은 도 3에 도시된다. 이는 표준 세트의 식들이다. 병합 문장들에 대한 식들이 위그만-제덱(Wegman-Zadeck) 형 일측 조건 전파(one-side conditional propagtion)를 가능하게 한다 (Refs 8 and 9).
전체 알고리즘은 다음과 같이 요약된다:
ApproxMatch (G : program CFG, OP : the operation to match ) \{
repeat \{
- Heuristically pick candidate values x, y and the witness z
if none found, exit
- For each implication Pj(x,y,z)=> fj(x,y,z)(in the pattern function) {
- Assume Pj is true
- Compute edge assertions A(e) and variable values V(e,v) using
abstract interpretation
- Identify edges e and variables v that satisfy:
∀x,y,z:(A(e)(x,y,z)∧Pj(x,y,z))=>(V(e,a)(x,y,z)=fj(x,y,z))
\{\{\{
본 발명에 따른 방법(method)가 곱셈과 전 범위 및 서브 범위 덧셈에 어떻게 적용되는 지에 대한 예시가 다음에 기술된다. 이러한 기술을 포화 뺄셈을 인식에 곧바록 확장한다. 설명될 추가적인 예들은 캐리(carry) 및 산술 쉬프트를 이용한 덧셈 인식을 포함한다. 이 방법은 또한 클리핑(clipping)과 같은 연산에 적용될 수 있다.
A. 전 범위 포화 덧셈(Full-range Saturating Addition)
전 범위 포화 덧셈을 일치시키기 위해, 비 포화 덧셈 연산(z = x + y)을 시작한다. 입력 변수(x, y)는 후보 변수들이다. 출력 변수(z)는 증거(witness)이다. 패턴 함수는:
Figure 112007009431547-PCT00004
오버플로우와 언더플로우 선언은 부호 테스트를 통해 정의될 수 있다.
Figure 112007009431547-PCT00005
이러한 정의에서 비교 연산자들은 32-비트 이의 보수 산술 연산을 이용한다.
전 범위 포화 덧셈의 다양한 구현 예들은 x, y 및 z에 대한 선언들 상에서 갈라지거나 부호 비트들의 비트 조작을 수행한다. 따라서, 에지 검증문들이 부호 비트(그 이상)의 선언문으로 표현된다. 추가로, 모든 변수(v)의 비트에 대한 섹션([p,p+n])이 x, y 및 z의 비트에 대한 섹션([q,q+n])과 동일하다.
래티스(Φ)는 여섯 개의 입력 변수들의 식으로 나타내는 한 세트의 모든 선언이다:
Figure 112007009431547-PCT00006
x의 사인 비트
Figure 112007009431547-PCT00007
y 의 사인 비트
Figure 112007009431547-PCT00008
z 의 사인 비트
Figure 112007009431547-PCT00009
x
Figure 112007009431547-PCT00010
(x = 0) (6)
Figure 112007009431547-PCT00011
y
Figure 112007009431547-PCT00012
(y = 0)
Figure 112007009431547-PCT00013
z
Figure 112007009431547-PCT00014
(z = 0)
값(value) 래티스
Figure 112007009431547-PCT00015
는 두 개의 래티스의 곱으로 형성된다.
-
Figure 112007009431547-PCT00016
는 Φ 내의 선언들의 길이 32인 모든 벡터들의 래티스이다.
Figure 112007009431547-PCT00017
는 x, y, 및 z의 사인 비트 식으로 변수 비트들을 근사하는 데 사용된다.
-
Figure 112007009431547-PCT00018
는 x, y, 및 z의 비트들의 하부 범위로 변수들을 근사시키는데 사용된다. 번수 v를 Xp,q,n으로 근사시킨다는 것은 v의 비트(v[p,p:n])가 x의 비트(x[q,q+n])와 동일하다는 것을 의미한다.
∧의 각 요소들은 <υ,ρ>이며, 여기서, <υ,ρ>는 υ∈
Figure 112007009431547-PCT00019
이고, ρ∈Γ 이다. υ는 벡터 컴포넌트이고, ρ는 비트 범위 컴포넌트이다.
벡터 컴포넌트의 식으로 나타낸 산술 연산자들의 해석(OP)은 직접적이다(straight-forward). 즉, 어떤 산술 연산에 대하여서도, 결과 값의 각 비트에 대해 선언(predicate)을 얻을 수 있다. 휴리스틱하게는, 쉬프트나 비트형으로 변환될 수 있는 것 이외의 곱셈, 나눗셈 및 나머지 연산들을 해석하지 않는다. 이러한 연산들의 결과는 (일반적으로) ⊥의 벡터로 설정된다.
비트 범위 컴포넌트들의 식으로 표현된 해석(interpretation)은 다소 간단하다. 상수 쉬프트 및 상수를 이용한 비트 연산은 ⊥이 아닌 출력들을 만들어낸다. 이외의 모든 연산들은 해석되지 않는다.
해석의 일 예로써, 등가성 비교: c := (a = 0)를 고려한다. a의 비트 범위 요소가 v ∈ x, y, z 에 대해 v0 , O, 31 형식이면, c의 벡터 요소가 (0 ... 0
Figure 112007009431547-PCT00020
v:> 로 설정되어야 한다.
MayNonZero와 MayZero 연산자들은 입력 값의 표현이 제로가 아닌지 제로인지 여부를 테스트한다. MayNonZero는
Figure 112007009431547-PCT00021
내의 모든 비트들을 선언(이접:disjuction)을 형성한다. 선언이 거짓이 아니면, MayNonZero는 1로 복귀한다. 마찬가지로, 선언이 참이 아니면, MayZero가 1로 복귀한다.
패턴 함수에 대한 조건(Pj)이 다음과 같이 인코딩된다:
Figure 112007009431547-PCT00022
후보 에지 e0에 대한 초기 값은 다음과 같다:
Figure 112007009431547-PCT00023
이 경우에, 추상 해석이 어떻게 동작하는지 설명하기 위해, 다음의 예를 고려한다:
Figure 112007009431547-PCT00024
t1(라인 3)의 최상위 비트는 다음과 같이 표현된다:
Figure 112007009431547-PCT00025
MIN32 (i.e. 0x80000000)와의 연언에 의해 t1의 최상위 비트가 분리된다. 따라서, 라인 4 상의 t2 값은 다음과 같이 표현된다:
Figure 112007009431547-PCT00026
라인 6 및 7 상의 문장(명령문)들이 수행되는 조건은 t2의 비트의 연언(disjunction)에 의해 주어진다. 왜냐하면 암묵적 테스트(implicit test)는 t2≠0이기 때문이다:
Figure 112007009431547-PCT00027
따라서, 라인 6 및 7에 대한 검증문은 다음과 같다:
Figure 112007009431547-PCT00028
여기서, P는 전류에 대한 가정(오버플로우, 언더플로우, 둘 다 아닌 경우) 식(7)에 의해 지정된 바와 같다. "둘 다 아닌 경우"라고 가정하면 A1=0인 것을 쉽게 알 수 있다. 그렇지 않은 경우에는 제로가 아니다. 따라서, "둘 다 아닌 경우"를 가정하는 조건하에, 후보 에지에서 z에 할당된 값이 복귀 문장(라인 9)에 전달된다.
라인 6에서 t3에 대한 계산된 근사 값은 다음과 같다:
Figure 112007009431547-PCT00029
즉, t3는 xdml 부호(31번째)를 가진다. 오버플로우 조건에서,
Figure 112007009431547-PCT00030
=0이다. 따라서, z는 할당된 상수(MAX32)이다. 언더플로우를 가정하는 경우에,
Figure 112007009431547-PCT00031
=1이고, z는 할당된 상수(MAX32+1==MIN32)이다.
오퍼플로우가 발생한 경우에, 상술한 전부는 복귀 문장에 값(MAX32)이 전달된다는 것을 입증한다. 오버플로우가 아닌 경우에는 z의 원래 값이 전달된다. 다음으로, 이는 복귀 문장이 포화된 값을 전달받는다는 것을 입증한다.
B. 하부 범위 덧셈
하부 범위 덧셈에 대한 패턴 함수는 다음과 같다:
Figure 112007009431547-PCT00032
이러한 정의에서 비교는 32-비트 2의 보수 산술 연산을 이용한다.
하부 범위 덧셈은 더 간단하다. 후보 덧셈 연산은 z = x + y 이고, 여기서 x 와 y는 16 비트 "쇼트(short)"로 선언된다. 오버플로우, 언더플로우, 및 오버플로우가 아닌 경우의 조건들은 z에 대한 범위 테스트의 식으로 표현된다:
Figure 112007009431547-PCT00033
따라서, 오버플로우 및 언더플로우 가정에 대해서는 범위 전파(range propagation)가 수행되며, 오버플로우가 아닌 경우의 가정에 대해서는 "이 변수는 z와 동일하다"는 속성을 전파한다.
C. 곱셈(Multiplication)
고정 포인트 포화 곱셈(16 비트를 32 비트로)의 구현 예를 고려하면 다음과 같다.
Figure 112007009431547-PCT00034
실제로, 더 일반적인 구문은 "k에 의해 쉬프트 된 곱셈"으로 구성된 구문이며, 다음과 같다.
Figure 112007009431547-PCT00035
이는 32-k 비트에서 고정 소수점 숫자로 표현되는 x 및 y의 곱을 계산한다. 일반적으로, k = 16 이다.
오버 플로우가 발행한 경우에, 어떤 값들이 할당되는지를 결정하기 위하여,
V(e0, x) = 0x8000
V(e0,y)= 0x8000
V(e0;z) = 0x40000000
에서 정의되는 추가 매핑(mapping)을 이용하여 상수 전파(propagtion)를 간 단히 수행한다. 오버플로우가 발생하지 않는 경우에, 어떤 값이 할당되는지를 결정하기 위하여, 변수가 어떤 상수(존재하는 경우에)와 동일한지, 동일하지 않은 것으로 알려진 상수가 무엇인지, 그리고 변수가 x, y, 및 z로부터의 비트 범위를 포함하는 지 여부에 대한 정보를 얻는다. 이 경우에, 값 래티스(value lattice)는 다음의 곱이다.
Figure 112007009431547-PCT00036
여기서, 래티스(T)는 예(A)에서와 같은 의미가 있다. 이는 비트 범위에 대한 정보를 얻는 데 사용된다. C는 상수 전파에서 일반적으로 사용되는 래티스이다. C래티스는 C와 동일한 소자를 포함하나, 반전된 의미를 가진다. 즉, 상수와 동일하지 않은 것으로 알려진 경우에, 변수 a는 할당된 상수 (
Figure 112007009431547-PCT00037
)이다.
산술 연산들에 대한 해석은 직접적(straight-forward)이다. 비교의 해석에 대한 규칙을 정하는 경우에 특별한 주의가 요구된다. 등가성 cmpeq 테스트는 다음의 규칙을 통해 해석된다.
Figure 112007009431547-PCT00038
다른 비교에 대해서도 유사한 규칙이 정의된다. 곱셈에 대한 특정 규칙은 다음과 같다: mul (<0x8000, _,_>, <_,0x8000, _>) = <_, 0x40000000,_ >
즉, 0x8000를 0x8000이 아닌 것과 곱하는 경우에, 0x40000000를 절대 얻을 수 없다. <0,0,_>과 같은 상반된 표현을 만들지 않도록 특별히 주의하여야 한다. 즉, C의 요소와 상수로 설정된 C의 요소 양쪽 모두로 이루어진 짝을 발생시키서는 안된다. 후자가 상수로 설정되는 경우에, 전자는 1로 설정한다.
분석을 간단히 하기 위해, 쉬프트 된 포화 곱셈의 정을 세 가지 경우로 나눈다. 이들 중 둘은 오버플로우가 아닌 조건을 다루며, 패턴 함수가 다음과 같이 주어진다:
Figure 112007009431547-PCT00039
첫 번째 경우에, 후보 에지가
Figure 112007009431547-PCT00040
인 때, x의 초기값을 이용하여 수행되는 경우에, 추상 해석을 한다. 두 번째 경우에, 유사한 래티스 값이 y로 주어진다. 양쪽 모두의 경우에, 증거(z)는 할당된
Figure 112007009431547-PCT00041
이다. 세 번째 경우에, 즉 오버플로우의 경우에, 다음과 같은 할당 값을 사용하여 시작한다.
Figure 112007009431547-PCT00042
D. 캐리를 이용한 덧셈
덧셈 연산이 z = x + y이고 캐리-입력 변수가 Cin 인 경우에, 캐리-출력 비트를 유지하는 변수를 확인한다. 덧심의 결과를 확인하는 것은 매우 간단하다. 즉, z + Cin 을 유지하는 변수들을 확인하기 위하여 번호가 매겨진 전체 변수를 사용한다. 중요한 가정은 이전 프로그램 분석(가령 범위 전파)으로부터 Cin∈{0,1}이다.
Figure 112007009431547-PCT00043
캐리-출력 비트에 대한 패턴 함수를 정의하기 위해, 먼저 "내부 캐리" 비트를 다음과 같이 정의한다:
Figure 112007009431547-PCT00044
실재 여분의 캐리-입력 비트가 존재하지 경우에, 이는 덧셈 연산 'z = x + y'에서의 캐리-출력 비트이다. 캐리-입력 비트가 존재하는 경우에, 캐리-출력 함수는 다음과 같이 정의된다:
Figure 112007009431547-PCT00045
이는 패턴 함수이다. 캐리-출력 계산을 검출하기 위해 이전 섹션의 절차 중 일부를 재사용한다. 다음의 가정하에 추상 해석이 수행된다.
Figure 112007009431547-PCT00046
"등가-대-상수" 및 "등가가 아닌 것-대-상수" 정보가 전파될 필요가 있다. 포화 곱셈의 검출을 위해 소개된 C 및 C 래티스를 사용한다. 내부 캐리(Carrylnternal)의 계산을 검출하며, 이는 부호 비트(σxyz) 및 캐리-입력 비트(Cin)에서의 부울 선언이다. 이에 대하여, Φ32를 사용한다. 전체적으로, 값 래티스는
Figure 112007009431547-PCT00047
이다.
Z= OxFFFFFFFF 인 조건을 살펴보면, x 와 y가 반드시 서로 다른 부호를 가져야 한다는 것을 알 수 있다. 따라서, 첫 번째 경우에 대한 추상 해석이 다음의 가정하에 수행된다.
Figure 112007009431547-PCT00048
후보 에지에서, 변수(z)는 할당된 래티스 값이다.
Figure 112007009431547-PCT00049
ANSI C 표준은, 제 1 연산수가 부호화된 타입으로 구성되는 경우에, 우측 쉬프트 연산자 "x>>y"가 어떤 비트를 좌측으로부터 가져오는지 정의하고 있지 않다. 문제는 이것이 x 나 제로의 부호 비트를 가져오는지 여부이다. 첫 번째 경우에, 이를 "산술 쉬프트"라 하며, 두 번째 경우에는 이를 "논리 쉬프트"라 한다.
여기에 이식 가능한 한 쌍의 산술 쉬프트 구현 예를 나타낸다.
Figure 112007009431547-PCT00050
Figure 112007009431547-PCT00051
(a) 변수들이 y내의 선형인 양에 의해 쉬프트 되고, (b) 대부분의 값들이 이 비트 범위[0:p(y)] 및 [p(y)+l,31](여기서, p(y)는 선형의 y의 함수이다)로 분할된 다는 점을 살펴본다. 이 비트 범위 값들은 상수이거나 x의 하부 범위이며, 가능한 반전된다. 이하에서, 산술 쉬프트 정의를 5 가지 경우들로 나눈다.
Figure 112007009431547-PCT00052
(위의 식에서 "네이티브" 우측 쉬프트 연산자의 부호 확장 동작은 연관성이 없다.)
위의 다섯 가지 경우 각각에 대해 어떤 문장이 수행되는지를 결정하기 위해, 범위 및 "등가-대-상수" 그리고 "비-등가-대-상수" 속성을 전파한다.
Figure 112007009431547-PCT00053
Figure 112007009431547-PCT00054
와 동일한 변수들을 결정하기 위해, 전체 값 번호 매김 동작을 수행한다. 이전에 소개되거나 상호 컴파일러에서 수행될 값 래티스(value lattice)를 재사용하는 것임을 주목한다.
본 발명의 방법(method)는 컴파일러가 하드웨어적 수행을 대신하도록 할 수 있으며, 동일성이 인식된 경우에 연산자의 소프트웨어적 수행을 가능하게 한다. 명령(t=f(x,y,...))이 실시되도록 함으로써, 함수(f(x,y,...))의 값을 취하는 각 변수(v)의 값이 유효 함수(f(x,y,...))에 의해 계산되도록 프로그램이 변형될(transform) 수 있다. 그리고 각 문장(s)에서 각각의 레퍼런스(reference)를 변수(v)로 대체하여, 명령(t)에 관하여, 문장(s)에서 변수(v)의 값이 함수(f(x,y,...))와 같게 한다. 프로그램 변환 후에 사용되지 않은 명령이 데드-코 드(dead-code) 소거에 의해 소거된다. 여기서, 수학적인 함수(f(x, y, ...))는 하드웨어서 계산되고, 프로그램은 변환되어 함수(f(x,y,...))의 값을 받아들인 각 변수(v)의 값이 함수(f(x,y,...))에 대해 사용가능한 하드웨어 명령에 의해 계산된다.
포화 산술 연산의 자동 인식에 관한 위와 같은 기술들은 매우 짧은 전체 컴파일 시간을 가진다. 나아가, 이러한 기술들은 상당히 다른 어구들을 사용하여 표현되는 경우에도 기본적인 포화 산술 연산을 인식한다는 점에 매우 일반적이다. 구문 패턴 매치를 수행하는 대신에 기본 의미 개념이 체계적인 방식으로 이용된다는 사실로부터 이러한 접근법의 보편성이 생겨난다. 나아가, 애드-혹(ad-hoc) 방식과 대조되게, 추상 해석이 체계적인 추론을 적용할 수 있도록 한다. 일단 적절한 의미 요소들이 결정되고 래티스가 구성되었다면, 각 연산에 대한 해석이 체계적으로 정해질 수 있다.
상술한 본 발명의 실시예들은 단지 예시와 설명을 위한 것일 뿐이며, 본 발명을 설명된 형태로 한정하려는 것이 아니다. 따라서, 다양한 변화 및 변경을 할 수 있음은 본 발명이 속하는 분야의 당업자에게 자명하다. 또한, 이 명세서의 상세한 설명이 본 발명의 범위를 제한하는 것은 아니다. 본 발명의 범위는 첨부된 청구항에 의해서 정의된다.
(참조문헌)
Figure 112007009431547-PCT00055

Claims (16)

  1. 최적화 컴파일러에 의해, 지정된 프로그램 내 어떤 변수가 상기 프로그램내의 지정된 변수들(x, y, ...)에 적용되는 지정된 수학적 함수(f(x,y,...))와 동일한지 여부를 결정하는 방법에 있어서, 상기 방법은:
    입력들(x, y, ...)의 비트로 구성된 부울 함수로 상기 함수(f(x,y,..))의 비트 값들을 표현하는 단계와;
    모든 변수(v)와 프로그램 문장(s)에 대해, 상기 프로그램 문장(s)이 실행될 때 상기 변수(v)가 취한 값을 상기 입력들(x, y, ...)의 비트로 구성된 부울 함수(V(s,v)(x, y, ...))로 표현하는 단계와;
    모든 프로그램 문장(s)에 대해, 상기 프로그램 문장이 수행되는 조건이 상기 입력( x, y, ...)의 비트로 구성된 부울 함수(C(s)(x, y, ...))로 표현하는 단계와; 그리고
    부울 만족성 오라클을 이용하여, 상기 지정된 변수(v)와 프로그램 문장(s)에 대해, 부울 표현(C(s)(x,y,...) -> V(s,v)(x,y… )=f(x,y,...))을 유지하도록 결정하는 단계
    를 포함하는 것을 특징으로 하는 결정 방법.
  2. 제 1 항에 있어서,
    상기 수학적 함수(f(x, y, ...))는 하드웨어에서 계산 가능한 것을 특징으로 하는 결정 방법.
  3. 제 2 항에 있어서,
    상기 함수(f(x,y,...))의 값을 취하는 각 변수(v)의 값이 상기 함수(f(x,y,...))에 대한 유효 하드웨어 명령에 의해 계산되도록, 상기 프로그램이 변환되는 것을 특징으로 하는 결정 방법.
  4. 제 3 항에 있어서,
    상기 하드웨어 명령(t=f(x,y,...))의 실시를 추가하는 단계와; 그리고
    상기 하드웨어 명령(t)에 관하여 상기 프로그램 문장(s)에서 상기 변수(v)의 값이 상기 함수(f(x,y,...))와 같도록 각 프로그램 문장(s)에서 각각의 레퍼런스를 상기 변수(v)로 교체하는 단계
    를 포함하는 것을 특징으로 하는 결정 방법.
  5. 제 4 항에 있어서,
    상기 프로그램 변환 후에 사용되지 않은 소프트웨어 명령들이 데드-코드 소거에 의해 소거되는 것을 특징으로 하는 결정 방법.
  6. 제 1 항에 있어서,
    상기 하드웨어 명령(t=f(x,y,...))의 실시를 추가하는 단계와; 그리고
    상기 하드웨어 명령(t)에 관하여 상기 프로그램 문장(s)에서 상기 변수(v)의 값이 상기 함수(f(x,y,...))와 같도록 각 프로그램 문장(s)에서 각각의 레퍼런스를 상기 변수(v)로 교체하는 단계에 의하여,
    상기 함수(f(x,y,...))의 값을 취하는 각 변수(v)의 값이 상기 유효 함수(f(x,y,...)에 의해 계산되도록 상기 프로그램이 변환되는 것을 특징으로 하는 결정 방법.
  7. 제 6 항에 있어서,
    상기 프로그램 변환 후에 사용되지 않은 명령들을 데드-코드 소거에 의해 소거하는 것을 특징으로 하는 결정 방법.
  8. 최적 컴파일러에 의해, 지정된 프로그램 내의 어떤 변수가 상기 프로그램 내 지정된 변수들(x, y, ...)에 적용되는 지정된 수학적 함수(f(x,y,...))와 동일한지 여부를 결정하는 방법에 있어서, 상기 방법은:
    대응하는 선언(Pj(x, y,...))을 가지는 복수의 함수들(fj(x,y,..)로 상기 함수(f(x,y,...))의 값을 표현하는 단계와;
    모든 변수(v)와 프로그램 문장(s)에 대해, 상기 프로그램 문장(s)이 수행될 때 상기 변수(v)가 취한 값을 각각이 상기 선언(Pj(x,y,..)에 대한 것인 복수의 부울 함수들(Vj(s,v)(x,y,...))로 표현하는 단계와;
    모든 프로그램 문장(s)에 대하여, 상기 프로그램 문장이 수행되는 조건을 각 각이 상기 선언(Pj(x,y,..))에 대한 것인 복수의 부울 함수들(Cj(s)(x,y,...))로 표현하는 단계와; 그리고
    상기 선언(Pj(x,y,..)) 및 상기 조건(Cj(s)(x,y,...))이 참일 때마다, 상기 지정된 변수(v)와 프로그램 문장(s)에 대해 'Vj(s,v)(x,y,...)= fj(x,y...)'인지 여부를 결정하는 단계
    를 포함하는 것을 특징으로 하는 결정 방법.
  9. 제 8 항에 있어서,
    상기 수학적 함수(f(x, y,...))가 하드웨어에서 계산되는 것을 특징으로 하는 결정 방법.
  10. 제 9 항에 있어서,
    상기 함수(f(x,y,...))의 값을 취하는 각 변수(v)의 값이 상기 함수(f(x,y,...))에 대한 유효 하드웨어 명령에 의해 계산되도록, 상기 프로그램이 변환되는 것을 특징으로 하는 결정 방법.
  11. 제 10 항에 있어서,
    상기 하드웨어 명령(t=f(x,y,...))의 실시를 추가하는 단계와; 그리고
    상기 하드웨어 명령(t)에 관하여 상기 프로그램 문장(s)에서 상기 변수(v)의 값이 상기 함수(f(x,y,...))와 같도록, 각 프로그램 문장(s)에서 각각의 레퍼런스 를 변수(v)로 교체하는 단계
    를 포함하는 것을 특징으로 하는 결정 방법.
  12. 제 10 항에 있어서,
    상기 프로그램 변환 후에 사용되지 않은 소프트웨어 명령들이 데드-코드 소거에 의해 소거되는 것을 특징으로 하는 결정 방법.
  13. 제 1 항에 있어서,
    상기 하드웨어 명령(t=f(x,y,...))의 실시를 추가하는 단계와; 그리고
    상기 하드웨어 명령(t)에 관하여 상기 프로그램 문장(s)에서 상기 변수(v)의 값이 상기 함수(f(x,y,...))와 같도록 각 프로그램 문장(s)에서 각각의 레퍼런스를 변수(v)로 교체하는 단계에 의하여,
    상기 함수(f(x,y,...))의 값을 취하는 각 변수(v)의 값이 상기 유효한 함수(f(x,y,...)에 의해 계산되도록, 상기 프로그램이 변환되는 것을 특징으로 하는 결정 방법.
  14. 제 13 항에 있어서,
    상기 프로그램 변환 후에 사용되지 않은 명령들을 데드-코드 소거에 의해 소거하는 것을 특징으로 하는 결정 방법.
  15. 제 8 항에 있어서,
    상기 선언(Pj(x,y,..))이나 상기 함수(fj(x,y,...))에 따라, 조건(Cj(s)(x,y,..))이 유지되는지 여부 및 상기 선언(Pj(x,y,..))이 있을 때마다 'Vj(s,v)(x,y,..)=fj(x,y,..)'인지 여부를 결정하는 프로그램의 값들에 대한 근사를 컴파일러가 이용하는 것을 특징으로 하는 결정 방법.
  16. 제 15 항에 있어서,
    상기 근사는 전체 변수나 변수들의 비트 범위에 적용되는 상수 전파, 전체 값 번호 매김, 범위 전파 중 하나 이상의 조합인 것을 특징으로 하는 결정 방법.
KR1020077002473A 2004-08-12 2005-08-11 비순환 패턴 인식 방법 KR20070040805A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US60099904P 2004-08-12 2004-08-12
US60/600,999 2004-08-12

Publications (1)

Publication Number Publication Date
KR20070040805A true KR20070040805A (ko) 2007-04-17

Family

ID=35908126

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077002473A KR20070040805A (ko) 2004-08-12 2005-08-11 비순환 패턴 인식 방법

Country Status (7)

Country Link
US (1) US8056064B2 (ko)
EP (1) EP1779240A2 (ko)
JP (1) JP2008510230A (ko)
KR (1) KR20070040805A (ko)
CN (1) CN101278262A (ko)
TW (1) TW200622904A (ko)
WO (1) WO2006020729A2 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8056067B2 (en) * 2006-09-29 2011-11-08 International Business Machines Corporation Method, computer program product, and device for reducing delays in data processing
US7543266B2 (en) 2006-11-20 2009-06-02 Microsoft Corporation Lock-free state merging in parallelized constraint satisfaction problem solvers
US8826255B1 (en) * 2007-06-18 2014-09-02 The Mathworks, Inc. Restructuring control flow graphs generated from a model
JP5039948B2 (ja) * 2007-10-30 2012-10-03 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムを最適化するコンパイラ
WO2010070384A1 (en) 2008-12-17 2010-06-24 Freescale Semiconductor, Inc. Compiler optimisation like idiom recognition through pattern matching using value numbering
US9213531B2 (en) * 2014-05-01 2015-12-15 Google Inc. Methods to eliminate extra memory loads while accessing global variables in position independent code
US20180165073A1 (en) 2016-12-14 2018-06-14 International Business Machines Corporation Context information based on type of routine being called
US10235190B2 (en) 2016-12-14 2019-03-19 International Business Machines Corporation Executing instructions to store context information based on routine to be executed

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1091395A (ja) * 1996-09-13 1998-04-10 Toshiba Corp プロセッサ
US6631392B1 (en) * 1999-07-30 2003-10-07 Mips Technologies, Inc. Method and apparatus for predicting floating-point exceptions
US6363523B1 (en) * 1999-11-12 2002-03-26 Sun Microsystems, Inc. Optimization of N-base typed arithmetic expressions
US7171438B2 (en) * 2002-11-12 2007-01-30 Sandbridge Technologies, Inc. Method for recognition of full-word saturating addition and subtraction

Also Published As

Publication number Publication date
TW200622904A (en) 2006-07-01
US20080127148A1 (en) 2008-05-29
WO2006020729A2 (en) 2006-02-23
WO2006020729A3 (en) 2008-01-17
US8056064B2 (en) 2011-11-08
EP1779240A2 (en) 2007-05-02
JP2008510230A (ja) 2008-04-03
CN101278262A (zh) 2008-10-01

Similar Documents

Publication Publication Date Title
Blazy et al. Verifying constant-time implementations by abstract interpretation
Seger et al. An industrially effective environment for formal hardware verification
US8539451B2 (en) Systems and methods for model checking the precision of programs employing floating-point operations
KR20070040805A (ko) 비순환 패턴 인식 방법
US10354069B2 (en) Automated reverse engineering
Bernat et al. An approach to symbolic worst-case execution time analysis
US20060195828A1 (en) Instruction generator, method for generating instructions and computer program product that executes an application for an instruction generator
Çiçek et al. Refinement types for incremental computational complexity
Sallis et al. Software forensics: old methods for a new science
Etessami et al. Model checking of recursive probabilistic systems
Yang et al. Advances in symbolic execution
CN112115472A (zh) 一种面向数据管控的智能合约代码检查方法和系统
Plump From imperative to rule-based graph programs
Lim et al. An approach to generate correctly rounded math libraries for new floating point variants
Pearce Integer range analysis for Whiley on embedded systems
Moyen et al. Loop quasi-invariant chunk detection
Kotlyar et al. Detecting overflow detection
Frohn et al. Inferring lower bounds for runtime complexity
Albert et al. Experiments in cost analysis of Java bytecode
Menendez Practical formal techniques and tools for developing LLVM’s peephole optimizations
Jonáš et al. Gray-box fuzzing via gradient descent and Boolean expression coverage
Jones et al. Mil, a monadic intermediate language for implementing functional languages
Kumar et al. Scaling probabilistic timing verification of hardware using abstractions in design source code
JP3598090B2 (ja) コンパイラ装置及びコンパイル方法
Madet Complexité Implicite de Lambda-Calculs Concurrents

Legal Events

Date Code Title Description
A201 Request for examination
N234 Change of applicant [patent]: notification of change of applicant and registration of full transfer of right
E601 Decision to refuse application