KR20020065864A - 술어 실행을 정적 예측실행으로 변환하기 위한 범용 및효율적 방법 및 장치 - Google Patents

술어 실행을 정적 예측실행으로 변환하기 위한 범용 및효율적 방법 및 장치 Download PDF

Info

Publication number
KR20020065864A
KR20020065864A KR1020020007089A KR20020007089A KR20020065864A KR 20020065864 A KR20020065864 A KR 20020065864A KR 1020020007089 A KR1020020007089 A KR 1020020007089A KR 20020007089 A KR20020007089 A KR 20020007089A KR 20020065864 A KR20020065864 A KR 20020065864A
Authority
KR
South Korea
Prior art keywords
predicate
instructions
instruction
branch
execution
Prior art date
Application number
KR1020020007089A
Other languages
English (en)
Other versions
KR100576794B1 (ko
Inventor
박조셉씨.에이치.
Original Assignee
선 마이크로시스템즈 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 선 마이크로시스템즈 인코포레이티드 filed Critical 선 마이크로시스템즈 인코포레이티드
Publication of KR20020065864A publication Critical patent/KR20020065864A/ko
Application granted granted Critical
Publication of KR100576794B1 publication Critical patent/KR100576794B1/ko

Links

Classifications

    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4451Avoiding pipeline stalls

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

술어 코드를 최적화하기 위한 확장 가능한 규칙-기반 기법을 포함하는 방법과 장치가 개시되어 있다. 상기 기법은 추상적 내부 표현을 이프-변환시키고 이프-변환을 기계표현으로 매핑시키는 것이 포함되어 있다. 상기 기법은, 매핑된 이프-변환으로부터 술어를 제거하는 것을 포함할 수 있다. 술어를 제거하는 것은 해석에 의하여 명령어를 정의하는 술어를 제거하는 것; 예측에 의하여 세이프 명령어의 방어 술어를 제거하는 것; 보상에 의하여 언세이프 명령어의 방어 술어를 제거하는 것; 그리고 역 이프-변환에 의하여 부적당한 명령어의 방어 술어를 제거하는 것을 포함할 수 있다. 상기 기법은 기계표현을 최적화하는 것을 포함할 수 있다.

Description

술어 실행을 정적 예측실행으로 변환하기 위한 범용 및 효율적 방법 및 장치{A GENERAL AND EFFICIENT METHOD AND APPARATUS FOR TRANSFORMING PREDICATED EXECUTION TO STATIC SPECULATION}
본 발명은 술어코드를 최적화 하기위한 확장가능한 규칙-기판 기법을 포함하는 방법 및 장치에 관한 것이다. 컴퓨터 프로세서는 컴퓨터 프로그램으로부터의 명령을 해석하고 실행하는 연산, 로직 및 콘트롤 회로를 구비하고 있다. 도 1을 참조하면, 전형적 컴퓨터 시스템은, 그중에서도 특히, CPU(24), 메모리 콘트롤러(26) 및 온칩 캐쉬 메모리(30)를 가진 마이크로프로세서(22)를 포함한다. 마이크로프로세서(22)는 마이크로프로세서(22)에 실행되는 프로그램 명령어 및 데이터 모두를 보유하는 외부 캐쉬 메모리(32)와 메인메모리(34)에 연결되어 있다.
내부적으로, 프로그램 명령의 수행은 CPU(24)에 의하여 행하여진다. 한 명령을 수행하기 위해 CPU(24)에 의해 필요하게 되는 데이터는 메모리 콘트롤러(25)에 의해 패치(fetch) 되어서 CPU(24)의 내부 레지스터(28)로 적재된다. 메모리 데이터를 요구하는 CPU(24)로부터의 명령시에 고속 온-칩 캐쉬 메모리(30)가 검색된다. 데이터가 찾아지지 않는 경우에는 외부 캐쉬 메모리(32)와 저속 메인메모리(34)가 메모리 콘트롤러(26)를 사용하여 번갈아 검색된다. 캐쉬 메모리에서 데이터를 찾는 것은 "히트(hit)"라고 언급되고, 캐쉬 메모리에서 데이터를 찾지 못하는 것은 "미스(miss)"라고 언급된다.
CPU가 데이터를 요청한 후 데이터가 검색되어 CPU에 의하여 사용될 수 있을 때까지의 시간은 시스템의 "회전지연(letency)"이라고 한다. 요청된 데이터가 캐쉬 메모리에서 찾아지는 경우, 즉 데이터 히트가 일어나는 경우, 요청된 데이터는 캐쉬의 속도로 엑세스될 수 있어서 시스템의 회전 지연이 감소된다. 반면에, 데이터가 캐쉬 메모리에서 찾아지지 않게 되는 경우, 즉 데이터 미스가 발생하는 경우에는 회전 지연으로 증가되는 데이터는 외부 캐쉬 메모리나 또는 메인메모리로부터 검색되지 않으면 안된다.
프로세서 성능의 개선을 추구하여, 디자이너들은 다음의 2개의 주요 목표, 즉 동작을 보다 고속으로 하게 만들고 보다 많은 조작이 병렬로 수행하는 것에 겨냥하였다.
실행을 더욱 빠르게 하는 것은 여러 가지 방법의 임의의 조합으로 접근 될 수 있다. 예를들면, 신호전달 지연을 포함하는 근원적인 반도체 처리가 개선될 수 있다. 보다 더 많은 스테이지를 포함하는 더 깊숙한 파이프라인(슈퍼 파이프라이닝)를 사용한 파리프라이닝 실행이 실현 될 수 있다. 다중 연산은 다중 파이프라인 슈퍼스칼라(spuerscalar)로 될 수 있다. 추가 주문명령(명령어 스케줄링) 또는 다른 기법이 보다 더 많은 연산을 실행하도록, 즉, 명령어-레벨 병행처리특성(instruction-level parallelism : ILP)을 증가시키도록 하여주는 컴파일러 변환이 구현될수 있다.
파이프라이닝에서 명령어의 실행은 스테이지(stage)라고 불리어지는 여러단계로 부분 분류된다. 명령어는 각 스테이지를 통하여 순차적으로 처리되고 이전 스테이지의 다음 명령어의 실행과 하나의 스테이지에서 명령어의 실행이 중복한다. 연산이 많은 스테이지에서 병행으로 수행하기 때문에 명령어의 속도(처리율)가 증가된다.
하나의 스테이지가 차지하는 시간은 사이클 시간, 또는 그의 역, 프로세스의 클럭 발생율을 결정한다. 파이프라인이 방해(정지(stall))없이 충분히 유지된다면, 명령어는 사이클당 하나의 비율로 완료될 수 있다. 또한 수퍼스칼라 파이프라인 프로세스에서 이슈폭(issue width)(스칼라리티(scalarity)라고함) 까지의 복수명령어는 사이클 마다 끌어낼수 있다. 그래서, 복수 이슈 및 파리프라인에 의하여 최대 성능은 스테이지의 수 곱하기 이슈폭인 요소 만큼 증가된다.그와같은 피크동안 이와같은 요소에 근접한 많은 수의 명령어가 병행으로 실행한다. 이와같은 많은 명령어의 실행("인플라이트(inflight)"이라고 함)은 속도증가가 달성되게 한다.
메모리로부터 명령어를 검색하는 처리는 명령어 패치라한다. 프로세서 사이클 시간이외에, 명령어가 패치되고 디코드 될 수 있는 비율은 프로세서 성능에 결정적이다. 명령어 버퍼는 한단부에서의 정지(stall)가 다른 단부에서의 정지를 야기하지 않도록 패치 파이프라인(프론트엔드)와 실행 파이프라인(백크엔드) 사이에 도입될 수 있다. 양 파이프라인들은 높은 클럭 발생율을 얻는 복수의 스테이지로 구성한다.
명령어가 패치 파이프라인에 의하여 계속 처리되어서 명령어 버퍼로 보내진다. 실행 파이프라인은 명령어 버퍼로부터의 명령어를 동시에 처리한다. 명령어가 버퍼로 입력하는 비율(패치 비율)이 명령어가 버퍼로부터 나가는 비율(실행비율)과 매칭되면 최대 성능이 얻어질 수 있다. 최대성능은, 실제로는 파이프라인 정지 때문에 유지될수 없다. 정지의 3가지 주요 소스는 프로그램 흐름의 변경, 하드웨어 자원충돌 및 데이터 의존성이다. 프로그램 흐름의 변경은 방향(분기가 택하여 질것인지 아닌지) 및 택하여진다면, 수신지(분기의 타켓)내의 변경을 야기시키는 분기 명령어에 기인하여 일어난다. 분기를 실행하는 명령어 패치는 패치 파이프라인내의 스테이지인 프론트엔드에서 발생하여야 하고, 반면에 분기 명령어의 분석 또는 결과는 수행 파이프라인내의 스테이지에서 알려지기 때문에 명령어를 패치하는 것은 후속의 분석을 대기 시킬필요가 없이 분기 결과를 예측하기 위하여 분기 예측 구조를 이용하여야 한다.
예측이 그의 후속분석과 일치할 때, 패치하는 것은 충돌없이 계속된다. 예측이 오류라고 분석되면 패치하는 것은 틀리게 패치된 플라이트(flight)내의 모든 명령어를 제거하기 위하여 중지되어서 명령어에 대한 새롭고 올바른 시퀀스의 패치를 시작하여야 한다. 잘못된 예측으로부터 회복하기 위하여 그와같이 여분의 사이클은 오예측 페널티(penalty)라 한다. 파이프라인의 길이가(클럭 발생율을 증가 시키기 위하여) 증가될 때, 분기 오예측 페널티도 주요 성능 저하를 야기시키는데 비례하여 증가한다.
성능상의 그와같은 중대한 영향 때문에, 분기 예측 기술은 여러 가지 구조에서 수년에 걸쳐 강도있게 연구되어 왔다. 동적인 분기 예측은 분기의 실행 시간 성능에 따라 좌우된다. 정적 및 동적 결합 기법은 성능을 개선하기 위하여 분기를선택적으로 제거하고 코드를 인식하는 컴파일러 변환(정적)을 포함한다. 정적 기법은 또한 택하여진 예측이나 또는 택하지 않은 예측과 같은 예측힌트 비트(predict hint bit)를 분기명령어를 변경하는데 이용될수 있다.
동적 분기 예측 기법에 대한 하나의 주요한 예는 소위 GSHARE 예측 구조이다. 이 기법은 분기가 그의 과거동작(실시간에서)과 그이전의 인접 분기의 동작과 상관되어 있는, 흔히 관측되는 분기의 성질을 이용한다. 그래서, 전역이력(global history)(소정수의 인접 분기의 동작)이 분기 예측표에서 2-비트엔트리를 색인하도록 분기에 대한 소정수의 하위 어드레스비트와 결합되어 있다. 2-비트엔트리는 4개의 경우(상태), 즉 택한 것, 택하지 않은 것, 약한 베리어티(variety) 및 강한 베리어티를 식별하기 위하여 사용된다. 현재의 상태에 따라서, 분기는 택하여지게 예측된 것이거나 또는 택하여지지 않거나의 예측된 것 중의 어느 하나이다. 전역이력 및 엔트리는 출력에 따라 갱신된다. 두 개의 연속적인 오예측이 일어나는 경우에만, 상태는 택하여진것으로부터 택하여지지 않는 것으로 그리고 그역으로 변경된다. 이와같은 구조는 루프분기의 예측 비율을 향상시킨다. 그와 같은 동적 구조는 입력 데이터 특성에서의 변경에 기인한 분기의 상이한 동작에 적응하는 장점을 가진다.
고성능 프로세서는 더욱더 넓은 이슈폭을 포함한다. 실행속도에 의한 증가를 매칭시키기 위하여 패치속도(패치 대역폭)도 증가하지 않으면 안된다. 그리고 곧, 사이클 당 한 분기 이상을 예측하지 않으면 않되게 된다. 트FP이스 캐쉬(trace cache) 기법이 이와같은 요구사항을 부응하기 위하여 설계된다. 트레이스는 복수 분기 명령어를 가로지르는 수행경로에 상응하는 명령어의 순서이다. 그래서, 트레이스는 그의 시작점과 트레이스에 포함되어 있는 병행의 분기 결과의수에 의하여 특징이 지워진다. 트레이스 캐쉬로 장비된 프로세서에서 종래의 명령어 캐쉬는 트레이스를 기억하는 트레이스 캐쉬로 대체된다. 따라서 예측 단위는 단일 분기에 따른 기본 블록이 아니라 복수 분기 명령어를 포함하는 전체의 트레이스이다. 그래서 패치 대역폭이 개개의 분기보다도 오히려 트레이스로 처리함으로써 상당히 증가된다. 패치 대역폭은 트레이스 캐쉬의 본래 가지고 있는 여러 부가적인 이점들이 있다. 넓게 분리되어 있는 기본 블록들은 트레이스에서 연속적으로 나타나기 때문에 택하여진 분기의 이롭지 못한 효과(택하여진 분기 패널티)가 제거된다. 더욱이나, CISC(Complex Instruction Set Architecture)로 취급하면, CISC 명령어를 내부 마이크로-연산으로 번역하는 오버헤드는 번역된 코드의 트레이스 캐쉬를 기억함으로써 감소된다. 트레이스가 찾아지게 되는 경우, 반복적인 번역이 피하게 된다.
프로그램 흐름(상술함)에서의 변경이외에, 자원충돌과 데이터 의존성은 파이프라인 정지에 기여한다. 소정의 프로세서가 파이프라인 형태에서 특정한 혼합으로 파이프라인의 소정수로 구성되기 때문에 자원충돌이 일어난다. 예를들면, 프로세서가 2개의 정수, 2개의 부동소수점, 하나의 메모리 및 하나의 분기형의 혼합으로 여섯 개의 파이프라인으로 구성할 수 있고, 이에 대하여 매칭타입의 4개의 독립적인 명령어까지 사이클당 분류되어 실행될 수 있다.
순차적인 프로세서(In-order processor)에서 명령어는 프로그램 순서, 즉 컴파일러에 의하여 결정되는 명령어의 순서로 분류된다. 명령어의 자원 요구 패턴과 이용가능한 파이프라인간의 부정합은 파이프라인에서의 분류 및 유휴사이클에서 중단을 야기 시킨다. 더군다나, 필요하게되는 피연산자의 데이터가 준비완료가 아니라면, 명령어의 실행이 진행할 수 없기 때문에, 이전의 명령어(생산자)에 좌우되는 생산자 명령어의 회전지연에 따라 정지를 야기시킬수 있다. 예를들면, 생산자 명령어가 메모리 판독연산(적재)이라면, 그때 생산자 소비자 쌍간의 정지 사이클은 여러 가지 캐쉬 미스 패널티들은 포함하여 크게 될수 있다. 컴파일러는 자원충돌에 기인한 유휴 이슈슬롯(issue slot)을 최소화하도록 명령어들을 재배열하고 다른 독립 명령어를 채움으로써 생산자와 소비자 사이의 회전지연을 숨기게 명령어 스케줄링을 실행한다. 그와같은 컴파일러(정적)기법은 명백하게 프로세서 모델 및 컴파일러 시간에서 가정된 회전지연에 따라 좌우된다.
비순차적(out-of order) 프로세서에서, 프로세서는 프로그램순서에 관계없이 독립적인 명령어를 내보냄으로써 동적으로 명령어들을 재배열한다. 예를들면, 상술한 적재-용 정지에서 적재명령어는 프로그램 명령보다 더 일찍 나오게 할수 있어서 정적 스케줄링과 같은 유사한 효과를 가진다. 그러나 모든 명령어는 프로그램 정정을 보유하고, 정확한 제외사항들을 유지하며, 오예측의 불확실한 실행으로부터 복구하기 위하여 프로그램 순서와 동일 순서로 되게 하지 않으면 안된다. 이와같은 추가주문의 요구사항은 순차적인 종류와 비교할 때 비순차적 프로세서의 하드웨어 복잡성을 증가시킨다.
동적 기법은 재 컴파일을 필요하지 않고 기계 모델 및 회전지연에서의 변경에 동적으로 적합 하는 이점을 가진다. 그러나, 명령어가 발행되는 워인도의 사이즈 및 처리시간은 그의 유효성을 제한한다. 컴파일링 기법은 사이즈나 또는 처리시간에서 그와같은 제한이 없기 때문에, 순차적인 프로세서 뿐만 아니라 비순차적 프로세서에서의 더 높은 성능을 위해 리컴플링이 이용하게 된다.
보다 최근으로는 획득가능한 종래의 접근 방법을 사용하는 것 이상으로 명령어 레벨의 병행 처리특성을 개선하기 위하여 보다더, 진취적인 기법, 즉 술어실행 (predicated execution)(간단히 술어기법(predication)) 및 정적 예측 기법이 연구되기 시작되었다. 술어기법은 조건부 실행의 형태이며, 이 조건부 실행에서 명령어는 술어로 가드(어떤 개인용 컴퓨터의 하드웨어나 소프트웨어등이 그 호환기에서 작동되지 않도록 보호하는 것으로 이하에서는 "방어"라 한다) 될 수 있다. 술어는 술어 설정 명령어를 사용하여 참(1) 또는 거짓(0)으로 설정될수 있는 특수의 1비트 레지스터이다. 실행동안 명령어는 방어술어가 참값을 가질때는 정상적으로 움직인다. 방어술어가 거짓값을 가질때에는 명령어는 명령어가 조건부로 스킵 되는 것같이 어떤 의미의 효과(semantic effect)를 가지지 않는다(즉, 구조적 상태를 변경하지 않는다).
술어기법은 보다더 큰 기본블럭과 보다더 큰 효율적인 명령어 스케줄링으로 되게 분기제거를 허용한다. 더욱이나, 분기 오예측 패널티 및 택해진-분기 패널티는 자연적으로 회피된다.
술어기법을 사용하여 분기 명령어를 제거하는 처리는 "이프-변환(if-conversion)"으로 알려져 있다. 이것은 분기없이 술어코드로 분기명령어를 포함하는 코드를 변환한다. 술어코드에서 도입된 술어 설정 명령어를 포함하는 명령어는 적절히 할당된 술어에 의하여 방어된다. 최적의 이프-변화 기법은 도입된 술어 설정 명령어의 수뿐만아니라 사용에 있어서 술어의 수를 최소로 하지않으면 안된다.
형식적으로는 이프-변환은 분기에 의하여 야기된 콘트롤 의존성(dependece)을 술어를 통하여 데이터 의존성으로 변환한다. 제거되기 때문에 그결과는 그의 새로운 형태로 순수한 데이터 흐름에 더욱 접근한다. 이와같은 새로운 형태는 개선된 성능을 생기게 하는 여러 가지 명령어 스케줄링 기법을 용이하게 한다.
일반적으로, 의존성(dependency)은 코드이동을 숨기고 명령어 스케줄링을 강요한다. 예측실행은 어떤 의존성을 방해함으로써 그와 같은 제한을 극복한다.
콘트롤 종류와 데이터종류인 2 종류의 예측실행이 있다. 분기 예측은 콘트롤 예측실행의 동적 형태이다. 분기의 결과를 예측하고 예측이 올바르다고 하는 것을 예측하는 명령어를 실행한다. 상술한바와 같이, 이와같은 기법은 예측이 틀린 것으로 판명 되었을 때 오예측 패널티를 초래하게 한다.
다른 한편, 정적 콘트롤 예측실행에서 컴파일러는 "방어(guarding)" 분기위로 명령어를 이동한다. 이와같은 형식에서, 예측된 명령어에 의해 생성된 결과가 궁극적으로 사용되는 것을 예측하는 명령을 실행한다. 상기 결과가 사용되지 않는 경우 "비사용" 명령어의 실행은 성능 패널티를 야기시킬수 있다.
데이터 종류의 정적 예측 실행에 있어서, 메모리 판독 명령어(적재)는 충돌일수 있거나 또는 아닐수 있는 과거의 메모리 기록 명령어(기억)로 교체된다. 컴파일 시간에서 적재-기억 쌍이 독립적인가를 증명하기 위하여 모든 적재-기억쌍이명료하게 될 필요는 없다. 세이프(safe)이기 위하여서는 컴파일러는 그 쌍들이 의존성이라고 하는 보존적 결합을 만들지 않으면 않된다. 데이터 종류의 정적 예측실행은 그것을 최적으로 제거함으로써 그와같은 데이터 의존성을 극복한다. 이것은 적재와 과거의 기억을 자유로이 이동시키도록 하여 준다
예측적재는 틀린 예측실행을 검출하고 틀린 예측실행의 검출시에 즉시 복구를 수행하기 위하여 특별한 행위(action)가 일어나도록 일반적인 적재와는 식별하지 않으면 않된다. 복구는 방해중인 것으로 검출된 기억연산의 효과를 고려하여 재 적재하는 것을 포함할수 있다. 그와같은 정정 행위는 성능패널티를 초래한다. 동적이냐 정적이냐, 콘트롤 종류에 대한것이냐 데이터 종류에 대한 것이냐의 예측실행의 목표는 예측실행의 본질적인 오프셋 패널티 이상으로 병행처리 특성을 증가시켜서 성능내의 순수이득을 달성하는데 있다.
도 1은 종래 기술의 컴퓨터 시스템에 대한 블록도,
도 2는 본 발명의 실시예에 대한 블록도,
도 3은 본 발명의 실시예에 따른 처리를 설명하는 흐름도,
도 4는 인터모스트 루프(intermost loop)를 나타낸 도면,
도 5는 이프-변환 이전의 루프버디(Loop Boody)의 내부표현을 나타낸 도면,
도 6은 추상적 IR, AIR에서 술어로된 루프보디를 나타낸 도면,
도 7은 기계 IR, MIR로 변환된 루프 보디를 나타낸 도면,
도 8은 기계 IR, MIR에서 향상된 루프 보디를 나타낸 도면,
도 9는 노드 n16을 커버하기 위한 깊이(Depth) 2의 서프그래프를 나타낸 도면,
도 10은 향상된 루프 보디, MIR+에서 검사 분기의 효과를 나타낸 도면이다.
도면의 주요부호에 대한 설명
22, 122 : 마이크로 프로세서 24, 124 : CPU
26, 126 : 메모리 콘트롤러 28, 128 : 내부 레지스터
30, 130 : 온-칩 캐쉬메모리 32, 132 : 외부 캐쉬 메모리
34, 134 : 메인 메모리
전반적으로, 본 발명의 일면에 의하면, 술어 코드를 최적화하기 위한 확장 가능한 규칙-기반 기술적 방법은 추상 내부 표현을 이프-변환하는 것과 이프-변환을 기계 표현으로 매칭하는 것을 구비한다. 본 발명의 하나 이상의 실시예에 따라 상기 기술적 방법을 상기 매프된 이프-변환으로부터 술어를 제거하는 것을 더 구비할수 있다. 술어를 제거하는 것은 해석에 의하여 명령어를 정의하는 술어를 제거하는 것을 구비할수 있다. 또한 술어를 제거하는 것은 예측실행에 의하여 세이프 명령어의 방어 술어를 제거하는 것을 구비할 수 있다. 또한, 술어를 제거하는 것은 보상에 의하여 언세이프(unsafe) 명령어의 방어 술어를 제거하는 것을 구비할수 있다. 또한 술어를 제거하는 것은 역 이프-변환에 의하여 부적당한 명령어의 방어술어를 제거하는 것을 구비할수 있다. 상기 기술적 방법은 기계표현을 최적화 하는 것을 더 구비할수 있다.
전반적으로, 본 발명의 일면에 의하면, 술어 코드를 최적화 시키기 위한 확장 가능한 규칙-기반 시스템은 명령어를 실행하기 위한 프로세서와 명령어를 구비한다. 상기 명령어는 술어를 정의하고 분기 명령어를 검사하며, 검사의 결과에 토대하여 정의된 술어를 분기 명령어로 할당하기 위한 것이다.
전반적으로, 본 발명의 일면에 의하면, 술어 코드를 최적화 시키기위한 확장 가능한 규칙-기반 방법은 술어를 정의하고, 분기명령어를 검사하며, 상기 검사의 결과에 토대하여 정의된 술어를 분기명령어로 선택적으로 할당하는 것을 구비한다.
전반적으로, 본 발명의 일면에 의하면, 술어 코드를 최적화 하기 위한 장치는 추상적 내부 표현을 이프-변환 하기 위한 수단과, 상기 이프-변환을 기계 표현으로 매핑 하기 위한 수단을 구비한다. 본 발명의 하나 이상의 실시예들에 따라, 상기 장치는 매프된 이프-변환으로부터 술어를 제거하기 위한 수단을 더 구비할수 있다. 상기 술어를 제거하기 위한 수단은 해석에 의해 명령어를 정의하는 술어를 제거하기 위한 수단을 구비할수 있다. 또한 상기 술어를 제거하기 위한 수단은 예측실행에 의하여 세이프 명령어의 방어 술어를 제거하기 위한 수단을 구비할 수 있다. 또한 상기 술어를 제거하기 위한 수단은 보상에 의해 언세이프 명령어의 방어 술어를 제거하기 위한 수단을 구비할수 있다. 또한 상기 술어를 제거하기 위한 수단은 역 이프-변환에 의하여 부적당한 명령어의 방어 술어를 제거하기 위한 수단을구비할 수 있다. 상기 장치는 기계표현을 최적화 하기 위한 수단을 더 구비할수 있다.
전반적으로, 본 발명의 일면에 의하면, 술어 코드를 최적화 하기위한 확장가능한 규칙-기반 기술적 방법은, 추상적 내부표현을 이프-변화하는 것과, 상기 이프-변환 하는 것을 기계 표현으로 매핑 하는 것과, 상기 매프된 이프-변환으로부터 술어를 제거하는 것과, 기계표현을 최적화 하는 것을 구비한다. 상기 술어를 제거하는 것은 해석에 의하여 명령어를 정의하는 술어를 제거하는 것, 예측실행에 의하여 세이프 명령어의 방어술어를 제거하는 것, 보상에 의하여 언세이프 명령어의 방어 술어를 제거하는 것, 그리고 역 이프-변환에 의하여 부적당한 명령어의 방어 술어를 제거하는 것을 구비한다.
전반적으로, 본 발명의 일면에 의하면, 명시적 술어 하드웨어 없이 술어 실행을 지원하는 기술적 방법은 검사분기 명령어를 구현하는 것을 구비한다. 본 발명의 하나 이상의 실시예에 따르면, 상기 검사분기 명령어는 전체로직 명령어 집합이 최적코드를 생성하기 위해 조건부 코드에 토대한 분기조건을 사용될수 있도록 범용 레지스터내의 부울 데이터로 변환할수 있다.
전반적으로, 본 발명의 일면에 의하면, 명시적 술어 하드웨어 없이 술어 실행을 지원하는 시스템은 명령어를 실행하기 위한 프로세서, 그리고 전체로직 명령어 집합이 최적 코드를 생성하도록 조건부 코드를 토대로한 분기조건을 범용 레지스터 내의 부울 데이터로 변환하고, 분기에 의하여 둘러싸인 예측에 부적절한 명령어 집합을 방어하기 위한 명령어를 구비한다.
전반적으로, 본 발명의 일면에 의하면, 명시적 술어 하드웨어 없이 술어의 실행을 지원하는 방법은 검사 분기 실행을 구현하는 단계를 구비한다. 본 발명의 하나이상의 실시예들에 따라, 검사분기 실행은 전체의 로직 명령어 집합이 최적코드를 생성하기 위해 사용될 수 있도록 조건부 코드를 토대로한 분기조건을 범용 레지스터 내의 부울 데이터로 변환할 수 있다.
전반적으로, 본 발명의 일면에 의하면, 명시적 술어 하드웨어 없이 술어 실행을 지원하는 장치는 검사분기 명령어를 구현하기 위한 수단, 그리고 구현된 검사분기 명령어를 사용하여 술어를 제거하기 위한 수단을 구비한다. 본 발명의 다른면과 장점은 하기의 설명 및 첨부된 청구범위로부터 명백할것이다.
하드웨어 및 소프트웨어 기법에 관련된, 술어실행(PE)은 새로운 세대의 아키텍쳐 강조 명령어-레벨 병행 특성에 대한 주요한 특징중의 하나이다. 그러나 술어 레지스터, 술어 정의 연산 및 술어를 방어하기 위한 명령어에 있어서의 부가필드를 포함한다. PE를 지원하는 방어 아키텍쳐에 대한 요구사항은 기존의 명령셋 아키텍쳐(ISA)에서 심한 충돌을 일으킨다. 하나이상의 실시예에서, 본 발명은 기존의 아키텍쳐에서의 충돌을 최소화하면서, 명시적인 방어 아키텍쳐의 성능을 얻거나 또는 초과 달성하는 것이 가능하도록 설계된 대안의 접근 방법을 지원하는 새로운 컴파일 기법 및 이에 관련의 하드웨어를 포함한다.
예시의 목적으로 본 발명에서 설명되는 예시적인 아키텍쳐는 San Microsy stems, Inc. of Palo Alto, CA에 의하여 개발된 SPARCTM아키텍쳐이다.
도 2를 참조하면, 본 발명의 실시예에 따른 프로세서의 블록도가 도시되어 있다. 프로세서(122)는, 그 중에서도 특히, CPU(124), 메모리 콘트롤러(126) 및 온칩 캐쉬메모리(130)를 가지고 있다. 마이크로프로세서(122)는 데이터 및 마이크로프로세서(122)에 의하여 실행되는 프로그램 명령어를 모두 보유하는 외부 캐쉬 메모리와 메인 메모리(134)에 연결되어 있다. 내부적으로 프로그램 명령어의 실행은 CPU(124)에 의하여 수행된다. 명령어를 수행하기 위해 CPU(124)에 의해 필요하게 되는 데이터는 메모리 콘트롤러(126)에 의하여 패치되고 CPU(124)의 내부 메모리(128)로 적재된다.
프로세서(122)는 분기가 택하여 질 것인지 또는 아닌지를 결정하기 위하여 소정의 조건부 분기 명령어를 검사하는 새로운 명령어를 포함한다. 검사된 조건부 분기가 참(택여여진것)이라면, 수신지 레지스터로서 특정된 범용 레지스터는 1(참)으로 설정된다. 그렇지 않으면, 수신지 레지스터는 0(거짓)으로 설정된다.
그 효과는 특정 조건 코드 레지스터내의 조건, 정수뿐만 아니라 부동 소수점(%fccn, %Icc, %Xcc)를 수신지 레지스터내의 정규 부울 데이터(1 또는 0)로 변환하는 것이다. 수신지 레지스터는 술어로서 계속하여 작동한다. 이것은 조건부 코드들을 범용 레지스트로 대체하고 그것에 의하여 명령어-레벨 병행 특성을 저하시키는 조건부 코드 사용을 제거하는 부수적인 이점을 가진다. 범용 데이터 내의 부울 데이터는, 부울 연산이 보통의 논리 연산을 사용하는 다른 술어와 결합하여 수행될 수 있도록 정규화된 참 또는 거짓이다. 그래서 술어를 취급하는 특수한 연산에 대한 필요성이 회피된다.
예를들면, 새로운 명령어는 부동 소수점 조건부 코드에 대한 검사 분기(Test Branch On Floating-Point Condition Codes:tfbx) 및 정수 조건부 코드에 대한 검사 분기(Test Branch On Integer Condition Codes: tbx)일수 있다. 후술하는 바의 이들 명령어들은 술어의 실행을 위한 명시적인 지원 없이 종래의 아키텍쳐에서 이프-변화의 효율을 향상시킨다. 하기에 포함되어 있는 정의된 명령어에 있어서, 사용되는 기호는 SPARCTM아키텍쳐 매뉴얼(버전9)의 약정과 일치한다. 예시적인 명령어인 부동 소수점 조건부 코드에 대한 검사 분기(tfbx)와 정수 조건부 코드에 대한 검사 분기(tbx)는 다음과 같은 특성을 가진다.
(1) 부동 소수점 조건부 코드에 대한 검사 분기
Opcode tfb<x> %fccn,rd
여기서, 조건x는 다음중의 하나이다.
uUnordered
gGreater
ugUnordered or Greater
lLess
ulUnordered or Less
lgLess or Greater
ne(nz)Not Equal(Not Zero)
e(z)Equal(Zero)
ueUnordered or Equal
geGreater or Equal
ugeUnordered or Greater or Equal
leLess or Equal
uleUnordered or Less or Equal
oOrdered
조건부코드들(%fccn)은 특정 조건부(x)에 대하여 검사된다. 조건이 참인 경우에는, 수신지 레지스터(rd)로 지명된 범용 레지스터는 1로 설정된다. 또한 조건이 거짓인 경우에는 수신지 레지스터는 0으로 설정된다.
조건 올웨이스(always)(a)와 네버(never)(n)는 관련된 콘트롤 에지(edge)가 콘트롤 의존성에지 일수 없기 때문에 필요하게 되지 않는다.
(2) 정수 조건부 코드에 대한 검사분기
Opcode tb<x> i_or_x_cc,rd
여기서 조건x는 다음것중의 하나이다.
ne(nz)Not Equal(Not Zero)
e(z)Equal(Zero)
gGreater
leLess or Equal
geGreater or Equal
lLess
guGreater or Unsigned
leuLess or Equal or Unsigned
cc(geu)Carry Clear(Greater or Equal or Unsigned)
cs(lu)Carry Set(Less or Unsigned)
posPositive
negNegative
vcOverflow Clar
vsOverflow Set
조건부코드들(%Icc 또는 %Xcc)은 특정조건(x)에 대하여 검사된다.
상기와 같이, 조건이 참인 경우에는, 수신지 레지스터(rd)로 지명된 범용 레지스터는 1로 설정된다. 또한, 조건이 거짓인 경우에는, 수신지 레지스터는 0으로 설정된다. 조건 올웨이(a)와 네버(n)는 관련된 콘트롤 에지가 콘트롤 의존성에지 일수 없기 때문에 필요하게 되지 않는다.
도 2를 참고하면, 본 발명의 실시예에 따른 프로세스에 대한 개략도가 도시되어 있다. 개개의 단계는 도 3을 인용하여 도입되며 아래에 각각에 대하여 상세히 설명된다. 먼저, 프로세스는 전 방어 지원을 가진 가상적 기계에 대하여 추상 내부 표현(Abstract Internal Representation)(AIR)에 대한 이프-변환으로 시작한다(단계50). 그 다음 AIR에 대한 이프-변환은, 구체적으로는 방어 술어를 제거하는 기계 표현(MIR)로 변환된다(단계 52). MIR로의 AIR 변환은 다음의 4가지 부분으로 구성되어 있다.
먼저, 술어정의 명령어가 해석에 의하여 제거된다. 그 다음 세이프 명령어의 방어 술어는 예측에 의하여 제거되고(단계56) 언세이프 명령어의 방어 술어는 보상에 의하여 제거된다(단계 58). 최종적으로 부적당한 명령어의 방어 술어는 역 이프-변환에 의하여 제거된다(단계60). 어느 명령어가 세이프, 언세이프 및 부적당한 명령어인가는 더욱 상세히 후술한다.
술어 제거가 이루어진 후에, 그 결과의 MIR은 특별히 설계된 변환을 적용함으로써(단계 62) 향상된다. 하나 또는 그 보다 많은 실시예에서, 상술한 프로세스는 술어 실행을 명시적인 술어 하드웨어 없이 정적 예측실행으로 변환한다. 상술한 바와 같이, 술어실행(PE)은 현대의 마이크로 프로세서 아키텍쳐 강조의 명령 레벨 병행 특성에 대한 주요한 특징이다. 그와 같이, 방어(술어)의 아키텍쳐에 대한 PE는 분기, 즉 이프-변환을 제거하기 위하여 하드웨어-소프트웨어 결합 기법으로써 많은 사람에 의하여 연구되어 왔다. 성능은 콘트롤 의존성을 가진 루프의 소프트웨어 파이프라인으로부터 예측 분기 명령에 대한 선택적 제거범위에 이르기까지, 여러 가지 방법으로 얻어진다.
그러나 PE를 지원하는 방어 아키텍쳐에 대한 요구사항들은 기존의 명령어 설정 아키텍쳐(ISA)와 심하게 충돌한다. 특히, 전체 방어 아키텍쳐는 새로운 술어 레지스터, 술어정의 (설정) 명령어 및 방어 술어를 어드레싱 하기 위한 명령어내의 부가필드를 포함하지 않으면 안된다.
도 4-10을 참조하면, 본 발명의 하나 이상의 실시예들에서, 본 발명은 PE 성능에 대한 장점을 보유하면서 종래의 RISC 아키텍쳐에서의 ISA 변경을 최소화하는 기법이다. 상기 기법은 기존의 아키텍쳐에서 PE를 이용한다. 이것은 충분한 방어의 지원 없이 방어의 아키텍쳐에 대한 PE를 정적 예측실행(LSS)으로 변환함으로써 달성된다.
하기에 설명되는 예시적 실시예에서, SPARCTM프로세서가 사용된다. 본 발명의 기술분야에서 통상의 지식을 가진자는 상기 기법은 가능한 약간의 표기법의 수정으로 다른 프로세스들에도 똑같이 적용할 수 있음을 이해할 것이다. SPARCTM에 적용될 때, 본 발명에서 SPARCTM에 대한 RK(RK/Spare)로서 인용되는 상기 기법은 기존의 SPARCTM-V9에 대한 술어 실행의 성능상 이점을 얻게된다. RK/Spare의 체제 내에서, SPARCTM-V9에 대하여 이루어진 향상은 기존의 명령어 설정 아키텍쳐에서의 충돌이 완화된 것이다. 이와같은 향상으로 RK/Spare는 방어 아키텍쳐의 것과 비교할 수 있는 성능을 얻는다.
상기 기법은 술어의 아키텍쳐에 대한 이프-변환을 위한 일반적이고 최적의 알고리즘이 발견되었고 PE 노력으로 구축한다. 본 발명의 실시예들은 명시적 술어 하드웨어가 내재의 술어와 같은 범용 레지스터를 사용하는 정적 예측실행에 의하여 대치되는 방식으로 비방어 아키텍쳐로 PE를 확장한다.
본질적인 아이디어는 이프-변환이 콘트롤 의존성을(분기를 통하여) 데이터의존성(술어를 통하여)으로 단순히 변환하는 것과, 만약 그와같은 의존성이 위반되는 경우에 고성능이 될 수 있다는 점에 있다. 이와같은 의존성의 위반은 정적 예측실행의 콘트롤 종류로 된다. RK/Spare 기법은 2개의 표현과 이들 표현들에 대한 변화을 사용하는 3단계로 이것을 달성한다. 이 두표현들은, 모두 문자에서 로우-레벨로서 추상적 내부표현(AIR)과 물리적 SPARCTM-V9 기계표현(MIR)이다. AIR은 전체의 술어 지원을 가진 가상 SPARCTM-V9 아키텍쳐를 나타내고 이와 반면에 MIR은 기존의 SPARCTM-V9 비방어의 아키텍쳐를 나타낸다.
예를들면, 인너모스트루프의 몸체인 소정 소정영역 R에 대하여, RK/Spare는 R를 3단계로 변환한다.
단계 1, AIR에 대한 이프-변환
단계 2, AIR로부터 MIR로 맵 그리고
단계 3, MIR을 개선된 MIR'로 최적화,
이들3개의 변환단계는 도 3의 단계(50), (52) 및 (62)에 대응하는 것임을 유의하여야 한다. 예시적인 설명은 변환이 일어나는 바와 같은 AIR, MIR 및 MIR'의 구조에 대한 표현을 사용하여 각 단계에서의 효과에 관하여 다음과 같이된다. 구조에 대한 표현은 데이터 흐름과 이해하는데 도움이되는 다른 정보로 주석을 단다.
이예에서, 도 4에 도시된 루프가 사용된다. 도 4는 인너모스트 루프(200)를 나타낸 것이다. 이프-변환 루프(200)의 내부표현(202)이 도 5 도시되어 있다. 도시된 구조표현에서, 명령어는 자원 및 수신지 피연산자(destination operand)용으로 번호가 매겨진 심볼(tn)을 사용하여 표시된다. 시각적인 이해를 돕기 위하여 수신지는 =심볼의 왼쪽에 나타나 있다. 마크된 심볼(-tn)은 빠져있는 수신지에 대한 형식적인 장치로서 사용된다. 각각의 기본 블록은 그의 종류(ki), 영역의 헤드/테일(H/T)을 나타내는 플래그(fl), 연산자의 번호(op), 직접적인 도미네이터(do) 및 직접의 포스트 도미네이터(po)로 주석되어 있다. SPARCTM-V9 AIR은 많은 술어(가상적이기 때문에, 필요한 만큼 많은)를 가지며 제안된 술어 정의 명령어, 부동 소수점 조건부 코드에 대한 검사분기(tfbx)와 정수조건부 코드에 대한 검사분기(tbx)를 가지는 것으로 가정된다. 이들 명령어들은 상술한 바와 같이 분기조건들은 범용레지스터내의 부울값으로 변환한다.
이프-변환의 문제인, 소정의 콘트롤 플로워 그래프(G)는 2개부분으로 구성되어 있다. 즉, (1) G의 각노드(기본블럭)에 어떻게 술어를 할당하는 가와, (2) 술어 및 그들의 정의 연산자들이 최소가 되도록 술어 정의 연산자들을 어떻게 배치하느냐로 구성되어 있다. PE 알고리즘은 R=역(K)οCD 가 되도록 콘트롤 의존성(CD)을 2개의 맵 R 및 K로 분해함으로써 양자의 문제를 해결한다.
각 노드 X에 대하여 R(X)는 술어 P를 노드에 할당되게 하여준다. 각 술어(P)에 대하여 K가 설정되면, K(P)는 정의되는 연산자가 설치되게 하여준다. 언급하는 것에 따라 정하여지는 이와같은 해결은 동일의 콘트롤 의존성을 가진 노드들의 동등한 분류와 각각 특정의 동종 분류와 관련되어 있는 집합(K집합이라 함)으로 콘트롤 의존성 에지를 분류하는 것 사이에는 동형이질(isomorphism)이다. 이와같은 추상적인 견지에서, 술어는 등가분류 및 상응하는 K집합의 이름에 불과하다.
이와같은 예에 적용될 때 PE 알고리즘은 표 1 및 표 2에 도시된 2개의 맵 R 및 K를 생기게 한다.
R은 술어 p=R(B)에 대한 블록의 맵
B 1 2 3 4 5 6 7 8 9
P 2 7 6 5 4 3 2 1 1
K는 K집합=K(p)에대한 술어의 맵
P 1 2 3 4 5 6 7
K { } {8} {3,1} {-4,-8} {2,-3,-8} {-2,-8} {-1}
블록(8)(스타트) 및 9(엔드)는 본 발명에서 그의 전체를 참조로 통합되어 있는 기술보고서 「"On Predicated Execution" by J.C.H. Park and M.S Schlansker, Hewlett-Packard Loboratories, Palo Alto, CA, 1991」에서 설명된 바와같이 콘트롤 의존성(D)을 계산하기 위하여 콘트롤 플로워 그래프를 확장하도록 도입되어 있다.
그래서, 예를들면, 블록 B4는 술어 P5=R(4K)로 할당된다. 술어 P5에 대한 정의(설정) 명령어는 집합 K(5)={2,-3,-8}로 주어진다. 도입되는 새로운 검사분기 명령어를 사용하여, 이와같은 추상결과에 구체적인 의미를 줄 수 있다. 요소 -3에 대응하여, 예를들면, B3의 분기명령어는 후술하는 바의 새로운 검사분기명령어(tbfx)를 사용하여 정의명령어 P5=tfbl(t126,0)으로 변환된다. K집합의 요소에 관련된 부호에 따라 0 또는 1의 제 2 피연산자 bfbx의 추상형태를 사용하는 것은 편리하다. 이와같이 정의하는 명령어는 B3에 배치되기 때문에 B3에 할당된 술어 P6로 방어되지 않으면 안된다. 그래서 명령어는
p5=tfbl(t126,0) & p6 이다.
여기서 방어 술어 p6은 분리기호 &에 뒤따른다.
K 집합 요소 -8(여기서 8은 스타트 블록으로 언급한다)은 도 6의 p6=mov(0)과 같은 리세트 연산동안 멈춰있는다. 리세트 연산에 대한 요구는 술어의 교묘한 면중의 하나이다. 미싱 리세트(missing reset)는 보다 이전에 설정되어 있지 않는 술어 사용에 기인하여 술어 코드 오류를 야기시킬 수 있다. 직선적 코드로 다수 블록의 경과에 의해 뒤따르는 술어인 PE의 최종결과가 도 6에 도시되어 있다.
도 6에서의 SPARCTM-V9의 전체 방어되는 버전을 취급하는 경우, 도 6에서의 술어코드(204)가 적용된다. 전 술어 지원을 제거함에 있어서의 RK/Spare의 효과는 이와같은 전 방어코드에 관하여 판정되어진다.
도 6을 참조하면, 가상 방어의 SPARCTM프로세서(204)에 대한 술어코드로부터 시작하여 여러 가지 변환이 적용되어서 방어 술어를 제거한다. RK/Spare의 제 2 단계는 추상표현의 코드를 물리적 기계표현(MIR)에 대한 것, 즉 SPARCTM-V9로 변환한다. 이 목적으로 명령어가 적용되는 다른 변형에 따라 다음 4가지 분류로 분류된다.
a. 해석에 의해 변화되는, 검사분기인 정의 명령어,
b. 예측에 의한 세이프 명령어,
c. 보상에 의한 언세이프 명령어, 그리고
d. 역 이프-변환(RIC)에 의한 부적당한 명령어,
이들 분류들은 도 3의 술어 제거 단계들(54),(56),(58) 및 (60)에 대응한다는 것을 유념하여야 한다.
목록된 4개 분류로의 명령어 분류는 RK/Spare에 대한 구동하는 발견적 방법(heuristics)의 일부분이다.
기억 명령어는 최종결과에 대한 선택의 효과 뿐만아니라 그의 연관관계에 따라 언세이프 또는 부적당한 것의 어느 하나로 택하여 질 수 있다. 도 6에서의 예를 사용하면 상기 목록된 변형의 4 종류가 예시되어 있다.
도 6의 술어코드 AIR(204)의 13번째 명령어(205)를 고려하면,
P5=tfbl(t126,0) & P6 이다.
방어 술어는 방어 술어 tfbl을 예측하고 movrnz을 사용하여 적절한 결과를 조건부로 처리 종료함으로써 제거된다.
그래서 상기 명령어는 비방어 명령어의 순서에 의하여 대체된다.
Q3=tfbl(t126,0)
P5=movrnz(P6, Q3)
그 다음 검사분기 tfbl이 상기 쌍으로 해석함으로써 제거된다.
Q3=mov(1)
Q3=movl(t126,0)
상기 결과는 MIR(도 7)의 명령어 17 내지 19(도 7)의 수순이다.
이와같은 방식으로 방어 명령어를 제거하는 것은 자연히 예측실행으로 된다. 술어 정의 명령어의 예측실행은 Q3과 같은 새로운 작업 레지스터를 포함함을 유념하여야 한다. 접두사 Q는 "사용-한번(use-once)"이라는 특별한 성질을 가진 부울값을 나타낸다. 이들 성질은 후술하는 최적화 기법에서 유용하다.
"택하여진"(n)에지와 "택하지 않아진"(-n)에지 모두가 K집합의 요소로서 발생할 때, 모두 콘트롤 의존성에지 이기 때문에 해석 오버헤드(interpretation overhead)가 역의 값을 생성하도록 배타직 논리합(XOR)를 사용함으로써 경감된다. 본 발명의 예는 MIR(도 7)에서 술어를 포함하는 3개의 배타적 논리합 연산으로 되는 3개의 경우를 포함한다.
세이프로 분류된 명령어에 대한 방어 술어는 조건과 같은 방어 술어를 가진 movrnz를 사용하는 조건부의 처리종료에 뒤따르는 새로운 작업 레지스터(접두사 W로 지정된)를 사용하여 예측실행 함으로써 제거된다.
기억 명령어(st)와 같은 어떤 명령어는, 조건부 처리종료를 이용하여 그의 결과를 간단히 원상태로 돌릴수 없기 때문에, 예측이 불안전하다. SPARCTM-V9내의 범용의 술어 기억 명령어가 없을 시에, 보상 코드가 사용된다. 2개의 다른 방법이 고려된다. 하나는 이전 값으로 적재하고 새로운 값으로 이전 값을조건부로(movnrz를 사용하여)변경하는 것이다. 다른 하나를 사용상에 해가 없는 것(기설정됨) 또는 사용상 실제의 것의 어느 하나로 조건부로 어드레스를 수정하는 것이다. 전자의 구조는 도 7의 예에서 사용되어 있다. 그 자체에서 발생된 적재 명령어가 예측적이기 때문에 Idda와 같은 무-고장의 종류가 사용된다.
적재 명령어는 예측에서 언세이프와 부적당한것 모두 일수 있다. SPARCTM-V9는 무-고장의 적재를 제공하여 주어서 치명적인 예외(exception)를 피할 수 있지만 불필요한 TLB를 지연시킬수 있는 예측 종류를 제공하거나 또는 값비싼 캐쉬의 손실을 제공한다.
SPARCTM-V9에서 여러종류의 예측 적재를 도입하는 성능상의 손실 및 복잡성 사이의 공학적인 교환을 위하여서는 대규모의 실험적 데이터가 필요하게 된다.
정수 나누기(interger divide)와 같은 명령어는 예측될 때 나누기체크를 야기시킬 수 있기 때문에 언세이프이다. 세이프인 것으로 알려진 것이나 하더라도, 관련된 실행 가능성이 낮을 때에는, 멀티-사이클 블록킹과 같은 제한을 디스패칭(dispatching)하기 때문에, 명령어는 예측에 부적당하다. 그와같은 경우에는 분기가 재차 도입되어서 부적당한 명령어를 방어하는 역할을 하는, 역 이프-변환에 의하여 취급된다.
이들 AIR 대 MIR 변환을 적용하는 최종결과(206)가 도 7에 도시되어 있다. 도 6의 술어 코드와 비교하면 명령어 카운트수가 43%(43/30)만큼 증가하였다. 그와같은 비효율성은 택하여진 방법에 있다. 변환은 다른 것들의 누적 결과를 고려하지 않고 한번에 하나씩 격리하여 적용된다. 그래서 모든 그와 같은 변환이 완료된 후에는 다음에 설명되는 변환을 최적화함으로써 그결과가 향상된다.
한실시예에서, 개발된 새로운 기법은 카버(cover)로서 알려진 심볼해석에 토대한 규칙-기반 자기동형(rule-based automorphic) MIR 대 MIR 변환을 구비한다. 이들 변환은 하기의 여러 가지 방법으로 코드를 개선하도록 설계되어 있다. 즉 이들은 (1) 술어 리세트 연산자의 제거와 같은 명령어 카운트수의 감소, (2) 통상의 논리 연산자로 조건부 동작을 대체함으로써 디스패칭 비용의 감소 (3) 조건부 코드 사용의 제거등이다. 본 발명의 구조에서 변환은 커버링 대그(covering dag)에 의하여 규칙을 재기록하는 것과 같이 수행된다. 이와같은 프레임 워크는 실험적 해석과 증분적 향상을 도와준다. 본 발명의 자기동형인 변환은 다중 변환의 효과를 복합시키기 위하여 반복하여 적용될 수 있다. 결국, 고정 소수점은 이용가능한 변형의 집합에 대하여서는 더 이상의 개선이 불가능하다는 점을 암시하기에 이른다. 이와같은 구조가 도 7의 MIR(206)에 적용될 때 도 8에서의 향상된 MIR'(208)을 만들어낸다. 명령어의 카운트 수가 23%(43/35) 만큼 감소됨을 유념하여야 한다.
그것을 계산하기 위한 효율적인("거의 선형") 방법과 같이 커버의 개념은 본 발명의 기술분야에서 공지되어 있다. 커버는 심볼 표현식과 텍스트(Text) 표현식이 임의의 코드 수행에 있어서 동일한 값을 가지도록 커버는 심볼 표현식을 소정 코드의 각 텍스트 표현식으로 결합시킨다. 특히 커버링 심볼 표현식은 코트 텍스트 내의 어느점에서도 데이터 흐름정보를 용이하게 포착한다. 이 기법은 후술하는 바와 같이 술어의 MIR을 향상시키기 위한 충분한 정밀도로 커버를 계산하기 위하여부분평가(partial evaluation)와 결합시킴으로써 확장되었다. 커버를 토대로하는 분석의 질은 그의 정밀도에 따라 좌우된다. 본 발명의 커버에 있어서의 정밀도는 주로 값이 알려져 있을 때의 부분 평가와 커버 구성동안에 리턴던트 명령어의 검출/제거에 기인된다. 도 7에서 술어의 MIR(206)에 대한 15차 명령어(206)를 고려하면,
P5=movrnz(P7, Q2)![15 4 14] n16 이다.
커버는 내부적으로 각 명령어(LHS of ! 대한 텍스트 표현식)이 그래프의 노드와 결합되도록 직선 그래프와 같이 내부적으로 구성되어 있다. 예를들면, 노드 n16에 뿌리를 박은 서브그래프는 이 명령어와 결합되어 있는 커버링 심볼표현식을 나타낸다. 각 명령어가 이 커버의 노드와 결합되어 있기 때문에 노드이름과 같이 [15 4 14]와 같은 조의 명령어 번호들을 줌으로써 그래프를 충분히 설명할 수 있다. 조[15 4 14]는 명령어 15의 노드가 명령어 4와 14와 결합되어 있는 계승자(successor) 노드들을 가지는 것을 의미한다. 상수 및 불 변수와 같은 리프노드들(leaf nodes)은 그와같은 조로 나타나지 않는다.
동일값으로 평가하는 명령어들(텍스트 표현)은 동일 노드와 결합되어 있기 때문에 명령어와 커버링 노드간의 대응은, 다수대 하나이다. 커버의 이와같은 근본적인 성질은 리턴던트 명령어들의 검출과 제거에 있어서 유용하다.
도 9는 커버링 노드 n16에 대한 깊이 2의 서브그래프이다. 텍스트 표현식과 결합되어 있는 각 노드에 대하여, 명령어의 LHS(P5와 같이), 명령어(MOVNRZ) 및 명령어 변화(207)는 노드이름(n16)과 같이 표시되어 있다.
술어의 MIR에서 오버헤드의 대부분은, 예측실행을 통하여 직접적으로(P)또는 간접적으로(Q), 술어를 포함하는 계산에 기인한다. 코드를 향상시키기 위한 개시된 기법은 많은 변수중의 허수 부울 함수를 특정화하는 부울 변수만을 포함하는 어떤 커버를 고려한 새로운 아이디어에 토대를 두고 있어서 술어의 MIR를 최적화하는 문제를 디지털 설계에 있어서의 회로 최소화 문제의 것으로 변환한다.
이들 문제에 대하여 2부분이 있다 : 즉 이들 2부분은 (1) 특정 커버가 어떻게 인식되어야 하는것과 (2) 최적화된 대체는 무엇이어야 하는 것이다.
첫 번째 문제를 해결하기 위하여 본 발명은 식별 목적으로 커버에 대한 본질적인 면을 포착하는 서명 개념을 도입한다. 서명(깊이 2의)은 커버의 깊이-제 1 트래버살(traversal) (깊이를 2로 한정)에 의해 얻어지는 문자열(string)이다. 트래버살 방문동안에 노드는 문자열을 생성한다.
(연산 : 정의 피연산자)
그 다음 2의 깊이 제한까지 반복적으로 피연산자(컴마에 의하여 분리되는 계승자 노드)를 방문하여 전체 서명을 준다. 임의 연산을 지정을 위하여서는 *와, 무시될 노드에 대하여서는 "‥"와 같은 여러 가지 기호가 도입된다. 리프노드는 그의 값에 의하여 표시된다. 예를들면, 설명하는 노드 n16과 관련된 서명은
(movrnz:P5(*: P7..), (xor:Q2(*;P6)(1)(0)) 이다.
최적의 등가물을 찾아내는 제 2 문제는 카르노 맵 기법을 사용하여 씨름하게 되어서 기본 로직 연산자의 최소수(맵의 필수적인 임프리컨트(implicand))에 대하여 4 변수까지 부울함수를 감소시킨다. 그의 커버가 상술한 서명을 가지는 부울식은 이와 같은 방법으로 다음 대체 패턴으로 감소된다.
P5= andn(P7, P6)
이식은 노드 n16에 관련된 movrnz 도입으로 새로 바꾼다. 서명 및 대체 패턴의 쌍은 본 발명 구조의 규칙을 형성한다. 모든 규칙이 적용된 후에, 규칙의 누적 결과로서 발생하는 명령어들이 그점까지 적용된 것이 아니라면 검출하여 제거하도록 커버 분석의 또하나의 다른 패스가 행하여진다. 이들은 어떤 전임자도 가지지 않은 그것의 커버링 노드에 식별되어서 정의 심볼(명령어의 LHS)은 즉시 그 영역으로부터 사리지지 않는다. 바로 설명된 규칙은, 예를들면 배타적 논리합(XOR) 명령어(14)의 제거와 예측된 술어 Q2의 사용에 이르게 된다.
이러한 종류의 여러 가지 규칙의 결합효과는 도 8에 도시된 최적화된 MIR'(208)이다. 도 7의 최적화되지 않은 MIR(206)과 비교할 때 명령어 카운트수가 23%(43/35) 만큼 감소됨을 유념하여야 한다. 도 6의 방어된 버전 AIR(204)과 비교할 때, 비능율은 명령어 카운트수에 대하여 최적화되지 않은 MIR(20)에서의 43%(43/30)으로부터 최적화된 MIR'(208)에서의 17%(35/30) 까지 떨어져 있다.
잔여의 비능율은 부동 소수점 조건부 코드를 정수 레지스터내의 부울값으로 변환하지 않으면 안 되는 것과 언세이프 기억 명령어를 취급함에 있어서와 같은, 사실상 구조적인 것이다. 그와 같은 비능율을 고치기 위하여 SPARCTM-V9 명령어 집합 아키텍쳐가 검사분기 명령어 및 술어 기억장치를 사용하여 증대된다. 측정과 같은 명령어 카운트 대신에 본 발명은 소프트웨어 파이프라인에 토대한 보다 정밀한 비교로 되어 있다.
도 6의 술어의 AIR(204), 도 8의 RK-변환 MIR'(208) 및 기타의 결과가 소프트웨어의 최소 개시구간(MⅡ)를 평가함으로써 비교된다. MⅡ는 모듈로 (Modulo)스케줄링에 있어서처럼 소프트 파이프라인의 최적 한계이다. 모듈로 스케줄링을 사용한 실험에 의하면 대부분 경우에 있어서, 얻어진 스케줄, Ⅱ(소프트웨어 파이프라인의 사이클에서 스테이지 길이)가 매칭하거나 또는 이 한계로 접근하는 것을 나타낸다. 실시예 루프는 복귀를 포함하고 있지 않기 때문에 MⅡ는 자원한계에 의하여 간단히 다음과 같이 주어진다;
MⅡ=max(Ni/Si)
여기서 Si는 자원 분류 i의 명령어를 서비스할 수 있는 함수단위의 수이고 Ni는 같은 분류의 명령어의 수이다. 설명을 간단히 하기 위해 본 발명은 정수(A) 부동소수점(F) 및 메모리(M)인 3종류의 자원을 식별한다. 모든 명령어는 충분히 파이프라인 되어 있고 어떠한 멀티-사이클 블록킹 또는 싱글-그룹과 같은 디스패칭 제한을 가지지 않는 것으로 가정된다. 이예에 나타나는 모든 명령어의 자원 분류는 M-류 명령어로 분류되는 다른 종류의 조건부 이동을 제외하고는 자명하다.
고려되는 여러 경우에서의 자원사용은 표 3에 요약되어 있다. 명령어를 카운트 함에 있어서, 백에지(backedge)(루프분기)와 관련 디레이 슬롯은 그들이 모듈로 스케줄링에 직접으로 참여하지 않기 때문에 제외된다. 두가지 경우는 AIR 및 MIR'의 두가지 경우에 부가하여 표에 포함되어 있다.
상술한 바와 같이 보상 코드를 가진 조건부 기억장치를 취급함에 있어서, 이전값(MIR'에서 처럼)을 예측하여 적재하는 대신에 본 발명은 해가없는 어드레스(어드레스 자밍으로 알려져 있음)에 기억장치의 수신지 어드레스를 조건부로 변경할 수 있도록 한 것이다.
이와 같은 기법은 예측 적재를 조건부 기억장치의 각 실현값(occurrence)에 대한 mov 명령어로 대체하며, 그래서 M에서 A로 자원 이용특성을 변경한다. 그결과가 MIR'이다. 경우 MIR+(도 10)은 검사분기 및 술어 기억장치, SPARCTM-V9 증강부분을 이용한다.
여러 가지 경우에서 자원분류 사용
경우 A F M Total
AIR 15 6 7 28
MIR' 16 2 15 33
MIR'' 18 2 13 33
MIR+ 14 4 9 27
MII를 산출함에 있어서, 2가지 다른 디스패칭 모델이 표 4 및 표 5에서 요약된 바와 같이 고려된다.
파이프 혼합 및 이슈폭(스칼라리티)의 모델은 2개의 연산자, 하나의 F연산 및 두 개의 M연산이 서로 분류되어 매사이클당 발생되는 것을 나타내는 (2A 1F 2M)과 같은 부호를 사용함으로써 나타나 있다. MⅡ 산출에 들어오는 개개의 항목들은 각각의 자원 표제항목(heading) 아래에 표시되어 있다. 이들 항목들은 어느 자원이 중대하며 그 자원사용이 어떻게 잘 균형이 잡혀져 있는가를 식별한다.
전체의 방어 가상 SPARCTM-V9(AIR)에 대한 술어 실행(PE)과 SPARCTM-V9(여러가지 MIR)에 대한 정적 예측실행(SS)사이의 성능 갭은 본 발명이 기대한 바와 같이 자원이 부가됨에 따라 감소한다. 특히, MⅡ으로의 MIR+/AIR의 비율은 (2A 1F 1M)에 대하여 1.2(9/7.5)로부터 (2A 1F 2M)에 대하여 0.93(7/7.5)까지 떨어진다. 즉 20%의 성능갭이 모델(ZA/F 2M)에 대하여 없어진다. 워드 크기에 기인하는 명령어 패치 비율에 있어서의 차이가 방어 아키텍쳐에서 증가되는 것 같이 부가적 요인이 고려되기 때문에 PE 및 SS간의 성능갭은 실제에 있어서 크게 문제되지 않는다. 명백히 적절한 컴파일러와 시뮬레이터를 사용하는 거대 규모와 실험이 요구되고 있다.
적용하여야할 적절한 변환을 선택하는 것은 곧 복잡하게 될 수 있음을 유념하여야 한다. 예를들면, 조건부 기억을 최급하는 2개의 다른 접근방법간의 선택에 있어서, 자원사용과 이용가능한 자원에 따라 어느한 것이나 또는 다른 것이 더 좋을수 있다. 검토되는 조그마한 예에서 조차도 어떤 경우에는 MIR'은 MIR"보다 더 좋을수 있지만 다른 경우에는 그렇지 않는다. 그러한 문제점은 모든 선택이 이루어지기전에 선택의 최종결과에 대하여 아는 것을 필요로하는 공통적인 특성을 가진다. 되돌아가는 폭력에 의존하는 접근방법을 피하기 위하여 대규모의 실험에 토대한 경험적 방법을 이용하지 않으면 않된다.
MⅡ 표는 7.5와 같은 분수값을 포함하고 있음을 유념하여야 한다. 그와 같은 경우는 모듈로 스케줄이 수행되기 전에 루프 보다 언롤링(unrolling)함으로써 취급된다. 흔히 이것은, 루프카운트 코드 및 다른 귀납코드(induction code)가 언롤루프의 반복마다 한번씩 반복되게 하는 것만 필요하기 때문에 분수값에 의하여수반되는 것보다도 효과에 있어 더욱 양호한 결과로 된다.
(2A 1F 1M) 모델에 대한 MⅡ
경우 A F M MⅡ Ratio
AIR 7.5 6 7 7.5 1.00
MIR' 8 2 15 15 2.00
MIR'' 9 2 13 13 1.73
MIR+ 7 4 9 9 1.20
(2A 1F 2M) 모델에 대한 MⅡ
경우 A F M MⅡ Ratio
AIR 7.5 6 3.5 7.5 1.00
MIR' 8 2 7.5 8 1.07
MIR'' 9 2 6.5 9 1.20
MIR+ 7 4 4.5 7 0.93
RK 기법은 전반적으로 방어되는 아키텍쳐에 대한 술어 실행(PE)를 비방어의 아키텍쳐에 대한 정적 예측실행(SS)으로 변환한다. 분석된 실시예에 의하여 설명된 바와 같이, 현재의 SPARC-V9 아키텍쳐로 제공되는 좁은 SS와 PE간의 성능갭은, 여러 가지 방법으로 향상되어 있다. 이들 향상은 잘 알려진 술어 기억 및 콘트롤 예측을 포함한다. 또한, 새로운 명령어 즉 검사분기가 제안된다.
검사분기 및 술어 기억으로, SS의 성능은 "협(narrow)" 모델(2A 1F 2M)내에서 PE의 20% 이내로 된다. 이갭은 이슈폭이 "광(wider)" 모델(2A 1F 2M)로 증가될 때 없어진다. 이것은, 예측실행 헤드(명령 카운트수 증가됨)가 이슈슬롯내의 증가에 의하여 흡수되기 때문에 일어난다. 그래서 예측실행의 오버헤드는 이슈폭(스칼라리티)이 증가함에 따라 실시시에서의 감소하는 충돌을 가지게 된다.
부동 소수점 조건부 코드에 대한 검사분기(tbfx)와 정수조건부 코드에 대한검사분기(tbx)인 2종류가 있다.
검사분기 명령어는
tb <x> icc_or_xcc, %rd, 이며,
특정 조건<x>에 대한 정수 조건코드 %icc 또는 %xcc를 검사하고 참(거짓)이면 1(0)으로 수신지 레지스터 %rd를 설정한다. 부동 소수점 종류 tbf<x>도 같은 방식으로 실행한다. 조건 <x>은 SPARCTM아키텍쳐 매뉴얼(버전 9)내에서 특정화된 바와 같은 분기명령어와 결합되어 있는 다수중의 하나이다. 이들 검사검기 명령어들의 효과는 소정의 분기조건을 특정 수신지 레지스터 %rd 내의 부울값으로 변환하는 것이다.
AIR에서 2가지 원시(source)피연산자를 사용하는 추상형태가 다음과 같이 사용되어 있다.
P7=tfbe(t114,0)
2개의 원시 피연자내의 검사분기는 조건이 변환되는 것인지 또는 아닌지를 결정하기 위하여 제 2 원시 피연산자를 사용하여 하나의 원시 피연산자를 가진 제안된 명령어를 매핑한다. 예를들면, 상기의 명령어 tfbe(t114,0)는 조건 "equal"을 "not-equal"로 변환함으로써 tfbne t114,P7로 매핑한다.
이들 명령어들은 명령어를 정의하는 술어로서 사용된다. 또한 술어값은 범용 레지스터로 가져오게 되기 때문에, 전체의 로직명령어 조합은 로직 명령어 집합의 지원없이 전용의 술어 레지스터의 경우와는 다른 범용 프로세싱을 이용할수 있다.
전 로직 명령어 지원은 논리식 최적화(Boolean expression optimization)와 같이 술어코드를 최적화하는 취급을 허용하여준다.
본 발명의 이점은 다음을 포함한다.
본 발명의 실시예에서, 본 발명은 기존의 아키텍쳐에서 ISA 변경을 최소화하는 대안의 방법을 개시하고 전 술어 아키텍쳐의 성능상 이점을 얻는다.
RK/Spare 방법은 전 방어 아키텍쳐에 대한 술어 실행을 전방어 자원없이 정적 예측실행으로 변환하게 하여준다. 이 기법은 기존의 명령어 집합 아키텍쳐에서 충돌을 완화시켜주는 몇 개의 증진된 기존의 SPARCTM-V9대한 술어 실행의 성능상 장점을 생기게 할 수 있다.
SPARCTM-V9에 대한 이들의 증진은 새로운 분류의 명령어 즉 검사분기를 포함한다. 검사 분기는 조건부 코드에 토대로한 분기조건을 범용레지스터내의 부울 데이터로 변환하기 때문에 전 로직 명령어 집합이 "최적" 코드를 생성하도록 이용될수 있다.
얻어지는 성능상 이점은 분석의 질과 사용되는 변환에 따라 크게 달라진다. 그래서 방법 RK/Spare는 술어코드를 최적화 시키기 위한 심볼 분석(커버)에 토대로한 새롭고 강력한 기법을 포함한다. 이 기법은 범용적이고 확장가능하며, 용이하게 사실상 텍스트-재기록 인 다른 문제점들에 씨름하는 데에 용이하게 적합되게할수 있다.
본 발명의 제한된 실시예에 관하여 설명하였지만 본발명이 속하는 기술분야에서 통상의 지식을 가진 사람은 다른 실시예들도 본 발명에서 개시되어 있는 발명의범위를 일탈함이 없이 고안될 수 있음을 이해할 것이다. 따라서 본 발명의 범위는 첨부된 청구범위에 의하여서만 제한되어야 한다.

Claims (23)

  1. 추상적인 내부표현을 이프-변환 시키는 단계; 그리고
    상기 이프-변환을 기계 표현으로 매핑시키는 단계를 구비하는 술어 코드를 최적화하기 위한 확장가능한 규칙기반의 기술적 방법.
  2. 제 1 항에 있어서,
    상기 매프된 이프-변환으로부터 술어를 제거하는 단계가 더 구비되는 기술적 방법.
  3. 제 1 항에 있어서,
    상기 술어를 제거하는 단계는 해석에 의하여 명령어를 정의하는 술어를 제거하는 단계를 구비하는 기술적 방법.
  4. 제 1 항에 있어서,
    상기 술어를 제거하는단계는 예측실행에 의하여 세이프 명령어의 방어술어를 제거하는 단계를 구비하는 기술적 방법.
  5. 제 1 항에 있어서,
    상기 술어를 제거하는 단계는 보상에 의하여 언세이프 명령어의 방어술어를제거하는 단계를 구비하는 기술적 방법.
  6. 제 1 항에 있어서,
    상기 술어를 제거하는 단계는, 역 이프-변환에 의하여 부적당한 명령어의 방어술어를 제거하는 단계를 구비하는 기술적 방법.
  7. 제 1 항에 있어서,
    기계 표현을 최적화하는 단계를 더 구비하는 기술적 방법.
  8. 명령어를 수행하기 위한 프로세서; 그리고
    술어를 정의하고, 분기 명령어를 검사하며, 검사결과에 토대하여 정의된 술어를 분기 명령어로 할당하기 위한 명령어를 구비하는 술어 코드를 최적화 하기 위한 확장 가능한 규칙-기반의 시스템.
  9. 술어를 정의하는 단계;
    분기 명령어를 검사하는 단계; 그리고
    상기 검사의 결과에 토대하여 정의된 술어를 상기 분기 명령어에 선택적으로 할당하는 단계를 구비하는 술어코드를 최적화 하기 위한 확장가능한 규칙-기반의 방법.
  10. 추상적 내부표현을 이프-변환 하기 위한 수단; 그리고
    상기 이프-변환을 기계 표현으로 매핑 시키기 위한 수단을 구비하는 술어코드를 최적화 하기 위한 장치.
  11. 제 10 항에 있어서,
    상기 매핑된 이프-변환으로부터 술어를 제거하기 위한 수단을 더 구비하는 장치.
  12. 제 10 항에 있어서,
    상기 술어를 제거하기 위한 수단은 해석에 의하여 명령어를 정의하는 술어를 제거하기 위한 수단을 구비하는 장치.
  13. 제 10 항에 있어서,
    상기 술어를 제거하기 위한 수단은 예측실행에 의하여 세이프 명령어의 방어술어를 제거하기 위한 수단을 구비하는 장치.
  14. 제 10 항에 있어서,
    상기 술어를 제거하기 위한 수단은 보상에 의하여 언세이프 명령어의 방어 술어를 제거하기 위한 수단을 구비하는 장치.
  15. 제 10 항에 있어서,
    상기 술어를 제거하는 수단은 역 이프-변환에 의하여 부적당한 명령어의 방어 술어를 제거하기 위한 수단을 구비하는 장치.
  16. 제 10 항에 있어서,
    기계 표현을 최적화 하기 위한 수단을 더 구비하는 장치.
  17. 추상적 내부표현을 이프-변환하는 단계;
    이프-변환을 기계표현으로 매핑시키는 단계;
    매핑된 이프-변환으로부터 술어를 제거하는 단계를 구비하고,
    술어의 제거단계는
    해석에 의해 명령어를 정의하는 술어를 제거하는 단계;
    예측실행에 의하여 세이프 명령어의 방어 술어를 제거하는 단계;
    보상에 의하여 언세이프 명령어의 방어 술어를 제거하는 단계;
    역 이프-변환에 의하여 부적당한 명령어의 방어 술어를 제거하는 단계; 그리고
    기계 표현을 최적화 하는 단계를 구비하는 술어코드를 최적화 시키기 위한 확장 가능한 규칙-기반에 의한 기술적 방법.
  18. 검사분기 명령어를 실현하는 단계를 구비하는 명시적 술어 하드웨어 없이 술어 수행을 지원하기 위한 기술적 방법.
  19. 제 18 항에 있어서,
    상기 검사분기 명령어는 전 로직 명령어 집합이 최적 코드를 생산하게 사용되어질 수 있도록 조건부 코드에 토대한 분기조건을 범용레지스터로 변환하도록 하는 기술적 방법.
  20. 명령어를 수행하기 위한 프로세서; 그리고
    조건부 코드에 토대한 분기조건을 전 로직 명령어 집합이 최적 코드를 생산하도록 범용 레지스터내의 부울 데이터로 변환하고, 분기에 의해서 둘러싸여진 예측에 부적당한 명령어의 집합을 방어하기 위한 명령어를 구비하는 명시적 술어 하드웨어 없이 술어 실행을 지원하기 위한 시스템.
  21. 검사 분기 명령어를 실행하는 단계를 구비하는 명시적 술어 하드웨어 없이 술어 실행을 지원하는 방법.
  22. 제 21 항에 있어서,
    상기 검사분기 명령어는 전 로직 명령어 집합이 최적 코드를 생성하게 사용될수 있도록 조건부 코드에 토대한 분기 조건을 범용 레지스터내의 부울 데이터로 변환하도록 하는 방법.
  23. 검사분기를 명령어를 실행하기 위한 수단; 그리고
    실행된 검사분기 명령어를 사용하여 술어를 제거하기 위한 수단을 구비하는 명시적 술어 하드웨어 없이 술어 수행을 지원하기 위한 장치.
KR1020020007089A 2001-02-07 2002-02-07 술어 실행을 정적 예측실행으로 변환하기 위한 범용 및효율적 방법 및 장치 KR100576794B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/778,424 US20030023959A1 (en) 2001-02-07 2001-02-07 General and efficient method for transforming predicated execution to static speculation
US09/778,424 2001-02-07

Publications (2)

Publication Number Publication Date
KR20020065864A true KR20020065864A (ko) 2002-08-14
KR100576794B1 KR100576794B1 (ko) 2006-05-10

Family

ID=25113305

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020020007089A KR100576794B1 (ko) 2001-02-07 2002-02-07 술어 실행을 정적 예측실행으로 변환하기 위한 범용 및효율적 방법 및 장치

Country Status (6)

Country Link
US (1) US20030023959A1 (ko)
EP (1) EP1233338A3 (ko)
JP (1) JP2002312181A (ko)
KR (1) KR100576794B1 (ko)
CA (1) CA2371184A1 (ko)
TW (1) TW565778B (ko)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7140006B2 (en) * 2001-10-11 2006-11-21 Intel Corporation Method and apparatus for optimizing code
US6834383B2 (en) * 2001-11-26 2004-12-21 Microsoft Corporation Method for binary-level branch reversal on computer architectures supporting predicated execution
US20030145190A1 (en) * 2001-12-07 2003-07-31 Paolo Faraboschi Compiler algorithm to implement speculative stores
US20030191893A1 (en) * 2002-04-09 2003-10-09 Miller John Alan Method, system, and apparatus for efficient trace cache
US7222226B1 (en) * 2002-04-30 2007-05-22 Advanced Micro Devices, Inc. System and method for modifying a load operation to include a register-to-register move operation in order to forward speculative load results to a dependent operation
US7308682B2 (en) * 2003-04-25 2007-12-11 Intel Corporation Method and apparatus for recovering data values in dynamic runtime systems
US7380276B2 (en) * 2004-05-20 2008-05-27 Intel Corporation Processor extensions and software verification to support type-safe language environments running with untrusted code
US20060259752A1 (en) * 2005-05-13 2006-11-16 Jeremiassen Tor E Stateless Branch Prediction Scheme for VLIW Processor
US8677104B2 (en) * 2006-05-30 2014-03-18 Arm Limited System for efficiently tracing data in a data processing system
US7707394B2 (en) 2006-05-30 2010-04-27 Arm Limited Reducing the size of a data stream produced during instruction tracing
US7752425B2 (en) * 2006-05-30 2010-07-06 Arm Limited Data processing apparatus having trace and prediction logic
US8250556B1 (en) * 2007-02-07 2012-08-21 Tilera Corporation Distributing parallelism for parallel processing architectures
US8341612B2 (en) * 2007-05-16 2012-12-25 International Business Machines Corporation Method and apparatus for run-time statistics dependent program execution using source-coding
US8381192B1 (en) * 2007-08-03 2013-02-19 Google Inc. Software testing using taint analysis and execution path alteration
KR101579589B1 (ko) * 2009-02-12 2015-12-22 삼성전자 주식회사 파이프라인 프로세서를 위한 정적 분기 예측 방법과 이를 위한 컴파일 방법
US8433885B2 (en) * 2009-09-09 2013-04-30 Board Of Regents Of The University Of Texas System Method, system and computer-accessible medium for providing a distributed predicate prediction
US10698859B2 (en) 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
WO2011159309A1 (en) * 2010-06-18 2011-12-22 The Board Of Regents Of The University Of Texas System Combined branch target and predicate prediction
US9304776B2 (en) 2012-01-31 2016-04-05 Oracle International Corporation System and method for mitigating the impact of branch misprediction when exiting spin loops
US8819382B2 (en) 2012-08-09 2014-08-26 Apple Inc. Split heap garbage collection
US9286039B2 (en) * 2013-03-14 2016-03-15 Microsoft Technology Licensing, Llc Operating system support for contracts
US9684514B2 (en) * 2014-09-10 2017-06-20 International Business Machines Corporation Inference based condition code generation
US9916164B2 (en) * 2015-06-11 2018-03-13 Intel Corporation Methods and apparatus to optimize instructions for execution by a processor
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US10180840B2 (en) 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US10936316B2 (en) 2015-09-19 2021-03-02 Microsoft Technology Licensing, Llc Dense read encoding for dataflow ISA
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US10776115B2 (en) 2015-09-19 2020-09-15 Microsoft Technology Licensing, Llc Debug support for block-based processor
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US10452399B2 (en) 2015-09-19 2019-10-22 Microsoft Technology Licensing, Llc Broadcast channel architectures for block-based processors
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US10719321B2 (en) 2015-09-19 2020-07-21 Microsoft Technology Licensing, Llc Prefetching instruction blocks
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
CN114817927B (zh) * 2022-03-30 2024-01-09 北京邮电大学 基于分支覆盖指导的有效符号执行方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5627981A (en) * 1994-07-01 1997-05-06 Digital Equipment Corporation Software mechanism for accurately handling exceptions generated by instructions scheduled speculatively due to branch elimination
US5920716A (en) * 1996-11-26 1999-07-06 Hewlett-Packard Company Compiling a predicated code with direct analysis of the predicated code
US5943499A (en) * 1996-11-27 1999-08-24 Hewlett-Packard Company System and method for solving general global data flow predicated code problems
US5999738A (en) * 1996-11-27 1999-12-07 Hewlett-Packard Company Flexible scheduling of non-speculative instructions
US5937195A (en) * 1996-11-27 1999-08-10 Hewlett-Packard Co Global control flow treatment of predicated code
US5999736A (en) * 1997-05-09 1999-12-07 Intel Corporation Optimizing code by exploiting speculation and predication with a cost-benefit data flow analysis based on path profiling information
JP3570855B2 (ja) * 1997-05-29 2004-09-29 株式会社日立製作所 分岐予測装置
JP3595158B2 (ja) * 1998-03-13 2004-12-02 株式会社東芝 命令割り当て方法及び命令割り当て装置
JP3565314B2 (ja) * 1998-12-17 2004-09-15 富士通株式会社 分岐命令実行制御装置
US6513109B1 (en) * 1999-08-31 2003-01-28 International Business Machines Corporation Method and apparatus for implementing execution predicates in a computer processing system
US6637026B1 (en) * 2000-03-01 2003-10-21 Intel Corporation Instruction reducing predicate copy
US6732356B1 (en) * 2000-03-31 2004-05-04 Intel Corporation System and method of using partially resolved predicates for elimination of comparison instruction

Also Published As

Publication number Publication date
US20030023959A1 (en) 2003-01-30
KR100576794B1 (ko) 2006-05-10
EP1233338A2 (en) 2002-08-21
CA2371184A1 (en) 2002-08-07
JP2002312181A (ja) 2002-10-25
TW565778B (en) 2003-12-11
EP1233338A3 (en) 2005-02-02

Similar Documents

Publication Publication Date Title
KR100576794B1 (ko) 술어 실행을 정적 예측실행으로 변환하기 위한 범용 및효율적 방법 및 장치
US8505002B2 (en) Translation of SIMD instructions in a data processing system
August et al. Integrated predicated and speculative execution in the IMPACT EPIC architecture
US7596781B2 (en) Register-based instruction optimization for facilitating efficient emulation of an instruction stream
KR101417597B1 (ko) 제로 프레디케이트 브랜치 예측실패에 대한 브랜치 예측실패 거동 억제
US20140372994A1 (en) Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control
US6301705B1 (en) System and method for deferring exceptions generated during speculative execution
US7069545B2 (en) Quantization and compression for computation reuse
US6324639B1 (en) Instruction converting apparatus using parallel execution code
Irie et al. STRAIGHT: Hazardless processor architecture without register renaming
August et al. The program decision logic approach to predicated execution
US20040268333A1 (en) Building inter-block streams from a dynamic execution trace for a program
Li et al. Software value prediction for speculative parallel threaded computations
Black et al. Turboscalar: A high frequency high IPC microarchitecture
Whitham et al. Using trace scratchpads to reduce execution times in predictable real-time architectures
Desmet et al. Enlarging instruction streams
Koizumi et al. Reduction of instruction increase overhead by STRAIGHT compiler
Finlayson et al. Improving processor efficiency by statically pipelining instructions
Connors et al. An architecture framework for introducing predicated execution into embedded microprocessors
Moore Poor Man’s Trace Cache: A Variable Delay Slot Architecture
Kumar et al. A variable vector length SIMD architecture for HW/SW co-designed processors
De Souza et al. On the scheduling algorithm of the dynamically trace scheduled VLIW architecture
Cowley Extending the Capabilities of Von Neumann with a Dataflow Sub-ISA
Penagos Deep: Dependency Elimination Using Early Predictions
Santana et al. A comparative analysis between EPIC static instruction scheduling and DTSVLIW dynamic instruction scheduling

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
J201 Request for trial against refusal decision
AMND Amendment
B701 Decision to grant
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee