KR102696696B1 - 더 빠른 쇼트 서킷을 위한 복합 조건문 재정렬 - Google Patents
더 빠른 쇼트 서킷을 위한 복합 조건문 재정렬 Download PDFInfo
- Publication number
- KR102696696B1 KR102696696B1 KR1020207029211A KR20207029211A KR102696696B1 KR 102696696 B1 KR102696696 B1 KR 102696696B1 KR 1020207029211 A KR1020207029211 A KR 1020207029211A KR 20207029211 A KR20207029211 A KR 20207029211A KR 102696696 B1 KR102696696 B1 KR 102696696B1
- Authority
- KR
- South Korea
- Prior art keywords
- conditions
- code
- estimated
- alignment
- cost
- Prior art date
Links
- 150000001875 compounds Chemical class 0.000 title claims abstract description 54
- 238000000034 method Methods 0.000 claims description 45
- 238000011156 evaluation Methods 0.000 claims description 16
- 238000004891 communication Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 5
- 238000007667 floating Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 101000822695 Clostridium perfringens (strain 13 / Type A) Small, acid-soluble spore protein C1 Proteins 0.000 description 1
- 101000655262 Clostridium perfringens (strain 13 / Type A) Small, acid-soluble spore protein C2 Proteins 0.000 description 1
- 240000007594 Oryza sativa Species 0.000 description 1
- 235000007164 Oryza sativa Nutrition 0.000 description 1
- 101000655256 Paraclostridium bifermentans Small, acid-soluble spore protein alpha Proteins 0.000 description 1
- 101000655264 Paraclostridium bifermentans Small, acid-soluble spore protein beta Proteins 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000007177 brain activity Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000011982 device technology Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000005684 electric field Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 235000009566 rice Nutrition 0.000 description 1
- 238000013515 script Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
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/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3616—Software analysis for verifying properties of programs using software metrics
-
- 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
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
- Stored Programmes (AREA)
Abstract
컴파일러에서 소스 코드를 수신하도록 구성된 프로세서를 포함하는 컴퓨팅 디바이스가 제공된다. 소스 코드는 복수의 조건을 갖는 적어도 하나의 복합 조건문을 포함할 수 있다. 복수의 조건의 각 조건에 대해, 소스 코드는 조건을 평가하기 위한 명령어를 포함하는 각각의 코드 블록을 더 포함할 수 있다. 복수의 조건의 복수의 정렬의 각 정렬에 대해, 프로세서는 그 정렬이 하나 이상의 적법성 제약을 만족시킨다고 판정할 수 있다. 하나 이상의 적법성 제약을 만족시키는 복수의 정렬의 각 정렬에 대해, 프로세서는 그 정렬에 대한 각각의 추정 계산 비용을 결정할 수 있다. 프로세서는 하나 이상의 적법성 제약을 만족시키는 복수의 정렬 중 최저 추정 계산 비용을 갖는 정렬을 갖도록 복수의 조건을 재정렬할 수 있다.
Description
복합 조건문(compound conditional)는 한 세트의 명령어를 실행할지 아니면 다른 세트의 명령어를 실행할지를 판정하기 위해 둘 이상의 조건이 확인되는 코드 구조이다. 예를 들어, 복합 조건문은 "if" 문, "for" 루프 또는 "while" 루프에 포함될 수 있다. 복합 조건문을 확인하는 것은 둘 이상의 조건의 각각이 참인지 여부를 확인하는 것을 포함할 수 있다. 예를 들어, 복합 조건은 "if (a && b)" 또는 "if (a∥b)" 형식을 가질 수 있다.
복합 조건문 내의 조건들은 이들이 코드 내에 표시되는 순서대로 런타임에 평가된다. 일부 조건은 다른 조건보다 확인하는 데 계산 비용이 더 많이들 수 있다. 프로그래머는 계산 비용이 가장 싼 조건을 첫 번째로 나열하여 첫 번째 결과에 기초하여 계산 비용이 더 비싼 조건에 대한 평가가 필요하지 않게 될 때 이를 확인하는 것을 피함으로써 처리 시간을 절약할 수 있다. 그러나 복합 조건문을 포함하는 소스 코드를 작성할 때, 프로그래머는 복합 조건문의 어떤 조건이 다른 조건보다 확인하는 데 더 비싼 비용이 드는지 알지 못할 수 있다. 결과적으로, 조건들은 최적이 아닌 순서로 배열될 수 있는데, 즉, 비싼 조건문이 저렴한 조건문보다 먼저 평가될 수 있다. 이는 낭비된 처리 리소스와 더 느린 코드 실행을 초래할 수 있다.
다음 복합 조건문을 고려해 보자:
If(conditionl && condition2 && condition3) {
} else {
}
모든 조건문은 부울 술어(Boolean predicate)이다. 따라서 조건들은 접속(conjunctions) 또는 분리(disjunctions) 중 하나에 따라 합성될 수 있다.
위의 코드 예에서, 기본 코드 생성 방식은 먼저 conditionl, condition2 및 condition3을 계산하는 식을 계산한다. 그런 다음, 생성된 코드는 "&&" 연산을 수행하여 최종적인 단일 조건 값을 계산할 것인데, 이에 기초하여 IF 코드를 실행해야 할지 아니면 ELSE 코드를 실행해야 할지에 대한 결정이 이루어질 것이다.
기존의 일부 컴파일러는 최적화를 위해 조건 쇼트 서킷 기술(condition short-circuiting techniques)을 사용한다. 쇼트 서킷은 conditionl이 거짓이면 condition2 및 condition3을 계산하는 식을 계산할 필요가 없음을 인식한다. 그에 따라 점프를 생성한다. 쇼트 서킷은 추가 조건 변수를 평가하는 계산 비용을 절약한다. 생성된 코드는 다음과 같이 보일 것이다:
conditionl을 계산하는 계산식
If !condition1, jump to ELSE code
condition2를 계산하는 계산식
If !condition2, jump to ELSE code
condition3을 계산하는 계산식
If !condition3, jump to ELSE code
IF CODE
GOTO CONDITION REGION END
ELSE CODE
REGION END: ...
그러나, 컴파일러가 이런 쇼트 서킷 기술을 사용할 수 있다고 하더라도, 개발자는 상이한 정렬의 각각의 계산 비용을 인식하지 못할 수 있다. 따라서, 쇼트 서킷이 더 효율적 코드를 생성할 수 있는 경우에도 비효율적 코드가 작성되고 컴파일될 수 있다.
본 개시의 일 양태에 따르면, 컴퓨팅 디바이스가 제공되는데, 컴퓨팅 디바이스는 컴파일러에서 소스 코드를 수신하도록 구성된 프로세서를 포함한다. 소스 코드는 복수의 조건을 갖는 적어도 하나의 복합 조건문(compound conditional)을 포함할 수 있다. 복수의 조건의 각 조건에 대해 소스 코드는 조건을 평가하기 위한 명령어를 포함하는 각각의 코드 블록을 더 포함할 수 있다. 복수의 조건의 복수의 정렬(ordering)의 각 정렬에 대해, 프로세서는 또한 그 정렬이 하나 이상의 적법성 제약을 만족시키는 것을 판정하도록 구성될 수 있다. 하나 이상의 적법성 제약을 만족시키는 복수의 정렬의 각 정렬에 대해, 프로세서는 또한 그 정렬에 대한 각각의 추정 계산 비용을 결정하도록 구성될 수 있다. 프로세서는 또한 하나 이상의 적법성 제약을 만족시키는 복수의 정렬 중에서 최저 추정 계산 비용을 갖는 정렬을 갖도록 복수의 조건을 재정렬하도록 구성될 수 있다.
이 개요는 아래의 상세한 설명에서 더 설명되는 개념의 선택을 단순화된 형태로 소개하기 위해 제공된다. 이 개요는 청구된 주제의 주요 특징이나 필수 특징을 식별하도록 의도된 것이 아니며, 청구된 주제의 범위를 제한하기 위해 사용되도록 의도된 것도 아니다. 더욱이, 청구된 주제는 본 개시의 임의의 부분에서 언급 된 임의의 또는 모든 단점을 해결하는 구현으로 제한되지 않는다.
도 1은 본 개시의 일 실시예에 따른 컴퓨팅 디바이스의 예시적 실시예를 도시한다.
도 2는 도 1의 실시예에 따른, "if" 문을 포함하는 예시적 소스 코드를 도시한다.
도 3은 도 1의 실시예에 따른, "while" 루프를 포함하는 예시적 소스 코드를 도시한다.
도 4는 도 1의 실시예에 따른, 계산 비용 추정의 예를 도시한다.
도 5는 본 개시의 일 실시예에 따른, 컴퓨팅 디바이스의 프로세서에 의해 실행될 수 있는 예시적 방법을 도시한다.
도 6은 본 개시의 일 실시예에 따른 예시적 컴퓨팅 시스템의 개략도를 도시한다.
도 2는 도 1의 실시예에 따른, "if" 문을 포함하는 예시적 소스 코드를 도시한다.
도 3은 도 1의 실시예에 따른, "while" 루프를 포함하는 예시적 소스 코드를 도시한다.
도 4는 도 1의 실시예에 따른, 계산 비용 추정의 예를 도시한다.
도 5는 본 개시의 일 실시예에 따른, 컴퓨팅 디바이스의 프로세서에 의해 실행될 수 있는 예시적 방법을 도시한다.
도 6은 본 개시의 일 실시예에 따른 예시적 컴퓨팅 시스템의 개략도를 도시한다.
위에서 논의된 문제를 해결하기 위해 컴퓨팅 디바이스가 제공된다. 도 1은 휘발성 저장 디바이스(12), 비휘발성 저장 디바이스(14) 및/또는 프로세서(16)를 포함할 수 있는 컴퓨팅 디바이스(10)의 예시적 실시예를 도시한다. 휘발성 저장 디바이스(12) 및 비휘발성 저장 디바이스(14)는 각각 데이터를 저장하도록 구성된 메모리 주소를 포함한다. 프로세서(16)는, 소스 코드(20)를 수신하고 소스 코드(20)를 어셈블리 코드(38)로 변환하도록 구성된 컴파일러(30)를 실행하도록 구성될 수 있다. 소스 코드(20)가 적어도 하나의 복합 조건문(22)를 포함할 때의 소스 코드(20)의 어셈블리 코드(38)로의 변환은 본 개시의 도면에 도시된 시스템 및 방법을 참조하여 본 명세서에서 설명된다.
도 1의 예시적 소스 코드(20)는 도 2를 참조하여 더 상세히 도시된다. 도 1 및 도 2에 도시된 바와 같이, 예시적 소스 코드(20)는 "if" 문 형태의 복합 조건문(22)을 포함한다. 컴파일러(30)에 의해 수신된 소스 코드(20)는 적어도 하나의 복합 조건문(22)을 포함할 수 있다. 복합 조건문(22)은 복수의 조건(24)을 포함할 수 있는데, 이들의 각각은 부울 값(참 또는 거짓)을 가질 수 있다. 복수의 조건(24)의 각 조건(24)에 대해, 소스 코드(20)는 조건(24)을 평가하기 위한 하나 이상의 명령어(28)를 포함하는 각각의 코드 블록(26)을 포함할 수 있다. 하나 이상의 명령어(28)가 평가될 때, 코드 블록(26)은 조건(24)에 대한 부울 값을 반환할 수 있다. 일부 실시예에서, 각각의 코드 블록(26)은 그 내부에 어떠한 분기도 발생하지 않는 기본 블록일 수 있다. 대안적으로, 적어도 하나의 코드 블록(26)은 복수의 기본 블록을 포함할 수 있다.
복합 조건문(22)는 복수의 조건(24)의 부울 값들에 기초하여 하나의 부울 값을 반환할 수 있다. 도 2에 도시된 바와 같이, 소스 코드(20)는, 복수의 조건(24)이 참일 때 실행되도록 구성된 하나 이상의 제 1 분기 평가 명령어(44)를 포함하는 제 1 분기 코드 블록(42)을 더 포함할 수 있다. 도 2의 실시예에서, 복합 조건문(22)은 여기서 AND(&&) 로직 연산자로 도시된 로직 연산자(40)를 포함한다. 그러나, 다른 실시예에서, 복합 조건문(22)는 OR, XOR 또는 NAND와 같은 다른 로직 연산자(40)를 사용하여 표현될 수 있다. 복합 조건문의 부울 값은 로직 연산자(40)를 복수의 조건(24)에 적용함으로써 평가될 수 있다. 소스 코드(20)는 복수의 조건(24) 중 적어도 하나의 조건(24)이 거짓일 때 실행되도록 구성된 하나 이상의 제 2 분기 평가 명령어(48)를 포함하는 제 2 분기 코드 블록(46)을 더 포함할 수 있다. 도 2에 도시된 바와 같이, 제 2 분기 코드 블록(46)은 "if" 문의 "else" 분기일 수 있다.
도 1 및 도 2의 복합 조건문(22)은 2개의 조건(24)을 갖는 것으로 도시되지만, 다른 개수의 조건(24)도 고려된다. 일부 실시예에서, 복합 조건문(22)은 3개 이상의 조건(24)을 포함할 수 있다. 이러한 실시예에서, 복합 조건문(22)은 복합 조건문(22)를 평가하기 위해 조건(24)에 적용될 수 있는 2개 이상의 로직 연산자(40)를 더 포함할 수 있다.
복합 조건문(22), 제 1 분기 코드 블록(42) 및 제 2 분기 코드 블록(46)에 추가하여, 소스 코드(20)는, 도 2에서 복합 조건문(22) 이전과 제 2 분기 코드 블록(46) 이후에 도시된 줄임표로 표시된 바와 같이, 다른 코드 블록을 포함할 수 있다.
도 1로 돌아가면, 복합 조건문(22)은 컴파일러(30)로 전송될 수 있다. 컴파일러(30)는 복합 조건문(22)에 포함된 복수의 조건(24)의 복수의 정렬(orderings)(32)을 결정하도록 구성될 수 있다. 일부 실시예에서, 컴파일러(30)는 복수의 조건(24)의 각각의 가능한 정렬(32)을 결정할 수 있다. 다른 실시예에서, 컴파일러(30)는 조건(24)의 모든 가능한 정렬(32)의 서브 세트만을 결정할 수 있다.
라이스(Rice)의 정리의 결과로서, 임의의 복합 조건문(22)에 대해 어떤 조건(24)이 최저 계산 비용을 갖는지를 항상 판정할 수 있는 알고리즘은 존재하지 않는다. 그러나, 최저 계산 비용을 가질 가능성이 있는 조건(24)은 휴리스틱 기술을 사용하여 식별될 수 있다. 이러한 휴리스틱 기술은 조건들(24) 각각의 각자의 코드 블록(26)에 포함된 하나 이상의 명령어(28)의 구문 속성에 기초할 수 있다.
조건들(24)의 복수의 정렬(32)의 각 정렬(32)에 대해, 프로세서(16)는 또한 정렬(32)이 하나 이상의 적법성 제약(34)을 만족시키는 것을 판정하도록 구성될 수 있다. 여기서 적법성 제약(34)은 특정 정렬(32)을 갖는 하나 이상의 조건(24)의 하나 이상의 구문 속성에 기초한 제약으로 정의되는데, 하나 이상의 조건(24)이 적법성 제약(34)을 만족시키지 않을 때, 프로세서(16)는 컴파일러(30)가 그 정렬(32)을 갖는 어셈블리 코드(38)를 출력하는 것을 방지하도록 구성된다. 따라서, 어떤 정렬들(32)이 하나 이상의 적법성 제약(34)을 만족시키는지를 판정함으로써, 프로세서(16)는 조건들(24)을 재정렬함으로써 발생할 수 있는 어셈블리 코드(38)의 오류를 방지할 수 있다. 예시적 적법성 제약(34)은 도 2를 참조하여 아래에서 논의된다.
복수의 조건(24)이 참일 때 실행되도록 구성된 하나 이상의 제 1 분기 평가 명령어(44)를 포함하는 제 1 분기 코드 블록(42) 및 복수의 조건(24) 중 적어도 하나의 조건(24)이 거짓일 때 실행되도록 구성된 하나 이상의 제 2 분기 평가 명령어(48)를 포함하는 제 2 분기 코드 블록(46)을 소스 코드(20)가 포함하는 실시예에서, 하나 이상의 적법성 제약(34)은 소스 코드(20)가 하나의 제 1 분기 코드 블록(42) 및 하나의 제 2 분기 코드 블록(46)을 포함한다는 제약(34)을 포함한다. 위의 적법성 제약(34)이 만족될 때, 소스 코드(20)는 둘 이상의 제 1 분기 코드 블록(42) 및/또는 둘 이상의 제 2 분기 코드 블록(46)을 포함하지 않는다. 추가적으로 또는 대안적으로, 하나 이상의 적법성 제약(34)은, 각 조건(24)의 각각의 코드 블록(26)이 제 1 분기 코드 블록(42)으로서 도 2에 도시된 공통 타겟 코드 블록으로 진행하기 위한 명령어(28)을 포함한다는 제약을 포함할 수 있다. 따라서, 컴파일러(30)는 복수의 조건(24)의 정렬(32)의 변경이 복합 조건문(22)의 평가 후에 어떤 코드 블록이 실행될지에 영향을 미치는 것을 방지할 수 있다.
일부 실시예에서, 도 3에 도시된 바와 같이, 소스 코드(20)는, 복수의 조건(24)의 각자의 코드 블록들(26) 중 마지막 코드 블록(26)에 후속하고 공통 타겟 코드 블록에 선행하는 부분(50)을 포함할 수 있다. 예를 들어, 도 3에 도시된 바와 같이 복합 조건문(22)이 "while" 루프에 포함될 때, 소스 코드(20)의 부분(50)은 변수를 증가시키기 위한 하나 이상의 명령어를 포함하는 적어도 하나의 코드 블록일 수 있다. 소스 코드(20) 부분(50)의 다른 기능도 고려된다. 이러한 실시예에서, 하나 이상의 적법성 제약(34)은 복수의 조건(24)의 각자의 코드 블록들(26) 중 마지막 코드 블록(26)에 후속하고 공통 타겟 코드 블록에 선행하는 소스 코드(20)의 부분(50)이 하나의 진입 지점과 하나의 진출 지점을 갖는다는 제약을 포함할 수 있다. 이러한 실시예에서, 진입 지점은, 프로세서(16)가 소스 코드(20)의 부분(50)의 실행을 시작할 수 있는, 소스 코드(20)의 부분(50)에 있는 명령어일 수 있다. 유사하게, 진출 지점은 프로세서(16)가 소스 코드(20)의 부분(50)의 실행을 중지할 수 있는 명령어일 수 있다.
일부 실시예에서, 하나 이상의 적법성 제약(34)은 명령어(28)가 비정의(undefined) 변수를 호출하지 않는다는 제약을 포함할 수 있다. 명령어(28)가 비정의 변수를 호출할 수 있는 두 가지 예시적 시나리오가 아래에서 설명된다. 일 예에서, 비정의 변수는 비추적(untracted) 메모리 주소일 수 있다. 비추적 메모리 주소를 추적하는 명령어(28) 이전에 비추적 메모리 주소를 역참조하는(dereference) 명령어(28)가 발생할 때, 비정의 변수 오류가 발생할 수 있다. 두 번째 예에서, 명령어(28)가 변수를 정의하는 다른 명령어(28) 이전에 그 변수를 사용할 때 비정의 변수 오류가 발생할 수 있다.
일부 실시예에서, 하나 이상의 적법성 제약(34)은, 제수(divisor)가 0의 값을 가질 수 있는 나누기 또는 나머지 연산인 명령어(28)를 코드 블록(26)이 포함하지 않는다는 제약을 포함할 수 있다. 이 적법성 제약(34)을 확인함으로써, 프로세서(16)는 조건(24)의 재정렬로 인해 0으로 나누기 오류(division-by-zero errors)가 초래되는 것을 방지할 수 있다.
복수의 정렬(32)에 포함된 어떠한 후보 재정렬도 프로세서(16)에 의해 확인 된 각각의 적법성 제약(34)을 만족시키지 않는 경우, 컴파일러(30)는 도 1에 도시 된 바와 같이 경고 메시지(52)를 출력할 수 있다. 일부 실시예에서, 경고 메시지(52)는 복합 조건문(22)이 더 저렴한 계산 비용의 정렬(32)를 갖도록 재정렬될 수 없다는 표시를 포함할 수 있다. 경고 메시지(52)는 복합 조건문(22)이 발생하는 소스 코드(20) 내의 위치의 표시(예컨대, 라인 번호)를 포함할 수 있다. 일부 실시예에서, 컴파일러(30)가 경고 메시지(52)를 출력할 때, 컴파일러(30)는 어셈블리 코드(38)를 출력하지 않을 수 있다.
하나 이상의 적법성 제약(34)을 만족시키는 복수의 정렬(32)의 각 정렬(32)에 대해, 프로세서(16)는 또한 그 정렬(32)에 대한 각각의 추정 계산 비용(36)을 결정하도록 구성될 수 있다. 정렬(32)의 각각의 추정 계산 비용(36)은 각 코드 블록(26)에 포함된 하나 이상의 명령어(28)에 할당된 미리 결정된 정적 값에 기초하여 결정될 수 있다. 따라서, 정렬(32)의 추정 계산 비용(36)은 유사한 명령어의 과거의 계산 비용과 관련된 데이터를 수집하지 않고도 결정될 수 있다.
하나의 예시적 실시예에 따른 추정 계산 비용(36)의 결정은 도 4를 참조하여 더 상세히 도시된다. 도 4에 도시된 바와 같이, 복수의 조건(24)이 특정 정렬(32)을 가질 때 조건(24)에 포함된 코드 블록(26)의 추정 계산 비용(36)을 결정하기 위해, 프로세서(16)는 코드 블록(26)에 포함된 각 명령어(28)에 대한 추정 계산 비용 테이블(60)을 참조할 수 있는데, 이는 코드 블록 내의 각 명령어 유형에 대한 미리 결정된 정적 값을 포함한다. 따라서, 추정 계산 비용 테이블(60)은 연산(62)의 하나 이상의 유형에 대해 그 연산(62)과 연관된 추정 비용 점수(64)를 포함할 수 있다. 연산(62)의 유형은, 예를 들어, 더하기, 빼기, 비교, 부정(negation), 나누기, 나머지, AND, OR, XOR, 최솟값, 최댓값, 로드, 저장 및/또는 하나 이상의 다른 연산(62)을 포함할 수 있다. 도 4의 추정 계산 비용 테이블(60)의 제 2 열에 도시된 바와 같이, 추정 계산 비용 테이블에 나열된 연산(62)의 각 유형은 추정 비용 점수(64)를 가질 수 있다. 일부 실시예에서, 각 연산은 추정 정수 비용 및 추정 부동 소수점 비용을 가질 수 있다. 추정 정수 비용은 정수 계산을 사용하여 수행될 때의 연산(62)의 추정 비용 점수(64)일 수 있고, 추정 부동 소수점 비용은 부동 소수점 계산을 사용하여 수행될 때의 연산(62)의 추정 비용 점수(64)일 수 있다.
프로세서(16)는, 일반적으로 전술된 테이블을 참조하여, 코드 블록(26)에 포함된 각 명령어(28)에 대한 각각의 추정 비용 점수(64)를 결정하도록 구성될 수 있다. 또한, 프로세서(16)는 복수의 조건(24)이 정렬(32)을 가질 때 이러한 방식으로 각 코드 블록(26)에 대한 각 명령어(28)의 각각의 추정 비용 점수(64)를 결정할 수 있다. 따라서, 프로세서(16)는 정렬(32)에 포함된 각 명령어(28)에 추정 비용 점수(64)를 할당하도록 구성될 수 있다. 각 명령어(28)의 각각의 추정 비용 점수(64)에 기초하여, 프로세서(16)는 그 정렬의 추정 계산 비용(36)을 결정할 수 있다. 예를 들어, 정렬(32)의 추정 계산 비용(36)은 각 명령어(28)에 할당된 각각의 추정 비용 점수(64)를 합산함으로써 결정될 수 있다. 대안적으로, 추정 계산 비용(36)은 어떤 다른 공식을 사용하여 결정될 수 있다. 예를 들어, 적어도 하나의 추정 비용 점수(64)에 가중치 인자가 적용될 수 있다.
일부 실시예에서, 프로세서(16)는 하나 이상의 적법성 제약(34)을 만족시키는 각각의 정렬(32)에 대해서만 추정 계산 비용(36)을 결정할 수 있다. 다른 실시예에서, 프로세서(16)는 정렬(32)이 하나 이상의 적법성 제약(34)을 만족시키는지 여부를 확인하기 전에 각 정렬(32)의 추정 계산 비용(36)을 결정할 수 있다. 이러한 실시예에서, 프로세서(16)는 미리 결정된 임계 값을 초과하는 추정 계산 비용(36)을 갖는 임의의 정렬(32)을 폐기하도록 구성될 수 있다. 이 추정 계산 비용 필터링은 하나 이상의 적법성 제약(34)의 만족을 확인하기 전에 발생할 수 있다.
프로세서(16)는 또한 하나 이상의 적법성 제약(34)을 만족시키는 복수의 정렬(32) 중 최저 추정 계산 비용(36)을 갖는 정렬(32)을 결정하도록 구성될 수 있다. 그런 다음, 프로세서(16)는 하나 이상의 적법성 제약(34)을 만족시키는 복수의 정렬(32) 중 최저 추정 계산 비용(36)을 갖는 정렬(32)을 갖도록 복수의 조건(24)을 재정렬할 수 있다. 최저 추정 계산 비용(36)을 갖는 정렬이 복수의 조건(24)의 원래 정렬(32)인 경우, 프로세서(16)는 원래 정렬(32)을 유지하도록 구성될 수 있다. 2개 이상의 정렬(32)이 최저 추정 계산 비용(36)에 대해 동급인 경우, 프로세서(16)는 2개 이상의 정렬(32) 중 하나의 정렬(32)를 선택하고 선택된 정렬(32)을 갖도록 복수의 조건을 재정렬할 수 있고, 또는 원래 정렬(32)이 둘 이상의 정렬(32)에 포함되는 경우 원래 정렬(32)을 유지할 수 있다.
정렬(32)이 하나 이상의 적법성 제약(34)을 만족시키는지 여부를 확인하기 전에 각각의 정렬(32)의 추정 계산 비용(36)이 결정되는 실시예에서, 프로세서(16)는 추정 계산 비용(36)에 의해 하나 이상의 정렬(32)을 구분하도록 구성될 수 있다. 그런 다음, 프로세서(16)는 복수의 정렬(32) 중에서 추정 계산 비용(36)의 오름차순으로 각 정렬(32)이 하나 이상의 적법성 제약(34)을 만족하는지 여부를 결정할 수 있다. 이와 같이, 프로세서(16)는 하나 이상의 적법성 제약(34)을 만족시키는 최저 추정 계산 비용(36)을 갖는 정렬(32)이 결정될 때까지 정렬들(32)이 하나 이상의 적법성 제약(34)을 만족시키는지를 확인할 수 있다. 프로세서(16)는 또한 하나 이상의 적법성 제약(34)을 만족시키는 최저 추정 계산 비용(36)을 갖는 정렬(32)를 갖도록 복수의 조건(24)을 재정렬하도록 구성될 수 있다. 적법성 제약(34)을 확인하기 전에 정렬(32)의 추정 계산 비용(36)을 확인하는 것은, 예를 들어, 정렬들(32) 간에 추정 계산 비용(36)의 차이가 클 것으로 예상될 때 및/또는 정렬(32)의 추정 계산 비용(36)이 정렬(32)이 하나 이상의 적법성 제약(34)을 만족시키는지 여부보다 더 빨리 판정될 수 있을 때 유리할 수 있다.
도 5는 하나의 예시적 실시예에 따른, 컴퓨팅 디바이스의 프로세서에 의해 수행되는 방법(100)의 흐름도를 도시한다. 컴퓨팅 디바이스는 도 1의 컴퓨팅 디바이스(10)일 수 있다. 단계 102에서, 방법은 컴파일러에서 소스 코드를 수신하는 단계를 포함할 수 있다. 소스 코드는 복수의 조건을 갖는 적어도 하나의 복합 조건문을 포함할 수 있다. 일부 실시예에서, 복합 조건문은 3개 이상의 조건을 포함할 수 있다. 복합 조건문은 둘 이상의 부울 값 조건 및 하나 이상의 로직 연산자(예컨대, AND, OR, XOR 및/또는 NAND)를 포함할 수 있다. 복합 조건문은, 복수의 조건의 각 조건에 대해, 조건을 평가하기 위한 하나 이상의 명령어를 포함하는 각각의 코드 블록을 더 포함할 수 있다. 일부 실시예에서, 각 코드 블록은 기본 블록일 수 있다. 다른 실시예에서, 적어도 하나의 코드 블록은 복수의 기본 블록을 포함할 수 있다.
단계 104에서, 방법(100)은, 복수의 조건의 복수의 정렬의 각 정렬에 대해, 그 정렬이 하나 이상의 적법성 제약을 만족시킨다고 판정하는 단계를 더 포함할 수 있다. 적법성 제약은 특정 정렬을 갖는 하나 이상의 조건의 하나 이상의 구문 속성에 기초한 제약으로서, 하나 이상의 조건이 적법성 제약을 만족시키지 않을 때 해당 정렬을 갖는 어셈블리 코드의 출력이 금지된다. 일 예로서, 하나 이상의 적법성 제약은 각 조건의 각각의 코드 블록이 공통 타겟 코드 블록으로 진행하기 위한 명령어를 포함한다는 제약을 포함할 수 있다. 따라서, 조건들의 정렬에 따라 달라지는 원치 않는 분기를 방지할 수 있다.
다른 예로서, 하나 이상의 적법성 제약은 복수의 조건의 각자의 코드 블록들 중 마지막 코드 블록에 후속하고 공통 타겟 코드 블록에 선행하는 소스 코드의 부분이 하나의 진입 지점과 하나의 진출 지점을 갖는다는 제약을 포함할 수 있다. 이러한 적법성 제약은, 마지막 코드 블록에 후속하고 공통 대상 코드 블록에 선행하는 소스 코드 부분으로의 원치 않는 진입 및/또는 그로부터의 진출로 인해 프로세서가 진입 지점 이전 또는 진출 지점 이후에 명령어를 건너뛰는 것을 방지할 수 있다.
다른 예로서, 하나 이상의 적법성 제약은 명령어가 비정의(undefined) 변수를 호출하지 않는다는 제약을 포함한다. 변수가 조건들의 원래 정렬의 첫 번째 조건에서 정의된 후에 두 번째 조건에서 호출되는 경우, 두 번째 조건이 첫 번째 조건 이전으로 이동될 때 비정의 변수에 대한 호출이 발생할 수 있다. 이러한 재정렬이 수행되지 않음을 판정하기 위해 위의 적법성 제약이 확인될 수 있다.
다른 예로서, 하나 이상의 적법성 제약은 제수가 0의 값을 가질 수 있는 나누기 또는 나머지 연산인 명령어를 코드 블록이 포함하지 않는다는 제약을 포함할 수 있다.
일부 실시예에서, 소스 코드는 복수의 조건이 참일 때 실행되도록 구성된 하나 이상의 제 1 분기 평가 명령어를 포함하는 제 1 분기 코드 블록을 더 포함할 수 있다. 소스 코드는 복수의 조건 중 적어도 하나의 조건이 거짓일 때 실행되도록 구성된 하나 이상의 제 2 분기 평가 명령어를 포함하는 제 2 분기 코드 블록을 더 포함할 수 있다. 예를 들어, 복합 조건문이 "if" 문에 포함된 경우, 제 2 분기 코드 블록은 "if" 문의 "else" 분기일 수 있다. 이러한 실시예에서, 하나 이상의 적법성 제약은 소스 코드가 복수의 제 1 분기 코드 블록 및/또는 제 2 분기 코드 블록이 아니라 하나의 제 1 분기 코드 블록 및 하나의 제 2 분기 코드 블록을 포함한다는 제약을 포함할 수 있다.
단계 106에서, 방법(100)은 하나 이상의 적법성 제약을 만족시키는 복수의 정렬의 각 정렬에 대해, 그 정렬에 대한 각각의 추정 계산 비용을 결정하는 단계를 더 포함할 수 있다. 일부 실시예에서, 각 정렬에 대한 각각의 추정 계산 비용을 결정하는 단계는, 단계 108에서, 정렬에 포함된 각각의 명령어에 추정 비용 점수를 할당하는 단계를 포함할 수 있다. 추정 비용 점수는, 예를 들어, 추정 계산 비용 테이블로부터 명령어에 의해 표시된 연산과 연관된 추정 비용 점수를 판독함으로써 결정될 수 있다. 일부 실시예에서, 하나 이상의 명령어의 추정 비용 점수에 가중치 인자가 적용될 수 있다. 단계 110에서, 정렬의 추정 계산 비용은, 예를 들어, 각각의 명령어에 할당된 각각의 추정 비용 점수를 합산함으로써 결정될 수 있다. 일부 실시예에서는, 정렬의 추정 계산 비용을 결정하기 위해 하나 이상의 다른 연산이 추정 비용 점수에 대해 추가적으로 또는 대안적으로 수행될 수 있다.
단계 112에서, 방법(100)은 하나 이상의 적법성 제약을 만족시키는 복수의 정렬 중 최저 추정 계산 비용을 갖는 정렬을 갖도록 복수의 조건을 재정렬하는 단계를 더 포함할 수 있다. 복수의 조건의 원래 정렬이 하나 이상의 적법성 제약을 만족시키고 최저 추정 계산 비용을 가질 때, 방법(100)은 대신 원래 정렬을 유지하는 단계를 포함할 수 있다.
전술한 시스템 및 방법에서 재정렬되는 적어도 하나의 복합 조건문은 2개의 조건을 포함하지만, 3개 이상의 조건이 재정렬되는 실시예도 고려된다. 예를 들어, 복합 조건문은 "if (a∥b) && (c∥d)" 형식을 가질 수 있다. 이러한 예에서, 블록 "(a∥b)" 및 "(c∥d)"는 복합 조건문이 "if (c∥d) && (a∥b)"가 되도록 재정렬될 수 있다. 대안적으로, 조건 a, b, c 및 d는 복합 조건문이 일 예에서 "if (b∥a) && (d∥c)"가 되도록 재정렬될 수 있다. 3개 이상의 조건이 평가되는 실시예에서, 하나 이상의 조건은 복수의 기본 블록을 포함하는 각자의 코드 블록을 가질 수 있다.
전술한 바와 같은 복합 조건문 재정렬은, 아래에 제공된 예시적 코드를 참조하여 표시된 바와 같이, 복합 조건문을 포함하지 않는 코드 블록의 재정렬을 포함하도록 일반화될 수 있다. 예로서, 다음과 같은 C++ 코드에 포함된 코드 블록이 재정렬될 수 있다:
위에 표시된 예시적 코드에서 "var"를 계산하는 것은 "pred"를 계산하는 것보다 더 비싸다. 따라서, 예시적 코드는 블록 5, 블록 1, 블록 2, 블록 3, 블록 4, 블록 6, 블록 7의 순서로 코드 블록을 재정렬함으로써 실행에 더 적은 계산 비용이 들게 할 수 있다. 적법성 제약 확인 및 계산 비용 추정의 시스템 및 방법은 하나 이상의 적법성 제약을 만족시키고 최저 추정 계산 비용을 갖는 코드 블록의 정렬을 결정하기 위해 적용될 수 있다.
이를 달성하기 위해, 다음과 같은 방법을 실행하도록 구성된 컴퓨팅 디바이스가 제공될 수 있다. 처음에, 복수의 코드 블록을 포함하는 소스 코드가 컴파일러에서 수신될 수 있다. 소스 코드는 복수의 가능한 정렬 중 하나인 초기 정렬을 가질 수 있다. 즉, 초기 정렬은 복수의 후보 재정렬 중 하나로 재정렬될 수 있다. 복수의 코드 블록의 복수의 정렬의 각 정렬에 대해, 컴퓨팅 디바이스는 정렬이 위에서 논의된 적법성 제약과 유사한 하나 이상의 적법성 제약을 만족시킨다고 판정하도록 구성될 수 있다. 하나 이상의 적법성 제약을 만족시키는 복수의 정렬의 각 정렬에 대해, 컴퓨팅 디바이스는, 해당 정렬에 대한 각각의 추정 계산 비용을 결정하고, 하나 이상의 적법성 제약을 만족시키는 복수의 정렬 중 최저 추정 계산 비용을 갖는 정렬을 갖도록 복수의 코드 블록을 재정렬하도록 구성될 수 있다. 추정 계산 비용은 전술된 것과 유사한 방법을 사용하여 결정될 수 있다.
전술된 시스템 및 방법을 사용하여, 컴퓨팅 디바이스는 복수의 복합 조건문 중 어느 것이 구문 적법성 제약을 만족시키면서 가장 적은 계산 자원을 요구할 가능성이 가장 높은지를 판정할 수 있다. 이런 접근 방식을 사용하면, 테스트 평가에 불합격할 단순 조건에 앞서 복잡한 조건이 불필요하게 평가되는 경우에 발생되었던 이전 시스템의 낭비적인 처리가 회피될 수 있다. 따라서, 전술된 시스템 및 방법은 컴파일된 코드가 기존의 방법을 사용하여 컴파일된 코드보다 더 효율적으로 실행되게 할 수 있다.
일부 실시예에서, 본 명세서에 설명된 방법 및 프로세스는 하나 이상의 컴퓨팅 디바이스의 컴퓨팅 시스템에 관련될 수 있다. 특히, 이러한 방법 및 프로세스는 컴퓨터 애플리케이션 프로그램 또는 서비스, 애플리케이션 프로그래밍 인터페이스(API), 라이브러리 및/또는 기타 컴퓨터 프로그램 제품으로 구현될 수 있다.
도 6은 전술된 방법 및 프로세스 중 하나 이상을 실행할 수 있는 컴퓨팅 시스템(200)의 비제한적 실시예를 개략적으로 도시한다. 컴퓨팅 시스템(200)은 단순화된 형태로 도시된다. 컴퓨팅 시스템(200)은 예를 들어 도 1의 컴퓨팅 디바이스(10)를 구현할 수도 있고 또는 대신 어떤 다른 컴퓨팅 시스템을 구현할 수도 있다. 컴퓨팅 시스템(200)은, 하나 이상의 개인용 컴퓨터, 서버 컴퓨터, 태블릿 컴퓨터, 홈 엔터테인먼트 컴퓨터, 네트워크 컴퓨팅 디바이스, 게임 디바이스, 모바일 컴퓨팅 디바이스, 모바일 통신 디바이스(예컨대, 스마트폰), 및/또는 다른 컴퓨팅 디바이스, 및 스마트 손목 시계 및 머리 장착형 증강/가상 현실 디바이스와 같은 웨어러블 컴퓨팅 디바이스의 형태를 취할 수 있다.
컴퓨팅 시스템(200)은 로직 프로세서(202), 휘발성 메모리(204) 및 비휘발성 저장 디바이스(206)를 포함한다. 선택적으로, 컴퓨팅 시스템(200)은 디스플레이 서브시스템(208), 입력 서브시스템(210), 통신 서브시스템(212) 및/또는 도 6에 도시되지 않은 다른 컴포넌트를 포함할 수 있다.
로직 프로세서(202)는 명령어를 실행하도록 구성된 하나 이상의 물리적 디바이스를 포함한다. 예를 들어, 로직 프로세서는, 하나 이상의 애플리케이션, 프로그램, 루틴, 라이브러리, 객체, 컴포넌트, 데이터 구조, 또는 다른 로직 구조의 일부인 명령어를 실행하도록 구성될 수 있다. 이러한 명령어는, 작업을 수행하거나, 데이터 유형을 구현하거나, 하나 이상의 컴포넌트의 상태를 변환하거나, 기술적 효과를 달성하거나, 그렇지 않으면 원하는 결과에 도달하도록 구현될 수 있다.
로직 프로세서(202)는 소프트웨어 명령어를 실행하도록 구성된 하나 이상의 물리적 프로세서(하드웨어)를 포함할 수 있다. 추가적으로 또는 대안적으로, 로직 프로세서(202)는 하드웨어-구현형 로직 또는 펌웨어 명령어를 실행하도록 구성된 하나 이상의 하드웨어 로직 회로 또는 펌웨어 디바이스를 포함할 수 있다. 로직 프로세서(202)의 프로세서들은 단일 코어 또는 다중 코어일 수 있고, 그 위에서 실행되는 명령어는 순차, 병렬 및/또는 분산 처리를 위해 구성될 수 있다. 선택적으로, 로직 프로세서(202)의 개별 컴포넌트는, 원격으로 위치되고/되거나 동조적(coordinated) 처리를 위해 구성될 수 있는 둘 이상의 개별 디바이스 사이에 분산될 수 있다. 로직 프로세서의 양태는 클라우드 컴퓨팅 구성으로 구성된 원격 액세스 가능한 네트워크 컴퓨팅 디바이스에 의해 가상화되고 실행될 수 있다. 이러한 경우, 이 가상화된 양태는 다양한 상이한 머신의 상이한 물리적 로직 프로세서에서 실행될 수 있다.
휘발성 메모리(204)는 랜덤 액세스 메모리를 포함하는 물리적 디바이스를 포함할 수 있다. 휘발성 메모리(204)는 일반적으로 소프트웨어 명령어의 처리 동안 정보를 일시적으로 저장하기 위해 로직 프로세서(202)에 의해 사용된다. 휘발성 메모리(204)는 일반적으로 휘발성 메모리(204)에 대한 전력이 차단될 때 명령어를 계속 저장하지 않는다는 것이 이해될 것이다.
비휘발성 저장 디바이스(206)는, 본 명세서에 설명된 방법 및 프로세스를 구현하기 위해 로직 프로세서에 의해 실행 가능한 명령어를 보유하도록 구성된 하나 이상의 물리적 디바이스를 포함한다. 이러한 방법 및 프로세스가 구현될 때, 비휘발성 저장 디바이스(206)의 상태는 예컨대 다른 데이터를 보유하기 위해 변환될 수 있다.
비휘발성 저장 디바이스(206)는 착탈식 및/또는 내장형 물리적 디바이스를 포함할 수 있다. 비휘발성 저장 디바이스(206)는, 광학 메모리(예컨대, CD, DVD, HD-DVD, Blu-Ray 디스크 등), 반도체 메모리(예컨대, ROM, EPROM, EEPROM, FLASH 메모리 등), 및/또는 자기 메모리(예컨대, 하드 디스크 드라이브, 플로피 디스크 드라이브, 테이프 드라이브, MRAM 등), 또는 다른 대용량 저장 디바이스 기술을 포함할 수 있다. 비휘발성 저장 디바이스(206)는 비휘발성, 동적, 정적, 판독/기록, 판독 전용, 순차적 액세스, 위치-어드레서블, 파일-어드레서블, 및/또는 콘텐츠-어드레서블 디바이스를 포함할 수 있다. 비휘발성 저장 디바이스(206)는 비휘발성 저장 디바이스(206)에 대한 전력이 차단될 때에도 명령어를 보유하도록 구성된다는 것이 이해될 것이다.
로직 프로세서(202), 휘발성 메모리(204), 및 비휘발성 저장 디바이스(206)의 양태는 하나 이상의 하드웨어-로직 컴포넌트로 함께 통합될 수 있다. 이러한 하드웨어 로직 컴포넌트는, 예를 들어, FPGA(Field-Programmable Gate Array), PASIC/ASIC(program- and application-specific integrated circuit), PSSP/ASSP(program- and application-specific standard product), SOC(system-on-a-chip) 및 CPLD(complex programmable logic device)를 포함할 수 있다.
"프로그램"이라는 용어는 특정 기능을 수행하도록 구현된 컴퓨팅 시스템(200)의 양태를 설명하기 위해 사용될 수 있다. 일부 경우에, 프로그램은 휘발성 메모리(204)의 일부를 사용하여 비휘발성 저장 디바이스(206)에 의해 보유된 명령어를 실행하는 로직 프로세서(202)를 통해 인스턴스화될 수 있다. 상이한 프로그램들은 동일한 애플리케이션, 서비스, 코드 블록, 객체, 라이브러리, 루틴, API, 함수 등으로부터 인스턴스화될 수 있음이 이해될 것이다. 마찬가지로, 동일한 프로그램은 상이한 애플리케이션, 서비스, 코드 블록, 객체, 루틴, API, 함수 등에 의해 인스턴스화될 수 있다. "프로그램"이라는 용어는 실행가능한 파일, 데이터 파일, 라이브러리, 드라이버, 스크립트, 데이터베이스 레코드 등의 개별 개체 또는 그룹을 포함한다.
포함되는 경우, 디스플레이 서브시스템(208)은 비휘발성 저장 디바이스(206)에 의해 보유된 데이터의 시각적 표현을 제공하는 데 사용될 수 있다. 본 명세서에 설명된 방법 및 프로세스가 비휘발성 저장 디바이스(206)에 의해 보유된 데이터를 변경시키고, 그에 따라 비휘발성 저장 디바이스(206)의 상태를 변환시키는 경우, 근원적 데이터(underlying data)의 변경을 시각적으로 나타내기 위해 디스플레이 서브시스템(208)의 상태도 마찬가지로 변환될 수 있다. 디스플레이 서브시스템(208)은 사실상 임의의 유형의 기술을 이용하는 하나 이상의 디스플레이 디바이스를 포함할 수 있다. 이러한 디스플레이 디바이스는 공유 인클로저에서 로직 프로세서(202), 휘발성 메모리(204) 및/또는 비휘발성 저장 디바이스(206)와 결합될 수 있고, 또는 이러한 디스플레이 디바이스는 주변 디스플레이 디바이스일 수 있다.
포함되는 경우, 입력 서브시스템(210)은 키보드, 마우스, 터치 스크린, 또는 게임 컨트롤러와 같은 하나 이상의 사용자 입력 디바이스를 포함하거나 그와 인터페이스할 수 있다. 일부 실시예에서, 입력 서브시스템(210)은 선택된 NUI(natural user input) 컴포넌트를 포함하거나 그와 인터페이스할 수 있다. 이러한 컴포넌트는 통합되거나 또는 주변 장치일 수 있으며, 입력 동작의 변환 및/또는 처리는 온보드 또는 오프 보드에서 처리될 수 있다. 예시적 NUI 컴포넌트는, 스피치 및/또는 음성 인식을 위한 마이크로폰; 머신 비전 및/또는 제스처 인식을 위한 적외선, 컬러, 입체 및/또는 깊이 카메라; 움직임 검출, 시선 검출 및/또는 의도 인식을 위한 머리 추적기, 눈 추적기, 가속도계 및/또는 자이로 스코프; 뇌 활동을 평가하기위한 전기장 감지 컴포넌트; 및/또는 임의의 다른 적절한 센서를 포함할 수 있다.
포함될 때, 통신 서브시스템(212)은 컴퓨팅 시스템(200)을 하나 이상의 다른 컴퓨팅 디바이스와 통신가능하게 결합시키도록 구성될 수 있다. 통신 서브시스템(212)은 하나 이상의 상이한 통신 프로토콜과 호환되는 유선 및/또는 무선 통신 디바이스를 포함할 수 있다. 비제한적인 예로서, 통신 서브시스템(212)은 무선 전화 네트워크, 또는 유선 또는 무선 근거리 또는 광역 네트워크를 통한 통신을 위해 구성될 수 있다. 일부 실시예에서, 통신 서브시스템(212)은 컴퓨팅 시스템(200)으로 하여금 인터넷과 같은 네트워크를 통해 다른 디바이스로 및/또는 그로부터 메시지를 송신 및/또는 수신하게 할 수 있다.
본 개시의 일 양태에 따르면, 컴파일러에서 소스 코드를 수신하도록 구성된 프로세서를 포함하는 컴퓨팅 디바이스가 제공된다. 소스 코드는 복수의 조건을 갖는 적어도 하나의 복합 조건문과, 복수의 조건의 각 조건에 대해 조건을 평가하기 위한 하나 이상의 명령어를 포함하는 각각의 코드 블록을 포함할 수 있다. 복수의 조건의 복수의 정렬의 각 정렬에 대해, 프로세서는 또한 그 정렬이 하나 이상의 적법성 제약을 만족시킨다고 판정하도록 구성될 수 있다. 하나 이상의 적법성 제약을 만족시키는 복수의 정렬의 각 정렬에 대해, 프로세서는 또한 그 정렬에 대한 각각의 추정 계산 비용을 결정하도록 구성될 수 있다. 프로세서는 또한 하나 이상의 적법성 제약을 만족시키는 복수의 정렬 중 최저 추정 계산 비용을 갖는 정렬을 갖도록 복수의 조건을 재정렬하도록 구성될 수 있다.
이 양태에 따르면, 소스 코드는, 복수의 조건이 참일 때 실행되도록 구성된 하나 이상의 제 1 분기 평가 명령어를 포함하는 제 1 분기 코드 블록을 더 포함할 수 있다. 소스 코드는, 복수의 조건 중 적어도 하나의 조건이 거짓일 때 실행되도록 구성된 하나 이상의 제 2 분기 평가 명령어를 포함하는 제 2 분기 코드 블록을 더 포함할 수 있다.
이 양태에 따르면, 하나 이상의 적법성 제약은 소스 코드가 하나의 제 1 분기 코드 블록 및 하나의 제 2 분기 코드 블록을 포함한다는 제약을 포함할 수 있다.
이 양태에 따르면, 하나 이상의 적법성 제약은 각 조건의 각각의 코드 블록이 공통 타겟 코드 블록으로 진행하기 위한 명령어를 포함한다는 제약을 포함할 수 있다.
이 양태에 따르면, 하나 이상의 적법성 제약은, 복수의 조건의 각각의 코드 블록 중 마지막 코드 블록에 후속하고 공통 타겟 코드 블록에 선행하는 소스 코드의 부분이 하나의 진입 지점(entry point)과 하나의 진출 지점(exit point)을 갖는다는 제약을 포함할 수 있다.
이 양태에 따르면, 하나 이상의 적법성 제약은 명령어가 비정의 변수(undefined variable)를 호출하지 않는다는 제약을 포함할 수 있다.
이 양태에 따르면, 각 코드 블록은 기본 블록(basic block)일 수 있다.
이 양태에 따르면, 적어도 하나의 코드 블록은 복수의 기본 블록을 포함할 수 있다.
이 양태에 따르면, 프로세서는 각 정렬에 대한 각각의 추정 계산 비용을, 적어도 부분적으로, 정렬에 포함된 각 명령어에 추정 비용 점수를 할당하는 것과, 각 명령어에 할당된 각각의 추정 비용 점수를 합산하는 것에 의해 결정하도록 구성될 수 있다.
본 개시의 다른 양태에 따르면, 컴퓨팅 디바이스의 프로세서에 의해 수행되는 방법이 제공된다. 이 방법은 컴파일러에서 소스 코드를 수신하는 단계를 포함한다. 소스 코드는, 복수의 조건을 갖는 적어도 하나의 복합 조건문과, 복수의 조건의 각 조건에 대해 조건을 평가하기 위한 하나 이상의 명령어를 포함하는 각각의 코드 블록을 포함할 수 있다. 복수의 조건의 복수의 정렬의 각 정렬에 대해, 방법은 정렬이 하나 이상의 적법성 제약을 만족시킨다고 판정하는 단계를 더 포함할 수 있다. 하나 이상의 적법성 제약을 만족시키는 복수의 정렬의 각 정렬에 대해, 방방법은 그 정렬에 대한 각각의 추정 계산 비용을 결정하는 단계를 더 포함할 수 있다. 방법은 하나 이상의 적법성 제약을 만족시키는 복수의 정렬 중에서 최저 추정 계산 비용을 갖는 정렬을 갖도록 복수의 조건을 재정렬하는 단계를 더 포함할 수 있다.
이 양태에 따르면, 소스 코드는, 복수의 조건이 참일 때 실행되도록 구성된 하나 이상의 제 1 분기 평가 명령어를 포함하는 제 1 분기 코드 블록을 더 포함할 수 있다. 소스 코드는, 복수의 조건 중 적어도 하나의 조건이 거짓일 때 실행되도록 구성된 하나 이상의 제 2 분기 평가 명령어를 포함하는 제 2 분기 코드 블록을 더 포함할 수 있다.
이 양태에 따르면, 하나 이상의 적법성 제약은 소스 코드가 하나의 제 1 분기 코드 블록 및 하나의 제 2 분기 코드 블록을 포함한다는 제약을 포함할 수 있다.
이 양태에 따르면, 하나 이상의 적법성 제약은, 복수의 조건의 각각의 코드 블록 중 마지막 코드 블록에 후속하고 공통 타겟 코드 블록에 선행하는 소스 코드의 부분이 하나의 진입 지점과 하나의 진출 지점을 갖는다는 제약을 포함할 수 있다.
이 양태에 따르면, 하나 이상의 적법성 제약은 명령어가 비정의 변수를 호출하지 않는다는 제약을 포함할 수 있다.
이 양태에 따르면, 각 코드 블록은 기본 블록일 수 있다.
이 양태에 따르면, 각 정렬에 대한 각각의 추정 계산 비용을 결정하는 단계는, 정렬에 포함된 각 명령어에 추정 비용 점수를 할당하는 단계와, 각 명령어에 할당된 각각의 추정 비용 점수를 합산하는 단계를 포함할 수 있다.
본 개시의 다른 양태에 따르면, 컴파일러에서 소스 코드를 수신하도록 구성된 프로세서를 포함하는 컴퓨팅 디바이스가 제공된다. 소스 코드는 복수의 코드 블록을 포함할 수 있다. 복수의 코드 블록의 복수의 정렬의 각 정렬에 대해, 프로세서는 또한 그 정렬이 하나 이상의 적법성 제약을 만족시킨다고 판정하도록 구성될 수 있다. 하나 이상의 적법성 제약을 만족시키는 복수의 정렬의 각 정렬에 대해, 프로세서는 또한 그 정렬에 대한 각각의 추정 계산 비용을 결정하도록 구성될 수 있다. 프로세서는 또한 하나 이상의 적법성 제약을 만족시키는 복수의 정렬 중 최저 추정 계산 비용을 갖는 정렬을 갖도록 복수의 코드 블록을 재정렬하도록 구성될 수 있다.
본 명세서에 설명된 구성 및/또는 접근법은 본질적으로 예시적인 것이며, 이들 특정 실시예 또는 예는 많은 변형이 가능하기 때문에 제한적인 의미로 간주되어서는 안된다는 것이 이해될 것이다. 본 명세서에 설명된 특정 루틴 또는 방법은 임의의 수의 처리 전략 중 하나 이상을 나타낼 수 있다. 이와 같이, 도시되고/되거나 설명된 다양한 동작은 도시되고/되거나 설명된 순서로, 또는 다른 순서로, 또는 병렬로 수행될 수 있고, 또는 생략될 수도 있다. 마찬가지로, 전술된 프로세스의 순서는 변경될 수 있다.
본 개시의 주제는, 본 명세서에 개시된 다양한 프로세스, 시스템 및 구성, 다른 특징, 기능, 동작 및/또는 속성의 모든 신규하고 비자명한 조합 및 하위 조합뿐만 아니라 이들의 임의의 및 모든 등가물을 포함한다.
Claims (22)
- 프로세서를 포함하는 컴퓨팅 디바이스로서,
상기 프로세서는 컴파일러에서 소스 코드를 수신하고 ― 상기 소스 코드는, 상기 소스 코드로부터 컴파일되는 어셈블리 코드의 복수의 분기 코드 블록 중 어떤 것이 상기 어셈블리 코드의 실행 부분으로서 실행될지 판정하기 위해 상기 어셈블리 코드의 상기 실행 부분으로서 평가되도록 구성된 복수의 조건을 갖는 적어도 하나의 복합 조건문(compound conditional)을 포함하고, 상기 복수의 조건 각각은 상기 어셈블리 코드의 실행 부분으로서 상기 조건을 평가하도록 하는 하나 이상의 명령어를 포함하는 코드 블록을 포함함 -,
상기 복합 조건문에 포함된 상기 조건의 복수의 정렬(orderings)을 판정하며,
상기 복수의 조건의 상기 복수의 정렬 중 둘 이상의 정렬이 상기 복수의 조건 각각의 상기 하나 이상의 명령어의 구문 구조(syntactic structure)에 대한 하나 이상의 적법성 제약(legality constraints)을 만족시키고, 상기 복수의 정렬 중 적어도 하나는 상기 하나 이상의 적법성 제약을 만족시키지 않는다고 판정하고,
상기 복수의 정렬 중 상기 하나 이상의 적법성 제약을 만족시키는 각 정렬에 대하여만, 해당 정렬이 상기 하나 이상의 적법성 제약을 만족시킨다고 판정한 후에, 상기 하나 이상의 적법성 조건을 만족시키지 않는 상기 적어도 하나의 정렬에 대해서는 적어도 하나의 각각의 계산 비용(computational cost)을 결정하지 않고, 상기 해당 정렬에 대해 각각의 추정 계산 비용을 결정하며 - 상기 복수의 정렬 중 상기 하나 이상의 적법성 제약을 만족시키는 각각의 정렬에 대한 상기 적어도 하나의 각각의 계산 비용은, (1) 복수의 명령어 유형을 각각의 복수의 추정 비용 점수(estimated cost scores)로 매핑하는 추정 계산 비용 테이블(estimated computational cost table)에 의해 명기된 대로, 상기 정렬에 포함된 각각의 명령어에 추정 비용 점수 할당하는 것과, (2) 각각의 명령어에 할당된 상기 각각의 추정 비용 점수를 합산하는 것에 의해 적어도 부분적으로 결정됨 -,
상기 하나 이상의 적법성 제약을 만족시키는 상기 복수의 정렬 중 가장 낮은 추정 계산 비용을 갖는 정렬을 갖도록 상기 복수의 조건을 재정렬하고,
상기 재정렬된 복수의 조건을 갖는 상기 소스 코드를 상기 어셈블리 코드로 컴파일하는,
컴퓨팅 디바이스.
- 제 1 항에 있어서,
상기 소스 코드는,
상기 복수의 조건이 참일 때 실행되도록 구성된 하나 이상의 제 1 분기 평가 명령어를 포함하는 제 1 분기 코드 블록과,
상기 복수의 조건 중 적어도 하나의 조건이 거짓일 때 실행되도록 구성된 하나 이상의 제 2 분기 평가 명령어를 포함하는 제 2 분기 코드 블록을 더 포함하는,
컴퓨팅 디바이스.
- 제 2 항에 있어서,
상기 하나 이상의 적법성 제약은 상기 소스 코드가 하나의 제 1 분기 코드 블록 및 하나의 제 2 분기 코드 블록을 포함한다는 제약을 포함하는,
컴퓨팅 디바이스.
- 제 1 항에 있어서,
상기 하나 이상의 적법성 제약은 각 조건의 상기 각각의 코드 블록이 공통 타겟 코드 블록으로 진행하기 위한 명령어를 포함한다는 제약을 포함하는,
컴퓨팅 디바이스.
- 제 4 항에 있어서,
상기 하나 이상의 적법성 제약은, 상기 복수의 조건의 상기 각각의 코드 블록 중 마지막 코드 블록에 후속하고 상기 공통 타겟 코드 블록에 선행하는 상기 소스 코드의 부분이 하나의 진입 지점(entry point)과 하나의 진출 지점(exit point)을 갖는다는 제약을 포함하는,
컴퓨팅 디바이스.
- 제 1 항에 있어서,
상기 하나 이상의 적법성 제약은 명령어가 비정의 변수(undefined variable)를 호출하지 않는다는 제약을 포함하는,
컴퓨팅 디바이스.
- 제 1 항에 있어서,
각 코드 블록은 기본 블록(basic block)인,
컴퓨팅 디바이스.
- 제 1 항에 있어서,
적어도 하나의 코드 블록은 복수의 기본 블록을 포함하는,
컴퓨팅 디바이스.
- 제 1 항에 있어서,
상기 복합 조건문과 상기 복합 조건문에 포함된 상기 복수의 조건 각각은 상기 어셈블리 코드가 실행될 때 각각의 부울(Boolean) 값으로 평가되도록 구성된,
컴퓨팅 디바이스.
- 제 1 항에 있어서,
상기 복수의 명령어 유형 각각은 각각의 연산 유형이고,
각각의 연산 유형이 관련된 추정 정수 값(estimated integer cost)과 추정 부동 소수점 비용(estimated floating-point cost)을 갖는 경우, 상기 추정 정수 비용은 정수 계산을 사용하여 수행될 때의 상기 연산 유형의 추정 비용 점수이며, 상기 추정 부동 소수점 비용은 부동 소수점 계산을 사용하여 수행될 때의 상기 연산 유형의 추정 비용 점수인,
컴퓨팅 디바이스.
- 제 10 항에 있어서,
상기 연산 유형은 더하기, 빼기, 비교, 부정(negation), 나누기, 나머지, AND, OR, XOR, 최솟값, 최댓값, 로드 및/또는 저장을 포함하는,
컴퓨팅 디바이스.
- 컴퓨팅 디바이스의 프로세서에 의해 수행되는 방법으로서,
컴파일러에서 소스 코드를 수신하는 단계 ― 상기 소스 코드는, 상기 소스 코드로부터 컴파일되는 어셈블리 코드의 복수의 분기 코드 블록 중 어떤 것이 상기 어셈블리 코드의 실행 부분으로서 실행될지 판정하기 위해 상기 어셈블리 코드의 상기 실행 부분으로서 평가되도록 구성된 복수의 조건을 갖는 적어도 하나의 복합 조건문(compound conditional)을 포함하고, 상기 복수의 조건 각각은 상기 어셈블리 코드의 실행 부분으로서 상기 조건을 평가하도록 하는 하나 이상의 명령어를 포함하는 코드 블록을 포함함 - 와,
상기 복합 조건문에 포함된 상기 조건의 복수의 정렬(orderings)을 판정하는 단계와,
상기 복수의 조건의 상기 복수의 정렬 중 둘 이상의 정렬이 상기 복수의 조건 각각의 상기 하나 이상의 명령어의 구문 구조(syntactic structure)에 대한 하나 이상의 적법성 제약(legality constraints)을 만족시키고, 상기 복수의 정렬 중 적어도 하나는 상기 하나 이상의 적법성 제약을 만족시키지 않는다고 판정하는 단계와,
상기 복수의 정렬 중 상기 하나 이상의 적법성 제약을 만족시키는 각 정렬에 대하여만, 해당 정렬이 상기 하나 이상의 적법성 제약을 만족시킨다고 판정한 후에, 상기 하나 이상의 적법성 조건을 만족시키지 않는 상기 적어도 하나의 정렬에 대해서는 적어도 하나의 각각의 계산 비용(computational cost)을 결정하지 않고, 상기 해당 정렬에 대해 각각의 추정 계산 비용을 결정하는 단계 - 상기 복수의 정렬 중 상기 하나 이상의 적법성 제약을 만족시키는 각각의 정렬에 대한 상기 적어도 하나의 각각의 계산 비용은, (1) 복수의 명령어 유형을 각각의 복수의 추정 비용 점수(estimated cost scores)로 매핑하는 추정 계산 비용 테이블(estimated computational cost table)에 의해 명기된 대로, 상기 정렬에 포함된 각각의 명령어에 추정 비용 점수 할당하는 것과, (2) 각각의 명령어에 할당된 상기 각각의 추정 비용 점수를 합산하는 것에 의해 적어도 부분적으로 결정됨 - 와,
상기 하나 이상의 적법성 제약을 만족시키는 상기 복수의 정렬 중 가장 낮은 추정 계산 비용을 갖는 정렬을 갖도록 상기 복수의 조건을 재정렬하는 단계와,
상기 재정렬된 복수의 조건을 갖는 상기 소스 코드를 상기 어셈블리 코드로 컴파일하는 단계를 포함하는,
방법.
- 제 12 항에 있어서,
상기 소스 코드는,
상기 복수의 조건이 참일 때 실행되도록 구성된 하나 이상의 제 1 분기 평가 명령어를 포함하는 제 1 분기 코드 블록과,
상기 복수의 조건 중 적어도 하나의 조건이 거짓일 때 실행되도록 구성된 하나 이상의 제 2 분기 평가 명령어를 포함하는 제 2 분기 코드 블록을 더 포함하는,
방법.
- 제 13 항에 있어서,
상기 하나 이상의 적법성 제약은 상기 소스 코드가 하나의 제1 분기 코드 블록 및 하나의 제2 분기 코드 블록을 포함한다는 제약을 포함하는,
방법.
- 제 12 항에 있어서,
상기 하나 이상의 적법성 제약은 각 조건의 상기 각각의 코드 블록이 공통 타겟 코드 블록으로 진행하기 위한 명령어를 포함한다는 제약을 포함하는,
방법.
- 제 15 항에 있어서,
상기 하나 이상의 적법성 제약은 상기 복수의 조건의 상기 각각의 코드 블록의 마지막 코드 블록에 후속하고 상기 공통 타겟 코드 블록에 선행하는 상기 소스 코드의 부분이 하나의 진입 지점과 하나의 진출 지점을 갖는다는 제약을 포함하는,
방법.
- 제 12 항에 있어서,
상기 하나 이상의 적법성 제약은 명령어가 비정의 변수를 호출하지 않는다는 제약을 포함하는,
방법.
- 제 12 항에 있어서,
각각의 코드 블록은 기본블록인,
방법.
- 제 12 항에 있어서,
적어도 하나의 코드 블록은 복수의 기본 블록을 포함하는,
방법.
- 제 12 항에 있어서,
상기 복수의 명령어 유형 각각은 각각의 연산 유형이고,
각각의 연산 유형이 관련된 추정 정수 값(estimated integer cost)과 추정 부동 소수점 비용(estimated floating-point cost)을 갖는 경우, 상기 추정 정수 비용은 정수 계산을 사용하여 수행될 때의 상기 연산 유형의 추정 비용 점수이며, 상기 추정 부동 소수점 비용은 부동 소수점 계산을 사용하여 수행될 때의 상기 연산 유형의 추정 비용 점수인,
방법.
- 제 20 항에 있어서,
상기 연산 유형은 더하기, 빼기, 비교, 부정(negation), 나누기, 나머지, AND, OR, XOR, 최솟값, 최댓값, 로드 및/또는 저장을 포함하는,
방법.
- 프로세서를 포함하는 컴퓨팅 디바이스로서,
상기 프로세서는 컴파일러에서 소스 코드를 수신하고 ― 상기 소스 코드는, 상기 소스 코드로부터 컴파일되는 어셈블리 코드의 복수의 분기 코드 블록 중 어떤 것이 상기 어셈블리 코드의 실행 부분으로서 실행될지 판정하기 위해 상기 어셈블리 코드의 상기 실행 부분으로서 평가되도록 구성된 복수의 조건을 갖는 적어도 하나의 복합 조건문(compound conditional)을 포함함 -,
상기 복합 조건문에 포함된 상기 조건의 복수의 정렬(orderings)을 판정하며,
상기 복수의 조건의 상기 복수의 정렬 중 둘 이상의 정렬이 상기 복수의 조건 각각의 상기 하나 이상의 명령어의 구문 구조(syntactic structure)에 대한 하나 이상의 적법성 제약(legality constraints)을 만족시키고, 상기 복수의 정렬 중 적어도 하나는 상기 하나 이상의 적법성 제약을 만족시키지 않는다고 판정하고,
상기 복수의 정렬 중 상기 하나 이상의 적법성 제약을 만족시키는 각 정렬에 대하여만, 해당 정렬이 상기 하나 이상의 적법성 제약을 만족시킨다고 판정한 후에, 상기 하나 이상의 적법성 조건을 만족시키지 않는 상기 적어도 하나의 정렬에 대해서는 적어도 하나의 각각의 계산 비용(computational cost)을 결정하지 않고, 상기 해당 정렬에 대해 각각의 추정 계산 비용을 결정하며 - 상기 복수의 정렬 중 상기 하나 이상의 적법성 제약을 만족시키는 각각의 정렬에 대한 상기 적어도 하나의 각각의 계산 비용은, (1) 복수의 명령어 유형을 각각의 복수의 추정 비용 점수(estimated cost scores)로 매핑하는 추정 계산 비용 테이블(estimated computational cost table)에 의해 명기된 대로, 상기 정렬에 포함된 각각의 명령어에 추정 비용 점수 할당하는 것과, (2) 각각의 명령어에 할당된 상기 각각의 추정 비용 점수를 합산하는 것에 의해 적어도 부분적으로 결정됨 -,
상기 하나 이상의 적법성 제약을 만족시키는 상기 복수의 정렬 중 가장 낮은 추정 계산 비용을 갖는 정렬을 갖도록 상기 복수의 조건을 재정렬하고,
상기 재정렬된 복수의 조건을 갖는 상기 소스 코드를 상기 어셈블리 코드로 컴파일하는,
컴퓨팅 디바이스.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/953,334 US11334469B2 (en) | 2018-04-13 | 2018-04-13 | Compound conditional reordering for faster short-circuiting |
US15/953,334 | 2018-04-13 | ||
PCT/US2019/021719 WO2019199401A1 (en) | 2018-04-13 | 2019-03-12 | Compound conditional reordering for faster short-circuiting |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20200139698A KR20200139698A (ko) | 2020-12-14 |
KR102696696B1 true KR102696696B1 (ko) | 2024-08-19 |
Family
ID=66102751
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020207029211A KR102696696B1 (ko) | 2018-04-13 | 2019-03-12 | 더 빠른 쇼트 서킷을 위한 복합 조건문 재정렬 |
Country Status (13)
Country | Link |
---|---|
US (2) | US11334469B2 (ko) |
EP (1) | EP3776182B1 (ko) |
JP (1) | JP7403465B2 (ko) |
KR (1) | KR102696696B1 (ko) |
CN (1) | CN111971651A (ko) |
AU (1) | AU2019253162A1 (ko) |
BR (1) | BR112020018280A2 (ko) |
CA (1) | CA3094994A1 (ko) |
IL (1) | IL277945B1 (ko) |
MX (1) | MX2020010614A (ko) |
PH (1) | PH12020551688A1 (ko) |
SG (1) | SG11202008493SA (ko) |
WO (1) | WO2019199401A1 (ko) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200167668A1 (en) * | 2018-11-27 | 2020-05-28 | Sap Se | Dynamic rule execution order |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060041875A1 (en) | 2004-08-23 | 2006-02-23 | Ramesh Peri | Methods and apparatus for creating software basic block layouts |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
IL100990A (en) * | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher |
JPH0736706A (ja) * | 1993-07-19 | 1995-02-07 | Matsushita Electric Ind Co Ltd | 最適化コンパイラ |
JPH0869380A (ja) * | 1994-08-29 | 1996-03-12 | Fujitsu Ltd | ソースプログラムチェック装置 |
JP3650649B2 (ja) * | 1995-06-16 | 2005-05-25 | 松下電器産業株式会社 | 最適化装置 |
US7725885B1 (en) * | 2000-05-09 | 2010-05-25 | Hewlett-Packard Development Company, L.P. | Method and apparatus for trace based adaptive run time compiler |
CA2321016A1 (en) * | 2000-09-27 | 2002-03-27 | Ibm Canada Limited-Ibm Canada Limitee | Interprocedural dead store elimination |
US8307197B2 (en) | 2001-02-14 | 2012-11-06 | University Of North Carolina At Charlotte | Short-circuit evaluation of Boolean expression by rolling up sub-expression result in registers storing default value |
JP3851228B2 (ja) | 2002-06-14 | 2006-11-29 | 松下電器産業株式会社 | プロセッサ、プログラム変換装置及びプログラム変換方法、並びにコンピュータプログラム |
US7308683B2 (en) * | 2003-10-30 | 2007-12-11 | International Business Machines Corporation | Ordering of high use program code segments using simulated annealing |
US7716630B2 (en) * | 2005-06-27 | 2010-05-11 | Ab Initio Technology Llc | Managing parameters for graph-based computations |
JP4860240B2 (ja) * | 2005-11-11 | 2012-01-25 | パナソニック株式会社 | 翻訳方法および実行通知命令の埋め込み方法 |
US7818720B2 (en) * | 2006-01-24 | 2010-10-19 | Freescale Semiconductor, Inc. | System and method for control logic code reordering based on stochastic execution time information |
US8032875B2 (en) * | 2006-11-28 | 2011-10-04 | Oracle America, Inc. | Method and apparatus for computing user-specified cost metrics in a data space profiler |
US8024719B2 (en) * | 2008-11-03 | 2011-09-20 | Advanced Micro Devices, Inc. | Bounded hash table sorting in a dynamic program profiling system |
US8429635B2 (en) * | 2009-10-28 | 2013-04-23 | International Buisness Machines Corporation | Controlling compiler optimizations |
US8683468B2 (en) * | 2011-05-16 | 2014-03-25 | Advanced Micro Devices, Inc. | Automatic kernel migration for heterogeneous cores |
US8600727B2 (en) * | 2011-10-11 | 2013-12-03 | Unisys Corporation | Streamlined execution of emulated code using block-based translation mode |
CN103999036B (zh) * | 2011-12-16 | 2017-07-14 | 英特尔公司 | 在支持事务的计算机体系结构中使用异常进行代码专业化的方法和系统 |
US9195441B2 (en) * | 2013-07-30 | 2015-11-24 | Facebook, Inc. | Systems and methods for incremental compilation at runtime using relaxed guards |
WO2015143641A1 (en) * | 2014-03-26 | 2015-10-01 | Empire Technology Development Llc | Compilation of application into multiple instruction sets for a heterogeneous processor |
US9274771B1 (en) | 2014-09-22 | 2016-03-01 | Oracle International Corporation | Automated adaptive compiler optimization |
US10175964B2 (en) * | 2014-09-26 | 2019-01-08 | Microsoft Technology Licensing, Llc | Compiler caching for runtime routine redundancy tracking |
US10025690B2 (en) * | 2016-02-23 | 2018-07-17 | International Business Machines Corporation | Method of reordering condition checks |
US11093225B2 (en) * | 2018-06-28 | 2021-08-17 | Xilinx, Inc. | High parallelism computing system and instruction scheduling method thereof |
-
2018
- 2018-04-13 US US15/953,334 patent/US11334469B2/en active Active
-
2019
- 2019-03-12 CN CN201980025128.4A patent/CN111971651A/zh active Pending
- 2019-03-12 KR KR1020207029211A patent/KR102696696B1/ko active IP Right Grant
- 2019-03-12 CA CA3094994A patent/CA3094994A1/en active Pending
- 2019-03-12 AU AU2019253162A patent/AU2019253162A1/en not_active Abandoned
- 2019-03-12 BR BR112020018280-0A patent/BR112020018280A2/pt unknown
- 2019-03-12 SG SG11202008493SA patent/SG11202008493SA/en unknown
- 2019-03-12 MX MX2020010614A patent/MX2020010614A/es unknown
- 2019-03-12 WO PCT/US2019/021719 patent/WO2019199401A1/en active Application Filing
- 2019-03-12 JP JP2020556305A patent/JP7403465B2/ja active Active
- 2019-03-12 EP EP19717015.2A patent/EP3776182B1/en active Active
- 2019-03-12 IL IL277945A patent/IL277945B1/en unknown
-
2020
- 2020-10-13 PH PH12020551688A patent/PH12020551688A1/en unknown
-
2022
- 2022-05-13 US US17/663,303 patent/US20220283927A1/en active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060041875A1 (en) | 2004-08-23 | 2006-02-23 | Ramesh Peri | Methods and apparatus for creating software basic block layouts |
Also Published As
Publication number | Publication date |
---|---|
SG11202008493SA (en) | 2020-10-29 |
BR112020018280A2 (pt) | 2020-12-29 |
IL277945B1 (en) | 2024-07-01 |
MX2020010614A (es) | 2020-10-20 |
EP3776182A1 (en) | 2021-02-17 |
JP2021521538A (ja) | 2021-08-26 |
EP3776182B1 (en) | 2024-04-24 |
WO2019199401A1 (en) | 2019-10-17 |
JP7403465B2 (ja) | 2023-12-22 |
CN111971651A (zh) | 2020-11-20 |
US11334469B2 (en) | 2022-05-17 |
AU2019253162A1 (en) | 2020-10-01 |
US20190317881A1 (en) | 2019-10-17 |
US20220283927A1 (en) | 2022-09-08 |
IL277945A (en) | 2020-11-30 |
KR20200139698A (ko) | 2020-12-14 |
CA3094994A1 (en) | 2019-10-17 |
PH12020551688A1 (en) | 2021-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10175964B2 (en) | Compiler caching for runtime routine redundancy tracking | |
US8549502B2 (en) | Compiler with user-defined type inference rules | |
Fortuna et al. | A limit study of JavaScript parallelism | |
WO2017015071A1 (en) | Incremental interprocedural dataflow analysis during compilation | |
US11550554B2 (en) | Merged machine-level intermediate representation optimizations | |
US11210193B2 (en) | Evaluating performance improvement of executing instructions in a first processor over execution on a second processor before compilation | |
US8432398B2 (en) | Characteristic determination for an output node | |
KR102696696B1 (ko) | 더 빠른 쇼트 서킷을 위한 복합 조건문 재정렬 | |
US10025563B2 (en) | Selecting COBOL perform statements for inlining | |
US11593078B2 (en) | Reload ordering for executable code modules | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
US20170115973A1 (en) | Operating method of semiconductor device and semiconductor system | |
CN104166633B (zh) | 用于存储器访问保护的方法和系统 | |
CN115599534A (zh) | 数据竞争检测方法、系统、集群及介质 | |
US20130173682A1 (en) | Floating-point error propagation in dataflow | |
US20150082443A1 (en) | System to automate compliance with licenses of software third-party content | |
US20180052856A1 (en) | Syntactical transformation of database interaction statements | |
Conlan et al. | High-Performance Computing | |
Mutlu et al. | Dynamic verification for hybrid concurrent programming models | |
Pitt-Francis et al. | Errors and Exceptions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |