KR20220057482A - 데이터 구조 포기 - Google Patents

데이터 구조 포기 Download PDF

Info

Publication number
KR20220057482A
KR20220057482A KR1020217029390A KR20217029390A KR20220057482A KR 20220057482 A KR20220057482 A KR 20220057482A KR 1020217029390 A KR1020217029390 A KR 1020217029390A KR 20217029390 A KR20217029390 A KR 20217029390A KR 20220057482 A KR20220057482 A KR 20220057482A
Authority
KR
South Korea
Prior art keywords
instruction
storage
circuitry
instructions
abandon
Prior art date
Application number
KR1020217029390A
Other languages
English (en)
Inventor
데이비드 헨나 만셀
니겔 존 스테픈스
매튜 루시엔 에반스
Original Assignee
에이알엠 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에이알엠 리미티드 filed Critical 에이알엠 리미티드
Publication of KR20220057482A publication Critical patent/KR20220057482A/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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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, look ahead
    • G06F9/3824Operand accessing
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • G06F9/3859
    • 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, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Abstract

데이터를 저장하는 복수의 저장 회로들을 포함하는 데이터 처리 장치가 제공된다. 실행 회로는 명령어들에 응답하여 저장 회로들을 사용하여 하나 이상의 동작들을 수행한다. 명령어들은 포기 명령어를 포함한다. 실행 회로는 복수의 저장 회로들 중 적어도 하나가 미사용 저장 회로임을 표시함으로써 포기 명령어에 응답하고, 실행 회로는 포기 명령어를 실행한 후에 미사용 저장 회로에 기초하여 미래 명령어들의 실행에 영향을 미친다.

Description

데이터 구조 포기
본 개시는 데이터 처리에 관한 것이다. 본 개시는 예를 들어 데이터를 저장하기 위해 레지스터들과 같은 저장 회로들을 사용하는 데이터 처리 디바이스들과 관련이 있을 수 있다.
데이터 처리 장치는 처리 동안 데이터 값들을 저장하는 데 사용되는 레지스터들과 같은 하나 이상의 저장 회로를 포함할 수 있다. 그러한 데이터 값들은 명령어들에 의해 연산될 수 있다. 그러나, 주어진 기간에, 데이터 값들 중 일부는 더 이상 유용하지 않을 것이다. 그러나, 그러한 데이터 값들의 존재는 미래 명령어들의 실행에 영향을 미칠 수 있다. 예를 들어, 분기가 추론적으로 취해지고 명령어가 레지스터를 목적지 레지스터로서 사용하려고 시도하면, 분기가 추론적으로 올바르게 취해졌는지가 결정될 수 있을 때까지 정지(stall)가 발생할 수 있다. 이것은 취해지지 않은 분기 상의 명령어가 레지스터를 소스로서 사용할 수 있고 일단 레지스터 내의 값이 겹쳐 쓰기되면 추론적으로 취해진 분기를 "되감기"하는 것이 가능하지 않을 수 있기 때문이다. 한편 컨텍스트 스위칭은 레지스터들의 상태가 저장되게 하여, 그러한 레지스터들이 상이한 프로세스에 의해 사용될 수 있게 한다. 그러나, 각각의 레지스터가 저장되어야 할 수 있기 때문에, 각각의 레지스터의 존재는 컨텍스트 스위치가 발생하는 데 걸리는 시간을 증가시킨다. 그러한 데이터 처리 장치의 효율을 개선하는 것이 바람직하다.
제1 예시적인 구성에서 보면, 데이터 처리 장치로서, 데이터를 저장하는 복수의 저장 회로들; 및 명령어들에 응답하여 저장 회로들을 사용하여 하나 이상의 동작들을 수행하는 실행 회로를 포함하며, 명령어들은 포기 명령어를 포함하고; 실행 회로는 복수의 저장 회로들 중 적어도 하나가 미사용 저장 회로임을 표시함으로써 포기 명령어에 응답하도록 적응되고; 실행 회로는 포기 명령어를 실행한 후에 미사용 저장 회로에 기초하여 미래 명령어들의 실행에 영향을 미치도록 적응되는, 데이터 처리 장치가 제공된다.
제2 예시적인 구성에서 보면, 데이터 처리 방법으로서, 복수의 저장 회로들에 데이터를 저장하는 단계; 포기 명령어를 포함하는 명령어들에 응답하여 저장 회로들을 사용하여 하나 이상의 동작들을 수행하는 단계; 포기 명령어에 응답하여, 복수의 저장 회로들 중 적어도 하나가 미사용 저장 회로임을 표시하는 단계; 및 포기 명령어를 실행한 후에 미사용 저장 회로에 기초하여 미래 명령어들의 실행에 영향을 미치는 단계를 포함하는, 데이터 처리 방법이 제공된다.
제3 예시적인 구성에서 보면, 데이터 처리 장치로서, 복수의 저장 회로들에 데이터를 저장하기 위한 수단; 포기 명령어를 포함하는 명령어들에 응답하여 저장 회로들을 사용하여 하나 이상의 동작들을 수행하기 위한 수단; 포기 명령어에 응답하여, 복수의 저장 회로들 중 적어도 하나가 미사용 저장 회로임을 표시하기 위한 수단; 및 포기 명령어를 실행한 후에 미사용 저장 회로에 기초하여 미래 명령어들의 실행에 영향을 미치기 위한 수단을 포함하는, 데이터 처리 장치가 제공된다.
본 발명은 첨부 도면에 예시된 바와 같은 본 발명의 실시예들을 참조하여, 단지 예로서, 추가로 설명될 것이다.
도 1은 몇몇 실시예들에 따른 데이터 처리 장치를 개략적으로 예시한다.
도 2a, 도 2b, 및 도 2c는 몇몇 실시예들에 따른 포기 명령어들의 3개의 상이한 예들을 도시한다.
도 3은 몇몇 실시예들에 따른 추론적 실행의 방법을 예시하는 흐름도를 도시한다.
도 4는 몇몇 실시예들에 따른 저장 회로 포기가 어떻게 추론을 도울 수 있는지의 예를 예시한다.
도 5는 몇몇 실시예들에 따른 옳지 않은 추론적 실행으로부터 복구하는 방법을 예시하는 흐름도를 도시한다.
도 6은 몇몇 실시예들에 따른 레지스터들과 같은 저장 회로들이 포기되었을 때 컨텍스트 스위치 동안 컨텍스트를 저장하는 예를 도시한다.
도 7은 몇몇 실시예들에 따른 컨텍스트 스위치의 일부로서, 몇몇 레지스터들이 포기된 경우, 레지스터들을 저장하는 예를 제공한다.
도 8은 몇몇 실시예들에 따른 레지스터들이 포기되었을 때 컨텍스트 스위치 동안 컨텍스트를 로딩하는 예를 도시한다.
도 9는 몇몇 실시예들에 따른 데이터 처리의 방법을 예시하는 흐름도를 도시한다.
첨부 도면을 참조하여 실시예들을 논의하기 전에, 실시예들의 하기 설명이 제공된다.
몇몇 예시적인 구성들에 따르면, 데이터 처리 장치로서, 데이터를 저장하는 복수의 저장 회로들; 및 명령어들에 응답하여 저장 회로들을 사용하여 하나 이상의 동작들을 수행하는 실행 회로를 포함하며, 명령어들은 포기 명령어를 포함하고; 실행 회로는 복수의 저장 회로들 중 적어도 하나가 미사용 저장 회로임을 표시함으로써 포기 명령어에 응답하도록 적응되고; 실행 회로는 포기 명령어를 실행한 후에 미사용 저장 회로에 기초하여 미래 명령어들의 실행에 영향을 미치도록 적응되는, 데이터 처리 장치가 제공된다.
위의 예시적인 구성들에서, 포기 명령어는 특정 저장 회로에 저장된 값(예를 들어, 그 저장 회로에 저장된 데이터 값)이 더 이상 사용되지 않음을 표시하는 데 사용된다. '사용되고 있지 않음'의 이러한 상태는 저장 회로가 다음에 액세스(예를 들어, 기입)될 때까지 지속되며, 그 때의 시점에서 값은 변하고 따라서 저장 회로의 상태는 다시 한 번 '사용됨'으로 된다. 몇몇 실시예들에서, 저장 회로가 이제 '사용 중'임을 표시하기 위해 제공되는 명시적 명령어가 있을 수 있다. 아무튼, 적어도 몇몇 미래 명령어들의 실행은 그러한 상태를 갖는 저장 회로에 기초하여 영향을 받는다(예를 들어, 수정된다). 예를 들어 분기들 또는 다른 제어 흐름 명령어들로 인해 미래 명령어들이 실제로 프로그램에서 더 일찍 나타날 수 있다는 점에 유의한다. 포기 명령어는 전용 명령어일 필요는 없지만, 대신에 저장 회로를 포기하는 기능을 수행하는 정규 명령어일 수 있다. 이러한 방식으로, 더 이상 사용되지 않는 저장 회로들은 그와 같이 표시될 수 있고, 따라서 미래 명령어들의 실행은 그러한 저장 회로들을 고려함으로써 더 효율적으로 될 수 있다. 주어진 저장 회로가 더 이상 사용되지 않는지를 결정하는 프로세스는 컴파일러에 의해 그리고/또는 프로그래머에 의해 수행될 수 있다. 컴파일/프로그래밍 시에, 주어진 값이 더 이상 사용되는지를 결정하기 위해 전체 프로그램이 분석될 수 있음을 고려하면, 그러한 정보가 데이터 처리 장치에 대한 프로그램의 일부로서 제공되는 것이 가능하다.
몇몇 예시적인 구성들에 따르면, 데이터 처리 장치는 컨텍스트 스위치에 응답하여 저장 회로들의 세트를 저장하는 컨텍스트 저장 회로를 포함하며, 미래 명령어들은 컨텍스트 스위치를 수행하는 하나 이상의 컨텍스트 스위칭 명령어들을 포함한다. 컨텍스트 저장 회로는, 예를 들어, 데이터 처리 장치가 하나의 애플리케이션의 실행으로부터 다른 애플리케이션으로 스위칭하는 컨텍스트 스위치 동안 사용될 수 있다. 컨텍스트 스위치 동안, 저장 회로들의 세트와 연관된 내용들이 (예를 들어, 메인 메모리에) 저장되는 것이 필요하며, 따라서 후속하는 애플리케이션은 현재 그러한 저장 회로들 내의 데이터가 손실됨이 없이 그러한 저장 회로들을 이용할 수 있다.
몇몇 예들에서, 컨텍스트 저장 회로는 미사용 저장 회로를 저장하는 것을 억제하도록 적응된다. 미사용 저장 회로를 저장하는 것을 억제함으로써, 컨텍스트 저장을 수행하는 프로세스는 저장할 데이터가 더 적은 결과로서 가속화될 수 있다. 따라서 그것은 현재 컨텍스트를 저장하기 위해 필요한 저장소의 양을 감소시킬 뿐만 아니라 컨텍스트 저장 프로세스의 효율을 증가시킨다.
몇몇 예들에서, 컨텍스트 저장 회로는 미사용 저장 회로 이외의 복수의 저장 회로를 저장하도록 적응된다. 그러한 실시예들에서, 미사용 저장 회로들을 제외한 저장 회로들의 세트가 저장된다.
몇몇 예들에서, 컨텍스트 저장 회로는 미사용 저장 회로의 아이덴티티 또는 미사용 이외의 저장 회로들의 아이덴티티들을 저장하도록 적응된다. 그 결과, 미사용 저장 회로들의 아이덴티티들이 저장되거나, 사용 저장 회로들의 아이덴티티들이 저장된다. 어느 경우에나, 애플리케이션이 재개되어야 할 때 저장된 값들을 다시 저장 회로들에 어떻게 그리고 어디에 삽입할지를 결정하는 것이 가능하다. 다수의 미사용 저장 회로들이 있는 경우, 미사용 저장 회로들 각각의 아이덴티티가 저장될 수 있으며, 따라서 저장된 값들 각각은 그의 올바른 위치로 복원될 수 있다. 복원 프로세스에서의 초기 단계로서, 저장 회로들의 세트의 현재 값은 복원되고 있지 않은 그러한 저장 회로들이 소거되도록 리셋될 수 있다. 그 결과, 스위칭 아웃되고 있는 애플리케이션에 의해 사용되는 데이터는 그것이 예기치 않게 거동할지라도 스위칭 인되고 있는 애플리케이션에 의해 판독될 수 없다.
몇몇 예들에서, 데이터 처리 장치는 명령어들을 스트림 순서로 수신하고 명령어들을 실행 회로에 스트림 순서 이외의 수정된 순서로 발행하는 발행 회로를 포함한다. 발행 회로는 명령어들을 순서를 벗어나 실행하기 위해 사용될 수 있다. 특히, 발행 회로는 명령어들을 스트림 순서로 수신하고 이어서 명령어들(또는 그러한 명령어들에 대응하는 동작들/제어 신호들)을 큐에 제공할 수 있으며, 그곳에서 그들은 명령어들 사이의 데이터 의존성들에 종속하는 임의의 순서로 실행될 수 있다. 이러한 방식으로, 다수의 실행 회로가 존재한다면, 명령어들이 병렬로 실행될 수 있다. 더욱이, 명령어들을 순서를 벗어나 실행함으로써, 명령어들이 다른 명령어들 간의 데이터 의존성들의 결과로서 실행을 중단할 필요가 없도록 명령어들 간의 데이터 의존성들의 영향을 제한하는 것이 가능하다.
몇몇 예들에서, 스트림 순서는 포기 명령어, 이어서 분기 명령어, 이어서 생산자 명령어를 포함하고; 분기 명령어는 취해지는 것으로 예측되고; 생산자 명령어는 제2 데이터 값을 미사용 저장 회로에 저장하고; 수정된 순서는 분기가 완료되기 전에 생산자 명령어가 발행되게 한다. 이러한 예들에서, 포기 명령어는 제1 데이터 값을 보유하는 저장 회로가 더 이상 사용되고 있지 않음을 표시하는 데 사용된다. 이것의 결과로서, 분기가 여전히 추론적인(예를 들어, 완료되지 않은) 동안 (분기 타겟에 있는) 생산자 명령어가 실행을 시작하는 것이 가능하다. 이것은 포기 명령어가 제1 데이터 값을 저장하는 저장 회로가 더 이상 사용되지 않을 것임을 표시했기 때문이다. 그 결과, 그 데이터를 보유하는 저장 회로는 제2 데이터 값을 저장하기 위해 생산자 명령어에 의해 사용될 수 있다. 통상적으로, 제어 흐름이 (예를 들어, 조건부 분기로 인해) 불확실했다면, 프로세서는 생산자 명령어를 추론적으로 실행할 수 없었을 것인데, 그 이유는 분기가 옳지 않게 예측되었다면 오래된 값을 판독하는 올바른 프로그램 흐름 상에 소비자 명령어가 아직 있을 수 있기 때문이다. 포기 메커니즘은 이것이 사실이 아니라고 말하는 것을 가능하게 하며, 이에 따라 추론이 진행되는 것을 가능하게 한다. 몇몇 예들에서, 미사용 저장 회로로부터 제1 데이터 값을 판독하는 소비자 명령어는 포기 명령어에 선행한다. 소비자 명령어들은 (소비자 명령어들에 의한 사용을 위한 데이터 값들을 제공하는 명령어들인 것으로 간주될 수 있는 생산자 명령어들과는 대조적으로) 특정 데이터 값을 이용하는 명령어들인 것으로 간주될 수 있다. 따라서, 소비자 명령어가 포기 명령어에 선행하는 경우, 생산자 명령어는 소비자 명령어가 포기 명령어의 대상인 레지스터를 판독하는 것을 완료한 후에 실행된다.
몇몇 예들에서, 소비자 명령어는 복수의 프로세서 사이클에 걸쳐 실행된다. 소비자 명령어가 복수의 프로세서 사이클에 걸쳐 실행되는 경우, 소비자 명령어가 완료되기 전에 생산자 명령어와 같은 다른 명령어들을 실행하는 능력은 소비자 명령어가 완료될 때까지 정지하기보다는 다른 동작들을 수행하는 것을 가능하게 한다.
몇몇 예들에서, 소비자 명령어는 행렬 연산 명령어이다. 다수의 프로세서 사이클에 걸쳐 실행되는 명령어들의 다른 예들은 분할 명령어들 및 메모리 액세스 명령어들을 포함할 수 있다.
몇몇 예들에서, 복수의 저장 회로들 각각은 동시에 어드레싱 가능하다. 복수의 저장 회로들이 동시에 어드레싱 가능한 것의 결과로서, 그러한 저장 회로들 중 임의의 것이 임의의 한 시점에 액세스되는 것이 가능하다. 이것은 어드레싱 가능한 저장 회로를 추가함으로써 그의 효율이 개선될 수 있는 행렬 곱셈과 같은 몇몇 알고리즘들에 유용할 수 있다. 이것은 모든 아키텍처들에서 항상 가능한 것은 아니다. 특히, 특정 아키텍처는 방대한 수의 이용 가능한 저장 회로들을 가질 수 있으며, 이들 중에서 서브세트만이 임의의 한 순간에 어드레싱될 수 있다. 이것은 데이터 처리 장치가 증가된 저장 회로 가용성의 착각을 생성할 수 있게 한다. 예를 들어, 다수의 명령어들이 레지스터(저장 회로) R3에 데이터를 저장하면, 각각의 추론적 흐름에 대해, 새로운 R3 레지스터가 할당될 수 있도록 레지스터 R3의 다수의 사본들이 제공될 수 있다. 추론이 옳지 않은 것으로 판명되면, R3의 이전 사본은 "복원"될 수 있다. 그러한 기술은 재명명으로 알려져 있다. 재명명은 많은 수의 리소스들이 이용 가능하게 될 것을 요구하며, 요구되는 회로의 양으로 인해 특히 큰 레지스터들에 대해 비실용적인 것으로 간주될 수 있다. 재명명 레지스터들을 제공하기 위해 동일한 저장 공간을 사용하기보다는 더 많은 어드레싱 가능한 저장소를 제공함으로써, 행렬 곱셈과 같은 알고리즘들의 효율을 개선하는 것이 가능하다. 그때 사용되지 않는 레지스터들을 '포기'할 수 있는 것에 의해, 컨텍스트 스위치 동안 저장될 필요가 있는 레지스터들의 수가 감소될 수 있다.
몇몇 예들에서, 복수의 저장 회로들 각각은 복수의 데이터 값들을 저장하도록 적응되고, 복수의 저장 회로들 각각은 복수의 데이터 값들을 저장하도록 적응된다. 복수의 데이터 값들을 저장하도록 적응되는 저장 회로를 제공함으로써, 복잡한 데이터 구조들이 제공될 수 있다. 예를 들어, 그러한 저장 회로들은 동작이 전체 행렬에 대해 한꺼번에 수행될 수 있도록 행렬에 관한 데이터 값들 모두를 저장하도록 구성될 수 있다.
몇몇 예들에서, 복수의 저장 회로들 각각은 적어도 1 KiB의 용량을 갖는다. 다시 말해서, 복수의 저장 회로들 각각은 1024 바이트의 용량을 가질 수 있다. 그러한 저장 회로들은 복수의 데이터 값들을 저장하기 위해 사용될 수 있다. 특히, 개별 데이터 값들의 크기는 변경될 수 있다. 예를 들어, 1024개의 8-비트 값들이 저장될 수 있거나, 256개의 32-비트 값들이 저장될 수 있다.
몇몇 예들에서, 실행 회로는 하나 이상의 동작들 중 적어도 일부를 수행함으로써 포기 명령어에 응답하고, 복수의 저장 회로들 중 하나가 미사용 저장 회로임을 표시하도록 적응된다. 따라서, 포기 명령어는 다수의 상이한 목적을 수행할 수 있다. 예를 들어, 포기 명령어는 저장 회로들에 저장된 하나 이상의 데이터 값들을 이용할 뿐만 아니라 그러한 저장 회로들 중 하나 이상이 더 이상 사용되지 않음을 표시하는 정규 명령어일 수 있다. 이러한 방식으로, 전용 포기 명령어가 명령어 세트의 일부로서 제공될 필요가 없다. 더욱이, 프로그램들은 다른 명령어의 일부로서 저장 회로의 포기를 가능하게 함으로써 더 효율적으로 될 수 있다.
특정 명령어가 포기 동작을 수행하는 데 사용될 것임을 표시하는 다수의 방식이 있다. 그러나, 몇몇 예들에서, 명령어들 중 적어도 일부는 그 명령어가 포기 명령어인지를 표시하는 필드를 포함한다. 명령어는 수행될 명령어를 식별하는 연산 코드 및 하나 이상의 파라미터로 구성되는 기계-언어 명령어로 컴파일될 수 있다. 이러한 예들에서, 파라미터들 중 하나 이상은 저장 회로(예를 들어, 레지스터) 기준과 연관된 단일 비트이며, 그것은 그 저장 회로가 미사용으로서 마킹되어야 하는지를 표시한다. 기계-언어 명령어 내의 이러한 필드들 중 하나 이상이 설정되는 것의 결과로서, 명령어는 포기 명령어로서 인식되고 특정 저장 회로는 포기된다.
몇몇 예들에서, 데이터 처리 장치는 미사용 저장 회로를 포함하는 하나 이상의 미사용 저장 회로를 식별하는 트랙 회로를 포함한다. 따라서 트랙 회로는 사용되지 않는 저장 회로 또는 저장 회로들의 아이덴티티를 표시하기 위해 사용될 수 있다. 단일 저장 회로만이 미사용으로서 마킹될 수 있는 경우, 마스크 회로는 단순히 그 저장 회로의 ID(identification)를 인코딩할 수 있다. 다른 예들에서, 미사용 저장 회로들의 수가 1보다 클 수 있는 경우, 사용되는 그러한 저장 회로들을 (예를 들어, 비트별 인코딩을 사용하여) 인코딩하기 위해 마스크가 제공될 수 있다. 어느 경우든, 포기 명령어는 트랙 회로에 저장된 값을 업데이트하기 위해 사용될 수 있다. 유사하게, 트랙 회로에 저장된 값은 또한 그 저장 회로 내의 그 값이 변경되는 것의 결과로서 특정 레지스터가 사용됨을 표시하도록 업데이트될 수 있다.
몇몇 예들에서, 저장 회로들은 레지스터들이고; 미사용 저장 회로는 레지스터들 중의 미사용 레지스터이다.
이제 도면을 참조하여 특정 실시예들이 설명될 것이다.
도 1은 몇몇 실시예들에 따른 데이터 처리 장치(100)를 개략적으로 예시한다. 장치(100)는, 예를 들어, 메인 메모리 또는 명령어 캐시로부터 명령어들을 인출하는 것을 담당하는 페처(110)를 포함한다. 인출된 명령어들은 디코더(120)에 의해 액세스되며, 디코더는 인출된 명령어들을 개별 동작들을 나타내는 하나 이상의 제어 신호로 디코딩한다. 동작들은 명령어들을 구성하는 동작들을 발행하고 스케줄링하는 것을 담당하는 발행 로직(130)에 전달된다. 여기로부터, 명령어들은 하나 이상의 실행 회로(170)에 발행된다. 이러한 예에서, 실행 유닛들(170)은 산술 논리 유닛(ALU)(170a), 제2 산술 유닛(ALU)(170b), 부동 소수점 유닛(FPU)(170c), 로드/저장 유닛(170d), 분기 유닛(170e), 컨텍스트 저장 유닛(170f), 및 행렬 연산 유닛(170g)을 포함한다. 장치(100)는 레지스터 파일(140a, 140b)을 포함한다. 레지스터 파일은 2개의 부분 - 범용 레지스터들(150a)을 포함하는 제1 부분(140a) 및 이 경우에 행렬 연산들을 위해 예약되는 특정 레지스터들(150b)을 포함하는 제2 부분(140b) - 으로 구성된다. 여기서, 레지스터들(150b)은 청구된 저장 회로들의 예이다. 명령어들의 실행 동안, 레지스터 파일(140a) 내의 범용 레지스터들(150a)로부터의 데이터는 실행 유닛들(170) 중 임의의 것에 전달될 수 있다. 그러나, 특정 레지스터들(150b)로부터의 데이터는 로드/저장 유닛(170d) 및 행렬 연산 유닛(170g)에 의해서만 액세스될 수 있다.
행렬 연산 유닛(170g)과 같은 실행 유닛들(170) 중 하나 이상은 페처(110)에 의해 인출된 명령어들 내의 포기 명령어와 대응하는 동작을 실행한다. 포기 명령어는 레지스터 파일(140b) 내의 하나 이상의 특정 레지스터(150b)가 더 이상 요구되지 않음을 표시하는 데 사용된다. 그러한 요구의 결여는 새로운 데이터 값이 그 레지스터 내에 저장될 때까지 지속된다. 실행 회로들(170) 중 하나에 의해 실행되는 포기 명령어는 레지스터 파일(140b) 내에 보유된 사용 마스크(160)가 업데이트되게 한다. 사용 마스크(160)는 현재 사용되는(즉, 포기되지 않은) 특정 레지스터들(150b)의 세트를 나타낸다. 물론, 다른 실시예들에서, 사용 마스크(160)는 포기된 특정 레지스터들(150b)의 세트들을 나타내는 데 사용될 수 있다. 이러한 실시예에서, 사용 마스크(160)는 또한 나중에 나타내어질 바와 같이 추론의 목적을 위해 발행 로직(130)이 이용 가능하게 된다.
도 2a는 포기 명령어(280)의 예를 도시한다. 이러한 경우에, 포기 명령어는 행렬 곱셈 명령어의 형태를 취한다. 즉, 행렬 곱셈 명령어는 포기 능력을 가지며, 이에 따라 명령어가 실제로 행렬 곱셈의 추가 연산을 수행하더라도 포기 명령어의 예이다. 이러한 예에서, 명령어(280)는 3개의 파라미터, 즉 레지스터 MC1에 대한 제1 기준, 레지스터 MAP에 대한 제2 기준, 및 레지스터 MBQ에 대한 제3 기준을 포함한다. 이러한 명령어(280)에서, 마지막 2개의 기준은 특정 심벌(^)로 접미사가 붙을 수 있다. 이것은, 그러한 레지스터들 내에 저장된 값들을 사용했으면, 그러한 레지스터들이 포기되어야 함을 나타낸다. 이러한 명령어(280)의 기계어 형태(200)가 또한 도 2a에 예시되어 있다. 특히, 명령어는 특정 명령어를 고유하게 식별하는 연산 코드(210), 3개의 레지스터 기준(230, 250, 270)으로 구성되며, 이들 각각은 이진수로 레지스터를 식별할 수 있다(레지스터들 중 하나(230)는 연산의 결과의 목적지이고 다른 2개(250, 270)는 연산의 입력들을 위한 소스들이다). 명령어(200)는 또한 2개의 포기 비트들(240, 260)을 포함하며, 이들 각각은 소스 레지스터 기준들(250, 270) 중 하나와 연관된다. 이러한 비트들 중 하나에 관하여 '1'의 값은 일단 명령어가 발행되고 문제의 레지스터로부터 데이터가 추출되면 대응하는 레지스터가 포기되어야 함을 의미한다. 한편, '0'의 값은 데이터 값이 사용되어야 하고 레지스터가 포기되지 않아야 함을 나타낸다. 현재의 예에서, 제2 레지스터 기준 MBQ(270)와 연관된 제2 포기 비트(260)에 대해서가 아니라 제1 레지스터 기준 MAP(250)와 연관된 포기 비트(240)의 설정은 다음의 명령어와 대응한다:
MATMUL MC1, MAP^, MBQ
도 2b는 포기 명령어의 다른 예를 예시한다. 이러한 예에서, 포기 명령어(290)는 추가 동작 목적을 갖지 않는 명시적 포기 명령어의 형태를 취한다. 여기서, 명령어(290)는 명시적 레지스터 기준 MA0을 포함한다. 그 결과, 이러한 명령어가 실행될 때, 레지스터 MA0은 포기될 것이다.
도 2c는 포기 명령어의 제3 예를 도시한다. 이러한 예에서, 명령어(295)는 다수의 상이한 레지스터를 식별하는 데 사용될 수 있는 마스크를 포함한다. 이러한 예에서, 마스크는 00110111이다. 이러한 마스크는 레지스터 번호들 0, 1, 2, 4 및 5가 즉시 포기되는 반면 레지스터들 3, 6, 및 7은 포기되지 않아야 함을 의미하는 것으로 해석될 수 있다.
본 기술로부터 벗어남이 없이 포기 명령어의 다른 형식들이 또한 사용될 수 있다는 것이 인식될 것이다. 게다가, 특정 레지스터가 포기되어야 함을 나타내기 위한 (1과 같은) 특정 비트 값들의 사용은 또한 레지스터가 포기되지 않아야 한다는 사실을 대신 나타내도록 반전될 수 있다.
도 3은 몇몇 실시예들에 따른 포기된 레지스터들의 세트와 조합하여 추론적 실행을 사용하는 방법을 도시하는 흐름도(300)를 예시한다. 프로세스는 단계 310에서 시작하며 여기서 (잠재적으로) 추론적 실행이 인출된다. 단계 320에서, 명령어의 목적지 레지스터(예를 들어, 결과가 기입될 레지스터)가 재명명이 발생하는 레지스터인지 여부가 결정된다. 예를 들어, 이것은 범용 레지스터들(150a)과 대응할 수 있다. 목적지 레지스터가 재명명된 레지스터이면, 단계 330에서 새로운 물리적 레지스터가 명령어에 대한 목적지 레지스터로서의 역할을 하도록 할당되고, 단계 340에서 추론적 연산이 할당된 물리적 레지스터를 사용하여 명령어에 기초하여 수행된다.
그러나, 본 기술은 또한 목적지 레지스터가 재명명된 레지스터가 아닐 때, 즉 레지스터가 특정 레지스터들(150b) 중 하나인 경우에 추론을 수행하는 것을 가능하게 한다. 특히, 단계 320에서 목적지 레지스터가 재명명된 레지스터가 아니라고 결정되면, 단계 350에서 목적지 레지스터가 포기된 레지스터인지가 결정된다. 그렇지 않다면, 단계 360에서 명령어는 추론적으로 실행될 수 없고 따라서 비-추론적으로 실행되어야 한다. 대안적으로, 단계 350에서 레지스터가 포기된 레지스터라고 결정되면, 프로세스는 단계 340으로 진행하며, 여기서 그 명령어와 대응하는 추론적 연산이 수행될 수 있다. 포기된 레지스터가 더 이상 애플리케이션에 의해 사용되지 않기 때문에 포기된 레지스터를 사용하여 추론적 연산을 수행하는 것이 가능하다. 그 결과, 애플리케이션은 그 레지스터에 현재 관심이 없고 따라서 잘못된 추론의 경우에, 레지스터는 데이터의 손실 없이 포기 상태로 안전하게 복귀될 수 있다.
도 4는 몇몇 실시예들에 따른 레지스터 포기가 어떻게 추론을 도울 수 있는지의 예를 예시한다. 특히, 도 4는 일련의 행렬 곱셈들이 수행되는 프로그램의 예를 예시한다. 라인들 1 및 2에서, 데이터 값들(예를 들어, 행렬들)이 레지스터들 MA0 및 MB0에 로딩된다. 이어서 명령어들 3과 12 사이에서 루프가 시작된다. 이러한 루프 내에서, 명령어 3에서, 추가 데이터 값(예를 들어, 행렬)이 레지스터 MB1에 로딩된다. 명령어 4에서, MA0에 저장된 행렬을 MB0에 저장된 행렬과 곱함으로써 행렬 곱셈이 발생하며, 그 결과는 레지스터 MC0에 저장된다. 명령어 5에서, 새로운 행렬이 레지스터 MA0에 로딩되고, 명령어 6에서 행렬 곱셈 MA0 x MB1 = MC1이 수행된다. 레지스터 MA0에의 추가 로드가 명령어 7에서 발생한다. 명령어 8에서, 추가의 행렬 곱셈 MA1 x MB0 = MC2가 발생한다. 명령어 9에서, 행렬이 레지스터 MB0에 로딩된다. 명령어 10에서, MA1 x MB1 = MC3의 추가 행렬 곱셈이 발생한다. 명령어 11에서, 변수 'count'의 값은 1만큼 감소된다. 라인 12에서, 그것은 명령어 11에서 발생하는 감소의 결과가 'count'의 값이 0에 도달하게 했는지를 알기 위해 테스트된다. 그렇지 않다면, 프로세스는 명령어들 2와 3 사이의 라벨 마킹된 루프로 복귀한다. 그렇지 않으면, 프로그램의 나머지(예시되지 않음)가 계속된다.
행렬 곱셈 명령어들은 실행하기 위해 다수의 프로세서 사이클을 취할 것으로 예상된다. 정지를 방지하기 위해, 명령어 10의 실행 동안, 나머지 명령어들이 실행될 수 있으며, 분기 명령어 12의 결과에 관한 예측이 이루어진다. 그러나, 이것은 명령어 3이 실행될 때 잠재적인 문제를 야기한다. 특히, 명령어 3은 레지스터 MB1에 저장된 값이 겹쳐 쓰여지게 할 것이다. 따라서, 예측이 옳지 않다면, 레지스터 MB1에 저장된 값은 손실될 것이다. 명백히 이것은 허용 가능하지 않은데, 왜냐하면 루프 후의 어떤 명령어가 MB1을 판독할 수 있기 때문이다. 어느 정도까지, 이것은 (이전에 언급된) 레지스터 재명명을 사용하여 해결될 수 있다. 이것은 상이한 레지스터들을 명령어 3과 같은 충돌하는 명령어들에 할당한다. 따라서, 분기가 옳지 않게 예측되었다면, 루프에서 명령어 3의 그 특정 호출에 공급되는 물리적 레지스터의 내용들을 폐기하는 것만이 필요하다. 그러나, 레지스터 재명명은 레지스터들의 다수의 사본들이 제공될 것을 요구한다. (이와 같이) 큰 레지스터들이 제공되는 상황에서, 레지스터 재명명의 비용은 엄청나게 된다. 따라서, 통상적으로, 많은 수의 큰 레지스터들을 제공하는 것, 또는 분기 명령어들에 대한 정지 사이에서 선택이 이루어져야 한다.
포기 명령어의 사용은 레지스터들의 수에 있어서의 증가에 의지함이 없이 그러한 정지를 억제하는 데 사용될 수 있다. 특히, 레지스터 MB1이 더 이상 요구되지 않음을 명확히 나타내기 위해 명령어들 11과 12 사이에 포기 명령어를 삽입함으로써, 명령어 3은 무사히 실행할 수 있다. 특히, 분기가 취해지지 않았어야 하고, 레지스터 MB1의 내용들이 명령어 3에 의해 겹쳐 쓰였다고 결정되면, 레지스터 MB1의 내용들은 간단히 소거될 수 있다. 이것은 MB1의 내용이 더 이상 프로그램에 의해 요구되지 않고 따라서 임의의 값으로 설정될 수 있기 때문이다. 실제로, 그러한 정보는 전형적으로 컴파일러 및/또는 프로그래머 또는 프로그램이 이용 가능하다. 이것은 컴파일러/프로그래머가 프로그램의 전체 뷰를 가지며 어느 명령어들이 나중에 실행될지를 결정할 수 있기 때문이다. 물론, 레지스터 MB1이 더 이상 요구되지 않음을 나타냈으면, 프로그램은 그때 그 레지스터에 대한 추가 기입이 이루어질 때까지(그에 의해 레지스터의 포기가 끝났음을 나타냄) 그 레지스터로부터 판독하려고 시도하지 않는 것이 중요하다.
도 5는 몇몇 실시예들에 따른 옳지 않게 발생한 추론적 실행으로부터 복구하는 방법을 예시하는 흐름도(500)를 도시한다. 특히, 도 5에서, 예를 들어, 옳지 않은 분기 예측의 결과로서 추론이 발생했다고 가정된다. 단계 510에서, 추론이 옳지 않게 발생했다고 결정된다. 단계 520에서, 옳지 않게 실행된 명령어들에서 참조된 레지스터들이 재명명된 레지스터들인지가 결정된다. 그렇다면, 단계 540에서 물리적 레지스터들에 대한 논리적 레지스터들의 오래된 매핑이 복원된다. 즉, 레지스터의 더 오래된 값은 레지스터의 현재 값이 되도록 다시 매핑된다. 이어서, 단계 550에서, 값을 저장하는 데 사용된 추론적 레지스터가 릴리스된다(예를 들어, 이용 가능한 물리적 레지스터들의 풀에 다시 추가된다). 단계 520에서 레지스터가 재명명된 레지스터가 아닌 경우, 단계 530에서 포기된 비트가 복원된다. 즉, 레지스터가 기입되어서 포기된 비트가 소거되게 한 경우, 레지스터가 여전히 포기된다는 것을 나타내기 위해 포기된 비트가 복원된다. 예를 들어, 도 4의 예에서, 레지스터 MB1에 대한 포기 비트는 명령어들 11과 12 사이에서 설정된다. 잘못된 추론이 발생하고 룩이 옳지 않게 재실행되면, 명령어 3에서, 레지스터 MB1 내의 값의 설정은 포기된 비트가 소거되게 할 것이다. 이어서 일단 추론이 옳지 않게 발생했음이 검출되면, 그 레지스터는 여전히 포기되고 포기된 이후에 기입되지 않았기 때문에, 포기된 비트는 복원되어야 한다.
포기 명령어는 또한 컨텍스트 스위칭을 돕는 데 사용될 수 있다. 컨텍스트 스위칭은 시스템 상에서 실행되는 활성 스레드 또는 애플리케이션이 스위칭될 때 발생한다. 이것은 레지스터들의 현재 값이 저장되고, 스위칭 인되는 스레드 또는 애플리케이션과 연관된 레지스터들의 저장된 값들이 레지스터들에 다시 저장될 것을 요구하며, 따라서 (현재 스위칭 인되고 있는) 중지된 스레드가 중단된 때로부터 실행이 재개될 수 있다.
도 6은 몇몇 실시예들에 따른 레지스터들이 포기되었을 때 컨텍스트 스위치 동안 컨텍스트가 저장될 수 있는 방법의 예를 도시한다. 특히, 명령어 1에서, 포기된 레지스터들의 세트를 나타내는 사용 마스크(160)의 값은 레지스터 x0에 저장된다. 이어서, 명령어 2에서, 레지스터 x0의 값은 레지스터들의 현재 값들이 저장되고 있는 메모리 내의 위치인 context_ptr에 저장된다. 느낌표 '!'는 context_ptr의 값이 이어서 증가됨을 나타낸다. 명령어 3은 값 1이 사용 마스크(160)에 표현되는지를 결정한다. 다시 말해서, 명령어 3은 레지스터 1이 포기되는지 여부를 결정한다. 레지스터 1(MA0)이 포기되면, 실행은 라벨 not_ma0으로 점프한다. 그렇지 않으면, 명령어 4는 레지스터 MA0에 저장된 데이터가 context_ptr에 저장되게 하고, 이는 이어서 증가된다. 아무튼, 명령어 5에서, 제2 레지스터(MA1)가 사용 마스크(160)에 의해 표시되는지가 결정된다. 그렇다면, 프로그램은 not_ma1로 점프한다. 그렇지 않으면, 명령어 6에서, 레지스터 MA1의 값은 context_ptr에 저장되고 context_ptr은 증가된다. 어느 쪽이든, 명령어 7에서, 제3 레지스터(MB0)가 사용 마스크(160)에 의해 표시되는지가 결정된다. 그렇다면, 프로세스는 라벨 not_mb0으로 점프한다. 그렇지 않으면, 명령어 8에서, 레지스터 MB0의 값은 context_ptr에 저장되고, 이는 이어서 증가된다. 이러한 프로세스는 사용 마스크(160)에 의해 표시될 수 있는 각각의 레지스터에 대해 반복된다. 사실상, 각각의 레지스터는 사용 마스크(160)에서 테스트된다. 레지스터가 열거되면(레지스터가 포기되었고 그에 따라 유용하지 않음을 나타냄), 그 레지스터의 저장은 생략된다. 그렇지 않으면, 그 레지스터의 저장은 context_ptr에서 수행된다. 이에 더하여, 사용 마스크(160) 자체는 저장된 값들의 아이덴티티가 미래에 알려지도록 저장된다.
도 7은 메모리 내의 데이터로서의 저장된 레지스터들의 예를 제공한다. 저장된 제1 항목은 4 바이트를 포함하는 마스크(160)이다. 이러한 예에서, 마스크는 값 00011010이고, 이는 레지스터들(MA0, MB0, MC1, MC2, 및 MC3)이 포기되었고 그에 따라 저장되지 않는다는 것을 나타낸다. 큐 상의 다음 항목은 제1 저장된 레지스터 - MA1이다. 이것에 제2 저장된 레지스터 - MB1이 뒤따른다. 이것에 제3 저장된 레지스터 - MC0이 뒤따른다. 집합적으로, 총 3076 바이트가 저장된다(레지스터들(MA1, MB1, MC1) 각각은 1024 바이트를 점유함). 따라서 이것은 시간 및 공간 둘 모두의 면에서 상당한 절감을 야기한다. 특히, 레지스터들(이들 중 많은 것이 포기되고 그에 따라 사용되지 않음) 모두가 저장되지는 않기 때문에 공간이 절약된다. 또한, 모든 레지스터들이 저장되지는 않기 때문에, 레지스터들을 저장 및 로딩하는 프로세스가 가속화된다. 레지스터들을 이러한 방식으로 저장함으로써, 데이터가 판독되고 올바른 레지스터들이 복원되는 것이 가능하다.
도 8은 레지스터들이 포기되었을 때 컨텍스트 스위치 동안 컨텍스트를 로딩하는 예를 도시한다. 특히, 제1 명령어 kill-_all은 모든 레지스터들이 소거되게 한다. 이것은 들어오는 스레드들에 의한 레지스터들이 포기된 것의 결과로서 데이터가 하나의 스레드(또는 애플리케이션)로부터 다른 것으로 부주의로 전달되는 것을 방지하기 위해 수행된다. 이어서 제2 명령어는 context_ptr에서의 데이터를 레지스터 x0에 로딩하고, 컨텍스트 포인터를 증가시킨다. 도 7에 의해 예시된 바와 같이, 이 내용은 마스크(160)의 저장된 이전 값일 것이다. 이 예에서, 마스크(160)의 이전 값은 직접 복원되지 않고, 대신에 'kill_all' 명령어의 결과로서 복원된 다음 라이브 레지스터들의 복원이 이어진다. 명령어 3에서, 마스크는 제1 레지스터가 포기되는지의 여부를 알기 위해 테스트된다. 레지스터가 포기되었다면, 프로세스는 not-_ma0으로 점프한다. 그렇지 않으면, 명령어 4는 context_ptr에서의 데이터가 레지스터 MA0에 로딩되게 하고 context_ptr이 증가되게 한다. 아무튼, 명령어 5에서, 마스크는 제2 레지스터(MA1)가 포기되는지를 알기 위해 테스트된다. 그렇다면, 프로세스는 라벨 not_ma1로 점프한다. 그렇지 않으면, 명령어 6에서, context_ptr에 저장된 데이터가 레지스터 MA1에 로딩된다. 이어서 context_ptr이 증가된다. 이러한 프로세스는 레지스터들 각각에 대해 계속되고, 그 특정 레지스터가 로드되어야 하는지 여부에 대해 테스트가 이루어지고 적절한 경우(예컨대, 마스크에 따라, 레지스터가 포기되지 않은 경우) 로드가 수행된다. 앞서 언급된 바와 같이, 포기된 레지스터들은 더 적은 데이터가 전송되어야 함을 의미하기 때문에, 전송을 수행하는 데 걸리는 시간은 감소될 수 있다.
도 9는 몇몇 실시예들에 따른 데이터 처리의 방법을 예시하는 흐름도를 도시한다. 흐름도(900)는 단계 910에서 시작하며, 여기서 데이터가 하나 이상의 레지스터에 저장된다. 단계 920에서, 그러한 레지스터들 중 하나 이상을 사용하여 동작들이 수행된다. 단계 930에서, 포기 명령어가 그러한 레지스터들 중 하나 이상이 이제 사용되지 않음을 표시하는 데 사용된다. 단계 940에서, 미래 명령어들의 실행은 사용되지 않는 그러한 레지스터들 중 일부의 표시에 의해 수행된다. 예를 들어, 이것은 레지스터들이 포기되는 것의 결과로서 더 효율적으로 또는 더 적은 공간을 사용하여 수행되는 컨텍스트 스위치의 형태를 취할 수 있다. 이것의 다른 예는 그러한 레지스터들 중 일부가 포기되는 것의 결과로서 (심지어 재명명 회로가 없는 경우에도) 추론적으로 명령어들을 실행하는 능력일 것이다.
본 출원에서, 단어들 "... 하도록 구성된"은 장치의 요소가 정의된 동작을 수행할 수 있는 구성을 갖는다는 것을 의미하는 데 사용된다. 이러한 맥락에서, "구성"은 하드웨어 또는 소프트웨어의 상호 접속의 배열 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 프로세서 또는 다른 처리 디바이스가 그 기능을 수행하도록 프로그래밍될 수 있다. "하도록 구성된"은 장치 요소가 정의된 동작을 제공하기 위해 임의의 방식으로 변경될 필요가 있다는 것을 암시하지는 않는다.
본 발명의 예시적인 실시예들이 첨부 도면들을 참조하여 본 명세서에서 상세히 설명되었지만, 본 발명은 그러한 정확한 실시예들로 제한되지 않으며, 첨부된 청구항들에 의해 한정된 바와 같은 본 발명의 범위 및 사상으로부터 벗어남이 없이 실시예들에서 다양한 변경들, 추가들 및 수정들이 당업자에 의해 이루어질 수 있다는 것이 이해되어야 한다. 예를 들어, 본 발명의 범위로부터 벗어남이 없이 독립 청구항들의 특징들과 종속 청구항들의 특징들의 다양한 조합이 이루어질 수 있다.

Claims (18)

  1. 데이터 처리 장치로서,
    데이터를 저장하는 복수의 저장 회로들; 및
    명령어들에 응답하여 상기 저장 회로들을 사용하여 하나 이상의 동작들을 수행하는 실행 회로를 포함하며,
    상기 명령어들은 포기 명령어를 포함하고,
    상기 실행 회로는 상기 복수의 저장 회로들 중 적어도 하나의 저장 회로가 미사용 저장 회로임을 표시함으로써 상기 포기 명령어에 응답하도록 적응되고,
    상기 실행 회로는 상기 포기 명령어를 실행한 후에 상기 미사용 저장 회로에 기초하여 미래 명령어들의 실행에 영향을 미치도록 적응되는, 데이터 처리 장치.
  2. 제1항에 있어서,
    컨텍스트 스위치에 응답하여 상기 저장 회로들의 세트를 저장하는 컨텍스트 저장 회로를 포함하며, 상기 미래 명령어들은 상기 컨텍스트 스위치를 수행하는 하나 이상의 컨텍스트 스위칭 명령어들을 포함하는, 데이터 처리 장치.
  3. 제2항에 있어서, 상기 컨텍스트 저장 회로는 상기 미사용 저장 회로를 저장하는 것을 억제하도록 적응되는, 데이터 처리 장치.
  4. 제2항에 있어서, 상기 컨텍스트 저장 회로는 상기 미사용 저장 회로 이외의 상기 복수의 저장 회로들을 저장하도록 적응되는, 데이터 처리 장치.
  5. 제2항에 있어서, 상기 컨텍스트 저장 회로는 상기 미사용 저장 회로의 아이덴티티 또는 미사용 이외의 상기 저장 회로들의 아이덴티티들을 저장하도록 적응되는, 데이터 처리 장치.
  6. 제1항에 있어서,
    상기 명령어들을 스트림 순서로 수신하고, 상기 명령어들을 상기 실행 회로에 상기 스트림 순서 이외의 수정된 순서로 발행하는 발행 회로를 포함하는, 데이터 처리 장치.
  7. 제6항에 있어서, 상기 스트림 순서는 상기 포기 명령어, 이어서 분기 명령어, 이어서 생산자 명령어를 포함하고,
    상기 분기 명령어는 취해지는 것으로 예측되고,
    상기 생산자 명령어는 상기 미사용 저장 회로에 제2 데이터 값을 저장하고,
    상기 수정된 순서는 상기 분기 명령어가 완료되기 전에 상기 생산자 명령어가 발행되게 하는, 데이터 처리 장치.
  8. 제7항에 있어서, 소비자 명령어는 복수의 프로세서 사이클들에 걸쳐 실행되는, 데이터 처리 장치.
  9. 제7항에 있어서, 소비자 명령어는 행렬 연산 명령어인, 데이터 처리 장치.
  10. 제1항에 있어서, 상기 복수의 저장 회로들 각각은 동시에 어드레싱 가능한, 데이터 처리 장치.
  11. 제1항에 있어서, 상기 복수의 저장 회로들 각각은 복수의 데이터 값들을 저장하도록 적응되는, 데이터 처리 장치.
  12. 제1항에 있어서, 상기 복수의 저장 회로들 각각은 적어도 1 KiB의 용량을 갖는, 데이터 처리 장치.
  13. 제1항에 있어서, 상기 실행 회로는 상기 하나 이상의 동작들 중 적어도 일부를 수행함으로써 상기 포기 명령어에 응답하고, 상기 복수의 저장 회로들 중 상기 하나의 저장 회로가 상기 미사용 저장 회로임을 표시하도록 적응되는, 데이터 처리 장치.
  14. 제1항에 있어서, 상기 명령어들 중 적어도 일부는 그 명령어가 상기 포기 명령어인지를 표시하는 필드를 포함하는, 데이터 처리 장치.
  15. 제1항에 있어서,
    상기 미사용 저장 회로를 포함하는 하나 이상의 미사용 저장 회로들을 식별하는 트랙 회로를 포함하는, 데이터 처리 장치.
  16. 제1항에 있어서, 상기 저장 회로들은 레지스터들이고, 상기 미사용 저장 회로는 상기 레지스터들 중의 미사용 레지스터인, 데이터 처리 장치.
  17. 데이터 처리 방법으로서,
    복수의 저장 회로들에 데이터를 저장하는 단계;
    포기 명령어를 포함하는 명령어들에 응답하여 상기 저장 회로들을 사용하여 하나 이상의 동작들을 수행하는 단계;
    상기 포기 명령어에 응답하여, 상기 복수의 저장 회로들 중 적어도 하나의 저장 회로가 미사용 저장 회로임을 표시하는 단계; 및 상기 포기 명령어를 실행한 후에 상기 미사용 저장 회로에 기초하여 미래 명령어들의 실행에 영향을 미치는 단계를 포함하는, 데이터 처리 방법.
  18. 데이터 처리 장치로서,
    복수의 저장 회로들에 데이터를 저장하기 위한 수단;
    포기 명령어를 포함하는 명령어들에 응답하여 상기 저장 회로들을 사용하여 하나 이상의 동작들을 수행하기 위한 수단;
    상기 포기 명령어에 응답하여, 상기 복수의 저장 회로들 중 적어도 하나의 저장 회로가 미사용 저장 회로임을 표시하기 위한 수단; 및 상기 포기 명령어를 실행한 후에 상기 미사용 저장 회로에 기초하여 미래 명령어들의 실행에 영향을 미치기 위한 수단을 포함하는, 데이터 처리 장치.
KR1020217029390A 2019-08-05 2020-03-25 데이터 구조 포기 KR20220057482A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/531,206 2019-08-05
US16/531,206 US11269634B2 (en) 2019-08-05 2019-08-05 Data structure relinquishing
PCT/GB2020/050800 WO2021023956A1 (en) 2019-08-05 2020-03-25 Data structure relinquishing

Publications (1)

Publication Number Publication Date
KR20220057482A true KR20220057482A (ko) 2022-05-09

Family

ID=70166059

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217029390A KR20220057482A (ko) 2019-08-05 2020-03-25 데이터 구조 포기

Country Status (7)

Country Link
US (1) US11269634B2 (ko)
EP (1) EP3912028A1 (ko)
JP (1) JP2022542630A (ko)
KR (1) KR20220057482A (ko)
CN (1) CN113544639A (ko)
IL (1) IL285926B1 (ko)
WO (1) WO2021023956A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220414270A1 (en) * 2021-06-24 2022-12-29 International Business Machines Corporation Encrypted data processing design including cleartext register files
US11868275B2 (en) 2021-06-24 2024-01-09 International Business Machines Corporation Encrypted data processing design including local buffers

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6101597A (en) * 1993-12-30 2000-08-08 Intel Corporation Method and apparatus for maximum throughput scheduling of dependent operations in a pipelined processor
US5553256A (en) * 1994-02-28 1996-09-03 Intel Corporation Apparatus for pipeline streamlining where resources are immediate or certainly retired
US6314511B2 (en) 1997-04-03 2001-11-06 University Of Washington Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers
US10078515B2 (en) * 2011-10-03 2018-09-18 International Business Machines Corporation Tracking operand liveness information in a computer system and performing function based on the liveness information
US9182986B2 (en) * 2012-12-29 2015-11-10 Intel Corporation Copy-on-write buffer for restoring program code from a speculative region to a non-speculative region
US20190220417A1 (en) * 2018-01-18 2019-07-18 Apple Inc. Context Switch Optimization

Also Published As

Publication number Publication date
EP3912028A1 (en) 2021-11-24
TW202107278A (zh) 2021-02-16
CN113544639A (zh) 2021-10-22
US20210042114A1 (en) 2021-02-11
US11269634B2 (en) 2022-03-08
IL285926A (en) 2021-10-31
IL285926B1 (en) 2024-03-01
WO2021023956A1 (en) 2021-02-11
JP2022542630A (ja) 2022-10-06

Similar Documents

Publication Publication Date Title
US7711935B2 (en) Universal branch identifier for invalidation of speculative instructions
US5949995A (en) Programmable branch prediction system and method for inserting prediction operation which is independent of execution of program code
EP1145110B1 (en) Circuit and method for tagging and invalidating speculatively executed instructions
JP3702815B2 (ja) プロセッサ間レジスタ継承方法及びその装置
US20040073906A1 (en) Processor with speculative multithreading and hardware to support multithreading software {including global registers and busy bit memory elements}
JPH10506739A (ja) スーパースカラプロセッサにおけるトラップを検出して実行する装置
JP3154660B2 (ja) 条件レジスタ・データを一時的にバッファリングする方法およびシステム
US7313676B2 (en) Register renaming for dynamic multi-threading
EP0402856B1 (en) Instruction execution control system
US5878254A (en) Instruction branching method and a processor
KR20220057482A (ko) 데이터 구조 포기
JPH09152973A (ja) カウント/リンク・レジスタ変更命令の投機実行をサポートする方法及び装置
US10963260B2 (en) Branch predictor
EP0747809A1 (en) A method and system for processing multiple branch instructions that write to count and/or link registers
TWI836108B (zh) 資料結構放棄
JP6882320B2 (ja) ベクトル命令の処理
US11663014B2 (en) Speculatively executing instructions that follow a status updating instruction
US11775297B2 (en) Transaction nesting depth testing instruction
JP3015565B2 (ja) 複数命令の並列実行機能を持つ情報処理装置