KR20220038581A - 데이터 구조 프로세싱 - Google Patents

데이터 구조 프로세싱 Download PDF

Info

Publication number
KR20220038581A
KR20220038581A KR1020217029253A KR20217029253A KR20220038581A KR 20220038581 A KR20220038581 A KR 20220038581A KR 1020217029253 A KR1020217029253 A KR 1020217029253A KR 20217029253 A KR20217029253 A KR 20217029253A KR 20220038581 A KR20220038581 A KR 20220038581A
Authority
KR
South Korea
Prior art keywords
data structure
identifier
registers
processing
metadata
Prior art date
Application number
KR1020217029253A
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 KR20220038581A publication Critical patent/KR20220038581A/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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • 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/30101Special purpose registers
    • 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/30105Register structure
    • 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
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • 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
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

장치는 명령 디코더 및 프로세싱 회로부를 포함한다. 적어도 하나의 입력 데이터 구조 식별자 및 출력 데이터 구조 식별자를 특정하는 데이터 구조 프로세싱 명령에 응답하여, 명령 디코더는 프로세싱 회로부를 제어하여, 적어도 하나의 입력 데이터 구조에 대해 프로세싱 동작을 수행하여 출력 데이터 구조를 생성한다. 각각의 입력/출력 데이터 구조는 복수의 메모리 어드레스들에 대응하는 데이터의 배열을 포함한다. 본 장치는 하나 이상의 데이터 구조 메타데이터 레지스터들의 둘 이상의 세트들을 포함하고, 각각의 세트는 대응하는 데이터 구조 식별자와 연관되고, 대응하는 데이터 구조 식별자에 의해 식별되는 데이터 구조에 대한 메모리 어드레스들을 식별하기 위해 어드레스-표시 메타데이터를 저장하도록 지정된다.

Description

데이터 구조 프로세싱
본 발명은 데이터 프로세싱 분야에 관한 것이다.
일부 데이터 프로세싱 애플리케이션들은 다수의 메모리 어드레스들에 저장되는, 메모리 내의 데이터의 배열들을 포함하는 데이터 구조들에 적용될 프로세싱 동작들을 요구할 수 있다. 그러한 데이터 구조들의 프로세싱은, 예를 들어, 머신 러닝, 신호 프로세싱 또는 압축 알고리즘들에서와 같은 다양한 애플리케이션들에 유용할 수 있다.
적어도 일부 예들은 장치를 제공하며, 본 장치는, 명령들을 디코딩하기 위한 명령 디코더, 및 명령 디코더에 의해 디코딩된 명령들에 응답하여 데이터 프로세싱을 수행하기 위한 프로세싱 회로부를 포함하고; 적어도 하나의 입력 데이터 구조 식별자 및 출력 데이터 구조 식별자를 특정하는 데이터 구조 프로세싱 명령에 응답하여, 명령 디코더는 프로세싱 회로부를 제어하여, 적어도 하나의 입력 데이터 구조 식별자에 의해 식별되는 적어도 하나의 입력 데이터 구조에 대한 프로세싱 동작을 수행하여 출력 데이터 구조 식별자에 의해 식별되는 출력 데이터 구조를 생성하도록 구성되고; 적어도 하나의 입력 데이터 구조 및 출력 데이터 구조 각각은 복수의 메모리 어드레스들에 대응하는 데이터의 배열을 포함하고; 장치는 하나 이상의 데이터 구조 메타데이터 레지스터들의 복수의 세트들을 포함하고, 하나 이상의 데이터 구조 메타데이터 레지스터들의 각각의 세트는 대응하는 데이터 구조 식별자와 연관되고, 대응하는 데이터 구조 식별자에 의해 식별되는 데이터 구조에 대한 복수의 메모리 어드레스들을 식별하기 위해 어드레스-표시 메타데이터를 보유하도록 지정된다.
적어도 일부 예들은 데이터 프로세싱 방법을 제공하며, 본 방법은, 적어도 하나의 입력 데이터 구조 식별자 및 출력 데이터 구조 식별자를 특정하는 데이터 구조 프로세싱 명령의 디코딩에 응답하여, 프로세싱 회로부를 제어하여, 적어도 하나의 입력 데이터 구조 식별자에 의해 식별되는 적어도 하나의 입력 데이터 구조에 대한 프로세싱 동작을 수행하여 출력 데이터 구조 식별자에 의해 식별되는 출력 데이터 구조를 생성하는 단계 - 적어도 하나의 입력 데이터 구조 및 출력 데이터 구조 각각은 복수의 메모리 어드레스들에 대응하는 데이터의 배열을 포함함 -; 및 하나 이상의 데이터 구조 메타데이터 레지스터들의 복수의 세트들에 어드레스-표시 메타데이터를 보유하는 단계 - 하나 이상의 데이터 구조 메타데이터 레지스터들의 각각의 세트는 대응하는 데이터 구조 식별자와 연관되고, 대응하는 데이터 구조 식별자에 의해 식별되는 데이터 구조에 대한 복수의 메모리 어드레스들을 식별하기 위해 어드레스-표시 메타데이터를 보유하도록 지정됨 - 를 포함한다.
적어도 일부 예들은, 호스트 데이터 프로세싱 장치를 제어하여, 타깃 데이터 프로세싱 장치에 의한 타깃 프로그램의 실행을 시뮬레이션하기 위한 컴퓨터 프로그램을 저장하는 비일시적 저장 매체를 제공하며, 컴퓨터 프로그램은, 타깃 프로그램의 명령들을 디코딩하기 위한 명령 디코딩 프로그램 로직 - 적어도 하나의 입력 데이터 구조 식별자 및 출력 데이터 구조 식별자를 특정하는 데이터 구조 프로세싱 명령에 응답하여, 명령 디코딩 프로그램 로직은 호스트 데이터 프로세싱 장치를 제어하여, 적어도 하나의 입력 데이터 구조 식별자에 의해 식별된 적어도 하나의 입력 데이터 구조에 대해 프로세싱 동작을 수행하여 출력 데이터 구조 식별자에 의해 식별된 출력 데이터 구조를 생성하도록 구성되고, 적어도 하나의 입력 데이터 구조 및 출력 데이터 구조 각각은 복수의 메모리 어드레스들에 대응하는 데이터의 배열을 포함함 -; 및 타깃 데이터 프로세싱 장치의 레지스터들을 에뮬레이팅하기 위해 저장 구조물에 대한 액세스를 제어하기 위한 레지스터 에뮬레이팅 프로그램 로직을 포함하고, 레지스터들은 하나 이상의 데이터 구조 메타데이터 레지스터들의 복수의 세트들을 포함하고, 하나 이상의 데이터 구조 메타데이터 레지스터들의 각각의 세트는 대응하는 데이터 구조 식별자와 연관되고, 대응하는 데이터 구조 식별자에 의해 식별되는 데이터 구조에 대한 복수의 메모리 어드레스들을 식별하기 위해 어드레스-표시 메타데이터를 보유하도록 지정된다.
본 발명의 추가 태양들, 특징들 및 이점들이 첨부 도면과 관련하여 읽혀질 실시예들의 하기의 설명으로부터 명백해질 것이다.
도 1은 데이터 구조 프로세싱 명령들을 위한 명령 디코더 지원을 갖는 프로세싱 회로부를 포함하는 데이터 프로세싱 장치의 일례를 개략적으로 도시한다.
도 2는 데이터 구조가 매트릭스인 일례를 도시한다.
도 3은 다수의 입력 및 출력 데이터 구조들을 저장하기 위한 데이터 구조 저장 영역들의 일례를 도시한다.
도 4는 어드레스-표시 메타데이터를 사용하여 메모리 내에서 소정 데이터 구조가 저장되는 어드레스들을 식별하는 일례를 도시한다.
도 5는 프로세싱 회로부의 레지스터들 및 데이터 구조 저장소의 일례를 더 상세히 도시한다.
도 6은 입력 및 출력 데이터 구조들이 별개의 식별자 공간들을 갖는 일례를 도시한다.
도 7은 주어진 데이터 구조에 대한 데이터 구조 메타데이터 레지스터들이 범용 레지스터들의 고정된 서브세트인 일례를 도시한다.
도 8은 범용 레지스터들과는 별개인 전용 데이터 구조 메타데이터 레지스터들이 제공되는 대안적인 접근법을 도시한다.
도 9는 콘텍스트 저장 트리거 이벤트에 응답하여 상태 저장을 제어하기 위한 방법을 도시하는 흐름도이다.
도 10은 데이터 구조 프로세싱 명령들이, 프로세싱 회로부가, 그것이 이미 이용가능하지 않을 때, 주어진 입력 데이터 구조를 로딩하게 하는 다른 예를 도시한다.
도 11은 콘텍스트 상태 복원을 제어하는 방법을 도시하는 흐름도이다.
도 12는 사용될 수 있는 시뮬레이터 예를 도시한다.
데이터 프로세싱 장치는 프로그램 명령들을 디코딩하기 위한 명령 디코더, 및 명령 디코더에 의해 디코딩된 명령들에 응답하여 데이터 프로세싱을 수행하기 위한 프로세싱 회로부를 가질 수 있다. 예를 들어, 명령 디코더는 디코딩된 프로그램 명령들을, 프로세싱 회로부로 전송되어 프로세싱 회로부에 의해 어느 동작들이 수행되는지를 제어하는 마이크로 동작들 또는 다른 제어 신호들로 맵핑할 수 있다. 일부 소프트웨어 작업부하들은 다수의 메모리 어드레스들에 대응하는 메모리 내의 위치들에 저장된 데이터의 배열을 포함하는 소정 데이터 구조들의 프로세싱을 요구할 수 있다. 예를 들어, 일부 신호 프로세싱 또는 머신 러닝 알고리즘들은 데이터의 2차원 배열들인 매트릭스들에 적용되는 동작들을 포함할 수 있다. 또한, 일부 압축 알고리즘들은 주어진 크기의 블록들에 대해 동작할 수 있고, 따라서, 데이터 구조는 예를 들어, 그들 블록들 중 하나의 블록에 대응할 수 있다.
프로그래머가 하이 레벨 코드를 기록하여 그러한 프로세싱 애플리케이션들을 구현할 때, 그들은 전형적으로, 주어진 블록에 적용되는 압축 알고리즘의 반복을 구현하기 위한 매트릭스 곱셈 동작 또는 명령과 같은, 그러한 데이터 구조들의 세분도(granularity)로 적용되는 소정 기본 동작들을 한정하는 기능들을 갖는 프로그래밍 언어를 사용하여 코드를 기록할 수 있다. 그러나, 실제로, 그러한 하이 레벨 코드가 프로세싱 회로부에 의해 지원되는 고유 명령 세트로 컴파일될 때, 그러한 하이 레벨 기능들은 종종, 데이터 구조 내의 개별 데이터 값들에 적용되는 다수의 개별 로딩/저장 명령들 및 산술 명령들로 분해될 수 있는데, 각각의 데이터 값은 단일 메모리 어드레스에 대응한다. 예를 들어, 매트릭스 곱셈 동작은 매트릭스의 개별 요소들을 로딩하기 위한 다수의 개별 로딩들, 및 각각이 한 쌍의 요소들을 곱하기 위한 곱하기 명령들, 그에 뒤이어, 메모리 내의 관련 어드레스들에 결과들을 다시 저장하기 위한 일부 저장 명령들로 컴파일될 수 있다. 메모리 내의 관련 어드레스들로부터 또는 그들로 로딩들 및 저장들을 결집(marshal)시키고 스칼라 명령들을 사용하여 곱셈들을 수행하는 방법을 산출하는 것은 컴파일러에 달려 있을 수 있다.
(다수의 어드레스들에 걸쳐 있는 데이터의 배열들을 포함하는) 데이터 구조들의 프로세싱을 가속화하기 위한 하나의 접근법은 그러한 데이터 구조들의 프로세싱을 가속화하도록 설계된 전용 하드웨어를 갖는 하드웨어 가속기를 제공하는 것일 수 있다. 전형적으로, 그러한 하드웨어 가속기는 메모리 시스템과 관련하여 수행되는 로딩/저장 동작들을 통해 액세스될 수 있는 디바이스로서 시스템 온 칩(system on chip)에 구현될 수 있다. CPU(중앙 프로세싱 유닛)의 관점에서, CPU는 데이터 구조 프로세싱을 수행하기 위해 하드웨어 가속기를 제어하는 데이터를 메모리에 간단히 기록할 수 있고, 이어서, 일단 하드웨어 가속기가 그의 동작들을 완료했다면, CPU는 그 결과들을 메모리로부터 다시 판독하고 이어서 그들을 계속해서 프로세싱할 수 있다. 그러나, CPU의 명령 디코더에 의해 지원되는 명령들이 전용 데이터 구조 프로세싱 명령들을 지원하지 않는 그러한 하드웨어 가속기 접근법은 일부 작업부하들에 대해 여러 가지 문제들을 가질 수 있다. 먼저, 하드웨어 가속기의 사용이, 데이터 구조 프로세싱이 수행될 동작들의 대부분을 표현하는 작업부하들에 적합할 수 있지만, 그러한 데이터 구조들의 프로세싱을 다른 유형들의 프로세싱 동작에 산재시키는 혼합된 작업부하들의 경우에, 하드웨어 가속기를 사용하는 것이 비효율적일 수 있는데, 그 이유는, 데이터가 CPU와 하드웨어 가속기 사이에서 이리저리 이송되어야 할 때, 예를 들어, CPU에서의 명령들이 데이터 구조 프로세싱의 결과들이 하드웨어 가속기로부터 다시 판독되기를 기다리고 있어야 하는 경우에 애플리케이션의 전체 성능을 크게 감소시킬 수 있는 빈번한 사례들이 있을 것이기 때문이다. 다른 문제는, 단일 하드웨어 가속기가 다수의 CPU들 사이에서 또는 동일한 CPU 상에서 실행되는 다수의 소프트웨어 태스크들 사이에서 공유되는 시스템들에서, 주어진 태스크가 하드웨어 가속기 상에서 충분한 프로세싱 시간을 얻기가 어렵고, 이는 성능을 다시 감소시킬 수 있다는 것이다. 따라서, 하드웨어 가속기 접근법은, 하드웨어 가속기를 병렬로 사용할 것으로 예상되는 태스크들이 비교적 적은 경우들에 허용가능할 수 있지만, 경쟁 용도들의 수가 증가함에 따라, 이러한 접근법은 지속불가능할 수 있다.
따라서, 데이터 구조 내의 개별 요소들에 대한 것과는 대조적으로, 전체의 데이터 구조의 세분도로 프로세싱 동작들을 수행하는 것을 지원하는, CPU 아키텍처 자체 내의 전용 데이터 구조 프로세싱 명령들에 대한 명령 디코더 지원을 제공하는 것이 유용할 수 있다. 물론, 명령 디코더는 또한, 마찬가지로 개별 요소들에 대한 동작들을 허용하는 다른 명령들을 지원할 수 있다. 그러나, 명령에 의해 특정된 적어도 하나의 입력 데이터 구조 식별자에 의해 식별된 적어도 하나의 입력 데이터 구조에 대해 프로세싱 동작을 수행하기 위해 프로세싱 회로부를 제어하는 일부 명령들을 정의함으로써, 입력 및 출력 데이터 구조들 각각이 다수의 메모리 어드레스들에 걸쳐 있는 데이터의 배열인 명령에 의해 특정된 출력 데이터 구조 식별자에 의해 식별된 출력 데이터 구조를 생성하기 위해, 이는, 그러한 데이터 구조들의 상당한 양의 프로세싱에 의존하지만 상기에 논의된 바와 같은 하드웨어 가속기와 연관된 성능 및 확장성 문제들이 없는 소프트웨어 애플리케이션들에 대한 성능을 가속화시키는 것을 크게 도울 수 있다.
그러나, 데이터 구조 프로세싱 명령들에 대한 명령 디코더 지원이 CPU 또는 다른 프로세싱 요소들로 가져올 때, 이는 콘텍스트 스위칭 레이턴시의 관점에서 문제들을 일으킬 수 있다. CPU 또는 프로그램 명령들을 디코딩하기 위한 명령 디코더를 갖는 다른 프로세싱 요소의 경우, 제1 소프트웨어 작업부하와 제2 소프트웨어 작업부하 사이의 콘텍스트 스위치가 수행될 때, 콘텍스트 스위치 전에 수행되는 제1 작업부하와 연관된 임의의 아키텍처 상태는 제2 소프트웨어 작업부하가 프로세싱 요소의 레지스터들 또는 다른 저장 요소들 내에 그 상태를 겹쳐쓰기할 수 있도록 메모리에 저장될 필요가 있을 수 있다는 것이 보편적이다. 제1 작업부하 내의 상태를 메모리에 저장함으로써, 이것은, 제1 소프트웨어 작업부하가 나중에 재개될 필요가 있을 때, 그의 상태가 다시 로딩될 수 있고 이어서 인입 작업부하의 프로세싱이, 그것이 중단되었던 지점으로부터 재개될 수 있음을 의미한다.
그러나, 데이터 구조 프로세싱 명령들에 대한 지원이 제공될 때, 이는, 일부 구현예들이 프로세서에 대해 국부적인 데이터 구조들을 저장하기 위한 저장 요소들을 제공할 수 있음을 의미할 수 있고, 콘텍스트 스위치가 발생할 때 이러한 상태가 메모리에 저장되어야 함을 예상할 수 있다. 그러나, 데이터 구조들이 상당한 크기(예컨대, 64 바이트, 256 바이트, 또는 심지어 1 킬로바이트 이상)의 것일 수 있고, 프로세싱 회로부의 저장 회로부에 의해 보유되는 다수의 그러한 데이터 구조들이 있을 수 있기 때문에, 따라서, 그 상태 모두를 메모리에 저장하는 것은 콘텍스트 스위칭 레이턴시 또는 인터럽트 핸들링 레이턴시에 상당한 영향을 미칠 수 있다.
하기에서 논의되는 기법에서, 데이터 구조 프로세싱 명령을 지원하는, 프로세싱 회로부 및 명령 디코더를 갖는 장치에는 데이터 구조 메타데이터 레지스터들의 둘 이상의 세트들이 제공되며, 각각의 세트는 하나 이상의 레지스터들을 갖는다. 데이터 구조 메타데이터 레지스터들의 각각의 세트는 대응하는 데이터 구조 식별자(이는, 입력 데이터 구조 식별자 또는 출력 데이터 구조 식별자 중 어느 하나일 수 있음)와 연관된다. 하나 이상의 데이터 구조 메타데이터 레지스터들의 각각의 세트는, 대응하는 데이터 구조 식별자에 의해 식별되는 데이터 구조에 대응하는 메모리 어드레스들을 식별하기 위한 어드레스-표시 메타데이터를 보유하기 위해 지정된다. 따라서, 데이터 구조 메타데이터 레지스터들은 메모리에서 대응하는 데이터 구조가 발견될 수 있는 곳에 대한 정보를 제공한다. 데이터 구조 메타데이터 레지스터들은 아키텍처 레벨에서 이러한 어드레스-표시 메타데이터를 유지하는 것으로 지정되며, 따라서, 데이터 구조들을 프로세싱하는 동안, 대응하는 어드레스-표시 메타데이터는 하나 이상의 데이터 구조 메타데이터 레지스터들의 대응하는 세트 내에서 발견될 수 있을 것임이 이해된다. 예를 들어, 특정 데이터 구조 식별자에 대한 데이터 구조 메타데이터 레지스터들로서 어느 레지스터들이 사용되는지에 대한 고정된 배정(assignment)이 있을 수 있다.
이러한 접근법은, 전형적으로 프로세서가 메모리로부터 값들을 로딩할 때, 프로그래머 또는 컴파일러가, 데이터가 로딩되는 어드레스들을 정의하는 레지스터들로서 프로세서의 다수의 범용 레지스터들 중 임의의 것을 자유롭게 선택할 수 있기 때문에 이례적이다. 또한, 전형적인 로딩/저장 아키텍처에서, 일단 주어진 메모리 어드레스로부터 데이터가 로딩되었다면, 그 어드레스 정보는 전형적으로 유지되지 않고, 로딩 타깃 어드레스들을 계산하는 데 사용되는 레지스터들은 빈번하게 다른 정보와 함께 겹쳐쓰기될 수 있다. 따라서, 대부분의 프로세서 아키텍처들은 대응하는 데이터 구조에 대한 어드레스-표시 메타데이터를 지속적으로 유지하기 위해 배정된 레지스터들로서 소정 레지스터들을 지정하지 않을 것이다.
그러나, 본 발명자들은 메모리 어드레스 공간에서 데이터 구조에 대한 관련 메모리 어드레스들이 어디에 있는지를 식별하는 메타데이터를 유지하고 있는 것으로 소프트웨어에 의해 이해될 수 있는 지정된 데이터 구조 메타데이터 레지스터들을 제공함으로써, 이것이 콘텍스트 스위칭 레이턴시들을 크게 개선할 수 있음을 인식하였는데, 그 이유는, 그것이, 운영 체제 또는 상태 저장을 제어하는 것을 담당하는 다른 소프트웨어, 또는 상태 저장을 행하기 위한 일부 마이크로-아키텍처 구현들에서 제공되는 콘텍스트 저장 하드웨어가, 전체 데이터 구조 자체를 저장할 필요가 있는 것이 아니라, 변경되지 않은 소정 데이터 구조들이 메모리로부터 로딩되었으므로 그들에 대한 메타데이터 레지스터들만을 저장할 것을 선택할 수 있음을 의미하기 때문이다. 대조적으로, 데이터 구조가 로딩되는 대응하는 어드레스들에 대한 정보가 손실되었다면, 현재 콘텍스트의 프로세싱이 복귀될 때 데이터가 복원될 수 있음을 보장하기 위해 콘텍스트 저장 루틴들이 전체 데이터 구조를 저장할 필요가 있을 것인데, 그 이유는, 업데이트되지 않은 클린(clean) 데이터 구조들조차도 복원할 필요가 있을 것이기 때문이고, 이는 메모리 내에 대응하는 데이터 구조들을 저장하는 어드레스들이 알려져 있지 않을 것이기 때문이다. 따라서, 대응하는 데이터 구조에 대한 어드레스-표시 메타데이터를 유지하기 위해 지정된 아키텍처 레벨에서의 지정된 레지스터들을 제공하는 것은, 콘텍스트 스위칭 레이턴시를 개선하기 위해 활용될 수 있는 아키텍처 기능을 제공한다.
프로세싱 회로부는, 적어도 데이터 구조 식별자들의 서브세트에 대해, 소프트웨어가, 그 서브세트의 데이터 구조 식별자들 중 하나의 데이터 구조 식별자에 대응하는 데이터 구조가 클린인지 오손(dirty)인지를 식별할 수 있게 하는 명령 세트 아키텍처에 따라 동작할 수 있다. 필수적인 것은 아니지만, 마이크로-아키텍처 구현들이, 데이터 구조들을 유지하기 위한 로컬 저장소를 제공할 것을 선택하는 것이 보편적일 수 있는데, 이는 메모리로부터 데이터 구조들에 직접 액세스하는 것보다 더 빨리 액세스될 수 있다. 예를 들어, 로컬 데이터 구조 저장소는 프로세서 내에 제공된 레지스터들일 수 있거나, 또는 스크래치패드 메모리 또는 캐시일 수 있다. 임의의 그러한 로컬 데이터 구조 저장소가 제공되는 경우, 프로세싱 회로부가 저장소에 보유되는 주어진 데이터 구조를 업데이트하면, 그 데이터 구조는 오손일 수 있는데, 이는 메모리 시스템 내의 연관된 메모리 어드레스들에 저장된 대응하는 데이터 구조와는 상이할 수 있기 때문이다. 프로세싱 회로부 상에서 실행되는 소프트웨어 프로그램이, 적어도 데이터 구조 식별자들의 서브세트가 클린 데이터 구조들에 대응하는지 오손 데이터 구조들에 대응하는지를 결정할 수 있게 하는 아키텍처 지원 특징부들을 제공함으로써, 이것은 콘텍스트 스위치 시의 상태 저장을 가속화하는 것을 도울 수 있는데, 그 이유는 이것이, 상태 저장을 담당하는 소프트웨어 또는 회로부가, 임의의 클린 데이터 구조들이 그 상태 저장의 일부로서 메모리에 저장될 필요가 없고, 그 대신, 그들이, 클린 데이터 구조에 대한 데이터 구조 메타데이터 레지스터들의 세트에 보유되는 어드레스-표시 메타데이터에 의해 나타내진 연관된 메모리 어드레스들로부터 프로세싱 회로부 내에 나중에 다시 로딩될 수 있을 것임을 식별할 수 있다는 것을 의미하기 때문이다. 대조적으로, 오손 데이터 구조들이 연관된 메모리 어드레스들에서의 기본 데이터와 상이할 수 있기 때문에, 그들 오손 데이터 구조들은 콘텍스트 스위치 시에 수행되는 상태 저장의 일부로서 저장될 수 있다. 오손 데이터 구조들의 경우, 상태 저장 동안, 이러한 오손 데이터 구조들은 어드레스-표시 메타데이터에 의해 식별되는 실제 메모리 어드레스들에 저장될 수 없음에 주목해야 한다. 그 대신, 콘텍스트 스위치 시에 수행되는 상태 저장은 운영 체제 또는 상태 저장을 제어하는 것을 담당하는 다른 소프트웨어와 연관된 메모리 어드레스들의 상이한 세트에서의 데이터 구조에 임의의 프로세서 상태들을 저장할 수 있다.
따라서, 대체적으로, 적어도 데이터 구조 식별자들의 서브세트가 클린임을 소프트웨어가 식별할 수 있게 하는 특징부를 갖는 명령 세트 아키텍처에 따라 프로세싱 회로부가 동작하는 것은 유용하다. 모든 데이터 구조 식별자들이 클린 또는 오손으로서 식별가능한 것이 필수적이지는 않으며, 그 경우에, 데이터 구조가 클린인지 또는 오손인지가 알려져 있지 않은 임의의 데이터 구조 식별자는 콘텍스트 스위치 시에 상태 저장이 될 수 있다.
명령 세트 아키텍처가, 소프트웨어가, 소정 데이터 구조 식별자들이 클린인지 오손인지를 식별하게 할 수 있는 다수의 방식들이 있을 수 있다. 일례에서, (데이터 구조 프로세싱 명령에 응답하여 생성될 출력 데이터 구조들을 식별하는 데 사용되는) 출력 데이터 구조 식별자는, 적어도 하나의 입력 데이터 구조 식별자(이는 데이터 구조 프로세싱 명령에 대한 피연산자로서 사용될 적어도 하나의 입력 데이터 구조를 식별함)에 대한 완전히 개별적인 식별자 공간에서 정의될 수 있다. 따라서, 하나 이상의 데이터 구조 메타데이터 레지스터들의 적어도 하나의 세트는, 입력 데이터 구조들을 표현하기 위해서만 사용될 수 있고 출력 데이터 구조를 표현하는 데에는 사용될 수 없는 데이터 구조 식별자와 연관될 수 있다. 개별 식별자 공간들에서 입력 및 출력 데이터 구조들에 대한 식별자들을 정의함으로써, 이것은, 입력 데이터 구조 식별자들과 연관된 데이터 구조들이 항상 클린인 것으로 보장될 수 있음을 의미하는데, 이는 이들 식별자들이 데이터 구조 프로세싱 명령에 응답하여 업데이트될 출력 데이터 구조들에 대해 결코 사용될 수 없기 때문이다. 이러한 접근법에서, 입력 데이터 구조 식별자들은 데이터 구조 프로세싱 명령에 대한 판독 전용 입력들을 효과적으로 식별하고 있으며, 이는, 일단 메모리로부터 로딩되었다면, 메모리 시스템에 저장된 대응하는 데이터 구조의 카피로서 단순히 작용하지만 메모리에 대해 업데이트될 수 없다. 따라서, 이러한 접근법에 의해, 운영 체제 또는 상태 저장을 제어하는 다른 소프트웨어는 입력 데이터 구조 식별자 공간 내의 입력 데이터 구조 식별자들에 대응하는 데이터 구조들 중 임의의 데이터 구조가 클린일 것이라고 내재적으로 결정할 수 있고, 따라서, 그들은 상태 저장 동안 메모리에 저장될 필요가 없다. 대신에, 데이터 구조 자체를 저장하는 것이 아니라, 하나 이상의 데이터 구조 메타데이터 레지스터들의 관련 세트로부터 대응하는 메타데이터를 저장하는 것만으로 충분할 수 있다. 이는, 콘텍스트 스위치 시의 메모리에 저장되는 데이터의 양을 크게 감소시켜, 콘텍스트 스위칭 레이턴시를 개선할 수 있다.
대안적으로, 데이터 구조들이 클린인지 또는 오손인지를 식별하기 위한 다른 아키텍처 접근법은, 적어도 하나의 오손 표시자를 유지하기 위해 적어도 하나의 아키텍처 레지스터가 제공될 수 있다는 것일 수 있으며, 이때 각각의 오손 표시자는 주어진 데이터 구조 식별자에 대응하는 데이터 구조가 클린인지 또는 오손인지를 나타낸다. 일부 예들에서, 오손 표시자들은 모든 데이터 구조 식별자에 제공될 수 있다. 대안적으로, 오손 표시자들은 데이터 구조 식별자들의 서브세트에만 제공될 수 있다. 이러한 접근법은 데이터 구조 식별자들이 입력 및 출력 데이터 구조들에 대한 개별 식별자 공간들에서 각각 정의될 필요가 없다는 것을 의미한다. 이것은 데이터 구조 식별자들의 공통 풀이 입력 또는 출력 데이터 구조에 사용될 수 있게 하며, 이는 하나의 데이터 구조 프로세싱 명령에 기인한 출력 데이터 구조가 이후의 동작에 대해 입력 피연산자로서 사용될 필요가 있는 경우에 이점들을 가질 수 있다. 대안적으로, 입력 및 출력 데이터 구조 식별자들을 별개의 식별자 공간들로 분리시키는 아키텍처에서도, 출력 데이터 구조 식별자들과 연관된 일부 오손 표시자들을 제공하는 것은, 이어서, 주어진 출력 데이터 구조 식별자와 연관된 출력 데이터 구조가 실제로 업데이트되었는지 여부의 결정을 행할 수 있게 할 수 있으며, 이는 클린 데이터 구조를 메모리에 저장할 필요성을 회피시킬 추가의 기회들을 제공할 수 있다. 오손 표시자를 유지하는 데 사용되는 아키텍처 레지스터(들)는 전술된 데이터 구조 메타데이터 레지스터들과 별개일 수 있거나, 또는 대안적으로, 레지스터들의 공통 세트가 어드레스-표시 메타데이터 및 적어도 하나의 오손 표시자 둘 모두를 유지할 수 있다. 예를 들어, 주어진 데이터 구조 식별자에 대한 오손 표시자는 주어진 데이터 구조 식별자에 대한 어드레스-표시 메타데이터와 동일한 데이터 구조 메타데이터 레지스터들의 세트에 보유될 수 있다.
상기에서 언급된 바와 같이, 데이터 구조 메타데이터 레지스터들의 아키텍처 제공은 콘텍스트 저장의 효율을 개선하는 것을 돕는데, 이는, 그것이, 데이터 구조가 클린인 것으로 알려진 경우에, 소정 데이터 구조 식별자들이 기초 데이터 구조가 아니라 상태 저장 프로세스의 일부로서 저장된 대응하는 메타데이터만을 갖게 할 수 있기 때문이다. 많은 경우들에 있어서, 상태 저장 프로세스는 프로세서 상에서 실행되는 소프트웨어에 의해 제어될 수 있어서, 따라서, 실제로 상태 저장 동작을 수행하기 위한 어떠한 하드웨어도 없을 수 있다. 예를 들어, 상태 저장은, 애플리케이션들 사이에서 콘텍스트 스위칭할 때 운영 체제에 의해, 또는 가상 머신들 또는 운영 체제들 사이에서 스위칭할 때 하이퍼바이저에 의해 수행될 수 있다. 그럼에도 불구하고, 상기에서 논의된 아키텍처 특징부들은 콘텍스트 저장 동작을 가속시키기 위해 소프트웨어에 의해 수행되는 그러한 콘텍스트 저장을 지원한다.
대안적으로, 반드시 명령 세트 아키텍처에 의해 요구되지는 않지만, 일부 마이크로-아키텍처 구현예들은 콘텍스트 저장 트리거 이벤트에 응답하여 콘텍스트 저장 회로부를 제공할 것을 선택하여 프로세서 상태의 미리결정된 서브세트를 메모리에 저장할 수 있다. 프로세서 상태의 미리결정된 서브세트는 클린 데이터 구조에 대응하는 적어도 하나의 데이터 구조 식별자에 대응하는 하나 이상의 데이터 구조 메타데이터 레지스터들의 세트를 포함할 수 있지만, 그 적어도 하나의 데이터 구조 식별자에 대응하는 데이터 구조 자체를 배제할 수 있다. 일부 프로세서 상태를 메모리에 저장하는 하드웨어 내에 콘텍스트 저장 회로부를 제공함으로써, 이것은, 순수하게 소프트웨어-제어되는 예들에 비해 콘텍스트 스위칭을 추가로 가속시킬 수 있고, 하드웨어-제어되는 콘텍스트 저장이, 콘텍스트 저장이 완료될 때까지 진행을 지연시키는 것이 아니라, 다른 명령들의 실행과 병렬로 진행할 수 있게 할 수 있다. 예를 들어, 하드웨어에 제공된 일부 콘텍스트 저장 회로부는, 입력 데이터 구조 식별자들 또는 클린 출력 데이터 구조 식별자들과 연관된 어드레스-표시 메타데이터를 메모리 내의 일정 위치에 자동으로 저장하도록 제공될 수 있다.
데이터 구조 메타데이터 레지스터들은 상이한 방식들로 구현될 수 있다. 일례에서, 프로세서 아키텍처의 임의의 범용 레지스터들과 별개인, 메타데이터 레지스터들의 전용 세트가 제공될 수 있다. 범용 레지스터들은 일반적인 피연산자들, 및 정수 산술 또는 로직 명령들을 포함한 산술 명령들의 결과들을 위해 사용될 수 있다. 범용 레지스터들은 또한, 로딩 또는 저장 명령들에 대한 어드레스들을 계산하기 위한 피연산자들로서 사용될 수 있다. 데이터 구조 메타데이터 레지스터들의 전용 세트를 제공함으로써, 이것은, 소프트웨어가 다른 목적들을 위해 범용 레지스터들을 사용할 필요가 있는 경우에도, 데이터 구조에 대한 어드레스-표시 메타데이터가 아키텍처 내에서 보존될 수 있음을 의미한다. 대안적으로, 다른 접근법은, 전용 데이터 구조 메타데이터 레지스터들을 제공하는 대신에, 데이터 구조 메타데이터 레지스터들이, 프로세싱 회로부 상에서 명령 디코더에 의해 지원되는 비-데이터 구조 프로세싱 명령들에 응답하여 또한 액세스가능한 범용 레지스터들의 고정된 서브세트라는 것이다. 예를 들어, 주어진 데이터 구조 식별자의 경우, 대응하는 데이터 구조에 대한 어드레스-표시 메타데이터는 범용 레지스터들의 소정의 하드와이어드 서브세트에 보유된다는 것이 내재될 수 있다. 이러한 접근법은 하드웨어에서 제공될 필요가 있는 레지스터들의 총 개수를 감소시킬 수 있다. 그러나, 이러한 접근법에 의해, 소프트웨어는, 콘텍스트 저장 및 복원을 제어하기 위해 필요한 경우에 어드레스 정보가 유지될 수 있음을 보장하기 위해, 대응하는 데이터 구조가 더 이상 필요하지 않을 때까지 주어진 데이터 구조에 대한 어드레스-표시 메타데이터가 확립되는 시간으로부터, 다른 명령들이, 대응하는 데이터 구조 식별자에 대한 하나 이상의 데이터 구조 메타데이터 레지스터들의 세트로서 사용되는 범용 레지스터들의 고정된 서브세트에 기록되지 않음을 보장할 필요가 있을 수 있다.
일부 예들에서, 데이터 구조 프로세싱 명령에 응답하여, 프로세싱 회로부는 주어진 입력 데이터 구조가 프로세싱 회로부에 이용불가능할 때 메모리로부터 주어진 입력 데이터 구조를 로딩하라는 로딩 요청을 생성할 수 있다. 마이크로프로세서들이 로딩/저장 아키텍처에 따라 동작하는 것이 보편적이며, 여기서 메모리로부터 데이터를 로딩하고 데이터를 메모리에 다시 저장하기 위한 로딩/저장 명령들은 메모리로부터 이전에 로딩된 피연산자들에 대한 산술, 로직, 또는 다른 프로세싱 동작들을 수행하는 데이터 프로세싱 명령들과는 별개이다. 따라서, 데이터 구조 프로세싱 명령으로부터의 별개의 명령은 데이터 구조들을 메모리로부터 로컬 저장소 내로 로딩하기 위해 정의되어야 하고, 이어서, 데이터 구조 프로세싱 명령들은 로딩을 자체적으로 수행할 필요가 없다는 것을 예상할 수 있다. 이러한 로딩/저장 접근법은 상기에서 논의된 바와 같은 데이터 구조 프로세싱 명령들에 대한 지원을 포함하는 아키텍처를 구현하는 하나의 방식일 수 있다.
그러나, 다른 예에서, 데이터 구조 프로세싱 명령들 자체는 또한, 프로세싱 회로부가, 주어진 입력 데이터 구조를, 그것이 프로세싱 회로부에 이용불가능할 때 메모리로부터 로딩하기 위한 로딩 요청을 생성하게 할 수 있다. 일부 경우들에 있어서, 데이터 구조 프로세싱 명령은 또한, 수행될 데이터 구조 프로세싱 동작이 출력 데이터 구조의 이전 값뿐만 아니라 입력 데이터 구조들의 값들에 의존하는 경우들에 있어서, 메모리로부터 출력 데이터 구조의 이전 값을 로딩하라는 로딩 요청의 생성을 트리거할 수 있다. 예를 들어, 프로세싱 동작은, 입력 데이터 구조들을 프로세싱하는 것으로부터 생성된 값이 출력 데이터 구조의 이전 값에 가산되어 출력 데이터 구조의 새로운 값을 결정하는 누산 동작일 수 있다. 따라서, 일부 경우들에 있어서, 데이터 구조 프로세싱 명령은 프로세싱 동작에 수반되는 입력 및 출력 데이터 구조들 중 하나 이상에 대한 로딩 요청들을 트리거할 수 있다.
이러한 접근법은, 이전의 명령이 메모리로부터 데이터 구조를 로딩한 경우에 비해, 데이터 구조 프로세싱 명령에 응답하는 지점에서 데이터 구조들을 로딩하는 것이 데이터 구조들에 대해 수행될 프로세싱 동작의 시작을 지연시킬 수 있기 때문에 반직관적(counter-intuitive)이라고 생각할 수 있다. 그러나, 본 발명자들은, 주어진 입력 데이터 구조가 이용불가능할 때 메모리로부터 주어진 입력 데이터 구조를 로딩하는 것이 요구되도록 아키텍처 내의 데이터 구조 프로세싱 명령을 정의함으로써, 이것이 소프트웨어 작업부하들 사이에서 콘텍스트 스위치들을 수행할 때 일부 이점들을 제공한다는 것을 인식하였다. 콘텍스트 스위치들의 상기의 논의는 주로 상태 저장 태양들에 집중했지만, 콘텍스트 스위칭의 다른 부분은 콘텍스트 스위치 이후에 실행될 인입 콘텍스트에 대한 상태의 복원이다. 상기에 논의된 바와 같은 데이터 구조 메타데이터 레지스터들의 제공은 데이터 구조들이 클린일 때, 상태 저장 동작의 일부로서 그들 데이터 구조들의 일부를 저장할 필요성을 회피시키는 것을 도울 수 있지만, 그럼에도 불구하고, 콘텍스트 스위치로부터 주어진 소프트웨어 작업부하의 프로세싱으로의 귀환 시, 그 작업부하가 필요로 하는 임의의 데이터 구조들은 다시 로딩될 필요가 있을 수 있고, 이러한 상태 복원은 데이터 구조들이 비교적 큰 크기를 가질 수 있기 때문에 약간의 시간이 걸릴 수 있다.
주어진 데이터 구조 프로세싱 명령에 필요한 데이터 구조들이 데이터 구조 프로세싱 명령에 선행하는 별개의 로딩 명령에 의해 로딩되고, 데이터 구조 프로세싱 명령 자체가 필요 시에 데이터 구조들을 로딩하는 능력을 갖지 않는 아키텍처에서, 콘텍스트 스위치를 트리거시키기 위한 인터럽트가 로딩 명령과 후속 데이터 구조 프로세싱 명령 사이에서 발생할 수 있는 기회가 있을 때, 운영 체제 또는 상태 복원을 수행하는 하드웨어 회로는, 그 작업부하로부터 떨어진, 콘텍스트 스위칭 이전의 주어진 소프트웨어 작업부하에 대해 로컬 저장소에 보유된 주어진 데이터 구조가, 시스템이 그 작업부하로 다시 스위칭한 이후에 여전히 존재할 것이라는 것이 보장될 수 없음을 상정해야 할 수도 있다. 따라서, 데이터 구조 프로세싱 명령 자체가 데이터 구조들을 로딩하는 능력을 갖지 않는 아키텍처들에서, 이것은, 운영 체제가 콘텍스트 스위치 이후에 실행될 복원된 소프트웨어 작업부하에 대한 데이터 구조 상태를 복원하는 것이 필수적이라는 것을 의미할 수 있다.
이것이 상태 복원을 수행하는 완벽하게 실행가능한 방식이지만, 감시 소프트웨어(예컨대, 운영 체제 또는 하이퍼바이저)가 데이터 구조들의 복원을 담당해야 하는 경우에, 이는 몇 가지 단점들을 갖는다. 첫째로, 상태 복원을 담당하는 감시 소프트웨어는 인입 작업부하에서의 프로세싱의 재개에 뒤이어 어느 데이터 구조들이 실제로 사용될 것인지에 대한 어떠한 가시성도 갖지 않을 수 있고, 따라서, 운영 체제 또는 감시 소프트웨어가, 이어서 인입 작업부하의 임의의 후속 명령에 의해 실제로 사용되지 않게 되는 데이터 구조들을 복원하는 시간을 낭비할 수 있는 것이 가능하다. 대조적으로, 이미 이용가능하지 않을 때 입력(또는 출력) 데이터 구조들에 로딩할 것을 데이터 구조 프로세싱 명령들에 요구함으로써, 이것은, 운영 체제가 임의의 데이터 구조들을 복원하는 것에 관해 걱정할 필요가 없다는 것을 의미하는데, 그 이유는 특정 데이터 구조를 필요로 하는 임의의 후속 데이터 구조 프로세싱 명령이 실행되는 경우, 그 구조가 그에 로딩될 것이고 프로세싱이 계속될 수 있지만, 소프트웨어에 의해 결코 다시 사용되지 않는 임의의 데이터 구조들은 복원되지 않고, 따라서, 이것이 불필요하게도 상태 복원 동안 여분의 레이턴시를 유발하는 것을 회피시키기 때문이다.
이용불가능한 데이터 구조들에서 데이터 구조 프로세싱 명령이 로딩되는 접근법의 다른 이점은 이것이 개선된 보안성을 제공할 수 있다는 것이다. 전형적으로, 감시 소프트웨어가 상태 복원을 수행할 때, 그것은 감시 소프트웨어의 메모리의 할당의 일부가 아니라 상태가 복원되고 있는 스레드(thread)와 연관된 메모리의 할당의 일부인 메모리의 일부 영역으로부터 상태를 복원하는 것일 수 있다. 따라서, 악성 애플리케이션이 어드레스-표시 메타데이터로의 감시 어드레스들의 세트를 로딩할 수 있는 위험이 있는데, 이는 이어서 상태 복원에 의해 액세스될 수 있어서, 감시 소프트웨어의 메모리 할당들을 사이드-채널 공격들에 노출시킬 수 있다. 대조적으로, 주어진 입력 데이터 구조를, 그것이 이미 이용가능하지 않은 경우에 로딩(또는 재로딩)하는 데이터 구조 프로세싱 명령들을 제공함으로써, 이것은, 데이터 구조 어드레스-표시 메타데이터를 감시 소프트웨어에 사용할 필요가 없음을 의미하며, 이는 악성 당사자가 감시 소프트웨어를 공격할 이러한 잠재적 기회를 차단할 수 있다.
일부 구현예들에서, 마이크로-아키텍처는 관련 데이터 구조 프로세싱 명령이 수신될 때까지 주어진 입력(또는 출력) 데이터 구조를 로딩하는 것을 항상 연기할 수 있고, 따라서, 그 데이터 구조 프로세싱 명령을 디코딩/프로세싱하기 전에 주어진 데이터 구조 프로세싱 명령에 의해 요구되는 데이터 구조들을 로딩할 어떠한 능력도 제공하지 않을 수 있다. 또한, 일부 구현예들에서, 데이터 구조 프로세싱 명령의 아키텍처 기능은, 필요할 때 주문 시에 프로세싱 회로부 내에 로딩되고 이어서 메모리에 다시 기록되는, 메모리 내의 데이터 구조들에 대해 직접적으로 작용하는 회로부를 통해 구현될 수 있고, 따라서, 임의의 추가적인 로컬 저장소에 대한 어떠한 필요성도 전혀 없을 수 있다.
그러나, 메모리에 대한 액세스가 상대적으로 느릴 수 있기 때문에, 다른 구현예들은 메모리와는 별개인 데이터 구조 저장 회로부로서 작용하는 일부 로컬 저장소를 제공할 것을 선택할 수 있으며, 이들은 메모리 자체보다 더 빨리 액세스될 수 있고, 다가오는 데이터 구조 프로세싱 명령에 대해 요청된 데이터 구조들 또는 최근에 사용된 데이터 구조들을 위한 일부 일시적 저장소를 제공할 수 있다. 따라서, 그러한 구현예들은, 주어진 데이터 구조 프로세싱 명령에 필요한 주어진 입력 데이터 구조(또는 출력 데이터 구조)가 데이터 구조 저장 회로부에서 이미 이용가능한지 여부를 검사하기 위한 검사 회로부를 프로세싱 회로부에 제공할 수 있다. 예를 들어, 각자의 데이터 구조 식별자들과 연관된 데이터 구조들이 이용가능한지 또는 이용불가능한지를 나타내는 데이터 구조 이용가능성 정보를 보유하기 위해 적어도 하나의 이용가능성 레지스터가 제공될 수 있고, 프로세싱 회로부는 그 데이터 구조 이용가능성 정보에 기초하여 주어진 입력 데이터 구조의 이용가능성을 결정할 수 있다. 이용가능성 레지스터들은 어드레스 메타데이터 레지스터들 자체의 일부일 수 있거나, 또는 레지스터들의 개별 세트일 수 있다. 이러한 접근법에 의해, 사전로딩 동작이 주어진 데이터 구조 프로세싱 명령을 수행하는 것에 앞서 데이터 구조에 로딩하기 위해 수행되는 경우, 이용가능성 정보는 대응하는 데이터 구조가 이미 이용가능함을 나타내도록 설정될 수 있고, 이는 데이터 구조 프로세싱 명령에 응답하여 메모리로부터 대응하는 데이터 구조를 재로딩하는 것이 필요하지 않음을 검사 회로부에 나타낼 수 있다. 따라서, 일부 예들에서, 프로세싱 회로부는 주어진 입력 데이터 구조 또는 출력 데이터 구조가, 그것이 데이터 구조 저장 회로부 내에 이미 보유되어 있지 않을 때 또는 메모리로부터의 그 데이터 구조의 로딩이 데이터 구조 프로세싱 명령에 직면하기 전에 이미 요청되지 않았을 때 이용불가능하다고 결정할 수 있다. 일정 시간에 앞선 데이터 구조의 사전로딩은 (예컨대, 동일한 코드를 실행시킨 과거 사례들에서의 이력상 거동을 추적한 것에 기초하여) 명령 디코더에 의해 디코딩된 명시적 로딩 또는 사전로딩 명령에 응답하여, 또는 향후 명령들에 의해 어떤 데이터 구조들이 필요할 수 있는지에 대한 예측을 행할 수 있는 사전로딩 회로부에 의해 행해질 수 있다.
메모리로부터 분리된 데이터 구조 저장 회로부를 제공하는 시스템에서, 명령 디코더는, 데이터 구조 프로세싱 명령에 응답하여, 데이터 구조 저장 회로부로부터 적어도 하나의 입력 데이터 구조를 판독하도록 그리고 데이터 구조 저장 회로부에 출력 데이터 구조를 기록 또는 업데이트하도록 프로세싱 회로부를 제어할 수 있다. 데이터 구조 저장 회로부는 상이한 방식들로 구현될 수 있다. 일부 경우들에 있어서, 데이터 구조 저장 회로부는 아키텍처-어드레싱가능 레지스터들일 수 있으며, 이들은 대응하는 데이터 구조들을 판독하기 위해 소프트웨어 명령들에 의해 명시적으로 참조될 수 있다. 대안적으로, 데이터 구조 저장 회로부는, 명령 세트 아키텍처에 순응하는 데 필수적이지 않을 수 있지만, 프로세싱 시스템의 특정 마이크로-아키텍처 구현의 설계자에 의해 선택된 바와 같이 선택적으로 제공될 수 있는 비-아키텍처-어드레싱가능 레지스터들을 포함할 수 있다. 대안적으로, 데이터 구조 저장 회로부는 스크래치패드 메모리 또는 캐시를 포함할 수 있다.
일부 경우들에 있어서, 주어진 데이터 구조가 데이터 구조 저장 회로부 내에 보유될 때, 프로세싱 회로부는 데이터 구조 저장 회로부에 데이터가 기록되었던 시퀀스와는 상이한 시퀀스로 주어진 데이터 구조로부터 데이터를 판독할 수 있다. 이는 데이터 구조들이 메모리에 저장될 수 있는 상이한 데이터 구조 포맷들을 다루기 위한 유연성을 제공할 수 있다. 예를 들어, 데이터 구조가 매트릭스 또는 데이터의 다른 2차원 배열인 경우, 데이터는 메모리에 행-단위 패턴 또는 열-단위 패턴으로 저장될 수 있고, 데이터를 판독하는 것 또는 그것을 행-단위 패턴 또는 열-단위 패턴 중 어느 하나로 다시 기록하는 것을 지원하는 판독/기록 포트들을 데이터 구조 저장 회로부에 제공하는 것이 유용할 수 있다.
데이터 구조 프로세싱 명령 자체뿐만 아니라, 다수의 다른 명령들이 데이터 구조들과 상호작용하기 위해 정의될 수 있다. 일례는, 타깃 입력 데이터 구조 식별자 또는 타깃 출력 데이터 구조 식별자를 특정하는 데이터 구조 로딩 명령일 수 있고, 이에 응답하여, 명령 디코더는 메모리로부터 로딩된 데이터 구조를 데이터 구조 저장 회로부에 기록하도록 프로세싱 회로부를 제어한다. 그러한 데이터 구조 로딩 명령은 데이터 구조 프로세싱 명령 자체에 로딩 능력이 제공되지 않는 아키텍처들에서 특히 유용할 수 있다. 이러한 경우에 있어서, 데이터 구조 프로세싱 명령을 실행하기 전에, 소프트웨어는, 수반되는 관련 입력 또는 출력 데이터 구조들을 로딩하기 위한 하나 이상의 데이터 구조 로딩 명령들을 먼저 포함해야 할 것으로 예상될 수 있다.
데이터 구조 메타데이터 레지스터들이 구현되는 방식에 따라, 데이터 구조 로딩 명령은 상이한 방식들로 구현될 수 있다. 일례에서, 데이터 구조 로딩 명령은, 로딩될 데이터 구조에 대한 타깃 입력 또는 출력 데이터 구조 식별자에 대응하는 하나 이상의 데이터 구조 메타데이터 레지스터들의 세트에 보유된 어드레스-표시 메타데이터로부터 도출되는 메모리 어드레스들로부터 데이터 구조를 로딩할 수 있다. 예를 들어, 데이터 구조 로딩 명령은 데이터 구조가 로딩될 어드레스들을 식별하기 위한 타깃 어드레스-식별 정보를 제공하는 하나 이상의 범용 레지스터들을 특정할 수 있으며, 로딩된 데이터 구조를 데이터 구조 저장 회로부에 기록하도록 프로세싱 회로부를 트리거하는 것에 더하여, 데이터 구조 로딩 명령은 또한, 명령에 의해 참조되는 범용 레지스터들에서 특정된 타깃 어드레스-식별 정보 또는 데이터 구조 로딩 명령의 다른 속성에 기초하여, 로딩되는 데이터 구조에 대한 하나 이상의 데이터 구조 메타데이터 레지스터들의 관련 세트를 업데이트하도록 프로세싱 회로부를 제어할 수 있다. 이러한 접근법은 데이터 구조 로딩 명령에 의해 특정된 명시적 어드레스-식별 정보 이외의 포맷을 사용하여 메타데이터 레지스터들에서의 어드레스-식별 메타데이터를 표현하기 위한 유연성을 제공할 수 있다. 예를 들어, 실제 어드레스-식별 정보 자체를 보유하는 대신, 데이터 구조 메타데이터 레지스터들 내에 기록된 데이터 구조 로딩 명령의 속성은 데이터 구조 로딩 명령에 의해 특정된 범용 레지스터들의 표시, 또는 대안적으로, 데이터 구조 로딩 명령의 어드레스를 표시하는 프로그램 카운터를 포함할 수 있으며, 이는 더 콤팩트한 형태의 메타데이터가 기록될 수 있게 하여 데이터 구조 메타데이터 레지스터들의 크기를 감소시킬 수 있다. 타깃 어드레스-식별 정보 또는 데이터 구조 로딩 명령의 프로그램 카운터를 특정하는 레지스터들을 기록하는 것은, 운영 체제 또는 상태 복원을 수행하는 다른 소프트웨어가, 주어진 데이터 구조와 연관된 어드레스들이 복구될 수 있는 충분한 정보를 복원할 수 있게 하기에 충분할 수 있다. 예를 들어, 범용 레지스터들이 또한 콘텍스트 스위치 시에 복원될 것이기 때문에, 어드레스 정보를 포함하는 레지스터들에 대한 참조를 단순히 기록하는 것으로 충분할 수 있다. 또한, 데이터 구조 로딩 명령의 프로그램 카운터가 기록되는 경우, 이는 소프트웨어 또는 명령 디코딩 회로 요소가, 참조된 명령을 획득하도록, 이를 디코딩하여 그에 의해 참조된 범용 레지스터들을 식별하도록, 그리고 이어서, 그들 범용 레지스터들 내의 복원된 상태를 사용하여 타깃 어드레스-식별 정보를 식별하도록 허용할 수 있다. 따라서, 데이터 구조 메타데이터 레지스터들이 어드레스들을 직접 식별하기 위해 필요한 어드레스 정보들을 명시적으로 나타내는 것이 필수적인 것은 아닌데, 이는 이것이 다른 파라미터들을 통해 간접적으로 식별될 수 있기 때문이다.
대안적으로, 데이터 구조의 로딩을 트리거하는 특정 명령을 제공하는 것이 아니라, 다른 아키텍처 구현예들에서, 아키텍처는 타깃 입력 데이터 구조 식별자를 특정하는 로딩 준비(prepare-for-load) 명령을 정의할 수 있다. 로딩 준비 명령에 응답하여, 명령 디코더는 프로세싱 회로부를 제어하여, 하기 중 하나에 기초하여 타깃 입력 데이터 구조 식별자에 대응하는 하나 이상의 데이터 구조 메타데이터 레지스터들의 세트를 업데이트한다: 로딩 준비 명령에 의해 내재적으로 또는 명시적으로 특정되는 타깃 어드레스-식별 정보, 또는 로딩 준비 명령의 속성. 다시, 이러한 속성은 프로그램 카운터, 또는 로딩 준비 명령에 의해 특정된 범용 레지스터들의 리스트일 수 있다. 그러한 로딩 준비 명령은, 로딩 기능을 갖는 데이터 구조 프로세싱 명령을 지원하는 시스템들에서 특히 유용할 수 있는데, 이는, 데이터 구조 프로세싱 명령이 필요한 경우에 메모리로부터 데이터 구조들을 로딩할 수 있으므로, 조기 명령이 필수적 아키텍처 특징부로서 로딩을 수행할 필요성이 없기 때문이다. 그 대신, 로딩 준비 명령은 타깃 어드레스-식별 정보의 소정 세트를 특정 입력 또는 출력 데이터 구조의 데이터 구조 식별자와 연관시키기 위한 명령으로서 간단히 해석될 수 있다. 이것은 후속 데이터 구조 프로세싱 명령이 관련 데이터 구조들을 로딩할 수 있는 어드레스들을 셋업할 수 있다.
아키텍처 레벨에서, 로딩 준비 명령이 타깃 입력 데이터 구조 식별자와 연관된 데이터 구조를 실제로 로딩하는 것이 필수적인 것은 아니지만, 선택적으로, 마이크로-아키텍처 레벨에서, 시스템 설계자는 어느 경우에서든, 로딩 준비 명령에 대한 응답으로서, 타깃 입력 데이터 구조 식별자와 연관된 데이터 구조가 타깃 어드레스-식별 정보에 기초하여 결정된 메모리 어드레스들로부터 데이터 구조 저장 회로부로 이송되는 것을 요청하라는 로딩 요청을 생성하는 프로세싱 회로부를 제공할 것을 선택할 수 있다. 즉, 후속 데이터 구조 프로세싱 명령에 의해 로딩이 행해질 것이기 때문에 로딩 준비 명령이 로딩을 수행할 의무가 없다 하더라도, 로딩 준비 명령 시에 로딩 요청을 생성하는 것이 성능에 더 효율적일 수 있는데, 이는, 이것이 로딩을 더 빨리 개시할 수 있게 하기 때문이다. 따라서, 로딩 준비 명령은 사전로딩 명령으로서 효과적으로 기능할 수 있지만, 그럼에도 불구하고, 프로세싱이 로딩 준비 명령의 실행 이후, 그러나 후속 데이터 구조 프로세싱 명령의 실행 이전에 중단되는 경우, 데이터 구조 프로세싱 명령은 요구된 입력 데이터 구조를 여전히 재로딩할 수 있다. 이는, 운영 체제 또는 다른 소프트웨어가 데이터 구조들을 복원하는 것을 담당해야 하는 상태 복원을 행하는 것을 회피시키는 데 유용하다.
타깃 출력 데이터 구조 식별자를 특정하는 저장 준비(prepare-for-store) 명령이 지원될 수 있고, 이에 응답하여, 명령 디코더는 저장 준비 명령에 의해 내재적으로 또는 명시적으로 특정된 타깃 어드레스-식별 정보 또는 저장 준비 명령의 다른 속성 중 어느 하나에 기초하여 타깃 출력 데이터 구조 식별자에 대응하는 하나 이상의 데이터 구조 메타데이터 레지스터들의 세트를 업데이트하도록 프로세싱 회로부를 제어할 수 있다. 저장 준비 명령은 어드레스-식별 메타데이터를 특정 출력 데이터 구조 식별자에 부착하는 기능을 갖는다.
상기에서 논의된 기법들은 다양한 상이한 유형들의 데이터 구조들에 적용될 수 있다. 일부 예들에서, 데이터 구조들은 데이터의 2차원 배열을 포함할 수 있으며, 여기서 2차원 구조의 일부 순서화된 배열을 갖는 다수의 데이터 요소들이 제공된다. 예를 들어, 데이터 구조들은 매트릭스들 또는 다른 형태들의 2차원 구조일 수 있다. 데이터 구조들이 매트릭스들인 경우에, 데이터 구조 프로세싱 명령은 2개의 입력 데이터 구조 식별자들을 특정하는 매트릭스 곱셈 명령을 포함할 수 있고, 이를 위해, 프로세싱 동작은 출력 데이터 구조를 생성하기 위해 2개의 입력 데이터 구조 식별자들에 의해 식별된 2개의 입력 데이터 구조들에 대해 수행되는 매트릭스 곱셈 동작을 포함한다. 매트릭스 곱셈 명령은 매트릭스 곱셈 및 누산 명령일 수 있고, 여기서 2개의 입력 매트릭스들을 곱한 결과는 출력 매트릭스의 이전 값에 가산되어 출력 매트릭스에 대한 새로운 값을 생성한다. 또한, 입력 매트릭스들에 대한 동작들을 적용하는 다른 형태들의 매트릭스 조작 명령들이 정의될 수 있다. CPU 자체 내에서 매트릭스 동작들을 수행하기 위한 고유 프로세서 지원을 제공하는 것은, 네트워크를 트레이닝시키기 위해 또는 모델을 사용하여 예측을 행하기 위해, 일부 분야들에서, 예컨대, 예를 들어 신경 네트워크들이 신경 네트워크 모델을 정의하는 가중치들을 입력 변수들과 곱하기 위해 다수의 매트릭스 곱셈들을 요구할 수 있는 머신 러닝에서 매우 유용할 수 있다. 머신 러닝 알고리즘들에서, 매트릭스 곱셈들은 극히 보편적이며, 따라서, 그러한 동작들을 가속하는 것은 머신 러닝 기반 소프트웨어에 대한 성능을 크게 개선할 수 있다.
일부 예들에서, 데이터 구조들은 메모리 시스템 내의 메모리 어드레스들의 다수의 불연속 블록들에 대응하는 구조들일 수 있다. 따라서, 데이터 구조가 메모리 어드레스 공간 내의 메모리 어드레스들의 단일 연속 블록에 저장되는 것이 아니라, 데이터 구조는 메모리 어드레스 공간의 별개의 비인접 영역들에서 다수의 블록들에 걸쳐 있을 수 있다. 이것은 매트릭스 예에 특히 유용할 수 있는데, 여기서 실제로, 예를 들어 신경 네트워크를 표현하는 매트릭스의 전체 크기는 주어진 데이터 구조에 대한 명령 세트 아키텍처에서 정의된 단위 크기보다 실제로 더 클 수 있다. 예를 들어, 데이터 구조들은 4x4, 8x8, 16x16 등과 같은 소정 크기의 매트릭스들에 대응하는 것으로 정의될 수 있지만(또는, 대안적으로, 상이한 개수들의 행들 및 열들을 갖는 직사각형 매트릭스들을 지원할 수 있음), 소프트웨어 알고리즘이 더 큰 매트릭스 크기로 매트릭스 계산들을 적용할 필요가 있을 때, 이들은 명령 세트 아키텍처의 명령들에서 지원되는 세분도의 개별 동작들로 분해될 수 있다. 이것은, 더 큰 매트릭스가 전체로서 메모리에 저장될 때, 각각의 행이 메모리 어드레스 공간 내의 인접한 어드레스들에 있고 하나의 행이 어드레스 공간 내의 이전 행의 요소들을 순차적으로 뒤따르도록 함을 의미할 수 있거나, 또는 대안적으로, 매트릭스는 각각의 열이 메모리 내의 인접 어드레스들의 블록을 점유하고 하나의 열이 이전 열의 어드레스들을 순차적으로 뒤따르도록 열-단위로 저장되고, 이것은, 데이터 구조 프로세싱 명령이 매트릭스 내의 개별 타일로서 간주될 수 있는, 그 더 큰 매트릭스의 개별 부분에 대해 동작을 수행할 때, 타일의 행들 또는 열들 중 어느 하나가 메모리 어드레스들의 다수의 불연속 블록들에 대응할 것임을 의미할 것이다. 어드레스 공간의 불연속 부분들에 걸쳐 스트라이프되는(striped) 그러한 타일들을 다루기 위한 명령 지원을 제공함으로써, 이것은, 명령 세트 아키텍처에서 지원되는 타일 크기보다 클 수 있거나 그보다 작을 수 있는 매트릭스의 더 임의적인 크기들에 매트릭스 동작들을 적용할 수 있게 하는 것을 훨씬 더 수월하게 만든다.
메모리 어드레스들의 다수의 불연속 블록들에 대응하는 데이터 구조들의 경우, 어드레스-표시 메타데이터는 다수의 정보를 포함할 수 있고 다수의 형태들을 취할 수 있다. 예를 들어, 어드레스-표시 메타데이터는 하기 중 적어도 하나를 포함할 수 있다: 메모리 어드레스들의 복수의 불연속 블록들 중 적어도 하나의 불연속 블록의 시작 어드레스를 나타내는 시작 어드레스 정보; 메모리 어드레스들의 복수의 불연속 블록들의 시작 어드레스들 사이의 분리를 나타내는 오프셋 정보; 메모리 어드레스들의 각각의 불연속 블록의 크기를 나타내는 제1 크기 정보; 및 메모리 어드레스들의 불연속 블록들 중 얼마나 많은 불연속 블록들이 데이터 구조를 형성하는지를 나타내는 제2 크기 정보. 이들 유형들의 정보는 더 큰 매트릭스 내의 임의의 타일을 식별하기에 충분할 수 있으며, 여기서 더 큰 매트릭스는 메모리 어드레스 공간 내에 행 단위 또는 열-단위 중 어느 하나로 저장되는 것으로 상정되고, 타일은 인접하지 않은 어드레스 공간 내의 개별 스트라이프들에 대응한다. 시작 어드레스 정보는, 예를 들어, 타일의 제1 행 또는 제1 열의 시작 어드레스를 나타낼 수 있으며, 이때 오프셋 정보는, 예를 들어, 각자의 행들 또는 열들의 시작 어드레스들 사이의 스트라이드(stride)를 나타낸다. 제1 및 제2 크기 정보는, 전체적인 더 큰 매트릭스가 개별 타일 내의 행들 또는 열들의 수의 정확한 배수가 아닌 다수의 행들 또는 다수의 열들을 갖는 경우들을 다루는 데 유용할 수 있어서, 타일들이 더 큰 매트릭스의 에지에 도달할 때, 제1 및 제2 크기 정보가 매트릭스의 끝을 넘어 확장되는 어드레스들을 마스킹하는 데 사용될 수 있게 한다. 제1 크기 정보는 메모리 어드레스들의 각각의 불연속 블록의 크기를 나타낼 수 있고, 제2 크기 표시는 메모리 어드레스들의 불연속 블록들 중 얼마나 많은 불연속 블록들이 데이터 구조를 형성하는지를 나타낼 수 있다. 데이터 구조가 행-단위로 저장되어 있는지 또는 열-단위로 저장되어 있는지에 따라, 제1 크기 정보 중 하나는 프로세싱될 데이터 구조 내의 열들의 개수를 효과적으로 나타내며, 다른 것은 행들의 개수를 나타내지만, 이것은 어떤 방식으로든 될 수 있다. 제1 및 제2 크기 정보는 상이한 방식들로 인코딩될 수 있다. 일례에서, 제1 또는 제2 크기 정보는 행들 또는 열들의 개수의 카운트를 나타내는 수치 값으로서 인코딩될 수 있는데, 예컨대, 제1 크기 정보는 메모리 어드레스들의 불연속 블록 내의 데이터 요소들의 개수를 나타낼 수 있고, 제2 크기 정보는 데이터 구조 전체에 있는 불연속 블록들의 개수를 나타낼 수 있다. 대안적으로, 제1 및/또는 제2 크기 정보는 마스크, 예를 들어, 데이터 구조의 일부를 형성하는 메모리 어드레스들의 그 불연속 블록 내의 활성 요소들을 나타내는 1(또는 0)의 비트들, 및 데이터 구조의 일부를 형성하지 않는 불연속 블록 내의 요소들을 나타내는 마스크 내의 0(또는 1)의 비트들을 갖는 비트맵으로서 인코딩될 수 있다. 이어서, 이것은, 임의의 데이터 구조 프로세싱 명령이 개별 데이터 구조 프로세싱 명령에 의해 프로세싱되어야 하는 전체적인 더 큰 데이터 구조의 일부를 나타내는 메모리 어드레스들의 불연속 블록들의 일부분에만 적용됨을 보장하기 위해 사용될 수 있다.
시작 어드레스, 오프셋, 및 제1 및 제2 크기 정보에 더하여, 데이터 구조 내의 개별 데이터 요소의 데이터 요소 크기를 나타내는 요소 크기 정보와 같은, 데이터 구조에 관한 다른 정보를 기록하는 것이 또한 가능할 것이다. 일부 형태들의 데이터 구조 프로세싱 명령은, 예를 들어, 상이한 데이터 요소 크기들을 지원할 수 있다.
대안적으로, 시작 어드레스 정보, 오프셋 정보, 또는 제1 및 제2 크기 정보를 직접 나타내는 것이 아니라, 다른 예들은, 이를, 예를 들어 이들 파라미터들 중 적어도 하나를 보유하는 범용 레지스터들을 식별하는 하나 이상의 레지스터 식별자들을 통해 간접적으로 식별하는 어드레스-표시 메타데이터, 및/또는 이들 파라미터들 중 하나 이상을 보유하는 레지스터들을 특정하는 명령의 어드레스를 식별하는 명령 어드레스 표시를 제공할 수 있다. 상기에 언급된 바와 같이, 레지스터 식별자들 또는 명령 어드레스 표시(예컨대, 프로그램 카운터)는 데이터 구조를 프로세싱 회로부의 저장 회로부에 복원하여 메모리에서 데이터 구조가 발견될 수 있는 곳을 식별할 필요가 있는 소프트웨어 또는 회로부에 대해 충분할 수 있다.
일부 경우들에 있어서, 데이터 구조는 3차원 또는 3 초과 차수의 다차원 데이터 구조일 수 있어서, 데이터 구조가 2차원 데이터 구조인 것이 필수적인 것은 아니다. 대체적으로, 데이터 구조는 데이터 요소들의 일부 순서화된 배열일 수 있다.
대안적으로, 데이터 구조의 다른 예는, 테이블 또는 매트릭스에서와 같은 2차원 이상의 배열 없이, 단순히 데이터 요소들의 1차원 스트림일 수 있다. 상기에서 논의된 기법들은 또한, 일부 상당한 크기의 데이터 스트림을 제공하는 데이터 구조들에 유용할 수 있다. 데이터 구조가 비교적 큰 크기를 가질 수 있기 때문에, 이는 콘텍스트 스위칭 레이턴시에 대해 난제들을 부과할 수 있고, 따라서, 상기에서 논의된 기법들은 이를 다루는 데 유용할 수 있다. 64-바이트 데이터 구조는, 예를 들어, 32-비트 요소들의 4x4 매트릭스에 대응할 수 있다. 다른 예들에서, 출력 데이터 구조는 적어도 256 바이트(32-비트 요소들의 8x8 매트릭스) 또는 1 킬로바이트(32-비트 요소들의 16x16 매트릭스)의 크기를 가질 수 있다. 다른 예들이 16 비트 또는 64 비트와 같은 상이한 개수의 비트들의 데이터 요소 크기를 사용할 수 있고, 이러한 경우에, 다시 데이터 구조 크기가 변할 수 있음이 이해될 것이다. 그러나, 대체적으로, 출력 데이터 구조가 적어도 64 바이트의 크기를 가질 때, 이는 콘텍스트 스위칭 레이턴시에 상당한 난제들을 제기하기 시작하고, 따라서, 콘텍스트 스위치 시에 저장 및 복원될 필요가 있는 데이터의 양을 감소시키는 방식으로서 어드레스-표시 메타데이터를 사용하는 것이 유용하다.
입력 데이터 구조들은 반드시 출력 데이터 구조와 동일한 크기를 가질 필요가 없음에 주목해야 한다. 예를 들어, 매트릭스 곱셈 동작을 수행할 때, 2개의 N-비트 값들의 곱셈이 2N-비트 결과를 생성할 수 있기 때문에, 그것은 입력 데이터 구조들보다 더 큰 크기의 출력 데이터 구조가 생성될 수 있는 것일 수 있다. 대안적으로, 일부 구현예들은, 예를 들어 입력과 동일한 개수의 비트들에 맞도록 곱셈의 결과를 절사(truncating) 또는 반올림함으로써, 동일한 크기의 입력의 출력 데이터 구조를 생성할 수 있다.
일부 예들에서, 상기에서 논의된 선택적인 확장에서 논의된 바와 같이 메모리로부터의 입력 또는 출력 데이터 구조의 로딩을 제어하기 위해 데이터 구조 메타데이터 레지스터들로부터의 어드레스-표시 메타데이터를 선택적으로 사용하는 것 이외에, 데이터 구조 프로세싱 명령에 응답하여 프로세싱 회로부에 의해 수행되는 데이터 구조 프로세싱 동작은 어드레스-표시 메타데이터와는 독립적일 수 있다. 즉, 적어도 하나의 입력 데이터 구조 및 출력 데이터 구조의 이전 값을 출력 데이터 구조의 새로운 값에 맵핑시키는 데 사용되는 함수는 어드레스-표시 메타데이터와는 독립적일 수 있다.
그러나, 다른 예들에서, 프로세싱 회로부는, 데이터 구조 프로세싱 명령에 응답하여, 적어도 하나의 입력 데이터 구조 식별자 또는 출력 구조 식별자에 대응하는 하나 이상의 데이터 구조 메타데이터 레지스터들의 관련 세트 내에 보유된 어드레스-표시 메타데이터에 따라, 적어도 하나의 입력 데이터 구조에 대해 수행되는 프로세싱 동작을 적응시킬 수 있다. 예를 들어, 어드레스-표시 메타데이터가 특정 차원에서 데이터 구조의 크기를 제한하는 제1 또는 제2 크기 정보를 포함하는 경우, 이것은, 예를 들어, 전력을 절약하거나 성능을 증가시키기 위해, 입력 데이터 구조들의 데이터 요소들 상에서 수행되는 곱셈 횟수를 감소시키는 데 사용될 수 있다. 예를 들어, 지원되는 최대 크기의 데이터 구조들이 프로세싱된 경우에 활성일 회로 로직은, 제1 및 제2 크기 정보에 기초하여 마스킹된 일부 비활성 요소들을 갖는 데이터 구조가 프로세싱될 때 전력 게이팅(power gating)에 의해 비활성이 될 수 있다. 또한, 프로세싱 동작이 다수의 단계들로 수행되는 경우, 그들 단계들 중 일부는 제1 및 제2 크기 정보에 기초하여 요구되지 않을 수 있다.
도 1은 메모리 시스템(8)에 대한 액세스를 공유하는 다수의 마스터 디바이스들(4, 6)을 포함하는 데이터 프로세싱 시스템(2)의 일례를 개략적으로 도시한다. 마스터 디바이스들(4, 6)에 의해 발행된 메모리 트랜잭션들은, 메모리 시스템으로 트랜잭션을 라우팅하고 또한 각자의 마스터들에서 캐싱된 데이터 사이의 코히어런시(coherency)를 관리할 수 있는 상호접속부(10)로 전달된다. 마스터들은, 예를 들어, 하나 이상의 중앙 프로세싱 유닛(CPU)들(4), 그래픽 프로세싱 유닛과 같이 명령들을 실행할 수 있는 다른 마스터 디바이스들, 또는 명령 실행 능력을 가질 수 있는 것이 아니라 소정의 전용 기능들, 예컨대 네트워크에 대한 액세스를 제어하는 것 또는 신호 프로세싱 또는 매트릭스 곱셈과 같은 소정 프로세싱 기능들을 가속하기 위한 하드웨어 가속기로서 작용하는 것을 수행할 수 있는 다른 디바이스들(6)을 포함할 수 있다.
각각의 CPU(4)는 캐시 또는 메모리로부터 페칭된 프로그램 명령들을 디코딩하기 위한 명령 디코더(12), 및 디코딩된 명령들에 응답하여 명령 디코더(12)에 의해 생성된 제어 신호들에 응답하여 데이터 프로세싱 동작들을 수행하기 위한 프로세싱 회로부(14)를 가질 수 있다. 레지스터들(16)은 실행될 명령들의 피연산자들을 저장하기 위해 그리고 프로세싱 회로부(14)에 의해 생성된 결과들을 저장하기 위해 제공될 수 있다. CPU는 메모리 시스템으로부터 데이터, 명령들 또는 제어 정보(예컨대, 페이지 테이블 데이터)를 캐싱하기 위한 하나 이상의 캐시들(18)을 가질 수 있다. 선택적으로, CPU는 콘텍스트 스위치 시에 상태 저장을 핸들링하기 위한 콘텍스트 저장 회로부(20)를 가질 수 있지만, 이러한 기능은 또한 CPU(4) 상에서 실행되는 소프트웨어에 의해 수행될 수 있다. 도 1의 2개의 CPU들(4)이 동등한 컴포넌트들을 갖는 것으로 도시되어 있지만, 실제로, 모든 CPU들이 동일한 것이 필수적인 것은 아니며, 일부 시스템들은, 전력 소비에 대해 프로세싱 성능을 트레이드오프하기 위해 더 낮은 성능 CPU와 더 높은 성능 CPU를 조합하는 것과 같은 상이한 특성들을 갖는 비대칭 CPU들을 가질 수 있다. 또한, 일부 시스템들은 2개 초과의 CPU들을 가질 수 있다.
일부 데이터 프로세싱 애플리케이션들은 개별 데이터 값들의 프로세싱을 수반할 수 있으며, 여기서 데이터 값이 특정 어드레스로부터 로딩되고, 프로세싱 회로부(14)에 의해 실행되는 일부 명령들에 의해 프로세싱되어 레지스터들(16)에 기록되는 결과들을 생성하고, 이어서, 일단 결과들이 레지스터들(16) 내에 더 이상 보유될 수 없으면, 그들은 캐시(18) 또는 메모리(8)로 다시 기록된다.
그러나, 다른 프로세싱 알고리즘들은 데이터 구조의 요소들을 형성하는 다수의 별개의 데이터 값들을 포함하는 더 큰 데이터 구조들에 대해 동작할 수 있다. 예를 들어, 데이터 구조는, 예를 들어 압축될 데이터의 블록과 같은, 상당한 크기의 1차원 범위의 데이터의 스트림일 수 있다. 대안적으로, 데이터 구조는 둘 이상의 치수들의 매트릭스 또는 테이블일 수 있으며, 이에 대해 프로세싱 동작이 매트릭스/테이블에 전체적으로 적용될 것이다.
도 2에 도시된 바와 같이, 그러한 데이터 구조의 일례는 매트릭스(이 예에서는, 2차원 매트릭스)일 수 있다. 매트릭스 프로세싱은 일부 신호 프로세싱 애플리케이션들 또는 머신 러닝 애플리케이션들과 같은 소정 프로세싱 알고리즘들에 유용할 수 있다. 예를 들어, 신경 네트워크와 같은 머신 러닝 모델이, 모델의 특성들을 정의하는 가중치들을 나타내는 매트릭스들을 사용하여 정의될 수 있으며, 이는 가중치들을 입력들과 곱함으로써 입력들의 세트에 적용될 수 있다. 따라서, 신경 네트워크 기반 프로세싱 및 다른 머신 러닝 애플리케이션들은 상당한 수의 매트릭스 곱셈 동작들을 포함할 수 있다. 하드웨어 가속기(6)가 그러한 매트릭스 곱셈들을 수행하기 위해 제공될 수 있지만, 하드웨어 가속기와의 상호작용은 소정 메모리 위치들에 데이터를 기록하여 하드웨어 가속기를 구성할 것, 및 이어서, 이후에, 메모리로부터의 판독물들을 사용하여 하드웨어 가속기로부터 결과들을 다시 판독할 것을 CPU(4)에 요구할 수 있으며, 이것은, 매트릭스 곱셈 동작들이 CPU 자체에 대해 수행되는 다른 동작들과 산재될 필요가 있는 애플리케이션들이 있는 경우의 성능에 대해 불량할 수 있다. 또한, 매트릭스 동작들을 위해 하드웨어 가속기를 사용하는 것은 다수의 CPU들(4) 또는 소프트웨어 스레드들이 하드웨어 가속기(6)에 대한 액세스를 공유할 필요가 있는 시스템들에서 어려움들을 야기할 수 있다. 따라서, 하드웨어 가속기(6)를 사용할 필요가 있는 것이 아니라, 명령 디코더(12)에 의해 지원되는 고유 명령 세트의 일부로서 매트릭스들 또는 다른 데이터 구조들의 프로세싱을 수행할 수 있는 명령들에 대해 CPU(4) 내의 지원을 제공하는 것이 바람직할 수 있다.
도 2는 그러한 매트릭스를 보유하기 위해 제공될 수 있는 로컬 저장 구조물(30)의 일례를 도시한다. 예를 들어, 저장 구조물(30)은 CPU 내의 레지스터들(16) 중 일부일 수 있거나, 또는 CPU(4) 내의 비-아키텍처로 규정된(mandated) 레지스터들 또는 캐시와 같은 마이크로-아키텍처 저장 요소로서 제공될 수 있다. 또한, 로컬 저장 구조물(30)은 상호접속부(10) 내에 있을 수 있다. 저장 구조물(30)은 일부 주어진 크기의 매트릭스를 저장하기에 충분한 용량을 가질 수 있다. 이러한 예에서, 매트릭스는 NxN(여기서 N은 16임) 정사각형 매트릭스지만, 다른 크기들의 매트릭스들이 또한 지원될 수 있음이 이해될 것이다. 저장 구조물(30)은, 데이터 요소들이 저장 구조물(30)에 기록된 시퀀스와는 상이한 데이터 요소들의 시퀀스로 저장 구조물로부터 매트릭스를 판독하는 것이 가능한 충분한 판독 및 기록 포트들을 가질 수 있다. 예를 들어, 매트릭스는 열들로서 또는 행들로서 판독될 수 있다. 이것은 매트릭스들이 상이한 포맷들로 메모리에 저장될 수 있다는 사실을 고려하며, 이때 열들이 순차적 메모리 어드레스들의 블록들을 점유하고, 하나의 열이 선행 열의 어드레스들을 순차적으로 뒤따르며, 동일한 행 내의 요소들이 어드레스 공간 내의 불연속 어드레스들에 있거나(이러한 접근법은 열-우선(column-major) 어드레싱으로 칭해질 수 있음), 또는 동일한 행 내의 요소들이 연속적인 메모리 어드레스들의 블록에 저장될 수 있고, 하나의 행이 선행 행의 어드레스들을 순차적으로 뒤따를 수 있으며, 이러한 경우에, 열 내의 요소들이 각각의 행에 할당된 부분들 내의 불연속 어드레스들에 있을 수 있다(이러한 접근법은 행-우선(row-major) 어드레싱으로 지칭됨). 상이한 소프트웨어 알고리즘들이 행-우선 및 열-우선 접근법들 중 상이한 접근법들을 사용할 수 있기 때문에, 이들 접근법 중 어느 하나를 위해 하드웨어 내에 지원을 제공하는 것이 유용할 수 있다. 매트릭스의 요소들이 한번에 하나의 행씩 또는 한번에 하나의 열씩 판독될 수 있도록 여분의 판독 포트들을 제공함으로써, 이것은 매트릭스들의 즉석 전치(on-the-fly transposition)를 허용하여 메모리에 열-우선으로 저장된 매트릭스가 행-우선으로 판독될 수 있거나 그 역이 성립될 수 있도록 하는데, 이는, 상이한 유형들의 소프트웨어와의 호환성을 크게 개선할 수 있고, 열-우선 매트릭스를 행-우선 형태로 전치시키거나 그 역이 성립하도록 하기 위해 벡터의 요소들을 셔플링하기 위한 추가적인 명령들을 실행할 필요성을 회피시킨다.
데이터 구조 저장 회로부(31)에는 도 3의 예에 도시된 바와 같이 여러 매트릭스들 또는 매트릭스들의 일부들(타일들)을 보유하기에 충분한 저장 공간이 제공될 수 있다. 후속 설명에서, 용어 "타일"이 사용되며, 이는 메모리에 저장된 매트릭스의 NxN 부분을 지칭한다. 물론, 프로세싱될 메모리 내의 매트릭스가 그 자체가 치수 NxN인 경우, 타일은 실제로 전체 매트릭스에 대응할 수 있다.
데이터 구조 저장 회로부(31)는 도 2에 도시된 저장 구조물(30)의 다수의 사례들을 포함할 수 있다. 예를 들어, 저장 회로부(31)는 도 3에 도시된 바와 같이 한번에 8개의 NxN 타일들을 보유하기에 충분한 용량을 가질 수 있다. 제공된 저장 영역들의 8개의 세트들은 매트릭스 곱셈 또는 다른 산술 동작들을 위해 입력 타일들을 보유하기 위한 4개의 영역들(30) A0, A1, B0, B1 및 매트릭스 곱셈 동작들의 출력들을 보유하기 위한 4개의 영역들(C0 내지 C3)로 분할될 수 있다.
다른 접근법이 (예컨대, 입력 타일들 A0, B0 및 출력 타일 C0을 저장하기 위해) 3개의 타일 저장 영역들(30)만을 제공하여 단일 매트릭스 곱셈이 한번에 수행될 수 있도록 할 것이지만, 이러한 접근법은 각각의 매트릭스 곱셈 동작을 위해 메모리로부터 적어도 2개의 타일 로딩들을 수행하는 것을 요구할 것인데, 그 이유는 각각의 매트릭스 곱셈에 대한 입력들이 동일한 2개의 입력 타일 레지스터들을 공유해야 할 것이기 때문이다. 대조적으로, 로컬 저장소(31)에 적어도 8개의 타일 저장 영역들(30)을 제공함으로써, 이것은, 입력 타일들 A0, A1, B0, B1을 로딩하기 위한 메모리로부터의 4회의 로딩들이 4개의 매트릭스 곱셈 동작들에 걸쳐서 분할상환될 수 있음을 의미하는데, 이는 입력 타일들이 다수의 곱셈 동작들(예컨대, C0=A0*B0, C1=A0*B1, C2=A1*B0, C3=A1*B1)에 걸쳐서 공유되는 것이 보편적이고, 이것이 요구되는 곱셈들에 대한 로딩들의 비를 감소시킴으로써 성능을 증가시킬 수 있기 때문이다. 이는 성능에 중요할 수 있는데, 그 이유는 타일의 로딩이 비교적 많은 양의 데이터를 로딩할 수 있으므로 그것이 비교적 시간 소모적일 수 있기 때문이다. 예를 들어, 타일의 각각의 데이터 요소가 32-비트 값이고 N = 16인 경우, 각각의 타일은 1 킬로바이트의 데이터에 대응할 수 있다.
하나 초과의 곱셈 동작을 핸들링하기 위한 로컬 저장 영역들(30)을 제공하는 동일한 접근법이 더 많은 수의 곱셈들로 확장될 수 있지만, 입력 및 출력 타일들에 대한 저장 회로부(31)에 추가적인 저장 용량을 제공함으로써, CPU(4) 내의 매트릭스들의 개수를 증가시키기 위한 저장 회로부를 제공하는 추가적인 오버헤드와 증가된 성능 사이에 균형이 있을 수 있고, 따라서, 도 3에 도시된 바와 같은 8개의 입력 및 출력 매트릭스들을 사용한 접근법이 성능과 면적 비용 사이의 더 바람직한 균형일 수도 있다. 그럼에도 불구하고, 바람직한 경우, 상이한 개수의 타일들이 저장 구조물(31) 내에 보유될 수 있다.
도 3에 도시된 타일 저장 영역들(30) 각각은 도 4에 도시된 바와 같이 더 큰 매트릭스(50) 내의 타일(40)을 나타내는 데이터를 보유할 수 있다. 프로세싱될 전체 매트릭스(50)는 CPU(4) 내의 명령들에 의해 지원되는 N x N 타일(40)의 크기보다 더 클 수 있다. 따라서, 더 큰 매트릭스(50)에 대해 수행되는 매트릭스 곱셈들은 매트릭스의 개별 타일들(40)에 대해 수행되는 개별 명령들로 분해될 필요가 있을 수 있다. 따라서, 매트릭스(50)의 주어진 타일(40)이 메모리에 상주하는 위치를 식별하기 위해, 다수의 어드레스-식별 파라미터들이 정의될 수 있다. 더 큰 매트릭스(50)의 데이터 요소들은 메모리 어드레스 공간의 인접한 블록에 저장될 수 있고, 이러한 예에서, 매트릭스는 매트릭스의 제1 행이 인접한 블록 내의 메모리 어드레스들에 저장되도록 행-우선으로 저장되며, 이때 매트릭스의 상단 좌측 요소가 최저 메모리 어드레스에 있고, 이어서, 그 상단 행의 후속 요소들은 메모리 내의 연속으로 증가하는 메모리 어드레스들에 있다. 제1 행의 끝에 도달될 때, 그 후의 다음 어드레스는 매트릭스의 제2 행의 최좌측 요소인 데이터 요소에 대응할 것이고 등등이어서, 매트릭스의 메모리 어드레스들의 시퀀스가 증가함에 따라, 이것은 연속적인 행들에서 판독되는 요소들에 대응하도록 한다. 물론, 매트릭스는 또한, 열-우선으로 저장될 수 있으며, 이 경우에, 시퀀스는 행-단위 대신에 열-단위로 진행될 것이다.
따라서, 매트릭스의 개별 타일(40)을 식별하기 위해, 타일의 시작 어드레스를 가리키는 베이스 어드레스(42), 더 큰 매트릭스(50)의 하나의 행 또는 열의 크기를 효과적으로 나타내고 타일(40)의 하나의 행(또는 타일이 열-우선으로 저장되는 경우에 열)의 시작 어드레스와 다음 행(또는 열) 사이의 차이를 표현하는 스트라이드 파라미터(44)를 포함하는 여러 파라미터들이 정의될 수 있다. 또한, 수평 크기 및 수직 크기 정보(46, 48)는 타일(40)의 수평 및 수직 범위를 나타내도록 정의될 수 있다. 대체적으로, 타일들은 보통, 허용되는 최대 크기, 예를 들어 전체 프로세서 능력을 사용하기 위해 N × N을 점유할 수 있다. 그러나, 도 4의 하단 우측에 도시된 예에서, 일단 타일들이 더 큰 매트릭스 구조물(50)의 경계에 가까워지면, 타일은 더 큰 매트릭스(50)의 에지와 부분적으로 중첩될 수 있고, 더 큰 매트릭스 구조물(50) 외부에 놓인 부분(49)은 프로세싱될 것이 요구되지 않을 수 있다. 따라서, 수평 및 수직 크기 파라미터들(46, 48)은 CPU(4)의 타일 저장 영역(30) 내에 로딩된 데이터의 부분을 제한하기 위해(또는 매트릭스 프로세싱 명령에서 프로세싱되는 부분을 제한하기 위해) 사용될 수 있다. 예를 들어, 수평 크기 및 수직 크기는 행 또는 열 카운트로서, 또는 1의 비트들이 매트릭스의 유효 요소들을 나타내고 0의 비트들이 무효 요소들을 나타내거나 또는 그 역이 성립하는 비트맵인 마스크로서 인코딩될 수 있다.
도 5는 CPU(4) 내의 레지스터들(16)의 서브세트의 일례를 도시한다. 이것이 제공될 수 있는 모든 레지스터들을 보여주는 것은 아니라는 것이 이해될 것이다. 레지스터들(16)은 피연산자들의 일반적인 저장 및 프로세싱 회로부(14)에 의해 프로세싱된 명령들의 결과들을 위해 사용되는 범용 레지스터(general purpose register, GPR)들(60)의 세트를 포함한다. 소정 개수, 예컨대 32 또는 64개의 범용 레지스터들이 제공될 수 있다. 예를 들어, 정수 산술 명령들은 그들의 피연산자들을 위한 범용 레지스터들을 참조할 수 있고, 그들의 결과들을 범용 레지스터들에 다시 기록할 수 있다.
CPU는 또한, 도 3에서와 같이 다수의 입력 및 출력 데이터 구조들 A0 내지 C3을 보유하기 위한 저장 영역들(30)을 제공하는 데이터 구조 저장소(31)를 가질 수 있다. 이러한 데이터 구조 저장소(31)는, 예를 들어, 아키텍처-식별 레지스터들의 세트, 비-아키텍처 식별 레지스터들의 세트 또는 캐시(18)의 일부일 수 있다.
CPU의 레지스터들(16)은 또한, 데이터 구조 저장소(31) 내의 데이터 구조들에 관한 정보를 제공하는 다수의 레지스터들을 포함한다. 각각의 데이터 구조는 데이터 구조 식별자와 연관될 수 있으며, 예를 들어, 표시들 A0, A1, B0, B1 및 C0 내지 C3은 각자의 데이터 구조 식별자들에 대응할 수 있다(A, B, C 표기는, 본 명세서에서의 이해를 위해, 제1/제2 입력 및 출력 식별자들을 각각 구별하기 위해 제공되고, 식별자들에 내재되지만 명시적으로는 인코딩되지 않을 수 있음이 이해될 것이다). 따라서, 레지스터들은, 대응하는 데이터 구조가 메모리에 저장되는 어드레스들을 식별하는 데 사용될 수 있는 어드레스-표시 메타데이터를 보유하기 위해 지정된 데이터 구조 메타데이터 레지스터들(62)의 세트를 포함할 수 있다. 데이터 구조 메타데이터 레지스터(62)는 GPR들(60)로부터 분리된 레지스터들의 전용 세트일 수 있거나, 또는 도 5에서 점선으로 도시된 바와 같이 GPR들의 지정된 서브세트일 수 있다. 이들 대안적인 옵션들은 하기의 도 8 및 도 9와 관련하여 더 상세히 논의될 것이다.
데이터 구조 메타데이터 레지스터들(62)은 하나의 데이터 구조(타일)에 각각 대응하는 레지스터들의 세트들로 분할될 수 있다. 레지스터들의 주어진 세트에 대해, 이것은 단일 레지스터 또는 2개 이상의 레지스터들을 포함할 수 있다. 일례에서, 주어진 데이터 구조에 대해 기록된 메타데이터의 세트는 도 4에 대해 상기에서 논의된 파라미터들(42, 44, 46, 48)을 포함할 수 있다. 대안적으로, 데이터 구조 메타데이터는, 예컨대 (데이터 구조 메타데이터 레지스터들(62)이 GPR들(60)로부터 분리된 구현예에서) 이들 파라미터들을 보유하는 GPR들(60)의 세트를 식별함으로써 또는 이들 파라미터들을 보유하는 레지스터들을 특정하는 명령의 프로그램 카운터 어드레스를 식별함으로써 다른 방식으로 기록될 수 있다. 매트릭스들 이외의 데이터 구조의 유형들에 대해, 어드레스 파라미터들의 상이한 세트가 메타데이터로서 제공될 수 있다는 것이 이해될 것이다.
선택적으로, 레지스터(16)는 또한, 데이터 구조들에 대한 정보를 제공하는 추가적인 레지스터들, 예컨대 주어진 데이터 구조 식별자에 대해, 대응하는 데이터 구조가 데이터 구조 저장소(31)에서 이용가능한지 또는 메모리로부터 로딩될 필요가 있을 것인지를 나타내는 데이터 구조 이용가능성 레지스터들(64)을 포함할 수 있다. 또한, 레지스터들은 데이터 구조 오손 표시자 레지스터들(66)을 포함할 수 있으며, 이는 주어진 데이터 구조 식별자에 대해, 데이터 구조 저장소(31)에 저장된 대응하는 데이터 구조가 클린인지(메모리에 저장된 대응하는 데이터 구조와 일치함) 또는 오손인지(메모리에 저장된 기초 데이터 구조와는 상이함)를 나타낸다. 이들 추가적인 레지스터들(64, 66) 둘 모두는 선택적이며, 일부 경우들에 있어서, 그들을 데이터 구조 메타데이터 레지스터들(62)과 별개로서 제공하는 것이 아니라, 레지스터들(64, 66) 내의 정보는, 그 대신에, 메타데이터 레지스터들의 관련 세트 자체 내에 인코딩될 수 있다.
콘텍스트 저장 동작들을 가속하는 것을 돕기 위해, 아키텍처 레벨에서, 주어진 데이터 구조 식별자가 클린 데이터 구조에 대응하는지 또는 오손 데이터 구조에 대응하는지를 소프트웨어가 결정할 수 있게 하는 특징부를 제공하는 것이 유용할 수 있다. 도 6에 도시된 바와 같이, 일부 경우들에 있어서 데이터 구조 오손 표시자 레지스터들(66)을 불필요하게 만들 수 있는 하나의 접근법은, 출력 데이터 구조들 C0 내지 C3을 위해 사용되는 출력 데이터 구조 식별자 공간(72)에서와 비교하여 별개의 입력 데이터 구조 식별자 공간(70) 내의 식별자들로 입력 데이터 구조들 A0, A1, B0, B1을 정의하는 것일 수 있다. 예를 들어, 식별자들(70)의 하나의 세트가 입력 데이터 구조들을 위해 사용될 수 있고, 식별자들(72)의 다른 세트가 출력 데이터 구조들을 위해 사용될 수 있다. 도 6의 예에서, 매트릭스 곱셈 동작에 대한 "A" 및 "B" 입력들은 별도의 입력 데이터 구조 식별자 공간들(70-A, 70-B)에서 정의되고, 이는 하드웨어에서 필요한 타일 판독/기록 포트들의 개수를 감소시키는 것을 도울 수 있다. 그러나, 다른 접근법은 모든 입력 데이터 구조들에 공통 입력 데이터 구조 식별자 공간 내의 식별자들을 할당하는 것일 수 있다.
따라서, 식별자들이 별개의 식별자 공간들로부터 정의될 때, 이는 각자의 식별자 공간들 내의 대응하는 데이터 구조들이 동일한 식별자를 공유할 수 없음(또는, 식별자를 포함하는 데 사용되는 필드와 같은 명령 인코딩의 다른 태양들로부터, 각자의 식별자 공간들(70-A, 70-B, 72) 중 어느 것이 참조되고 있는지가 내재적임)을 의미한다. 입력 및 출력 데이터 구조들을 위해 사용되는 식별자 공간들을 분리함으로써, 이것은, 임의의 입력 데이터 구조 식별자들이 클린 데이터 구조들에 관한 것이라고 상정될 수 있음을 의미하는데, 그 이유는 입력 데이터 구조 식별자 공간(70)으로부터 입력 데이터 구조 식별자와 연관된 영역에 업데이트된 값들을 갖는 출력 데이터 구조를 기록하는 것이 가능하지 않기 때문이다. 이것은, 입력 데이터 구조 식별자 공간(70) 내의 입력 데이터 구조 식별자들과 연관된 데이터 구조들 모두가 항상 클린일 것이라고 보장될 수 있기 때문에 콘텍스트 저장을 수행하는 소프트웨어 또는 회로 요소들에 유용할 수 있고, 따라서, 이것은 데이터 구조 저장소(31) 내의 대응하는 데이터 구조들이 단순히 메모리 내의 동일한 데이터의 복사본들일 것임을 의미하고, 따라서, 이것은 콘텍스트 스위치 시에 메모리에 다시 저장될 필요가 없다. 대신에, 그것은 메모리에서 관련 데이터가 위치되는 곳에 대한 정보를 제공하는 데이터 구조 메타데이터 레지스터(62)만을 저장하기에 충분할 수 있는데, 그 이유는 이것이, 이후에 프로세싱을 재개할 필요가 있을 때 콘텍스트 복원의 소프트웨어가 메모리로부터 관련 데이터 구조에 다시 로딩하기에 충분할 수 있기 때문이다.
선택적으로, 도 6의 점선들로 도시된 바와 같이, 하나 이상의 데이터 구조 오손 레지스터들(66)이 제공되어, 각자의 출력 데이터 구조 식별자들과 연관된 데이터 구조들이 클린인지 또는 오손인지를 나타내는 오손 표시자들을 저장할 수 있다. 이것은, 콘텍스트 저장 절차들이, 콘텍스트 저장을 추가로 가속시키기 위해, 메모리에 대한 임의의 클린 출력 데이터 구조들의 저장을 생략하기로 결정하게 할 수 있다.
도 7은 전체 데이터 구조의 세분도에서 프로세싱 동작들을 수행하기 위한 데이터 구조 프로세싱 명령들(80)을 포함하는 명령들의 시퀀스를 프로세싱하는 제1 예를 도시한다. 이러한 예에서, 데이터 구조들은 상기에서 논의된 바와 같이 매트릭스의 타일들이고, 데이터 프로세싱 명령들(80)은, 출력 데이터 구조 식별자 Ci 및 2개의 입력 데이터 구조들 Aj 및 Bk를 특정하고 프로세싱 회로부(14)를 제어하여 결과 Ci'= Ci + Aj*Bk를 생성하는 매트릭스 곱셈 및 누산 명령들이다. 이러한 예에서, 상기에서 논의된 바와 같은 데이터 구조 저장소(31)에 제공된 저장 영역들의 개수를 고려하면, i는 0 내지 3의 임의의 값일 수 있고, j 및 k는 0 또는 1 중 어느 하나일 수 있지만, 다른 예들에서, 추가적인 저장소가 있는 경우에, 식별자들은 필요하다면 더 큰 값들을 가질 수 있다. 이러한 예에서, A, B, C 표시들은 내재적인데, 이는 그들이 명령 인코딩 내의 피연산자 식별자의 위치로부터 상정될 수 있기 때문이다.
도 7의 예에서, 데이터 구조 메타데이터 레지스터들(62)은 범용 레지스터들(60)의 고정된 서브세트이다. 각각의 입력 데이터 구조 식별자에 대해, GPR들(60)의 대응하는 서브세트는 그 데이터 구조 식별자에 대한 메타데이터 레지스터(62)를 표현하는 것으로서 할당된다. 예를 들어, 레지스터들 X0 내지 X3은 입력 데이터 구조 A0에 대한 메타데이터 레지스터들의 세트를 표현할 수 있고, 유사하게, 레지스터들 X4 내지 X7, X8 내지 X11 및 X12 내지 X15는 입력 데이터 구조들 A1, B0, B1에 대한 메타데이터를 제공할 수 있다(4개의 레지스터들을 사용하여 메타데이터를 제공하는 것은 일례임이 이해될 것이다 - 다른 예들은 더 적은 레지스터들 내에 메타데이터를 압축할 수 있음). 메타데이터 레지스터들(62)의 각각의 세트는 하나 이상의 레지스터들을 포함할 수 있고, 소프트웨어가, 대응하는 데이터 구조에 대응하는 어드레스들의 세트, 예를 들어 상기에서 논의된 바와 같은 베이스 어드레스(42), 스트라이드(44), 및 수평 및 수직 크기 파라미터들(46, 48)을 결정하게 하기 위한 정보를 제공할 수 있다. 출력 데이터 구조들에 대응하는 메타데이터 레지스터들을 제공하는 것이 필수적인 것은 아니지만, 이것이 또한 제공될 수 있다.
도 7에 도시된 바와 같이, 명령 디코더(12)는, 입력 데이터 구조 식별자를 특정하고 프로세싱 회로부(14)를 제어하여, 특정 입력 데이터 구조 식별자와 연관된 데이터 구조 저장소(31)의 영역에, 특정된 입력 데이터 구조 레지스터와 연관된 GPR들의 대응하는 고정된 서브세트로부터 도출되는 어드레스들의 세트로부터의 데이터 구조를 로딩하는 데이터 구조 로딩 명령(82)을 지원할 수 있다. 예를 들어, 도 7에 도시된 제1 로딩 명령에 대해, 입력 데이터 구조 식별자는 A0이고, 따라서, 그것은 메모리 내의 대응하는 데이터 구조의 어드레스들을 식별하기 위한 어드레스 정보가, 입력 데이터 구조 A0에 대한 어드레스 정보를 보유하는 것으로 지정되는 GPR들 X0 내지 X3의 고정된 서브세트로부터 취해져야 한다는 것을 내재할 수 있다. 명령 시퀀스는 각자의 입력 데이터 구조들 A0, A1, B0, B1을, GPR들의 각자의 서브세트들 내의 정보에 기초하여 로딩하기 위한 여러 개의 로딩 명령들을 포함할 수 있다. 선택적으로, 누산 동작들을 위해 사용될 출력 데이터 구조들의 이전 값이 데이터 구조 저장소(31) 내에 이미 보유되어 있지 않은 경우에, 출력 데이터 구조들에 로딩하기 위한 추가 로딩들이 또한 있을 수 있다. 출력 데이터 구조들에 대한 어떠한 영구적으로 배정된 메타데이터 레지스터들도 없는 경우, 이들 출력 데이터 구조 로딩 명령들은 대응하는 데이터 구조들에 대한 어드레스 정보를 정의하는 범용 레지스터들을 명시적으로 참조할 필요가 있을 수 있다. 대안적으로, 출력 데이터 구조들에 대한 그러한 로딩 명령들은 필요하지 않을 수 있는데, 그 이유는 단순히, 데이터 구조 저장소(31) 내의 출력 데이터 구조들 C0 내지 C3 중 하나의 출력 데이터 구조의 콘텐츠들이 항상 관련 값을 포함하고, 이어서, 출력 데이터 구조들을 0으로 초기화함으로써, 후속 명령들이 출력 데이터 구조들 내에 간단히 누산될 수 있음이 상정될 수 있기 때문이다. 따라서, C0 내지 C3의 로딩들은 선택적이다.
필요한 입력들 중 임의의 것을 로딩했다면, 일련의 매트릭스 곱셈 및 누산(matrix multiply and accumulate, MMLA) 동작들은 각자의 출력들 C0 내지 C3을 계산한다. 4개의 입력들 A0 내지 B1이 4회의 곱셈 누산 동작들 사이에 공유됨에 따라, 이러한 예에서 곱셈 누산 동작당 1회의 로딩이 어떻게 있는지 주목해야 한다. 각자의 로딩 및 곱셈 누산 명령들(82, 80)은 다수회 반복될 수 있고, 어드레스 파라미터들을 변화시켜 전체 매트릭스 구조물(50)의 다른 타일들을 가리키도록 메타데이터 레지스터들 x0 내지 x15의 관련 세트를 업데이트하는 범용 레지스터 이동 또는 산술 또는 로딩 명령들과 산재될 수 있다. 대안적으로, 매트릭스 로딩 명령들(82)은, 메타데이터 레지스터들(62)에 의해 가리켜지는 현재 어드레스들에서 메모리로부터 데이터 구조를 로딩하는 것에 더하여, 프로세싱 회로부가 또한, 예를 들어 베이스 어드레스를 증분시킴으로써, 다음 타일을 가리키도록 메타데이터 레지스터들을 내재적으로 업데이트하도록 정의될 수 있다. 일부 예들에서, 예컨대 수평/수직 크기 정보(46, 48)에 의해 나타내진 무효 요소들을 마스킹함으로써, 어드레스 메타데이터의 대응하는 세트에 기초하여 매트릭스 곱셈이 수정될 수 있다. 결국, 일단 더 이상 수행될 매트릭스 곱셈 및 누산 동작들이 없다면, 매트릭스 곱셈 명령들(80)의 최신 세트의 결과들은, 그들 데이터 구조들이 메타데이터 레지스터들에서 나타내지는 메타데이터와 유사한 방식으로 저장되어야 하는 어드레스들을 식별하기 위해 범용 레지스터들을 사용할 수 있는 데이터 구조 저장 명령들(84)을 사용하여 메모리에 다시 저장될 수 있다.
주어진 데이터 구조의 프로세싱이 진행 중인 동안, 그 데이터 구조에 대한 어드레스 메타데이터를 정의하는 메타데이터 레지스터들(62)로서의 범용 레지스터들(60)의 서브세트의 사용은, 데이터 구조가 여전히 요구되는 동안에, 범용 레지스터들(60)의 그 서브세트에 다른 값들을 기록하는 것을 회피하기 위해 소프트웨어가 요구됨을 의미한다. 이것은, 인터럽트가 발생하고 프로세싱이 상이한 실행 콘텍스트로 스위칭하는 경우, 데이터 구조 저장소(31) 내에 보유된 주어진 데이터 구조에 대한 어드레스-표시 메타데이터가 여전히 존재할 것이고 범용 레지스터들(60)의 콘텍스트 저장의 일부로서 메모리에 저장될 수 있음을 보장하고, 이것은, 콘텍스트 스위칭 레이턴시를 감소시키는 대응하는 데이터 구조 자체를 저장하는 것이 필요하지 않음을 의미한다.
도 8은 도 7의 시퀀스에 대한 코드 시퀀스의 유사한 예를 도시하지만, 여기서 데이터 구조들에 대한 어드레스-표시 메타데이터의 각자의 세트들을 제공하는 데이터 구조 메타데이터 레지스터들(62)은 범용 레지스터들(60)과는 별개이다. 데이터 구조 프로세싱 명령들(80) 및 저장 명령들(84)은 도 7 에서와 동일한 역할을 가질 수 있다.
그러나, 로딩 명령들(82)에 대해, 이때 어드레스 정보를 제공하는 어떠한 내재적으로 식별된 범용 레지스터들도 없기 때문에, 로딩 명령은 각자의 어드레스 정보(42, 44, 46, 48)를 제공하는 범용 레지스터들에 대한 명시적 참조들(86)의 세트를 포함할 수 있고, 이어서, 이들 로딩 명령들(82)은 명령 디코더(12)를 트리거하여, 특정된 범용 레지스터들 내의 정보를 통해 식별된 어드레스들의 세트로부터의 데이터 구조를 메모리로부터 로딩하도록 그리고 그 로딩된 데이터 구조를 로딩 명령(82)에 의해 특정된 입력 데이터 구조 식별자 A0 내지 B1과 연관된 데이터 구조 저장소(31)의 관련 영역 내에 저장하도록 프로세싱 회로부(14)를 제어할 수 있다. 데이터 구조를 로딩할 뿐만 아니라, 로딩 명령들은 또한, 프로세싱 회로부를 트리거하여, 특정된 입력 데이터 구조 식별자에 대한 하나 이상의 데이터 구조 메타데이터 레지스터들(62)의 관련 세트에 어드레스-표시 메타데이터를 기록할 수 있다. 어드레스-표시 메타데이터는 다수의 형태들을 취할 수 있다. 그것은 간단히, 상기에서 논의된 바와 같이 베이스 어드레스(42), 스트라이드(44) 및 수평 및 수직 크기(46, 48)를 명시적으로 인코딩하는 범용 레지스터들의 액세스된 세트로부터의 값들일 수 있다. 대안적으로, 메타데이터는 어드레스 정보를 포함하는 레지스터들을 식별하는 레지스터 특정자들, 예컨대 도 8의 예에서의 제1 로딩에 대한 Xa 내지 Xd일 수 있다. 이러한 접근법이 사용되는 경우, 소프트웨어는 그들 레지스터들이 어드레스 정보를 계속 보유하고, 데이터 구조 저장소 내의 데이터 구조에 의존하는 최종 명령과 로딩 명령의 실행 사이에서 업데이트되지 않음을 보장할 필요가 있을 것이다. 그러나, 이러한 접근법은 어드레스 정보를 특정하는 특정 범용 레지스터들의 변형을 허용함으로써 도 7의 예에 비해 추가된 유연성을 제공할 수 있다. 대안적으로, 다시, 데이터 구조가 여전히 필요한 동안 참조 레지스터들 Xa 내지 Xd 등의 콘텐츠들이 변경되지 않음이 보장된다면, 어드레스-표시 메타데이터는 관련 로딩 명령 자체의 어드레스를 나타내는 프로그램 카운터 어드레스(88)의 표시일 수 있다. 어드레스 정보(42, 44, 46, 48) 자체가 데이터 구조 메타데이터 레지스터(62)에 기록되는 예에서, 그 정보를 특정하기 위해 사용되는 소스 레지스터들(86)에서 임의의 후속 업데이트들을 제한할 필요가 없고, 이러한 경우에 있어서, 소프트웨어는 대응하는 정보가 데이터 구조 메타데이터 레지스터(62)에 유지됨에 따라 어드레스 정보(42 내지 48)를 정의하기 위해 사용되는 GRP들(60)의 콘텐츠들을 변경하도록 허용될 수 있다.
달리, 도 8의 예는 도 7과 유사하고, 다시, 어드레스-표시 메타데이터가 발견될 수 있는 곳을 추적하거나 어드레스-표시 메타데이터를 직접 나타내는 정보를 기록하여, 콘텍스트 복원 시의 소프트웨어가, 대응하는 데이터 구조가 메모리 내의 어디에 있는지를 결정할 수 있도록 함으로써, 이것은, 콘텍스트 저장 알고리즘의 일부로서 클린 데이터 구조들을 저장할 필요가 없음을 의미한다.
따라서, 도 9는 콘텍스트 저장을 제어하는 방법을 도시한 흐름도이다. 이것은 CPU(4) 내의 하드웨어에 제공된 콘텍스트 저장 회로부(20)에 의해 수행될 수 있거나, 또는 운영 체제, 하이퍼바이저 또는 다른 감시 프로세스에 의해 소프트웨어로 행해질 수 있다. 상태 저장 방법은 상태 저장 트리거 이벤트, 예컨대 하드웨어 또는 소프트웨어 트리거된 예외 또는 인터럽트에 응답하여 수행된다. 단계(100)에서, 콘텍스트 상태 저장은 메모리 내의 데이터 구조에 대한 인출 스레드의 일반적인 콘텍스트의 저장을 포함한다. 예를 들어, 일반적인 콘텍스트는 현재 실행 지점을 표현하는 명령 어드레스, 범용 레지스터들(60)의 콘텐츠들, 및 전술된 데이터 구조들의 프로세싱과 직접 관련되지 않을 수 있는, 유지될 필요가 있는 임의의 다른 프로세서 상태를 나타내는 프로그램 카운터를 포함할 수 있다. 이러한 상태의 저장은, 그 감시 프로세스의 어드레스 공간에서, 예컨대 운영 체제 또는 하이퍼바이저의 어드레스 공간에서, 감시 프로세스에 의해 유지되는 데이터 구조에 대해 수행될 수 있다. 예를 들어, 주어진 스레드에 대해 저장된 상태의 블록을 저장하기 위해 스택 데이터 구조가 사용될 수 있다.
단계(102)에서, 데이터 구조 저장소(31) 내의 임의의 클린 데이터 구조들에 대해, 상태 저장은 메타데이터 레지스터들(62)의 대응하는 세트를 저장하지만, 데이터 구조 저장소(31)에 저장되는 데이터 구조 자체는 저장하지 않는다. 이들 클린 데이터 구조들은 임의의 입력 데이터 구조들뿐만 아니라, 선택적으로, 오손 표시자(66)가 출력 데이터 구조가 클린임을 나타내는 임의의 출력 데이터 구조들을 포함할 수 있다. 데이터 구조 메타데이터 레지스터들(60)이 GPR들(60)의 서브세트인 경우, 단계(102)는 GPR들(60)이 메모리에 저장되었을 때 단계(100)의 일부로서 이미 내재적으로 수행되었을 수 있음에 주목해야 한다. 그러나, 데이터 구조 메타데이터 레지스터(62)가 GPR(60)과는 별개인 예들에서, 단계(102)가 수행될 수 있다.
단계(104)에서, 임의의 오손 데이터 구조들 또는 클린인지 오손인지가 알려지지 않은 데이터 구조들에 대해, 데이터 구조 자체 및 메타데이터 레지스터들(62)의 대응하는 세트 둘 모두가 저장될 수 있다.
따라서, 메모리에서 데이터 구조가 획득된 곳에 어드레스 정보를 계속 보유하는 일부 메타데이터 레지스터(62)가 있음을 보장함으로써, 이것은 단계(104)에서 전체 데이터 구조의 저장이 그들 오손 구조들에만 제한되게 할 수 있고, 클린 데이터 구조들은 저장될 필요가 없는데, 그 이유는 그들이 단지 메모리 내의 데이터의 복사본이기 때문이다.
도 10은 사용될 수 있는 다른 예를 도시한다. 이러한 예에서, 데이터 구조 프로세싱 동작 자체를 수행하는 것에 더하여, 데이터 구조 프로세싱 명령들(80)은 또한, 입력 또는 출력 값들이 데이터 구조 저장소(31)에서 이미 이용가능하지 않은 경우, 그 명령에 필요한 임의의 입력 또는 출력 데이터 구조들의 로딩을 트리거할 수 있다. 이것은, 전술된 로딩 명령들(82)이, 대응하는 데이터 구조를 메모리로부터 로딩하도록 요구되지 않지만 어드레스 정보의 세트를 특정된 데이터 구조 식별자 A0 내지 C3에 배정하는 데 사용될 수 있는, 로딩 준비 명령들(120) 및 저장 준비 명령들(122)로 대체될 수 있음을 의미한다. 이들 명령들(120, 122)은, 상기에서 논의된 유형의 어드레스 정보(42 내지 48)를 정의하는 범용 레지스터들(124)의 세트를 특정할 수 있고, 명령 디코더(12)가, 특정된 데이터 구조 식별자 A0 내지 C3과 연관된 메타데이터 레지스터(62)의 세트에 어드레스 정보를 기록하도록 프로세싱 회로부(14)를 제어하게 할 수 있다. 로딩 준비 명령들(120)은 어드레스 정보를 입력 데이터 구조 식별자들 A0, A1, B0, B1에 배정하는 데 사용될 수 있고, 저장 준비 명령들(122)은 어드레스 정보를 출력 데이터 구조 식별자들 C0 내지 C3에 배정할 수 있다. 선택적으로, 로딩 준비 명령들은 또한, 그것이 이미 이용가능하지 않은 경우에 데이터 구조를 데이터 구조 저장소(31)로 사전-로딩할 수 있지만, 이것은 아키텍처로 요구되는 특징부가 아닐 수 있다.
따라서, 데이터 구조 프로세싱 명령들(80)에 도달될 때, 프로세싱 회로부는, 예를 들어, 데이터 구조 이용가능성 레지스터(64) 내의 이용가능성 정보에 기초하여 임의의 입력들의 이용가능성을 검사할 수 있고, 데이터 구조 저장소(31)에서 이미 이용가능하지 않은 명령에 필요한 임의의 입력들을 로딩할 수 있다. 또한, 프로세싱 회로부는 출력 데이터 구조를 생성하기 위해 입력 데이터 구조들에 대해 관련 데이터 프로세싱 동작을 수행한다.
입력들의 로딩을 또한 요구하도록 명령 세트 아키텍처 내의 MMLA 명령들(80)을 정의함으로써, 이것은, 콘텍스트 복원 기능들이 소정 데이터 구조들을 복원할 필요가 없음을 의미하는데, 그 이유는 데이터 프로세싱 동작들(80) 자체가 필요하다면 임의의 이용불가능한 데이터 구조들에 로딩할 것이기 때문이다. 따라서, 예를 들어 도 10의 예에서 C0 출력을 생성하는 제1 데이터 구조 프로세싱 명령(80) 이후에 인터럽트가 발생하고, 현재 스레드로부터 떨어진 콘텍스트 스위치가 수행되는 경우, 이 지점에서, 임의의 오손 데이터 구조 C0이 메모리에 저장될 수 있고, 메타데이터 레지스터들(62)에 이전에 복사된 어드레스-표시 메타데이터가 또한 상태 저장의 일부로서 저장되지만, 임의의 클린 데이터 구조들 A0 내지 A1, B0 내지 B1, 또는 C1 내지 C3을 저장하는 것은 필수적인 것이 아니다. 후속하여 스레드로 복귀할 때, 콘텍스트 복원이 수행되며, 일단 메타데이터 레지스터들(62)이 복원되었다면, 임의의 다른 데이터 구조들을 레지스터들에 복원하는 것이 필요하지는 않은데, 그 이유는 프로세싱이 재개할 때, 각각의 후속 데이터 구조 프로세싱 명령(80)이 이미 행해지지 않은 경우에 그의 입력들에 로딩할 것이기 때문이다. 이것은 보안성을 개선할 수 있는데, 그 이유는 그것이, 데이터 구조들이 감시 프로세스의 어드레스 공간 내에서 사용되어야 하는 것이 아니라, 그들을 사용하는 스레드의 어드레스 공간 내에서 유지됨을 의미하기 때문이다. 또한, 그것은, 콘텍스트 복원에 뒤이어 스레드의 재개 후에 실행되는 임의의 명령을 위해 후속적으로 필요하지 않은 임의의 데이터 구조에 대한 콘텍스트 복원을 수행하는 것이 필요하지 않음을 의미한다.
아키텍처로 요구되지는 않지만, 로딩 준비 명령들(120)은 선택적으로, 이미 행해지지 않은 경우에, 그들의 대응하는 데이터 구조들을 데이터 구조 저장소(31) 내에 사전로딩할 수 있는데, 이는 로딩을 개시하기 전에 대응하는 데이터 구조 프로세싱 명령(80)까지 하드웨어가 기다린 경우보다 더 빨리 이들 구조물들에 대한 로딩들을 개시함으로써 성능을 개선하는 것을 도울 수 있다. 따라서, 이용가능성 레지스터(64)는, 데이터 구조 프로세싱 명령(80)에 도달될 때 임의의 데이터 구조들을 재로딩하는 것이 필요한지 여부를 하드웨어가 결정할 수 있도록 로딩 준비 명령(120)과 대응하는 데이터 프로세싱 명령 사이에 인터럽트가 존재했는지 여부를 추적하는 데 유용할 수 있다.
도 11은 콘텍스트 상태 복원 프로세스를 보여주는 흐름도이며, 이는, 예를 들어, 프로세싱의 기초 스레드에 대한 콘텍스트 복원을 관리하는 것을 담당하는 소프트웨어에서 운영 체제 또는 하이퍼바이저에 의해 수행될 수 있다. 단계(150)에서, 소프트웨어는 프로그램 카운터 및 범용 레지스터들과 같은 인입 스레드의 일반적인 콘텍스트를 복원한다. 범용 레지스터 복원의 일부로서 이미 행해지지 않은 경우, 단계(152)에서, 콘텍스트 복원 프로세스는 데이터 구조 메타데이터 레지스터들(62)을 복원하여, 후속 명령들이, 이어서, 데이터 구조들이 메모리 내에서 어디로부터 로딩될 필요가 있는지를 식별할 수 있게 한다. 단계(154)에서, 소프트웨어는 임의의 데이터 구조들 자체를 복원할 필요는 없는데, 이는, 이들이 후속 데이터 구조 프로세싱 명령(80)에 의해 요구 시에 로딩될 수 있기 때문이다.
상기에서 논의된 예들은 매트릭스들에 관한 것이고 기술된 데이터 구조 프로세싱 동작들이 매트릭스 곱셈들이지만, 콘텍스트 저장 및 복원 오버헤드들을 감소시키기 위한 유사한 기법들이 다른 데이터 구조 유형들에 적용될 수 있음이 이해될 것이다.
도 12는 사용될 수 있는 시뮬레이터 구현예를 도시한다. 앞서 기술된 실시예들이 관련된 기법들을 지원하는 특정 프로세싱 하드웨어를 동작시키기 위한 장치 및 방법들에 관하여 본 발명을 구현하지만, 컴퓨터 프로그램의 사용을 통해 구현되는, 본 명세서에 기술된 실시예들에 따른 명령 실행 환경을 제공하는 것이 또한 가능하다. 그러한 컴퓨터 프로그램들은 종종, 그들이 하드웨어 아키텍처의 소프트웨어 기반 구현을 제공하는 한, 시뮬레이터들로 지칭된다. 다양한 시뮬레이터 컴퓨터 프로그램들은 에뮬레이터들, 가상 머신들, 모델들, 및 동적 이진 변환기들을 포함하는 이진 변환기들을 포함한다. 전형적으로, 시뮬레이터 구현이, 시뮬레이터 프로그램(710)을 지원하는, 호스트 운영 체제(720)를 선택적으로 실행시키는 호스트 프로세서(730) 상에서 실행될 수 있다. 일부 배열물들에서, 하드웨어와 제공된 명령 실행 환경, 및/또는 동일한 호스트 프로세서 상에 제공되는 다수의 별개의 명령 실행 환경들 사이에 시뮬레이션의 다수의 층들이 있을 수 있다. 이력상, 강력한 프로세서들이 합당한 속도로 실행되는 시뮬레이터 구현들을 제공하기 위해 요구되었지만, 그러한 접근법은 소정 환경들에서, 예컨대 호환성 또는 재사용 이유들로 다른 프로세서에 대해 고유한 코드를 실행하라는 요구가 있을 때 정당화될 수 있다. 예를 들어, 시뮬레이터 구현은 호스트 프로세서 하드웨어에 의해 지원되지 않는 추가적인 기능을 갖는 명령 실행 환경을 제공할 수 있거나, 또는 상이한 하드웨어 아키텍처와 전형적으로 연관된 명령 실행 환경을 제공할 수 있다. 시뮬레이션의 개요는 문헌["Some Efficient Architecture Simulation Techniques", Robert Bedichek, Winter 1990 USENIX Conference, Pages 53 - 63]에서 제공된다.
실시예들이 특정 하드웨어 구성물들 또는 특징부들을 참조하여 앞서 기술된 결과로, 시뮬레이션된 실시예에서, 동등한 기능이 적합한 소프트웨어 구성물들 또는 특징부들에 의해 제공될 수 있다. 예를 들어, 특정 회로부는 시뮬레이션된 실시예에서 컴퓨터 프로그램 로직으로서 구현될 수 있다. 유사하게, 레지스터 또는 캐시와 같은 메모리 하드웨어가, 시뮬레이션된 실시예에서 소프트웨어 데이터 구조로서 구현될 수 있다. 전술된 실시예들에서 참조된 하드웨어 요소들 중 하나 이상이 호스트 하드웨어(예를 들어, 호스트 프로세서(730)) 상에 존재하는 배열들에서, 일부 시뮬레이션된 실시예들은, 적합한 경우, 호스트 하드웨어를 사용할 수 있다.
시뮬레이터 프로그램(710)은 (비일시적 매체일 수 있는) 컴퓨터 판독가능 저장 매체 상에 저장될 수 있으며, 시뮬레이터 프로그램(710)에 의해 모델링되는 하드웨어 아키텍처의 애플리케이션 프로그램 인터페이스와 동일한 프로그램 인터페이스(명령 실행 환경)를 타깃 코드(700)(이는 애플리케이션들, 운영 체제들 및 하이퍼바이저를 포함할 수 있음)에 제공한다. 따라서, 전술된 바와 같은 데이터 구조 프로세싱 명령들을 포함하는, 타깃 코드(700)의 프로그램 명령들은 시뮬레이터 프로그램(710)을 사용하여 명령 실행 환경 내로부터 실행되어, 상기에서 논의된 장치(2)의 하드웨어 특징부를 실제로 갖지 않는 호스트 컴퓨터(730)가 이들 특징부들을 에뮬레이팅할 수 있게 할 수 있다.
시뮬레이터 프로그램(710)은, 타깃 코드(700)의 명령들을 디코딩하고 그들을 호스트 데이터 프로세싱 장치(730)에 의해 지원되는 고유 명령들을 사용하여 정의된 동등한 기능에 맵핑하는 명령 디코딩 프로그램 로직(712)을 포함할 수 있다. 예를 들어, 명령 디코딩 프로그램 로직(712)은, 타깃 코드(700) 내의 타깃 명령의 인코딩된 비트들을 검사하고 특정 명령에서 발견되는 비트들에 따라, 타깃 명령의 아키텍처 기능을 에뮬레이팅하기 위해 고유 명령 세트에서 정의된 명령 시퀀스들을 선택하는 if/then/else 문들을 포함할 수 있다.
또한, 시뮬레이터 프로그램(710)은, 타깃 코드(700)와 연관된 명령 세트 아키텍처에 의해 요구되는 아키텍처 레지스터들을 에뮬레이팅하는, 호스트 데이터 프로세싱 장치(730)의 메모리에 정의된 저장 구조를 관리할 수 있는 레지스터 에뮬레이팅 프로그램 로직(714)을 포함할 수 있다. 예를 들어, 타깃 코드(700)의 타깃 명령들에서 레지스터 참조들을 사용하여 식별된 레지스터 판독/기록 동작들은 호스트 데이터 프로세싱 장치(730)의 메모리 내에서 데이터를 판독/기록하기 위한 메모리 액세스 명령들에 맵핑될 수 있다. 레지스터 에뮬레이팅 프로그램 로직(714)을 사용하여 에뮬레이팅되는 레지스터들은 상기에서 논의된 데이터 구조 메타데이터 레지스터들(62)을 포함할 수 있다.
본 출원에서, "...하도록 구성된"이라는 말은 장치의 요소가 정의된 동작을 수행할 수 있는 구성을 갖는다는 것을 의미하도록 사용된다. 이러한 문맥에서, "구성"은 하드웨어 또는 소프트웨어의 상호접속의 배열 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 프로세서 또는 다른 프로세싱 디바이스가 기능을 수행하도록 프로그래밍될 수 있다. "하도록 구성된"은, 장치 요소가, 정의된 동작을 제공하기 위해 어떤 방식으로든 변경될 필요가 있음을 암시하지 않는다.
본 발명의 예시적인 실시예들이 첨부 도면들을 참조하여 본 명세서에 상세히 설명되었지만, 본 발명은 그러한 정확한 실시예들로 제한되지 않는다는 것 그리고 첨부된 청구범위에 의해 정의되는 바와 같은 본 발명의 범주로부터 벗어나지 않으면서 당업자에 의해 다양한 변경들 및 수정들이 이루어질 수 있다는 것이 이해될 것이다.

Claims (23)

  1. 장치로서,
    명령들을 디코딩하기 위한 명령 디코더; 및
    상기 명령 디코더에 의해 디코딩된 상기 명령들에 응답하여 데이터 프로세싱을 수행하기 위한 프로세싱 회로부를 포함하고,
    적어도 하나의 입력 데이터 구조 식별자 및 출력 데이터 구조 식별자를 특정하는 데이터 구조 프로세싱 명령에 응답하여, 상기 명령 디코더는 상기 프로세싱 회로부를 제어하여, 적어도 하나의 입력 데이터 구조 식별자에 의해 식별되는 상기 적어도 하나의 입력 데이터 구조에 대한 프로세싱 동작을 수행하여 상기 출력 데이터 구조 식별자에 의해 식별되는 출력 데이터 구조를 생성하도록 구성되고;
    상기 적어도 하나의 입력 데이터 구조 및 상기 출력 데이터 구조 각각은 복수의 메모리 어드레스들에 대응하는 데이터의 배열을 포함하고;
    상기 장치는 하나 이상의 데이터 구조 메타데이터 레지스터들의 복수의 세트들을 포함하고, 하나 이상의 데이터 구조 메타데이터 레지스터들의 각각의 세트는 대응하는 데이터 구조 식별자와 연관되고, 상기 대응하는 데이터 구조 식별자에 의해 식별되는 상기 데이터 구조에 대한 상기 복수의 메모리 어드레스들을 식별하기 위해 어드레스-표시 메타데이터를 보유하도록 지정되는, 장치.
  2. 제1항에 있어서, 상기 프로세싱 회로부는, 적어도 데이터 구조 식별자들의 서브세트에 대해, 소프트웨어가, 상기 서브세트의 데이터 구조 식별자들 중 하나의 데이터 구조 식별자에 대응하는 데이터 구조가 클린(clean)인지 오손(dirty)인지를 식별할 수 있게 하는 명령 세트 아키텍처에 따라 동작하도록 구성되는, 장치.
  3. 제1항 또는 제2항에 있어서, 상기 출력 데이터 구조 식별자는 상기 적어도 하나의 입력 데이터 구조 식별자에 대해 별개의 식별자 공간에서 정의되는, 장치.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서, 적어도 하나의 오손 표시자를 보유하기 위한 적어도 하나의 아키텍처 레지스터를 포함하고, 각각의 오손 표시자는 주어진 데이터 구조 식별자에 대응하는 데이터 구조가 클린인지 또는 오손인지를 나타내는, 장치.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서, 콘텍스트 저장 트리거 이벤트에 응답하여, 프로세서 상태의 미리결정된 서브세트를 메모리에 저장하기 위한 콘텍스트 저장 회로부를 포함하고, 상기 프로세서 상태의 미리결정된 서브세트는 클린 데이터 구조에 대응하는 적어도 하나의 데이터 구조 식별자에 대응하는 상기 하나 이상의 데이터 구조 메타데이터 레지스터들의 세트를 포함하지만, 상기 적어도 하나의 데이터 구조 식별자에 대응하는 상기 데이터 구조는 배제하는, 장치.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서, 주어진 데이터 구조 식별자와 연관된 상기 데이터 구조 메타데이터 레지스터들은,
    상기 명령 디코더 및 상기 프로세싱 회로부에 의해 지원되는 비-데이터 구조 프로세싱 명령들에 응답하여 또한 액세스가능한 복수의 범용 레지스터들의 고정된 서브세트; 및
    상기 복수의 범용 레지스터들과는 별개인 데이터 구조 메타데이터 레지스터들의 전용 세트 중 하나를 포함하는, 장치.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서, 상기 데이터 구조 프로세싱 명령에 응답하여, 상기 프로세싱 회로부는, 주어진 입력 데이터 구조 또는 주어진 출력 데이터 구조의 이전 값이 상기 프로세싱 회로부에 이용불가능할 때 상기 주어진 입력 데이터 구조 또는 상기 주어진 출력 데이터 구조의 이전 값을 메모리로부터 로딩하라는 로딩 요청을 생성하도록 구성되는, 장치.
  8. 제7항에 있어서, 상기 프로세싱 회로부는 상기 주어진 입력 데이터 구조가 상기 메모리와는 별개인 데이터 구조 보유 회로부에서 이용가능한지 여부를 검사하기 위한 검사 회로부를 포함하는, 장치.
  9. 제1항 내지 제8항 중 어느 한 항에 있어서, 메모리와는 별개인 데이터 구조 보유 회로부를 포함하고,
    상기 데이터 구조 프로세싱 명령에 응답하여, 상기 명령 디코더는 상기 프로세싱 회로부를 제어하여, 상기 데이터 구조 보유 회로부로부터 상기 적어도 하나의 입력 데이터 구조를 판독하도록 그리고 상기 출력 데이터 구조를 상기 데이터 구조 보유 회로부에 기록하거나 업데이트하도록 구성되는, 장치.
  10. 제9항에 있어서, 주어진 데이터 구조가 상기 데이터 구조 보유 회로부 내에 보유되어 있을 때, 상기 프로세싱 회로부는 상기 데이터가 상기 데이터 구조 보유 회로부에 기록되었던 시퀀스와는 상이한 시퀀스로 상기 주어진 데이터 구조로부터 데이터를 판독할 수 있는, 장치.
  11. 제9항 또는 제10항에 있어서, 상기 데이터 구조 보유 회로부는,
    아키텍처-어드레싱가능 레지스터들;
    비-아키텍처-어드레싱가능 레지스터들;
    스크래치패드 메모리; 및
    캐시 중 적어도 하나를 포함하는, 장치.
  12. 제9항 내지 제11항 중 어느 한 항에 있어서, 타깃 입력 데이터 구조 식별자 또는 타깃 출력 데이터 구조 식별자를 특정하는 데이터 구조 로딩 명령에 응답하여, 상기 명령 디코더는 상기 프로세싱 회로부를 제어하여, 상기 타깃 입력 데이터 구조 식별자 또는 상기 타깃 출력 데이터 구조 식별자에 대응하는 상기 하나 이상의 데이터 구조 메타데이터 레지스터들의 세트에 보유된 상기 어드레스-표시 메타데이터로부터 도출된 메모리 어드레스들로부터 로딩된 데이터 구조를 상기 데이터 구조 보유 회로부에 기록하도록 구성되는, 장치.
  13. 제9항 내지 제12항 중 어느 한 항에 있어서, 타깃 입력 데이터 구조 식별자 또는 타깃 출력 데이터 구조 식별자 및 하나 이상의 범용 레지스터들을 특정하는 데이터 구조 로딩 명령에 응답하여, 상기 명령 디코더는 상기 프로세싱 회로부를 제어하여,
    상기 하나 이상의 범용 레지스터들에 보유된 타깃 어드레스-식별 정보로부터 도출된 메모리 어드레스들로부터 로딩된 데이터 구조를 상기 데이터 구조 보유 회로부에 기록하도록, 그리고
    상기 타깃 어드레스-식별 정보 또는 상기 데이터 구조 로딩 명령의 속성에 기초하여 상기 타깃 입력 데이터 구조 식별자 또는 상기 타깃 출력 데이터 구조 식별자에 대응하는 상기 하나 이상의 데이터 구조 메타데이터 레지스터들의 세트를 업데이트하도록 구성되는, 장치.
  14. 제1항 내지 제13항 중 어느 한 항에 있어서, 타깃 입력 데이터 구조 식별자를 특정하는 로딩 준비(prepare-for-load) 명령에 응답하여, 상기 명령 디코더는 상기 프로세싱 회로부를 제어하여,
    상기 로딩 준비 명령에 의해 내재적으로 또는 명시적으로 특정된 타깃 어드레스-식별 정보; 및
    상기 로딩 준비 명령의 속성 중 하나에 기초하여 상기 타깃 입력 데이터 구조 식별자에 대응하는 상기 하나 이상의 데이터 구조 메타데이터 레지스터들의 세트를 업데이트하도록 구성되는, 장치.
  15. 제14항에 있어서, 상기 로딩 준비 명령에 응답하여, 상기 프로세싱 회로부는 상기 타깃 입력 데이터 구조 식별자와 연관된 데이터 구조가 상기 타깃 어드레스-식별 정보에 기초하여 결정된 메모리 어드레스들로부터 데이터 구조 보유 회로부로 이송될 것을 요청하라는 로딩 요청을 생성하도록 구성되는, 장치.
  16. 제1항 내지 제15항 중 어느 한 항에 있어서, 타깃 출력 데이터 구조 식별자를 특정하는 저장 준비(prepare-for-store) 명령에 응답하여, 상기 명령 디코더는 상기 프로세싱 회로부를 제어하여,
    상기 저장 준비 명령에 의해 내재적으로 또는 명시적으로 특정된 타깃 어드레스-식별 정보; 및
    상기 저장 준비 명령의 속성 중 하나에 기초하여 상기 타깃 출력 데이터 구조 식별자에 대응하는 상기 하나 이상의 데이터 구조 메타데이터 레지스터들의 세트를 업데이트하도록 구성되는, 장치.
  17. 제1항 내지 제16항 중 어느 한 항에 있어서, 상기 복수의 메모리 어드레스들은 메모리 어드레스들의 복수의 불연속 블록들을 포함하는, 장치.
  18. 제17항에 있어서, 상기 어드레스-표시 메타데이터는,
    상기 메모리 어드레스들의 복수의 불연속 블록들 중 적어도 하나의 불연속 블록의 시작 어드레스를 나타내는 시작 어드레스 정보;
    상기 메모리 어드레스들의 복수의 불연속 블록들의 시작 어드레스들 사이의 분리를 나타내는 오프셋 정보;
    메모리 어드레스들의 각각의 불연속 블록의 크기를 나타내는 제1 크기 정보;
    상기 메모리 어드레스들의 불연속 블록들 중 얼마나 많은 불연속 블록들이 상기 데이터 구조를 형성하는지를 나타내는 제2 크기 정보;
    상기 데이터 구조의 데이터 요소 크기를 나타내는 요소 크기 정보;
    상기 시작 어드레스 정보, 상기 오프셋 정보, 상기 제1 크기 정보 및 상기 제2 크기 정보 중 적어도 하나를 보유하는 하나 이상의 범용 레지스터들을 식별하는 하나 이상의 레지스터 식별자들; 및
    상기 시작 어드레스 정보, 상기 오프셋 정보, 상기 제1 크기 정보 및 상기 제2 크기 정보 중 적어도 하나를 보유하는 레지스터들을 특정하는 명령의 어드레스를 식별하는 명령 어드레스 표시 중 적어도 하나를 포함하는, 장치.
  19. 제1항 내지 제18항 중 어느 한 항에 있어서, 상기 데이터 구조 프로세싱 명령은 2개의 입력 데이터 구조 식별자들을 특정하는 매트릭스 곱셈 명령을 포함하고, 상기 프로세싱 동작은 상기 출력 데이터 구조를 생성하기 위해 상기 2개의 입력 데이터 구조 식별자들에 의해 식별된 2개의 입력 데이터 구조들에 대해 수행되는 매트릭스 곱셈 동작을 포함하는, 장치.
  20. 제1항 내지 제19항 중 어느 한 항에 있어서, 상기 출력 데이터 구조는 적어도 64 바이트의 크기를 갖는, 장치.
  21. 제1항 내지 제20항 중 어느 한 항에 있어서, 상기 데이터 구조 프로세싱 명령에 응답하여, 상기 프로세싱 회로부는 상기 적어도 하나의 입력 데이터 구조 식별자 또는 상기 출력 데이터 구조 식별자에 대응하는 하나 이상의 데이터 구조 메타데이터 레지스터들의 적어도 하나의 세트 내에 보유된 상기 어드레스-표시 메타데이터에 따라 상기 적어도 하나의 입력 데이터 구조에 대해 수행되는 상기 프로세싱 동작을 적응시키도록 구성되는, 장치.
  22. 데이터 프로세싱 방법으로서,
    적어도 하나의 입력 데이터 구조 식별자 및 출력 데이터 구조 식별자를 특정하는 데이터 구조 프로세싱 명령의 디코딩에 응답하여, 프로세싱 회로부를 제어하여, 상기 적어도 하나의 입력 데이터 구조 식별자에 의해 식별되는 적어도 하나의 입력 데이터 구조에 대한 프로세싱 동작을 수행하여 상기 출력 데이터 구조 식별자에 의해 식별되는 출력 데이터 구조를 생성하는 단계 - 상기 적어도 하나의 입력 데이터 구조 및 상기 출력 데이터 구조 각각은 복수의 메모리 어드레스들에 대응하는 데이터의 배열을 포함함 -; 및
    하나 이상의 데이터 구조 메타데이터 레지스터들의 복수의 세트들에 어드레스-표시 메타데이터를 보유하는 단계 - 하나 이상의 데이터 구조 메타데이터 레지스터들의 각각의 세트는 대응하는 데이터 구조 식별자와 연관되고, 상기 대응하는 데이터 구조 식별자에 의해 식별되는 상기 데이터 구조에 대한 상기 복수의 메모리 어드레스들을 식별하기 위해 어드레스-표시 메타데이터를 보유하도록 지정됨 - 를 포함하는, 방법.
  23. 호스트 데이터 프로세싱 장치를 제어하여, 타깃 데이터 프로세싱 장치에 의한 타깃 프로그램의 실행을 시뮬레이션하기 위한 컴퓨터 프로그램을 저장하는 비일시적 저장 매체로서, 상기 컴퓨터 프로그램은,
    상기 타깃 프로그램의 명령들을 디코딩하기 위한 명령 디코딩 프로그램 로직 - 적어도 하나의 입력 데이터 구조 식별자 및 출력 데이터 구조 식별자를 특정하는 데이터 구조 프로세싱 명령에 응답하여, 상기 명령 디코딩 프로그램 로직은 상기 호스트 데이터 프로세싱 장치를 제어하여, 상기 적어도 하나의 입력 데이터 구조 식별자에 의해 식별된 적어도 하나의 입력 데이터 구조에 대해 프로세싱 동작을 수행하여 상기 출력 데이터 구조 식별자에 의해 식별된 출력 데이터 구조를 생성하도록 구성되고, 상기 적어도 하나의 입력 데이터 구조 및 상기 출력 데이터 구조 각각은 복수의 메모리 어드레스들에 대응하는 데이터의 배열을 포함함 -; 및
    상기 타깃 데이터 프로세싱 장치의 레지스터들을 에뮬레이팅하기 위해 저장 구조물에 대한 액세스를 제어하기 위한 레지스터 에뮬레이팅 프로그램 로직을 포함하고, 상기 레지스터들은 하나 이상의 데이터 구조 메타데이터 레지스터들의 복수의 세트들을 포함하고, 하나 이상의 데이터 구조 메타데이터 레지스터들의 각각의 세트는 대응하는 데이터 구조 식별자와 연관되고, 상기 대응하는 데이터 구조 식별자에 의해 식별되는 상기 데이터 구조에 대한 상기 복수의 메모리 어드레스들을 식별하기 위해 어드레스-표시 메타데이터를 보유하도록 지정되는, 비일시적 저장 매체.
KR1020217029253A 2019-08-05 2020-03-23 데이터 구조 프로세싱 KR20220038581A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/531,208 US11068268B2 (en) 2019-08-05 2019-08-05 Data structure processing
US16/531,208 2019-08-05
PCT/GB2020/050774 WO2021023954A1 (en) 2019-08-05 2020-03-23 Data structure processing

Publications (1)

Publication Number Publication Date
KR20220038581A true KR20220038581A (ko) 2022-03-29

Family

ID=70166055

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217029253A KR20220038581A (ko) 2019-08-05 2020-03-23 데이터 구조 프로세싱

Country Status (8)

Country Link
US (1) US11068268B2 (ko)
EP (1) EP3912027B1 (ko)
JP (1) JP7465887B2 (ko)
KR (1) KR20220038581A (ko)
CN (1) CN113498507A (ko)
IL (1) IL285610B2 (ko)
TW (1) TW202107276A (ko)
WO (1) WO2021023954A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11392316B2 (en) * 2019-05-24 2022-07-19 Texas Instruments Incorporated System and method for predication handling
CN113570028A (zh) * 2020-04-28 2021-10-29 超威半导体公司 用于在神经网络中处理数据的静态生成的经编译表示
US11799986B2 (en) * 2020-09-22 2023-10-24 Apple Inc. Methods and apparatus for thread level execution in non-kernel space
US11423580B2 (en) * 2020-10-12 2022-08-23 Arm Limited Decoding data arrays
CN112100121B (zh) * 2020-11-17 2021-02-12 北京壁仞科技开发有限公司 计算装置、计算设备以及可编程调度方法
TWI767644B (zh) * 2021-04-01 2022-06-11 劉玉堂 透過設定資料結構與自動生成應用程式介面服務資訊的系統
EP4167143A1 (en) 2021-10-15 2023-04-19 Electronics and Telecommunications Research Institute Resource resettable deep neural network accelerator, system, and method
CN115098271B (zh) * 2022-08-25 2022-12-02 北京医百科技有限公司 一种多线程数据处理方法、装置、设备及介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7610466B2 (en) 2003-09-05 2009-10-27 Freescale Semiconductor, Inc. Data processing system using independent memory and register operand size specifiers and method thereof
US7447868B2 (en) * 2005-06-15 2008-11-04 International Business Machines Corporation Using vector processors to accelerate cache lookups
US8635415B2 (en) * 2009-09-30 2014-01-21 Intel Corporation Managing and implementing metadata in central processing unit using register extensions
US10203958B2 (en) * 2013-07-15 2019-02-12 Texas Instruments Incorporated Streaming engine with stream metadata saving for context switching
GB2549511B (en) * 2016-04-20 2019-02-13 Advanced Risc Mach Ltd An apparatus and method for performing operations on capability metadata
US20170337156A1 (en) 2016-04-26 2017-11-23 Onnivation Llc Computing machine architecture for matrix and array processing
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
US11023382B2 (en) 2017-12-22 2021-06-01 Intel Corporation Systems, methods, and apparatuses utilizing CPU storage with a memory reference

