런타임 알고리즘 전문화
Run-time algorithm specialization컴퓨터 과학에서 런타임 알고리즘 전문화는 특정 종류의 값비싼 연산 작업에 대한 효율적인 알고리즘을 만드는 방법론이다. 방법론은 자동화된 정리 증명 분야에서 비롯되며, 보다 구체적으로 뱀파이어 정리 프로베라 프로젝트에서 유래한다.
그 아이디어는 프로그램 번역을 최적화하는데 부분적인 평가의 사용에서 영감을 받았다. 정리 프로버의 많은 핵심 연산은 다음과 같은 패턴을 보인다. 의 값이 의 여러 값에 대해 고정되어 있는 상황에서 l g 을(를) 일부 알고리즘으로 실행해야 한다고 가정해 보십시오 이를 효율적으로 수행하기 위해 l }의 전문화를 찾을 수 있다. 즉l n1}에 대한 l 을(를) 실행하는 것은 ( ) 을(를) 실행하는 것과 같다
The specialized algorithm may be more efficient than the generic one, since it can exploit some particular properties of the fixed value . Typically, can avoid some operations that would have는 이러한 특정 매개 변수 에 대해 중복된 것으로 알려진 경우, 특히 롤링 해제 및 재귀 등에 대해 참 또는 거짓인 일부 테스트를 식별할 수 있다
부분평가와의 차이
런타임 전문화와 부분 평가의 주요 차이점은 이(가) 전문화된 의 값이 정적으로 알려져 있지 않기 때문에 런타임에 전문화가 이루어진다는 것이다.
중요한 기술적 차이도 있다. 일부 프로그래밍 언어에서 코드로 명시적으로 표현되는 알고리즘에는 부분 평가가 적용된다. 런타임에는 l 을(를) 구체적으로 표현할 필요가 없으며 전문화 절차를 프로그래밍할 때 만 상상하면 된다. 가 필요한 것은 전문화된 a l A 의 구체적인 표현이다 이것은 알고리즘을 전문화하기 위한 어떤 보편적인 방법도 사용할 수 없다는 것을 의미하기도 하는데, 이는 부분적인 평가가 보통이다. l g 의 모든 특정 알고리즘에 대해 전문화 절차를 프로그래밍해야 한다 그렇게 하는 것의 중요한 은 l {\의 과 A{\A}의 표현을 이용하는 강력한 애드혹 기술을 사용할 수 있다는 것이다. 그리고 은는) 보편적 전문화 방법으로는 손쓸 수 없는 것이다.
컴파일을 통한 전문화
전문 알고리즘은 해석할 수 있는 형태로 표현되어야 한다. 많은 상황에서 으로 l 을(를) 연속해서 많은 값 에 대해 계산하려고 할 때 는 l A {\ {alg을(를) 특수 추상기계의 코드로, 우리는 흔히 을 (를) 편찬한다고 말한다. 그러면 코드 자체는 추상적인 기계의 지시의 의미에만 의존하는 대답을 보존하는 변환에 의해 추가로 최적화될 수 있다.
추상기계의 지시사항은 보통 기록으로 나타낼 수 있다. 이러한 레코드의 한 필드는 명령 유형을 식별하는 정수 태그를 저장하며, 다른 필드는 명령의 의미론에서 점프를 요구하는 경우, 예를 들어 라벨을 나타내는 다른 명령어에 대한 포인터를 저장하는 데 사용될 수 있다. 코드의 모든 지시사항은 배열, 목록 또는 트리에 저장할 수 있다.
해석은 지시사항을 어떤 순서로 가져오고, 지시사항의 유형을 식별하고, 이 유형과 관련된 조치를 실행함으로써 이루어진다. C 또는 C++에서는 스위치 문을 사용하여 일부 작업을 다른 명령 태그와 연결할 수 있다. 현대의 컴파일러는 대개 배열의 -th 셀에 i 값에 해당하는 문 주소를 저장함으로써 좁은 범위의 정수 레이블로 스위치 문을 컴파일한다. 작은 정수 간격에서 명령 태그의 값을 취함으로써 이것을 이용할 수 있다.
데이터 및 알고리즘 전문화
A의 많은 인스턴스가 장기 저장을 위한 이며, g(A , ){\{\의 호출이 예측 불가능한 순서로 B{\로 발생하는 상황이 있다. For example, we may have to check first, then , then , and so on. 이러한 상황에서는 과도한 메모리 사용으로 인해 컴파일을 포함한 본격적인 전문화가 적합하지 않을 수 있다. 그러나 우리는 A와 함께 또는 대신 저장할 수 있는 A 에 대해 콤팩트한 전문 표현 A을(를) 찾을 수 있다 또한 이러한 표현에 작용하는 l {\algprimeprimeprimeprimeprim l (, ) 에 대한 모든 통화는 동일한 작업을 더 빨리 수행하도록 ( , ) 로 대체된다.
참고 항목
참조
- A. 보론코프 "뱀파이어 해부학: Code Tree를 이용한 상향식 절차 구현", 자동 추론 저널, 15(2), 1995년 (원래 아이디어)
추가 읽기
- A. 리아자노프와 A. Voronkov, "기간 주문 제약의 효율적인 확인", Proc. IJCAR 2004, 인공지능 3097, 2004(비교적이지만 자급자족적인 방법 설명)
- A. 리아자노프와 A. Voronkov, 표준 및 관계 경로 인덱싱, 정보 및 계산을 통한 효율적인 인스턴스 검색, 199(1-2), 2005(방법의 다른 예 포함)
- A. 리아자노프, "효율적인 정리 구현", 박사 논문, 맨체스터 대학, 2003(방법 및 많은 예에 대한 가장 포괄적인 설명 포함)