KR20060129534A - 데이터 처리장치, 데이터 처리 프로그램, 및 데이터 처리프로그램을 기록한 기록매체 - Google Patents

데이터 처리장치, 데이터 처리 프로그램, 및 데이터 처리프로그램을 기록한 기록매체 Download PDF

Info

Publication number
KR20060129534A
KR20060129534A KR1020067021413A KR20067021413A KR20060129534A KR 20060129534 A KR20060129534 A KR 20060129534A KR 1020067021413 A KR1020067021413 A KR 1020067021413A KR 20067021413 A KR20067021413 A KR 20067021413A KR 20060129534 A KR20060129534 A KR 20060129534A
Authority
KR
South Korea
Prior art keywords
input
output
address
storage unit
registered
Prior art date
Application number
KR1020067021413A
Other languages
English (en)
Other versions
KR100877138B1 (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
Priority claimed from JP2004097197A external-priority patent/JP4254954B2/ja
Priority claimed from JP2004266056A external-priority patent/JP4660747B2/ja
Priority claimed from JP2004324348A external-priority patent/JP4654433B2/ja
Priority claimed from JP2004347124A external-priority patent/JP4635193B2/ja
Application filed by 고쿠리츠 다이가쿠 호진 교토 다이가쿠, 독립행정법인 과학기술진흥기구 filed Critical 고쿠리츠 다이가쿠 호진 교토 다이가쿠
Publication of KR20060129534A publication Critical patent/KR20060129534A/ko
Application granted granted Critical
Publication of KR100877138B1 publication Critical patent/KR100877138B1/ko

Links

Images

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
    • 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
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • 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
    • 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
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Tests Of Electronic Circuits (AREA)
  • Debugging And Monitoring (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

의존관계 저장부(M)는, 각 출력 어드레스 및 출력값이, 어느 입력 어드레스 및 입력값을 기원으로 하는 것인지를 나타내고 있다. 행간 논리적 비교부(MR)는, 의존관계 저장부(M)에 저장되어 있는 각 행 성분 간의 논리적 연산을 행해서, 1이상의 출력 어드레스 및 출력값을 포함하는 출력패턴과, 1이상의 입력 어드레스 및 입력값을 포함하는 패턴으로 이루어지는 입출력 그룹을 설정한다. 이것에 의해, 재이용을 함으로써 보다 정확한 입출력 그룹을 명령구간 라이트수단에 등록하는 것을 가능하게 하는 데이터 처리장치를 제공할 수 있다.
데이터 처리장치, 프로그램, 기록매체

Description

데이터 처리장치, 데이터 처리 프로그램, 및 데이터 처리 프로그램을 기록한 기록매체{DATA PROCESSING DEVICE, DATA PROCESSING PROGRAM, AND RECORDING MEDIUM CONTAINING THE DATA PROCESSING PROGRAM}
본 발명은 주기억수단으로부터 명령열 및/또는 값을 리드(read)하고, 연산처리를 행한 결과를 주기억수단에 라이트하는 처리를 행하는 데이터 처리장치에 관한 것이다.
종래에, CPU(Central Processing Unit)를 비롯한 마이크로 프로세서에 있어서, 연산속도의 고속화 기술에 관한 연구개발이 활발하게 진행되고 있다. 고속화 기술로서는, 가령 파이프라인, 슈퍼스케일러, 아웃 오브 오더 실행, 및 레지스터리 네이밍 등을 들 수 있다.
파이프라인은, 명령의 실행처리를 몇 단계로 분해하고, 복수의 명령을 보내서 작업적으로 동시에 처리하는 기술이다. 슈퍼스케일러는, 명령 실행회로를 2쌍 이상 준비하고, 복수의 명령을 동시에 병행해서 실행하는 기술이다. 아웃 오브 오더 실행은, 명령의 기술순서를 무시하고, 몇 개의 연속되는 명령 중에서 미리 실행가능한 것을 찾아서 선행처리를 행하는 기술이다. 레지스터리 네이밍은, 가령 CISC(Complex Instruction Set Computer) 타입의 프로세서에 있어서, 종래의 프로 세서에 있어서의 명령의 호환성을 유지하면서, 범용 레지스터의 수를 증가시킴으로써 병행처리가 행해질 확률을 증대시키는 기술이다.
이와 같이, 마이크로 프로세서에 있어서의 연산속도의 고속화를 꾀할 때에는, 명령의 실행을 병행해서 행하는 것이 중요하게 되어 있다. 그러나, 프로그램 중에는, 어떤 명령의 결과에 따라서 다른 명령이 행해지도록 의존관계, 바꿔 말하면 분기가 포함되어 있는 경우가 대부분이다. 이와 같은 분기가 포함되어 있는 경우, 병행처리에 의해 선행해서 처리를 행하면, 분기 결과에 따라서 선행처리한 내용이 쓸모 없게 되는 상황이 발생함으로써, 연산속도의 고속화 효과가 작아진다고 하는 문제가 있다.
그래서, 프로그램 중에 분기가 있는 경우에, 분기선두를 예측함으로써, 선행처리가 쓸모 없게 될 확률을 저감하여, 병행처리 효과를 향상시키는 기술, 소위 분기예측에 관한 연구가 무수히 많이 행해지고 있다.
그러나, 분기예측에 의거해서 투기적 선행처리를 행할 경우에는, 일반적으로 다음과 같은 문제가 있다. 첫 번째 문제로는, 예측의 정당성을 항상 검증할 필요가 있으므로, 선행 명령열의 실행시간 그 자체를 삭감할 수는 없다고 하는 점이다. 두 번째 문제로는, 틀린 예측에 의거한 일련의 선행연산 결과를 모두 무효화할 필요가 있으므로, 한번에 투기적 선행처리할 수 있는 명령수를 많게 하기 위해서는, 상응하는 하드웨어 코스트를 요한다고 하는 점이다. 세 번째문제로는, 명령 간의 의존관계가 많을수록, 다중으로 투기적 선행처리를 할 필요가 생겨, 예측 정당성의 검증처리, 및 틀린 예측에 의거한 처리의 무효화 처리가 매우 복잡하게 된다고 하는 점이다.
한편, 분기예측과는 다른 고속화 기술로서, 값 재이용이라고 하는 기술도 제안되어 있다. 이 값 재이용이란, 프로그램의 일부분에 관한 입력값 및 출력값을 재이용표에 등록해 두고, 같은 곳을 다시 실행할 때에, 입력값이 재이용표에 등록되어 있는 것일 경우에는, 등록되어 있는 출력값을 출력한다고 하는 기술이다. 이 값 재용에 의한 효과로서는 다음과 같은 것을 들 수 있다. (1) 입력값이, 재이용표에 등록되어 있는 입력값과 일치하면, 실행결과를 검증할 필요가 없다. (2) 입력값 및 출력값의 총수에 의해서만 하드웨어 코스트가 결정되어, 생략 가능한 명령열의 길이에 제약을 받지 않는다. (3) 명령 간의 의존관계의 다소는, 재이용기구의 복잡함에 영향을 주지 않는다. (4) 불필요하게 긴 로드/스토어 명령을 삭감할 수 있음과 동시에, 그에 따른 소비전력의 삭감도 실현된다.
비특허문헌(정보처리학회 논문지: 하이퍼포먼스 컴퓨팅 시스템, HPS5, pp.1-12, Sep.(2002), "함수값 재이용 및 병렬 사전 실행에 의한 고속화 기술"(中道康彦, 緖方勝也, 正西申悟, 五島正裕, 森眞一郞, 北村俊明, 富田眞治)(발행일 2002년 9월 15일)에는, 프로그램에 있어서의 함수에 관해서 값 재이용을 행하는 기술이 개시되어 있다. 이 종래기술에서는, 일반적으로 로드 모듈이 ABI(Application Binary Interface)에 따라서 만들어지는 것을 이용하고 있으며, 특히 SPARC(Scalable Processor ARChitecture) ABI를 이용하고 있다. 그리고, 이 ABI에 있어서 함수의 입출력을 특정함으로써, 값 재이용을 실현하고 있다. 즉, 값 재이용을 위해, 컴파일러에 의한 전용명령의 매입이 불필요하게 되어 있어, 기존 로드 모듈로의 적용이 가능하게 되어 있다.
또, 함수의 다중구조를 동적으로 파악함으로써, 함수내 국소 레지스터나 스택 상의 국소변수를 값 재이용에 있어서의 입출력값에서 제외하도록 하고 있고, 이것에 의해 효율을 향상시키고 있다. 특히 함수에 관해서는, 함수의 복잡함에도 불구하고, 최대 6의 레지스터 입력, 최대 4의 레지스터 출력, 및 국소변수를 포함하지 않는 최소한의 주기억값의 등록에 의한 재이용 및 사전 실행이 가능하게 되어 있다. 이 종래기술에 대해서 이하에 상세하게 설명한다.
먼저, 단일 함수를 대상으로 해서, 무엇이 입력이고 무엇이 출력인지를 명확하게 해서, 1레벨의 재이용을 행하기 위해서 필요한 구조에 대해서 설명한다. 프로그램에 있어서는, 일반적으로 함수는 다중구조를 형성하고 있다. 함수A(Function-A)가 함수B(Function-B)를 호출하는 구조를 도 46(a)에 나타낸다.
대역함수(Globals)는 함수A의 입출력(Ain/Aout) 및 함수B의 입출력(Bin/Bout)이 될 수 있는 것이 있다. 함수A의 국소변수(Locals-A)는, 함수A의 입출력은 아니지만, 포인터를 통해서 함수B의 입출력이 될 수 있는 것이다. 또, 함수A로부터 함수B로의 인수(Args)는, 함수B로의 입력이 될 수 있고, 함수B로부터 함수A의 리턴값(Ret.Val.)은, 함수B로부터의 출력이 될 수 있는 것이다. 또, 함수B의 국소변수(Locals-B)는, 함수A 및 함수B의 입출력에는 포함되지 않는다.
콘택스트에 의존하지 않고 함수B를 재이용하려면, 함수B의 실행시에 함수B의 입출력Bin/Bout만을 입출력으로 해서 등록해야 한다. 여기서, 도 46(a)에 나타낸 프로그램 구조를 실행할 때의 주기억에 있어서의 메모리 맵을 도 46(b)에 나타낸 다. 이 메모리 맵에 있어서, Bin/Bout을 포함하지 않는 영역은 Locals-B만으로 되어 있다. 따라서, Bin/Bout을 식별하려면, Globals와 Locals-B의 경계, 및 Locals-B와 Locals-A의 경계를 각각 확정해야 한다. 전자에 대해서는, 일반적으로 OS(Operating System)가 실행시의 데이터 사이즈 및 스택 사이즈의 상한을 정하는 것을 이용하여, OS가 설정하는 경계(LIMIT)에 의거해서 Globals와 Locals-B의 경계를 확정할 수 있다. 후자에 대해서는, B가 호출되기 직전의 스택 포인터의 값(SP in A)을 이용함으로써, Locals-B와 Locals-A의 경계를 확정할 수 있다.
다음에, 주어진 주기억 어드레스가, 대역변수인지, 또는 어느 함수의 국소변수인지를 식별하는 방법에 대해서 설명한다. 로드 모듈은, SPARC ABI에 규정되어 있는 이하의 조건을 만족한다고 가정한다. 또, %fp는 프레임 포인터, %sp는 스택 포인터를 의미하는 것으로 한다.
(1) %sp 이상의 영역 중, %sp+0∼63은 레지스터 후퇴영역, %sp+68∼91은 인수 후퇴영역이고, 모두 함수의 입출력은 아니다.
(2) 구조체를 되돌릴 경우의 암시적 인수(Implicit Arg.)는 %sp+64∼67에 저장된다.
(3) 명시적 인수(Explicit Arg.)는 레지스터 %o0∼5, %sp+92이상의 영역에 놓인다.
먼저, 대역변수와 국소변수를 구별하기 위해서, 일반적으로 OS가 실행시의 데이터 사이즈 및 스택 사이즈의 상한을 정하는 것을 이용하여, 다음 사항을 가정한다.
(1) 대역변수는 LIMIT 미만의 영역에 놓인다.
(2) %sp는, LIMIT 이하로 되는 것은 아니며, LIMIT∼%sp의 영역은 무효이다.
이상의 조건을 만족하면서, 함수A가 함수B를 호출할 경우의 메모리 맵에 있어서의 인수 및 프레임의 개요를 도 47에 나타낸다. 이 도를 참조하면서, 이하에 A의 국소변수 및 B의 국소변수를 구별하는 방법에 대해서 설명한다.
상기 도에 있어서, (a)는 실행중인 상태를 나타내고 있다. LIMIT 미만의 굵은선 틀부분에 명령(Instrucions) 및 대역변수(Global Vars.)가 저장되고, %sp이상에 유효한 값이 저장되어 있다. %sp+64에는, B가 구조체를 리턴값으로 할 경우의 암시적 인수로서, 구조체의 선두 어드레스가 저장된다. B에 대한 명시적 인수의 선두 6워드는 레지스터 %o0∼5, 제 7워드 이후는 %sp+92 이상에 저장된다. 베이스 레지스터를 %sp로 하는 오퍼랜드 %sp+92가 출현한 경우, 이 영역은 인수의 제 7워드, 즉 B의 국소변수이다. 한편, 오퍼랜드 %sp+92가 출현하지 않은 경우, 이 영역은 A의 국소변수이다. 이와 같이, (a)의 상태에서는 오퍼랜드를 검증함으로써, A의 국소변수와 B의 국소변수를 구별할 수 있다.
한편, (b)는 B가 실행중인 상태를 나타내고 있다. 인수가 입력, 리턴값이 출력, 대역변수 및 A의 국소변수가 입출력으로 될 수 있다. 단, B는 가변길이 인수를 받아들일 경우가 있으므로, 일반적으로 %fp+92 이상의 영역이 A의 국소변수의 영역이 되는지 B의 국소변수의 영역이 되는지는 판단할 수 없다.
국소변수를 구별하려면, 먼저 (a)의 시점에서 인수의 제 7워드 이후를 검출한 함수 호출은 재이용 대상 외로 하고, 제 7워드 이후를 검출하지 않는 함수 호출 에 관해서, 직전에 %sp+92의 값을 기록해 두도록 한다. 또, 제 7워드 이후를 사용하는 함수 호출의 출현빈도가 낮다고 예상되는 점에서 보면, 제 7워드 이후를 사용하는 함수를 재이용 대상으로 하는 제한에 의한 성능저하는 경미한 것으로 생각한다.
이상의 준비를 통해, (b)에 있어서의 주기억 참조 어드레스가, 미리 기록한 %sp+92값 이상인 경우는 A의 국소변수, 작은 경우는 B의 국소변수라는 것을 알 수 있다. B의 실행시에는, B의 국소변수를 제외하면서, 대역변수 및 A의 국소변수를 재이용표에 등록한다.
재이용시에 B의 국소변수는 입출력에서 제외되므로, B의 국소변수 어드레스가 일치하고 있을 필요가 없다. 이 때문에, 어떤 콘택스트라도 입력만 일치하면, 재이용하는 것이 가능하다. 단, B가 참조할 대역변수나 A의 국소변수에 대해서는, 어드레스 및 데이터 양쪽이 재이용표의 내용과 완전히 일치할 필요가 있다. 즉, B를 실행하기 전에, 어떻게 해서 비교해야 할 주기억 어드레스를 망라할 것인지가 포인트가 된다.
B가 참조할 대역변수나 A의 국소변수 어드레스는, 원래 B에서 생성되는 어드레스 정수와, 대역변수/인수를 기원으로 하는 포인터에 의거하고 있는 것이다. 따라서, 먼저 인수가 완전히 일치하는 재이용표 중의 엔트리를 선택한 후에, 관련되는 주기억 어드레스를 모두 참조해서 일치 비교를 행함으로써, B가 참조해야 할 주기억 어드레스를 망라할 수 있다. 그리고, 모든 입력이 일치한 경우에만, 등록완료의 출력(리턴값, 대역변수, 및 A의 국소변수)을 재이용할 수 있다.
함수 재이용을 실현하기 위해서, 재이용표로서, 함수 관리표(RF) 및 입출력 기록표(RB)를 마련하는 것으로 한다. 하나의 함수를 재이용하기 위해 필요한 하드웨어 구성을 도 48에 나타낸다. 복수의 함수를 재이용 가능하게 하기 위해 이 구성을 복수 쌍 준비하는 것으로 한다.
이 표에 있어서, RF 및 RB에 유지되는 V는, 엔트리가 유효인지 아닌지를 나타내는 플래그이며, LRU(least recently used)는, 엔트리 교체 힌트를 나타내고 있다. RF는 상기 V 및 LRU 외에, 함수의 선두 어드레스(Start), 및 참조해야 할 주기 억 어드레스(Read/Write)를 유지한다. RB는 상기 V 및 LRU 외에, 함수 호출직전의 %sp(SP), 인수(Args.)(V:유효 엔트리, Val.:값), 주기억값(Mask:Read/Write 어드레스의 유효 바이트, Value:값), 및 리턴값(Return Values)(V:유효 엔트리, Val.:값)을 유지한다.
리턴값은 %i0∼1(리프(leaf)함수에서는 %o0∼1에 리라이트함) 또는 %f0∼1에 저장되고, %2∼3을 사용하는 리턴값(확장배 정밀도 부동 소수점수)은 대상 프로그램에는 존재하지 않는 것으로 가정한다. Read 어드레스는 RE가 일괄 관리하고, Mask 및 Value는 RB가 관리함으로써, Read 어드레스의 내용과 RB의 복수 엔트리를 CAM(content-addressable memory)에 의해 한번에 비교하는 구성을 가능하게 하고 있다.
단일 함수를 재이용하려면, 먼저, 함수 실행시에 국소변수를 제외하면서, 인수, 리턴값, 대역변수 및 상위함수의 국소변수에 관한 입출력 정보를 재이용표에 등록해 나간다. 여기서, 리드가 선행된 인수 레지스터는 함수의 입출력으로서, 또, 리턴값 레지스터로의 라이트는 함수의 출력으로서 등록한다. 그 밖의 레지스터 참조는 등록할 필요가 없다. 주기억 참조도 마찬가지로, 리드가 선행된 어드레스에 대해서는 입력, 라이트는 출력으로서 등록한다.
함수에서 복귀할 때까지 다음 함수를 호출한 경우, 또는 등록해야 할 입출력이 재이용표의 용량을 넘는, 인수의 제 7워드를 검출하고, 및 도중에 시스템 콜이나 할당이 발생하는 등의 요란(擾亂)이 발생하지 않은 경우, 복귀명령을 실행한 시점에서, 등록중인 입출력표 엔트리를 유효로 한다.
이후, 도 48을 참조하면서 설명하면, 함수를 호출하기 전에, (1) 함수 선두 어드레스를 검색하고, (2) 인수가 완전히 일치하는 엔트리를 선택하고, (3) 관련되는 주기억 어드레스, 즉 적어도 하나의 Mask가 유효한 Read 어드레스를 모두 참조하여, (4) 일치 비교를 행한다. 모든 입력이 일치한 경우에, (5) 등록완료의 출력(리턴값, 대역변수, 및 A의 국소변수)을 적어 보냄으로써, 함수의 실행을 생략할 수 있다.
여기서, 명령구간의 일예로서, 도 49에 나타낸 명령구간이 도 48에 도시한 RF 및 RB의 구성에 의해서 실행된 경우의 예에 대해서 설명한다. 이 도에서, PC는 그 명령구간이 개시되었을 때의 PC값을 나타내고 있다. 즉, 명령구간의 선두가 1000번지로 되어 있다. 또, 도 50은 도 49에 나타낸 명령구간이 실행된 경우에, RB에 등록되는 입력 어드레스와 입력 데이터, 및 출력 어드레스와 출력 데이터를 간략화해서 나타내고 있고, 도 51은 RB에 있어서의 실제 등록상황을 나타내고 있다.
제 1행째의 명령(이후, 간단히 제 1명령과 같이 칭한다)에 있어서, 어드레스 정수(A1)가 레지스터(R0)에 세트된다. 제 2명령에 있어서, 레지스터(R0)의 내용을 어드레스로 하는 주기억에서 로드된 4바이트 데이터(00110000)가 레지스터(R1)에 저장된다. 이 경우, 어드레스(A1), 마스크(FFFFFFFF)(마스크에 있어서, F가 유효 바이트를 나타내고 있고, 0이 무효 바이트를 나타냄), 데이터(00110000)는 입력으로서 RB에 있어서의 Input측 제 1열에 등록되고, 레지스터 번호(R1), 마스크(FFFFFFFF), 및 데이터(00110000)는 출력으로서 RB에 있어서의 Output측 제 1열에 등록된다.
제 3명령에 있어서, 어드레스 정수(A2)가 레지스터(R0)에 세트된다. 제 4명령에 있어서, 레지스터(R0)의 내용을 어드레스로 하는 주기억에서 로드된 1바이트 데이터(02)가 레지스터(R2)에 저장된다. 이 경우, 어드레스(A2), 마스크(FF000000), 및 데이터(02)는 입력으로서 RB에 있어서의 Input측 제 2열에 등록된다. 이 때, 어드레스(A2)의 나머지 3바이트에 대해서는, Don't Care를 의미하는 「-」가 저장된다. 레지스터 번호(R2), 마스크(FFFFFFFF) 및 데이터(00000002)는 출력으로서 RB에 있어서의 Output측 제 2열에 등록된다.
제 5명령에 있어서, 어드레스(A2+R2)에서 로드된 1바이트 데이터(22)가 레지스터(R2)에 저장되어 있다. 어드레스(R2)의 값은 (02)이었으므로, 어드레스(A2+02), 및 데이터(22)가, 입력으로서 RB에 있어서의 Input측 제 2열에 추가로 등록된다. 이 때, 어드레스(A2+02) 부분에 등록이 행해지고, 어드레스(A2+01) 및 (A2+03)에 대응하는 부분은, Don't Care를 의미하는 [-]인 상태로 된다. 즉, 어드레스(A2)에 대응하는 마스크는 (FF00FF00)으로 된다. 레지스터 번호(R2), 마스 크(FFFFFFFF), 및 데이터(00000022)는 출력으로서 RB에 있어서의 Output측 제 2열에 덮어쓰기된다.
제 6명령에 있어서, 어드레스 정수(A3)가 레지스터(R0)에 세트된다. 제 7명령에 있어서, 레지스터(R0)의 내용을 어드레스로 하는 주기억에서 로드된 1바이트 데이터(33)가 레지스터(R3)에 저장된다. 이 경우, 어드레스(A3), 마스크(00FF0000), 및 데이터(33)는 입력으로서 RB에 있어서의 Input측 제 3열에 등록된다. 레지스터 번호(R3), 마스크(FFFFFFFF), 및 데이터(00000033)는 출력으로서 RB에 있어서의 Output측 제 3열에 등록된다.
제 8명령에 있어서, 어드레스(R1+R2)에서 로드된 1바이트 데이터(44)가 레지스터(R4)에 저장된다. 이 경우, 어드레스(R1)와 어드레스(R2)는 명령구간의 내부에서 덮어쓰기된 레지스터의 어드레스가 되므로, 어드레스(R1) 및 어드레스(R2)는 명령구간의 입력으로는 되지 않는다. 한편, 어드레스(R1+R2)에 의해서 생성된 어드레스(A4)는 명령구간의 입력이므로, 어드레스(A4), 마스크(00FF0000), 및 데이터(44)는 입력으로서 RB에 있어서의 Input측 제 4열에 등록된다. 레지스터 번호(R4), 마스크(FFFFFFFF), 및 데이터(00000044)는 출력으로서 RB에 있어서의 Output측 제 4열에 등록된다.
제 9명령에 있어서, 레지스터(R5)로부터 값이 리드되고, 리드된 값에 1이 더해진 결과가 다시 레지스터(R5)에 저장된다. 이 경우, 레지스터(R5), 마스크(FFFFFFFF), 및 데이터(00000100)는 입력으로서 RB에 있어서의 Input측 제 5열에 등록된다. 또, 레지스터 번호(R5), 마스크(FFFFFFFF), 및 데이터(00000101)는 출력 으로서 RB에 있어서의 Output측 제 5열에 등록된다.
이상과 같이, 명령실행시에 있어서의 메모리/레지스터로부터의 리드시에는, 이하의 처리가 행해진다.
(1) RB에 있어서의 Output측이 검색되고, 리드된 어드레스/레지스터 번호가 기등록이면, 그 어드레스/레지스터 번호는 Input측에 등록되지 않고 종료한다.
(2) RB에 있어서의 Output측에 없으면, RB에 있어서의 Input측이 검색되고, 리드된 어드레스/레지스터 번호가 기등록이면, 그 어드레스/레지스터 번호는 등록되지 않고 종료한다.
(3) RB에 있어서의 Input측에도 없으면, RB에 새로운 엔트리가 추가되고, 그 어드레스/레지스터 번호 및 값이 등록된다.
또, 명령 실행시에 있어서의 메모리/레지스터로의 라이트 시에는 이하의 처리가 행해진다.
(1) RB에 있어서의 Output측이 검색되고, 리드된 어드레스/레지스터 번호가 기등록이면, 값이 갱신되고 종료한다.
(2) RB에 있어서의 Output측에 없으면, 새로운 엔트리가 추가되고, 리드된 어드레스/레지스터 번호 및 값이 등록된다.
또, 특허문헌(특허공개 2004-258905호 공보(공개일 2004년 9월 16일))에서는, 상기와 같은 재이용을 행하는 구성에 있어서, 프로세서를 복수 마련하고, 병렬 사전 실행을 행하는 구성이 개시되어 있다. 이 병렬 사전 실행이 행해질 때의 입력 예측방법으로서, 최후에 출현한 인수 및 최근 출현한 2쌍의 인수 차분(差分)에 의 거해서, 스트라이드(stride)예측을 행하는 방법이 개시되어 있다.
이상과 같이 입력예측을 행하면, 상술한 입력 파라미터가 단조롭게 계속변화하게 될 경우에, 사전에 예측해 둔 결과에 의거해서 효과적으로 재이용을 행하는 것이 가능하게 된다.
그러나, 상기 종래기술에서는, RB에 있어서, 각 엔트리가 하나의 항목이라도 내용이 다르면, 각각 별도의 엔트리로서 등록할 필요가 있다. 따라서, RB에 있어서의 메모리의 이용효율은 좋지 않게 된다. 또, 실행하려고 하는 함수의 입력패턴과, RB의 각 엔트리에 포함되어 있는 입력패턴 중에 하나라도 다른 것이 있으면, 재이용을 행할 수 없게 된다.
또, 도 52는 도 49에 나타낸 명령구간이 반복 실행된 경우에 있어서, RB의 입력측에 등록되는 이력의 예를 나타내고 있다. 이 예에서는 Time이 1∼4로 변화할 때마다 명령구간이 실행되고, 명령구간이 실행될 때마다, 어드레스(A2)의 값은 (02), (03), (04), (05)로 변화하고 있으며, 그에 따라 다른 입력요소에 있어서의 값이 변화하고 있다.
또, 각 이력 간에 표시되는 diff는, 대응하는 입력요소의 값의 변화량을 나타내고 있다. 상술한 종래의 입력예측은, 이 diff를 이용하여 예측을 행할 수 있게 된다. 도 53은 이 종래의 입력예측에 의한 예측결과를 나타내고 있다.
가령, 루프제어 변수와 같이, 단조롭게 변화하는 어드레스(상기 예에서는 어드레스(A2)에 대응)의 내용에 대해서는 정확하게 예측할 수 있다. 그러나, 명령구간에 배열요소가 포함되어 있는 경우, 배열요소의 첨자가 단조롭게 변화하고 있어 도, 배열요소 값은 일반적으로 단조롭게 변화한다고 할 수는 없다. 도 52에 도시한 예에서는, 어드레스(A2)에서 로드된 값이 배열요소의 첨자에 해당하며, 이 첨자를 어드레스로서 이용하는 주기억 참조는 어드레스가 변화하기 때문에, 이력으로서 등록되는 입력요소의 수 그 자체가 변화하게 된다. 이와 같은 상황에서는 동일한 열의 변화에 규칙성이 없어지기 때문에, 도 53에 있어서의 어드레스(A3)에 대응하는 열에 나타낸 바와 같이, 예측 적중률이 매우 악화된다.
입력예측을 행할 때에, 내용이 변화하지 않는 어드레스에 관한 값의 예측을 하는 것은 하드웨어 자원의 낭비가 된다. 또, 값의 변화에 규칙성이 없는 경우는, 차분을 0으로 가정하여 예측할 수밖에 없으나, 무리하게 예측함으로써, 오히려 적중률을 낮추는 경우가 있다. 도 53에 도시한 예에서는, A2+4에 대응하는 어드레스에 대해서는 마스크 위치 그 자체의 변화를 예측해야 하지만, 마스크 위치의 변화까지 예측하는 것은 곤란하다. 이 경우에는, 예측하지 않고, 직접 주기억값을 참조하는 것이 상책임을 알 수 있다.
이상의 과제는 모두, 등록된 모든 어드레스를 일률적으로 취급함으로써 생긴 문제이다.
본 발명은 상기 문제점을 해결하기 위해 안출된 것으로서, 그 목적은, 재이용을 행하는 이상 보다 정확한 입출력 그룹을 명령구간 기억수단에 등록하는 것을 가능하게 하는 데이터 처리장치를 제공하는데 있다.
본 발명은 상기 문제점을 해결하기 위해 안출된 것으로 그 목적은, 비교적 간소한 구성에 의해서, 재이용을 행하는 이상 보다 정확한 입출력 그룹을 명령구간 기억수단에 등록하는 것을 가능하게 하는 데이터 처리장치를 제공하는데 있다.
본 발명은 상기 문제점을 해결하기 위해서 안출된 것으로, 그 제 1목적은, 재이용을 행하는 이상 보다 정확한 입출력 그룹을 명령구간 기억수단에 등록하는 것을 가능하게 하는 데이터 처리장치를 제공하는데 있다.
본 발명의 제 2목적은, 주기억수단으로부터 명령열 및/또는 값을 리드하고, 연산처리를 행한 결과를 주기억수단에 라이트하는 처리를 행하는 데이터 처리장치에 있어서, 예측 적중률을 향상시킴으로써, 보다 효과적인 명령구간의 사전 실행을 실현하는 데이터 처리장치를 제공하는데 있다.
본 발명에 관계되는 데이터 처리장치는, 상기 과제를 해결하기 위해서, 주기억수단으로부터 명령구간을 리드하고, 연산처리를 행한 결과를 주기억수단에 라이트하는 처리를 행하는 데이터 처리장치에 있어서, 상기 주기억수단에서 리드한 명령구간에 의거해서 연산을 행하는 제 1연산수단과, 상기 제 1연산수단에 의한 상기 주기억수단에 대한 리드 및 라이트시에 이용되는 레지스터와, 상기 제 1연산수단에 의해서 명령구간의 연산이 행해졌을 때의 입력패턴 및 출력패턴으로 이루어지는 입출력 그룹을 생성하는 입출력 생성수단과, 상기 입출력 생성수단에 의해서 생성된 입출력 그룹을 기억하는 명령구간 기억수단을 구비하고, 상기 제 1연산수단은, 명령구간을 실행할 때에, 그 명령구간의 입력패턴과, 상기 명령구간 기억수단에 기억되어 있는 입력패턴이 일치한 경우, 그 입력패턴과 대응해서 상기 명령구간 기억수단에 기억되어 있는 출력패턴을 레지스터 및/또는 주기억수단으로 출력하는 재이용 처리를 행하고, 상기 입출력 생성수단은, 출력패턴에 포함되는 각 출력요소가, 입력패턴에 포함되는 어느 입력요소를 기원으로 하는 것인지를 나타내는 의존관계 저장부와, 상기 의존관계 저장부에 저장되어 있는 정보에 의거해서, 1이상의 상기 출력요소를 포함하는 출력패턴과, 1이상의 상기 입력요소를 포함하는 입력패턴으로 이루어지는 입출력 그룹을 설정하는 입출력 그룹 설정수단을 구비하고 있는 것을 특징으로 하고 있다.
상기 구성에서는, 제 1연산수단이 명령구간을 실행할 때에, 그 명령구간의 입력패턴과, 상기 명령구간 기억수단에 기억되어 있는 입력패턴이 일치한 경우, 그 입력패턴과 대응해서 상기 명령구간 기억수단에 기억되어 있는 출력패턴을 레지스터 및/또는 주기억수단으로 출력하는 재이용 처리를 행하는 구성으로 되어 있다. 그리고, 명령구간 기억수단에 기억되는 입력패턴 및 출력패턴은, 입출력 생성수단에 의해서 생성되게끔 되어 있다.
입출력 생성수단은, 출력패턴에 포함되는 각 출력요소가, 입력패턴에 포함되는 어느 입력요소를 기원으로 하는 것인지를 나타내는 정보에 의거해서, 1이상의 출력요소를 포함하는 출력패턴과, 1이상의 입력요소를 포함하는 입력패턴으로 이루어지는 입출력 그룹을 설정하고, 설정된 1이상의 입출력 그룹을 생성하도록 되어 있다. 따라서, 어떤 명령구간이 실행되었을 때의 입력패턴 및 출력패턴을 단순히 명령구간 기억수단에 등록할 경우와 비교해서, 재이용을 행하는 이상 보다 정확한 입출력 그룹을 명령구간 기억수단에 등록하는 것이 가능하게 된다. 그러므로, 재이용을 행할 때에 검색효율을 향상시킬 수 있다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입출력 그룹 설정수단이, 어떤 제 1출력요소의 기원이 되는 입력요소 쌍이, 다른 제 2출력요소의 기원이 되는 입력요소의 쌍에 모두 포함되어 있는 경우에, 제 2출력요소의 기원이 되는 입력요소의 쌍을 입력패턴, 제 1출력요소 및 제 2출력요소를 출력패턴으로 하는 입출력 그룹을 설정하는 구성으로 해도 된다.
상기 구성에서는, 어떤 제 1출력요소의 기원이 되는 입력요소의 쌍이, 다른 제 2출력요소의 기원이 되는 입력요소의 쌍에 모두 포함되어 있는 경우에, 이것이 하나의 입출력 그룹에 모아지게 된다. 따라서, 길이가 긴 입출력 그룹을 삭제하는 것이 가능하게 되므로, 명령구간 기억수단에 입출력 그룹을 길게 등록하는 것을 방지할 수 있다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입출력 그룹 설정수단이, 어떤 제 1출력요소의 기원이 되는 입력요소의 쌍과, 다른 제 2출력요소의 기원이 되는 입력요소의 쌍 사이에서, 공통 입력요소가 존재하지 않는 경우에, 제 1출력요소의 기원이 되는 입력요소의 쌍을 입력패턴, 제 1출력요소를 출력패턴으로 하는 제 1입출력 그룹, 및 제 2출력요소의 기원이 되는 입력요소의 쌍을 입력패턴, 제 2출력요소를 출력패턴으로 하는 제 2입출력 그룹을 각각 설정하는 구성으로 해도 된다.
상기 구성에 의하면, 2개의 입출력 그룹에 있어서, 공통 입력요소가 존재하지 않는 경우에는, 각각 별도의 입출력 그룹으로 설정된다. 여기서, 공통 입력요소가 존재하지 않는 경우란, 각각의 입출력 그룹이 서로 의존관계를 갖지 않는다고 하는 것이 된다. 즉, 재이용을 행할 때에, 이전에 실행된 명령구간에 있어서의 입력패턴 및 출력패턴 중의 일부만이 일치한 경우에도, 재이용을 행하는 것이 가능하게 되므로, 재이용이 가능하게 될 확률을 높일 수 있다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 의존관계 저장부가, 상기 각 출력요소를 행성분, 상기 각 입력요소를 열성분으로 하는 2차원 배열 메모리에 의해서 구성되고, 그 2차원 배열 메모리의 각 메모리요소는, 그 메모리요소의 행성분에 대응하는 출력요소가, 그 메모리요소의 열성분에 대응하는 입력요소를 기원으로 하는지 아닌지의 정보를 유지하고 있는 구성으로 해도 된다.
상기 구성에서는, 출력패턴에 포함되는 각 출력요소가, 입력패턴에 포함되는 어느 입력요소를 기원으로 하는 것인지의 정보를, 2차원 배열 메모리에 의해서 나타내도록 되어 있다. 따라서, 2차원 배열 메모리의 각 메모리요소에 대해서, 가령 1 또는 0을 저장한다고 하는 단순한 처리에 의해서 상기 정보를 저장할 수 있음과 동시에, 가령 각 메모리요소에 관해서 논리연산을 행함으로써, 각 행성분의 관계 등을 용이하게 파악하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 제 1연산수단에 의해서 명령구간의 연산이 행해질 때에, 레지스터 및/또는 주기억수단으로부터 리드가 행해진 경우에, 상기 입출력 생성수단은, (1) 리드가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서 의존관계 저장부에 등록되어 있는 경우, 그 출력요소에 대응하는 의존관계 저장부의 행성분으로 이루어지는 잠정행렬을 일시 기억하는 처리, (2) 리드가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서는 의존관계 저장부에 등록되어 있지 않고, 입력요소로서 의존관계 저장부에 등록되어 있는 경우, 그 입력요소에 대응하는 의존관계 저장부의 열에 대응하는 메모리요소를 1로 하고, 그 밖의 메모리요소를 0으로 한 잠정행렬을 일시 기억하는 처리, 및 (3) 리드가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소 및 입력요소의 어느 것으로서도 의존관계 저장부에 등록되어 있지 않은 경우에는, 그 어드레스 및 값을 입력요소로서 의존관계 저장부에 등록함과 동시에, 그 입력요소에 대응하는 의존관계 저장부의 열에 대응하는 메모리요소를 1로 하고, 그 밖의 메모리요소를 0으로 한 잠정행렬을 일시 기억하는 처리를 행하고, 레지스터 및/또는 주기억수단으로의 라이트가 행해진 경우에, 상기 입출력 생성수단은, (4) 라이트가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서 등록되어 있는 경우, 등록되어 있는 출력요소에 대응하는 출력값을, 라이트가 행해진 값으로 갱신함과 동시에, 이미 등록되어 있는 출력요소에 대응하는 의존관계 저장부의 행성분을, 그 시점에서 일시 기억되어 있는 모든 잠정행렬의 논리합으로 치환하고, 그 후, 일시 기억되어 있는 잠정행렬을 초기화하는 처리, 및 (5) 라이트가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서 등록되어 있지 않은 경우, 그 어드레스 및 값을 출력요소로서 의존관계 저장부에 등록함과 동시에, 그 출력요소에 대응하는 의존관계 저장부의 행성분을, 그 시점에서 일시 기억되어 있는 모든 잠정행렬의 논리합으로 치환하고, 그 후, 일시 기억되어 있는 잠정행렬을 초기화하는 처리를 행하는 구성으로 해도 된다.
상기와 같은 처리가 행해짐으로써, 어떤 명령구간이 실행되었을 때의 입출력 관계, 즉 출력패턴에 포함되는 각 출력요소가, 입력패턴에 포함되는 어느 입력요소를 기원으로 하는 것인지에 대한 정보를 정확하게 의존관계 저장부의 2차원 배열 메모리에 저장할 수 있다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입출력 그룹 설정수단이, 상기 2차원 배열 메모리에 있어서의 각 행성분 간의 논리곱 연산을 행하는 행간 논리곱 비교부를 포함하고 있고, 상기 입출력 그룹 설정수단은, 상기 의존관계 저장부에 있어서, 어떤 제 1행성분의 반전과, 어떤 제 2행성분과의 논리곱이 모두 0이 되는 행성분의 쌍을 추출하고, 추출된 행성분의 쌍 중, 입력요소의 쌍을 가장 많이 포함하는 행성분 이외의 행성분을, 입출력 그룹의 대상 외로서 설정하는 구성으로 해도 된다.
상기 구성에서는, 각 행성분의 논리곱을 행함으로써, 입력요소의 쌍을 가장 많이 포함하는 행성분 이외의 행성분을, 입출력 그룹의 대상 외로서 설정하도록 되어 있다. 이 처리에 의해서, 어떤 제 1출력요소의 기원이 되는 입력요소의 쌍이, 다른 제 2출력요소의 기원이 되는 입력요소의 상에 모두 포함되어 있는 경우에, 이것을 하나의 입출력 그룹에 모으는 것이 실현된다. 그러므로, 길이가 긴 입출력 그룹을 삭제하는 것이 가능하므로, 명령구간 기억수단에 입출력 그룹을 길게 등록하는 것을 방지할 수 있다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입출력 그룹 설정수단이, 상기 2차원 배열 메모리에 있어서의 각 행성분 간의 논리곱 연산을 행하는 행간 논리곱 비교부를 포함하고 있고, 상기 입출력 그룹 설정수단은, 의존관계 저장부에 있어서, 다른 어느 행성분에 대해서도 논리곱이 모두 0이 되는 행성분을 각각 입출력 그룹으로서 설정하는 구성으로 해도 된다.
상기 구성에서는, 각 행성분의 논리곱을 행함으로써, 다른 행성분에 대해서 독립관계에 있는 행성분을 입출력 그룹으로서 설정하도록 되어 있다. 이 처리에 의해서, 공통 입력요소가 존재하지 않는, 바꿔 말하면, 서로 의존관계를 갖지 않는 입출력 그룹을 추출할 수 있으므로, 재이용을 행할 때에, 이전에 실행된 명령구간에 있어서의 입력패턴 및 출력패턴 중의 일부만이 일치한 경우에도, 재이용을 행하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 이상과 같이, 제 2연산수단이, 상기 제 1연산수단에 의해서 처리가 행해지고 있는 명령구간에 관해서, 이후 입력이 예상되는 예측 입력값에 의거해서 그 명령구간의 연산을 행하고, 그 결과를 상기 명령구간 기억수단에 대해서 등록하는 구성으로 되어 있어도 된다. 이 경우, 제 2연산수단에 의해서, 그 시점에서 제 1연산수단에 의해서 처리가 행해지고 있는 명령구간에 관해서, 예측 입력값에 의거하는 연산이 행해지고, 그 결과가 명령구간 기억수단에 기억된다. 따라서, 다음에, 동일 명령구간이 출현하고, 예측 입력값과 동일한 입력이 행해진 경우에는, 명령구간 기억수단에 기억되어 있는 값을 재이용하는 것이 가능하게 된다. 가령, 입력값이 단조롭게 변화하도록 된 명령구간의 경우에는 예측 입력값이 적중할 가능성이 높으므로, 상기 구성에 의한 효과는 높아진다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입출력 그룹 설정수단이, 각 출력요소가 소속되는 입출력 그룹의 정보를 저장하는 출력측 그룹 저장부와, 각 입력요소가 소속되는 입출력 그룹의 정보를 저장하는 입력측 그룹 저장부와, 입출력 그룹을 생성하고 있는 도중에, 상기 의존관계 저장부에 변경이 있는 경우에, 변경된 출력요소와 입력요소의 의존관계를 저장하는 일시저장부와, 입출력 그룹을 생성하고 있는 도중에, 상기 의존관계 저장부에 변경이 있는 경우에, 변경된 입출력 그룹의 정보를 저장하는 그룹 일시저장부를 구비하고 있는 구성으로 해도 된다.
상기 구성에서는, 제 1연산수단이 명령구간을 실행할 때에, 그 명령구간의 입력패턴과, 상기 명령구간 기억수단에 기억되어 있는 패턴이 일치한 경우, 그 입력패턴과 대응해서 상기 명령구간 기억수단에 기억되어 있는 출력패턴을 레지스터 및/또는 주기억수단으로 출력하는 재이용처리를 행하는 구성으로 되어 있다. 그리고, 명령구간 기억수단에 기억되는 입력패턴 및 출력패턴은, 입출력 생성수단에 의해서 생성된 것으로 되어 있다.
입출력 생성수단은, 출력패턴에 포함되는 각 출력요소가, 입력패턴에 포함되는 어느 입력요소를 기원으로 하는 것인지를 나타내는 정보에 의거해서, 1이상의 출력요소를 포함하는 출력패턴과, 1이상의 상기 입력요소를 포함하는 입력패턴으로 이루어지는 입출력 그룹을 설정하고, 설정된 1이상의 입출력 그룹을 생성하도록 되어 있다. 따라서, 어떤 명령구간이 실행되었을 때의 입력패턴 및 출력패턴을 단순하게 명령구간 기억수단에 등록할 경우와 비교해서, 재이용을 행하는 이상 보다 정확한 입출력 그룹을 명령구간 기억수단에 등록하는 것이 가능하게 된다. 따라서, 재이용을 행할 때의 검색효율을 향상시킬 수 있다.
여기서, 입출력 그룹 설정수단은, 출력측 그룹 저장부, 입력측 그룹 저장부, 일시저장부, 및 그룹 일시저장부를 구비하고 있다. 즉, 일시저장부에 의해서, 입출력 그룹의 생성처리 도중에 있어서의 의존관계 이력을 인식하는 것이 가능하게 되고, 그룹 일시저장부에 의해서, 입출력 그룹의 생성처리 도중에 있어서의 입출력 그룹 이력을 인식하는 것이 가능하게 된다. 또, 이들 정보에 의거해서, 출력측 그룹 저장부, 및 입력측 그룹 저장부를 설정함으로써, 출력측 그룹 저장부, 및 입력측 그룹 저장부를 확인하는 것만으로도 용이하게 입출력 그룹의 설정처리를 행하는 것이 가능하게 된다. 따라서, 복잡한 연산처리를 행하는 일 없이, 비교적 소규모의 연산수단에 의해서 입출력 그룹의 설정을 행하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입출력 그룹 설정수단이, 입출력 그룹을 생성하고 있는 도중에, 상기 출력요소 및/또는 상기 입력요소에 대해서 이미 할당되어 있는 입출력 그룹의 정보를 저장하는 그룹 관리부를 추가로 구비하고 있는 구성으로 해도 된다.
상기 구성에 의하면, 그룹관리부에 의해서, 입출력 그룹의 생성처리 도중에 있어서, 이미 사용되고 있는 입출력 그룹을 인식하는 것이 가능하게 된다. 따라서, 입출력 그룹의 설정처리를 보다 용이하게 행하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 의존관계 저장부가, 상기 각 출력요소를 행성분, 상기 각 입력요소를 열성분으로 하는 2차원 배열 메모리에 의해서 구성되고, 그 2차원 배열 메모리의 각 메모리요소는, 그 메모리요소의 행성분에 대응하는 출력요소가, 그 메모리요소의 열성분에 대응하는 입력요소를 기원으로 하는지 아닌지의 정보를 유지하고 있는 구성으로 해도 된다.
상기 구성에서는, 출력패턴에 포함되는 각 출력요소가, 입력패턴에 포함되는 어느 입력요소를 기원으로 하는 것인지의 정보를, 2차원 배열 메모리에 의해서 나타내도록 되어 있다. 따라서, 2차원 배열 메모리의 각 메모리요소에 대해서, 가령 1 또는 0을 저장한다고 하는 단순한 처리에 의해서 상기 정보를 저장할 수 있음과 동시에, 가령 각 메모리요소에 관해서 논리연산을 행함으로써, 각 행성분의 관계 등을 용이하게 파악하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 일시저장부가, 상기 의존관계 저장부에 있어서의 복수 행의 메모리요소의 논리합을 저장하는 것이며, 상기 그룹 일시저장부는, 상기 출력측 그룹 저장부에 있어서의 복수 행의 메모리요소의 논리합, 및/또는 상기 입력측 그룹 저장부에 있어서의 복수의 입력요소에 대응하는 메모리요소의 논리합을 저장하는 것인 구성으로 해도 된다.
상기 구성에서는, 일시저장부가, 의존관계 저장부에 있어서의 복수 행의 메모리요소의 논리합을 저장하는 것으로 되어 있다. 따라서, 입출력 그룹을 생성하고 있는 도중에, 상기 의존관계 저장부에 변경이 있는 경우에, 변경된 출력요소와 입력요소의 의존관계를 저장하는 것으로서의 일시저장부를 비교적 간단한 구성에 의해서 실현할 수 있다. 또, 그룹 일시저장부가, 출력측 그룹 저장부 및/또는 입력측번호저장부에 있어서의 메모리요소의 논리합을 저장하는 것으로 되어 있다. 따라서, 입출력 그룹을 생성하고 있는 도중에, 상기 의존관계 저장부에 변경이 있는 경우에, 변경된 입출력 그룹의 정보를 저장하는 것으로서의 그룹 일시저장부를 비교적 단순한 구성에 의해서 실현할 수 있다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입출력 그룹 설정수단이, 입출력 그룹을 생성하고 있는 도중에, 조건분기 명령이 검출된 경우에, 그 조건분기 명령이 의존하는 입력요소의 정보를 저장하는 조건분기 저장부를 추가로 구비하고 있는 구성으로 해도 된다.
상기 구성에 의하면, 조건분기 저장부에, 조건분기에 관계된 입력요소의 정보를 저장하는 것이 가능하게 된다. 따라서, 명령구간의 실행시에 조건분기가 생긴 경우에도, 입출력의 의존관계를 정확하게 인식하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 제 1연산수단에 의해서 명령구간의 연산이 행해질 때에, 레지스터 및/또는 주기억수단으로부터 리드가 행해진 경우에, 상기 입출력 생성수단은, (1) 리드가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서 의존관계 저장부에 등록되어 있는 경우, 그 출력요소에 대응하는 의존관계 저장부의 행성분과, 상기 일시저장부의 각 요소와의 논리합을 그 일시저장부에 저장함과 동시에, 그 출력요소에 대응하는 출력측 그룹 저장부의 행성분과, 상기 그룹 일시저장부의 각 요소와의 논리합을 그 그룹 일시저장부에 저장하는 처리, (2) 리드가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서는 의존관계 저장부에 등록되어 있지 않고, 입력요소로서 의존관계 저장부에 등록되어 있는 경우, 그 입력요소에 대응하는 의존관계 저장부의 열에 대응하는 메모리요소를 1로 하고, 그 밖의 메모리요소를 0으로 한 정보를 상기 일시저장부에 저장함과 동시에, 그 입력요소에 대응하는 입력측 그룹 저장부의 각 요소와, 상기 그룹 일시저장부의 각 요소와의 논리합을 그 그룹 일시저장부에 저장하는 처리, 및 (3) 리드가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소 및 입력요소의 어느 것으로서도 의존관계 저장부에 등록되어 있지 않은 경우에는, 그 어드레스 및 값을 입력요소로서 의존관계 저장부에 등록함과 동시에, 그 입력요소에 대응하는 의존관계 저장부의 열에 대응하는 메모리요소를 1로 하고, 그 밖의 메모리요소를 0으로 한 정보를 상기 일시저장부에 저장하는 처리를 행하고, 레지스터 및/또는 주기억수단으로의 라이트가 행해진 경우에, 상기 입출력 생성수단은, (4) 라이트가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서 등록되어 있는 경우, 등록되어 있는 출력요소에 대응하는 출력값을, 라이트가 행해진 값으로 갱신함과 동시에, 이미 등록되어 있는 출력요소에 대응하는 의존관계 저장부의 행성분을, 그 시점에서 일시 기억되어 있는 상기 일시저장부에 저장되어 있는 정보로 치환함과 동시에, 상기 그룹 일시저장부에 저장되어 있는 정보에 의거해서, 그 출력요소에 대응하는 출력측 그룹 저장부의 정보, 및 그 출력요소가 의존하는 각 입력요소에 대응하는 입력측 그룹 저장부의 정보를 갱신하는 처리, 및 (5) 라이트가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서 등록되어 있지 않은 경우, 그 어드레스 및 값을 출력요소로서 의존관계 저장부에 등록함과 동시에, 그 출력요소에 대응하는 의존관계 저장부의 행성분을, 그 시점에서 일시 기억되어 있는 상기 일시저장부에 저장되어 있는 정보로 치환함과 동시에, 상기 그룹 일시저장부에 저장되어 있는 정보에 의거해서, 그 출력요소에 대응하는 출력측 그룹 저장부의 정보, 및 그 출력요소가 의존하는 각 입력요소에 대응하는 입력측 그룹 저장부의 정보를 갱신하는 처리를 행하는 구성으로 해도 된다.
상기와 같은 처리가 행해짐으로써, 어떤 명령구간이 실행되었을 때의 입출력 관계, 즉 출력패턴에 포함되는 각 출력요소가, 입력패턴에 포함되는 어느 입력요소를 기원으로 하는 것인지에 대한 정보를 정확하게 의존관계 저장부의 2차원 배열 메모리에 저장할 수 있음과 동시에, 입출력 그룹의 설정을 정확하게 행하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 명령구간 기억수단이, 복수의 상기 입력패턴을, 일치 비교해야 할 항목을 노드로 간주한 트리구조로서 기억하는 입력패턴 기억수단을 구비하고 있는 구성으로 해도 된다.
상기 구성에 의하면, 복수의 입력패턴에 있어서 공통되는 항목에 대해서는 하나의 노드로서 기억하는 것이 가능하게 되므로, 입력패턴 기억수단에 있어서의 기억내용의 리던던시(redundancy)를 저감하는 것이 가능하게 된다. 따라서, 명령구간 기억수단에서 필요로 하는 기억용량을 저감할 수 있으므로, 데이터 처리장치 자체의 코스트를 저감하는 것이 가능하게 된다.
그리고, 입력패턴 기억수단은, 가령, 연상검색장치에 의해서 구성되어 있는 경우, 과거의 입력패턴이 그룹 분할되어 등록될 가능성이 높아져 있으므로, 동시에 복수의 입력패턴의 검색이 행해질 가능성을 높이는 것이 가능하게 된다. 즉, 일반적인 연상검색장치의 특성인 긴 레이턴시 높은 쓰루풋의 메리트를 보다 효과적으로 누리는 것이 가능하게 된다. 또, 과거의 입력패턴이 그룹 분할되어 등록될 가능성이 높아짐으로써, 재이용시의 입력패턴의 히트율을 향상시킬 수 있다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입력패턴 기억수단이, 상기 입력패턴에 있어서, 일치 비교해야 할 항목의 값과, 다음에 비교해야 할 항목을 대응시켜서 저장함으로써, 상기 트리구조를 실현하는 구성으로 해도 된다.
이 경우, 일치 비교해야 할 항목에 관해서 순서대로 일치 비교해 가는 것이 가능하게 되므로, 일치 비교해야 할 항목을 노드로 간주한 트리구조로서 입력패턴을 기억하는 것을 실현하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입력패턴 기억수단이, 연상검색수단과, 부가기억수단을 구비하고, 상기 연상검색수단은, 일치 비교해야 할 항목의 값을 저장하는 값 저장영역과, 그 항목을 식별하는 키를 저장하는 키 저장영역을 갖는 하나 이상의 검색대상 라인을 구비하고, 상기 부가기억수단은, 상기 검색대상 라인에 대응한 대응라인마다, 다음에 연상검색을 행해야 할 항목을 저장하는 검색항목 지정영역을 갖고 있는 구성으로 해도 된다.
이 경우, 일치 비교해야 할 항목의 값이 연상검색수단에 입력되면, 값과 키가 일치하는 검색대상라인이 싱글 매치되고, 싱글 매치된 검색대상라인에 대응하는 부가기억수단에 있어서의 대응라인에 의해서, 다음에 연상검색을 행해야 할 항목이 확정되도록 된다.
여기서, 각 입력패턴은, 일치 비교해야 할 항목을 노드로 간주한 트리구조로서 기억하고 있으므로, 연상검색수단에 있어서, 어떤 항목에 관해서 일치하는 검색대상은, 상기와 같이 하나로 된다(싱글 매치). 싱글 매치기구만을 갖는 연상검색 메모리는 일반적으로 시판되고 있는 한편, 멀티 매치를, 싱글 매치와 동일성능에 의해서 보고 가능한 연상검색 메모리는 일반적으로 시판되고 있지 않다. 즉, 상기 구성에 의하면, 시판중인 연상검색 메모리를 연상검색수단으로서 이용할 수 있으므로, 보다 단기간에 낮은 코스트로, 본 발명에 관계되는 데이터 처리장치를 실현하는 것이 가능하게 된다.
또, 상기 과제를 해결하기 위해서, 본 발명에 관계되는 데이터 처리장치는, 주기억수단으로부터 명령구간을 리드하고, 연산처리를 행한 결과를 주기억수단에 라이트하는 처리를 행하는 데이터 처리장치에 있어서, 상기 주기억수단에서 리드한 명령구간에 의거해서 연산을 행하는 제 1연산수단과, 상기 제 1연산수단에 의한 상기 주기억수단에 대한 리드 및 라이트시에 이용되는 레지스터와, 복수의 명령구간의 실행결과로서의 입력패턴 및 출력패턴을 기억하는 입출력 기억수단을 구비하고, 상기 제 1연산수단은, 명령구간을 실행할 때에, 그 명령구간의 입력패턴과, 상기 입출력 기억수단에 기억되어 있는 입력패턴이 일치한 경우, 그 입력패턴과 대응해서 상기 입출력 기억수단에 기억되어 있는 출력패턴을 레지스터 및/또는 주기억수단으로 출력하는 재이용 처리를 행함과 동시에, 상기 제 1연산수단에 의한 명령구간의 실행결과를, 상기 입출력 기억수단에 기억할 때에, 입력패턴에 포함되는 입력요소 중, 예측을 행해야 할 입력요소와 예측을 행할 필요가 없는 입력요소를 구별하고, 이 구별정보를 상기 입출력 기억수단에 등록하는 등록처리수단과, 상기 구별정보에 의거해서, 상기 입출력 기억수단에 기억되어 있는 입력요소 중, 예측을 행해야 할 입력요소 값의 변화를 예측하는 예측처리수단과, 상기 예측처리수단에 의해서 예측된 입력요소에 의거해서, 해당하는 명령구간을 사전에 실행하는 제 2연산수단을 추가로 구비하고, 상기 제 2연산수단에 의한 명령구간의 사전 실행결과가 상기 입출력 기억수단에 기억되는 것을 특징으로 한다.
상기 구성에서는, 입출력 기억수단에, 복수의 명령구간의 실행결과로서의 입력패턴 및 출력패턴이 기억되어 있고, 명령구간의 실행시에 그 명령구간의 입력패턴과 입출력 기억수단에 기억되어 있는 입력패턴이 일치한 경우에 재이용을 행하는 구성으로 되어 있다. 그리고, 예측처리수단에 의해서, 입출력 기억수단에 기억되어 있는 입력요소의 이후의 변화가 예측되고, 이 예측결과에 의거해서, 제 2연산수단이 명령구간의 사전 실행을 행하도록 되어 있다.
여기서, 상술한 종래기술과 같이, 단순히 입력요소의 예측을 행하면, 예측 적중률이 낮아짐으로써, 예측에 의한 사전 실행 효과가 매우 낮아진다고 하는 문제가 있다. 이것에 비해서, 상기 구성에 의하면, 먼저 등록처리수단에 의해서, 입력패턴에 포함되는 입력요소 중, 예측을 행해야 할 입력요소와 예측을 행할 필요가 없는 입력요소가 구별된다. 그리고, 예측처리수단은 등록처리수단에 의해서 예측을 행해야 할 입력요소로 판정된 입력요소에 대해서 예측을 행하도록 되어 있다. 따라서, 예측 적중률을 향상시키는 것이 가능하게 되므로, 보다 효과적인 명령구간의 사전 실행을 실현하는 것이 가능하게 된다. 이와 같은 사전 실행이 행해짐으로써, 다음에 동일 명령열이 출현하여, 예측 입력값과 동일한 입력이 행해진 경우에는, 명령열 기억수단에 기억되어 있는 값을 재이용하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 등록처리수단이, 입력에 이용된 상기 레지스터의 각 어드레스에 대해서, 스택 포인터 또는 프레임 포인터로서 이용될 경우, 및 그 어드레스에 대한 라이트명령이 정수 세트 명령인 경우에, 해당 어드레스에 대해서 구별정보로서 정수 플래그를 세트하고, 상기 이외의 경우에, 해당 어드레스에 대해서 상기 정수 플래그를 리셋하는 구성으로 해도 된다.
상기 구성에 의하면, 입력에 이용된 레지스터 어드레스 중, 어드레스가 고정되어 있고, 또 값이 단조롭게 변화할 것으로 예측되는 어드레스에 정수 플래그를 세트하는 것이 가능하게 된다. 따라서, 정수 플래그가 세트되어 있는 레지스터 어드레스에 의거하는 입력요소에 대해서 예측을 행하도록 함으로써, 예측 적중률을 향상시키는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 등록처리수단이, 입력요소가 신규로 상기 입출력 기억수단에 기억될 때에, 그 입력요소의 어드레스에 대해서, 구별정보로서 변경 플래그를 리셋하고, 상기 입출력 기억수단에 기억된 후에, 해당 어드레스에 대해서 스토어 명령이 실행된 경우에, 해당 어드레스에 대해서 변경 플래그를 세트하는 구성으로 해도 된다.
상기 구성에 의하면, 입출력 기억수단에 기억된 것 중, 그 후에 한번도 라이트가 행해지지 않은 어드레스에 대해서는, 변경 플래그가 리셋된 상태로 된다. 이와 같은 어드레스에 기억되어 있는 내용은 변화하지 않게 되므로, 그 어드레스에 대해서 예측을 행할 필요는 없게 된다. 즉, 상기와 같은 변경 플래그가 입력요소의 어드레스로 설정됨으로써, 예측이 필요한 어드레스에 대해서만 예측을 행하는 것이 가능하게 된다. 따라서, 예측 처리를 위한 하드웨어 자원을 유효하게 이용하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 등록처리수단이, 입력요소가 신규로 상기 입출력 기억수단에 기억될 때에, 그 입력요소의 어드레스에 대해서, 구별정보로서 이력 플래그를 리셋하고, 그 어드레스에 대한 로드 명령의 실행시에, 그 어드레스를 생성한 레지스터 어드레스에 상기 정수 플래그가 세트되어 있는 경우에, 그 어드레스에 대해서 이력 플래그를 세트하는 구성으로 해도 된다.
상기 구성에 의하면, 입출력 기억수단에 기억되어 있는 입력요소의 어드레스에 대한 로드명령의 실행시에, 그 어드레스를 생성한 레지스터 어드레스에 상기 정수 플래그가 세트되어 있는 경우에, 그 어드레스에 대해서 이력 플래그가 세트되도록 되어 있다. 여기서, 정수 플래그가 세트되어 있는 레지스터 어드레스는, 상기와 같이, 어드레스가 고정되어 있고, 또 값이 단조롭게 변화할 것으로 예측되는 어드레스로 되어 있다. 따라서, 이와 같은 레지스터 어드레스에 의거해서 생성된 어드레스에 관해서 예측을 행하는 것에 의한 예측 적중률은 높아질 것으로 예상된다. 즉, 상기와 같은 이력 플래그를 마련해 둠으로써, 예측해야 할 어드레스를 적절하게 설정하는 것이 가능하게 된다.
또, 이력 플래그로서는, 각 어드레스에 문자대로의 플래그를 정하도록 해도 되며, 복수의 바이트 데이터로 이루어지는 어드레스 중, 이력보존 대상으로 하는 바이트 위치를 나타내는 마스크로 한 형식으로 이력 플래그를 실현하도록 해도 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 등록처리수단이, 입력요소가 신규로 상기 입출력 기억수단에 기억될 때에, 그 입력요소의 어드레스에 대해서, 구별정보로서 변경 플래그를 리셋하고, 상기 입출력 기억수단에 기억된 후에, 해당 어드레스에 대해서 스토어 명령이 실행된 경우에, 해당 어드레스에 대해서 변경 플래그를 세트함과 동시에, 상기 예측처리수단은, 상기 입출력 기억수단에 기억되어 있는 입력요소의 어드레스 중, 상기 변경 플래그가 세트되고, 또 이력 플래그가 세트되어 있는 어드레스에 관해서, 입력요소의 변화 예측을 행하는 구성으로 해도 된다.
여기서, 변경 플래그가 세트되어 있는 어드레스는, 상술한 바와 같이, 예측을 행하는 것에 의한 효과를 기대할 수 있는 어드레스가 된다. 또, 이력 플래그가 세트되어 있는 어드레스란, 상기와 같이, 예측 적중률이 높을 것으로 기대할 수 있는 어드레스가 된다. 따라서, 상기 구성에 의하면, 예측을 행하는 것에 의한 효과가 높을 것으로 예상되는 어드레스에 관해서만 예측이 행해지게 된다. 따라서, 예측처리를 위한 하드웨어 자원을 유효하게 이용하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 예측처리수단이, 상기 입출력 기억수단에 기억되어 있는 입력요소 중, 그 입력요소의 이력에 있어서의 값의 변화량이 0은 아닌 입력요소에 대해서만, 입력요소 값의 변화 예측을 행하는 구성으로 해도 된다.
상기 구성에 의하면, 이력에 있어서의 값의 변화량이 0은 아닌 입력요소에 대해서만, 입력요소 값의 변화 예측이 행해지게 된다. 여기서, 이력에 있어서의 값의 변화량이 0으로 되어 있는 입력요소란, 변화가 없을 것으로 예상되는 입력요소이므로, 그 입력요소에 대해서 예측을 행할 필요는 없게 된다. 즉, 상기 구성에 의하면, 예측이 필요한 어드레스에 대해서만 예측을 행하는 것이 가능하게 된다. 따라서, 예측처리를 위한 하드웨어 자원을 유효하게 이용하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 등록처리수단이, 상기 제 1연산수단에 의한 명령구간의 실행결과를, 상기 입출력 기억수단에 기억할 때에, 입력패턴에 포함되는 입력요소 중, 예측을 행해야 할 입력요소와 예측을 행할 필요가 없는 입력요소를 구별하고, 이 구별정보를 상기 입출력 기억수단에 등록함과 동시에, 상기 입출력 기억수단에 저장되는 출력패턴에 있어서의 출력요소 중, 해당 명령구간의 실행시에 스토어가 행해진 것에 대해서 그 스토어 횟수를 카운트하고, 이 카운트 값을 상기 입출력 기억수단에 저장하며, 상기 제 2연산수단은, 상기 예측처리수단에 의해서 예측된 입력요소에 의거해서, 해당하는 명령구간을 사전에 실행함과 동시에, 상기 카운트 값에 의거해서 해당 입력요소에 대해서 행해지는 스토어 횟수를 대기한 다음에 주기억으로부터의 리드를 행해서 해당하는 명령구간의 사전 실행을 행하는 구성으로 해도 된다.
상기 구성에 의하면, 등록처리수단은, 입출력 기억수단에 저장되는 출력패턴에 있어서의 출력요소 중, 해당 명령구간의 실행 시에 스토어가 행해진 것에 대해서 그 스토어 횟수를 카운트하고, 이 카운트 값을 입출력 기억수단에 저장한다. 그리고, 예측처리수단은, 상기 카운트 값에 의거해서 해당 입력요소에 대해 행해지는 스토어 횟수를 대기한 다음에 주기억으로부터의 리드를 행해서 해당하는 명령구간의 사전 실행을 행하도록 되어 있다. 따라서, 가령 값의 변화가 불확정으로 되는 출력요소에 관해서는 예측을 행하는 것이 곤란하며, 이 경우에 상기와 같이 카운트된 스토어 횟수를 대기한 다음 주기억으로부터의 리드가 행해짐으로써, 적절한 입력요소의 값을 설정한 상태에서 사전 실행을 행하는 것이 가능하게 된다.
이상과 같은 구성에 의해, 보다 정확한 사전 실행을 실현하는 것이 가능하게 된다. 이와 같은 사전 실행이 행해짐으로써, 다음에 동일 명령열이 출현하여, 예측 입력값과 동일한 입력이 행해진 경우에는, 입출력 기억수단에 기억되어 있는 값을 재이용하는 것이 가능하게 될 가능성을 한층 더 높일 수 있다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입출력 기억수단이, 상기 제 1연산수단에 의한 명령구간의 실행결과로서의 입력패턴 및 출력패턴을 일시적으로 기록하는 입출력 기록영역을 구비하고, 상기 입출력 기록영역은, 각 출력요소에 대해서, 스토어가 행해진 횟수를 저장하는 스토어 카운터를 갖는 구성으로 해도 된다.
상기 구성에 의하면, 입출력 기억수단에 입출력 기억영역이 마련되어 있고, 이 입출력 기록영역에, 각 출력요소에 대해서 스토어가 행해진 횟수를 저장하는 스토어 카운터가 마련되어 있다. 이것에 의해, 제 1연산수단에 의해서 명령구간의 실행이 행해졌을 때에, 그 명령구간의 실행시에, 각 출력요소에 대해서 행해진 스토어 횟수를 정확하게 기록하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입출력 기억수단이, 상기 제 1연산수단에 의해서 연산이 행해진 명령구간마다 과거 실행결과의 이력을 저장하는 이력저장영역을 구비하고, 상기 등록처리수단은, 상기 입출력 기록영역에 기록된 실행결과를 상기 이력저장영역에 저장함과 동시에, 상기 입출력 기록영역에 기록된 실행결과의 입력패턴에 포함되는 입력요소 중, 이력저장영역에 전회(前回)의 실행결과로서 등록되어 있는 출력요소와 동일한 어드레스의 입력요소에 대해서, 대응하는 전회의 출력요소 스토어 카운터를 그 입력요소에 대한 스토어 카운터로서 등록하는 구성으로 해도 된다.
상기 구성에 의하면, 먼저 입출력 기록영역에 기록된 실행결과가 순차 명령구간마다 마련된 이력저장영역에 저장된다. 그리고, 입출력 기록영역으로부터 이력저장영역에 저장되는 입력패턴에 포함되는 이력요소 중, 이력저장영역에 전회의 실행결과로서 등록되어 있는 출력요소와 동일한 어드레스의 입력요소에 대해서, 대응하는 전회의 출력요소 스토어 카운터가 그 입력요소에 대한 스토어 카운터로서 등록된다. 여기서, 이력저장영역에 저장되는 입력요소 중, 전회의 실행결과로서의 출력요소와 동일한 어드레스로 되는 입력요소는, 전회의 실행결과에 영향을 받는 입력요소가 된다. 즉, 이와 같은 입력요소에 대해서 상기와 같이 스토어 카운터를 설정함으로써, 해당 입력요소에 대해서 예측을 행할 때에, 대기해야 할 스토어 횟수를 정확하게 설정하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입출력 기억수단이, 상기 예측처리수단에 의해서 예측된 입력요소를 저장하는 예측값 저장영역을 구비하고, 상기 예측처리수단은, 상기 이력저장영역에 저장되어 있는 입력요소 중, 실행이력 사이에서의 값의 변화량이 일정한 입력요소에 관해서 값의 예측을 행하고, 상기 예측값 저장영역에 저장하는 구성으로 해도 된다.
상기 구성에 의하면, 먼저 입출력 기억수단에 예측값 저장영역이 마련되어 있다. 그리고, 예측처리수단은 실행이력 사이에서의 값의 변화량이 일정한 입력요소에 관해서 값의 예측을 행하고, 예측값 저장영역에 저장한다. 여기서, 이력에 있어서의 명령구간의 실행결과 사이에서의 값의 변화량(차분)이 일정한 입력요소는, 이후에도 그 변화량이 일정할 가능성이 높은 것이므로, 이것에 의거해서 예측을 행하는 것이 가능하다. 이와 같이 해서 예측을 행한 결과를 예측값 저장영역에 저장함으로써, 예측 적중 가능성이 높은 예측값을 설정하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입출력 기억수단이, 스토어 횟수를 대기한 다음에 주기억으로부터의 리드를 행해야 할 입력요소를 저장하는 대기필요 어드레스 저장영역을 구비하고, 상기 예측처리수단은, 상기 이력저장영역에 저장되어 있는 이력요소 중, 실행이력에 있어서 어드레스가 변화하지 않고, 실행이력 사이에서의 값의 변화량이 불확정인 입력요소에 관해서, 상기 스토어 카운터, 및 예측거리에 의거하는 값으로서의 대기 카운터를 상기 대기필요 어드레스 저장영역에 저장하는 구성으로 해도 된다.
상기 구성에 의하면, 먼저 입출력 기억수단에 대기필요 어드레스 저장역역이 마련되어 있다. 그리고, 예측처리수단은 실행이력에 있어서, 어드레스가 변화하지 않고, 실행이력 사이에서의 값의 변화량이 불확정인 입력요소에 관해서, 상기 스토어 카운터, 및 예측거리에 의거한 값으로서의 대기 카운터를 대기요소 어드레스 저장영역에 저장한다. 여기서, 예측거리란, 해당 명령구간이 이후 반복해서 실행된 경우에, 현시점부터의 실행 횟수를 나타내고 있다. 실행이력에 있어서 어드레스가 변화하지 않고, 실행이력 사이에서의 값의 변화량이 불확정 입력요소란, 해당 어드레스에 대해서, 명령구간이 반복해서 실행될 때마다 스토어가 행해지는 것이다. 따라서, 대기 카운터를 상기와 같이 스토어 카운터 및 예측 거리에 의거해서 설정함으로써, 대기해야 할 횟수를 적절하게 설정하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 상기 입출력 기억수단이, 스토어 횟수를 대기한 다음에 주기억으로부터의 리드를 행해야 할 입력요소를 저장하는 대기필요 어드레스 저장영역을 구비하고, 상기 예측처리수단은, 상기 이력저장영역에 저장되어 있는 입력요소 중, 실행이력에 있어서 어드레스 자체가 변화하고, 각각의 어드레스 값도 스토어가 발생함으로써 변화하는 입력요소에 관해서, 상기 스토어 카운터에 의거한 값으로서의 대기 카운터를 상기 대기필요 어드레스 저장영역에 저장하는 구성으로 해도 된다.
상기 구성에 의하면, 먼저 입출력 기억수단에 대기필요 어드레스 저장영역이 마련되어 있다. 그리고, 예측처리수단은, 실행이력에 있어서 어드레스 자체가 변화하고, 각각의 어드레스 값도, 스토어가 발생함으로써 변화하는 입력요소에 관해서, 상기 스토어 카운터에 의거한 값으로서의 대기 카운터를 상기 대기필요 어드레스 저장영역에 저장한다 실행이력에 있어서 어드레스 자체가 변화하고, 각각의 어드레스 값도 스토어가 발생함으로써 변화하는 입력요소란, 명령구간이 반복 실행될 때마다 어드레스가 변화하고, 또 값의 변화량도 불확정으로 되는 것이다. 따라서, 대기 카운터를 상기와 같이 스토어 카운터에만 의거해서 설정함으로써, 대기해야 할 횟수를 적절하게 설정하는 것이 가능하게 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 제 2연산수단이 주기억수단으로부터 값을 리드할 때에, 상기 예측값 저장영역에 있어서, 스토어 카운터 값이 세트되어 있지 않고, 예측값이 유효인 경우 그 예측값을 리드값으로 하고, 스토어 카운터가 0보다도 큰 경우에는 스토어 카운터가 0이 될 때까지 대기하고, 스토어 카운터가 0이 된 시점에서 값을 취출하는 구성으로 해도 된다.
또, 본 발명에 관계되는 데이터 처리장치는, 상기 구성에 있어서, 제 2연산수단이 주기억수단에 값을 라이트할 때에, 다른 제 2연산수단에 대해서 라이트 어드레스 및 값을 통지함과 동시에, 그 통지를 수신한 다른 제 2연산수단은, 예측값 저장영역에 동일 어드레스가 등록되어 있는 경우에, 그 입력요소의 스토어 카운터를 1만큼 빼서 라이트값을 저장하고, 스토어 카운터가 이미 0인 경우에는 아무 것도 행하지 않는 구성으로 해도 된다.
도 1은 본 발명의 일실시예에 관계되는 데이터 처리장치가 구비하는 명령구간 기억부의 개략 구성을 나타내는 도면이다.
도 2는 상기 데이터 처리장치의 개략 구성을 나타내는 블록도이다.
도 3은 상기 명령구간 기억부에 있어서의 연상검색동작의 구현예를 나타내는 도면이다.
도 4(a)는 도 4(b)에 있어서의 연상검색동작을 트리구조로서 나타내는 도면이다.
도 4b는 상기 명령구간 기억부에 있어서의 연상검색동작의 다른 구현예를 나타내는 도면이다.
도 5(a)는 도 5(b)에 있어서의 연상검색동작을 트리구조로서 나타내는 도면이다.
도 5(b)는 상기 명령구간 기억부에 있어서의 연상검색동작의 또 다른 구현예를 나타내는 도면이다.
도 6은 함수 및 루프가 포개진 구조로 되어 있는 상태의 일예를 나타내는 도면이다.
도 7은 함수의 포개진 구조에 있어서, 내측 구조의 레지스터 입출력이 외측 구조의 레지스터 입출력이 되는 영향의 범위를 나타내는 도면이다.
도 8은 비교예에 있어서의 RF 및 RB의 개략 구성을 나타내는 도면이다.
도 9는 비교예에 있어서의 검색동작의 예를 나타내는 도면이다.
도 10은 제 2구성예로서 RW의 개략 구성을 나타내는 도면이다.
도 11은 명령구간의 일예를 나타내는 도면이다.
도 12는 RW의 제 1구성예에 있어서의 메모리 구성의 개략을 나타내는 도면이다.
도 13은 RW의 제 1구성예에 의해서 생성된 입출력 세트가 트리구조로서 등록된 상태를 나타내는 도면이다.
도 14는 RW의 제 2구성예에 의해서 생성된 입출력 세트가 트리구조로서 등록된 상태를 나타내는 도면이다.
도 15는 명령구간의 일예를 나타내는 도면이다.
도 16은 제 1구성예로서 RW 메모리 구성의 개략을 나타내는 도면이다.
도 17은 RW의 제 1구성예에 의해서 생성된 입출력 세트가 트리구조로서 등록된 상태를 나타내는 도면이다.
도 18은 도 16에 나타낸 입출력 세트에 대해서, 서로 독립된 입력세트 및 출력세트 각각에 그룹번호를 부여한 상태를 나타내는 도면이다.
도 19는 그룹번호에 의거해서, 도 17에 나타낸 트리구조를 복수의 트리구조로 분할한 상태를 나타내는 도면이다.
도 20은 제 3구성예로서의 RW의 개략 구성을 나타내는 도면이다.
도 21은 제 4구성예로서의 RW의 개략 구성을 나타내는 도면이다.
도 22는 명령구간의 또 다른 일예를 나타내는 도면이다.
도 23은 그룹번호에 의거해서 생성된 복수의 트리구조가 저장된 상기 명령구간 기억부에 있어서의 연상검색동작의 구체예를 나타내는 도면이다.
도 24는 본 발명의 다른 실시예에 관계되는 데이터 처리장치가 구비하는 RF/RB에 의해서 실현되는 재이용표를 나타내는 도면이다.
도 25는 상기 데이터 처리장치의 개략 구성을 나타내는 블록도이다.
도 26은 명령이 디코드된 결과, 함수 호출명령인 경우의 처리 흐름을 나타내는 플로우차트이다.
도 27은 명령이 디코드된 결과, 함수 복귀명령인 경우의 처리 흐름을 나타내는 플로우차트이다.
도 28은 명령이 디코드된 결과, 후방분기 성립인 경우의 처리 흐름을 나타내는 플로우차트이다.
도 29는 명령이 디코드된 결과, 후방분기 불성립인 경우의 처리 흐름을 나타내는 플로우차트이다.
도 30은 RW와, RF·RB의 관계를 나타내는 도면이다.
도 31은 어떤 명령구간이 실행된 경우의 RB에 있어서의 실제 등록상황을 나타내는 도면이다
도 32는 어떤 명령구간이 반복 실행된 경우에 있어서의 이력으로서 RB에 등록된 예를 나타내는 도면이다
도 33은 예측에 의거해서, 예측처리부가 어드레스(A2) 및 어드레스(R5)의 값에 관해서 예측을 행한 경우의, 예측 엔트리로서 RB에 라이트되는 입력요소의 상태를 나타내는 도면이다
도 34는 본 발명은 또 다른 실시예에 관계되는 데이터 처리장치가 구비하는 명령구간 기억부에 있어서의 RF 및 RB의 구성의 개요를 나타내는 도면이다
도 35는 상기 데이터 처리장치의 개략 구성을 나타내는 도면이다
도 36(a)은 명령구간의 일예를 나타내는 도면이다
도 36(b)는 도 36(a)에 나타낸 명령구간이 실행된 경우에, RB에 등록되는 입력 어드레스와 입력 데이터, 및 출력 어드레스와 출력 데이터를 간략화해서 나타내는 도면이다
도 36(c)는 도 36(a)에 나타낸 명령구간에 이어서 행해지는 제 2회째 루프처리의 예를 나타내는 도면이다
도 36(d)는 도 36(c)에 있어서의 RB에 등록되는 입력 어드레스와 입력 데이터, 및 출력 어드레스와 출력데이터를 간략화해서 나타내는 도면이다
도 36(e)는 도 36(c)에 나타낸 명령구간에 이어서 행해지는 제 3회째 루프처리의 예를 나타내는 도면이다
도 36(f)는 도 36(e)에 있어서의 RB에 등록되는 입력 어드레스와 입력 데이터, 및 출력 어드레스와 출력데이터를 간략화해서 나타내는 도면이다
도 37은 도 36(a)에 나타낸 명령구간이 실행된 경우의 RB에 있어서의 실제 등록상황을 나타내는 도면이다.
도 38(a)는 도 36(a)에 나타낸 명령구간이 반복 실행된 경우에 있어서의, 이력으로서 RB에 등록된 예를 나타내는 도면이다.
도 38(b)는 예측처리부가 어드레스(A1)의 값에 관해서 예측을 행한 경우의, 예측 엔트리로서 RB에 등록되는 입력요소의 상태를 나타내는 도면이다.
도 39는 참고예에 의한 예측에 의거해서, 루프처리의 2회째 및 3회째에 있어서의 사전 실행을 행한 결과를 나타내는 도면이다.
도 40(a)는 RB에 있어서의 입출력 라이트행의 예를 나타내는 도면이다.
도 40(b)는 이력 저장행의 예를 나타내는 도면이다.
도 41(a)는 도 36(a)에 나타낸 명령구간이 반복 실행된 경우에 있어서의, 이력 저장행의 등록예를 나타내는 도면이다.
도 41(b)는 도 41(a)에 나타낸 이력에 의거해서, 예측처리부가 이하에 나타낸 예측처리를 행했을 때의, 예측값 저장영역 및 대기필요 어드레스 저장영역의 예를 나타내는 도면이다.
도 42는 예측값에 의거해서 사전 실행을 행할 경우의 실행예를 나타내는 도면이다.
도 43은 명령구간 기억부의 제 2구성예의 개략을 나타내는 도면이다.
도 44는 도 43에 나타낸 명령구간 기억부에 있어서의 연상검색동작의 구체예를 나타내는 도면이다.
도 45는 제 2구성예를 적용한 경우의 데이터 처리장치의 개략 구성을 나타내는 도면이다.
도 46(a)는 함수A가 함수B를 호출하는 구조를 개념적으로 나타내는 개념도이다.
도 46(b)는 도 46(a)에 나타낸 프로그램 구조를 실행할 때의 주기억에 있어서의 메모리 맵을 나타내는 도면이다.
도 47은 함수A가 함수B를 호출할 경우의 메모리 맵에 있어서의 인수 및 프레임의 개요를 나타내는 도면이다.
도 48은 하나의 함수를 재이용하기 위한 종래의 재이용표를 나타내는 도면이다.
도 49는 명령구간의 일예를 나타내는 도면이다.
도 50은 도 49에 나타낸 명령구간이 실행된 경우에, RB에 등록되는 입력 어드레스와 입력 데이터, 및 출력 어드레스와 출력 데이터를 간략화해서 나타내는 도면이다.
도 51은 RB에 있어서의 실제 등록상황을 나타내는 도면이다.
도 52는 도 49에 나타낸 명령구간이 반속 실행된 경우에 있어서의 RB의 입력측에 등록되는 이력의 예를 나타내는 도면이다.
도 53은 종래의 입력예측에 의한 예측결과를 나타내는 도면이다.
<실시예 1>
본 발명의 일실시예에 대해서 도면에 의거해서 설명하면 이하와 같다.
(데이터 처리장치의 구성)
본 실시예에 관계되는 데이터 처리장치의 개략 구성을 도 2에 나타낸다. 이 도에 도시한 바와 같이, 그 데이터 처리장치는, MSP(Main Stream Processor)(1A), SSP(Shadow Stream Processor)(1B), 재이용표로서의 명령구간 기억부(명령구간 기억수단(2), 및 주기억(주기억수단)(3)을 구비한 구성으로 되어 있고, 주기억(3)에 기억되어 있는 프로그램 데이터 등을 리드해서 각종 연상처리를 행하며, 연산결과를 주기억(3)에 라이트 처리를 행하는 것이다. 또, 이 도에 도시한 구성에서는, SSP(1B)를 하나 구비한 구성으로 되어 있으나, 2개 이상 구비한 구성으로 되어 있어도 된다. 또, 이 도에 도시한 구성에서는, SSP(1B)를 구비한 구성으로 되어 있으나, SSP(1B)를 구비하고 있지 않은 구성으로 해도 상관은 없다. SSP(1B)를 구비한 경우의 작용·효과에 대해서는 후술한다.
명령구간 기억부(2)는 프로그램에 있어서의 함수나 루프 등의 명령구간을 재이용하기 위한 데이터를 저장하는 메모리수단이다. 이 명령구간 기억부(2)의 상세에 대해서는 후술한다.
주기억(2)은 MSP(1A) 및 SSP(1B)의 작업영역으로서의 메모리로, 가령 RAM(Random Access Memory)등에 의해서 구성되는 것이다. 가령, 하드디스크 등의 외부기억수단이나, 외부 I/O(input/output)장치 등의 외부장치로부터 프로그램이나 데이터 등이 주기억(3)에 리드되고, MSP(1A) 및 SSP(1B)는 주기억(3)에 리드된 데이터에 의거해서 연산을 행하게 된다. 또, MSP(1A)에 의한 연산결과가 주기억(3)에 라이트되고, 이 연산결과가 상기 외부장치로 송출된다.
MSP(1A)는 재이용 기억수단으로서 RW(입출력 생성수단)(4A), 연산기(제 1연산수단)(5A), 레지스터(6A), 및 Cache(7A)를 구비한 구성으로 되어 있다. 또, SSP(1B)는 마찬가지로, 재이용 기억수단으로서의 RW(제 2연산수단)(4B), 연산기(제 2연산수단)(5B), 레지스터(6B), 및 Cache/Local(7B)을 구비한 구성으로 되어 있다.
RW(4A·4B)는 재이용 윈도우로, 현재 실행중이면서 등록중인 RF(부가기억수 단) 및 RB(연상검색수단)(후술함)의 각 라인을 링구조의 스택으로서 유지하는 것이다. 이 RW(4A·4B)는 실제 하드웨어 구조로서 명령구간 기억부(2)에 있어서의 특정 라인을 액티브에 의한 제어선의 집합에 의해서 구성된다. 또, 상세는 후술하지만, RW(4A·4B)는 실행된 명령구간에 관해서 출력패턴을 생성하고, 이 생성된 입출력 그룹을 명령구간 기억부(2)에 대해서 실행결과로서 등록하는 처리를 행한다.
연산기(5A·5B)는 레지스터(6A·6B)에 유지되어 있는 데이터에 의거해서 연산처리를 행하는 것으로, ALU(arithmetic and logical unit)라 불리는 것이다. 레지스터(6A·6B)는 연산기(5A·5B)에 의해서 연산을 행하기 위한 데이터를 유지하는 기억수단이다. 또, 본 실시예에서는 연산기(5A·5B), 및 레지스터(6A·6B)는 SPARC 아키텍처에 준한 것으로 한다. Cache(7A·7B)는 주기억(3)과, MSP(1A) 및 SSP(1B) 사이에서 캐시메모리로서 기능하는 것이다. 또, SSP(1B)에서는, Cache(7B)에 국소메모리로서의 Local(7B)이 포함되어 있는 것으로 한다.
(명령구간 기억부의 구성)
도 1은 본 실시예에 있어서의 명령구간 기억부(2)에 의해서 실행되는 재이용표를 나타내고 있다. 이 도에 도시한 바와 같이, 명령구간 기억부(2)는 RB, RF, RO1(제 2출력패턴 기억수단), 및 RO2(제 1출력패턴 기억수단)를 구비한 구성으로 되어 있다.
RB는 비교해야 할 값인 레지스터값 또는 주기억 입력값을 저장하는 Value(값 저장영역), 및 키번호를 저장하는 Key(키 저장영역)을 구비하고 있고, Value 및 Key의 조합 라인을 복수 구비하고 있다.
RF는 다음에 비교해야 할 레지스터 번호 또는 주기억 어드레스가 없는 것을 나타내는 종단 플래그(E), 다음에 비교해야 할 레지스터 번호 또는 주기억 어드레스의 내용이 변경된 것을 나타내는 비교필요 플래그(C), 다음에 비교해야 할 대상이 레지스터인지 주기억인지를 나타내는 R/M, 다음에 비교해야 할 레지스터 번호 또는 주기억 어드레스를 나태는 Adr.(검색항목 지정영역), 직전에 참조한 라인 번호를 나타내는 UP(모(parent)노드 저장영역), 다음에 비교해야 할 레지스터 번호 또는 주기억 어드레스보다도 우선해서 비교해야 할 레지스터 번호 또는 주기억 어드레스를 나타내는 Alt.(비교필요 항목 지정영역), 및 우선해서 비교할 때 필요한 키를 나타내는 DN(비교필요 키 지정영역)을 구비하고 있으며, 이들은 RB에 있어서의 각 라인에 대응해서 마련되어 있다.
RO1 및 RO2는 RB 및 RF에 의한 검색결과에 의해, 재이용이 가능하다고 판정된 경우에, 주기억 및/또는 레지스터로 출력하는 출력값을 저장하는 것이다. RO1은 RF의 각 라인에 1 대 1로 대응해서 출력값 및 출력해야 할 어드레스를 저장하고 있다. RO2는 RO1만으로 출력값을 다 저장할 수 없는 경우에, 다 저장하기 못한 분량의 출력값 및 출력해야 할 어드레스를 저장하고 있다. RO2로부터도 출력값을 리드할 필요가 있는 경우에는, RO1에 있어서의 해당 라인에, RO2에 있어서의 출력값이 저장되어 있는 포인터가 표시되어 있으며, 이 포인터를 이용하여 RO2로부터 출력값의 리드가 행해진다.
또, RB 및 RF는 각각, CAM(content-addressable memory) 및 RAM(Random Access Memory)에 의해서 구성되어 있다. 일반적으로, 어드레스가 주어지면, 그 어 드레스에 저장된 값을 참조할 수 있는 메모리는, RAM이라 불리는 메모리이다. 한편, 상기 CAM이란, 가상 메모리라 불리는 메모리로, 검색해야 할 내용이 주어지면, 그 내용과 일치하는 라인이 선택되도록 되어 있다. 통상, CAM은 RAM과 세트로 해서 이용된다.
여기서, CAM과 RAM의 연계동작에 대해서, 구체예를 들어서 설명한다. CAM에, 「5, 5, 5, 5, 5」, 「1, 3, 1, 1, 1」, 「1, 3, 3, 5, 2」, 「6, 6, 6, 6, 6」이라고 하는 데이터열이 엔트리로서 등록되어 있고, RAM에, CAM에 있어서의 각 데이터열에 대응해서, 「5, 5」, 「1, 1」, 「1, 2」, 「6, 6」이라고 하는 데이터가 등록되어 있는 것으로 한다. 여기서, 검색해야 할 데이터열로서, 「1, 3, 3, 5, 2」를 CAM에 입력하면, 일치하는 엔트리가 ON으로 되어, RAM에 등록되어 있는 해당하는 데이터「1, 2」가 출력된다. 이 구체예와 마찬자기의 구성 및 동작에 의해서, 상기 RB 및 RF가 실현된다
(비교예)
여기서, 비교예로서 도 8에 도시한 바와 같은 구성의 RF 및 RB에 의한 동작에 대해서 설명한다. 이 도에 도시한 바와 같이, RF는 엔트리가 유효인지 아닌지를 나타내는 상태표시 플래그(V), 엔트리 교체 힌트를 나타내는 LRU, 함수와 루프를 구별하는 F/L, 명령구간의 선두 어드레스를 나타내는 Start, 명령구간의 종료 어드레스를 나타내는 End, 참조해야 할 주기억 입력 어드레스에 관한 정보를 나타내는 Read, 및 참조해야 할 주기억 출력 어드레스에 관한 정보를 나타내는 Write를 유지하고 있다.
또, RB는 엔트리가 유효인지 아닌지를 나타내는 상태표시 플래그(V), 엔트리 교체 힌트를 나타내는 LRU, 명령구간을 호출할 때의 직전 스택 포인트 %sp를 나타내는 SP, 루프의 종료 어드레스(End), 루프 종료시의 분기방향을 나타내는 taken/not, 레지스터 입력값으로서의 인수(Args.)(V:유효 엔트리, Val.:값) 및 인수 이외의 레지스터 입력값 및 조건 코드(Regs., CC), 주기억 입력 유효바이트(Mask), 주기억 입력값(Value), 주기억 출력 유효바이트(Mask), 주기억 출력값(Value), 및 레지스터 출력값으로서의 리턴값(Return Values) 및 리턴값 이외의 레지스터 출력값 및 조건코드(Regs., CC)(V:유효 엔트리, Val.:값)을 유지하고 있다.
함수 또는 루프를 실행할 때에 이전에 실행한 명령구간이 재이용 가능한지 아닌지를 판단할 때에는, 다음의 수순으로 행해진다. 먼저, (1) RF에 등록되어 있는 함수 또는 루프 엔트리의 선두 어드레스(Start)에, 해당 함수 또는 루프의 선두 어드레스와 일치하는 것이 있는지를 검색한다. 일치하는 것이 있는 경우에는, (2) RB에 등록되어 있는 해당 엔트리 중, 유효 엔트리를 나타내는 상태표시 플래그(V)가 등록완료 상태로 세트되어 있는 엔트리이고, 또 그 엔트리에 있어서의 인수(Args.) 및 Regs., CC가 호출하는 함수 또는 루프의 대응하는 값과 완전히 일치하는 엔트리를 하나 또는 복수 선택한다. 그리고, 선택한 엔트리에 있어서, (3) 관련되는 주기억 어드레스, 즉, 적어도 하나의 Mask가 유효한 Read 어드레스를 이용하여 주기억을 순서대로 참조하고, (4) 해당 함수 또는 루프의 주기억 입력값과, RB에 등록되어 있는 주기억 입력값의 비교를 행한다. 그리고, 모든 입력이 일치할 경우에, (5) RB에 기억되어 있는 Return Values를 레지스터에 라이트하고, 주기억 출력 어드레스에 대해서, 순차 각 유효 Mask가 세트되어 있는 주기억 출력값(Value)을 라이트한다. 이상에 의해, 함수 또는 루프의 재용이 실현된다.
이상과 같은 비교예에 있어서의 동작에 대해, 도 9를 참조하면서 보다 구체적으로 설명한다. 먼저, 프로그램 카운터(PC)와, RF에 등록된 명령구간 어드레스(Region)이 비교되고, 추가로 레지스터의 내용(Reg.)과, RB에 등록되어 있는 레지스터 입력값(Args., Regs., CC)을 비교한다. 이 시점에서, RB에 있어서의 엔트리01∼04 중, 엔트리(03) 및 엔트리(04)가 일치한다고 판정된 것으로 한다. 즉, 이 시점에서는, 멀티 매치로 되어 있다.
다음에, 주기억 어드레스(A1)에 관해서 비교하는 것으로 되지만, 주기억 어드레스(A1)에 대해서는, RF에 있어서 일치 비교를 행할 필요가 없음을 나타내는 플래그(0)가 표시되어 있으므로, 일치 비교는 행하지 않는다. 즉, 엔트리(03) 및 엔트리(04)가 후보로서 그대로 남게 된다.
다음에, 주기억 어드레스(A2)에 관해서 비교가 행해진다. 여기서, RF에 있어서, 주기억 어드레스(A2)에 관해서는 일치 비교를 행할 필요가 있음을 나타내는 플래그(1)가 표시되어 있으므로, 일치 비교를 행한다. 이 결과, 내용이 「00」인 엔트리(03)만이 후보로서 남는 것으로 된다. 그 후, 일치 비교를 행하는 항목으로서 주기억 어드레스(A3 및 A4)가 있지만, 이들은 어느 것이라도 일치 비교를 행할 필요가 없음을 나타내는 플래그가 표시되어 있으므로, 엔트리(03)는, 비교가 필요한 모든 항목이 일치한 것으로 된다. 따라서, 엔트리(03)에 대응하는 출력값으로서의 주기억 출력값 및 레지스터 출력값이 주기억 및 레지스터로 출력된다.
이 비교예에 있어서의 동작 포인트는 다음과 같다. (a) RB에 등록되어 있는 각 값과 재이용 대상이 되고 있는 함수 또는 루프에 있어서의 대응하는 값을 비교할 때에, RB에 있어서의 종방향 열을 순서대로 일치를 확인해가는 것으로 되지만, 내용이 일치하는 엔트리가 복수 존재하는(멀티 매치)것을 허용하고 있다. (b) 검색 도중에 있어서 멀티 매치를 허용하고 있지만, 최종적으로 하나의 엔트리가 선택되면 된다. (c) RB에 있어서의 열을 일치 확인해가는 순번은 임의이므로, 가령 레지스터 입력값을 최초에 모아서 비교한다고 하는 것을 행하는 것이 가능하다.
또, 이 비교예의 경우, 다음과 같은 문제가 있다. (d) RB에 있어서, 각 엔트리에 있어서의 항목수(횡의 길이)는 고정되어 있다. 따라서, 등록되어 있는 항목 이외의 항목을 추가할 수는 없게 되어 있다. 또, 역으로 사용하지 않는 항목에 대응하는 메모리 영역은 빈 영역이 되지만, 이것을 유효하게 이용할 수는 없다. (e) 각 엔트리는 하나의 항목이라도 내용이 다르면, 각각 별도의 엔트리로서 등록할 필요가 있다. 따라서, RB에 있어서의 메모리의 이용효율은 좋지 않은 것으로 된다.
또, 이상과 같은 비교예의 경우, RF 및 RB를 구성하는 메모리로서는 구조가 횡방향으로 긴 것이 된다. 가령, 이 메모리 용량을 2Mbyte로 한 경우, 횡을 2Kword, 종을 256엔트리로 하게 된다.
(입력패턴을 트리구조로서 등록하는 제 1구성예)
상기 비교예에서는 RB에 있어서의 각 엔트리로서의 횡방향 행은, 일치 비교를 행해야 할 입력값의 항목을 모두 포함한 것으로 되어 있다. 즉, 모든 입력패턴 을 각각 하나의 엔트리로서 RB에 등록하도록 되어 있다.
이것에 비해서, 본 제 1구성예에서는 일치 비교를 행해야 할 입력값의 항목을 짧은 단위로 구획하고, 각각의 비교단위를 노드로서 택하고, 입력패턴을 트리구조로서 RF 및 RB에 등록하도록 되어 있다. 그리고, 재이용을 행할 때에는, 일치하는 노드를 순차 선택함으로써, 최종적으로 재이용 가능한지를 판단하도록 되어 있다. 달리 말하면, 복수의 입력패턴에서 공통되는 부분을 하나로 모아서, RF 및 RB의 1행에 대응시키도록 되어 있다.
이것에 의해, 리던던시를 없애서, 명령구간 기억부(2)를 구성하는 메모리의 이용효율을 향상시키는 것이 가능하게 된다. 또, 입력패턴을 트리구조로 하고 있으므로, 하나의 입력패턴을 RB에 있어서의 하나의 행으로서의 엔트리에 대응시킬 필요가 없게 된다. 따라서, 일치 비교를 행해야 할 입력값의 항목수를 가변으로 하는 것이 가능하게 되어 있다.
또, RF 및 RB는 입력패턴을 트리구조로서 등록하고 있으므로, 일치 비교를 행할 때에는 멀티 매치가 행해지지 않게 된다. 결국, 명령구간 기억부(2)로서는, 싱글 매치기구를 갖는 연상검색 메모리이면 실현 가능하게 된다. 여기서, 싱글 매치기구만을 갖는 연상검색 메모리는 일반적으로 시판되고 있는 한편, 멀티 매치를 싱글 매치와 동일 성능에 의해서 보고 가능한 연상검색 메모리는 일반적으로 시판되고 있지 않다. 즉, 본 제 1구성예에 있어서의 명령구간 기억부(2)에 의하면, 시판중인 연상검색 메모리를 이용할 수 있으므로, 보다 단기간에 낮은 코스트로, 본 실시예에 관계되는 데이터 처리장치를 실현하는 것이 가능하게 된다.
다음에, 도 3을 참조하면서, 상기 제 1구성예에 있어서의 명령구간 기억부(2)에서의 연상검색동작에 대한 구체예에 대해서 설명한다. 먼저, 명령구간의 실행이 검출되면, 프로그램 카운터(PC) 및 레지스터의 내용(Reg.)이 RB에 입력된다. 그리고, RB에 있어서, 연상검색에 의해, 입력된 이들 값과, RB의 Value 열에 등록되어 있는 명령구간 선두 어드레스 및 레지스터 값이 비교되고, 값이 일치하는 유일한 행(라인)이 후보(매치라인)로서 선택된다. 이 예에서는 RB에 있어서의 「01」라인이 매치라인으로 선택된다.
다음에, 매치라인으로 선택된 라인의 RB에 있어서의 번지인 「01」이, 인코드 결과로서 RF로 전달되고, 키(01)에 대응하는 RF에 있어서의 라인이 참조된다. 키(01)에 대응하는 RF에 있어서의 라인에서는 비교필요 플래그가 「0」이고, 비교해야 할 주기억 어드레스가 A1으로 되어 있다. 즉, 주기억 어드레스(A1)에 관해서는 일치 비교를 행할 필요가 없게 된다.
다음에, 키(01)를 이용해서, RB에 있어서의 Key 열에 대해서 검색이 행해진다. 이 예에서는, RB에 있어서의 「03」라인이 매치라인으로 선택된다. 그리고, 인코드 결과로서 키(03)가 RF로 전달되고, 키(03)에 대응하는 RF에 있어서의 라인이 참조된다. 키(03)에 대응하는 RF에 있어서의 라인에서는 비교필요 플래그가 「1」이고, 비교해야 할 주기억 어드레스가 A2로 되어 있다. 즉, 주기억 어드레스(A2)에 관해서는, 일치 비교를 행할 필요가 있게 된다. 여기서, 주기억(3)에 있어서의 주기억 어드레스(A2)의 값이 Cache(7A)를 통해서 리드되고, RB에 있어서 Value가 주기억(3)에서 리드된 값이며, 또, Key가 「03」으로 되어 있는 라인이 검색된다. 도 3에 나타낸 예에서는 Key가 「03」으로 되어 있는 라인이 「04」 및 「05」 2개 있지만, 주기억(3)에서 리드된 값이 「00」이므로, 「05」 라인이 매치라인으로 선택되고, RF에 대해서 인코드 결과로서 키(05)가 전달된다.
이상과 같은 처리가 반복되고, RF에 있어서, 다음에 비교해야 할 레지스터 번호 또는 주기억 어드레스가 없음을 나타내는 종단 플래그(E)가 검출된 경우, 입력패턴이 모두 일치한다고 판정되어, 해당 명령구간은 재이용 가능하다고 판단된다. 그리고, 종단 플래그(E)가 검출된 라인으로부터 「Select Output」신호가 출력되고, RO1 및 RO2에 저장되어 있는, 그 라인에 대응하는 출력값이 레지스터(6A) 및 주기억(3)에 대해서 출력된다.
이상과 같이, 본 제 1구성예에 있어서의 명령구간 기억부(2)에 의한 연상검색동작은, 다음과 같은 특징을 갖고 있다. 먼저, 내용이 일치한 것을 나타내는 매치라인은, RB에 있어서 하나의 라인만으로 되므로, 검색동작을 다음 열로 전달할 때에 인코드한 결과를 하나 전송하면 된다. 그러므로, RB와 RF 간을 접속하는 신호선은 어드레스의 인코드 결과인 1쌍(N개)으로도 가능하다. 이것에 비해서, 상술한 비교예에서는 RB에 있어서 멀티 매치가 허용되고 있으므로, RB에 있어서의 각 열들을 접속하는 신호선은 각 라인마다 마련할(2N개) 필요가 있다. 즉, 본 제 1구성예의 구성에 의하면, 명령구간 기억부(2)를 구성하는 연상검색 메모리에 있어서의 신호선의 수를 큰 폭으로 저감하는 것이 가능하게 된다.
또, 검색 도중에는 싱글 매치만이 허용되도록 되어 있으므로, 비교해야 할 항목의 비교번호는 트리구조에 있어서의 참조순으로 한정된다. 즉, 레지스터 값과 메모리 내용은 참조순으로 섞어가면서 비교할 필요가 있다.
입력패턴은 각 항목을 참조해야 할 Key라고 하는 형태로 링크시킴으로써, 트리구조에 의해서 RB 및 RF에 등록되어 있다. 또, 입력패턴의 항목은 종단 플래그에 의해서 그 종단이 표시되도록 되어 있다. 따라서, 입력패턴의 항목수를 가변으로 할 수 있으므로, 재이용표에 등록해야 할 명령구간의 상태에 따라서, 유연하게 입력패턴의 항목수를 설정하는 것이 가능하게 된다. 또, 입력패턴의 항목수가 고정이 아니므로, 이용하지 않는 항목이 쓸데없이 메모리 영역을 점유하는 일이 없게 되어, 메모리 영역의 이용효율을 향상시킬 수 있다.
또, 트리구조에 의해서 입력패턴이 등록되므로, 항목의 내용이 중복되는 부분에 대해서는, 복수의 입력패턴으로 하나의 라인을 공유하는 것이 가능하게 되어 있다. 따라서, 메모리 영역의 이용효율을 더욱 향상시킬 수 있다.
또, 이상과 같은 구성의 경우, RF 및 RB를 구성하는 메모리로서는 구조가 종방향으로 긴 것이 된다. 가령, 이 메모리 용량을 2Mbyte로 한 경우, 횡이 8word, 종을 65536라인으로 하는 것으로 된다.
(입력패턴을 트리구조로서 등록하는 제 2구성예)
상기 예에서는 도 1에 나타낸 RF에 있어서, UP, Alt., 및 DN 항목은 이용하고 있지 않게 된다. 즉, 상기 예에서는 RF에 있어서, 이들 항목을 마련할 필요는 없게 된다. 이것에 비해서, UP, Alt., 및 DN 항목을 이용함으로써, 연상검색동작을 더욱 고속화하는 제 2구성예 및 그 동작에 대해서 이하에 설명한다.
먼저, 도 4(b)에, 프로그램 카운터(PC) 및 레지스터의 내용(Reg.)만을 비교하고, 이들이 일치한 경우는 주기억 값을 비교하는 일 없이, 구간의 재이용이 가능하다고 판단할 수 있는 경우의 상태를 나타낸다. 이 상태에서는 먼저, RB의 「01」라인에 있어서, PC 및 Reg.가 Value에 등록되어 있고, RF의 「01」 라인에 있어서, 종단 플래그가 「E」, 비교 플래그가 「0」, 비교해야 할 주기억 어드레스가 「A1」, 모 노드번호를 나타내는 UP가 「FF」로 되어 있다. 또, RB의 「03」 라인에서는 Value값 없이, Key가 「01」로 되어 있고, RF의 「03」 라인에서는, 종단 플래그가 「E」, 비교필요 플래그가 「0」, 비교해야 할 주기억 어드레스가 「A2」, 모 노드번호를 나타내는 UP가 「FF」로 되어 있다. 이후, 마찬가지로, RB 및 RF에 있어서의 「05」 라인 및 「07」라인이 등록되어 있으며, 각각 종단 플래그가 「E」, 비교필요 플래그가 「0」으로 되어 있다.
이 상태에서, 어떤 명령구간의 실행이 검출되면, PC 및 Reg.가 RB에 입력되고, 매치라인으로서 RB에 있어서의 「01」라인이 선택된다. 그리고, 매치라인으로 선택된 라인의 RB에 있어서의 번지인 「01」이, 인코드 결과로서 RF로 전달되고, 키(01)에 대응하는 RF에 있어서의 라인이 참조된다. 키(01)에 대응하는 RF에 있어서의 라인에서는 종단 플래그가 「E」로 되어 있으므로, 다음에 비교해야 할 주기억 어드레스가 없는 것을 알 수 있다. 또, 비교필요 플래그가 「0」으로 되어 있으므로, 주기억 어드레스(A1)에 대해서 비교를 행할 필요는 없음을 알 수 있다.
그러므로, 도 4(a)의 트리구조에 나타낸 바와 같이, PC 및 Reg.의 일치가 S1에서 확인되면, Tr1에 나타낸 노드와 같이, 주기억 어드레스(A1, A2, A3)에 있어서 의 비교를 행하는 일 없이, 대응하는 출력값이 출력된다.
RF 및 RB가 이 상태일 경우에, 주기억 어드레스(A2)에 대해서 라이트가 행해진 것으로 한다. 이 경우, RF 및 RB에 있어서의 입력패턴의 등록시에는 주기억 어드레스(A2)의 일치 비교를 행할 필요는 없는 상태였지만, 주기억 어드레스(A2)가 변경됨으로써, 주기억 어드레스(A2)가 일치 비교를 행할 필요가 생기게 된다. 그러므로, 이 경우에는 도 5(b)에 나타낸 바와 같이, RF 및 RB가 변경된다.
먼저, 내용이 변경된 주기억 어드레스(A2)를 키로 하고, RF에 있어서의 Adr.열에 대해서 검색이 시작된다. 이것에 의해, RF에 있어서의 「03」라인이 선택된다. 그리고, 선택된 「03」라인에 있어서, 비교필요 라인이 「1」로 설정됨과 동시에, 종단 플래그「E」가 삭제된다.
다음에, 「03」라인에 있어서의 UP를 참조함으로써, 모 노드로서의 「01」라인이 확인된다. 그리고, 「01」라인에 있어서, 다음에 비교해야 할 주기억 어드레스보다도 우선해서 비교해야 할 주기억 어드레스를 나타내는 Alt.에, 내용이 변경된 주기억 어드레스인 A2가 라이트됨과 동시에, 종단 플래그「E」가 삭제된다. 또한, 「01」라인에 있어서, 우선해서 비교할 때에 필요한 키를 나타내는 DN에 「03」이 라이트된다.
이상과 같이 RF 및 RB이 리라이트(rewrite)된 경우의 연상검색동작은 다음과 같이 된다. 어떤 명령구간이 검색되었을 때, 먼저, PC 및 Reg.가 RB에 입력된다. 그리고, RB에 있어서, 연상검색에 의해, 입력된 이들 값과 RB의 Value 열에 등록되어 있는 명령구간 선두 어드레스 및 레지스터 값이 비교되고, RB에 있어서의 「01 」라인이 매치라인으로 선택된다.
다음에, 매치라인으로 선택된 라인의 RB에 있어서의 번지인 「01」이, 인코드 결과로서 RF로 전달되고, 키(01)에 대응하는 RF에 있어서의 라인이 참조된다. 키(01)에 대응하는 RF에 있어서의 라인에서는, 비교필요 플래그가 「0」이고, 비교해야 할 주기억 어드레스가 A1로 되어 있다. 즉, 주기억 어드레스(A1)에 관해서는 일치 비교를 행할 필요는 없음을 알 수 있다.
또, 다음에 비교해야 할 주기억 어드레스보다도 우선해서 비교해야 할 주기억 어드레스를 나타내는 Alt.에, 주기억 어드레스(A2)가 등록되어 있고, 우선해서 비교할 때에 필요한 키를 나타내는 DN에 「03」이 등록되어 있는 것이 확인된다. 이 경우, 주기억(3)에 있어서의 주기억 어드레스(A2)의 값이 Cache(7A)를 통해서 리드되고, RB에 있어서 Value가 주기억(3)에서 리드된 값이며, 또 Key가 DN에 표시되어 있는 「03」으로 되어 있는 라인이 검색된다.
도 5(b)에 나타낸 예에서는, Key가 「03」으로 되어 있는 라인은 「04」 및 「05」 2개이지만, 주기억(3)에서 리드된 값이 「00」이므로, 「05」라인이 매치라인으로 선택되고, RF에 대해서 인코드 결과로서 키(05)가 전달된다. 키(05)에 대응하는 RF에 있어서의 라인에서는 종단 플래그가 「E」로 되어 있으므로, 입력패턴이 모두 일치한다고 판정되어, 해당 명령구간은 재이용 가능하다고 판단된다. 그리고, 종단 플래그(E)가 검출된 라인으로부터 「Select Output」신호가 출력되어, RO1 및 RO2에 저장된다. 그 라인에 대응하는 출력값이 레지스터(6A) 및 주기억(3)에 대해서 출력된다.
이상과 같은 연상검색동작을 행하는 제 2구성예에 의하면, RF에 있어서, 다음에 비교해야 할 주기억 어드레스보다도 우선해서 비교해야 할 주기억 어드레스를 나타내는 Alt., 및 우선해서 비교할 때에 필요한 키를 나타내는 DN이 마련되어 있으므로, 도 5(a)에 나타낸 트리구조와 같이, 주기억 어드레스(A1)의 내용과 키(01)에 의한 검색을 스킵해서, 주기억 어드레스(A2)의 내용과 키(03)에 의한 검색이 가능하게 된다. 따라서, 검색동작의 처리 스텝을 저감할 수 있으므로, 처리의 고속화를 꾀할 수 있다.
(출력값 저장수단의 구성예)
상기에서는 명령구간의 입력패턴을 RF 및 RB에 등록하여, 연상검색동작을 행하는 것에 대해서 설명하였으나, 이하에서는 입력패턴의 일치가 확인된 후에, 재이용으로서 출력되는 출력값을 저장하는 수단의 구성예에 대해서 설명한다. 상기에 있어서, 도 1을 참조하면서 설명한 바와 같이, 명령구간 기억부(2)에는 재이용이 가능하다고 판정된 경우에, 주기억 및/또는 레지스터로 출력되는 출력값을 저장하는 출력값 저장수단으로서, RO1 및 RO2가 마련되어 있다.
출력값은 RF 및 RB에서 출력되는 어드레스에 의거해서, 출력값을 기억하는 RAM 등의 기억수단을 참조함으로써 얻는 것이 가능하다. 그러나, 입력패턴과 마찬가지로, 출력패턴에 대해서도, 출력값의 항목수를 가변으로 하는 것이 바람직하므로, 출력값의 저장방법에 대한 방안이 필요하다.
입력패턴에 관해서는, RF 및 RB에 있어서 트리구조에 의해서 등록되어 있다. 그리고, 트리구조의 말단으로 되어 있는 라인, 즉, 종단 플래그(E)가 등록되어 있 는 라인에 있어서, 재이용이 가능하다고 판정된다. 그러므로, 종단 플래그(E)가 등록되어 있는 각 라인에, 출력해야 할 출력값을 저장하는 출력값 저장수단에 있어서의 포인터를 등록해 둠으로써, 재이용 시에 출력동작을 행하는 것이 가능하게 된다.
그러나, 입력패턴이 모두 일치한 것이 확인된 시점에서, 출력값이 저장되어 있는 포인터에 의거해서 출력값 저장수단에 있어서의 저장위치가 특정되는 경우, 포인터에 의거해서 저장위치를 특정한다고 하는 변환처리가 필요하게 되어, 처리속도를 저하시키는 요인이 된다.
그래서, 본 구성예에서는 출력값 저장수단으로서, RO1 및 RO2 2개의 기억수단을 마련하고 있다. 그리고, RO1은 RF의 각 라인에 1 대 1로 대응해서 출력값 및 출력해야 할 어드레스를 저장하고 있다. 즉, 종단 플래그(E)가 등록되어 있는 RF 라인에 있어서, 재이용이 가능하다고 판정된 경우에는, 그 라인에 대응하는 RO1 라인이 선택되어, 출력값이 출력된다.
그러나, 이와 같이, 출력값 저장수단을 RF의 각 라인에 1 대 1로 대응해서 출력값 및 출력해야 할 어드레스를 저장하고 있는 경우, RF에 있어서의 종단 플래그(E)가 등록되어 있지 않은 RF 라인에 대해서도, RO1에 있어서 메모리 영역이 확보된다. 또, 종단 플래그(E)가 등록되어 있는 RF의 모든 라인에 대응해서, RO1에서 출력값을 저장하므로, 동일 내용이 복수 장소에 기억되어 있다고 하는 바와 같은, 리던던시가 존재하게 된다. 따라서, RO1은 고속으로 처리를 행한다고 하는 면에서는 우수하지만, 메모리의 이용효율로서는 바람직하지 않게 된다.
이 문제를 해소하기 위해서, RO1에 등록 가능한 항목수, 즉 출력값과 출력 어드레스 쌍의 수를 적게 설정함(도 1의 예에서는 2개)과 동시에, RO1에 다 등록할 수 없는 출력값 및 출력 어드레스의 쌍에 대해서는, 포인터를 이용하여 저장영역이 지시되는 구성의 RO2에 등록하도록 하고 있다.
RO2에 있어서는, 포인터에 의해서 저장영역이 지시되므로, 사용되지 않는 메모리 영역은 거의 생기지 않게 된다. 또, 복수의 출력값 및 출력 어드레스의 쌍을 등록할 경우에는, 순차 포인터를 이용하여 이어갈 수 있으므로, 등록가능한 출력값 및 출력 어드레스 쌍의 수를 가변으로 하는 것이 가능하다. 또한, RO1에 있어서의 복수의 라인으로부터, RO2에 있어서의 동일 저장위치를 나타내는 포인터를 지시하는 것도 가능하게 되므로, RO2에 있어서의 저장정보를 RO1에 있어서의 복수의 라인으로 공유하는 것도 가능하게 된다. 따라서, RO2에 있어서는, 저장내용의 리던던시를 낮게 할 수 있다.
이상과 같이, 출력값 저장수단으로서 RO1 및 RO2 2개를 마련함으로써, 출력값의 항목이 적은 경우에는 RO1만 이용함으로써 처리의 고속성을 실현함과 동시에, 출력값의 항목이 많은 경우에는 항목 수를 가변으로 하는 것이 가능한 RO2를 이용함으로써 대응하고 있다. 따라서, 상기 구성에 의하면, 처리의 고속성과 메모리 이용 효율의 향상을 실현할 수 있다.
(명령구간 기억부에 대한 등록처리)
상기에서는 어떤 명령구간의 실행시에 재이용을 행할 경우의 동작에 대해서 설명하였다. 이하에서는 어떤 명령구간의 실행시에, 재이용이 행해지지 않는다고 판단된 경우에, 그 명령구간에 의한 입출력을 RF, RB, RO1 및 RO2에 등록할 때의 동작에 대해서 설명한다.
먼저, 어떤 명령구간의 실행이 검출되면, PC 및 Reg.의 값이 RB에 입력된다. 그리고, RB에 있어서, 연상검색에 의해, 입력된 이들 값과, RB의 Value 열에 등록되어 있는 명령구간 선두 어드레스 및 레지스터 값이 비교된다. 여기서, RB의 Value 열에, 입력된 값과 일치하는 것이 없다고 판정된 경우, 그 명령구간은 재이용이 불가능하다고 판정되어, 연산기(5A)에 의한 연산처리가 행해진다. 그리고, 해당 명령구간의 연산처리가 종료될 때까지 이용되는 레지스터 입력값, 주기억 입력값, 주기억 출력값, 및 레지스터 출력값이 RB, RF, RO1, 필요에 따라서 RO2에 등록된다. 여기서, RB 및 RF에 등록을 행할 때에는 상기에서 나타낸 바와 같은 트리구조가 되도록, 각 항목이 하나의 라인에 대응하게끔 등록이 행해진다. 그리고, 등록해야 할 입력패턴의 최후 항목이 등록된 라인에 있어서, RF의 종단 플래그를 「E」로 하고, 입력패턴의 등록을 종료한다.
한편, 입력된 PC 및 Reg.의 값과 일치하는 것이, RB의 Value 열에 등록되어 있는 경우에는, 상술한 연상검색동작과 마찬가지로 해서, 다음에 일치 비교해야 할 항목에 대한 일치 비교가 행해진다. 이와 같이 해서, RB 및 RF에 등록되어 있는 입력패턴과, 해당 명령구간에 있어서의 입력패턴의 일치 비교를 계속해 나가고, 일치하지 않는 항목이 생긴 시점에서, 새로 노드를 추가하는 형태로, 그 일치하지 않는 항목에 대해서 RB 및 RF에 등록이 행해진다. 그리고, 등록해야 할 입력패턴의 최후 항목이 등록된 라인에 있어서, RF의 종단 플래그를 「E」로 하고, 입력패턴의 등록 을 종료한다.
입력패턴의 등록이 종료되면, 종단 플래그를 「E」로 한 RF에 있어서의 대응하는, RO1에 있어서의 라인, 출력값 및 출력 어드레스의 등록을 행한다. 그리고, 출력값으로서 등록해야 할 항목이 RO1에 다 등록할 수 없는 경우에는, 포인터를 이용하여 RO2에 대해서 등록이 행해진다. 이상에 의해 명령구간의 등록처리가 완료된다.
(명령구간 실행시의 입출력 세트의 생성)
어떤 명령구간을 실행하였을 때에, 명령구간 기억부(2)에 대해서 실행결과가 등록되게끔 되지만, 이 실행결과는 그 명령구간의 실행시에, 레지스터 및/또는 주기억(이하, 간단히 레지스터/메모리라 칭함)에 대해서 행해진 입출력 세트에 상당하는 것이다. 이하에서는, 명령구간 기억부(2)에 등록해야 할 입출력 세트를 어떻게 생성하는가에 대해서 설명한다.
상술한 입력패턴을 트리구조로서 등록하는 제 1 및 제 2구성예의 경우, 입출력 세트는 RW(4A·4B)에 의해서 생성되고, 생성된 입출력 세트에 의거해서, RB, RF, RO1, 및 RO2로의 상술한 바와 같은 등록처리가 행해진다. RW(4A·4B)는 어떤 명령구간이 실행되었을 때에 행해지는 레지스터/메모리로부터의 리드, 및/또는 레지스터/메모리로의 라이트를 감시하고, 이것에 의거해서 입출력 세트를 생성한다. 이 RW(4A·4B)에 의한 입출력 세트의 생성방법에 대해서 이하에 설명한다. 또, 이하의 설명에서는 RW(4A)에 대해서 설명하지만, RW(4B)에 대해서도 동일하다.
(RW의 제 1구성예의 그 1)
도 12는 제 1구성예의 그 1로서, RW(4A) 메모리 구성의 개략을 나타내는 도면이다. 이 도에 도시한 바와 같이, RW(4A)는 명령구간의 PC값을 저장하는 PC, 입력 어드레스 및 입력값을 저장하는 RWI, 및 출력어드레스 및 출력값을 저장하는 RWO 메모리를 갖고 있다. 어떤 명령구간을 실행하였을 때의 입출력 세트는 이 RW(4A) 메모리에 저장되고, 그 후, 명령구간 기억부(2)에 등록된다.
먼저, 어떤 명령구간의 실행이 개시되면, 그 PC값이 RW(4A)에 있어서의 PC에 저장된다. 그 후, 명령구간의 실행이 순차 행해지면, 레지스터/메모리로부터의 리드, 및/또는 레지스터/메모리로의 라이트가 순서대로 행해지게 된다.
명령구간 실행시에 레지스터/메모리로부터의 리드가 행해진 경우에는 RW(4A)에 의해서 다음의 처리가 행해진다.
(AR1) 리드가 행해진 레지스터/메모리의 어드레스가 RWO에 등록되어 있는지 아닌지가 검색된다. RWO에 등록되어 있는 경우에는, 이미 출력값으로서 입출력 세트에 등록되어 있는 값의 리드가 행해진 것이므로, 입력값으로서 등록할 필요는 없게 된다. 즉, 그 어드레스를 RWI에 등록하지 않고 종료한다.
(AR2) 리드가 행해진 레지스터/메모리의 어드레스가 RWO에 등록되어 있지 않은 경우에는, 그 어드레스가 RWI에 등록되어 있는지 아닌지가 검색된다. RWI에 등록되어 있는 경우에는, 이미 입력값으로서 입출력 세트에 등록되어 있는 값의 리드가 행해진 것이 되므로, 추가로 입력값으로서 등록할 필요는 없게 된다. 즉, 이 어드레스를 RWI에 등록하지 않고 종료한다.
(AR3) 리드가 행해진 레지스터/메모리의 어드레스가 RWO 및 RWI의 어디에도 등록되어 있지 않은 경우에는, 그 어드레스 및 값을 입력 어드레스 및 입력값으로서 RWI에 등록한다.
또, 명령구간 실행시에 레지스터/메모리로의 라이트가 행해진 경우에는 RW(4A)에 의해서 다음의 처리가 행해진다.
(AW1) 라이트가 행해진 레지스터/메모리의 어드레스가 RWO에 등록되어 있는지 아닌지가 검색된다. RWO에 등록되어 있는 경우에는, 이미 출력값으로서 입출력 세트에 등록되어 있는 값의 리라이트가 행해진 것이 되므로, 등록되어 있는 출력 어드레스에 대응하는 출력값을, 라이트가 행해진 값으로 갱신하고, 종료한다.
(AW2) 라이트가 행해진 레지스터/메모리의 어드레스가 RWO에 등록되어 있지 않은 경우에는, 그 어드레스 및 값을 출력 어드레스 및 출력값으로서 RW0에 등록한다.
이상의 처리가 그 명령구간의 종료까지 행해짐으로써, 그 명령구간의 입출력 세트가 RW(4A)에 의해서 생성된다. 생성된 입출력 세트는 상술한 바와 같은 등록처리에 의해서 명령구간 기억부(2)에 등록된다.
여기서, 명령구간의 일예로서, 도 11에 도시한 명령구간을 실행한 경우의 예에 대해서 설명한다. 이 도에 있어서, PC는 그 명령구간이 개시되었을 때의 PC값을 나타내고 있다. 이 PC값이 RW(4A)의 PC에 저장된다.
그 후, 제 1행째에 있어서, 레지스터에 있어서의 어드레스(R1)에 저장되어 있는 (00001000)이라고 하는 값이 리드 인(read in)됨과 동시에, 이 리드 인된 값에 100을 더한 연산이 행해진 결과의 주기억 어드레스(어드레스(A1)에 상당)의 값 을 리드하는 명령이 행해지고 있다. 이 시점에서, 어드레스(R1)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(R1) 및 값(00001000)이 RWI에 등록된다. 또, 어드레스(A1)의 값(----FF--)이 리드되고, 레지스터의 어드레스(reg.)에 저장하는 명령이 행해지고 있다. 이 시점에서 어드레스(A1)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A1) 및 값(----FF--)이 RWI에 등록된다.
또, 이 시점에서, 어드레스(reg.)는 RWO에 등록되어 있지 않으므로, 어드레스(reg.) 및 값(----FF--)이 RWO에 등록된다.
다음에, 제 2행째에 있어서, 어드레스(reg.)로부터 값을 리드해서 주기억으로의 라이트처리가 행해지고, 어드레스(B1)에 값(----FF--)이 라이트된다. 이 시점에서, 어드레스(reg.)는 RWO에 등록되어 있으므로, RWO로의 등록은 행해지지 않는다. 또, 어드레스(B1)는 RWO에 등록되어 있지 않으므로, 어드레스(B1) 및 값(----FF--)이 RWO에 등록된다.
다음에, 제 3행째에 있어서, 레지스터에 있어서의 R1에 저장되어 있는 (00001000)이라고 하는 값이 리드 인됨과 동시에, 이 리드 인 된 값에 200을 더하는 연산이 행해진 결과의 주기억 어드레스(어드레스(A2)에 상당)의 값을 리드하는 명령이 행해진다. 이 시점에서, 어드레스(R1)는 RWI에 이미 등록되어 있으므로, RWI으로의 등록은 행해지지 않는다. 또, 어드레스(A2)의 값(--01----)이 리드되고, 레지스타의 어드레스(reg.)에 저장하는 명령이 행하여진다, 이 시점에서는, 어드레스(A2)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A2) 및 값(--01----)이 RWI에 등록된다.
또, 이 시점에서, 어드레스(reg.)는 RWO에 등록되어 있고, 이 RWO에 있어서의 어드레스(reg.)의 값이 값(--01----)으로 갱신된다.
다음에, 제 4행째에 있어서, 어드레스(reg.)로부터 값을 리드하여 주기억으로의 라이트처리가 행해지고, 어드레스(B2)에 값(--01----)이 라이트된다. 이 시점에서, 어드레스(reg.)는 RWO에 등록되어 있으므로, RWO로의 등록은 행해지지 않는다. 또, 어드레스(B2)는 RWO에 등록되어 있지 않으므로, 어드레스(B2) 및 값(--01----)이 RWO에 등록된다.
다음에, 제 5행째에 있어서, 어드레스(A3)의 값(5678----)이 리드되고, 레지스터의 어드레스(reg.)에 저장하는 명령이 행해지고 있다. 이 시점에서, 어드레스(A3)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A3) 및 값(5678----)이 RWI에 등록된다.
또, 이 시점에서, 어드레스(reg.)는 RWO에 등록되어 있고, 이 RWO에 있어서의 어드레스(reg.)의 값이 값(5678----)으로 갱신된다.
마지막으로, 제 6행째에 있어서, 어드레스(reg.)로부터 값을 리드하여 주기억으로의 라이트처리가 행해지고, 어드레스(B3)(5678----)가 라이트된다. 이 시점에서, 어드레스(reg.)는 RWO에 등록되어 있으므로, RWO로의 등록은 행해지지 않는다. 또, 어드레스(B3)는 RWO에 등록되어 있지 않으므로, 어드레스(B3) 및 값(5678----)이 RWO에 등록된다. 이상의 처리에 의해서, 도 12에 도시한 RW(4A)의 입출력 세트가 생성된다.
이상과 같이 해서 생성된 입출력 세트는, 도 13에 도시한 바와 같은 트리구 조로서, 명령구간 기억부(2)에 등록된다. 이 트리구조에 있어서, 등록되어 있는 입력패턴은, 루트 노드로부터 리프에 이르는 1개의 패스로서 명령구간 기억부(2)에 유지된다. 이후, 명령구간을 실행하기 전에, 그 명령구간의 입력패턴이, 등록되어 있는 입력패턴과 동일한지를 판단하기 위해서, 도 3에 도시한 바와 같이, 루트 노드로부터 차례대로, 노드에 기록되어 있는 어드레스를 참조하여, 얻어진 값과 일치하는 노드를 연상검색기구를 이용하여 선택하는 것을 반복하게 된다.
(RW의 제 1구성예의 그 2)
도 16은 제 1구성예의 그 2로서 RW(4A) 메모리 구성의 개략을 나타내는 도이다. 이 도에 도시한 바와 같이, RW(4A)는 명령구간의 PC값을 저장하는 PC, 입력 어드레스 및 입력값을 저장하는 RWI와, 출력 어드레스 및 출력값을 저장하는 RWO 메모리를 갖고 있다. 어떤 명령구간을 실행하였을 때의 입출력 세트는 이 RW(4A) 메모리에 저장되고, 그 후, 명령구간 기억부(2)에 등록된다.
먼저, 어떤 명령구간의 실행이 개시되면, 그 PC값이 RW(4A)에 있어서의 PC에 저장된다. 그 후, 명령구간의 실행이 순차 행해지면 레지스터/메모리로부터의 리드, 및/또는 레지스터/메모리로의 라이트가 순서대로 행해지게 된다.
명령구간 실행시에 레지스터/메모리로부터의 리드가 행해진 경우에는, RW(4A)에 의해서 상술한 (AR1), (AR2), (AR3)의 처리가 행해진다. 또, 명령구간 실행시에 레지스터/메모리의 라이트가 행해진 경우에는, RW(4A)에 의해서 상술한 (AW1), (AW2)의 처리가 행해진다.
이상의 처리가 그 명령구간의 종료시까지 행해짐으로써, 그 명령구간의 입출 력 세트가 RW(4A)에 의해서 생성된다. 생성된 입출력 세트는 상술한 바와 같은 등록처리에 의해서 명령구간 기억부(2)에 등록된다.
여기서, 명령구간의 일예로서, 도 15에 나타낸 명령구간을 실행한 경우의 예에 대해서 설명한다. 이 도에 있어서, PC는 그 명령구간이 개시되었을 때의 PC값을 나타내고 있다. 이 PC값은 RW(4A)의 PC에 저장된다.
제 1행째의 명령(이후, 간단히 제 1명령과 같이 약칭함)에 있어서, 메모리에 있어서의 어드레스(A1)에서 로드된 4바이트 데이터(00110000)가 레지스터에 있어서의 어드레스(R1)에 저장된다. 이 시점에서, 리드가 행해진 어드레스(A1)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A1) 및 데이터(00110000)가 RWI에 등록된다. 또, 라이트가 행해진 어드레스(R1)는 RWO에 등록되어 있지 않으므로, 어드레스(R1) 및 데이터(00110000)가 RWO에 등록된다.
다음에, 제 2명령에 있어서, 메모리에 있어서의 어드레스(A2)에서 로드된 1바이트 데이터(02)가 레지스터에 있어서의 어드레스(R2)에 저장된다. 이 시점에서, 리드가 행해진 어드레스(A2)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A2) 및 데이터(02)가 RWI에 등록된다. 이 때, 어드레스(A2)에 있어서의 나머지 3바이트에 대해서는, Don't Care를 의미하는 「-」가 저장된다. 또, 라이트가 행해진 어드레스(R2)는 RWO에 등록되어 있지 않으므로, 어드레스(R2) 및 데이터(02)가 RWO에 등록된다.
다음에, 제 3명령에 있어서, 메모리에 있어서의 어드레스(A2+R2)에서 로드된 1바이트 데이터(22)가 레지스터에 있어서의 어드레스(R2)에 저장된다. 여기서, 어 드레스(R2)에 저장되어 있는 데이터는 (02)이었으므로, 리드가 행해진 메모리에 있어서의 어드레스는 (A2+02)가 된다. 이 시점에서, 리드가 행해진 어드레스(A2+02)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A2+02) 및 데이터(22)가 RWI에 등록된다. 이 때, 어드레스(A2)에 있어서의 4바이트 중, 어드레스(A2+02)가 되는 바이트의 부분에 데이터(22)가 등록된다. 즉, 제 2명령에 있어서, 어드레스(A2)가 되는 바이트의 부분에 데이터(02)가 등록되어 있으므로, 어드레스(A2+01) 및 어드레스 (A2+03)이 되는 바이트의 부분에 Don't Care를 의미하는 「-」이 저장된 상태 그대로 된다.
또, 라이트가 행해진 어드레스(R2)는 이미 RWO에 등록되어 있으므로, 어드레스(R2)에 대응하는 출력값으로서, 데이터(02)로부터 데이터(22)로 리라이트된다.
다음에, 제 4명령에 있어서, 메모리에 있어서의 어드레스(A3)에서 로드된 1바이트 데이터(33)가 레지스터에 있어서의 어드레스(R3)에 저장된다. 이 시점에서, 리드가 행해진 어드레스(A3)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로로, 어드레스(A1) 및 데이터(33)가 RWI에 등록된다. 또, 라이트가 행해진 어드레스(R3)는 RWO에 등록되어 있지 않으므로, 어드레스(R3) 및 데이터(33)가 RWO에 등록된다.
마지막으로, 제 5명령에 있어서, 메모리에 있어서의 어드레스(R1+R2)에서 로드된 1바이트 데이터(44)가 레지스터에 있어서의 어드레스(R4)에 저장된다. 여기서, 어드레스(R1 및 R2)는 명령구간의 내부에서 덮어쓰기된 레지스터이므로, 명령구간의 입력으로는 되지 않는다. 한편, (R1+R2)에 의해서 생성된 어드레스(A4)는 명령구간의 입력으로 된다. 이 어드레스(A4)는 RWO 및 RWI의 어디에도 등록되어 있 지 않으므로, 어드레스(A4) 및 데이터(44)가 RWI에 등록된다. 또, 라이드가 행해진 어드레스(R4)는 RWO에 등록되어 있지 않으므로, 어드레스(R4) 및 데이터(44)가 RWO에 등록된다. 이상의 처리에 의해서, 도 16에 도시한 RW(4A)의 입출력 세트가 생성된다.
이상과 같이 해서 생성된 입출력 세트는, 도 17에 도시한 바와 같은 트리구조로서 명령구간 기억부(2)에 등록된다. 이 트리구조에 있어서, 등록되어 있는 입력패턴은 로트 노드로부터 리프에 이르는 1개의 패스로서 명령구간 기억부(2)에 유지된다. 이후, 명령구간을 실행하기 전에, 그 명령구간의 입력패턴이, 등록되어 있는 입력패턴과 같은지를 판단하기 위해서, 도 3에 도시한 바와 같이, 루트 노드로부터 순서대로, 노드에 기록되어 있는 어드레스를 참조해서, 얻어진 값과 일치하는 노드를 연상검색기구를 이용해서 선택하는 것을 반복하게 된다.
(트리구조 연상검색의 문제)
상기 트리구조의 경우, 입력패턴을 하나씩 순서대로 리드해서 연상검색을 행해, 일치하는 노드가 발견된 후에, 다음 노드의 선택을 행하게 된다. 즉, 선행하는 노드의 검색이 완전히 종료하고 나서 다음 노드의 검색이 개시된다.
여기서, CAM/RAM으로 구성되는 연상검색장치는 일반적으로, 긴 레이턴시 높은 쓰루풋의 특성을 갖고 있다. 즉, 일반적인 연상검색장치는 하나의 검색입력이 행해지고 나서 출력될 때까지의 기간이 비교적 긴 것이지만, 복수의 검색 입력을 동시에 처리해서 출력하는 것이 가능하다고 하는 특성을 갖고 있다. 이것에 비해서, 상기와 같이, 선행하는 노드의 검색이 완전히 종료되고 나서 다음 노드의 검색 이 개시된다고 하는 바와 같은 검색이 행해지는 경우, 연상검색장치에 있어서의 높은 쓰루풋의 능력을 이용할 수 없게 되어, 연속검색장치의 능력을 충분히 발휘할 수 없게 된다(문제 1).
또, 상기 트리구조의 경우, 명령구간의 입력패턴이 참조 순서대로 1개의 패스로서 실현되어 있으며, 입력패턴 전체가 일치해야만 출력을 재이용할 수 있게 된다. 여기서, 다음과 같은 예를 상정한다. 먼저, 어떤 명령구간을 실행하였을 때의 입력패턴 중, 전반이 패턴 A1, 후반이 패턴 A2로 되어 있고, 패턴 A1에 대응하는 출력이 X1, 패턴 A2에 대응하는 출력이 X2로 되어 있었던 것으로 한다. 또, 다른 명령구간을 실행하였을 때의 입력패턴 중, 전반이 패턴 B1, 후반이 패턴 B2로 되어 있고, 패턴 B1에 대응하는 출력이 Y1, 패턴 B2에 대응하는 출력이 Y2로 되어 있었던 것으로 한다. 그 후, 어떤 명령구간을 실행하고자 했을 때의 입력패턴 중, 전반이 패턴 A1, 후반이 패턴 B2로 되어 있었던 경우, 입력패턴의 전반 및 후반의 각각에 대해서는 재이용이 가능한 것이지만, 입력패턴 전체로서는 과거에 동일 패턴이 출현하고 있지 않으므로, 실제로는 재이용할 수 없게 된다(문제 2).
가령, 도 16에 도시한 예에서는, 입력세트에 있어서의 어드레스(A1 및 A2)에 의한 입력패턴과, 어드레스(A3)에 의한 입력패턴은 상호 의존관계가 없고, 서로 독립되어 있다. 즉, 어드레스(A1 및 A2)에 의한 입력패턴을 포함하지만, 어드레스(A3)에 의한 입력패턴을 포함하지 않는 명령구간이나, 어드레스(A3)에 의한 입력패턴을 포함하지만, 어드레스(A1 및 A2)에 의한 입력패턴을 포함하지 않는 명령구간에 관해서는, 도 16에 도시한 입력패턴의 트리구조가 존재한다 해도, 재이용할 수 없게 된다.
(RW의 제 2구성예)
상기 2개의 문제는 어떤 호출시점에 있어서의 명령구간의 입력패턴을 루트 노드로부터 리프에 이르는 1개의 패스에 의해 표현함으로써 생긴 것이다. 이들 문제를 해결하기 위해서는, 입력패턴을 그룹 분할하고, 각 그룹마다 과거의 입력패턴을 유지하는 트리구조를 구성하고, 추가로 복수 트리구조의 동시 탐색을 가능하게 함으로써, 연상검색장치를 유효하게 이용할 수 있도록 하는 것이 필요하다. 가령, 도 13에 도시한 바와 같은 트리구조를 도 14에 도시한 바와 같은 복수의 트리구조로 분할하여, 루트 노드로부터 리프에 이르는 패스에 대응하는 입력 그룹마다 독립적으로 재이용이 행해지도록 하면 된다.
또, 가령, 도 16에 도시한 입출력 세트에 대해서, 도 18에 도시한 바와 같이, 서로 독립된 입력세트 및 출력세트 각각에 그룹번호를 부여한다. 즉, 어드레스(A1)에 의한 입력패턴, 어드레스(A2)에 의한 입력패턴, 및 어드레스(A4)에 의한 입력패턴에 그룹번호(grpid)(0)를 부여하고, 어드레스(A3)에 의한 입력패턴에 그룹번호(grpid)(2)를 부여한다. 또, 어드레스(R1)에 의한 출력패턴, 어드레스(R2)에 의한 출력패턴, 및 어드레스(R4)에 의한 출력패턴에 그룹번호(grpid)(0)를 부여하고, 어드레스(R3)에 의한 출력패턴에 그룹번호(grpid)(2)를 부여한다.
다음에, 그룹번호에 의거해서, 도 17에 도시한 트리구조를 도 19에 도시한 바와 같은 복수의 트리구조로 분할한다. 이와 같이 하면, 그룹이 다른 입력패턴을 독립적으로 등록하는 것이 가능하게 되고, 루트 노드로부터 리프에 이르는 패스에 대응하는 입력 그룹마다 독립적으로 재이용하는 것이 가능하게 됨과 동시에, 병렬로 검색을 행하는 것이 가능하게 된다.
상기와 같이, 트리구조의 분할을 표현하기 위해서는, 각 입력그룹들 사이에서 데이터 의존관계가 없는 것이 필요하다. 즉, 어떤 입력패턴을 그룹A와 그룹B로 분할한 경우에 있어서, 그룹A의 입력이 그룹B의 입력에 의존하는 경우, 또는 그룹B의 입력이 그룹A의 입력에 의존하는 경우에는, 그룹 분할한다해도 각 그룹을 독립적으로 재이용할 수 있는 가능성은 매우 낮아진다.
데이터 의존관계가 없는 그룹으로 분할하려면, 입력패턴을 생성할 때에, 데이터 의존관계의 해석을 행할 필요가 있다. 즉, RW(4A)가 데이터 의존관계의 해석을 행한 다음에, 입력패턴을 데이터 의존관계가 없는 그룹으로 분할하여 입출력 세트를 생성하도록 하면 바람직하게 된다.
도 10은 상기를 실현하는 제 2구성예로서의 RW(4A)의 개략 구성을 나타내고 있다. 이 도에 도시한 바와 같이, RW(4A)는 명령구간의 PC값을 저장하는 PC, 입력 어드레스 및 입력값을 저장하는 RWI, 출력 어드레스 및 출력값을 저장하는 RWO, 의존관계 저장부(M), 행간 논리곱 비교부(입출력 그룹 설정수단)(MR), 및 그룹 ID 저장부(ID)를 갖고 있다.
의존관계 저장부(M)는 2차원 배열의 메모리로, 각 메모리 요소에는 0 또는 1이 기억되도록 되어 있다. 또, 의존관계 저장부(M)에 있어서, 각 열은 RWI에 등록되어 있는 각 입력 어드레스 및 입력값에 대응하고 있고, 각 행은 RWO에 등록되어 있는 각 출력 어드레스 및 출력값에 대응하고 있다. 그리고, 의존관계 저장부(M)는 각 출력 어드레스 및 출력값이 어느 입력 어드레스 및 입력값을 기원으로 하는 것인지를 나타내고 있다.
행간 논리곱 비교부(MR)는 의존관계 저장부(M)에 저장되어 있는 각 행성분 간의 논리곱 연산을 행하고, 1이상의 출력 어드레스 및 출력값을 포함하는 출력패턴과, 1이상의 입력 어드레스 및 입력값을 포함하는 입력패턴으로 이루어지는 입출력 그룹을 설정하는 연산부이다. 이 행간 논리곱 비교부(MR)에 의한 논리곱 연산의 상세에 대해서는 후술한다.
그룹ID 저장부(ID)는 행간 논리곱 비교부(MR)에 의한 논리곱 연산결과에 의거해서, 의존관계 저장부(M)에 있어서의 각 열에 대응하는 입력 어드레스 및 입력값에 대해서 부여되는 그룹ID를 저장하는 메모리이다. 이 그룹ID의 상세에 대해서는 후술한다.
어떤 명령구간의 실행이 개시되면, 먼저 의존관계 저장부(M)에 있어서의 각 메모리 요소의 초기화로서, 모두 0으로 설정된다. 그리고, 그 명령구간의 PC값이 RW(4A)에 있어서의 PC에 저장된다. 그 후, 명령구간의 실행이 순차 행해지면, 레지스터/메모리로부터의 리드 및/또는 레지스터/메모리로의 라이트가 순서대로 행해지게 된다.
명령구간 실행시에 레지스터/메모리로부터의 리드가 행해진 경우에는 RW(4A)에 의해서 다음의 처리가 행해진다.
(BR1) 리드가 행해진 레지스터/메모리의 어드레스가 RWO에 등록되어 있는지 아닌지가 검색된다. RWO에 등록되어 있는 경우에는, 이미 출력값으로서 입출력 세 트에 등록되어 있는 값의 리드가 행해진 것이므로, 입력값으로서 등록할 필요는 없게 된다. 즉, 그 어드레스를 RWI에 등록하지 않고 종료한다.
이 때, RWO에 있어서 이미 등록되어 있는 어드레스에 대응하는 의존관계 저장부(M)의 행성분의 각 메모리 요소 값이 취출되어, 행성분만의 1차원 행렬로서의 잠정행렬A(x)로서 기억된다. 여기서, x는 잠정행렬A가 생성된 순서대로 붙여진 번호로 한다. 이 잠정행렬A(x)는, 후술하는 라이트 처리가 종료된 시점에서 초기화된다. 또, 이 잠정행렬A(x)는, 도 10에는 도시하지 않았으나, 잠정행렬A(x)를 복수 저장할 수 있는 잠정행렬 저장 메모리에 저장하게 된다.
(BR2) 리드가 행해진 레지스터/메모리의 어드레스가 RWO에 등록되어 있지 않은 경우에는, 그 어드레스가 RWI에 등록되어 있는지 아닌지가 검색된다. RWI에 등록되어 있는 경우에는, 이미 입력값으로서 입출력 세트에 등록되어 있는 값의 리드가 행해진 것이 되므로, 추가로 입력값으로서 등록할 필요는 없게 된다. 즉, 그 어드레스를 RWI에 등록하지 않고 종료한다.
이 때, RWI에 있어서 이미 등록되어 있는 어드레스에 대응하는 의존관계 저장부(M)의 열에 대응하는 메노리 요소를 1로 하고, 그 밖의 메모리 요소를 0으로 한 잠정행렬A(x)가 기억된다.
(BR3) 리드가 행해진 레지스터/메모리의 어드레스가 RWO 및 RWI의 어디에도 등록되어 있지 않은 경우에는, 그 어드레스 및 값을 입력 어드레스 및 입력값으로서 RWI에 등록한다.
이 때, 새로 추가한 입력 어드레스 및 입력값(엔트리)에 대응하는 의존관계 저장부(M)의 열에 대응하는 메모리 요소를 1로 하고, 그 밖의 메모리 요소를 0으로 한 잠정행렬A(x)가 기억된다.
또, 명령구간 실행시에 레지스터/메모리로의 라이트가 행해진 경우에는 RW(4A)에 의해서 다음의 처리가 행해진다.
(BW1) 라이트가 행해진 레지스터/메모리의 어드레스가 RWO에 등록되어 있는지 아닌지가 검색된다. RWO에 등록되어 있는 경우에는, 이미 출력값으로서 입출력 세트에 등록되어 있는 값의 리라이트가 행해진 것이 되므로, 등록되어 있는 출력 어드레스에 대응하는 출력값을, 라이트가 행해진 값으로 갱신하고, 종료한다.
이 때, RWO에 있어서 이미 등록되어 있는 어드레스에 대응하는 의존관계 저장부(M)의 행성분이 그 시섬에서 기억되어 있는 모든 잠정행렬A(x)의 논리합으로 치환된다. 이것에 의해, RWO에 있어서 이미 등록되어 있는 출력 어드레스/값에 대한 출력의 기원이 되는 입력 어드레스/값의 패턴이, 그 출력 어드레스에 대응하는 의존관계 저장부(M)의 행성분에 의해서 표시되게 된다. 라이트 처리가 종료되고, 잠정행렬A(x)의 논리합으로의 치환이 완료되면, 잠정행렬A(x)가 모두 초기화된다.
(BW2) 라이트가 행해진 레지스터/메모리의 어드레스가 RWO에 등록되어 있지 않은 경우에는, 그 어드레스 및 값을 출력 어드레스 및 출력값으로서 RW0에 등록한다.
이 때, 새로 추가한 출력 어드레스 및 출력값(엔트리)에 대응하는 의존관계 저장부(M)의 행성분이, 그 시점에서 기억되어 있는 모든 잠정행렬A(x)의 논리합으로 치환된다. 이것에 의해, RWO에 새로 등록한 출력 어드레스/값에 대한 출력의 기 원으로 하는 입력 어드레스/값의 패턴이, 그 출력 어드레스에 대응하는 의존관계 저장부(M)의 행성분에 의해서 표시되게 된다. 라이트 처리가 종료되고, 잠정행렬A(x)의 논리합으로의 치환이 완료되면, 잠정행렬A(x)가 모두 초기화된다.
여기서, 명령구간의 일예로서, 도 11에 도시한 명령구간을 실행한 경우의 예에 대해서 설명한다. 이 도에 있어서, PC는 그 명령구간이 개시되었을 때의 PC값을 나타내고 있다. 이 PC값이 RW(4A)의 PC에 저장된다.
그 후, 제 1행째에 있어서, 레지스터에 있어서의 어드레스(R1)에 저장되어 있는 (00001000)이라고 하는 값이 리드 인됨과 동시에, 이 리드 인된 값에 100을 더하는 연산이 행해진 결과의 주기억 어드레스(어드레스(A1)에 상당)의 값을 리드하는 명령이 행해지고 있다. 이 시점에서, 어드레스(R1)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(R1) 및 값(00001000)이 RWI에 등록된다.
이 때, 어드레스(R1)에 대응하는 의존관계 저장부(M)의 열에 대응하는 메모리 요소를 1로 하고, 그 밖의 메모리 요소를 0으로 한 잠정행렬A(1)「1000」이 기억된다.
또, 어드레스(A1)의 값(----FF--)가 리드되고, 레지스터의 어드레스(reg.)에 저장하는 명령이 행해지고 있다. 이 시점에서, 어드레스(A1)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A1) 및 값(----FF--)이 RWI에 등록된다.
이 때, 어드레스(A1)에 대응하는 의존관계 저장부(M)에 대응하는 메모리 요소를 1로 하고, 그 밖의 메모리 요소를 0으로 한 잠정행렬A(2)「0100」이 기억된다.
또, 이 시점에서, 어드레스(reg.)는 RWO에 등록되어 있지 않으므로, 어드레스(reg.) 및 값(----FF--)이 RWO에 등록된다. 이 때, 새로 추가한 어드레스(reg.)에 대응하는 의존관계 저장부(M)의 행성분이, 그 시점에서 기억되어 있는 모든 잠정행렬A(1)∼A(2)의 논리합「1100」으로 치환된다. 그 후, 잠잠정행렬A(x)가 초기화된다.
다음에, 제 2행째에 있어서, 어드레스(reg.)로부터 값을 리드해서 주기억으로의 라이트 처리가 행해지고, 어드레스(B1)에 값(----FF--)이 라이트된다. 이 시점에서, 어드레스(reg.)는 RWO에 등록되어 있으므로, RWO로의 등록은 행해지지 않는다. 이 때, 어드레스(reg.)에 대응하는 의존관계 저장부(M)의 행성분이 취출되어, 잠정행렬A(1)「1100」이 기억된다.
또, 어드레스(B1)은 RWO에 등록되어 있지 않으므로, 어드레스(B1) 및 값(----FF--)이 RWO에 등록된다.
이 때, 새로 추가한 출력 어드레스에 대응하는 의존관계 저장부(M)의 행성분이, 그 시점에서 기억되어 있는 모든 잠정행렬A(1)의 논리합「1100」으로 치환된다. 그 후, 잠정행렬A(x)가 초기화된다.
다음에, 제 3행째에 있어서, 레지스터에 있어서의 어드레스(R1)에 저장되어 있는 (00001000)이라고 하는 값이 라이트됨과 동시에, 이 라이트된 값에 200을 더한 연산이 행해진 결과의 주기억 어드레스(어드레스(A2)에 상당)의 값을 리드하는 명령이 행해지고 있다. 이 시점에서, 어드레스(R1)는 RWI에 이미 등록되어 있으므로, RWI로의 등록은 행해지지 않는다.
이 때, 어드레스(R1)에 대응하는 의존관계 저장부(M)의 열에 대응하는 메모리 요소를 1로 하고, 그 밖의 메모리 요소를 0으로 한 잠정행렬A(1)「1000」이 기억된다.
또, 어드레스(A2)의 값(--01----)이 리드되고, 레지스터의 어드레스(reg.)에 저장하는 명령이 행해지고 있다. 이 시점에서, 어드레스(A2)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A2) 및 값(--01----)이 RWI에 등록된다.
이 때, 어드레스(A2)에 대응하는 의존관계 저장부(M)의 열에 대응하는 메모리 요소를 1로 하고, 그 밖의 메모리 요소를 0으로 한 잠정행렬A(2)「0010」이 기억된다.
또, 이 시점에서, 어드레스(reg.)는 RWO에 등록되어 있고, 이 RWO에 있어서의 어드레스(reg.)의 값이 값(--01----)으로 갱신된다. 이 때, 갱신된 어드레스(reg.)에 대응하는 의존관계 저장부(M)의 행성분이, 그 시점에서 기억되어 있는 모든 잠정행렬A(1)∼A(2)의 논리합「1010」으로 치환된다. 그 후, 잠정행렬A(x)가 초기화된다.
다음에, 제 4행째에 있어서, 어드레스(reg.)로부터 값을 리드하여 주기억으로의 라이트 처리가 행해지고, 어드레스(B2)에 값(--01----)이 라이트된다. 이 시점에서, 어드레스(reg.)는 RWO에 등록되어 있으므로, RWO로의 등록은 행하지 않는다. 이 때, 어드레스(reg.)에 대응하는 의존관계 저장부(M)의 행성분이 취출되고, 잠정행렬A(1)「1010」이 기억된다.
또, 어드레스(B2)는 RWO에 등록되어 있지 않으므로, 어드레스(B2) 및 값(-- 01----)이 RWO에 등록된다.
이 때, 새로 추가한 출력 어드레스에 대응하는 의존관계 저장부(M)의 행성분이, 그 시점에서 기억되어 있는 모든 잠정행렬A(1)의 논리합「1010」으로 치환된다. 그 후, 잠정행렬A(x)이 초기화된다.
다음에, 제 5행째에 있어서, 어드레스(A3)의 값(5678----)이 리드되어, 레지스터의 어드레스(reg.)에 저장하는 명령이 행해지고 있다. 이 시점에서, 어드레스(A3)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A3) 및 값(5678----)이 RWI에 등록된다.
이 때, 어드레스(A3)에 대응하는 의존관계 저장부(M)의 열에 대응하는 메모리 요소를 1로 하고, 그 밖의 메모리 요소를 0으로 한 잠정행렬A(1)「0001」이 기억된다.
또, 이 시점에서, 어드레스(reg.)는 RWO에 등록되어 있고, 이 RWO에 있어서의 어드레스(reg.)의 값이 값(5678----)로 갱신된다. 이 때, 갱신된 어드레스(reg.)에 대응하는 의존관계 저장부(M)의 행성분이, 그 시점에서 기억되어 있는 모든 잠정행렬A(1)의 논리합「0001」로 치환된다. 그 후, 잠정행렬A(x)가 초기화된다.
마지막으로, 제 6행째에 있어서, 어드레스(reg.)로부터 값을 리드하여 주기억으로의 라이트 처리가 행해지고, 어드레스(B3)에 값(5678----)이 라이트된다. 이 시점에서, 어드레스(reg.)는 RWO에 등록되어 있으므로, RWO로의 등록은 행해지지 않는다. 이 때, 어드레스(reg.)에 대응하는 의존관계 저장부(M)의 행성분이 취출되 어, 잠정행렬A(1)「0001」이 기억된다.
또, 어드레스(B3)는 RWO에 등록되어 있지 않으므로, 어드레스(B3) 및 값(5678----)이 RWO에 등록된다.
이 때, 새로 추가한 출력 어드레스에 대응하는 의존관계 저장부(M)의 행성분이, 그 시점에서 기억되어 있는 모든 잠정행렬A(1)의 논리합「0001」으로 치환된다. 그 후, 잠정행렬A(x)가 초기화된다. 이상의 처리에 의해서, 도 10에 나타낸 RW(4A)의 입출력 세트가 생성된다.
이상과 같이 의존관계 저장부(M)을 생성함으로써, 명령구간의 실행 완료시에는, 다음의 정보가 얻어지게 된다.
(Rs1) 의존관계 저장부(M)의 행성분은 대응하는 출력 어드레스/값의 기원이 되는 입력 어드레스/값을 1로써 나타내고 있다.
(Rs2) 어떤 행성분(Ma)에 있어서, 1이 나타내고 있는 입력 어드레스/값의 쌍이 하나의 입력 그룹을 형성하고, 그 입력 그룹이 일치한 경우에 재이용 가능한 출력 어드레스/값은, 행성분(Ma)에 대응하는 출력 어드레스/값이다.
(Rs3) 「어떤 행성분(Ma)의 반전」과 「어떤 행성분(Mb)」의 논리곱이 모두 0인 경우, Ma에 있어서의 1의 패턴은, Mb에 있어서의 1의 패턴을 포함한다. 즉, Ma에 속하는 입력 어드레스/값의 쌍이 하나의 입력 그룹을 형성함과 동시에, 그 입력 그룹이 일치한 경우에 재이용 가능한 출력 어드레스/값은, Ma에 대응하는 출력 어드레스/값, 및 Mb에 대응하는 출력 어드레스/값이 된다.
(Rs4) 「어떤 행성분(Ma)」과 「어떤 행성분(Mb)」의 논리곱이 모두 0인 경 우, Ma에 속하는 입력 어드레스/값과, Mb에 속하는 입력 어드레스/값은 서로 독립되어 있다.
이상의 정보에 의거해서, RW(4A)는 입출력 세트를 복수의 입출력 그룹으로 분할한다. 먼저, 상기 (Rs3)에 관련되는 처리로서, 의존관계 저장부(M)에 있어서, 「어떤 행성분(Ma)의 반전」과 「어떤 행성분(Mb)」의 논리곱이 모두 0이 되는 행성분의 쌍이 행간 논리곱 비교부(MR)에 의해서 추출된다. 추출된 행성분의 쌍 중, 입력 어드레스/값의 쌍을 가장 많이 포함하는 행성분, 즉 다른 행성분에 있어서의 입력 어드레스/값의 쌍을 모두 포함한 행성분이 상위 행성분으로서 선택된다. 그리고, 추출된 행성분 중, 상위 행성분 이외의 하위 행성분이 삭제된다. 이 처리에 의해서, 길이가 긴 입출력 그룹을 배제할 수 있다.
다음에, 하위성분이 삭제된 상태에 있어서, 상기 (Rs4)에 관련되는 처리로서, 「어떤 행성분(Ma)」과 「어떤 행성분(Mb)」의 논리곱이 모두 0이 되는 행성분의 쌍이 행간 논리곱 비교부(MR)에 의해서 추출된다. 그리고, 추출된 행성분의 쌍 중, 다른 어느 행성분에 대해서도 논리곱이 모두 0이 되는 행성분이 추가로 추출된다. 여기서 추출된 행성분은 다른 어느 행성분에 대해서도 의존관계를 갖지 않게 되므로, 이것을 독립 행성분으로 설정하고, 그 이외의 것을 비독립 행성분으로 설정한다.
독립 행성분은 각각 대응하는 어드레스/값의 쌍 및 출력 어드레스/값이 쌍이 추출되고, 하나의 입출력 그룹으로 설정된다. 한편, 비독립 행성분은 다음 2개의 처리중 어느 하나에 의해서 입출력 그룹으로서 설정된다.
제 1처리로서는, 비독립 성분의 모두에 포함되는 입력 어드레스/값의 쌍 및 출력 어드레스/값의 쌍의 총합을 하나의 입출력 그룹으로 설정하는 처리이다. 제 2처리로서는 비독립 행성분의 각각을 그대로 입출력 그룹으로서 설정하는 처리이다. 제 1처리를 행할 경우, 입출력 그룹의 수를 필요 이상으로 증대시키는 일이 없으므로, 명령구간 기억부(2)에 있어서의 메모리 사용용량을 저감할 수 있다. 한편, 제 2처리를 행할 경우, 입출력 그룹의 수가 비교적 많아지고, 명령구간 기억부(2)에 있어서의 메모리 사용용량이 비교적 커진다고 하는 문제는 있으나, 명령구간 기억부(2)에 있어서, 동시에 검색해야 할 트리구조의 수를 늘릴 수 있으므로, 연상검색장치에 있어서의 높은 쓰루풋의 능력을 이용하는 것이 가능하게 된다.
이상과 같이 해서, 입출력 그룹이 설정되면, 이것에 의거해서 행간 논리곱 비교부(MR)가, 각 입출력 그룹에 그룹 ID를 부여하고, RWI에 등록되어 있는 입력 어드레스/값의 각각에 대해서, 어느 그룹 ID에 포함되어 있는 것인지를 나타내는 정보를 그룹 ID 저장부(ID)에 저장한다. 이것에 의해, 그룹 ID 저장부(ID)의 내용을 봄으로써, 각 입출력 그룹에 있어서의 입력패턴을 특정하는 것이 가능하게 된다.
이상과 같이, RW(4A)는 하나 이상의 입출력 그룹을 생성하고, 생성된 입출력 그룹을 명령구간 기억부(2)에 대해서 실행결과로서 등록한다. 이와 같은 처리에 의해, 하나의 명령구간의 실행결과가, 하나 이상의 입출력 그룹으로서 명령구간 기억부(2)에 등록된다. 따라서, 어떤 명령구간을 재이용에 의해서 실행할 때에, 이전에 실행된 명령구간의 입력패턴이 일부밖에 일치하지 않는 경우에도, 재이용을 행하는 것이 가능하게 될 확률을 높일 수 있다. 또, 동시에 검색해야 할 트리구조가 복수 존재하는 확률을 높일 수 있으므로, 연상검색장치에 있어서의 높은 쓰루풋의 능력을 이용하는 것이 가능하게 되어, 처리속도의 향상을 기대할 수 있다.
또, 본 실시예에 있어서는, RW(4A)에 의해서 생성된 입출력 그룹은, 입력패턴을 트리구조로서 등록하는 명령구간 기억부(2)에 등록하도록 되어 있으나, 이것으로 한정되는 것은 아니다. 즉, RW(4A)에 의해서 생성된 입출력 그룹을 명령구간의 실행결과를 재이용하는 것이 가능한 형태로 등록하는 것이 가능한 명령구간 기억부라면, 본 실시예에 관계되는 RW(4A)를 적용하는 것이 가능하다.
(RW의 제 3구성예)
상기 RW의 제 2구성예에 의하면, 의존관계 저장부(M)를 이용하여 행간 논리곱 비교부(MR)가 연산을 행함으로써, 하나의 명령구간의 실행결과를 하나 이상의 입출력 그룹으로서 명령구간 기억부(2)에 등록하는 것이 가능하게 된다. 그러나, 명령구간의 실행결과에 있어서, 출력 어드레스 및 출력값의 패턴 수가 많아지면, 의존관계 저장부(M)의 행수가 많아지게 된다. 이 경우, 행간 논리곱 비교부(MR)에 의한 논리곱 연산이 증대되어, 행간 논리곱 비교부(MR)의 회로규격이 막대해진다고 하는 문제가 있다. 이하에 나타내는 RW의 제 3구성예는 이 문제를 해결하는 것으로 되어 있다.
도 20은 제 3구성예로서의 RW(4A)의 개략 구성을 나타내고 있다. 이 도에 도시한 바와 같이, RW(4A)는 명령구간의 명령구간의 PC값을 저장하는 PC, 입력 어드레스 및 입력값을 저장하는 RWI, 출력 어드레스 및 출력값을 저장하는 RWO, 의존관 계 저장부(M), 행 일시저장부(일시저장부)(tmp00), 입력측 번호저장부(입력측 그룹 저장부)(rgpid), 출력측 번호저장부(출력측 그룹 저장부)(wgpid), 번호관리부(그룹 관리부)(busy), 및 번호 일시저장부(그룹 일시저장부)(tmp01)를 갖고 있다.
의존관계 저장부(M)는 입력측을 열 지정자[I], 출력측을 행 지정자[O]로 하는 2차원 배열의 메모리로, 각 메모리 요소에 0 또는 1이 기억되도록 되어 있다. 또, 의존관계 저장부(M)에 있어서, 각 열은 RWI에 등록되어 있는 입력 어드레스 및 입력값 쌍의 각각에 대응하고 있고, 각 행은 RWO에 등록되어 있는 출력 어드레스 및 출력값 쌍의 각각에 대응하고 있다. 그리고, 의존관계 저장부(M)는 각 출력 어드레스 및 출력값 쌍이 어느 입력 어드레스 및 입력값 쌍을 기원으로 하는 것인지를 나타내고 있다.
행 일시저장부(tmp00)는 의존관계 저장부(M)에서 리드된 행을 일시적으로 보존하는 메모리이다. 입력측 번호저장부(rgpid)는 입력 어드레스 및 입력측 쌍의 각각에 대해서 부여하는 그룹번호를 저장하는 메모리이다. 출력측 번호저장부(wgpid)는 출력 어드레스 및 출력값 쌍의 각각에 대해서 부여하는 그룹번호를 저장하는 메모리이다. 명령구간의 실행 완료시에는 (1) 각 입력 데이터가 소속되는 그룹번호는, 대응하는 입력측 번호저장부(rgpid)에 1로 표시되어 있는 비트 위치에 의해서 얻어지고, (2) 각 출력 데이터가 소속되는 그룹번호는, 대응하는 출력측 번호저장부(wgpid)에 1로 표시되어 있는 비트위치에 의해서 얻어지게 된다.
번호관리부(busy)는 그룹번호의 공백 상황을 관리하는 메모리이다. 번호 일시저장부(tmp01)는 입력측 번호저장부(rgpid) 및 출력측 번호저장부(wgpid)에서 리 드한 그룹번호 정보를 일시적으로 저장하는 메모리이다.
명령구간의 실행개시 직전에는 의존관계 저장부(M), 행 일시저장부(tmp00), 입력측 번호저장부(rgpid), 출력측 번호저장부(wgpid), 번호관리부(busy), 및 번호 일시저장부(tmp01)가 모두 0으로 초기화된다. 그리고, 그 명령구간의 PC값이 RW(4A)에 있어서의 PC에 저장된다. 그 후, 명령구간의 실행이 순차 행해지면, 레지스터/메모리로부터의 리드, 및/또는 레지스터/메모리로의 라이트가 순서대로 행해지게 된다.
명령구간 실행시에 레지스터/메모리로부터의 리드가 행해진 경우에는, RW(4A)에 의해서 다음의 처리가 행해진다.
(CR1) 리드가 행해진 레지스터/메모리의 어드레스가 RWO에 등록되어 있는지 아닌지가 검색된다. RWO에 등록되어 있는 경우에는, 이미 출력값으로서 입출력 세트에 등록되어 있는 값의 리드가 행해진 것이므로, 입력값으로서 등록할 필요는 없게 된다. 즉, 그 어드레스를 RWI에 등록하지 않고 종료한다.
이 때, RWO에 있어서 이미 등록되어 있는 어드레스에 대응하는 의존관계 저장부(M)의 행성분의 각 메모리 요소 값이 취출되어, 행 일시저장부(tmp00)에 저장되어 있는 각 요소와의 논리합이 연산된다. 이 연산결과로서의 논리합이, 행 일시저장부(tmp00)에 저장된다. 즉, 리드가 행해진 데이터의 기원을 나타내는 행 일시저장부(tpm00)에 입력정보가 저장된다.
또, RWO에 있어서 이미 등록되어 있는 어드레스에 대응하는 출력측 번호저장부(wgpid)의 행성분의 각 요소 값이 취출되어, 번호 일시저장부(tmp01)에 저장되어 있는 각 요소와의 논리합이 연산된다. 이 연산결과로서의 논리합이, 번호 일시저장부(tmp01)에 저장된다. 즉, 리드가 행해진 데이터의 기원을 나타내는 번호 일시저장부(tmp01)에 입력정보가 저장된다.
(CR2) 리드가 행해진 레지스터/메모리의 어드레스가 RWO에 등록되어 있지 않은 경우에는, 그 어드레스가 RWI에 등록되어 있는지 아닌지가 검색된다. RWI에 등록되어 있는 경우에는, 이미 입력값으로서 입출력 세트에 등록되어 있는 값의 리드가 행해진 것이 되므로, 추가로 입력값으로서 등록할 필요는 없게 된다. 즉, 이 어드레스를 RWI에 등록하지 않고 종료한다.
이 때, 행 일시저장부(tmp00)에 있어서의, 입력측 기등록 위치[I]에 대응하는 메모리 요소의 비트를 1로 한다. 즉, 리드가 행해진 데이터의 기원을 나타내는 행 일시저장부(tmp00)가 신규로 작성된다.
또, 행 일시저장부(tmp00)에 있어서 비트가 1로 세트된 메모리 요소의 열위치에 대응하는 입력측 번호저장부(rgpid)가 리드되어, 번호 일시저장부(tmp01)에 저장되어 있는 요소와의 논리합이 연산된다. 이 연산결과로서의 논리합이 번호 일시저장부(tmp01)에 저장된다. 즉, 리드가 행해진 데이터의 소속 그룹을 나타내는 번호 일시저장부(tmp01)에 입력정보가 저장된다.
(CR3) 리드가 행해진 레지스터/메모리의 어드레스가 RWO 및 RWI의 어디에도 등록되어 있지 않은 경우에는, 그 어드레스 및 값을 입력 어드레스 및 입력값으로서 RWI에 등록한다.
이 때, 행 일시저장부(tmp00)에 있어서의, 새로 등록된 위치[I]에 대응하는 메모리 요소의 비트를 1로 한다. 즉, 리드가 행해진 데이터의 기원을 나타내는 행 일시저장부(tmp00)가 신규로 작성된다.
또, 명령구간 실행시에 레지스터/메모리로의 라이트가 행해진 경우에는 RW(4A)에 의해서 다음의 처리가 행해진다.
또, 행 일시저장부(tmp00)에 있어서 비트가 1로 세트된 메모리 요소의 열위치에 대응하는 입력측 번호저장부(rgpid)가 리드되어, 번호 일시저장부(tmp01)에 저장되어 있는 요소와의 논리합이 연산된다. 이 연산결과로서의 논리합이 번호 일시저장부(tmp01)에 저장된다. 즉, 리드가 행해진 데이터의 소속 그룹을 나타내는 번호 일시저장부(tmp01)에 입력정보가 저장된다.
(CW1) 리드가 행해진 레지스터/메모리의 어드레스가 RWO에 등록되어 있는지 아닌지가 검색된다. RWO에 등록되어 있는 경우에는, 이미 출력값으로서 입출력 세트에 등록되어 있는 값의 리라이트가 행해진 것이 되므로, 등록되어 있는 출력 어드레스에 대응하는 출력값을 라이트가 행해진 값으로 갱신하고 종료한다.
이 때, RWO에 있어서 이미 등록되어 있는 어드레스에 대응하는 의존관계 저장부(M)의 행성분의 각 메모리 요소 값이, 그 명령구간의 실행시에 생성된 행 일시저장부(tmp00)에 저장되어 있는 각 요소 값에 리라이트된다. 즉, 라이트가 행해진 데이터의 기원이 행 일시저장부(tmp00)의 값으로 치환된다.
여기서, 번호 일시저장부(tmp01)의 각 요소 값이 체크된다. 그리고, 번호 일시저장부(tmp01)의 모든 요소가 0인 경우에는 번호관리부(busy)에 있어서 빈 그룹번호로 되어 있는 열위치의 하나에 대응하는 번호 일시저장부(tmp01)에 있어서의 열위치가 1로 설정된다. 구체적으로는 번호관리부(busy)에 있어서의 각 요소 중, 가장 좌측의 0에 해당하는 열위치에 대응하는 번호 일시저장부(tmp01)에 있어서의 열위치가 1로 설정된다. 이 때에, 번호 일시저장부(tmp01)에 있어서, 1로 설정된 열위치에 대응하는 번호관리부(busy)에 있어서의 열위치가 1로 설정된다.
한편, 번호 일시저장부(tmp01)의 요소에 1이 있는 경우에는, 가장 좌측의 1에 대응하는 열위치가 사용해야 할 그룹번호로 인식된다. 그리고, 번호 일시저장부(tmp01)의 모든 요소 중, 가장 좌측의 위치에 있는 1을 남기고, 나머지 요소를 0으로 한 값이, 출력측 번호저장부(wgpid)에 있어서의 기등록 위치[O], 및 행 일시저장부(tmp00)의 해당위치가 1인 입력측 번호저장부(rgpid)의 해당위치에 각각 라이트된다.
또한, 번호 일시저장부(tmp01)의 모든 요소 중, 가장 좌측의 위치에 있는 1을 제외한 나머지 값과, 입력측 번호저장부(rgpid) 전체 및 출력측 번호저장부(wgpid) 전체를 각각 비교하여, 각 요소의 논리곱이 구해진다. 그리고, 논리곱 결과, 1이 되는 요소를 유지하는 입력측 번호저장부(rgpid) 및 출력측 번호저장부(wgpid)의 열위치에 대해서는, 해당요소를 0으로 세트함으로써, 번호 일시저장부(tmp01)전체 중, 가장 좌측 위치에 있는 1을 남기고, 나머지를 0으로 한 값이 세트된다.
(CW2) 리드 인이 행해진 레지스터/메모리의 어드레스가 RWO에 등록되어 있지 않은 경우에는, 그 어드레스 및 값을 출력 어드레스 및 출력값으로서 RWO에 등록한다.
이 때, 새로 추가한 출력 어드레스 및 출력값(엔트리)에 대응하는 의존관계 저장부(M)의 행성분의 각 메모리 요소 값이 그 명령구간의 실행시에 생성된 행 일시저장부(tmp00)에 저장되어 있는 각 요소 값에 리라이트된다. 즉, 라이트가 행해진 데이터의 기원이 행 일시저장부(tmp00)의 값으로 치환된다.
여기서, 상술한 CW2와 마찬가지로, 번호 일시저장부(tmp01)의 각 요소 값이 체크된다. 그리고, 번호 일시저장부(tmp01)의 모든 요소가 0인 경우에는 번호관리부(busy)에 있어서 빈 그룹번호로 되어 있는 열위치의 하나에 대응하는 번호 일시저장부(tmp01)에 있어서의 열위치가 1로 설정된다. 구체적으로는, 번호관리부(busy)에 있어서의 각 요소 중, 가장 좌측의 0에 해당하는 열위치에 대응하는 번호 일시저장부(tmp01)에 있어서의 열위치가 1로 설정된다. 또, 이 때에, 번호 일시저장부(tmp01)에 있어서, 1로 설정된 열위치에 대응하는 번호관리부(busy)에 있어서의 열위치가 1로 설정된다.
한편, 번호 일시저장부(tmp01)의 요소에 1이 있는 경우에는, 가장 좌측의 1에 대응하는 열위치가 사용해야 할 그룹번호로 인식된다. 그리고, 번호 일시저장부(tmp01)의 모든 요소 중, 가장 좌측의 위치에 있는 1을 남기고, 나머지 요소를 0으로 한 값이, 출력측 번호저장부(wgpid)에 있어서의 기등록 위치[O], 및 행 일시저장부(tmp00)의 해당위치가 1인 입력측 번호 저장부(rgpid)의 해당위치에 각각 라이트된다.
또한, 번호 일시저장부(tmp01)의 모든 요소 중, 가장 좌측의 위치에 있는 1을 제외한 값과, 입력측 번호 저장부(rgpid) 전체 및 출력측 번호 저장부(wgpid) 전체를 각각 비교하여 각 요소의 논리곱이 구해진다. 그리고, 논리곱 결과, 1이 되는 요소를 유지하는 입력측 번호저장부(rgpid) 및 출력측 번호저정부(wgpid)의 열위치에 대해서는, 해당요소를 0으로 세트함으로써 번호 일시저장부(tmp01) 전체 중, 가장 좌측의 위치에 있는 1을 남기고, 나머지를 0으로 한 값이 세트된다.
이상의 수순에 의해, 명령구간의 실행 완료시에는 이하의 정보가 얻어지게 된다.
(1) 각 입력 데이터가 소속되는 그룹번호는 대응하는 입력측 번호저장부(rgpid)에 1이 표시되어 있는 비트위치에 의해 얻어진다.
(2) 각 출력 데이터가 소속되는 그룹번호는 대응하는 출력측 번호저장부(w gpid)에 1이 표시되어 있는 비트위치에 의해 얻어진다.
여기서, 명령구간의 일예로서, 도 15에 도시한 명령구간을 실행한 경우의 예에 대해서 설명한다. 이 도에 있어서, PC는 그 명령구간이 개시되었을 때의 PC값을 나타내고 있다. 이 PC값이 RW(4A)의 PC에 저장된다.
제 1명령에 있어서, 메모리에 있어서의 어드레스(A1)에서 로드된 4바이트 데이터(00110000)가 레지스터에 있어서의 어드레스(R1)에 저장된다. 이 시점에서, 리드가 행해진 어드레스(A1)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A1) 및 데이터(00110000)가 RWI의 제 1열위치에 등록된다.
또, 동시에, 행 일시저장부(tmp00)의 제 1열위치에 1이 세트되어, 행 일시저장부(tmp00)는 「1000」으로 된다.
또, 행 일시저장부(tmp00)에 1이 세트된 제 1열위치에 대응하는 입력측 번호 저장부(rgpid)의 제 1열위치에서 리드된 값「0000」이, 번호 일시저장부(tmp01)에 라이트된다. 번호 일시저장부(tmp01)의 모든 요소가 0인 경우에는, 번호관리부(busy)의 각 요소가 확인된다. 그리고, 번호관리부(busy)「0000」의 각 요소 중, 가장 좌측의 0에 해당하는 제 1열 위치가 다음에 이용해야 할 빈 그룹번호로서 인식된다. 그 후, 번호관리부(busy) 및 번호 일시저장부(tmp01)의 제 1열위치에 1이 각각 세트된다. 이 결과, 번호관리부(busy)는 「1000」, 번호 일시저장부(tmp01)는 「1000」로 된다.
또, 라이트가 행해진 어드레스(R1)는 RWO에 등록되어 있지 않으므로, 어드레스(R1) 및 데이터(00110000)가 RWO의 제 1행에 등록된다. 이와 동시에, 행 일시저장부(tmp00)의 모든 요소「1000」이, 의존관계 저장부(M)의 제 1행에 라이트된다. 또, 번호 일시저장부(tmp01)의 모든 요소「1000」이, 출력측 번호저장부(wgpid)의 제 1행에 라이트된다. 또, 동일하게 번호 일시저장부(tmp01)의 모든 요소「1000」이, 행 일시저장부(tmp00)에 있어서 1로 되어 있는 열에 있어서의 입력측 번호저장부(rgpid)의 제 1열에 라이트된다.
다음에, 제 2명령에 있어서, 메모리에 있어서의 어드레스(A2)에서 로드된 1바이트 데이터(02)가 레지스터에 있어서의 어드레스(R2)에 저장된다. 이 시점에서, 리드가 행해진 어드레스(A2)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A2) 및 데이터(02)가 RWI의 제 2열위치에 등록된다. 이 때, 어드레스(A2)에 있어서의 나머지 3바이트에 대해서는, Don't Care를 의미하는 「-」가 저장된다.
또, 동시에, 행 일시저장부(tmp00)의 제 2열위치에 1이 세트되어, 행 일시저 장부(tmp00)는 「0100」으로 된다.
또, 행 일시저장부(tmp00)에 1이 세트된 제 2열위치에 대응하는 입력측 번호저장부(rgpid)의 제 2열위치에서 리드된 값「0000」이, 번호 일시저장부(tmp01)에 라이트된다. 번호 일시저장부(tmp01)의 모든 요소가 0인 경우에는, 번호관리부(busy)의 각 요소가 확인된다. 그리고, 번호관리부(busy)「1000」의 각 요소 중, 가장 좌측의 0에 해당하는 제 2열 위치가 다음에 이용해야 할 빈 그룹번호로서 인식된다. 그 후, 번호관리부(busy) 및 번호 일시저장부(tmp01)의 제 2위치에 1이 각각 세트된다. 이 결과, 번호관리부(busy)는 「1100」, 번호 일시저장부(tmp01)는 「0100」로 된다.
또, 라이트가 행해진 어드레스(R2)는 RWO에 등록되어 있지 않으므로, 어드레스(R2) 및 데이터(02)가 RWO의 제 2행에 등록된다. 이와 동시에, 행 일시저장부(tmp00)의 모든 요소「0100」이, 의존관계 저장부(M)의 제 2행에 라이트된다. 또, 번호 일시저장부(tmp01)의 모든 요소「0100」이, 출력측 번호저장부(wgpid)의 제 2행에 라이트된다. 또, 동일하게 번호 일시저장부(tmp01)의 모든 요소「0100」이, 행 일시저장부(tmp00)에 있어서 1로 되어 있는 열에 있어서의 입력측 번호저장부(rgpid)의 제 2열에 라이트된다.
제 3명령에 있어서, 메모리에 있어서의 어드레스(A2+R2)에서 로드된 1바이트 데이터(22)가 레지스터에 있어서의 어드레스(R2)에 저장된다. 이 경우, 어드레스(R2)는 명령구간의 내부에서 덮어쓰기된 레지스터이므로, 어드레스(R2)는 명령구간의 내부에 덮어쓰기된 레지스터이므로, 어드레스(R2)는 명령구간의 입력으로는 되지 않는다.
한편, 어드레스(R2)에 저장되어 있는 데이터는 (02)에 있었으므로, 리드가 행해진 메모리에 있어서의 어드레스는 (A2+02)로 된다. 이 시점에서, 리드가 행해진 어드레스(A2+02)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A2+02) 및 데이터(22)가 RWI의 제 2열에 추가로 등록된다.
이 때, 어드레스(A2)에 있어서의 4바이트 중, 어드레스(A2+02)로 되는 바이트 부분에 데이터(22)가 등록된다. 즉, 제 2명령에 있어서, 어드레스(A2)로 되는 바이트 부분에 데이터(02)가 등록되어 있으므로, 어드레스(A2+01) 및 어드레스(A2+03)로 되는 바이트 부분에, Don't Care를 의미하는 「-」가 저장된 채로 된다.
또, 동시에 행 일시저장부(tmp00)의 제 2열 위치에 1이 세트되어, 행 일시저장부(tmp00)는 「0100」으로 된다.
또, 어드레스(R2)로부터의 리드에 대응해서, 의존관계 저장부(M) 중, 어드레스(R2)에 대응하는 제 2행 위치에서 리드된 값「0100」이, 행 일시저장부(tmp00)에 라이트된다. 또한, 출력측 번호저장부(wgpid) 중, 어드레스(R2)에 대응하는 제 2행 위치에서 리드된 값「0100」이, 번호 일시저장부(tmp01)에 라이트된다.
또, 행 일시저장부(tmp00)에 1이 세트된 제 2열 위치에 대응하는 입력측 번호저장부(rgpid)의 제 2열 위치에서 리드된 값「0100」이, 번호 일시저장부(tmp01)에 논리합으로서 라이트된다. 번호 일시저장부(tmp01)에 비트가 1로 되어 있는 요소가 있는 경우에는, 가장 좌측의 1에 해당하는 제 2열 위치가 다음에 이용해야 할 빈 그룹번호로서 인식된다.
또, 라이트가 행해진 어드레스(R2)는 이미 RWO에 등록되어 있으므로, 어드레스(R2)에 대응하는 출력값으로서, 데이터(02)로부터 데이터(22)로 리라이트된다. 이와 동시에, 행 일시저장부(tmp00)의 모든 요소 「0100」이, 의존관계 저장부(M)의 제 2행에 라이트된다. 또, 번호 일시저장부(tmp01)의 모든 요소 「0100」이, 출력측 번호저장부(wgpid)의 제 2행에 라이트된다. 또, 동일하게 번호 일시저장부(tmp01)의 모든 요소 「0100」이, 행 일시저장부(tmp00)에 있어서 1로 되어 있는 열에 있어서의, 입력측 번호저장부(rgpid)의 제 2열 위치에 라이트된다.
다음에, 제 4명령에 있어서, 메모리에 있어서의 어드레스(A3)에서 로드된 1바이트 데이터(33)가, 레지스터에 있어서의 어드레스(R3)에 저장된다. 이 시점에서, 리드가 행해진 어드레스(A3)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A3) 및 데이터(33)가 RWI의 제 3열에 등록된다.
또, 동시에 행 일시저장부(tmp00)의 제 3열 위치에 1이 세트되어, 행 일시저장부(tmp00)는 「0010」으로 된다.
또, 행 일시저장부(tmp00)에 1이 세트된 제 3열 위치에 대응하는 입력측 번호저장부(rgpid)의 제 3열 위치에서 리드된 값「0000」이, 번호 일시저장부(tmp01)에 라이트된다. 번호 일시저장부(tmp01)의 모든 요소가 0인 경우에는, 번호 관리부(busy)의 각 요소가 확인된다. 그리고, 번호 관리부(busy)「1100」의 각 요소 중, 가장 좌측의 0에 해당하는 제 3열 위치가, 다음에 이용해야 할 빈 그룹번호로서 인식된다. 그 후, 번호 관리부(busy) 및 번호 일시저장부(tmp01)의 제 3열 위치 에 1이 각각 세트된다. 그 결과, 번호 관리부(busy)는 「1110」, 번호 일시저장부(tmp01)는 「0010」으로 된다.
또, 라이트가 행해진 어드레스(R3)는 RWO에 등록되어 있지 않으므로, 어드레스(R3) 및 데이터(33)가 RWO의 제 3열에 등록된다. 이와 동시에, 행 일시저장부(tmp00)의 모든 요소 「0010」이, 의존관계 저장부(M)의 제 3행에 라이트된다. 또, 번호 일시저장부(tmp01)의 모든 요소 「0010」이, 출력측 번호저장부(wgpid)의 제 3행에 라이트된다. 또, 동일하게 번호 일시저장부(tmp01)의 모든 요소 「0100」이, 행 일시저장부(tmp00)에 있어서 1로 되어 있는 열에 있어서의, 입력측 번호저장부(rgpid)의 제 3열 위치에 라이트된다.
마지막으로, 제 5명령에 있어서, 메모리에 있어서의 어드레스(R1+R2)에서 로드된 1바이트 데이터(44)가, 레지스터에 있어서의 어드레스(R4)에 저장된다. 여기서, 어드레스(R1 및 R2)는 명령구간의 내부에서 덮어쓰기된 레지스터이므로, 명령구간의 입력으로는 되지 않는다. 한편, (R1+R2)에 의해서 생성된 어드레스(A4)는 명령구간의 입력으로 된다. 이 어드레스(A4)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A4) 및 데이터(44)가 RWI의 제 4열에 등록된다.
또, 동시에 행 일시저장부(tmp00)의 제 4열 위치에 1이 세트되어, 행 일시저장부(tmp00)는 「0001」로 된다.
또, 어드레스(R1) 및 어드레스(R2)로부터의 리드에 대응해서, 의존관계 저장부(M) 중, 어드레스(R1) 및 어드레스(R2)에 대응하는 제 1행 위치 및 제 2행 위치에서 리드된 값「1000」, 값「0100」, 및 행 일시저장부(tmp00)의 값「0001」의 논 리합「1101」이, 행 일시저장부(tmp00)에 라이트된다. 또한, 출력측 번호저장부(wgpid) 중, 어드레스(R1) 및 어드레스(R2)에 대응하는 제 1행 위치 및 제 2행 위치에서 리드된 값「1000」 및 값「0100」의 논리합「1100」이, 번호 일시저장부(tmp01)에 라이트 된다.
또, 최초에 행 일시저장부(tmp00)에 1이 세트된 제 4열 위치에 대응하는 입력측 번호저장부(rgpid)의 제 4열 위치에서 리드된 값「0000」과, 번호 일시저장부(tmp01)에 저장되어 있는 값「1100」과의 논리합「1100」이, 번호 일시저장부(tmp01)에 라이트된다. 번호 일시저장부(tmp01)에 비트가 1로 되어 있는 요소가 있는 경우에는, 가장 좌측의 1에 해당하는 제 1열 위치가 다음에 이용해야 할 빈 그룹번호로서 인식된다.
또, 라이트가 행해진 어드레스(R4)는 RWO에 등록되어 있지 않으므로, 어드레스(R4) 및 데이터(44)가 RWO의 제 4행에 등록된다. 이와 동시에, 행 일시저장부(tmp00)의 모든 요소 「1101」이, 의존관계 저장부(M)의 제 4행에 라이트된다. 또, 번호 일시저장부(tmp01)의 모든 요소 「1100」중, 가장 좌측의 1을 남기고, 나머지를 0으로 한 「1000」이, 출력측 번호저장부(wgpid)의 제 4행에 라이트된다. 또, 동일하게 번호 일시저장부(tmp01)의 모든 요소 「1100」중, 가장 좌측의 1을 남기고서, 나머지를 0으로 한 「1000」이, 행 일시저장부(tmp00)에 있어서 1로 되어 있는 열에 있어서의, 입력측 번호저장부(rgpid)의 제 1, 2, 4열 위치에 라이트된다.
또한, 번호 일시저장부(tmp01)의 모든 요소 「1100」 중, 가장 좌측의 1을 제외한 나머지의 「0100」을, 입력측 번호저장부(rgpid)의 모든 요소 및 출력측 번호저장부(wgpid)의 모든 요소와 비교하여, 논리곱이 1이 되는 세트를 유지하는 입력측 번호저장부(rgpid) 및 출력측 번호저장부(wgpid)의 엔트리에 대해서는, 해당 비트가 0으로 세트됨으로써, 번호 일시저장부(tmp01) 전체 「1100」 중, 가장 좌측의 위치에 있는 1을 남기고, 나머지를 0으로 한 값「0100」이 세트된다.
이상의 수순에 의해, 입력세트(A1-D1), (A2-D2) 및 (A4-D4)에 대해서는, 대응하는 입력측 번호저장부(rgpid)의 열 위치에 그룹(0)이 표시되고, 출력세트(R1, R2, 및 R4)에 대해서는, 대응하는 출력측 번호저장부(wgpid)의 행위치에 그룹(0)이 표시된다. 한편, 입력세트(A3-D3)에 대해서는, 대응하는 입력측 번호저장부(rgpid)의 열위치에 그룹번호(2)가 표시되고, 출력세트(R3)에 대해서는, 대응하는 출력측 번호저장부(wgpid)의 행위치에 그룹 2가 표시된다.
(RW의 제 4구성예)
어떤 명령구간에 조건 분기명령이 포함되어 있는 경우, 조건분기에 사용한 조건코드의 생성에 관여하는 자원이, 조건 분기명령 실행후의 모든 명령의 실행에 관여하게 된다. 따라서, 조건 분기명령을 고려한 그룹 분할기술도 필요로 한다. 이하에 나타내는 RW의 제 4구성예는 이것을 실현하는 것이 가능하게 되어 있다.
도 21은 제 4구성예로서의 RW(4A)의 개략 구성을 나타내고 있다. 이 도에 도시한 바와 같이, RW(4A)는 명령구간의 PC값을 저장하는 PC, 입력 어드레스 및 입력값을 저장하는 (RWI), 출력 어드레스 및 출력값을 저장하는 RWO, 의존관계 저장부(M), 행 일시저장부(tmp00), 입력측 번호저장부(rgpid), 출력측 번호저장 부(wgpid), 번호 관리부(busy), 및 번호 일시저장부(tmp01)에 추가해서, 조건 분기명령의 실행에 따라 의존관계의 요란에 뒤따르는 것을 목적으로 하여, 조건분기 저장부(조건분기 저장부)(tmpcc)를 갖고 있다.
조건분기 저장부(tmpcc)는 조건분기에 관계된 입력세트를 저장하는 메모리이다. 조건분기의 성립/불성립에 관계없이, 분기명령 후의 명령을 실행하는 것 자체가 조건코드 생성에 관계된 모든 입력에 의존하게 된다.
상술한 RW의 제 3구성예에서는, 각 명령마다 행 일시저장부(tmp00)를 초기화하는데 비해서, RW의 제 4구성에에서는, 조건분기 저장부(tmpcc)의 값을 행 일시저장부(tmp00)에 복사(copy)함으로써, 행 일시저장부(tmp00)를 초기화하고 있다.
도 21에 도시한 예에서는, 도 22에 도시한 명령구간이 실행된 경우를 나타내고 있다. 도 22에 도시한 명령구간에 있어서, 제 1명령부터 제 4명령까지는 도 15에 도시한 명령구간과 동일하다.
제 5명령에 있어서, 어드레스(R3)의 값이 검사된다. 그리고, 제 6명령에 있어서, 제 5명령에 의한 검사결과에 의거해서 조건분기가 행해진다. 여기서, 제 5 및 제 6의 명령은, 어드레스(R3)의 값에 의존하고 있으므로, 실행시에는 의존관계 저장부(M)의 제 3행이 조건분기 저장부(tmpcc)에 복사된다. 그리고, 제 7명령이 실행되기 전에, 조건분기 저장부(tmpcc)에 저장되어 있는 「0010」이, 행 일시저장부(tmp00)에 복사된다.
제 7명령에서는, 어드레스(R1+R2)에서 로드한 1바이트 데이터(44)가 레지스터에 있어서의 어드레스(R4)에 저장된다. 여기서, 어드레스(R1 및 R2)는 명령구간 의 내부에서 덮어쓰기된 레지스터이므로, 명령구간의 입력으로는 되지 않는다. 한편, (R1+R2)에 의해서 생성된 어드레스(A4)는 명령구간의 입력으로 된다. 이 어드레스(A4)는 RWO 및 RWI의 어디에도 등록되어 있지 않으므로, 어드레스(A4) 및 데이터(44)가 RWI의 제 4열에 등록된다.
또, 동시에, 행 일시저장부(tmp00)의 제 4열 위치에 1이 세트되어, 행 일시저장부(tmp00)는 「0011」로 된다.
또, 어드레스(R1) 및 어드레스(R2)로부터의 리드에 대응해서, 의존관계 저장부(M) 중, 어드레스(R1) 및 어드레스(R2)에 대응하는 제 1행 위치 및 제 2행 위치에서 리드된 값「1000」 및 값「0100」, 및 행 일시저장부(tmp00)의 값「0011」의 논리합 「1111」이, 행 일시저장부(tmp00)에 라이트된다. 또한, 출력측 번호저장부(wgpid) 중, 어드레스(R1) 및 어드레스(R2)에 대응하는 제 1행 위치 및 제 2행 위치에서 리드된 값「1000」 및 값「0100」의 논리합「1100」이, 번호 일시저장부(tmp01)에 라이트된다.
또, 최초에 행 일시저장부(tmp00)에 1이 세트된 제 3열 위치 및 제 4열 위치에 대응하는 입력측 번호저장부(rgpid)의 제 3열 위치 및 제 4열 위치에서 리드된 값「0010」 및 값「0000」의 논리합 「0010」과, 번호 일시저장부(tmp01)에 저장되어 있는 값「1100」과의 논리합「1110」이, 번호 일시저장부(tmp01)에 저장된다. 번호 일시저장부(tmp01)에 비트가 1로 되어 있는 요소가 있는 경우에는 가장 좌측의 1에 해당하는 제 1열 위치가, 다음에 이용해야 할 빈 그룹번호로서 인식된다.
또, 라이트가 행해진 어드레스(R4)는 RWO에 등록되어 있지 않으므로, 어드레 스(R4) 및 데이터(44)가 RWO의 제 4행에 등록된다. 이와 동시에, 행 일시저장부(tmp00)의 모든 요소 「1111」이, 의존관계 저장부(M)의 제 4행에 라이트된다. 또, 번호 일시저장부(tmp01)의 모든 요소 「1110」중, 가장 좌측의 1을 남기고, 나머지를 0으로 한 「1000」이, 출력측 번호저장부(wgpid)의 제 4행에 라이트된다. 또, 동일하게 번호 일시저장부(tmp01)의 모든 요소 「1110」중, 가장 좌측의 1을 남기고서, 나머지를 0으로 한 「1000」이, 행 일시저장부(tmp00)에 있어서 1로 되어 있는 열에 있어서의, 입력측 번호저장부(rgpid)의 제 1, 2, 3, 4열 위치에 라이트된다.
또한, 번호 일시저장부(tmp01)의 모든 요소 「1100」 중, 가장 좌측의 1을 제외한 나머지 「0110」을, 입력측 번호저장부(rgpid)의 모든 요소 및 출력측 번호저장부(wgpid)의 모든 요소와 비교하여, 논리곱이 1이 되는 세트를 유지하는 입력측 번호저장부(rgpid) 및 출력측 번호저장부(wgpid)의 엔트리에 대해서는, 해당 비트가 0으로 세트됨으로써, 번호 일시저장부(tmp01) 전체 「1100」 중, 가장 좌측의 위치에 있는 1을 남기고, 나머지를 0으로 한 값「1000」이 세트된다.
이상의 수순에 의해, 입력세트(A1-D1), (A2-D2), (A3-D3), 및 (A4-D4)에 대해서는, 대응하는 입력측 번호저장부(rgpid)의 열 위치에 그룹(0)이 표시되고, 출력세트(R1, R2, R3, 및 R4)에 대해서는, 대응하는 출력측 번호저장부(wgpid)의 행위치에 그룹(0)이 표시된다. 즉, 조건 분기명령의 실행에 의해서, 어드레스(R4)의 출력이 의존하는 입력 데이터는, 입력세트(A1-D1), (A2-D2), (A3-D3), 및 (A4-D4)의 모두로 되어 있다.
(그룹분할에 의거한 재이용표 설정)
이상과 같이, RW의 제 3 및 제 4구성예에 의하면, 각 입력세트 및 각 출력세트에 대해서, 소속되는 그룹번호가 할당된다. 이것에 의거해서, 동일 그룹으로 되는 입력세트마다, 도 19에 도시한 바와 같은 독립된 트리구조를 구성하는 것이 가능하게 된다. 이 트리구조에 의거해서, 도 23에 도시한 바와 같이, 각 입력세트가 RB 및 RF의 연상검색장치에 저장된다. 가령, 도 3에 도시한 예에서는, 초기검색키로서 FF만이 이용되고 있으나, 상기와 같이 각 입력세트에 그룹번호가 부여됨으로써, 복수의 초기검색키(F0, F1, F2, …)를 이용하는 것이 가능하게 된다. 이것에 의해, 복수의 검색을 동시에 개시하는 것이 가능하게 된다. 도 23에 도시한 예에서는 그룹번호가 0 및 2로 되어 있는 독립 트리구조의 선두 키에 대해서, 초기검색키(F0 및 F2)가 설정되어 있다.
(레지스터 값의 평가)
레지스터 입출력 값으로서는, 인수, 리턴값(Args.), 및 인수 및 리턴값 이외의 레지스터 및 조건 코드(Regs., Cc)를 들 수 있다. 본 실시예에서는, SPARC 아키텍처 레지스터 중, 범용 레지스터(%g0-7, %o0-7, %10-7, %i0-7), 부동 소수점 레지스터(%f0-31), 조건 코드 레지스터(ICC), 부동 소수점 조건 코드 레지스터(FCC)를 이용하도록 되어 있다(상세는 후술함), 이 중, 리프함수의 입력은 범용 레지스터(%o0-5), 출력은 범용 레지스터(%o0-1 또는 %f0-1), 또, 비(非)리프함수의 입력은 범용 레지스터(%i0-5), 출력은 범용 레지스터(%i0-1 또는 %f0-1)로 되고, 입력은 arg[0-5], 출력은 rti[0-1] 또는 %rtf[0-1]에 등록된다. SPARC-ABI의 규정에서 는, 이들 이외의 레지스터는 함수의 입출력으로는 되지 않으므로, 함수에 관해서는 레지스터 입출력 값으로서, Args.가 RB, 및 RO1/RO2에 등록된다.
한편, SPARC-ABI의 규정에서는, 루프의 입출력에 관해서는 이용되는 레지스터의 종류를 특정할 수 없으므로, 루프의 입출력을 특정하려면 모든 종류의 레지스터에 관해서 RB에 등록할 필요가 있다. 따라서, 루프에 관해서는, 레지스터 입출력 값으로서, Regs., CC에 상당하는 %g0-7, %o0-7, %10-7, %i0-7, %f0-31, ICC, FCC가 등록된다.
(다중 재이용)
1레벨에서 상기와 같은 재이용 기구를 이용한 경우, 도 46(a)에 도시한 예로 말하면, 리프함수로서의 함수B나, 함수B의 내부에 있는 루프C 등을 각각 재이용하는 것이 가능하게 된다. 이것에 비해서, 어떤 함수를 한번 실행한 것만으로, 그 함수의 내부에 포함되는 함수나 루프를 포함하는 모든 명령구간이 재이용 가능하게 되도록 등록을 행하는 구조가 다중 재이용이다. 가령, 상기 예로 말하면, 다중 재이용에 의하면, 함수A를 한번 실행한 것만으로, 포함 관계에 있는 A, B, C의 모든 명령구간이 재이용 가능하게 된다. 이하에, 다중 재이용을 실현하는 이상 필요로 하는 기능확장에 대해서 설명한다.
도 6에는 일예로서 함수A 및 함수D의 개념적인 구조를 나타낸다. 이 도에 도시한 예에서는 함수A의 내부에 루프B가 존재하고 있고, 루프B의 내부에 루프C가 존재하고 있으며, 루프C에 있어서 함수D가 호출되도록 되어 있다. 그리고, 함수D의 내부에 루프E가 존재하고 있고, 루프E의 내부에 루프F가 존재하고 있다.
도 7은 도 6에 도시한 함수A, D 및 루프B, C, E, F의 포함구조에 있어서, 내측 구조의 레지스터 입출력(굵은선 틀 셀영역)이, 외측 구조의 레지스터 입출력으로 되는 영향범위(화살표)에 대해서 나타내고 있다. 가령, 루프F의 내부에 있어서 입출력으로 참조된 %i0∼5는 루프E 및 함수D에 대한 입력이기도 하며, 또한 함수D를 호출한 루프C 및 루프B에 대한 입력(단, %o0∼5에 리라이트됨)이기도 하다. 한편, 함수A에 있어서 %o0∼5는 국소변수에 상당하므로, %i0∼5(%o0∼5)는, 함수A에 대한 레지스터 입력으로는 되지 않는다. 즉, %i0∼5(%o0∼5)의 영향범위는 루프B까지가 된다. 다른 견해로 보면, 함수D의 내부에서 %i0∼5가 참조된 경우에는, 루프B가 직접적으로 %o0∼5를 참조하지 않아도, %o0∼5를 루프B의 입력값으로서 등록할 필요가 있다. 루프F 내부에서 출력된 %i0∼1에 대해서도 동일하다.
부동 소수점 레지스터는 레지스터 윈도우에 포함되지 않으므로, 출력된 %f0∼1은, 함수A를 포함하는 모든 계층의 출력으로 된다. 한편, 그 밖의 레지스터 입출력은, 함수를 넘어서 영향이 미치는 일은 없다. 즉, 루프F 내부에 있어서의 입출력, 즉 레지스터 입력으로서의 %i6∼7, %g,l,o, %f0∼31, %icc, %fcc, 및 레지스터 출력으로서의 %I2∼7, %g,l,o, %f2∼31, %icc, %fcc의 영향범위는 루프E까지가 된다. 주기억에 대한 입출력에 대해서는 상술한 함수 호출 직전의 %sp(SP)와 비교하는 방법을 포함관계의 모든 계층에 대해서 적용함으로써, 영향범위를 특정할 수 있다.
여기서, 상기와 같은 RW(4A), RW(4B), 및 명령구간 기억부(2)의 구성에 의하면, 복수의 명령구간의 입출력을 개별적으로 기록하는 것이 가능하므로, 다중 재이 용을 실현하는 것이 가능하게 된다.
(병렬 사전 실행)
이상으로 설명한 함수나 루프의 다중 재이용에서는, 동일 파라미터가 출현하는 간격이 긴 경우나, 파라미터가 단조롭게 계속 변화할 경우에는 모든 효과가 없는 것이 된다. 즉, RB 엔트리의 생존시간보다도 동일 파라미터가 출현하는 간격이 긴 경우에는 어떤 함수 또는 루프가 RB에 등록되었다 해도, 그 등록된 함수 또는 루프에 관해서 동일 파라미터가 다음에 출현했을 때에는, 이미 그 함수 또는 루프가 RB엔트리로부터 소거되어 있음으로써, 재이용할 수 없게 된다. 또, 파라미터가 단조롭게 계속 변화할 경우에는, 해당하는 함수나 루프가 RB에 등록되어 있어도, 파라미터가 다르므로, 재이용할 수 없게 된다.
이것에 비해서, 다중 재이용을 행하는 프로세서로서의 MSP(1A)와는 별도로, 명령구간의 사전 실행에 의해서 RB 엔트리를 유효하게 하는 프로세서로서의 SSP(1B)를 복수개 마련함으로써, 더욱 고속화를 꾀할 수 있다.
병렬 사전 실행 기구를 실행하기 위한 하드웨어 구성은, 상술한 도 2에 도시한 바와 같은 구성으로 된다. 이 도에 도시한 바와 같이, RW(4W·4B), 연산기(5A·5B), 레지스터(6A·6B), 캐시(7A·7B)는 각 프로세서마다 독립해서 마련되어 있는 한편, 명령구간 기억부(2), 및 주기억(3)은 모든 프로세서가 공유하도록 되어 있다. 이 도에 있어서, 파선은 MSP(1A) 및 SSP(1B)가 명령구간 기억부(2)에 대해서 입출력을 등록하는 패스를 나타내고 있다.
여기서, 병렬 사전 실행을 실현하는데 있어서의 과제는, (1) 어떻게 주기억 일관성을 유지하는가, (2) 어떻게 입력을 예측하는가의 2점을 들 수 있다. 이하에, 이들 문제에 대한 해결방법에 대해서 설명한다.
(주기억 일관성에 관한 문제 해결방법)
먼저, 상기 첫 번째 과제인 (1) 어떻게 주기억 일관성을 유지하는가에 대해서 설명한다. 특히 예측한 입력 파라미터에 의거해서 명령구간을 실행할 경우, 주기억에 라이트하는 값이 MSP(1A)와 SSP(1B)로 다르게 된다. 이것을 해결하기 위해서, 도 2에 도시한 바와 같이, SSP(1B)는 RB로의 등록대상이 되는 주기억 참조에는 명령구간 기억부(2), 또, 그 밖의 국소적인 참조에는 SSP(1B)마다 마련한 국소 메모리로서의 Local(7B)을 사용하는 것으로 하고, Cache(7B) 및 주기억(3)으로의 라이트를 필요로 하고 있지 않다. 또, MSP(1A)가 주기억(3)에 대해서 라이트를 행한 경우에는 대응하는 SSP(1B)의 캐시라인이 무효화된다.
구체적으로는, 명령구간 기억부(2)로의 등록대상 중, 리드가 선행하는 어드레스에 대해서는 주기억(3)을 참조하여, MSP(1A)와 마찬가지로 어드레스 및 값을 RB에 등록한다. 이후, 주기억(3)이 아닌 명령구간 기억부(2)를 참조함으로써, 다른 프로세서로부터의 덮어쓰기에 의한 모순의 발생을 피할 수 있다. 국소적인 참조에 대해서, 리드가 선행한다고 하는 것은, 변수를 초기화하지 않고 사용하는 것에 상당하며, 값은 불확정이라도 되므로, 주기억(3)을 참조할 필요는 없다.
또, 국소 메모리로서의 Local(7B)의 용량은 유한하며, 함수 프레임의 크기가 Local(7B)의 용량을 넘는 경우 등, 실행을 계속할 수 없는 경우는, 사전 실행을 중단하도록 한다. 또, 사전 실행 결과는 주기억(3)에 라이트되지 않으므로, 사전 실 행 결과를 사용하여, 추가로 다음의 사전 실행을 행할 수는 없다.
(입력 예측방법)
다음에, 상기 두 번째 과제인 (2) 어떻게 입력을 예측하는 가에 대해서 설명한다. 사전 실행할 때에는, 명령구간 기억부(2)의 사용이력에 의거해서 장래의 입력을 예측하고, SSP(1B)에 건내줄 필요가 있다. 이를 위해서, 명령구간 기억부(2)에 기억되어 있는 각 입력패턴마다 작은 프로세서를 마련하고, MSP(1A)나 SSP(1B)는 독립해서 입력 예측값을 구하도록 한다.
구체적으로는, 최후에 출현한 인수(B) 및 최근에 출현한 2쌍의 인수 차분(D)에 의거해서, 스트라이드 예측을 행한다. 또, B+D에 의거한 명령구간의 실행은 MSP(1A)가 이미 개시되고 있다고 생각한다. SSP(1B)가 N대인 경우에, 준비할 입력 예측값은 B+D×2로부터 B+D×(N+1)까지의 범위로 한다.
이상과 같이 입력예측을 행하면, 상술한 입력 파라미터가 단조롭게 계속 변화할 경우에, 사전에 예측해 둔 결과에 의거해서 효과적으로 재이용을 행하는 것이 가능하게 된다.
<실시예 2>
본 발명의 다른 실시예에 대해 도면에 의거해서 설명하면 이하와 같다.
(데이터 처리장치의 구성)
본 실시예에 관계되는 데이터 처리장치의 개략 구성을 도 25에 나타낸다. 이 도에 도시한 바와 같이, 그 데이터 처리장치는 MSP(1A), SSP(1B), 재이용표로서의 RF/RB(명령열 기억수단(2'), 및 주기억(주기억수단)을 구비한 구성으로 되어 있고, 주기억(3)에 기억되어 있는 프로그램 데이터 등을 리드해서 각종 연산처리를 행하고, 연산결과를 주기억(3)에 라이트 처리를 행하는 것이다. 또, 이 도에 도시한 구성에서는 SSP(1B)를 하나 구비한 구성으로 되어 있으나, 2개 이상 구비한 구성으로 되어 있어도 된다.
RF/RB(2')는 프로그램에 있어서의 함수 및 루프를 재이용하기 위한 데이터를 저장하는 메모리수단으로, RB 등록처리부(등록처리수단)(2A) 및 예측처리부(예측처리수단)(2B)을 구비한 구성으로 되어 있다. 이 RF/RB(2')의 상세, 및 RB 등록처리부(2A)와 예측처리부(2B)의 상세에 대해서는 후술한다.
주기억(3)은 MSP(1A) 및 SSP(1B)의 작업영역으로서의 메모리로, 가령 RAM 등에 의해서 구성되는 것이다. 가령, 하드디스크 등의 외부 기억수단으로부터 프로그램이나 데이터 등이 주기억(3)에 리드되고, MSP(1A) 및 SSP(1B)는 주기억(3)에 리드된 데이터에 의거해서 연산을 행하게 된다.
MSP(1A)는 RW(재이용 기억수단(4A), 연산기(제 1연산수단)(5A), 레지스터(6A), 및 Cache(7A)를 구비한 구성으로 되어 있다. 또, SSP(1B)는 마찬가지로, RW(재이용 기억수단)(4B), 연산기(제 2연산수단)(5B), 레지스터(6B), 및 Cache/Local(7B)를 구비한 구성으로 되어 있다.
RW(4A·4B)는 재이용 윈도우로, 현재 실행중이면서 등록중인 RF 및 RB(후술함)의 각 엔트리를 링구조의 스택으로서 유지하는 것이다. 이 RW(4A·4B)는 실제의 하드웨어 구조로서는, RF/RB(2')에 있어서의 특정 엔트리를 액티브로 하는 제어선의 집합에 의해서 구성된다.
연산기(5A·5B)는 레지스터(6A·6B)에 유지되어 있는 데이터에 의거해서 연산처리를 행하는 것으로, ALU라 불리는 것이다. 레지스터(6A·6B)는 연산기(5A·5B)에 의해서 연산을 행하기 위한 데이터를 유지하는 기억수단이다. 또, 본 실시예에 있어서, 연산기(5A·5B), 및 레지스터(6A·6B)는 SPARC 아키텍처에 준하는 것으로 한다. Cache(7A·7B)는 주기억(3)과, MSP(1A) 및 SSP(1B)의 사이에서 캐시 메모리로서 기능하는 것이다. 또, SSP(1B)에서는, Cache(7B)에 국소 메모리로서 Local(7B)이 포함되어 있는 것으로 한다.
(RF/RB의 구성)
도 24는 본 실시예에 있어서의 RF/RB(2')에 의해서 실현되는 재이용표를 나타내고 있다. 이 도에 도시한 바와 같이, RF는 복수의 엔트리를 저장하고 있고, 각 엔트리에 대해서, 그 엔트리가 유효인지 아닌지를 나타내는 V, 엔트리 교체 힌트를 나타내는 LRU, 함수의 선두 어드레스를 나타내는 Start, 참조해야 할 주기억 어드레스를 나타내는 Read/Write, 및 함수와 로프를 구별하는 F/L을 유지하고 있다.
또, RB는 RF에 저장되어 있는 엔트리에 대응해서 복수의 엔트리를 저장하고 있고, 각 엔트리에 대해서, 그 엔트리가 유효인지 아닌지를 나타내는 V, 엔트리 교체 힌트를 나태는 LRU, 함수 또는 루프의 호출시에 직전의 스택 포인트(%sp)를 나타내는 SP, 인수(Args.)(V:유효 엔트리, Val.:값), 주기억값(C-FLAG:Read 어드레스의 변경 플래그, P-Mask:Read 어드레스의 이력 마스크, Mask:Read/Write 어드레스의 유효 바이트, Value:값), 및 리턴값(Return Values)(V:유효 엔트리, Val.:값), 루프의 종료 어드레스(End), 루프 종료시의 분기방향을 나타내는 taken/not, 및 인 수나 리턴값 이외의 레지스터 및 조건 코드(Regs., CC)를 유지하고 있다. 또, RB는 하나 이상의 레지스터 어드레스에 대응해서 정수 플래그(Const-FLAG)를 저장하는 메모리 영역을 유지하고 있다. 또, 정수 플래그(Const-FLAG)의 상세에 대해서는 후술한다.
상기 RF 및 RB에 있어서의 각 항목에 대해서 보다 상세하게 설명한다. 상기 V는 상술한 바와 같이, 엔트리가 유효인지 아닌지를 나타내는 것이지만, 구체적으로, 미등록시에는 「0」, 등록중인 경우에는 「2」, 등록완료인 경우에는 「1」의 값이 저장되도록 되어 있다. 가령, RF 또는 RB를 확보할 때에, 미등록 엔트리(V=0)가 있으면 이것을 사용하고, 미등록 엔트리가 없으면, 등록완료 엔트리(V=1) 중에서 LRU가 최소인 것을 선택해서 덮어쓰기하게 된다. 등록중인 엔트리(V=2)는 사용중이므로, 덮어쓰기할 수는 없다.
상기 LRU는 일정시간 간격으로 우측으로 시프트되어 가는 시프트 레지스터 중의 「1」의 개수를 나타내는 것이다. RF의 경우, 이 시프트 레지스터는 해당 엔트리에 관해서, 재이용을 위한 등록을 행하였거나, 또는 재이용을 시도한 경우에 좌측단에 「1」이 라이트되도록 되어 있다. 그러므로, 해당 엔트리가 빈번하게 사용되면, LRU는 큰 값으로 되며, 일정기간 사용되지 않으면 LRU 값은 0으로 된다. 한편, RB의 경우, 시프트 레지스터에는 해당 엔트리가 재이용된 경우에 「1」이 라이트되도록 되어 있다. 그러므로, 해당 엔트리가 빈번하게 사용되면 LRU는 큰 값으로 되고, 일정기간 사용되지 않으면 LRU는 0으로 된다.
상기 RB에 있어서의 주기억 값의 Mask에 대해서 설명한다. 일반적으로, 어드 레스와 데이터를 1바이트씩 관리하는 것으로 하면 관리가 가능하지만, 실제로는 4바이트 단위로 데이터를 관리하는 편이 캐시 참조를 고속으로 행할 수 있다. 그래서, RF에서는 주기억 어드레스를 4의 배수로 기억하도록 되어 있다. 한편, 관리단위를 4바이트로 할 경우, 1바이트분만큼을 로드하는 것에 대응할 수 있도록 하기 위해서, 4바이트 중 어느 바이트가 유효한지를 나타낼 필요가 있다. 즉, Mask는 4바이트 중에서 어느 바이트가 유효한지를 나타내는 4바이트 데이터로 되어 있다. 가령, C001 번지에서 1바이트분을 로드한 결과, 값이 E8인 경우, RF에는 어드레스(C000)가 등록되고, RB의 Mask에 「0100」, Value에 「00E80000」이 등록된다. 또, Read 어드레스에 있어서의 변경 플래그(C-FLAG) 및 이력 마스크(P-MASK)의 상세에 대해서는 후술한다.
상기 인수나 리턴값 이외의 레지스터 및 조건 코드(Regs., CC)에 대해서 설명한다. 본 실시예에서는 SPARC 아키텍처 중, 범용 레지스터(%g0-7, %o0-7, %l0-7, %i0-7), 부동 소수점 레지스터(%f0-31), 조건코드 레지스터(ICC), 부동 소수점 코드 레지스터(FCC)를 이용하도록 되어 있다(상세는 후술함). 이 중, 리프함수의 입력은 범용 레지스터(%o0-5), 출력은 범용 레지스터(%o0-1), 또 비(非)리프함수의 입력은 범용 레지스터(%i0-5), 출력은 범용 레지스터(%i0-1)로 되고, 입력은 arg「0-5」, 출력은 rti「0-1」에 등록된다. SPARC-ABI의 규정에서는 이들 이외의 레지스터는 함수의 입출력으로는 되지 않으므로, 함수에 관해서는 RB에 있어서의 인수(Args.)의 항으로 충분하다.
한편, SPARC-ABI의 규정에서는, 루프의 입출력에 관해서, 이용되는 레지스터 의 종류를 특정할 수는 없으므로, 루프의 입출력을 특정하려면, 모든 종류의 레지스터에 관해서 RB에 등록할 필요가 있다. 따라서, RB에 있어서의 Regs., CC에는 %g0-7, %o0-7, %l0-7, %i0-7, %f0-31, ICC, FCC가 등록되도록 되어 있다.
이상과 같이, RF/RB(2')에 있어서, Read 어드레스는 RF가 일괄 관리하고, Mask 및 Value는 RB가 관리하고 있다. 이것에 의해, Read 어드레스의 내용과 RB의 복수 엔트리를 CAM에 의해서 한번에 비교하는 구성을 가능하게 하고 있다.
(재이용 처리의 개략)
다음에, 함수 및 루프의 각각의 경우에 관해, 재이용 처리의 개략에 대해서 설명한다.
먼저, 함수의 경우에 대해서 설명한다. 함수로부터 복귀할 때까지 다음 함수를 호출한 경우, 또는 등록해야 할 입출력이 재이용표의 용량을 넘거나, 인수의 제 7워드를 검출하거나, 도중에 시스템 콜이나 할당이 발생하는 등의 요란이 발생하지 않은 경우, 복귀명령을 실행한 시점에서, 등록중인 입출력표 엔트리를 유효로 한다.
이후, 도 24를 참조하면서 설명하면, 함수를 호출하기 전에, (1) RB에 등록되어 있는 엔트리에 있어서의 함수의 선두 어드레스에, 해당 함수의 선두 어드레스와 일치하는 것이 있는지를 검색한다. 일치하는 것이 있는 경우에는, (2) RB에 등록되어 있는 해당 함수에 관한 엔트리에 있어서의 인수가, 호출하는 함수의 인수와 완전히 일치하는 엔트리를 선택한다. 그리고, (3) 관련되는 주기억 어드레스, 즉 적어도 하나의 Mask가 유효한 Read 어드레스를 RF로부터 모두 참조하여, (4) RB에 등록되어 있는 내용과 일치 비교를 행한다. 모든 입력이 일치한 경우에, (5) RB에 등록완료 출력(리턴값, 대역변수, 및 A의 국소변수)을 주기억(3)에 적어보냄으로써, 함수의 실행을 생략하는, 즉 함수의 재이용을 실현하는 것이 가능하다.
다음에, 루프의 경우에 대해서 설명한다. 루프가 완료되기 이전에 함수로부터 복귀하거나, 상술한 요란이 발생하는 등, 루프의 입출력 등록이 중지되지 않으면, 등록 중인 루프에 대응하는 후방 분기명령을 검출한 시점에서, 등록중인 입출력표 엔트리를 유효로 하고, 그 루프의 등록을 완료한다.
또한, 후방 분기명령이 성립하는 경우는, 다음 루프가 재이용 가능한지의 여부를 판단한다. 즉, 도 24를 참조하면서 설명하면, 후방분기하기 전에, (1) RF에 등록되어 있는 엔트리에 있어서의 루프의 선두 어드레스에, 해당 루프의 선두 어드레스와 일치하는 것이 있는지를 검색한다. 일치하는 것이 있는 경우에는, (2) RB에 등록되어 있는 해당 루프에 관한 레지스터 입력값이, 호출하는 로프의 레지스터 입력값과 완전히 일치하는 엔트리를 선택한다. 그리고, (3) 관련되는 주기억 어드레스를 RF로부터 모두 참조하여, (4) RB에 등록되어 있는 내용과 일치 비교를 행한다. 모든 입력이 일치한 경우에, (5) RB에 등록완료 출력(레지스터 및 주기억 출력값)을 주기억(3)에 적어보냄으로써, 루프의 실행을 생략하는, 즉 루프의 재이용을 실현하는 것이 가능하다.
재이용한 경우, RB에 등록되어 있는 분기방향에 의거해서, 추가로 다음 루프에 관해서 동일한 처리를 반복한다. 한편, 다음 루프가 재이용 불가능하면, 다음 루프를 통상적으로 실행하여, RF 및 RB로의 등록을 개시한다.
(명령구간 실행시에 있어서의 처리 흐름)
다음에, 명령이 디코드된 경우의 구체적인 처리 흐름에 대해서 설명한다. 이하에서는, 명령이 디코드된 결과, 함수 호출명령이 있는 경우, 함수 복귀명령인 경우, 후방분기 성립의 경우, 후방분기 불성립의 경우, 및 기타 명령의 경우에 대해서, 각각의 처리 흐름을 설명한다.
(함수 호출명령인 경우)
명령이 디코드된 결과, 함수 호출명령인 경우의 처리를 도 26에 나타낸 플로우차트를 참조하면서 이하에 설명한다. 먼저, 스텝1(이후, S1과 같이 칭함)에 있어서, 인수의 제 7워드를 검색하였는지 아닌지가 판정된다. S1에 있어서 YES, 즉 인수의 제 7워드를 검색하였다고 판정된 경우에는, RW에 등록되어 있는 등록중인 RB 엔트리를 모두 무효화하고, S6으로 이행하여, 프로그램 카운터를 함수의 선두로 진행시키고 처리를 종료한다.
한편, S1에 있어서 NO, 즉 인수의 제 7워드를 검출하고 있지 않다고 판정된 경우에는, 그 함수호출 및 입력값이 RF 및 RB에 등록되어 있는지 아닌지를 검색한다(S2). S2에 있어서 YES, 즉 그 함수호출 및 입력값이 RF 및 RB에 등록되어 있다고 판정된 경우에는 후술하는 S7의 스텝으로 이행한다.
S2에 있어서 NO, 즉 그 함수호출 및 입력값이 RF 및 RB에 등록되어 있다고 판정된 경우에는, 그 함수를 위한 RF 엔트리 및 RB엔트리를 확보하려고 시도하고, (1) 기존의 RF 엔트리가 있는지, (2) 등록작업 중에 내보낼 수 없는 RF엔트리 이외에, 사용가능한 RF 엔트리가 있는지, 또는 (3) 등록작업 중에 내보낼 수 없는 RB엔 트리 이외에, 사용가능한 RB엔트리가 있는지를 판정한다(S3).
S3에 있어서 NO, 즉 사용가능한 RF·RB엔트리가 없다고 판정된 경우에는, 등록을 개시하지 않고, RW에 등록되어 있는 RB를 모두 무효화하고(S5), RW를 비운다. 한편, S3에 있어서 YES, 즉 사용가능한 RF·RB엔트리가 있다고 판정된 경우에는, 그 함수를 위한 RF엔트리 및 RB엔트리를 확보하고, RW에 등록한다(S4). 여기서, RW에 등록했을 때에, RW에 등록되어 있지 않은 RW 엔트리가 넘친 경우에는, 가장 오래된 RW엔트리를 삭제하고, 대응하는 RB를 무효화한다. S3 또는 S4가 실행된 후에, 프로그램 카운터를 함수의 선두로 진행시키고(S6), 처리를 종료한다.
한편, S2에 있어서 YES, 즉 그 함수 호출 및 입력값이 RF 및 RB에 등록되어 있다고 판정된 경우, 그 함수는 재이용가능하게 된다. 즉, RB로부터 출력값을 구함과 동시에, 레지스터 및 주기억(3)에 이 출력값을 라이트한다(S7). 그리고, 등록중인 함수/루프가 RW에 등록되어 있는지 아닌지를 판정하고(S8), 등록되어 있는 경우에는 재이용을 행한 함수의 RB엔트리의 내용 중, 필요한 것을 RW에 등록되어 있는 엔트리에 추가한다(S9). 여기서, RW의 TOP부터 순서대로 등록하고, 도중에 RB가 넘친 경우에는, 이후, RW의 BOTTOM까지에 대한 RB를 무효화하고, RW에서 삭제한다. 그 후, 프로그램 카운터를 다음 명령으로 진행시키고(S10), 처리를 종료한다.
(함수 복귀명령인 경우)
명령이 디코드된 결과, 함수 복귀명령인 경우의 처리를 도 27에 도시한 플로우차트를 참조하면서 이하에 설명한다. S11에 있어서, RW의 TOP부터 순서대로 가서, 함수에 대응하는 RF/RB가 검색될 때까지, 루프에 관한 RB가 검출되는지 아닌지 가 판정된다(S12). 여기서, 루프에 관한 RB가 검출되면(S12에 있어서 YES), 해당 RB를 모두 무효화함과 동시에, RW에서 삭제한다(S13).
한편, RW 탐색중에, 해당 함수에 대응하는 RF/RB를 검출하였는지 아닌지가 판정된다(S14). 여기서, 해당 함수에 대응하는 RF/RB가 검출되면(S14에 있어서 YES), 해당 RB엔트리를 유효화함과 동시에, RW에서 삭제한다(S15).
그 후, 복귀명령을 실행하고(S16), 처리를 종료한다.
(후방분기 성립인 경우)
명령이 디코드된 결과, 후방분기 성립인 경우의 처리를 도 28에 도시한 플로차트를 참조하면서 이하에 설명한다. 먼저, RW의 TOP부터 순서대로 가서, 함수에 대응하는 RB를 검출하는지 아닌지가 판정된다(S21). S21에 있어서 YES, 즉 함수에 대응하는 RB를 검출한 경우에는, 후술하는 S24의 스텝으로 이행한다.
한편, S21에 있어서 NO, 즉 함수에 대응하는 RB를 검출하지 않는 경우에는, 다음에 그 후방분기 명령 자신의 어드레스와 RB 중의 루프 종료 어드레스가 일치하는지 아닌지가 판정된다(S22). S22에 있어서 NO, 즉 그 후방분기 명령 자신의 어드레스와 RB 중의 루프 종료 어드레스가 일치하지 않는다고 판정되면, 후술하는 S24의 스텝으로 이행한다.
S22에 있어서 YES, 즉 그 후방분기 명령자신의 어드레스와 RB 중의 루프 종료 어드레스가 일치한다고 판정된 경우, RW의 TOP부터 그 RB의 바로 앞까지의 RB를 모두 무효화하고(S23), RW에서 삭제한다. 또, 그 RB엔트리를 유효화하면서, taken=1로 하고, RW에서 삭제한다.
다음에, S24에 있어서, 다음 루프의 선두 어드레스 및 입력값이 RF 및 RB에 등록되어 있는지 아닌지가 판정된다. S24에 있어서 YES, 즉 다음 루프의 선두 어드레스 및 입력값이 RF 및 RB에 등록되어 있는 경우에는, 후술하는 S30의 스텝으로 이행한다.
한편, S24에 있어서 NO, 즉 다음 루프의 선두 어드레스 및 입력값이 RF 및 RB에 등록되어 있지 않은 경우에는, 다음 루프를 위한 RF엔트리 및 RB엔트리를 확보하도록 시도하고, (1) 기존의 RF엔트리가 있거나, (2) 등록 작업중에 내보낼 수 없는 RF엔트리 이외에, 사용가능한 RF엔트리가 있거나, 또는 (3) 등록 작업중에 내보낼 수 없는 RB엔트리 이외에, 사용가능한 RB엔트리가 있는지가 판정된다(S25).
S25에 있어서 NO, 즉 사용가능한 RF·RB엔트리가 없다고 판정된 경우에는, 등록을 개시하지 않고, RW에 등록되어 있는 RB를 모두 무효화하고(S26), RW를 비운다. 그 후, S29에 있어서, 프로그램 카운터를 조건 분기처로 진행시키고, 처리를 종료한다.
한편, S25에 있어서 YES, 즉 사용가능한 RF·RB엔트리가 있다고 판정된 경우에는, 그 사용가능한 RF·RB엔트리를 확보하고, 확보한 RF·RB를 RW에 등록한다(S27). 또, RB에 루프 종료 어드레스(후방분기 명령 자신의 어드레스)를 등록한다. 여기서, RW로의 등록을 행할 때에 RW가 넘친 경우에는, 가장 오래된 RW엔트리를 삭제하고(S28). 그것에 대응하는 RB를 무효화한다. 그 후, S29에 있어서, 프로그램 카운터를 조건 분기처로 진행시키고, 처리를 종료한다.
한편, 상술한 S24에 있어서 YES로 된 경우, 다음 루프는 재이용가능한 것이 되므로, RB에서 출력값을 구하고, 이 값을 레지스터 및 주기억(3)에 라이트한다(S30). 여기서, 등록중인 함수/루프가 RW에 등록되어 있는지 아닌지가 판정되고(S31), 등록되어 있는 경우, 재이용을 행한 루프의 RB엔트리의 내용 중, 필요한 것을 RW에 등록되어 있는 엔트리에 추가한다(S32). 이 때, RW의 TOP부터 순서대로 등록하고, 도중에 RB가 넘친 경우, 이후, RW의 BOTTOM까지에 대한 RB를 무효화하고, RW에서 삭제한다.
그 후, 프로그램 카운터는 다음 루프의 선두는 아니고, 그 RB 중의 taken의 값에 대응해서, taken=1인 경우는 자(自)명령, taken=0인 경우는 RB 중에 기억되어 있던 루프 종료 어드레스의 다음으로 진행한다. 그 후, 처리를 종료한다.
(후방분기 불성립인 경우)
명령이 디코드된 결과, 후방분기 불성립인 경우의 처리를 도 29에 도시한 플로우차트를 참조하면서 이하에 설명한다. 먼저, RW의 TOP부터 순서대로 검색하고(S41), 함수에 대응하는 RB를 검출하였는지 아닌지가 판정된다(S42). S42에 있어서 YES, 즉 함수에 대응하는 RB를 검출하였다고 판정된 경우, S46에 있어서 프로그램 카운터를 다음 명령으로 진행시키고, 처리를 종료한다.
S42에 있어서 NO, 즉 함수에 대응하는 RB가 검출되지 않는다고 판정된 경우, 그 후방분기 명령 자신의 어드레스와 RB 중의 루프종료 어드레스가 일치하는지 아닌지가 판정된다(S43). S43에 있어서 NO, 즉 그 후방분기 명령에 대응하는 RF/RB를 검출하지 않았다고 판정된 경우, S46에 있어서 프로그램 카운터를 다음 명령으로 진행시키고, 처리를 종료한다.
한편, S43에 있어서 YES, 즉 그 후방분기 명령에 대응하는 RF/RB를 검출하였다고 판정된 경우, RW의 TOP부터 그 RB의 바로 앞까지의 RB를 모두 무효화하고(S44), RW에서 삭제한다. 또, 그 RB엔트리를 유효화하면서, taken=0으로 하고, RW에서 삭제한다(S45). 그 후, S46에 있어서 프로그램 카운터를 다음 명령으로 진행시키고, 처리를 종료한다.
(기타 명령인 경우)
다음에, 명령이 디코드된 결과, 상기 이외의 기타 명령인 경우에 대해서 설명한다. 기타 명령인 경우, 레지스터 R/W, 주기억 R/W가 실행된다. 그 때, RW가 비어 있지 않으면, 이하의 수순에 의해서 레지스터 R/W, 주기억 R/W를 RW에 등록되어 있는 RB에 대해서 등록한다. 이하에서는, (1) 범용 레지스터 READ인 경우, (2) 범용 레지스터 WRITE인 경우, (3) 부동 소수점 레지스터 READ인 경우, (4) 부동 소수점 레지스터 WRITE인 경우, (5) 조건코드 레지스터(ICC) READ인 경우, (6) 조건코드 레지스터(ICC) WRITE인 경우, (7) 부동 소수점 조건코드 레지스터(FCC) READ인 경우, (8) 부동 소수점 조건코드 레지스터(FCC) WRITE인 경우, (9) 주기억 READ인 경우, (10) 주기억 WRITE인 경우에 대해서 각각 설명한다.
(1) 범용 레지스터 READ인 경우
먼저, RW의 TOP부터 BOTTOM까지 순서대로 진행해 간다. 그리고, (1-1) 그 RB가 리프함수이고 %o0-6인 경우, 또는 그 RB 함수가 비리프함수이고 %i0-6인 경우, arg[0-5].V=0이면, arg[0-5].V=1로 변경하고, arg[0-5].Val에 리드 데이터를 기록한다. 그 후, 더욱 RW를 진행해 가서, 그 RB가 함수인 경우, 처리를 종료한다. 한 편, 그 RB가 함수는 아닌(루프인) 경우, arg[0-5].V=0이면, arg[0-5].V=1로 변경하고, arg[0-5].Val에 리드 데이터를 기록하고, 처리를 종료한다.
한편, (1-2) 그 RB가 루프인 경우 (a) %g0-7이고 grr[0-7].V=0이면, grr[0-7].V=1로 변경하고, grr[0-7].Val에 리드 데이터를 기록하고, 처리를 종료한다. (b) %g0-7이고 arg[0-7].V=0이면, arg[0-7].V=1로 변경하고, arg[0-7].Val에 리드 데이터를 기록하고, 처리를 종료한다. (c) %l0-7이고 lrr[0-7].V=0이면, lrr[0-7].V=1로 변경하고, lrr[0-7].Val에 리드 데이터를 기록하고, 처리를 종료한다. (d) %i0-7이고 lirr[0-7].V=0이면, irr[0-7].V=1로 변경하고, irr[0-7].Val에 리드 데이터를 기록하고, 다음 RW 엔트리로 진행한다.
(2) 범용 레지스터 WRITE인 경우
먼저, RW의 TOP부터 BOTTOM까지 순서대로 진행해 간다. 그리고, (2-1) 그 RB가 리프함수이고 %o0-5인 경우, 또는 그 RB가 비(非)리프함수이고 %i0-5인 경우, arg[0-5].V=0이면, 이후의 리드는 입력이 아님을 나타내기 위해서, arg[0-5].V=2로 변경한다. 또한, %o0-1에 대해서, rti[0-1].V=1로 변경하고, rti[0-1].Val에 라이트하고 데이터를 기록한다. 그 후, 더욱 RW를 진행해 가서, 그 RB가 함수인 경우, 처리를 종료한다. 한편, 그 RB가 함수는 아닌(루프인) 경우, arg[0-1].V=0이면, 이후의 리드는 입력이 아님을 나타내기 위해서, arg[0-1].V=2로 변경하고, rti[0-1].V=1로 변경하고, rti[0-1].Val에 라이트 데이터를 기록하고, 처리를 종료한다.
한편, (2-2) 그 RB가 루프인 경우 (a) %g0-7이고 grr[0-7].V=0이면, grr[0-7].V=2로 변경하고, grr[0-7].Val에 라이트 데이터를 기록하고, 처리를 종료한다. (b) %o0-7이고 arg[0-7].V=0이면, arg[0-7].V=2로 변경하고, arg[0-7].Val에 리드 데이터를 기록하고, 처리를 종료한다. (c) %l0-7이고 lrr[0-7].V=0이면, lrr[0-7].V=2로 변경하고, lrr[0-7].Val에 라이트 데이터를 기록하고, 처리를 종료한다. (d) %i0-7이고 lirr[0-7].V=0이면, irr[0-7].V=2로 변경하고, irr[0-7].Val에 라이트 데이터를 기록하고, 다음 RW 엔트리로 진행한다.
(3) 부동 소수점 레지스터 READ인 경우
먼저, RW의 TOP부터 BOTTOM까지 순서대로 진행해 간다. 그리고, (3-1) 그 RB가 함수인 경우, 아무것도 하지 않고 처리를 종료한다. 한편, (3-2) 그 RB가 루프인 경우, frr[0-31].V=0이면, frr[0-31].V=1로 변경하고, frr[0-31].Val에 리드 데이터를 기록하고, 처리를 종료한다.
(4) 부동 소수점 레지스터 WRITE인 경우
먼저, RW의 TOP부터 BOTTOM까지 순서대로 진행해 간다. 그리고, (4-1) 그 RB가 함수이고 %f0-1인 경우, rtf[0-1].V=1로 변경하고, rtf[0-1].Val에 라이트 데이터를 기록한다. 더욱 RW를 진행해 가서, frr[0-1].V=0이면, 이후의 리드는 입력이 아님을 나타내기 위해서, frr[0-1].V=2로 변경하고, rtf[0-1].V=1로 변경하고, rtf[0-1].Val에 라이트 데이터를 기록하고, 처리를 종료한다.
한편, (4-2) 그 RB가 루프인 경우, frr[0-31].V=0이면, frr[0-31].V=2로 변경하고, frw[0-31].V=1로 변경하고, frw[0-7].Val에 리드 데이터를 기록하고, 처리를 종료한다.
(5) 조건코드 레지스터(ICC) READ인 경우
먼저, RW의 TOP부터 BOTTOM까지 순서대로 진행해 간다. 그리고, (5-1) 그 RB가 함수인 경우, 아무것도 하지 않고 처리를 종료한다. 한편, (5-2) 그 RB가 루프인 경우, icr.V=0이면, icr.V=1로 변경하고, icr.Val에 리드 데이터를 기록하고, 처리를 종료한다.
(6) 조건코드 레지스터(ICC) WRITE인 경우
먼저, RW의 TOP부터 BOTTOM까지 순서대로 진행해 간다. 그리고, (6-1) 그 RB가 함수인 경우, 아무것도 하지 않고 처리를 종료한다. 한편, (6-2) 그 RB가 루프인 경우, icr.V=0이면, icr.V=2로 변경하고, icw.V=1로 변경하고, icw.Val에 라이트 데이터를 기록하고, 처리를 종료한다.
(7) 부동 소수점 조건코드 레지스터(FCC) READ인 경우
먼저, RW의 TOP부터 BOTTOM까지 순서대로 진행해 간다. 그리고, (7-1) 그 RB가 함수인 경우, 아무것도 하지 않고 처리를 종료한다. 한편, (7-2) 그 RB가 루프인 경우, fcr.V=0이면, fcr.V=1로 변경하고, fcr.Val에 리드 데이터를 기록하고, 처리를 종료한다.
(8) 조건코드 레지스터(ICC) WRITE인 경우
먼저, RW의 TOP부터 BOTTOM까지 순서대로 진행해 간다. 그리고, (8-1) 그 RB가 함수인 경우, 아무것도 하지 않고 처리를 종료한다. 한편, (8-2) 그 RB가 루프인 경우, fcr.V=0이면, fcr.V=2, fcw.V=1로 변경하고, fcw.Val에 라이트 데이터를 기록하고, 처리를 종료한다.
(9) 주기억 READ인 경우
먼저, RW의 TOP부터 BOTTOM까지 순서대로 진행해 간다. 그리고, RB에 WRITE 데이터로서 등록완료인 경우는, 그 값을 사용한다. 판현, 상기 경우는 아니며, RB에 READ 데이터로서 등록완료인 경우에는, 그 값을 사용한다. 또한, 어디에도 등록완료가 아닌 경우는, 캐시를 경유하여 주기억(3)으로부터 리드 인한다.
그 후, 다시 RW의 TOP부터 BOTTOM까지 순서대로 진행해 간다. 그리고, (a) 어드레스가 RB에 등록되어 있는 sp+64인 경우, 구조체 포인터의 리드이므로, arg0.V=0이면, arg0.V=1로 변경하고, arg0.Val에 리드 데이터를 기록한다. (b) 상기 (a)의 경우는 아니고, 어드레스가 LIMIT 이상 sp+92미만이면, 등록 불필요 영역이므로, 아무것도 하지 않는다. (c) 상기 (b)의 경우가 아닌 경우, WRITE 데이터로서 등록완료인지의 여부를 검사하고, 그렇다면, 이미 덮어쓰기된 후의 READ이므로, 등록은 불필요하며, 아무것도 하지 않는다. (d) 상기 (c)가 아닌 경우, READ 데이터로서 등록완료인지의 여부를 검사하고, 그렇다면, 이미 등록완료이므로, 등록은 불필요하며, 아무것도 하지 않는다. (e) 상기 (d)가 아는 경우, READ 데이터로서 등록이 필요하므로, RF에 주기억 READ 어드레스를 확보하고, READ 데이터로서 등록한다. RF에 주기억 어드레스를 확보할 수 없었던 경우에는, 등록불능이기 때문에, 그 RW엔트리부터 BOTTOM까지에 대응하는 RB엔트리를 모두 무효화한다.
(10) 주기억 WRITE인 경우
먼저, 캐시를 경유하여, 주기억(3)에 라이트한다. 그리고, 베이스 레지스터가 14(%sp)이고 옵셋이 92이상인 경우, 인수의 제 7워드를 검출한 것을 기억한다.
그 후, 다시 RW의 TOP부터 BOTTOM까지 순서대로 진행해 간다. 그리고, (a) 어드레스가 RB에 등록되어 있는 sp+64인 경우, 구조체 포인터의 리드이므로, arg0.V=0이면, arg0.V=2로 변경한다. (b) 상기 (a)의 경우는 아니고, 어드레스가 LIMIT 이상 sp+92미만이면, 등록 불필요 영역이므로, 아무것도 하지 않는다. (c) 상기 (b)의 경우가 아닌 경우, WRITE 데이터로서 등록완료인지의 여부를 검사하고, 그렇다면, 이미 어드레스는 등록완료이므로, 내용을 새로 WRITE 데이터에 갱신한다. (d) 상기 (c)가 아닌 경우, RWITE 데이터로서 등록이 필요하므로, RF에 주기억 WRITE 어드레스를 확보하고, WRITE 데이터로서 등록한다. RF에 주기억 어드레스를 확보할 수 없었던 경우에는, 등록불능이기 때문에, 그 RW엔트리부터 BOTTOM까지에 대응하는 RB엔트리를 모두 무효화한다.
(루프를 포함하는 다중 재이용)
1레벨에서 상기와 같은 재이용 기구를 이용한 경우, 도 46(a)에 도시한 예로 말하면, 리프함수로서의 함수B나, 함수B의 내부에 있는 루프C 등을 각각 재이용하는 것이 가능하게 된다. 이것에 비해서, 어떤 함수를 한번 실행한 것만으로, 그 함수의 내부에 포함되는 함수나 루프를 포함하는 모든 명령구간이 재이용 가능하게 되도록 등록을 행하는 구조가 다중 재이용이다. 가령, 상기 예로 말하면, 다중 재이용에 의하면, 함수A를 한번 실행한 것만으로, 포함 관계에 있는 A, B, C의 모든 명령구간이 재이용 가능하게 된다. 이하에, 다중 재이용을 실현하는 이상 필요로 하는 기능확장에 대해서 설명한다.
함수A 및 함수D의 개념적인 구조에 대해서는, 상술한 도 6에 도시한 바와 같다. 도 6에 도시한 함수A, D 및 루프 B, C, E, F의 포함관계 구조에 있어서, 내측 구조의 레지스터 입출력(굵은선 틀 셀영역)이, 외측 구조의 레지스터 출력으로 되는 영향범위(화살표)에 대해서도, 상술한 도 7에 도시한 바와 같이,
이상의 점으로부터, 다중 재이용을 실현하려면, 상술한 RF 및 RB를 함수나 루프의 포함관계 구조와 관련짖는 기구가 필요하다. 도 30에 도시한 바와 같이, 재이용 윈도우(RW)를 장비함으로써, 현재 실행중이면서 등록중인 RF 및 RB의 각 엔트리(도면에서는 A, B, C로 나타냄)를 스택구조로서 유지한다. 함수나 루프의 실행 중에는, RW에 등록되어 있는 모든 엔트리에 대해서, 이제까지 언급한 방법에 의거해서 레지스터 및 주기억 참조를 등록해 간다.
이 때, 어떤 엔트리에 관해서, (1) 등록가능 항목수의 초과, (2) 인수의 제 7워드 검출, (3) 시스템 콜의 검출에 의해서 재이용 가능하다고 판단하였을 경우에는, RW를 이용하여 그 엔트리에 대응하는 RB 및 상위 RB를 특정하고, 등록을 중지할 수 있다.
또, RW의 탐색은 유한한 것이지만, 한번에 등록가능한 다중도를 넘어서 함수나 루프를 검출한 경우에는, 외측의 명령구간부터 순차 등록을 중지하고, 보다 내측의 명령구간을 등록대상에 추가함으로써, 포함관계의 동적변화에 뒤따를 수 있다. 또, 실행 및 등록중(가령 A)에, 재이용가능한 명령구간(가령 D)을 만난 경우에는 등록완료의 입출력을 그대로 등록중인 엔트리에 추가함으로써, RW의 깊이를 넘는 A의 다중 재이용도 가능하게 된다.
(병렬 사전 실행)
실시예 1에 있어서 나타낸 바와 같이, 다중 재이용을 행하는 프로세서로서의 MSP(1A)와는 별도로, 명령구간의 사전 실행에 의해서 RB 엔트리를 유효로 하는 프로세서로서의 SSP(1B)를 복수개 마련함으로써, 더욱 고속화를 꾀할 수 있다.
병렬 사전 실행 기구를 실행하기 위한 하드웨어 구성은, 상술한 도 25에 도시한 바와 같은 구성으로 된다. 이 도에 도시한 바와 같이, RW(4W·4B), 연산기(5A·5B), 레지스터(6A·6B), 캐시(7A·7B)는 각 프로세서마다 독립해서 마련되어 있는 한편, RF/RB(2'), 및 주기억(3)은 모든 프로세서가 공유하도록 되어 있다. 이 도에 있어서, 파선은 MSP(1A) 및 SSP(1B)가 RF/RB(2')에 대해서 입출력을 등록하는 패스를 나타내고 있다.
여기서, 병렬 사전 실행을 실현하는데 있어서의 과제는, (1) 어떻게 주기억 일관성을 유지하는가, (2) 어떻게 입력을 예측하는가를 들 수 있다. 이하에, 이들 문제에 대한 해결방법에 대해서 설명한다.
(주기억 일관성에 관한 문제 해결방법)
먼저, 상기 첫 번째 과제인 (1) 어떻게 주기억 일관성을 유지하는가에 대해서 설명한다. 특히 예측한 입력 파라미터에 의거해서 명령구간을 실행할 경우, 주기억(3)에 라이트하는 값이 MSP(1A)와 SSP(1B)로 다르게 된다. 이것을 해결하기 위해서, 도 25에 도시한 바와 같이, SSP(1B)는 RB로의 등록대상이 되는 주기억 참조에는 RF/RB(2'), 또, 그 밖의 국소적인 참조에는 SSP(1B)마다 마련한 국소 메모리로서의 Local(7B)을 사용하는 것으로 하고, Cache(7B) 및 주기억(3)으로의 라이트를 필요로 하고 있지 않다. 또, MSP(1A)가 주기억(3)에 대해서 라이트를 행한 경우에는 대응하는 SSP(1B)의 캐시라인이 무효화된다.
구체적으로는, RF/RB(2')로의 등록대상 중, 리드가 선행하는 어드레스에 대해서는 주기억(3)을 참조하여, MSP(1A)와 마찬가지로 어드레스 및 값을 RB에 등록한다. 이후, 주기억(3)이 아닌 명령구간 기억부(2)를 참조함으로써, 다른 프로세서로부터의 덮어쓰기에 의한 모순의 발생을 피할 수 있다. 국소적인 참조에 대해서, 리드가 선행한다고 하는 것은, 변수를 초기화하지 않고 사용하는 것에 상당하며, 값은 불확정이라도 되므로, 주기억(3)을 참조할 필요는 없다.
또, 국소 메모리로서의 Local(7B)의 용량은 유한하며, 함수 프레임의 크기가 Local(7B)의 용량을 넘는 경우 등, 실행을 계속할 수 없는 경우는, 사전 실행을 중단하도록 한다. 또, 사전 실행 결과는 주기억(3)에 라이트되지 않으므로, 사전 실행 결과를 사용하여, 추가로 다음의 사전 실행을 행할 수는 없다.
(예측기구)
다음에, 상기 두 번째 과제인 (2) 어떻게 입력을 예측하는 가에 대해서 설명한다. 사전 실행할 때에는, RB의 사용이력에 의거해서 장래의 입력을 예측하고, SSP(1B)에 건내줄 필요가 있다. 이를 위해서, RF/RB(2')에는 예측처리부(2B)가 마련되어 있다. 이 예측처리부(2B)는 RF의 각 엔트리마다 마련한 작은 프로세서에 의해서 구성되고, MSP(1A)나 SSP(1B)는 독립해서 입력 예측값을 구하도록 하는 것이다.
상술한 바와 같이, 종래의 입력예측에서는 RB에 있어서의 입력측에 등록된 모든 어드레스가 일률적으로 다루어짐으로써, 예측 적중률을 낮추는 결과가 되고 있다. 이 문제를 해결하기 위해서는 예측이 적중할 가능성이 높은 어드레스와, 예 상이 빗나갈 가능성이 높은 어드레스를 구별함과 동시에, 값의 변화에도 착안해서 필요 최소한의 어드레스만을 예측대상으로 하는 것이 필요하다.
예측이 적중할 것으로 기대할 수 있는 어드레스란, 어드레스가 고정되어 있고, 또 값이 단조롭게 변화하는 어드레스이다. 이와 같은 어드레스에는 라벨에 의해서 참조되는 대역변수, 및 스택 포인터나 프레임 포인터가 베이스 레지스터로서 참조되는 국소변소(프레임내 변수) 등이 있다.
이들 어드레스를 식별하기 위해서, 로드명령 실행시의 어드레스 계산이 참조하는 레지스터에 정수 플래그(Const+FLAG)가 마련된다. 스택 포인터나 프레임 포인터로서 이용하는 레지스터에 대해서는 무조건 정수 플래그가 세트되는 것으로 한다. 그 밖의 레지스터에 대해서는 정수를 세트하는 명령이 실행되었을 때에 정수 플래그(Const-FLAG)가 세트되는 것으로 한다.
다음에, 과거에 참조한 어드레스 중, 한번도 라이트가 행해지지 않은 어드레스에 대해서는, 내용이 변화되지 않은 것이 보증됨으로써, 이와 같은 어드레스에 대해서는 예측할 필요가 없게 된다. 따라서, 이와 같은 어드레스를 구별하기 위해서, 라이트가 행해진 것을 나타내는 변경 플래그(C-FLAG)가 마련된다. 입력요소로서의 어드레스를 RF/RB에 신규로 기록할 때에는, 그 어드레스에 대응하는 변경 플래그(C-FLAG)가 리셋되고, 등록후에 그 어드레스에 대해 스토어 명령이 실행되었을 때에, 변경 플래그(C-FLAG)가 세트된다.
또, 입력요소로서의 어드레스를 이력 보존대상으로 하는지 아닌지를 나타내는 이력 마스크(P-Mask)가 마련된다. 입력요소로서의 어드레스를 RF/RB에 신규로 기록할 때에는, 그 어드레스에 대응하는 이력 마스크(P-Mask)(이력 플래그)가 리셋된다. 그리고, 로드 명령 실행시에, 그 어드레스를 생성한 레지스터에 대응하는 정수 플래그(Const-FLAG)가 세트되어 있는 경우에는, 이력 마스크(P-Mask) 중, 로드대상이 된 바이트 위치가 세트된다.
이상의 정수 플래그(Const-FLAG), 변경 플래그(C-FLAG), 및 이력 마스크(P-Mask)의 설정 제어는, RF/RB(2')에 마련되어 있는 RB 등록처리부(2A)에 의해서 행해진다. 이 RB 등록처리부(2A)는 작은 프로세서에 의해서 구성되고, 상기와 같은 판단을 행함으로써 정수 플래그(Const-FLAG), 변경 플래그(C-FLAG) 및 이력 마스크(P-Mask)의 설정을 행한다.
(명령구간의 실행예)
여기서, 명령구간의 일예로서, 도 49에 도시한 명령구간이, 도 24에 도시한 RF 및 RB의 구성에 의해서 실행된 경우의 예에 대해서 설명한다. 이 도에 있어서, PC는 그 명령구간이 개시되었을 때의 PC값을 나타내고 있다. 즉, 명령구간의 선두가 1000번지로 되어 있다. 또, 도 31은 도 49에 도시한 명령구간이 실행된 경우의 RB에 있어서의 실제 등록상황을 나타내고 있다.
제 1명령에 있어서, 어드레스 정수(A1)가 레지스터(R0)에 세트된다. 이 명령은 정수를 세트하는 명령이므로, 레지스터(R0)에 대응하는 정수 플래그(Const-FLAG)가 세트된다.
제 2명령에 있어서, 레지스터(R0)의 내용을 어드레스로 하는 주기억(3)에서 로드된 4바이트 데이터(00110000)가 레지스터(R1)에 저장된다. 이 경우, 어드레 스(A1), 마스크(FFFFFFFF), 데이터(00110000)는 입력으로서 RB에 있어서의 Input측 제 1열에 등록되고, 레지스터 번호 R1, 마스크(FFFFFFFF), 및 데이터(00110000)는 출력으로서 RB에 있어서의 Output측 제 1열에 등록된다.
또, 어드레스로서 이용한 레지스터(RO)에 대응하는 정수 플래그(Const+FLAG)가 세트되어 있으므로, 어드레스(A1)에 대응하는 이력 마스크(P-Mask)가 세트된다. 여기서, 대상이 되는 데이터는 (00110000)의 4바이트 데이터이므로, 이것에 대응해서 어드레스(A1)에 대응하는 이력 마스크(P-Mask)에는 (FFFFFFFF)가 세트된다. 그리고, 레지스터(R1)는 정수가 세트되는 것은 아닌 것으로 되므로, 레지스터(R1)에 대응하는 정수 플래그(Const-FLAG)가 리셋된다.
제 3명령에 있어서, 어드레스 정수(A2)가 레지스터(R0)에 세트된다. 이 명령은 정수를 세트하는 명령이므로, 레지스터(R0)에 대응하는 정수 플래그(Const-FLAG)가 세트된다.
제 4명령에 있어서, 레지스터(R0)의 내용을 어드레스로 하는 주기억(3)에서 로드된 1바이트 데이터(02)가 레지스터(R2)에 저장된다. 이 경우, 어드레스(A2),마스크(FF000000), 및 데이터(02)는 입력으로서 RB에 있어서의 Input측 제 2열에 등록된다. 이 때, 어드레스(A2)의 나머지 3바이트에 대해서는 Don't Care를 의미하는 「-」가 저장된다. 레지스터 번호(R2), 마스크(FFFFFFFF) 및 데이터(00000002)는 출력으로서 RB에 있어서의 Output측 제 2열에 등록된다.
또, 어드레스로서 이용한 레지스터(R0)에 대응하는 정수 플래그(Const-FLAG)가 세트되어 있으므로, 어드레스(A2)에 대응하는 이력 마스크(P-Mask)가 세트된다. 여기서, 대상이 되는 데이터는 (02)의 1바이트 데이터이므로, 이것에 대응해서, 어드레스(A2)에 대응하는 이력 마스크(P-Mask)에는 (FF000000)가 세트된다. 그리고, 레지스터(R2)는 정수가 세트되는 것은 아닌 것으로 되므로, 레지스터(R2)에 대응하는 정수 플래그(Const-FLAG)는 리셋된다.
제 5명령에 있어서, 어드레스(A2+R2)에서 로드된 1바이트 데이터(22)가 레지스터(R2)에 저장되어 있다. 어드레스(R2)의 값은 (02)이었으므로, 어드레스(A2+02), 및 데이터(22)가, 입력으로서 RB에 있어서의 Input측 제 2열에 추가로 등록된다. 이 때, 어드레스(A2+02) 부분에 등록이 행해지고, 어드레스(A2+01) 및 (A2+03)에 대응하는 부분은, Don't Care를 의미하는 [-]인 채로 된다. 즉, 어드레스(A2)에 대응하는 마스크는 (FF00FF00)로 된다. 레지스터 번호(R2), 마스크(FFFFFFFF), 및 데이터(00000022)는 출력으로서 RB에 있어서의 Output측 제 2열에 덮어쓰기된다.
또, 어드레스로서 이용한 레지스터(R2)에 대응하는 정수 플래그(Const-FLAG)가 세트되어 있으므로, 어드레스(A2+02)에 대응하는 이력 마스크(P-Mask)는 세트되지 않는다. 즉, 어드레스(A2)에 대응하는 이력 마스크(P-Mask)는 (FF000000)인 채로 된다. 그리고, 레지스터(R2)는 정수가 세트되는 것은 아닌 것으로 되므로, 레지스터(R2)에 대응하는 정수 플래그(Const-FLAG)가 세트된다.
제 6명령에 있어서, 어드레스 정수(A3)가 레지스터(R0)에 세트된다. 이 명령은 정수를 세트하는 명령이므로, 레지스터(R0)에 대응하는 정수 플래그(Const-FLAG)가 세트된다.
제 7명령에 있어서, 레지스터(R0)의 내용을 어드레스로 하는 주기억(3)에서 로드된 1바이트 데이터(33)가 레지스터(R3)에 저장된다. 이 경우, 어드레스(A3), 마스크(00FF0000), 및 데이터(33)는 입력으로서 RB에 있어서의 Input측 제 3열에 등록된다. 레지스터 번호(R3), 마스크(FFFFFFFF), 및 데이터(00000033)는 출력으로서 RB에 있어서의 Output측 제 3열에 등록된다.
또, 어드레스로서 이용한 레지스터(R0)에 대응하는 정수 플래그(Const-FLAG)가 세트되어 있으므로, 어드레스(A3)에 대응하는 이력 마스크(P-Mask)는 세트된다. 여기서, 대상이 되는 데이터는 (33)의 1바이트 데이터이므로, 이것에 대응해서, 어드레스(A3)에 대응하는 이력 마스크(P-Mask)에는 (00FF0000)이 세트된다. 그리고, 레지스터(R3)는 정수가 세트되는 것은 아닌 것으로 되므로, 레지스터(R3)에 대응하는 정수 플래그(Const-FLAG)는 리셋된다.
제 8명령에 있어서, 어드레스(R1+R2)에서 로드된 1바이트 데이터(44)가 레지스터(R4)에 저장된다. 이 경우, 어드레스(R1)와 어드레스(R2)는 명령구간의 내부에서 덮어쓰기된 레지스터 어드레스가 되므로, 어드레스(R1) 및 어드레스(R2)는 명령구간의 입력으로는 되지 않는다. 한편, 어드레스(R1+R2)에 의해서 생성된 어드레스(A4)는 명령구간의 입력이므로, 어드레스(A4), 마스크(00FF0000), 및 데이터(44)는 입력으로서 RB에 있어서의 Input측 제 4열에 등록된다. 레지스터 번호(R4), 마스크(FFFFFFFF), 및 데이터(00000044)는 출력으로서 RB에 있어서의 Output측 제 4열에 등록된다.
또, 어드레스로서 이용한 레지스터(R1) 및 레지스터(R2)에 대응하는 정수 플 래그(Const-FLAG)가 세트되어 있으므로, 어드레스(A4)에 대응하는 이력 마스크(P-Mask)는 세트되지 않는다. 즉, 어드레스(A4)에 대응하는 이력 마스크(P-Mask)는 (00000000)인 채로 된다. 그리고, 레지스터(R4)는 정수가 세트되는 것은 아닌 것으로 되므로, 레지스터(R4)에 대응하는 정수 플래그(Const-FLAG)가 리셋된다.
제 9명령에 있어서, 레지스터(R5)로부터 값이 리드되고, 리드된 값에 1이 더해진 결과가 다시 레지스터(R5)에 저장된다. 이 경우, 레지스터(R5), 마스크(FFFFFFFF), 및 데이터(00000100)는 입력으로서 RB에 있어서의 Input측 제 5열에 등록된다. 또, 레지스터 번호(R5), 마스크(FFFFFFFF), 및 데이터(00000101)는 출력으로서 RB에 있어서의 Output측 제 5열에 등록된다. 이 때, 레지스터(R5)는 정수가 세트되는 것은 아닌 것으로 되므로, 레지스터(R5)에 대응하는 정수 플래그(Const-FLAG)는 리셋된다.
그 후, 어드레스(A2), 및 어드레스(A3)에 대해서 스토어 명령이 실행되고, 어드레스(A2), 및 어드레스(A3)에 대해서 변경 플래그(C-FLAG)가 세트되는 것으로 한다.
이상의 결과, 변경 플래그(C-FLAG)가 세트되고, 또 이력 마스크(P-Mask)가 세트된 마스크 위치는 어드레스(A2)의 제 1바이트, 어드레스(A3)의 제 2바이트만으로 된다. 이 마스크 위치에만 대응하는 어드레스, 마스크, 및 값이 예측대상으로서, 명령구간마다 과거의 입력이력을 유지하는 이력정보로서, RB의 엔트리에 기록된다. 또, RB의 입력패턴에 등록된 레지스터에 대해서는 무조건 예측대상으로서의 이력이 기록된다.
도 32는 도 49에 도시한 명령구간이 반복 실행된 경우에 있어서의 이력으로서 RB에 등록된 예를 나타내고 있다. 이 도에 도시한 바와 같이, RB에는 어드레스(R2)의 열에 이력 마스크(P-Mask)로서 (FF000000), 어드레스(A3)의 열에 이력 마스크(P-Mask)로서 (00FF0000), 및 어드레스(R5)열에 이력 마스크(P-Mask)로서 (FFFFFFFF)가 기록된다. 그리고, Time이 1∼4로 변화하는 동안에, 각 어드레스에 있어서의 이력 마스크(P-Mask)에 대응하는 값이 변화하게 된다. 각 이력 간에 표시되는 diff는 대응하는 입력요소 값의 변화량(차분)을 나타내고 있다. 이 diff는 예측처리부(2B)에 의해서 산출된다.
상기 도에 도시한 예에 있어서, 어드레스(A2) 및 어드레스(R5)의 열에 관해서는, Time이 1∼4로 변화하는 동안에 있어서의 diff가 모두 01로 되어 있다. 따라서, 이들 어드레스에 대응하는 값은, 단위시간당 01씩 증가해 갈 것으로 예상된다. 한편, 어드레스(A3)의 열에 관해서는 Time이 1∼4로 변화하는 동안에, diff는 00이거나 02로 되어 있다. 그러므로, 어드레스(A3)에 관해서는 예측하는 것이 곤란하다는 것을 알 수 있다.
이상으로부터, 예측처리부(2B)는 이력에 있어서, 차분이 일정하게 되어 있는 어드레스에 관해서, 그 차분이 그 후에도 계속되는 것으로 가정해서 예측을 행함과 동시에, 차분이 일정하지 않거나, 차분이 0으로 되어 있는 어드레스에 관해서는 예측을 행하지 않도록 한다.
도 33은 상기 예측에 의거해서, 예측처리부(2B)가 어드레스(A2) 및 어드레스(R5)의 값에 관해서 예측을 행한 경우의, 예측 엔트리로서 RB에 기록되는 입력요 소의 상태를 나타내고 있다. 이 도에 있어서, 어드레스(A2+4) 및 어드레스(A3)에 관해서는 예측값을 구하지 않고 직접 주기억(3)을 참조함으로써 얻어진 것으로 되어 있다.
이와 같이, 입력요소의 예측값이 산출되면, SSP(1B)가, 이 예측 입력요소에 의거해서 명령구간을 실행함으로써 출력요소가 산출되고, 이 예측 출력요소가 예측 엔트리로서 RB에 기억된다. 그 후, MSP(1A)에 의해서 명령구간이 실행되고, 예측 엔트리로서 RB에 기억되어 있는 예측 입력요소와 동일 입력값이 입력된 경우에, 그에 대응하는 예측 출력요소를 출력함으로써 재이용이 실현된다.
(RF/RB의 제 2구성예)
다음에, RF/RB(2')의 제 2구성예에 대해서 설명한다. 제 2구성예로서 RF/RB(2')는 실시예 1에 있어서, 도 1로서 도시한 명령구간 기억부(2)와 동일한 구성으로 되어 있다. 즉, 제 2구성예로서 RF/RB(2')는 RB, RF, RO1(제 2출력패턴 기억수단) 및 RO2(제 1출력패턴 기억수단)를 구비한 구성으로 되어 있다. 각 구성 및 동작에 대해서는 상술한 내용과 동일하므로, 여기서는 그에 대한 설명을 생략한다.
(제 2구성예에 있어서의 예측기구)
제 2구성예에서는 명령구간의 실행시에 있어서의 입출력패턴을 일시적으로 저장하는 장소는 RW(4A·4B)로 된다 여기서, 상술한 제 1구성예에서는 명령구간의 실행시에 있어서의 입출력패턴이 RB에 직접 등록되어 있으므로, RW(4A·4B)는 RB의 각 행에 대한 포인터에 의해서 실현되어 있다. 이것에 비해서, 제 2구성예에서는 RF 및 RB가 트리구조에 의해서 구성되어 있으므로, RW(4A·4B)가 직접 RB의 행을 포인트할 수 있다. 즉, 제 2구성예에서, RW(4A·4B)는 RB의 각 행에 대한 포인터로서 기능하는 것은 아니며, 명령구간의 실행시에 있어서의 입출력패턴을 일시적으로 저장하는 실질적인 메모리로서 기능하게 된다.
또, 제 2구성예에 있어서도, 소정의 명령구간이 반복 실행된 경우에 있어서의 입력패턴의 이력 엔트리를 저장하는 일시 저장메모리 영역으로서, 도 24에 도시한 바와 같이, RF 및 RB가 마련되어 있다. 단, 이 경우에, RB에 있어서의 엔트리의 행은, 이력 엔트리를 저장하는 이력 저장행으로서의 수개의 행에 의해서 구성된다.
명령구간이 실행되면, 그 입력요소가 RW(4A·4B)에 순차 저장되고, 모든 입력요소가 모아져서, 연산이 행해짐으로써 출력요소가 확정되면, 이 입출력패턴이 상기 이력 저장행에 저장됨과 동시에, 상기와 같은 트리구조의 입출력패턴 저장기구에 저장된다.
또, 소정의 명령구간이 반복 실행된 경우에는, 이력 저장행에 순차 저장되고, 소정 수의 이력이 저장된 시점에서, 상기와 같이 예측처리부(2B)에 의해서 예측이 행해지고, 예측에 의거해서 SSP(1B)에 의해서 실행된 결과는 상기와 같은 트리구조의 입출력패턴 저장기구에 저장된다.
<실시예 3>
본 발명의 또 다른 실시예에 대해서 도면에 의거하여 설명하면 이하와 같다.
(데이터 처리장치의 구성)
본 실시예에 관계되는 데이터 처리장치의 개략 구성을 도 35에 나타낸다. 이 도에 도시한 바와 같이, 그 데이터 처리장치는, MSP(1A), SSP(1B), 재이용표로서의 명령구간 기억부(입출력 기억수단)(2) 및 주기억(주기억수단)(3)을 구비한 구성으로 되어 있고, 주기억(3)에 기억되어 있는 프로그램 데이터 등을 리드해서 각종 연산처리를 행하며, 연산결과를 주기억(3)에 라이트하는 처리를 행하는 것이다. 또, 이 도에 도시한 구성에서는 SSP(1B)를 하나 구비한 구성으로 되어 있으나, 2개 이상 구비한 구성으로 되어 있어도 된다.
명령구간 기억부(2)는, 프로그램에 있어서의 함수 및 루프를 재이용하기 위한 데이터를 저장하는 메모리수단으로, RF, RB, RB 등록처리부(등록처리수단)(2A) 및 예측처리부(예측처리수단)(2B)을 구비한 구성으로 되어 있다. 이 명령구간 기억부(2)에 있어서의 RF 및 RB의 상세, 및 RB 등록처리부(2A)와 예측처리부(2B)의 상세에 대해서는 후술한다.
주기억(3)은 MSP(1A) 및 SSP(1B)의 작업영역으로서의 메모리로, 가령 RAM 등에 의해서 구성되는 것이다. 가령, 하드디스크 등의 외부 기억수단으로부터 프로그램이나 데이터 등이 주기억(3)에 리드되고, MSP(1A) 및 SSP(1B)는 주기억(3)에 리드된 데이터에 의거해서 연산을 행하게 된다.
MSP(1A)는 RW(재이용 기억수단)(4A), 연산기(제 1연산수단)(5A), 레지스터(6A), 및 Cache(7A), 및 통신부(9A)를 구비한 구성으로 되어 있다. 또, SSP(1B)는 RW(재이용 기억수단)(4B), 연산기(제 2연산수단)(5B), 레지스터(6B), Cache/Local(7B), 판정부(8B), 및 통신부(9B)를 구비한 구성으로 되어 있다.
RW(4A·4B)는 재이용 윈도우로, 현재 실행중이면서 등록중인 RF 및 RB(후술함)의 각 엔트리를 링구조의 스택으로서 유지하는 것이다. 이 RW(4A·4B)는 실제 하드웨어 구조로서는, 명령구간 기억부(2)에 있어서의 특정 엔트리를 액티브로 하는 제어선의 집합에 의해서 구성된다.
연산기(5A·5B)는 레지스터(6A·6B)에 유지되어 있는 데이터에 의거해서 연산처리를 행하는 것으로, ALU라 불리는 것이다. 레지스터(6A·6B)는 연산기(5A·5B)에 의해서 연산을 행하기 위한 데이터를 유지하는 기억수단이다. 또, 본 실시예에 있어서, 연산기(5A·5B), 및 레지스터(6A·6B)는 SPARC 아키텍처에 준하는 것으로 한다. Cache(7A·7B)는 주기억(3)과, MSP(1A) 및 SSP(1B)의 사이에서 캐시 메모리로서 기능하는 것이다. 또, SSP(1B)에서는, Cache(7B)에 국소 메모리로서 Local(7B)이 포함되어 있는 것으로 한다.
판정부(8B)는 후술하는 사전 실행의 기동개시 후의 주기억 리드가 행해질 때에, RB에 있어서의 입출력 기록행(후술), 예측값 저장영역(후술), 대기용 어드레스 저장영역(후술), 및 Cache/Local(7B) 중, 어디에서 값을 리드할지를 판정하는 블록이다. 이 판정처리의 상세에 대해서는 후술한다. 이 판정부(8B)는 SSP(1B) 내에 마련된 작은 프로세서에 의해서 실현된다.
통신부(9A·9B)는 MPS(1A) 또는 SSP(1B)에 의해서 주기억 라이트가 행해질 경우에, 그 뜻을 그 밖의 모든 SSP(1B)…또는 MSP(1A)에 대해서 통지하는 블록이다. 이 통신부(9A·9B)는 MSP(1A) 또는 SSP(1B) 내에 마련된 작은 프로세서에 의해서 실현된다.
(RF/RB의 구성)
도 34는 본 실시예에 있어서의 명령구간 기억부(2)에 있어서의 RF 및 RB의 구성에 대한 개요를 나타내고 있다. 이 도에 도시한 바와 같이, RF는 복수의 엔트리를 저장하고 있고, 각 엔트리에 대해서, 그 엔트리가 유효인지 아닌지를 나타내는 V, 엔트리 교체 힌트를 나나태는 LRU, 함수의 선두 어드레스를 나타내는 Start, 참조해야 할 주기억 어드레스를 나타내는 Read/Write, 및 함수와 루프를 구별하는 F/L을 유지하고 있다.
또, RB는 RF에 저장되어 있는 엔트리에 대응해서 복수의 엔트리를 저장하고 있고, 각 엔트리에 대해서, 그 엔트리가 유효인지 아닌지를 나타내는 V, 엔트리 교체 힌트를 나타내는 LRU, 함수 또는 루프의 호출시에 직전의 스택 포인트(%sp)를 나타내는 SP, 인수(Args.)(V:유효 엔트리, Val.:값), 주기억값(C-FLAG:Read 어드레스의 변경 플래그, P-Mask:Read 어드레스의 이력 마스크, Mask:Read/Write 어드레스의 유효 바이트, Value:값, S-Count:Read/Write 어드레스의 스토어 카운터), 리턴값(Return Values)(V:유효 엔트리, Val.:값), 루프의 종료 어드레스(End), 루프 종료시의 분기방향을 나타내는 taken/not, 및 인수나 리턴값 이외의 레지스터 및 조건 코드(Regs., CC)를 유지하고 있다. 또, RB는 하나 이상의 레지스터 어드레스에 대응한 정수 플래그(Const-FLAG)를 저장하는 메모리 영역을 유지하고 있다. 또, 정수 플래그(Const-FLAG)의 상세에 대해서는 후술한다.
상기 RF 및 RB에 있어서의 각 항목에 대해서 보다 상세하게 설명한다. 상기 V는 상술한 바와 같이, 엔트리가 유효인지 아닌지를 나타내는 것이지만, 구체적으로, 미등록시에는 「0」, 등록중인 경우에는 「2」, 등록완료인 경우에는 「1」의 값이 저장되도록 되어 있다. 가령, RF 또는 RB를 확보할 때에, 미등록 엔트리(V=0) 가 있으면 이것을 사용하고, 미등록 엔트리가 없으면, 등록완료 엔트리(V=1) 중에서 LRU가 최소인 것을 선택해서 덮어쓰기하게 된다. 등록중인 엔트리(V=2)는 사용중이므로, 덮어쓰기할 수는 없다.
상기 LRU는 일정시간 간격으로 우측으로 시프트되어 가는 시프트 레지스터 중의 「1」의 개수를 나타내는 것이다. RF의 경우, 이 시프트 레지스터는 해당 엔트리에 관해서, 재이용을 위한 등록을 행하였거나, 또는 재이용을 시도한 경우에 좌측단에 「1」이 라이트되도록 되어 있다. 그러므로, 해당 엔트리가 빈번하게 사용되면, LRU는 큰 값으로 되며, 일정기간 사용되지 않으면 LRU 값은 0으로 된다. 한편, RB의 경우, 시프트 레지스터에는 해당 엔트리가 재이용된 경우에 「1」이 라이트되도록 되어 있다. 그러므로, 해당 엔트리가 빈번하게 사용되면 LRU는 큰 값으로 되고, 일정기간 사용되지 않으면 LRU는 0으로 된다.
상기 RB에 있어서의 주기억 값의 Mask에 대해서 설명한다. 일반적으로, 어드레스와 데이터를 1바이트씩 관리하게 되면 관리가 가능하지만, 실제로는 4바이트 단위로 데이터를 관리하는 편이 캐시 참조를 고속으로 행할 수 있다. 그래서, RF에서는 주기억 어드레스를 4의 배수로 기억하도록 되어 있다. 한편, 관리단위를 4바이트로 할 경우, 1바이트분만큼을 로드하는 것에 대응할 수 있도록 하기 위해서, 4바이트 중 어느 바이트가 유효한지를 나타낼 필요가 있다. 즉, Mask는 4바이트 중에서 어느 바이트가 유효한지를 나타내는 4바이트 데이터로 되어 있다. 가령, C001 번지로부터 1바이트분을 로드한 결과, 값이 E8인 경우, RF에는 어드레스(C000)가 등록되고, RB의 Mask에 「0100」, Value에 「00E80000」이 등록된다. 또, Read 어 드레스에 있어서의 변경 플래그(C-FLAG) 및 이력 마스크(P-MASK), 및 Read/Write 어드레스에 있어서의 스토어 카운트(S-Count)의 상세에 대해서는 후술한다.
상기 인수나 리턴값 이외의 레지스터 및 조건 코드(Regs., CC)에 대해서 설명한다. 본 실시예에서는 SPARC 아키텍처 중, 범용 레지스터(%g0-7, %o0-7, %l0-7, %i0-7), 부동 소수점 레지스터(%f0-31), 조건코드 레지스터(ICC), 부동 소수점 코드 레지스터(FCC)를 이용하도록 되어 있다(상세는 후술함). 이 중, 리프함수의 입력은 범용 레지스터(%o0-5), 출력은 범용 레지스터(%o0-1), 또 비(非)리프함수의 입력은 범용 레지스터(%i0-5), 출력은 범용 레지스터(%i0-1)로 되고, 입력은 arg「0-5」, 출력은 rti「0-1」에 등록된다. SPARC-ABI의 규정에서는 이들 이외의 레지스터는 함수의 입출력으로는 되지 않으므로, 함수에 관해서는 RB에 있어서의 인수(Args.)의 항으로 충분하다.
한편, SPARC-ABI의 규정에서는, 루프의 입출력에 관해서, 이용되는 레지스터의 종류를 특정할 수는 없으므로, 루프의 입출력을 특정하려면, 모든 종류의 레지스터에 관해서 RB에 등록할 필요가 있다. 따라서, RB에 있어서의 Regs., CC에는 %g0-7, %o0-7, %l0-7, %i0-7, %f0-31, ICC, FCC가 등록되도록 되어 있다.
이상과 같이, 명령구간 기억부(2)에 있어서, Read 어드레스는 RF가 일괄 관리하고, Mask 및 Value는 RB가 관리하고 있다. 이것에 의해, Read 어드레스의 내용과 RB의 복수 엔트리를 CAM에 의해서 한번에 비교하는 구성을 가능하게 하고 있다.
또, 도 35에 도시한 바와 같이, 본 실시예에 있어서의 RB에는, 입출력 기록행(입출력 기록영역), 구간별 정보로서 이력 저장행(이력 저장영역), 예측값 저장 영역, 및 대기필요 어드레스 저장영역, 및 예측 실행결과 기록행이 마련되어 있다. 이들 입출력 기록행, 이력 저장행, 예측값 저장영역, 및 대기필요 어드레스 저장영역, 및 예측 실행결과 기록행은 도 34에 도시한 RB에 있어서의 엔트리에 거의 준하는 형식으로 실현되지만, 각각 저장형식이 약간 다르게 되어 있다. 이들 저장형식의 상세에 대해서는 후술한다.
(재이용 처리의 개략)
함수 및 루프의 각각의 경우에 관한 재이용 처리의 개요에 대해서는, 실시예 2에 있어서의 (재이용 처리의 개략)에서 설명한 내용과 동일하므로, 여기서는 그에 대한 설명을 생략한다.
(명령구간 실행시에 있어서의 처리 흐름)
명령이 디코드된 경우의 구체적인 처리 흐름에 관해서도, 실시예 2에 있어서의 (명령구간 실행시에 있어서의 처리 흐름)에서 설명한 내용과 동일하므로, 여기서는 그에 대한 설명을 생략한다. 또, 명령이 디코드된 결과, 함수 호출명령이 있는 경우, 함수 복귀명령인 경우, 후방분기 성립의 경우, 후방분기 불성립의 경우, 및 기타 명령의 경우에 대해서, 각각의 처리 흐름에 관해서도, 상술한 실시예 2에서 설명한 내용과 동일하다.
(루프를 포함하는 다중 재이용)
루프를 포함하는 다중 재이용에 관해서도, 실시예 2에 있어서의 (루프를 포함하는 다중 재이용)에서 설명한 내용과 동일하므로, 여기서는 그에 대한 설명을 생략한다.
(병렬 사전 실행)
상술한 바와 같이, 다중 재이용을 행하는 프로세서로서의 MSP(1A)와는 별도로, 명령구간의 사전 실행에 의해서 RB 엔트리를 유효로 하는 프로세서로서의 SSP(1B)를 복수개 마련함으로써, 더욱 고속화를 꾀할 수 있다.
병렬 사전 실행 기구를 실행하기 위한 하드웨어 구성은, 상술한 도 35에 도시한 바와 같은 구성으로 된다. 이 도에 도시한 바와 같이, RW(4W·4B), 연산기(5A·5B), 레지스터(6A·6B), 캐시(7A·7B)는 각 프로세서마다 독립해서 마련되어 있는 한편, 명령구간 기억부(2), 및 주기억(3)은 모든 프로세서가 공유하도록 되어 있다.
여기서, 병렬 사전 실행을 실현하는데 있어서의 과제는, (1) 어떻게 주기억 일관성을 유지하는가, (2) 어떻게 입력을 예측하는가를 들 수 있다. 이하에, 이들 문제에 대한 해결방법에 대해서 설명한다.
(주기억 일관성에 관한 문제 해결방법)
먼저, 상기 첫 번째 과제인 (1) 어떻게 주기억 일관성을 유지하는가에 대해서 설명한다. 특히 예측한 입력 파라미터에 의거해서 명령구간을 실행할 경우, 주기억(3)에 라이트하는 값이 MSP(1A)와 SSP(1B)로 다르게 된다. 이것을 해결하기 위해서, 도 35에 도시한 바와 같이, SSP(1B)는 RB로의 등록대상이 되는 주기억 참조에는 명령구간 기억부(2), 또, 그 밖의 국소적인 참조에는 SSP(1B)마다 마련한 국소 메모리로서의 Local(7B)을 사용하는 것으로 하고, Cache(7B) 및 주기억(3)으로의 라이트를 필요로 하고 있지 않다. 또, MSP(1A)가 주기억(3)에 대해서 라이트를 행한 경우에는 대응하는 SSP(1B)의 캐시라인이 무효화된다.
구체적으로는, RB(2)로의 등록대상 중, 리드가 선행하는 어드레스에 대해서는 주기억(3)을 참조하여, MSP(1A)와 마찬가지로 어드레스 및 값을 RB에 등록한다. 이후, 주기억(3)이 아닌 명령구간 기억부(2)를 참조함으로써, 다른 프로세서로부터의 덮어쓰기에 의한 모순의 발생을 피할 수 있다. 국소적인 참조에 대해서, 리드가 선행한다고 하는 것은, 변수를 초기화하지 않고 사용하는 것에 상당하며, 값은 불확정이라도 되므로, 주기억(3)을 참조할 필요는 없다.
또, 국소 메모리로서의 Local(7B)의 용량은 유한하며, 함수 프레임의 크기가 Local(7B)의 용량을 넘는 경우 등, 실행을 계속할 수 없는 경우는, 사전 실행을 중단하도록 한다. 또, 사전 실행 결과는 주기억(3)에 라이트되지 않으므로, 사전 실행 결과를 사용하여, 추가로 다음의 사전 실행을 행할 수는 없다.
(예측기구의 참고예)
다음에, 상기 두 번째 과제인 (2) 어떻게 입력을 예측하는 가에 대해서 설명한다. 사전 실행할 때에는, RB의 사용이력에 의거해서 장래의 입력을 예측하고, SSP(1B)에 건내줄 필요가 있다. 이를 위해서, 명령구간 기억부(2)에는 예측처리부(2B)가 마련되어 있다. 이 예측처리부(2B)는 RF의 각 엔트리마다 마련한 작은 프로세서에 의해서 구성되고, MSP(1A)나 SSP(1B)는 독립해서 입력 예측값을 구하도록 하는 것이다.
상술한 바와 같이, 종래의 입력예측에서는 RB에 있어서의 입력측에 등록된 모든 어드레스가 일률적으로 다루어짐으로써, 예측 적중률을 낮추는 결과가 되고 있다. 이 문제를 해결하기 위해서는 예측이 적중할 가능성이 높은 어드레스와, 예상이 빗나갈 가능성이 높은 어드레스를 구별함과 동시에, 값의 변화에도 착안해서 필요 최소한의 어드레스만을 예측대상으로 하는 것이 필요하다.
예측이 적중할 것으로 기대할 수 있는 어드레스란, 어드레스가 고정되어 있고, 또 값이 단조롭게 변화하는 어드레스이다. 이와 같은 어드레스에는 라벨에 의해서 참조되는 대역변수, 및 스택 포인터나 프레임 포인터가 베이스 레지스터로서 참조되는 국소변소(프레임내 변수) 등이 있다.
이들 어드레스를 식별하기 위해서, 로드명령 실행시의 어드레스 계산이 참조하는 레지스터에 정수 플래그(Const+FLAG)가 마련된다. 스택 포인터나 프레임 포인터로서 이용하는 레지스터에 대해서는 무조건 정수 플래그가 세트되는 것으로 한다. 그 밖의 레지스터에 대해서는 정수를 세트하는 명령이 실행되었을 때에 정수 플래그(Const-FLAG)가 세트되는 것으로 한다.
다음에, 과거에 참조한 어드레스 중, 한번도 라이트가 행해지지 않은 어드레스에 대해서는, 내용이 변화되지 않은 것이 보증됨으로써, 이와 같은 어드레스에 대해서는 예측할 필요가 없게 된다. 따라서, 이와 같은 어드레스를 구별하기 위해서, 라이트가 행해진 것을 나타내는 변경 플래그(C-FLAG)가 마련된다. 입력요소로서의 어드레스를 RF/RB에 신규로 기록할 때에는, 그 어드레스에 대응하는 변경 플래그(C-FLAG)가 리셋되고, 등록후에 그 어드레스에 대해 스토어 명령이 실행되었을 때에, 변경 플래그(C-FLAG)가 세트된다.
또, 입력요소로서의 어드레스를 이력 보존대상으로 하는지 아닌지를 나타내 는 이력 마스크(P-Mask)가 마련된다. 입력요소로서의 어드레스를 RF/RB에 신규로 기록할 때에는, 그 어드레스에 대응하는 이력 마스크(P-Mask)(이력 플래그)가 리셋된다. 그리고, 로드 명령 실행시에, 그 어드레스를 생성한 레지스터에 대응하는 정수 플래그(Const-FLAG)가 세트되어 있는 경우에는, 이력 마스크(P-Mask) 중, 로드대상이 된 바이트 위치가 세트된다.
이상의 정수 플래그(Const-FLAG), 변경 플래그(C-FLAG), 및 이력 마스크(P-Mask)의 설정 제어는, 명령구간 기억부(2)에 마련되어 있는 RB 등록처리부(2A)에 의해서 행해진다. 이 RB 등록처리부(2A)는 작은 프로세서에 의해서 구성되고, 상기와 같은 판단을 행함으로써 정수 플래그(Const-FLAG), 변경 플래그(C-FLAG) 및 이력 마스크(P-Mask)의 설정을 행한다.
(명령구간의 예)
여기서, 명령구간의 일예로서, 도 36(a)에 도시한 명령구간이 실행된 경우의 예에 대해서 설명한다. 이 도에 있어서, PC는 그 명령구간이 개시되었을 때의 PC값을 나타내고 있다. 즉, 명령구간의 선두가 1000번지로 되어 있다. 이 명령구간은 루프 구조로 되어 있고, 11개의 명령으로 구성되어 있다. 또, 도 36(b)는 상기 명령구간이 실행된 경우에, RB에 등록되는 입력 어드레스와 입력 데이터, 및 출력 어드레스와 출력 데이터를 간략화해서 나타내고 있다.
제 1행째 명령(이하, 간단히 제 1명령과 같이 칭함)에 있어서, 어드레스 정수(A1)가 레지스터(R1)에 세트된다. 제 2명령에 있어서, 레지스터(R1)의 내용을 이용해서, 어드레스(A1)의 내용(00010004)이 레지스터(Rx)에 로드된다.
제 3명령에 있어서, 어드레스 정수(A2)가 레지스터(R2)에 세트된다. 제 4 명령에 있어서, 레지스터(R2)의 내용을 이용하여, 어드레스(A2)의 내용(80000000)이 레지스터(Ry)에 로드된다.
제 5명령에 있어서, 레지스터(Rx)의 내용에서 4를 뺀 값을 어드레스로 하는 어드레스(A3)(00010000)의 내용(0000AAAA)이 레지스터(Rz)에 로드된다. 제 6명령에 있어서, 레지스터(Rx)의 내용에 4를 더한 값(00010008)이 레지스터(Rx)에 세트된다.
제 7명령에 있어서, 레지스터(Rx)의 내용(00010008)이, 레지스터(R1)의 내용을 이용하여 어드레스(A1)에 스토어된다. 제 8명령에 있어서, 레지스터(Ry)의 내용(80000000)을 우측으로 1비트 시프트된 값(40000000)이 레지스터(Ry)에 세트된다.
제 9명령에 있어서, 레지스터(Ry)의 내용(40000000)이, 레지스터(R2)를 이용하여 어드레스(A2)에 스토어된다. 제 10명령에 있어서, 레지스터(Ry)의 내용과 레지스터(Rz)의 내용을 더한 값(4000AAAA)이 레지스터(Rz)에 세트된다.
제 11명령에 있어서, 레지스터(Rz)의 내용(4000AAAA)이 레지스터(Rx)를 이용하여 어드레스(A4)에 스토어된다. 제 12명령에 있어서, 루프의 선두 어드레스로서의 1000번지에 처리가 분기된다.
상기의 제 12명령에 이어서 행해지는 제 2회째 루프처리의 예를 도 36(c)에 나타내고, 도 36(d)에는, 이 경우 RB에 등록되는 입력 어드레스와 입력 데이터, 및 출력 어드레스와 출력 데이터를 간략화해서 나타낸다. 또, 제 2회째 루프처리에 이 어서 행해지는 제 3회째 루프처리의 예를 도 3(e)에 나타내고, 도 36(f)에는, 이 경우 RB에 등록되는 입력 어드레스와 입력 데이터, 및 출력 어드레스와 출력 데이터를 간략화해서 나타낸다.
이상과 같이, 루프 제 1회째에서는 어드레스(A1)의 값(00010004), 어드레스(A2)의 값(80000000), 어드레스(00010000)의 값(0000AAAA)이 입력으로 되어 있고, 레지스터(Rx)의 값(00010008), 레지스터(Ry)의 값(40000000), 레지스터(Rz)의 값(4000AAAA), 어드레스(A1)의 값(00010008), 어드레스(A2)의 값(40000000), 어드레스(00010004)의 값(4000AAAA)이 출력으로 되어 있다.
또, 루프 2회째에서는 어드레스(A1)의 값(00010008), 어드레스(A2)의 값(40000000), 어드레스(00010004)의 값(4000AAAA)이 입력으로 되어 있고, 레지스터(Rx)의 값(0001000C), 레지스터(Ry)의 값(20000000), 레지스터(Rz)의 값(6000AAAA), 어드레스(A1)의 값(0001000C), 어드레스(A2)의 값(20000000), 어드레스(00010008)의 값(6000AAAA)이 출력으로 되어 있다.
이상의 처리에 있어서, 주목해야 할 점은, 루프 제 1회째와 루프 제 2회째 사이에 있어서의 데이터 의존관계이다. 제 1의존관계는 정수 어드레스(A1)에 관한 루프 제 1회째의 제 7명령과 루프 제 2회째의 제 2명령의 의존관계이다. 이 의존관계에 있어서, 정수 어드레스(A1)의 값의 변화량은 증분 4로 일정하다.
제 2의존관계는 정수 어드레스(A2)에 관한 루프 제 1회째의 제 9명령과 루프 제 2회째의 제 4명령의 의존관계이다. 이 의존관계에 있어서, 정수 어드레스(A2)의 값은 우측 1비트 시프트로 인해 변화량은 불확정이다.
제 3의존관계는 변화하는 어드레스(A4)에 관한 루프 제 1회째의 제 11명령과 루프 제 2회째의 제 5명령의 의존관계이다. 이 의존관계에 있어서, 어드레스(A4)의 어드레스 변화량은 증분(4)로 일정하고, 또 값의 변화량은 불확정이다.
이와 같은 루프 구조를 루프 간의 병렬처리에 의해서 고속화하기 위해서는 데이터 의존관계를 동적으로 파악하고, 의존관계가 없는 부분을 효율적으로 병렬화하는 것이 필요하다.
(참고예에 의한 명령구간의 실행예)
다음에, 도 36(a)에 도시한 명령구간이, 상술한 참고예에 있어서의 RF 및 RB의 구성에 의해서 실행된 경우의 예에 대해서 설명한다. 도 37은 도 36(a)에 도시한 명령구간이 실행된 경우의 RB에 있어서의 실제 등록상황을 나타내고 있다.
제 1명령에 있어서, 어드레스 정수(A1)가 레지스터(R1)에 세트된다. 이 명령은 정수를 세트하는 명령이므로, 레지스터(R1)에 대응하는 정수 플래그(Const-FLAG)가 세트된다.
제 2명령에 있어서, 레지스터(R1)의 내용을 이용하여, 어드레스(A1)의 내용(00010004)이 레지스터(Rx)에 로드된다. 이 경우, 어드레스(A1), 마스크(FFFFFFFF), 데이터(00010004)는 입력으로서 RB에 있어서의 Input측 제 1열에 등록되고, 레지스터(Rx), 마스크(FFFFFFFF), 및 데이터(00010004)는 출력으로서 RB에 있어서의 Output측 제 1열에 등록된다. 또, 이 시점에서 레지스터 번호(Rx)의 출력으로서 등록되는 값은, 이후의 처리에서 리라이트되므로, 도 37에 도시한 값과는 다르게 되어 있다.
또, 어드레스로서 이용한 레지스터(R1)에 대응하는 정수 플래그(Const-FLAG)가 리셋되어 있으므로, 어드레스(A1)에 대응하는 이력 마스크(P-Mask)가 세트된다. 여기서, 대상이 되는 데이터는 (00110000)의 4바이트 데이터이므로, 이것에 대응해서 어드레스(A1)에 대응하는 이력 마스크(P-Mask)에는 (FFFFFFFF)가 세트된다. 그리고, 레지스터(Rx)는 정수가 세트되는 것은 아닌 것으로 되므로, 레지스터(Rx)에 대응하는 정수 플래그(Const-FLAG)는 리셋된다.
제 3명령에 있어서, 어드레스 정수(A2)가 레지스터(R2)에 세트된다. 이 명령은 정수를 세트하는 명령이므로, 레지스터(R2)에 대응하는 정수 플래그(Const-FLAG)가 세트된다.
제 4명령에 있어서, 레지스터(R2)의 내용을 이용하여 어드레스(A2)의 내용(80000000)이 레지스터(Ry)에 로드된다. 이 경우, 어드레스(A2), 마스크(FFFFFFFF), 데이터(80000000)는 입력으로서 RB에 있어서의 Input측 제 2열에 등록되고, 레지스터 번호(Ry), 마스크(FFFFFFFF), 및 데이터(80000000)는 출력으로서 RB에 있어서의 Output측 제 2열에 등록된다. 또, 이 시점에서 레지스터 번호(Ry)의 출력으로서 등록되는 값은, 이후의 처리에서 리라이트되므로, 도 37에 도시한 값과는 다르게 되어 있다.
또, 어드레스로서 이용한 레지스터(R2)에 대응하는 정수 플래그(Const-FLAG)가 세트되어 있으므로, 어드레스(A2)에 대응하는 이력 마스크(P-Mask)가 세트된다. 여기서, 대상이 되는 데이터는 (80000000)의 4바이트 데이터이므로, 이것에 대응해서, 어드레스(A1)에 대응하는 이력 마스크(P-Mask)에는 (FFFFFFFF)가 세트된다. 그 리고, 레지스터(Rx)는 정수가 세트되는 것은 아닌 것으로 되므로, 레지스터(Rx)에 대응하는 정수 플래그(Const-FLAG)는 리셋된다.
제 5명령에 있어서, 레지스터(Rx)의 내용에서 4를 뺀 값을 어드레스로 하는 어드레스(A3)(00010000)의 내용(0000AAAA)이 레지스터(Rz)에 로드된다. 이 경우, 어드레스(A3), 마스크(FFFFFFFF), 데이터(0000AAAA)는 입력으로서 RB에 있어서의 Input측 제 3열에 등록되고, 레지스터 번호(Rz), 마스크(FFFFFFFF), 및 데이터(0000AAAA)는 출력으로서 RB에 있어서의 Output측 제 3열에 등록된다. 또, 이 시점에서 레지스터 번호(Rz)의 출력으로서 등록되는 값은, 이후의 처리에서 리라이트되므로, 도 37에 도시한 값과는 다르게 되어 있다.
또, 어드레스로서 이용한 레지스터(Rx)에 대응하는 정수 플래그(Const-FLAG)가 세트되어 있으므로, 어드레스(A3)에 대응하는 이력 마스크(P-Mask)에는 (00000000)이 세트된다. 그리고, 레지스터(Rz)는 정수가 세트되는 것은 아닌 것으로 되므로, 레지스터(Rz)에 대응하는 정수 플래그(Const-FLAG)는 리셋된다.
제 6명령에 있어서, 레지스터(Rx)의 내용에 4를 더한 값(00010008)이 레지스터(Rx)에 세트된다. 여기서, 레지스터(Rx)는 RB에 있어서의 Output측에 이미 등록되어 있으므로, RB에 있어서의 Input측에는 등록되지 않는다. 그리고, RB에 있어서의 Output측에 등록되어 있는 레지스터(Rx)에 대응하는 값이 (00010008)에 갱신된다.
제 7명령에 있어서, 레지스터(Rx)의 내용(00010008)이 레지스터(R1)의 내용을 이용하여 어드레스(A1)에 스토어된다. 여기서, 레지스터(Rx)는 RB에 있어서의 Output측에 이미 등록되어 있으므로, RB에 있어서의 Input측에는 등록되지 않는다. 어드레스(A1), 마스크(FFFFFFFF), 및 데이터(00010008)는 출력으로서 RB에 있어서의 Output측 제 4열에 등록된다. 또, RB에 있어서의 Input측에는 어드레스(A1)가 이미 등록되어 있으므로, 어드레스(A1)에 대응하는 변경 플래그(C-FLAG)가 세트(도에서는 change로 표시)된다.
제 8명령에 있어서, 레지스터(Ry)의 내용(80000000)을 우측으로 1비트 시프트한 값(40000000)이 레지스터(Ry)에 세트된다. 여기서, 레지스터(Ry)는 RB에 있어서의 Output측에 이미 등록되어 있으므로, RB에 있어서의 Input측에는 등록되지 않는다. 그리고, RB에 있어서의 Output측에 등록되어 있는 레지스터(Ry)에 대응하는 값이 (40000000)으로 갱신된다.
제 9명령에 있어서, 레지스터(Ry)의 내용(40000000)이 레지스터(R2)를 이용하여 어드레스(A2)에 스토어된다. 여기서, 레지스터(Ry)는 RB에 있어서의 Output측에 이미 등록되어 있으므로, RB에 있어서의 Input측에는 등록되지 않는다. 어드레스(A2), 마스크(FFFFFFFF), 및 데이터(40000000)는 출력으로서 RB에 있어서의 Output측 제 5열에 등록된다. 또, RB에 있어서의 Input측에는 어드레스(A2)가 등록되어 있으므로, 어드레스(A2)에 대응하는 변경 플래그(C-FLAG)가 세트(도에서는 change로 표시)된다.
제 10명령에 있어서, 레지스터(Ry)의 내용과 레지스터(Rz)의 내용을 더한 값(4000AAAA)이 레지스터(Rz)에 세트된다. 여기서, 레지스터(Ry) 및 레지스터(Rz)는 RB에 있어서의 Output측에 이미 등록되어 있으므로, RB에 있어서의 Input측에는 등록되지 않는다. 그리고, RB에 있어서의 Output측에 등록되어 있는 레지스터(Rz)에 대응하는 값이 (4000AAAA)로 갱신된다.
제 11명령에 있어서, 레지스터(Rz)의 내용(4000AAAA)이 레지스터(Rx)를 이용하여 어드레스(A4)에 스토어된다. 여기서, 레지스터(Rx)는 RB에 있어서의 Output측에 이미 등록되어 있으므로, RB에 있어서의 Input측에는 등록되지 않는다. 어드레스(A4), 마스크(FFFFFFFF), 및 데이터(4000AAAA)는 출력으로서 RB에 있어서의 output측 제 6열에 등록된다.
제 12명령에 있어서, 루프의 선두 어드레스로서의 1000번지에 처리가 분기된다. 후방분기가 검출된 시점에서, 분기처와 등록을 개시한 명령구간 선두 어드레스(1000)가 비교되고, 일치한 경우에 그 명령구간의 입출력 등록이 완료된다.
이상의 결과, 갱신 플래그(C-FLAG)가 세트되고, 또 이력 마스크(P-Mask)가 세트된 마스크 위치는 어드레스(A1), 및 어드레스(A2)가 된다. 이 마스크 위치에 대응하는 어드레스, 마스크, 및 값이, 예측 대상으로서 명령구간마다 과거의 입력 이력을 유지하는 이력정보로서 RB의 엔트리에 등록된다. 또, 상기의 예에서는 출현하지 않았으나, RB의 입력패턴에 등록된 레지스터에 대해서는 무조건 예측대상으로서 이력이 기록된다.
도 38(a)는 도 36(a)에 도시한 명령구간이 반복 실행된 경우에 있어서의 이력으로서 RB에 등록된 예를 나타내고 있다. 이 도에 도시한 바와 같이, RB에는 어드레스(A1)의 열에 이력 마스크(P-Mask)로서 (FFFFFFFF), 및 어드레스(A2)의 열에 이력 마스크(P-Mask)로서 (FFFFFFFF)가 기억된다. 그리고, 루프의 횟수가 1∼4로 변화는 동안에, 각 어드레스에 있어서의 이력 마스크(P-Mask)에 대응하는 값이 변화하게 된다. 각 이력 사이에 표시되는 diff는 대응하는 이력요소의 값의 변화량(차분)을 나타내고 있다. 이 diff는 예측처리부(2B)에 의해서 산출된다.
상기 도에 도시한 예에 있어서, 어드레스(A1)의 열에 관해서는, 루프의 횟수가 1∼4로 변화하는 동안에 있어서의 diff가 모두 04로 되어 있다. 따라서, 이 어드레스에 대응하는 값은, 1회의 루프당 04씩 증가해 갈 것으로 예상된다. 한편, 어드레스(A2)의 열에 관해서는 루프의 횟수가 1∼4로 변화하는 동안에, diff의 값은 불확정으로 되어 있다. 그러므로, 어드레스(A3)에 관해서는 예측하는 것이 곤란하다는 것을 알 수 있다.
이상으로부터, 예측처리부(2B)는 이력에 있어서, 차분이 일정하게 되어 있는 어드레스에 관해서, 그 차분이 그 후에도 계속되는 것으로 가정해서 예측을 행함과 동시에, 차분이 일정하지 않거나, 차분이 0으로 되어 있는 어드레스에 관해서는 예측을 행하지 않도록 한다.
도 38(b)는 상기 예측에 의거해서, 예측처리부(2B)가 어드레스(A1)의 값에 관해서 예측을 행한 경우의, 예측 엔트리로서 RB에 기록되는 입력요소의 상태를 나타내고 있다. 이 도에 있어서, 어드레스(A2) 및 어드레스(A7∼A10)에 관해서는 예측값을 구하지 않고 직접 주기억(3)을 참조함으로써 얻어진 것으로 되어 있다.
이와 같이, 입력요소의 예측값이 산출되면, SSP(1B)가, 이 예측 입력요소에 의거해서 명령구간을 실행함으로써 출력요소가 산출되고, 이 예측 출력요소가 예측 엔트리로서 RB에 기억된다. 그 후, MSP(1A)에 의해서 명령구간이 실행되고, 예측 엔트리로서 RB에 기억되어 있는 예측 입력요소를 동일 입력값이 입력된 경우에, 그에 대응하는 예측 출력요소를 출력함으로써 재이용이 실현된다.
(참고예에 있어서의 과제)
가령 루프 제어변수와 같이, 단조롭게 변화하는 어드레스(상기 예에서는 어드레스(A1)에 대응)의 내용에 대해서는 정확하게 예측할 수 있다. 그러나, 명령구간에 배열요소가 포함되어 있는 경우, 배열요소의 첨자가 단조롭게 변화하고 있어도, 배열요소 값은 일반적으로 단조롭게 변화하는 것으로는 한정되지 않는다. 도 36(a)에 도시한 예에서는, 어드레스(A1)에서 로드된 값이 배열요소의 첨자에 해당하며, 이 첨자는 어드레스로서 이용하는 주기억 참조(어드레스(A3∼A10))는 어드레스가 변화하기 때문에, 예측 적중률이 극히 악화된다. 루프 간에 의존관계가 없는 경우는, 캐시를 직접 참조함으로써 병렬처리 효과를 유지하는 것이 가능하지만, 가령 도 36(a)에 도시한 프로그램 예와 같이, 루프 간에 의존관계가 있는 경우에는 상술한 바와 같은 예측에 의한 효과를 얻을 수 없다. 도 39는 참고예에 의거해서, 루프처리의 2회째 및 3회째에 있어서의 사전 실행을 행한 결과를 나타내고 있다. 이 도에 도시한 바와 같이, 값이 확정되지 않은 어드레스나, 실제의 값과는 다른 값으로 되어 있는 어드레스가 출현해 있으며, 예측 효과가 낮다는 것을 알 수 있다.
(예측기구)
RB에 대한 입출력패턴의 등록에 관여하는 어드레스는 다음과 같이 분류할 수 있다.
(1) 제 1타입의 어드레스는 내용이 변화하지 않는 정수 어드레스이다. 이 제 1타입의 어드레스는 내용이 변화하지 않으므로, 재이용시에 과거의 값과 내용을 비교할 필요가 없으며, 따라서, 내용을 예측할 필요가 없는 어드레스이다.
(2) 제 2타입의 어드레스는 내용의 변화량이 일정하게 되어 있는 정수 어드레스이다. 이 제 2타입의 어드레스는, 내용의 변화량이 일정하므로, 예측을 행하는 것이 가능한 어드레스이다. 상기의 예에서는, 어드레스(A1)가 제 2타입의 어드레스에 해당한다.
(3) 제 3타입의 어드레스는 내용의 변화량이 불확정인 정수 어드레스이다. 이 제 3타입의 어드레스는 예측이 곤란하므로, 라이트를 서로 기다릴 필요가 있다. 상기의 예에서는 어드레스(A2)가 제 3타입의 어드레스에 해당한다.
(4) 제 4타입의 어드레스는 어드레스 자체가 변화하지만, 각각의 어드레스의 내용은 변화하지 않는 어드레스이다. 즉, 스토어가 발생하지 않는 어드레스로, 결과적으로 내용이 변화하지 않는 어드레스이다. 이 제 4타입의 어드레스는 내용이 변화하지 않으므로, 재이용시에 과거의 값과 내용을 비교할 필요가 없으며, 따라서 내용을 예측할 필요가 없는 어드레스이다.
(5) 제 5타입의 어드레스는 어드레스 자체가 변화하고, 각각의 어드레스 내용도 스토어가 발행함으로써 변화하는 어드레스이다. 이 제 5타입의 어드레스는 내용의 변화량이 일정한 것을 기대할 수 없으며 예측은 곤란하므로, 라이트를 서로 기다릴 필요가 있다. 상기의 예에서는 어드레스(A3∼A10)가 제 5타입의 어드레스에 해당한다.
본 실시예에 관계되는 예측기구는, 명령구간의 실행시에, 상기 제 1 및 제 4타입의 어드레스를 제외하고, 제 2, 제 3, 및 제 5타입의 어드레스에 대해서 동적으로 분류를 행하는 것을 가능하게 하고 있다. 또, 제 5타입의 어드레스에 대해서는, 사전 실행을 행하는 복수의 프로세서(MSP(1A), SSP(1B)) 사이에서 데이터의 대기를 행하도록 하고 있다. 이것을 실현하기 위해서, 상술한 참고예에 있어서의 RB에, 추가로 스토어 카운터(S-Count)라고 하는 항목이 마련되어 있다. 도 40(a)는 RB에 있어서의 입출력 기록행의 열을 나타내고 있으며, 도 40(b)는 이력 저장행의 예를 나타내고 있다.
먼저, RB에 있어서의 MPS(1A) 또는 SSP(1B)에 의한 명령구간의 실행중의 입출력패턴을 기록하는 행으로서의 입출력 기록행에 있어서, 출력요소로서의 어드레스, 즉 Write 어드레스에 스토어 카운터(S-Count)가 마련되어 있다. 또, 입출력 기록행은 MPS(1A) 또는 SSP(1B)의 각각에 대응하여 마련되어 있다.
이 스토어 카운터(S-Count)는 MPS(1A) 또는 SSP(1B)에 의해서, 해당 어드레스에 대해서 스토어가 행해진 횟수를 나타내고 있다. 즉, MPS(1A) 또는 SSP(1B)에 의해서 해당 어드레스에 대해서 스토어가 1회 행해질 때마다 RB 등록처리부(2A)가 해당 엔트리의 스토어 카운트(S-Count)를 1 증가시킨다.
또, RB에 있어서의 각 명령구간에 대응하는 이력 엔트리를 저장하는 행으로서의 이력 저장행에 있어서, Write 어드레스에 스토어 카운트(S-Count)가 마련되어 있다. 후방분기 명령의 실행시에 입출력 기록행에 대한 명령구간의 입출력 등록이 완료되면, 그 입출력 기록행에 등록된 내용이 그 명령구간에 대응하는 이력 저장행 에 추가된다. 이 때, 입출력 기록행에 등록되어 있는 각 출력요소의 Address, Mask, 및 스토어 카운트(S-Count)가 이력 저장행의 Write 측에 등록된다.
또, RB에 있어서의 이력 저장행에 있어서, 입력요소로서의 어드레스, 즉 Read 어드레스에도 스토어 카운트(S-Count)가 마련되어 있다. RB에 있어서의 입출력 기록행에 등록된 입력요소 중, 변경 플래그(C-FLAG)가 세트되고, 또 이력 마스크(P-Mask)가 세트된 이력요소가 그 명령구간에 대응하는 이력 저장행에 추가된다. 이 때, 입력 기록행에 등록되어 있는 Address, 이력 마스크(P-Mask), 및 Value가 이력 저장행의 Read측에 등록된다. 또한, RB에 있어서의 입출력 기록행에 등록된 입력요소의 모든 어드레스 중, 해당 명령구간의 전회 실행시에 있어서의 입출력패턴이 기억되어 있는 이력 저장행의 Write 어드레스에 포함되어 있는 어드레스와 일치하는 어드레스가, 그 명령구간에 대응하는 이력 저장행에 추가된다. 이 때, 입출력 기록행에 등록되어 있는 해당 입력요소의 Address, 이력 마스크(P-Mask), 및 스토어 카운트(S-Count)가 이력 저장행의 Read측에 등록된다. 여기서, 등록되는 스토어 카운트(S-Count)의 값은 해당 입력요소의 어드레스와 일치하는, 전회의 명령구간 실행시의 입출력패턴이 기억되어 있는 이력 저장행의 Write 어드레스에 있어서의 스토어 카운트(S-Count)값으로 된다.
(어드레스의 분류방법)
이상과 같은 구성의 RB에 의해서, 상술한 제 2, 제 3 및 제 5타입의 어드레스를 어떻게 분류하는가에 대해서 이하에 설명한다. 도 41(a)는 도 36(a)에 도시한 명령구간이 반복 실행된 경우에 있어서의 이력 저장행의 등록열을 나타내고 있고, 도 41(b)는 도 41(a)에 도시한 이력에 의거해서, 예측처리부(2B)가 이하에 나타내는 예측처리를 행할 때의, 예측값 저장영역 및 대기필요 어드레스 저장영역의 예를 나타내고 있다.
각 명령구간에 대응하는 이력 저장행에 등록되어 있는 입력요소에 이력 마스크(P-Mask)가 세트되어 있는 경우, 예측처리부(2B)는 Address의 변화량 및 Value의 변화량을 구한다. Address의 변화량이 일정한 경우에, 예측처리부(2B)는 이후에도 변화량이 일정할 것으로 예측되는 외삽값을, 해당 입력요소에 대응하는 예측 Address로서 예측값 저장영역에 저장한다. 한편, Address의 변화량이 불확정인 경우에, 예측처리부(2B)는 최후에 출현한 Address를 해당 입력요소의 예측 Addrss로서 예측값 저장영역에 저장한다.
Value의 변화량이 일정한 경우에, 예측처리부(2B)는 이후에도 변화량이 일정할 것으로 예측되는 외삽값을 해당 입력요소에 대응하는 예측Value로서 설정한다. 그리고, RB에 있어서의 예측값 저장영역에, 해당하는 Address, Mask, 및 Value를 저장한다. 이상의 처리에 의해, 상기 제 2타입의 어드레스에 관한 예측기구가 실현된다. 또, 도 41(a) 및 도 41(b)에 도시한 예에서는, 어드레스(A1)가, Address의 변화량이 0으로 일정, Value의 변화량이 04로 일정하게 되어 있고, 이것에 의거해서, 제 2타입의 어드레스로서 예측값 저장영역에 등록되어 있다.
한편, Value의 변화량이 불확정인 경우에, 예측처리부(2B)는 RB에 있어서의 대기필요 어드레스 저장영역에, 해당하는 Address 및 Mask를 저장함과 동시에, 스토어 카운트(S-Count)(대기 카운터)에는, 예측거리에서 1을 뺀 값에, 이력 저장행 이 해당 입력요소에 대응하는 스토어 카운트(S-Count)값을 곱한 값을 저장한다. 또, 예측거리란, 해당 명령구간이 이후 반복 실행된 경우에, 현시점부터의 실행 횟수를 나타내고 있다. 이상과 같이 대기필요 어드레스 저장영역에 있어서의 스토어 카운트(S-Count)를 설정함으로써, 대기해야 할 스토어 횟수를 정확하게 설정하는 것이 가능하게 된다. 이것에 의해, 상기 제 3타입의 어드레스에 관한 예측기구가 실현된다. 또, 도 41(a) 및 도 41(b)에 도시한 예에 있어서, 어드레스(A2)는, 이력 마스크(P-Mask)가 세트되고, 또 Value의 변화량이 불확정으로 되어 있으며, 이것에 의거해서, 제 3타입의 어드레스로서 대기필요 어드레스의 저장영역에 등록되어 있다.
또, 상술한 예에서, 예측처리부(2B)는 스토어 카운트(S-Count)에, 예측거리에서 1을 뺀 값에, 이력 저장행의 해당 입력요소에 대응하는 스토어 카운트(S-Count)값을 곱한 값을 저장하도록 되어 있으나, 다음과 같은 처리를 행해도 된다. 즉, 예측 처리부는 RB에 있어서의 예측값 저장영역에, 해당하는 Address, 및 Mask를 저장함과 동시에, 스토어 카운트(S-Count)에는 이력 저장행의 해당 입력요소에 대응하는 스토어 카운트(S-Count)를 저장함과 동시에, 예측거리가 1만큼 짧은 전회의 예측값에 의거해서 사전 실행을 개시한 SSP(1B)를 특정하는 정보를 저장해도 된다. 이와 같이 하면, 모든 SSP(1B)에 의한 실행 통지 중, 해당하는 SSP(1B)로부터의 실행통지가 수신된 경우에만 스토어 카운터값을 감소시킴으로써, 대기해야 할 스토어 횟수를 정확하게 설정하는 것이 가능하게 된다.
각 명령구간에 대응하는 이력 저장행에 등록되어 있는 입력요소에 이력 마스 크(P-Mask)가 세트되어 있지 않은 경우, 예측처리부(2B)는 상기와 마찬가지로, Address의 변화량 및 Value의 변화량을 구한다. Address의 변화량이 일정한 경우에, 예측처리부(2B)는 이후에도 변화량이 일정할 것으로 예측되는 외삽값을, 해당 입력요소에 대응하는 예측 Address로서 대기필요 어드레스 저장영역에 저장한다. 한편, Address의 변화량이 불확정인 경우에, 예측처리부(2B)는 최후에 출현한 Address를 해당 입력요소의 예측 Address로서 대기필요 어드레스 저장영역에 저장한다.
Value의 변화량이 일정인 것은 기대할 수 없으므로, 예측처리부(2B)는 RB에 있어서의 대기필요 어드레스 저장영역에, 해당하는 Address, 및 Mask를 저장함과 동시에, 스토어 카운트(S-Count)에는 이력 저장행의 해당 입력요소에 대응하는 스토어 카운트(S-Count)값을 저장한다. 또, 이 경우에는 어드레스가 변화하고 있으므로, 스토어 카운트(S-Count)를 설정할 때에 예측거리를 고려할 필요는 없다. 이것에 의해, 상기 제 5타입의 어드레스에 관한 예측기구가 실현된다. 또, 도 41(a) 및 도 41(b)에 도시한 예에 있어서, 어드레스(A7∼A10)는, 이력 마스크(P-Mask)가 세트되어 있지 않으며, 또 Value의 변화량이 불확정으로 되어 있고, 이것에 의해서, 제 5타입의 어드레스로서 대기필요 어드레스 저장영역에 등록되어 있다.
(MSP/SSP)에 의한 사전 실행)
상기와 같이 예측처리부(2B)에 의한 처리에 의해서 생성된 예측값 저장행에 의거한 MSP(1A)/SSP(1B)에 의한 사전 실행에 대해서 설명한다. SSP(1B)에 의한 사전 실행의 기동 개시후의 주기억 리드는 다음과 같이 실행된다.
먼저, Cache/Local(7B)가 참조됨과 동시에, 이하에 나타낸 처리가 실행된다.
가장 먼저, 해당 SSP에 대응하는 입출력 기록행 중, 리드 대상이 되는 주기억 어드레스와 동일 어드레스가 Write측에 등록되어 있는지를 SSP(1B)에 있어서의 판정부(8B)가 판정한다. 등록되어 있는 경우에는, 등록되어 있는 Value가 리드 대상이 되는 주기억 어드레스의 Value로서 리드된다.
Write측에 등록되어 있지 않은 경우에는, 해당 SSP에 대응하는 입출력 기록행 중, 리드 대상이 되는 주기억 어드레스와 동일한 어드레스가 Read측의 Value에 등록되어 있는지를 SSP(1B)에 있어서의 판정부(8B)가 판정한다. 등록되어 있는 경우에는, 등록되어 있는 Value가 리드 대상이 되는 주기억 어드레스의 Value로서 리드된다.
Read측에 등록되어 있지 않은 경우에는, 리드 대상이 되는 주기억 어드레스와 동일한 어드레스가 예측값 저장영역에 등록되어 있는지를 SSP(1B)에 있어서의 판정부(8B)가 판정한다. 등록되어 있는 경우에는, 등록되어 있는 Value가 리드 대상이 되는 주기억 어드레스의 Value로서 리드된다. 예측값 저장영역에 등록되어 있지 않은 경우에는, 리드 대상이 되는 주기억 어드레스와 동일한 어드레스가 대기필요 어드레스 저장영역에 등록되어 있는지를 SSP(1B)에 있어서의 판정부(8B)가 판정한다. 등록되어 있는 경우, 스토어 카운트(S-Count)값이 0보다 큰 경우에는, 스토어 카운트(S-Count)값이 0이 될 때까지 주기억 리드를 보류하고, Value에 유효한 값이 세트된 후에 Value를 참조한다. 이상의 모든 참조에 있어서, 리드 대상이 되는 주기억 어드레스가 없었던 경우에는, Cache/Local(7B)로부터 해당 어드레스에 관한 값의 리드가 행해진다.
또, MSP(1A)/SSP(1B)에 의한 사전 실행의 기동 개시후의 주기억 라이트는 다음과 같이 실행된다.
MSP(1A) 또는 SSP(1B)에 의해서 스토어 명령이 실행될 경우, 그 뜻이 통신부(9A) 또는 통신부(9B)에 의해서 그 밖의 모든 SSP(1B)…또는 MSP(1A)에 대해서 통지된다. 각 SSP(1B)에 있어서, 대기필요 어드레스 저장영역 중에, 통지된 어드레스와 동일한 어드레스가 등록되어 있는 경우, 그 어드레스의 스토어 카운트(S-Count)를 1만큼 빼서 Value에 라이트값을 저장한다. 단, 스토어 카운트(S-Count)가 이미 0인 경우에는 아무것도 실행하지 않는다.
이상과 같이 해서 SSP(1B)에 의해서 예측 사전 실행이 행해진 결과는 RB에 있어서의 예측실행 결과 기록행에 저장된다.
(명령구간의 실행예)
상기와 같이 해서 예측값이 생성된 후에, 예측값에 의거한 사전 실행을 행할 경우의 예에 대해서 도 42를 참조하면서 이하에 설명한다. 여기서, 예측값은 루프처리가 4회 반복된 결과에 의거해서 생성된 것으로 한다. 또, 이 예에서는 SSP(1B)를 2대 이용하여 실행되는 예를 가정하고 있다. 이 2대의 SSP(1B)를 각각 SSP(#1) 및 SSP(#2)라 칭한다.
먼저, MSP(1A)가 루프 5회째의 실행을 개시하고, 동시에 SSP(#1) 및 SSP(#2)가, 각각 루프 6회째 및 루프 7회째의 예측값을 받아들여 실행을 개시한 것으로 한다. SSP(#1)는 SSP를 위한 예측값 저장영역에 어드레스(A1) 및 값(00010018)을 유 지하고, 대기필요 어드레스 저장영역에, 어드레스(A2) 및 스토어 카운트(S-Count)값으로서의 (0001), 및 어드레스(A8) 및 스토어 카운트(S-Count) 값으로서의 (0001)을 유지하고 있다. 마찬가지로, SSP(#2)는 SSP를 위한 예측값 저장영역에 어드레스(A1) 및 값(0001001C)을 유지하고, 대기필요 어드레스 저장영역에, 어드레스(A2) 및 스토어 카운트(S-Count)값으로서의 (0002), 및 어드레스(A9) 및 스토어 카운트(S-Count) 값으로서의 (0001)을 유지하고 있다.
SSP(#1)는 제 2명령에 있어서, 레지스터(R1)를 이용하여 어드레스(A1)의 내용을 레지스터(Rx)에 로드하고 있다. 이 때, 상술한 주기억 리드수순에 따라서, SSP를 위한 예측값 저장영역으로부터 어드레스(A1)의 값(00010018)을 얻고 있다. 또, 제 4명령에 있어서, 레지스터(R2)를 이용하여 어드레스(A2)의 내용을 레지스터(Ry)에 로드하고 있다. 이 때, 상술한 주기억 리드수순에 따라서, 대기필요 어드레스 저장영역으로부터 어드레스(A2)의 스토어 카운트(S-Count)값이 (0001)인 것을 확인하고서 대기한다.
SSP(#2)는 제 2명령에 있어서, 레지스터(R1)를 이용하여 어드레스(A1)의 내용을 레지스터(Rx)에 로드하고 있다. 이 때, 상술한 주기억 리드수순에 따라서, SSP를 위한 예측영역으로부터 어드레스(A1)의 값(0001001C)을 얻고 있다. 또, 제 4명령에 있어서, 레지스터(R2)를 이용하여 어드레스(A2)의 내용을 레지스터(Ry)에 로드하고 있다. 이 때, 상술한 주기억 리드수순에 따라서, 대기필요 어드레스 저장영역으로부터, 어드레스(A2)의 스토어 카운트(S-Count)값이 (0001)인 것을 확인하고서 대기한다.
그 후, MSP(1A)가 제 9명령을 실행하고, 어드레스(A2) 및 스토어값(04000000)을 SSP(#1), 및 SSP(#2)에 통지한다. SSP(#1)에서는 대기필요 어드레스 저장영역 중, 어드레스(A2)의 스토어 카운트(S-Count)값이 1만큼 감소됨으로써 0으로 되고, 스토어값(04000000)이 Value에 저장된다. 이것에 의해, 대기상태가 종료되어 제 4명령의 실행이 완료된다. SSP(#2)에서는 대기필요 어드레스 저장영역 중, 어드레스(A2)의 스토어 카운트(S-Count)값이 1만큼 감소됨으로써 1로 되며, 스토어값(04000000)이 Value에 저장되지만, 대기상태는 계속된다.
SSP(#1)는 제 5명령에 있어서, 레지스터(Rx)를 이용하여 어드레스(A8)의 내용을 레지스터(Rx)에 로드하고 있다. 이 때, 상술한 주기억 리드수순에 따라서, 대기필요 어드레스 저장역역으로부터, 어드레스(A8)의 스토어 카운트(S-Count)값이 (0001)인 것을 확인하고서 대기한다.
그 후, MSP(1A)가 제 11명령을 실행하고, 어드레스(A8) 및 스토어값(7C00AAAA)을 SSP(#1), 및 SSP(#2)에 통지한다. SSP(#1)에서는, 대기필요 어드레스 저장영역 중, 어드레스(A8)의 스토어 카운트(S-Count)값이 1만큼 감소됨으로써 0으로 되고, 스토어값(7C00AAAA)이 Value에 저장된다. 이것에 의해, 대기상태가 종료되어 제 5명령의 실행이 완료된다. SSP(#2)에서는 대기필요 어드레스 저장영역에 해당 어드레스가 없기 때문에, 아무것도 실행되지 않고 대기상태가 계속된다.
그 후, SSP(#1)가 제 9명령을 실행하고, 통지부(9B)가 어드레스(A2) 및 스토어값(02000000)을 모든 SSP(1B)(SSP(#2))에 통지한다. SSP(#2)에서는 대기필요 어드레스 저장영역 중, 어드레스(A2)의 스토어 카운트(S-Count)값이 1만큼 감소됨으 로써 0으로 되고, 스토어값(02000000)이 Value에 저장된다. 이것에 의해, 대기상태가 종료되어 제 4명령의 실행이 완료된다.
또한, SSP(#1)가 제 11명령을 실행하고, 통지부(9B)가 어드레스(A9) 및 스토어값(7E00AAAA)을 모든 SSP(1B)(SSP(#2))에 통지한다. SSP(#2)에서는 대기필요 어드레스 저장영역 중, 어드레스(A9)의 스토어 카운트(S-Count)값이 1만큼 감소됨으로써 0으로 되고, 스토어값(7E00AAAA)이 Value에 저장된다. 이것에 의해, 대기상태가 종료되어 제 5명령의 실행이 완료된다.
(RF/RB의 제 2구성예)
다음에, 명령구간 기억부(2)의 제 2구성예에 대해서, 도 43을 참조하면서 이하에 설명한다. 이 도에 도시한 바와 같이, 명령구간 기억부(2)는 RB, RA, RO1(제 2출력패턴 기억수단), 및 RO2(제 1출력패턴 기억수단)을 구비한 구성으로 되어 있다.
RB는 비교해야 할 값인 레지스터값 또는 주기억 입력값을 저장하는 Value(값 저장영역), 및 키 번호를 저장하는 Key(키 저장영역)을 구비하고 있고, Value 및 key의 조합 라인을 복수 구비하고 있다.
RA는 다음에 비교해야 할 번호 또는 주기억 어드레스가 없는 것을 나타내는 종단 플래그(E), 다음에 비교해야 할 번호 또는 주기억 어드레스의 내용이 갱신된 것을 나타내는 비교필요 플래그, 다음에 비교해야 할 대상이 레지스터인지 주기억인지를 나타내는 R/M, 다음에 비교해야 할 레지스트 번호 또는 주기억 어드레스를 나타내는 Adr.(검색항목 지정영역), 직전에 참조한 라인번호를 나타내는 UP(모 노 드 저장영역), 다음에 비교해야 할 번호 또는 주기억 어드레스보다도 우선해서 비교해야 할 번호 또는 주기억 어드레스를 나타내는 Alt.(비교필요 항목 지정영역), 및 우선해서 비교할 때에 필요한 키를 나타내는 DN(비교필요 키 지정영역)을 구비하고 있다. 이들은 RB에 있어서의 각 라인에 대응해서 마련되어 있다.
RO1 및 RO2는 RB 및 RA에 의한 검색결과에 의해, 재이용이 가능하다고 판정된 경우에, 주기억 및/또는 레지스터에 출력되는 출력값을 저장하는 것이다. RO1은 RA의 각 라인에 1 대 1로 대응해서 출력값 및 출력해야 할 어드레스를 저장하고 있다. RO2는 RO1만으로 출력값을 다 저장할 수 없는 경우에, 다 저장하지 못한 분의 출력값 및 출력해야 할 어드레스를 저장하고 있다. RO2로부터도 출력값을 리드할 필요가 있는 경우에는, RO1에 있어서의 해당 라인에, RO2에 있어서의 출력값이 저장되어 있는 포인터가 표시되어 있고, 이 포인터를 이용하여 RO2로부터 출력값의 리드가 행해진다. 또, RB 및 RA는 각각 CAM 및 RAM에 의해서 구성되어 있다.
(제 2구성예에 있어서의 연상검색동작)
다음에, 제 2구성예에 있어서의 연상검색동작에 대해서 설명한다. 도 34에 도시한 구성에서는 RB에 있어서의 각 엔트리로서의 횡방향 행은, 일치 비교를 행해야 할 입력값의 항목을 모두 포함한 것으로 되어 있다. 즉, 모든 입력패턴을 각각 하나의 행으로서 RB에 등록하도록 되어 있다.
이것에 비해서, 제 2구성예에서는, 일치 비교를 행해야 할 입력값의 항목을 짧은 단위로 구획하고, 각각의 비교단위를 노드로서 택하고, 입력패턴을 트리구조로서 어드레스 관리표로서의 RA 및 RB에 등록하도록 되어 있다. 그리고, 재이용을 행할 때에는, 일치하는 노드를 순차 선택함으로써, 최종적으로 재이용 가능한지를 판단하도록 되어 있다. 달리 말하면, 복수의 입력패턴에서 공통되는 부분을 하나로 모아서, RA 및 RB의 1행에 대응시키도록 되어 있다.
이것에 의해, 리던던시를 없애서, 명령구간 기억부(2)를 구성하는 메모리의 이용효율을 향상시키는 것이 가능하게 된다. 또, 입력패턴을 트리구조로 하고 있으므로, 하나의 입력패턴을 RB에 있어서의 하나의 행으로서의 엔트리에 대응시킬 필요가 없게 된다. 따라서, 일치 비교를 행해야 할 입력값의 항목수를 가변으로 하는 것이 가능하게 되어 있다.
또, RA 및 RB는 입력패턴을 트리구조로서 등록하고 있으므로, 일치 비교를 행할 때에는 멀티 매치가 행해지지 않게 된다. 결국, 명령구간 기억부(2)로서는, 싱글 매치기구를 갖는 연상검색 메모리이면 실현 가능하게 된다. 여기서, 싱글 매치기구만을 갖는 연상검색 메모리는 일반적으로 시판되고 있는 한편, 멀티 매치를 싱글 매치와 동일 성능에 의해서 보고 가능한 연상검색 메모리는 일반적으로 시판되고 있지 않다. 즉, 제 2구성예에 의하면, 시판중인 연상검색 메모리를 이용할 수 있으므로, 보다 단기간에 낮은 코스트로, 본 실시예에 관계되는 데이터 처리장치를 실현하는 것이 가능하게 된다.
다음에, 도 44를 참조하면서, 명령구간 기억부(2)에서의 연상검색동작에 대한 구체예에 대해서 설명한다. 먼저, 명령구간의 실행이 검출되면, 프로그램 카운터(PC) 및 레지스터의 내용(Reg.)이 RB에 입력된다. 그리고, RB에 있어서, 연상검색에 의해, 입력된 이들 값과, RB의 Value 열에 등록되어 있는 명령구간 선두 어드 레스 및 레지스터가 비교되고, 값이 일치하는 유일한 행(라인)이 후보(매치라인)로서 선택된다. 이 예에서는 RB에 있어서의 「01」라인이 매치라인으로 선택된다.
다음에, 매치라인으로 선택된 라인의 RB에 있어서의 번지인 「01」이, 인코드 결과로서 RA로 전달되고, 키(01)에 대응하는 RA에 있어서의 라인이 참조된다. 키(01)에 대응하는 RA에 있어서의 라인에서는 비교필요 플래그가 「0」이고, 비교해야 할 주기억 어드레스가 A1으로 되어 있다. 즉, 주기억 어드레스(A1)에 관해서는, 일치 비교를 행할 필요는 없게 된다.
다음에, 키(01)를 이용해서, RB에 있어서의 Key 열에 대해서 검색이 행해진다. 이 예에서는, RB에 있어서의 「03」라인이 매치라인으로 선택된다. 그리고, 인코드 결과로서 키(03)가 RA로 전달되고, 키(03)에 대응하는 RA에 있어서의 라인이 참조된다. 키(03)에 대응하는 RA에 있어서의 라인에서는 비교필요 플래그가 「1」이고, 비교해야 할 주기억 어드레스가 A2로 되어 있다. 즉, 주기억 어드레스(A2)에 관해서는, 일치 비교를 행할 필요가 있게 된다. 여기서, 주기억(3)에 있어서의 주기억 어드레스(A2)의 값이 Cache(7A)를 통해서 리드되고, RB에 있어서 Value가 주기억(3)에서 리드된 값이며, 또, Key가 「03」으로 되어 있는 라인이 검색된다. 도 44에 나타낸 예에서는 Key가 「03」으로 되어 있는 라인이 「04」 및 「05」 2개 있지만, 주기억(3)에서 리드된 값이 「00」이므로, 「05」 라인이 매치라인으로 선택되고, RA에 대해서 인코드 결과로서 키(05)가 전달된다.
이상과 같은 처리가 반복되고, RA에 있어서, 다음에 비교해야 할 레지스터 번호 또는 주기억 어드레스가 없음을 나타내는 플래그(E)가 검출된 경우, 입력패턴 이 모두 일치한다고 판정되어, 해당 명령구간은 재이용 가능하다고 판단된다. 그리고, 종단 플래그(E)가 검출된 라인으로부터 「Select Output」신호가 출력되고, RO1 및 RO2에 저장되어 있는, 그 라인에 대응하는 출력값이 레지스터(6A) 및 주기억(3)에 대해서 출력된다.
이상과 같이, 제 2구성예에 의한 연상검색동작은, 다음과 같은 특징을 갖고 있다. 먼저, 내용이 일치한 것을 나타내는 매치라인은, RB에 있어서 하나의 라인만으로 되므로, 검색동작을 다음 열로 전달할 때에 인코드한 결과를 하나 전송하면 된다. 그러므로, RB와 RA 간을 접속하는 신호선은 어드레스의 인코드 결과인 1쌍(N개)으로도 가능하다. 이것에 비해서, 상술한 도 1에 도시한 예에서는 RB에 있어서 멀티 매치가 허용되고 있으므로, RB에 있어서의 각 열들을 접속하는 신호선은 각 라인마다 마련할(2N개) 필요가 있다. 즉, 제 2구성예에 의하면, 명령구간 기억부(2)를 구성하는 연상검색 메모리에 있어서의 신호선의 수를 큰 폭으로 저감하는 것이 가능하게 된다.
또, 검색 도중에는 싱글 매치만이 허용되도록 되어 있으므로, 비교해야 할 항목의 비교번호는 트리구조에 있어서의 참조순으로 한정된다. 즉, 레지스터 값과 메모리 내용은 참조순으로 섞어가면서 비교할 필요가 있다.
입력패턴은 각 항목을 참조해야 할 Key라고 하는 형태로 링크시킴으로써, 트리구조에 의해서 RB 및 RA에 등록되어 있다. 또, 입력패턴의 항목은 종단 플래그에 의해서 그 종단이 표시되도록 되어 있다. 따라서, 입력패턴의 항목수를 가변으로 할 수 있으므로, 재이용표에 등록해야 할 명령구간의 상태에 따라서, 유연하게 입 력패턴의 항목수를 설정하는 것이 가능하게 된다. 또, 입력패턴의 항목수가 고정이 아니므로, 이용하지 않는 항목이 쓸데없이 메모리 영역을 점유하는 일이 없게 되어, 메모리 영역의 이용효율을 향상시킬 수 있다.
또, 트리구조에 의해서 입력패턴이 등록되므로, 항목의 내용이 중복되는 부분에 대해서는, 복수의 입력패턴으로 하나의 라인을 공유하는 것이 가능하게 되어 있다. 따라서, 메모리 영역의 이용효율을 더욱 향상시킬 수 있다.
또, 이상과 같은 구성의 경우, RA 및 RB를 구성하는 메모리로서는 구조가 종방향으로 긴 것이 된다. 가령, 이 메모리 용량을 2Mbyte로 한 경우, 횡이 8word, 종을 65536라인으로 하는 것이 된다.
(연상검색동작의 다른 예)
상기 예에서는 도 43에 나타낸 RA에 있어서, UP, Alt, 및 DN 항목은 이용하고 있지 않게 된다. 즉, 상기 예에서는 RA에 있어서, 이들 항목을 마련할 필요는 없게 된다. 이것에 비해서, UP, Alt., 및 DN 항목을 이용함으로써, 연상검색동작을 더욱 고속화하는 것이 가능하다. 또, 이 연상검색동작의 다른 예는 실시예 1에 있어서의 (입력패턴을 트리구조로서 등록하는 제 2구성예)에서 설명한 내용과 동일하므로, 여기서는 그에 대한 설명을 생략한다. 또, 본 실시예의 RA는 실시예 1에 있어서의 RF에 대응한다.
(출력값 저장수단)
입력패턴의 일치가 확인된 후에, 재이용으로서 출력되는 출력값을 저장하는 수단에 대해서도, 실시예 1에 있어서의 (출력값 저장수단의 구성예)에서 설명한 내 용과 동일하므로, 여기서는 그에 대한 설명을 생략한다.
(명령구간 기억부에 대한 등록처리)
어떤 명령구간의 실행시에 재이용을 행하지 않는다고 판단된 경우에, 그 명령구간에 의한 출력을 RF, RB, RO1 및 RO2에 등록할 때의 동작에 대해서도, 실시예 1에 있어서의 (명령구간 기억부에 대한 등록처리)에서 설명한 내용과 동일하므로, 여기서는 그에 대한 설명을 생략한다.
(제 2구성예에 있어서의 예측기구)
도 45는 제 2구성예를 적용한 경우의 데이터 처리장치의 개략 구성을 나타내고 있다. 도 35에 도시한 구성과 다른 점으로는, RW(4A·4B)에 입출력 기록행이 마련되어 있는 점, 명령구간 기억부(2)에 있어서, RF에 구간별 정보로서 이력 저장행, 예측값 저장영역, 및 대기필요 어드레스 저장영역이 마련되어 있는 점, 및 상술한 제 2구성예에 있어서의 RB, RA, W1이 마련되어 있는 점이다. 또, W1은 상술한 RO1·RO2에 상당하는 것이다. 그 밖의 구성에 대해서는 도 35에 도시한 구성과 동일하므로, 여기서는 그에 대한 설명을 생략한다.
제 2구성예에서는 명령구간의 실행시에 있어서의 입출력패턴을 일시적으로 저장하는 장소로서의 입출력 기록행은 상기와 같이 RW(4A·4B)가 된다. 여기서, 상술한 제 1구성예에서는 명령구간의 실행시에 있어서의 입출력패턴이 RB에 직접 등록되어 있으므로, RW(4A·4B)는 RB의 각 행에 대한 포인터에 의해서 실현되고 있었다. 이것에 비해서, 제 2구성예에서는 RA 및 RB가 트리구조에 의해서 구성되어 있으므로, RW(4A·4B)가 직접 RB의 행을 포인트할 수 없다. 즉, 제 2구성예에서 RW(4A·4B)는 RB의 각 행에 대한 포인터로서 기능하는 것은 아니며, 명령구간의 실행시에 있어서의 입출력패턴을 일시에 저장하는 실질적인 메모리로서 기능하게 된다.
또, 도 43에는 도시하지 않았으나, 제 2구성예에 있어서도, 소정의 명령구간이 반복 실행된 경우에 있어서의 입력패턴의 이력 엔트리, 및 예측 엔트리를 저장하는 일시 저장메모리 영역으로서, 도 34에 도시한 바와 같이, RF 및 RB가 RF로서 마련되어 있다. 단, 이 경우에, RB에 있어서의 엔트리의 행은, 이력 엔트리를 저장하는 이력 저장행, 예측값 저장영역, 및 대기필요 어드레스 저장영역으로서의 수개의 행에 의해서 구성된다.
명령구간이 실행되면, 그 입력요소가 RW(4A·4B)에 순차 저장되고, 모든 입력요소가 모아져서, 연산이 행해짐으로써 출력요소가 확정되면, 이 입출력패턴이 상기 이력 저장행에 저장됨과 동시에, 상기와 같은 트리구조의 입출력패턴 저장기구에 저장된다.
또, 소정의 명령구간이 반복 실행된 경우에는, 이력 저장행에 순차 저장되고, 소정 수의 이력이 저장된 시점에서, 상기와 같이 예측처리부(2B)에 의해서 예측이 행해지고, 예측에 의거해서 SSP(1B)에 의해서 실행된 결과는 상기와 같은 트리구조의 입출력패턴 저장기구에 저장된다.
(본 발명의 적용예)
「LIMIT」등에 의해서 대역변수 영역과 스택 영역을 구별할 수 있는 프로그램 실행환경이 있다고 한 이상, 본 발명에 관계되는 데이터 처리장치를 다른 명령 세트 아키텍처에도 적용하기 위해서는, 스택 프레임 상의 변수가, 상위/하위함수중 어느 쪽 국소 변수인지를 구별하는 수단이 필요하다. 특히, 인수를 저장하는 레지스터가 부족하고, 인수를 스택에 저장할 경우, 호출된 함수측에서는 이 구별을 할 수 없게 된다.
본 실시예에서 채택한 SPARC 프로세서에서는 인수의 선두 6워드를 범용 레지스터에 저장해 두고, 6워드 이상의 인수를 취급하는 함수는 출현빈도가 높지 않는 점과, 인수가 스택에서 넘친 시점에서 재이용할 수 없게 되는 점, 양쪽을 이용함으로써, 함수/루프의 재이용을 실현하고 있다. SPARC 프로세서와 마찬가지로, 32개 이상의 범용 레지스터를 갖는 많은 RISC 프로세서에서도, 동일한 판단을 함으로써, 본 발명과 같은 함수/루프의 재이용을 실현하는 것이 가능하다.
본 발명에 관계되는 데이터 처리장치는, 상술한 바와 같이 SPARC 프로세서에 적용하는 것이 가능하다. 또, SPARC 프로세서와 마찬가지로, 32개 이상의 범용 레지스터를 갖는 많은 RISC 프로세서에도 적용하는 것이 가능하다. 또, 이와 같은 프로세서를 구비한 게임기기, 휴대형 전화기, 및 정보가전 등에 적용할 수 있다.

Claims (31)

  1. 주기억수단으로부터 명령구간을 리드하고, 연산처리를 행한 결과를 주기억수단에 라이트하는 처리를 행하는 데이터 처리장치에 있어서,
    상기 주기억수단에서 리드한 명령구간에 의거해서 연산을 행하는 제 1연산수단과, 상기 제 1연산수단에 의한 상기 주기억수단에 대한 리드 및 라이트시에 이용되는 레지스터와, 상기 제 1연산수단에 의해서 명령구간의 연산이 행해졌을 때의 입력패턴 및 출력패턴으로 이루어지는 입출력 그룹을 생성하는 입출력 생성수단과, 상기 입출력 생성수단에 의해서 생성된 입출력 그룹을 기억하는 명령구간 기억수단을 구비하고,
    상기 제 1연산수단은, 명령구간을 실행할 때에, 그 명령구간의 입력패턴과, 상기 명령구간 기억수단에 기억되어 있는 입력패턴이 일치한 경우, 그 입력패턴과 대응해서 상기 명령구간 기억수단에 기억되어 있는 출력패턴을 레지스터 및/또는 주기억수단으로 출력하는 재이용 처리를 행하고,
    상기 입출력 생성수단은,
    출력패턴에 포함되는 각 출력요소가, 입력패턴에 포함되는 어느 입력요소를 기원으로 하는 것인지를 나타내는 의존관계 저장부와,
    상기 의존관계 저장부에 저장되어 있는 정보에 의거해서, 1이상의 상기 출력요소를 포함하는 출력패턴과, 1이상의 상기 입력요소를 포함하는 입력패턴으로 이루어지는 입출력 그룹을 설정하는 입출력 그룹 설정수단을 구비하고 있는 것을 특 징으로 하는 데이터 처리장치.
  2. 제 1항에 있어서, 상기 입출력 그룹 설정수단은, 어떤 제 1출력요소의 기원이 되는 입력요소의 쌍이, 다른 제 2출력요소의 기원이 되는 입력요소의 쌍에 모두 포함되어 있는 경우에, 제 2출력요소의 기원이 되는 입력요소의 쌍을 입력패턴, 제 1출력요소 및 제 2출력요소를 출력패턴으로 하는 입출력 그룹을 설정하는 것을 특징으로 하는 데이터 처리장치.
  3. 제 1항에 있어서, 상기 입출력 그룹 설정수단은, 어떤 제 1출력요소의 기원이 되는 입력요소의 쌍과, 다른 제 2출력요소의 기원이 되는 입력요소의 쌍 사이에서, 공통 입력요소가 존재하지 않는 경우에, 제 1출력요소의 기원이 되는 입력요소의 쌍을 입력패턴, 제 1출력요소를 출력패턴으로 하는 제 1입출력 그룹, 및 제 2출력요소의 기원이 되는 입력요소의 쌍을 입력패턴, 제 2출력요소를 출력패턴으로 하는 제 2입출력 그룹을 각각 설정하는 것을 특징으로 하는 데이터 처리장치.
  4. 제 1항에 있어서, 상기 의존관계 저장부는, 상기 각 출력요소를 행성분, 상기 각 입력요소를 열성분으로 하는 2차원 배열 메모리에 의해서 구성되고, 그 2차원 배열 메모리의 각 메모리요소는, 그 메모리요소의 행성분에 대응하는 출력요소가, 그 메모리요소의 열성분에 대응하는 입력요소를 기원으로 하는지 아닌지의 정보를 유지하고 있는 것을 특징으로 하는 데이터 처리장치.
  5. 제 4항에 있어서, 상기 제 1연산수단에 의해서 명령구간의 연산이 행해질 때에, 레지스터 및/또는 주기억수단으로부터 리드가 행해진 경우에, 상기 입출력 생성수단은,
    (1) 리드가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서 의존관계 저장부에 등록되어 있는 경우, 그 출력요소에 대응하는 의존관계 저장부의 행성분으로 이루어지는 잠정행렬을 일시 기억하는 처리,
    (2) 리드가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서는 의존관계 저장부에 등록되어 있지 않고, 입력요소로서 의존관계 저장부에 등록되어 있는 경우, 그 입력요소에 대응하는 의존관계 저장부의 열에 대응하는 메모리요소를 1로 하고, 그 밖의 메모리요소를 0으로 한 잠정행렬을 일시 기억하는 처리, 및
    (3) 리드가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소 및 입력요소의 어느 것으로서도 의존관계 저장부에 등록되어 있지 않은 경우에는, 그 어드레스 및 값을 입력요소로서 의존관계 저장부에 등록함과 동시에, 그 입력요소에 대응하는 의존관계 저장부의 열에 대응하는 메모리요소를 1로 하고, 그 밖의 메모리요소를 0으로 한 잠정행렬을 일시 기억하는 처리를 행하고,
    레지스터 및/또는 주기억수단으로의 라이트가 행해진 경우에, 상기 입출력 생성수단은,
    (4) 라이트가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소 로서 등록되어 있는 경우, 등록되어 있는 출력요소에 대응하는 출력값을, 라이트가 행해진 값으로 갱신함과 동시에,
    이미 등록되어 있는 출력요소에 대응하는 의존관계 저장부의 행성분을, 그 시점에서 일시 기억되어 있는 모든 잠정행렬의 논리합으로 치환하고, 그 후, 일시 기억되어 있는 잠정행렬을 초기화하는 처리, 및
    (5) 라이트가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서 등록되어 있지 않은 경우, 그 어드레스 및 값을 출력요소로서 의존관계 저장부에 등록함과 동시에, 그 출력요소에 대응하는 의존관계 저장부의 행성분을, 그 시점에서 일시 기억되어 있는 모든 잠정행렬의 논리합으로 치환하고, 그 후, 일시 기억되어 있는 잠정행렬을 초기화하는 처리를 행하는 것을 특징으로 하는 데이터 처리장치.
  6. 제 4항에 있어서, 상기 입출력 그룹 설정수단은, 상기 2차원 배열 메모리에 있어서의 각 행성분 간의 논리곱 연산을 행하는 행간 논리곱 비교부를 포함하고 있고,
    상기 입출력 그룹 설정수단은, 의존관계 저장부에 있어서, 어떤 제 1행성분의 반전과, 어떤 제 2행성분과의 논리곱이 모두 0이 되는 행성분의 쌍을 추출하고, 추출된 행성분의 쌍 중, 입력요소의 쌍을 가장 많이 포함하는 행성분 이외의 행성분을, 입출력 그룹의 대상 외로서 설정하는 것을 특징으로 하는 데이터 처리장치.
  7. 제 4항에 있어서, 상기 입출력 그룹 설정수단은, 상기 2차원 배열 메모리에 있어서의 각 행성분 간의 논리곱 연산을 행하는 행간 논리곱 비교부를 포함하고 있고,
    상기 입출력 그룹 설정수단은, 의존관계 저장부에 있어서, 다른 어느 행성분에 대해서도 논리곱이 모두 0이 되는 행성분을 각각 입출력 그룹으로서 설정하는 것을 특징으로 하는 데이터 처리장치.
  8. 제 1항 내지 제 7항의 어느 한 항에 있어서, 하나 이상의 제 2연산수단을 추가로 구비하고,
    상기 제 2연산수단은, 상기 제 1연산수단에 의해서 처리가 행해지고 있는 명령구간에 관해서, 이후 입력이 예상되는 예측 입력값에 의거해서 그 명령구간의 연산을 행하고, 그 결과를 상기 명령구간 기억수단에 대해서 등록하는 것을 특징으로 하는 데이터 처리장치.
  9. 제 1항에 있어서, 상기 입출력 그룹 설정수단은,
    각 출력요소가 소속되는 입출력 그룹의 정보를 저장하는 출력측 그룹 저장부와,
    각 입력요소가 소속되는 입출력 그룹의 정보를 저장하는 입력측 그룹 저장부와,
    입출력 그룹을 생성하고 있는 도중에, 상기 의존관계 저장부에 변경이 있는 경우에, 변경된 출력요소와 입력요소의 의존관계를 저장하는 일시저장부와,
    입출력 그룹을 생성하고 있는 도중에, 상기 의존관계 저장부에 변경이 있는 경우에, 변경된 입출력 그룹의 정보를 저장하는 그룹 일시저장부를 구비하고 있는 것을 특징으로 하는 데이터 처리장치.
  10. 제 9항에 있어서, 상기 입출력 그룹 설정수단은, 입출력 그룹을 생성하고 있는 도중에, 상기 출력요소 및/또는 상기 입력요소에 대해서 이미 할당되어 있는 입출력 그룹의 정보를 저장하는 그룹 관리부를 추가로 구비하고 있는 것을 특징으로 하는 데이터 처리장치.
  11. 제 9항에 있어서, 상기 의존관계 저장부는, 상기 각 출력요소를 행성분, 상기 각 입력요소를 열성분으로 하는 2차원 배열 메모리에 의해서 구성되고, 그 2차원 배열 메모리의 각 메모리요소는, 그 메모리요소의 행성분에 대응하는 출력요소가, 그 메모리요소의 열성분에 대응하는 입력요소를 기원으로 하는지 아닌지의 정보를 유지하고 있는 것을 특징으로 하는 데이터 처리장치.
  12. 제 11항에 있어서, 상기 일시저장부는, 상기 의존관계 저장부에 있어서의 복수 행의 메모리요소의 논리합을 저장하는 것이며,
    상기 그룹 일시저장부는, 상기 출력측 그룹 저장부에 있어서의 복수 행의 메모리요소의 논리합, 및/또는 상기 입력측 그룹 저장부에 있어서의 복수의 입력요소 에 대응하는 메모리요소의 논리합을 저장하는 것임을 특징으로 하는 데이터 처리장치.
  13. 제 9항에 있어서, 상기 입출력 그룹 설정수단은, 입출력 그룹을 생성하고 있는 도중에, 조건분기 명령이 검출된 경우에, 그 조건분기 명령이 의존하는 입력요소의 정보를 저장하는 조건분기 저장부를 추가로 구비하고 있는 것을 특징으로 하는 데이터 처리장치.
  14. 제 12항에 있어서, 상기 제 1연산수단에 의해서 명령구간의 연산이 행해질 때에, 레지스터 및/또는 주기억수단으로부터 리드가 행해진 경우에, 상기 입출력 생성수단은,
    (1) 리드가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서 의존관계 저장부에 등록되어 있는 경우, 그 출력요소에 대응하는 의존관계 저장부의 행성분과, 상기 일시저장부의 각 요소와의 논리합을 그 일시저장부에 저장함과 동시에, 그 출력요소에 대응하는 출력측 그룹 저장부의 행성분과, 상기 그룹 일시저장부의 각 요소와의 논리합을 그 그룹 일시저장부에 저장하는 처리,
    (2) 리드가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서는 의존관계 저장부에 등록되어 있지 않고, 입력요소로서 의존관계 저장부에 등록되어 있는 경우, 그 입력요소에 대응하는 의존관계 저장부의 열에 대응하는 메모리요소를 1로 하고, 그 밖의 메모리요소를 0으로 한 정보를 상기 일시저장부에 저 장함과 동시에, 그 입력요소에 대응하는 입력측 그룹 저장부의 각 요소와, 상기 그룹 일시저장부의 각 요소와의 논리합을 그 그룹 일시저장부에 저장하는 처리, 및
    (3) 리드가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소 및 입력요소의 어느 것으로서도 의존관계 저장부에 등록되어 있지 않은 경우에는, 그 어드레스 및 값을 입력요소로서 의존관계 저장부에 등록함과 동시에, 그 입력요소에 대응하는 의존관계 저장부의 열에 대응하는 메모리요소를 1로 하고, 그 밖의 메모리요소를 0으로 한 정보를 상기 일시저장부에 저장하는 처리를 행하고,
    레지스터 및/또는 주기억수단으로의 라이트가 행해진 경우에, 상기 입출력 생성수단은,
    (4) 라이트가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서 등록되어 있는 경우, 등록되어 있는 출력요소에 대응하는 출력값을, 라이트가 행해진 값으로 갱신함과 동시에,
    이미 등록되어 있는 출력요소에 대응하는 의존관계 저장부의 행성분을, 그 시점에서 일시 기억되어 있는 상기 일시저장부에 저장되어 있는 정보로 치환함과 동시에, 상기 그룹 일시저장부에 저장되어 있는 정보에 의거해서, 그 출력요소에 대응하는 출력측 그룹 저장부의 정보, 및 그 출력요소가 의존하는 각 입력요소에 대응하는 입력측 그룹 저장부의 정보를 갱신하는 처리, 및
    (5) 라이트가 행해진 레지스터 및/또는 주기억수단의 어드레스가, 출력요소로서 등록되어 있지 않은 경우, 그 어드레스 및 값을 출력요소로서 의존관계 저장부에 등록함과 동시에, 그 출력요소에 대응하는 의존관계 저장부의 행성분을, 그 시점에서 일시 기억되어 있는 상기 일시저장부에 저장되어 있는 정보로 치환함과 동시에, 상기 그룹 일시저장부에 저장되어 있는 정보에 의거해서, 그 출력요소에 대응하는 출력측 그룹 저장부의 정보, 및 그 출력요소가 의존하는 각 입력요소에 대응하는 입력측 그룹 저장부의 정부를 갱신하는 처리를 행하는 것을 특징으로 하는 데이터 처리장치.
  15. 제 1항 또는 제 9항에 있어서, 상기 명령구간 기억수단은, 복수의 상기 입력패턴을, 일치 비교해야 할 항목을 노드로 간주한 트리구조로서 기억하는 입력패턴 기억수단을 구비하고 있는 것을 특징으로 하는 데이터 처리장치.
  16. 제 15항에 있어서, 상기 입력패턴 기억수단은, 상기 입력패턴에 있어서, 일치 비교해야 할 항목의 값과, 다음에 비교해야 할 항목을 대응시켜서 저장함으로써, 상기 트리구조를 실현하는 것을 특징으로 하는 데이터 처리장치.
  17. 제 16항에 있어서, 상기 입력패턴 기억수단은, 연상검색수단과, 부가기억수단을 구비하고,
    상기 연상검색수단은, 일치 비교해야 할 항목의 값을 저장하는 값 저장영역과, 그 항목을 식별하는 키를 저장하는 키 저장영역을 갖는 하나 이상의 검색대상 라인을 구비하고,
    상기 부가기억수단은, 상기 검색대상 라인에 대응한 대응라인마다, 다음에 연상검색을 행해야 할 항목을 저장하는 검색항목 지정영역을 갖고 있는 것을 특징으로 하는 데이터 처리장치.
  18. 주기억수단으로부터 명령구간을 리드하고, 연산처리를 행한 결과를 주기억수단에 라이트하는 처리를 행하는 데이터 처리장치에 있어서,
    상기 주기억수단에서 리드한 명령구간에 의거해서 연산을 행하는 제 1연산수단과, 상기 제 1연산수단에 의한 상기 주기억수단에 대한 리드 및 라이트시에 이용되는 레지스터와, 복수의 명령구간의 실행결과로서의 입력패턴 및 출력패턴을 기억하는 입출력 기억수단을 구비하고,
    상기 제 1연산수단은, 명령구간을 실행할 때에, 그 명령구간의 입력패턴과, 상기 입출력 기억수단에 기억되어 있는 입력패턴이 일치한 경우, 그 입력패턴과 대응해서 상기 입출력 기억수단에 기억되어 있는 출력패턴을 레지스터 및/또는 주기억수단으로 출력하는 재이용 처리를 행함과 동시에,
    상기 제 1연산수단에 의한 명령구간의 실행결과를, 상기 입출력 기억수단에 기억할 때에, 입력패턴에 포함되는 입력요소 중, 예측을 행해야 할 입력요소와 예측을 행할 필요가 없는 입력요소를 구별하고, 이 구별정보를 상기 입출력 기억수단에 등록하는 등록처리수단과,
    상기 구별정보에 의거해서, 상기 입출력 기억수단에 기억되어 있는 입력요소 중, 예측을 행해야 할 입력요소 값의 변화를 예측하는 예측처리수단과,
    상기 예측처리수단에 의해서 예측된 입력요소에 의거해서, 해당하는 명령구 간을 사전에 실행하는 제 2연산수단을 추가로 구비하고,
    상기 제 2연산수단에 의한 명령구간의 사전 실행결과가 상기 입출력 기억수단에 기억되는 것을 특징으로 하는 데이터 처리장치.
  19. 제 18항에 있어서, 상기 등록처리수단은, 입력에 이용된 상기 레지스터의 각 어드레스에 대해서, 스택 포인터 또는 프레임 포인터로서 이용될 경우, 및 그 어드레스에 대한 라이트명령이 정수 세트 명령인 경우에, 해당 어드레스에 대해서 구별정보로서 정수 플래그를 세트하고, 상기 이외의 경우에, 해당 어드레스에 대해서 상기 정수 플래그를 리셋하는 것을 특징으로 하는 데이터 처리장치.
  20. 제 18항 또는 제 19항에 있어서, 상기 등록처리수단은, 입력요소가 신규로 상기 입출력 기억수단에 기억될 때에, 그 입력요소의 어드레스에 대해서, 구별정보로서 변경 플래그를 리셋하고, 상기 입출력 기억수단에 기억된 후에, 해당 어드레스에 대해서 스토어 명령이 실행된 경우에, 해당 어드레스에 대해서 변경 플래그를 세트하는 것을 특징으로 하는 데이터 처리장치.
  21. 제 19항에 있어서, 상기 등록처리수단은, 입력요소가 신규로 상기 입출력 기억수단에 기억될 때에, 그 입력요소의 어드레스에 대해서, 구별정보로서 이력 플래그를 리셋하고, 그 어드레스에 대한 로드 명령의 실행시에, 그 어드레스를 생성한 레지스터 어드레스에 상기 정수 플래그가 세트되어 있는 경우에, 그 어드레스에 대 해서 이력 플래그를 세트하는 것을 특징으로 하는 데이터 처리장치.
  22. 제 21항에 있어서, 상기 등록처리수단은, 입력요소가 신규로 상기 입출력 기억수단에 기억될 때에, 그 입력요소의 어드레스에 대해서, 구별정보로서 변경 플래그를 리셋하고, 상기 입출력 기억수단에 기억된 후에, 해당 어드레스에 대해서 스토어 명령이 실행된 경우에, 해당 어드레스에 대해서 변경 플래그를 세트함과 동시에,
    상기 예측처리수단은, 상기 입출력 기억수단에 기억되어 있는 입력요소의 어드레스 중, 상기 변경 플래그가 세트되고, 또 이력 플래그가 세트되어 있는 어드레스에 관해서, 입력요소의 변화 예측을 행하는 것을 특징으로 하는 데이터 처리장치.
  23. 제 18항 또는 제 21항에 있어서, 상기 예측처리수단은, 상기 입출력 기억수단에 기억되어 있는 입력요소 중, 그 입력요소의 이력에 있어서의 값의 변화량이 0은 아닌 입력요소에 대해서만, 입력요소 값의 변화 예측을 행하는 것을 특징으로 하는 데이터 처리장치.
  24. 제 18항에 있어서, 상기 등록처리수단은, 상기 제 1연산수단에 의한 명령구간의 실행결과를, 상기 입출력 기억수단에 기억할 때에, 입력패턴에 포함되는 입력요소 중, 예측을 행해야 할 입력요소와 예측을 행할 필요가 없는 입력요소를 구별 하고, 이 구별정보를 상기 입출력 기억수단에 등록함과 동시에, 상기 입출력 기억수단에 저장되는 출력패턴에 있어서의 출력요소 중, 해당 명령구간의 실행시에 스토어가 행해진 것에 대해서 그 스토어 횟수를 카운트하고, 이 카운트 값을 상기 입출력 기억수단에 저장하며,
    상기 제 2연산수단은, 상기 예측처리수단에 의해서 예측된 입력요소에 의거해서, 해당하는 명령구간을 사전에 실행함과 동시에, 상기 카운트 값에 의거해서 해당 입력요소에 대해서 행해지는 스토어 횟수를 대기한 다음에 주기억으로부터의 리드를 행해서 해당하는 명령구간의 사전 실행을 행하는 것을 특징으로 하는 데이터 처리장치.
  25. 제 24항에 있어서, 상기 입출력 기억수단은, 상기 제 1연산수단에 의한 명령구간의 실행결과로서의 입력패턴 및 출력패턴을 일시적으로 기록하는 입출력 기록영역을 구비하고,
    상기 입출력 기록영역은, 각 출력요소에 대해서, 스토어가 행해진 횟수를 저장하는 스토어 카운터를 갖는 것을 특징으로 하는 데이터 처리장치.
  26. 제 25항에 있어서, 상기 입출력 기억수단은, 상기 제 1연산수단에 의해서 연산이 행해진 명령구간마다 과거 실행결과의 이력을 저장하는 이력저장영역을 구비하고,
    상기 등록처리수단은, 상기 입출력 기록영역에 기록된 실행결과를 상기 이력 저장영역에 저장함과 동시에, 상기 입출력 기록영역에 기록된 실행결과의 입력패턴에 포함되는 입력요소 중, 이력저장영역에 전회(前回)의 실행결과로서 등록되어 있는 출력요소와 동일한 어드레스의 입력요소에 대해서, 대응하는 전회의 출력요소 스토어 카운터를 그 입력요소에 대한 스토어 카운터로서 등록하는 것을 특징으로 하는 데이터 처리장치.
  27. 제 26항에 있어서, 상기 입출력 기억수단은, 상기 예측처리수단에 의해서 예측된 입력요소를 저장하는 예측값 저장영역을 구비하고,
    상기 예측처리수단은, 상기 이력저장영역에 저장되어 있는 입력요소 중, 실행이력 사이에서의 값의 변화량이 일정한 입력요소에 관해서 값의 예측을 행하고, 상기 예측값 저장영역에 저장하는 것을 특징으로 하는 데이터 처리장치.
  28. 제 26항에 있어서, 상기 입출력 기억수단은, 스토어 횟수를 대기한 다음에 주기억으로부터의 리드를 행해야 할 입력요소를 저장하는 대기필요 어드레스 저장영역을 구비하고,
    상기 예측처리수단은, 상기 이력저장영역에 저장되어 있는 입력요소 중, 실행이력에 있어서 어드레스가 변화하지 않고, 실행이력 사이에서의 값의 변화량이 불확정인 입력요소에 관해서, 상기 스토어 카운터, 및 예측거리에 의거하는 값으로서의 대기 카운터를 상기 대기필요 어드레스 저장영역에 저장하는 것을 특징으로 하는 데이터 처리장치.
  29. 제 26항에 있어서, 상기 입출력 기억수단은, 스토어 횟수를 대기한 다음에 주기억으로부터의 리드를 행해야 할 입력요소를 저장하는 대기필요 어드레스 저장영역을 구비하고,
    상기 예측처리수단은, 상기 이력저장영역에 저장되어 있는 입력요소 중, 실행이력에 있어서 어드레스 자체가 변화하고, 각각의 어드레스 값도 스토어가 발생함으로써 변화하는 입력요소에 관해서, 상기 스토어 카운터에 의거한 값으로서의 대기 카운터를 상기 대기필요 어드레스 저장영역에 저장하는 것을 특징으로 하는 데이터 처리장치.
  30. 제 1항 내지 제 29항의 어느 한 항에 기재된 데이터 처리장치가 구비하는 각 수단이 행하는 처리를 컴퓨터에 실행시키는 것을 특징으로 하는 데이터 처리 프로그램.
  31. 제 30항에 기재된 데이터 처리 프로그램을 기록한 컴퓨터 판독가능한 기록매체.
KR1020067021413A 2004-03-29 2005-03-25 데이터 처리장치, 데이터 처리 프로그램, 및 데이터 처리프로그램을 기록한 기록매체 KR100877138B1 (ko)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
JP2004097197A JP4254954B2 (ja) 2004-03-29 2004-03-29 データ処理装置
JPJP-P-2004-00097197 2004-03-29
JPJP-P-2004-00266056 2004-09-13
JP2004266056A JP4660747B2 (ja) 2004-09-13 2004-09-13 データ処理装置
JP2004324348A JP4654433B2 (ja) 2004-11-08 2004-11-08 データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体
JPJP-P-2004-00324348 2004-11-08
JP2004347124A JP4635193B2 (ja) 2004-11-30 2004-11-30 データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体
JPJP-P-2004-00347124 2004-11-30

Publications (2)

Publication Number Publication Date
KR20060129534A true KR20060129534A (ko) 2006-12-15
KR100877138B1 KR100877138B1 (ko) 2009-01-09

Family

ID=35056363

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020067021413A KR100877138B1 (ko) 2004-03-29 2005-03-25 데이터 처리장치, 데이터 처리 프로그램, 및 데이터 처리프로그램을 기록한 기록매체

Country Status (5)

Country Link
US (1) US8055885B2 (ko)
EP (1) EP1731998A1 (ko)
KR (1) KR100877138B1 (ko)
TW (1) TWI319851B (ko)
WO (1) WO2005093562A1 (ko)

Families Citing this family (72)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1731998A1 (en) 2004-03-29 2006-12-13 Kyoto University Data processing device, data processing program, and recording medium containing the data processing program
CN101449256B (zh) 2006-04-12 2013-12-25 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
EP2527972A3 (en) 2006-11-14 2014-08-06 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US20110004881A1 (en) * 2008-03-12 2011-01-06 Nxp B.V. Look-ahead task management
US8127116B2 (en) * 2009-04-03 2012-02-28 International Business Machines Corporation Dependency matrix with reduced area and power consumption
US20120185859A1 (en) * 2009-08-13 2012-07-19 Sony Corporation Methods and systems for program analysis and program conversion
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
EP2616928B1 (en) * 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
US8793675B2 (en) * 2010-12-24 2014-07-29 Intel Corporation Loop parallelization based on loop splitting or index array
KR101966712B1 (ko) 2011-03-25 2019-04-09 인텔 코포레이션 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
EP2689327B1 (en) 2011-03-25 2021-07-28 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
WO2012162188A2 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
KR101639854B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 상호접속 구조
US9244798B1 (en) * 2011-06-20 2016-01-26 Broadcom Corporation Programmable micro-core processors for packet parsing with packet ordering
US9455598B1 (en) 2011-06-20 2016-09-27 Broadcom Corporation Programmable micro-core processors for packet parsing
US9335939B2 (en) 2011-07-12 2016-05-10 Violin Memory Inc. RAIDed memory system
US9417823B2 (en) 2011-07-12 2016-08-16 Violin Memory Inc. Memory system management
US8645404B2 (en) * 2011-10-21 2014-02-04 International Business Machines Corporation Memory pattern searching via displaced-read memory addressing
CN108427574B (zh) 2011-11-22 2022-06-07 英特尔公司 微处理器加速的代码优化器
US10191746B2 (en) 2011-11-22 2019-01-29 Intel Corporation Accelerated code optimizer for a multiengine microprocessor
WO2013100893A1 (en) * 2011-12-27 2013-07-04 Intel Corporation Systems, apparatuses, and methods for generating a dependency vector based on two source writemask registers
WO2013184923A1 (en) * 2012-06-07 2013-12-12 Violin Memory, Inc. Memory system management
CN103257927B (zh) * 2012-11-12 2015-08-12 盛吉高科(北京)科技有限公司 一种针对通信访问的数据管理系统
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
EP2972845B1 (en) 2013-03-15 2021-07-07 Intel Corporation A method for executing multithreaded instructions grouped onto blocks
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9792252B2 (en) 2013-05-31 2017-10-17 Microsoft Technology Licensing, Llc Incorporating a spatial array into one or more programmable processor cores
US9679342B2 (en) 2013-07-12 2017-06-13 Arm Limited Result data stream coding for repeating workloads
US9740496B2 (en) 2013-09-06 2017-08-22 International Business Machines Corporation Processor with memory-embedded pipeline for table-driven computation
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US9720693B2 (en) 2015-06-26 2017-08-01 Microsoft Technology Licensing, Llc Bulk allocation of instruction blocks to a processor instruction window
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
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
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US10452399B2 (en) 2015-09-19 2019-10-22 Microsoft Technology Licensing, Llc Broadcast channel architectures for block-based processors
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US10061584B2 (en) 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US10936316B2 (en) 2015-09-19 2021-03-02 Microsoft Technology Licensing, Llc Dense read encoding for dataflow ISA
US10180840B2 (en) 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US10776115B2 (en) 2015-09-19 2020-09-15 Microsoft Technology Licensing, Llc Debug support for block-based processor
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US10031756B2 (en) 2015-09-19 2018-07-24 Microsoft Technology Licensing, Llc Multi-nullification
US10719321B2 (en) 2015-09-19 2020-07-21 Microsoft Technology Licensing, Llc Prefetching instruction blocks
JP2017107448A (ja) * 2015-12-10 2017-06-15 株式会社デンソー 並列化方法、並列化ツール、車載装置
US11106467B2 (en) 2016-04-28 2021-08-31 Microsoft Technology Licensing, Llc Incremental scheduler for out-of-order block ISA processors
US10671361B2 (en) * 2016-10-25 2020-06-02 Paypal, Inc. Automatically determining data dependencies to facilitate code execution
US11531552B2 (en) 2017-02-06 2022-12-20 Microsoft Technology Licensing, Llc Executing multiple programs simultaneously on a processor core
US10963379B2 (en) 2018-01-30 2021-03-30 Microsoft Technology Licensing, Llc Coupling wide memory interface to wide write back paths
US10824429B2 (en) 2018-09-19 2020-11-03 Microsoft Technology Licensing, Llc Commit logic and precise exceptions in explicit dataflow graph execution architectures
KR20220021753A (ko) 2020-08-14 2022-02-22 삼성전자주식회사 불휘발성 메모리의 파워 로스 프로텍션 영역에 저장된 온 셀 카운트를 복원하여 읽기 동작을 수행하는 스토리지 장치
CN115221078A (zh) * 2021-04-14 2022-10-21 瑞昱半导体股份有限公司 数据传输方法与数据处理电路

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4943909A (en) * 1987-07-08 1990-07-24 At&T Bell Laboratories Computational origami
US5285527A (en) * 1991-12-11 1994-02-08 Northern Telecom Limited Predictive historical cache memory
US6400996B1 (en) * 1999-02-01 2002-06-04 Steven M. Hoffberg Adaptive pattern recognition based control system and method
JP3451595B2 (ja) * 1995-06-07 2003-09-29 インターナショナル・ビジネス・マシーンズ・コーポレーション 二つの別個の命令セット・アーキテクチャへの拡張をサポートすることができるアーキテクチャ・モード制御を備えたマイクロプロセッサ
US5845103A (en) * 1997-06-13 1998-12-01 Wisconsin Alumni Research Foundation Computer with dynamic instruction reuse
US6006326A (en) 1997-06-25 1999-12-21 Sun Microsystems, Inc. Apparatus for restraining over-eager load boosting in an out-of-order machine using a memory disambiguation buffer for determining dependencies
US6078987A (en) * 1997-09-30 2000-06-20 Sun Microsystems, Inc. Translation look aside buffer having separate RAM arrays which are accessable with separate enable signals
JPH11212788A (ja) 1998-01-28 1999-08-06 Toshiba Corp プロセッサのデータ供給装置
US6810474B1 (en) * 1998-03-04 2004-10-26 Hitachi, Ltd. Information processor
US6401196B1 (en) 1998-06-19 2002-06-04 Motorola, Inc. Data processor system having branch control and method thereof
JP2001005678A (ja) 1999-06-18 2001-01-12 Fujitsu Ltd ネットワーク型情報処理装置及び方法
JP4141112B2 (ja) 2001-04-12 2008-08-27 株式会社日立製作所 プロセッサおよびプロセッサシステム
JP3576992B2 (ja) 2001-04-19 2004-10-13 エヌイーシーシステムテクノロジー株式会社 画像処理装置、画像処理方法、プログラム
JP3807379B2 (ja) * 2003-02-21 2006-08-09 ソニー株式会社 パターン検出回路
JP3855076B2 (ja) 2003-02-25 2006-12-06 独立行政法人科学技術振興機構 データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体
JP4254954B2 (ja) 2004-03-29 2009-04-15 独立行政法人科学技術振興機構 データ処理装置
EP1731998A1 (en) 2004-03-29 2006-12-13 Kyoto University Data processing device, data processing program, and recording medium containing the data processing program

Also Published As

Publication number Publication date
US20080250232A1 (en) 2008-10-09
TWI319851B (en) 2010-01-21
US8055885B2 (en) 2011-11-08
TW200622621A (en) 2006-07-01
EP1731998A1 (en) 2006-12-13
WO2005093562A1 (ja) 2005-10-06
KR100877138B1 (ko) 2009-01-09

Similar Documents

Publication Publication Date Title
KR100877138B1 (ko) 데이터 처리장치, 데이터 처리 프로그램, 및 데이터 처리프로그램을 기록한 기록매체
Franklin et al. The expandable split window paradigm for exploiting fine-grain parallelsim
US7363467B2 (en) Dependence-chain processing using trace descriptors having dependency descriptors
US20190310852A1 (en) Decoupled processor instruction window and operand buffer
US9946548B2 (en) Age-based management of instruction blocks in a processor instruction window
US9952867B2 (en) Mapping instruction blocks based on block size
HU214423B (hu) Előfeldolgozó processzor gyorsító memóriához
KR102575940B1 (ko) 프로세서 명령어 창에 대한 명령어 블록의 대량 할당
CN103513957A (zh) 高性能缓存系统和方法
CN102841865A (zh) 高性能缓存系统和方法
US9201806B2 (en) Anticipatorily loading a page of memory
CN103365628B (zh) 用于执行预解码时优化的指令的方法和系统
CN110837584B (zh) 一种分块并行构造后缀数组的方法及系统
CN109308191B (zh) 分支预测方法及装置
CN100504762C (zh) 数据处理装置
JP3855076B2 (ja) データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体
US7383543B2 (en) Management of reuse invalidation buffer for computation reuse
US5506974A (en) Method and means for concatenating multiple instructions
JP3895314B2 (ja) データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体
JP4635193B2 (ja) データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体
JP4660747B2 (ja) データ処理装置
JP4654433B2 (ja) データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体
JP3855077B2 (ja) データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体
CN111061510B (zh) 一种可扩展的asip结构平台及指令处理方法
Haraguchi et al. An efficient local search algorithm with large neighborhoods for the maximum weighted independent set problem

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121130

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20131129

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20141105

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20151105

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20161104

Year of fee payment: 9

LAPS Lapse due to unpaid annual fee