Also Published As

Publication number Publication date
EP3912027B1 (en) 2022-11-30
IL285610A (en) 2021-09-30
EP3912027A1 (en) 2021-11-24
US20210042115A1 (en) 2021-02-11
IL285610B2 (en) 2024-05-01
TW202107276A (zh) 2021-02-16
WO2021023954A1 (en) 2021-02-11
IL285610B1 (en) 2024-01-01
JP7465887B2 (ja) 2024-04-11
JP2022543331A (ja) 2022-10-12
US11068268B2 (en) 2021-07-20
CN113498507A (zh) 2021-10-12

Similar Documents

Publication Publication Date Title
JP7465887B2 (ja) データ構造処理
US20230185649A1 (en) Streaming engine with deferred exception reporting
KR102539893B1 (ko) 다차원 어레이로부터 요소들의 다차원 블록을 프리페치하는 하드웨어 장치들 및 방법들
US20190073222A1 (en) Streaming engine with cache-like stream data storage and lifetime tracking
US10078551B2 (en) Streaming engine with error detection, correction and restart
US20100115233A1 (en) Dynamically-selectable vector register partitioning
KR102434170B1 (ko) 하이브리드 메모리 시스템
KR102443600B1 (ko) 하이브리드 메모리 시스템
US20200326854A1 (en) Streaming engine with fetch ahead hysteresis
CN115904501A (zh) 具有在每个维度上可选择的多维循环寻址的流引擎
JP7445431B2 (ja) 命令の実行を制御する装置および方法
EP4189537A1 (en) Register addressing information for data transfer instruction
CN114327362A (zh) 大规模矩阵重构和矩阵-标量操作
JP2023525811A (ja) 行列処理のための可変位置シフト
US10402323B2 (en) Organizing memory to optimize memory accesses of compressed data
US9928033B2 (en) Single-pass parallel prefix scan with dynamic look back
US11023382B2 (en) Systems, methods, and apparatuses utilizing CPU storage with a memory reference
CN111433742A (zh) 多保护标签设置指令
JP7377208B2 (ja) データ処理
US20230289185A1 (en) Data processing apparatus, method and virtual machine
US20230393849A1 (en) Method and apparatus to expedite system services using processing-in-memory (pim)
WO2023148467A1 (en) Technique for performing memory access operations
WO2023242531A1 (en) Technique for performing outer product operations
TW202307653A (zh) 陳述技術
RU2340933C2 (ru) Способ переключения контекста вычислительного процесса при прерывании программы или переходе к подпрограмме