KR102611813B1 - 바이패스 최적화, 가변 그리드 아키텍처 및 융합된 벡터 동작들을 갖는 코프로세서들 - Google Patents

바이패스 최적화, 가변 그리드 아키텍처 및 융합된 벡터 동작들을 갖는 코프로세서들 Download PDF

Info

Publication number
KR102611813B1
KR102611813B1 KR1020217027301A KR20217027301A KR102611813B1 KR 102611813 B1 KR102611813 B1 KR 102611813B1 KR 1020217027301 A KR1020217027301 A KR 1020217027301A KR 20217027301 A KR20217027301 A KR 20217027301A KR 102611813 B1 KR102611813 B1 KR 102611813B1
Authority
KR
South Korea
Prior art keywords
coprocessor
alu
memory
given
circuit
Prior art date
Application number
KR1020217027301A
Other languages
English (en)
Other versions
KR20210116651A (ko
Inventor
아디티아 케시라주
앤드류 제이. 보몬트-스미스
보리스 에스. 알바레즈-헤레디아
프라디프 카나파티필라이
란 에이. 차치크
스리칸스 발라수브라마니안
Original Assignee
애플 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 애플 인크. filed Critical 애플 인크.
Priority to KR1020237041950A priority Critical patent/KR20230170981A/ko
Publication of KR20210116651A publication Critical patent/KR20210116651A/ko
Application granted granted Critical
Publication of KR102611813B1 publication Critical patent/KR102611813B1/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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/3818Decoding for concurrent 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 or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3873Variable length pipelines, e.g. elastic pipeline
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Advance Control (AREA)

Abstract

일 실시예에서, 코프로세서는 주어진 프로세서 명령어에 의해 사용되지 않는 실행 회로를 식별하는 바이패스 표시를 포함할 수 있고, 따라서 바이패스될 수 있다. 대응하는 회로는 실행 동안 디스에이블되어, 회로의 출력이 명령어에 사용되지 않을 때 평가를 방지할 수 있다. 다른 실시예에서, 코프로세서는 행들 및 열들에서 프로세싱 요소들의 그리드를 구현할 수 있고, 여기서 주어진 코프로세서 명령어는 최대 모든 프로세싱 요소들이 입력 피연산자들의 벡터들 상에서 동작하게 하여 결과들을 생성하는 동작을 특정할 수 있다. 코프로세서의 구현들은 프로세싱 요소들의 부분을 구현할 수 있다. 코프로세서 제어 회로는 전체 그리드 또는 부분 그리드로 동작하도록 설계되어, 요청된 동작을 수행하기 위해 부분 그리드 케이스 내의 명령어들을 재발행할 수 있다. 또 다른 실시예에서, 코프로세서는 벡터 모드 동작들을 융합시킬 수 있다.

Description

바이패스 최적화, 가변 그리드 아키텍처 및 융합된 벡터 동작들을 갖는 코프로세서들
본 명세서에 설명된 실시예들은 코프로세서들에 관한 것으로, 더 구체적으로는 코프로세서들에서의 마이크로아키텍처 최적화들에 관한 것이다.
프로세서들은 많은 디지털 시스템들의 중요한 컴포넌트이며, 종종 얼마나 많은 성능 및/또는 전력 효율이 시스템 내에서 달성될 수 있는지를 결정한다. 일부 경우들에서, 프로세서들에 의해 구현되는 명령어 세트의 서브세트는 명령어들의 서브세트를 실행하는 데 있어서 프로세서보다 성능이 더 높고/높거나 더 효율적일 수 있는 코프로세서에서 구현될 수 있다. 대안적으로, 명령어들은, 범용 프로세서가 구현되지 않을 특수화된 하드웨어를 사용하여, 코프로세서에 의해 실행되도록 특별히 설계된 명령어 세트에 추가될 수 있다.
코프로세서 구현(또는 마이크로아키텍처)은 코프로세서의 성능 및/또는 전력 효율에 도움이 되는 다양한 최적화들을 포함할 수 있다. 코프로세서의 특수화된 성질 때문에, 최적화는 프로세서에서 종종 구현되는 것들과는 상이할 수 있다.
일 실시예에서, 코프로세서는 하나 이상의 최적화들을 포함할 수 있다. 예를 들어, 코프로세서의 일 실시예는 주어진 프로세서 명령어에 의해 사용되지 않는 실행 회로를 식별하는 바이패스 표시를 포함할 수 있고, 따라서 바이패스될 수 있다. 대응하는 회로는 실행 동안 디스에이블되어, 회로의 출력이 명령어에 사용되지 않을 때 평가를 방지할 수 있다. 다른 실시예에서, 코프로세서는 행들 및 열들에서 프로세싱 요소들의 그리드를 구현할 수 있고, 여기서 주어진 코프로세서 명령어는 최대 모든 프로세싱 요소들이 입력 피연산자들의 벡터들 상에서 동작하게 하여 결과들을 생성하는 동작을 특정할 수 있다. (예를 들어, 높은 성능 대 낮은 전력과 같은 상이한 프로세서 구현들과 함께 사용하기 위한) 코프로세서의 구현들은 프로세싱 요소들의 부분을 구현할 수 있다. 코프로세서 제어 회로는 전체 그리드 또는 부분 그리드로 동작하도록 설계되어, 요청된 동작을 수행하기 위해 부분 그리드 케이스 내의 명령어들을 재발행할 수 있다. 또 다른 실시예에서, 코프로세서는 벡터 모드 동작들(행렬 모드 동작에 대한 행렬 결과와는 대조적으로, 벡터 결과를 생성하기 위해 프로세싱 요소들의 행을 사용함)을 융합시킬 수 있으며, 이는 일부 실시예들에서 벡터 모드 동작들이 수행될 때 효율을 개선할 수 있다. 다양한 실시예들은 상기 특징들 중 하나 이상의 임의의 조합을 이용할 수 있다.
하기의 상세한 설명은 첨부 도면들을 참조하며, 이제 도면들이 간단히 설명된다.
도 1은 프로세서 및 코프로세서의 일 실시예를 예시하는 블록도이다.
도 2는 코프로세서의 일 실시예를 보다 상세히 예시하는 블록도이다.
도 3은 행렬 모드 명령어에 대한 프로세싱 요소들로의 데이터의 분배의 일 실시예를 예시하는 블록도이다.
도 4는 벡터 모드 명령어 또는 명령어들에 대한 프로세싱 요소들로의 데이터의 분배의 일 실시예를 예시하는 블록도이다.
도 5는 도 1 및 도 2에 도시된 실행 회로의 일 실시예의 보다 상세한 블록도이다.
도 6은 도 1 및 도 2에 도시된 실행 회로의 다른 실시예의 보다 상세한 블록도이다.
도 7은 도 1 및 도 2에 도시된 실행 회로의 또 다른 실시예의 보다 상세한 블록도이다.
도 8은 도 5 내지 도 7에 도시된 실행 회로들의 일 실시예에 대한 Z 메모리 위험을 예시하는 블록도이다.
도 9는 도 5 내지 도 7에 도시된 실행 회로들의 다른 실시예에 대한 Z 메모리 위험을 예시하는 블록도이다.
도 10은 Z 메모리 부하/저장 동작들에 대한 코프로세서의 일 실시예의 동작을 예시하는 흐름도이다.
도 11은 코프로세서의 다른 실시예의 보다 상세한 블록도이다.
도 12는 프로세싱 요소의 일 실시예의 보다 상세한 블록도이다.
도 13은 명령어를 디코딩하고 바이패스를 검출하는 일 실시예를 예시하는 흐름도이다.
도 14는 동작을 실행하고 바이패스를 구현하는 일 실시예를 예시하는 흐름도이다.
도 15는 감소된-크기의 실행 회로의 다양한 실시예들의 블록도이다.
도 16은 일 실시예에 대한 발행 제어 회로에 대응하는 상태 머신이다.
도 17은 op 융합의 일 실시예를 예시하는 흐름도이다.
도 18은 프로세서 및 코프로세서를 포함하는 시스템의 일 실시예의 블록도이다.
도 19는 컴퓨터 액세스가능 저장 매체의 일 실시예의 블록도이다.
본 발명에 설명된 실시예들은 다양한 수정들 및 대안적인 형태들을 허용할 수 있지만, 그의 특정 실시예들이 도면들에 예로서 도시되고, 본 명세서에서 상세히 설명될 것이다. 그러나, 그에 대한 도면들 및 상세한 설명은 실시예들을 개시된 특정 형태로 제한하는 것으로 의도되는 것이 아니라, 그와는 반대로, 의도는 첨부된 청구범위의 사상 및 범주 내에 속한 모든 수정들, 등가물들, 및 대안들을 커버하기 위한 것임을 이해하여야 한다. 본 명세서에서 사용되는 표제들은 오직 구성 목적들을 위한 것이며 설명의 범위를 제한하기 위해 사용되는 것으로 의도되지 않는다. 본 출원 전반에 걸쳐 사용되는 바와 같이, "일 수 있다(may)"라는 단어는 의무적인 의미(즉, "이어야만 한다(must)"를 의미)라기보다 오히려 허용의 의미(즉, "~에 대해 가능성을 갖는다"는 의미)로 사용된다. 유사하게, "포함하다(include, includes)" 및 "포함하는(including)"이라는 단어들은, "포함하지만 이로 제한되지 않는다"는 것을 의미한다. 본 명세서에 사용된 바와 같이, 구체적으로 진술되지 않는 한, "제1", "제2" 등의 용어들은 선행하고 있는 명사의 라벨로 사용될 뿐, 임의의 유형의 순번(예를 들어, 공간적, 시간적, 논리적 등)을 암시하는 것은 아니다.
본 발명 내에서, 상이한 엔티티들(이들은 "유닛들", "회로들", 다른 컴포넌트들 등으로 다양하게 지칭될 수 있음)은 하나 이상의 태스크들 또는 동작들을 수행"하도록 구성된" 것으로 설명되거나 또는 청구될 수 있다. 이러한 표현-[하나 이상의 태스크들을 수행]하도록 구성된 [엔티티]-은 본 명세서에서 구조(즉, 전자 회로와 같은 물리적인 것)를 지칭하는 데 사용된다. 더 상세하게는, 이러한 표현은 이러한 구조가 동작 동안 하나 이상의 태스크들을 수행하도록 배열됨을 나타내는 데 사용된다. 구조가 현재 동작되고 있지 않더라도, 구조는 일부 태스크를 수행"하도록 구성된다"고 말할 수 있다. 예를 들어, "출력 클록 신호를 생성하도록 구성된 클록 회로"는, 예를 들어, 해당 회로가 현재 사용되고 있지 않더라도(예컨대, 전원 공급이 접속되어 있지 않음), 동작 동안 이러한 기능을 수행하는 회로를 커버하도록 의도된다. 따라서, 일부 태스크를 수행"하도록 구성된" 것으로 설명된 또는 언급된 엔티티는 디바이스, 회로, 태스크를 구현하도록 실행가능한 프로그램 명령어들을 저장하는 메모리 등과 같은 물리적인 것을 지칭한다. 이러한 문구는 본 명세서에서 무형인 것을 지칭하기 위해 사용되지는 않는다. 일반적으로, "~하도록 구성된"에 대응되는 구조를 형성하는 회로부는 하드웨어 회로들을 포함할 수 있다. 하드웨어 회로들은 조합 로직 회로부, 플롭(flop), 레지스터, 래치 등과 같은 클로킹된(clocked) 저장 디바이스, 유한 상태 머신, 정적 랜덤 액세스 메모리 또는 임베디드 동적 랜덤 액세스 메모리와 같은 메모리, 주문 설계된 회로부, 아날로그 회로부, 프로그램가능한 로직 어레이 등의 임의의 조합을 포함할 수 있다. 유사하게, 다양한 유닛들/회로들/컴포넌트들은 설명의 편의상 태스크 또는 태스크들을 수행하는 것으로 설명될 수 있다. 그러한 설명은 "~하도록 구성된"이라는 문구를 포함하는 것으로 해석되어야 한다.
"~하도록 구성된"이라는 용어는 "~하도록 구성가능한"을 의미하도록 의도되지 않는다. 예를 들어, 프로그램되지 않은 FPGA는, 그것이 일부 구체적인 기능을 수행"하도록 구성가능"할 수 있지만, 그 기능을 수행"하도록 구성된" 것으로 고려되지 않을 것이다. 적절한 프로그래밍 후에, 이어서 FPGA는 그 기능을 수행하도록 구성될 수 있다.
일 실시예에서, 본 발명에 따른 하드웨어 회로들은 베릴로그(Verilog) 또는 VHDL과 같은 하드웨어 디스크립션 언어(hardware description language, HDL)로 회로의 디스크립션을 코딩함으로써 구현될 수 있다. HDL 디스크립션은 주어진 집적 회로 제조 기술을 위해 설계된 셀들의 라이브러리에 대해 합성될 수 있고, 타이밍, 전력 및 다른 이유들로 인해 수정되어 최종 설계 데이터베이스를 생성할 수 있으며, 이는 파운드리(foundry)로 송신되어 마스크들을 생성하고 궁극적으로 집적 회로를 생성할 수 있다. 일부 하드웨어 회로들 또는 그의 부분들은 또한 회로도 편집기(schematic editor)로 맞춤 설계될 수 있고 합성된 회로와 함께 집적 회로 설계 내로 캡처될 수 있다. 집적 회로는 트랜지스터들을 포함할 수 있고, 다른 회로 요소들(예컨대, 커패시터들, 저항기들, 인덕터들 등과 같은 수동 요소들) 및 트랜지스터들과 회로 요소들 사이의 상호접속부를 추가로 포함할 수 있다. 일부 실시예들은 하드웨어 회로들을 구현하기 위해 함께 결합된 다수의 집적 회로들을 구현할 수 있고, 그리고/또는 일부 실시예들에서는 이산 요소들이 사용될 수 있다. 대안적으로, HDL 설계는 FPGA(Field Programmable Gate Array)와 같은 프로그래밍가능 로직 어레이로 합성될 수 있으며 FPGA에서 구현될 수 있다.
본 명세서에서 사용되는 바와 같이, "~에 기초하여" 또는 "~에 따라"라는 용어는 결정에 영향을 주는 하나 이상의 인자들을 기술하기 위해 사용된다. 이러한 용어는 추가 인자들이 결정에 영향을 줄 수 있는 가능성을 배제하지 않는다. 즉, 결정은 단지 특정된 인자들에 기초하거나 또는 그 특정된 인자들뿐만 아니라 다른, 불특정된 인자들에 기초할 수 있다. "B에 기초하여 A를 결정한다"라는 문구를 고려하자. 이러한 문구는 B가 A를 결정하는 데 사용되거나 A의 결정에 영향을 주는 인자라는 것을 명시한다. 이러한 문구는 A의 결정이 C와 같은 다른 인자에 또한 기초할 수 있음을 배제하지 않는다. 또한, 이러한 문구는 A가 B에만 기초하여 결정되는 실시예를 커버하도록 의도된다. 본 명세서에서 사용되는 바와 같이, "~에 기초하여"라는 문구는 "~에 적어도 부분적으로 기초하여"라는 문구와 동의어이다.
본 명세서는 다양한 실시예들에 대한 참조를 포함하여, 본 발명이 하나의 특정 구현을 지칭하는 것이 아니라 오히려 첨부된 청구범위를 포함하는 본 발명의 사상 내에 포함되는 실시예들의 범위를 지칭하는 것으로 의도된다. 특정 특성들, 구조들, 또는 특징들은 본 발명에 부합하는 임의의 적합한 방식으로 조합될 수 있다.
본 명세서는, 한 요소를 지칭하기 위해 "한(a 또는 an)"이라는 단어를, 또는 그 요소를 지칭하기 위해 "그(the)"라는 단어를 사용할 수 있다. 이들 단어들은 그 요소의 단지 하나의 인스턴스(instance)만이 있음을 의미하도록 의도된 것은 아니다. 다양한 실시예들에서 하나 초과의 것이 있을 수 있다. 따라서, "한" 및 "그"는 단지 하나로서 명백히 기술되지 않는 한, "하나 이상"을 의미하는 것으로 해석되어야 한다.
본 명세서는 다양한 컴포넌트들, 유닛들, 회로들 등을 결합된 것으로 설명할 수 있다. 일부 실시예들에서, 컴포넌트들, 유닛들, 회로들 등은, 그들이 전기적으로 결합(예컨대, 하나 이상의 다른 회로들을 통해 직접 접속되거나 간접 접속됨)되고/되거나 통신가능하게 결합되는 경우, 결합될 수 있다.
이제 도 1을 참조하면, CPU 프로세서(12), 코프로세서(10), 및 레벨 2(L2) 캐시(14)를 포함하는 장치의 일 실시예의 블록도가 도시되어 있다. 예시된 실시예에서, CPU 프로세서(12)는 L2 캐시(14) 및 코프로세서(10)에 결합된다. 일부 실시예들에서, 코프로세서(10)는 또한 L2 캐시(14)에 결합될 수 있고/있거나 CPU 프로세서(12) 내의 데이터 캐시(DCache)에 결합될 수 있다(도 1에 도시되지 않음). 코프로세서(10)는 서로 결합된 명령어 버퍼(22), X 메모리(24), Y 메모리(26), Z 메모리(28), 실행 회로(30), 및 메모리 액세스 인터페이스(32)를 포함할 수 있다. 일부 실시예들에서, 회로들은, 그들이 전기적으로 결합(예컨대, 하나 이상의 다른 회로들을 통해 직접 접속되거나 간접 접속됨)되고/되거나 통신가능하게 결합되는 경우, 결합될 수 있다.
코프로세서(10)는 하나 이상의 계산 동작들 및 하나 이상의 코프로세서 부하(load)/저장 동작들을 수행하도록 구성될 수 있다. 코프로세서(10)는 명령어 세트를 이용할 수 있으며, 명령어 세트는 CPU 프로세서(12)에 의해 구현되는 명령어 세트의 서브세트일 수 있다. CPU 프로세서(12)는 코프로세서(10)에 의해 구현된 명령어들을 인식할 수 있고, 명령어들을 코프로세서(10)에 통신할 수 있다. 프로세서(12)로부터 코프로세서(10)로 코프로세서 명령어들을 전송하기 위한 임의의 메커니즘이 사용될 수 있다. 예를 들어, 도 1은 CPU 프로세서(12)와 코프로세서(10) 사이의 통신 경로를 예시한다. 경로는 예를 들어 코프로세서(10)가 CPU 프로세서(12) 근처에 물리적으로 위치된 경우 전용 통신 경로일 수 있다. 통신 경로는 다른 통신들과 공유될 수 있다. 예를 들어, 패킷 기반 통신 시스템을 사용하여, 메모리 요청들을 시스템 메모리에 그리고 명령어들을 코프로세서(10)에 송신할 수 있다. 하나의 특정 실시예에서, 코프로세서 명령어들은 L2 캐시(14)를 통해 코프로세서(12)로 통신될 수 있다. 일 실시예에서, 명령어들은 번들링되고 코프로세서(12)로 송신될 수 있다. 예를 들어, 캐시 동작들, 캐시 축출들 등은 프로세서(12)에 의해 L2 캐시(14)로 송신될 수 있고, 따라서 데이터의 동작 및 캐시 라인을 송신하기 위한 인터페이스가 있을 수 있다. 일 실시예에서, L2 캐시(14)를 통해 명령들의 번들을 코프로세서(10)에 송신하기 위해 동일한 인터페이스가 사용될 수 있다.
일 실시예에서, 코프로세서(10)에 구현된 명령어들에 의해 특정되는 계산 동작들은 입력 피연산자들의 벡터들에 대해 수행될 수 있다. 예를 들어, 일 실시예는 X 메모리(24) 및 Y 메모리(26)로부터 피연산자들의 벡터들을 수신한다. 실행 회로(30)는 동작들을 수행하기 위한 프로세싱 요소들(회로들)의 어레이 또는 그리드를 포함할 수 있다. 각각의 회로는 X 메모리(24)로부터의 요소들의 벡터 중 하나 이상 및 Y 메모리(26)로부터의 요소들의 벡터 중 하나 이상을 수신할 수 있고, 벡터 요소들에 대한 동작을 평가할 수 있다. 일 실시예에서, 동작의 결과는, Z 메모리(28) 내의 대응하는 위치에 다시 기록하기 위해, Z 메모리(28) 내의 대응하는 위치에 현재 값으로 누산될 수 있다. 일 실시예에서, 코프로세서(10)에 의해 실행되는 명령어들은 벡터 모드 및 행렬 모드를 가질 수 있다. 벡터 모드에서, X의 각각의 벡터 요소는 Y의 대응하는 벡터 요소에 대해 평가되어, 결과들의 벡터를 생성한다. 행렬 모드에서, 일 실시예에서 입력 벡터 피연산자들의 외적이 컴퓨팅될 수 있다. 또 다른 실시예에서, 다양한 행렬 동작들이 행렬 모드를 사용하여 지원될 수 있고, X의 각각의 벡터 요소가 행렬 모드에서 각각의 Y의 벡터 요소와 함께 동작될 수 있다.
어레이 내의 주어진 프로세싱 요소의 위치에 기초하여, 프로세싱 요소가 코프로세서 명령어들에 응답하여 업데이트될 수 있는 Z 메모리(28)의 서브세트가 존재한다. 즉, 각각의 프로세싱 요소는 명령어의 전체 결과의 부분을 생성한다. 모든 프로세싱 요소들(또는 명령어가 동작을 수행하기 위해 모든 프로세싱 요소들보다 더 적은 수를 특정하는 경우, 프로세싱 요소들의 서브세트)에 대해 생성된 결과는 명령어의 결과이고, 결과는 명령어 및 명령어의 피연산자 크기에 의존하는 규칙적인 패턴으로 Z 메모리의 어드레스 공간에 걸쳐 산재된 Z 메모리 내의 위치들에 기록된다. 최대 Z 메모리(28) 전부는 명령어에 응답하여 업데이트될 수 있지만, 각각의 프로세싱 요소는 Z 메모리(28)의 제한된 부분을 업데이트한다(그리고 그 프로세싱 요소는 제한된 부분을 업데이트할 수 있는 실행 회로(30) 내의 유일한 프로세싱 요소일 수 있다). 명령어는 결과에 대한 Z 메모리 어드레스를 특정할 수 있고, 어드레스는 업데이트되는 제한된 부분 내의 위치(들)를 식별한다.
따라서, 일 실시예에서, Z 메모리(28)는 실행 회로(30)의 프로세싱 요소들과 함께, 코프로세서(10)에 의해 점유되는 집적 회로의 영역에 걸쳐 물리적으로 분산될 수 있다. 따라서, 도 1의 도시는 코프로세서(10)의 로직 도면일 수 있고, 물리적 구현은 프로세싱 요소들과 함께 Z 메모리(28)를 분배하는 것을 포함할 수 있다. Z 메모리(28)를 물리적으로 분배하는 것은 일부 실시예들에서 다양한 이점들을 제공할 수 있다. 예를 들어, Z 메모리(28)를 실행 회로(30) 내의 프로세싱 요소들에 연결하는 배선은 Z 메모리(28)가 별개의 구현된 경우와 비교하여 상대적으로 짧고 콤팩트할 수 있다. 이는 소비되는 영역의 절감 뿐만 아니라 Z 메모리(28)를 판독하고 기록하는 전력으로 이어질 수 있다.
일 실시예에서, 코프로세서(10)는 다양한 데이터 유형들 및 데이터 크기들(또는 정밀성들)을 지원할 수 있다. 예를 들어, 부동 소수점 및 정수 데이터 유형들이 지원될 수 있다. 부동 소수점 데이터 유형은 16 비트, 32 비트, 및 64 비트 정밀성들을 포함할 수 있다. 정수 데이터 유형들은 8 비트 및 16 비트 정밀성들을 포함할 수 있고, 부호 정수 및 무부호 정수 둘 모두가 지원될 수 있다. 다른 실시예들은 상기 정밀성들의 서브세트, 추가 정밀성들, 또는 상기 정밀성들 및 추가 정밀성들의 서브세트를 포함할 수 있다(예컨대, 더 크거나 더 작은 정밀성들). 일 실시예에서, 8 비트 및 16 비트 정밀성들이 입력 피연산자들에 대해 지원될 수 있고, 32 비트 누산들이 이들 피연산자들에 대한 동작 결과들에 대해 지원될 수 있다.
일 실시예에서, 코프로세서 부하 동작들은 시스템 메모리(도 1에 도시되지 않음)로부터 벡터들을 X 메모리(24), Y 메모리(26), 또는 Z 메모리(28)로 전송할 수 있다. 코프로세서 저장 동작들은 X 및 Y 메모리들(24, 26)로부터 벡터들을 시스템 메모리에 기록할 수 있다. Z 메모리(28)는, 추출 명령어를 사용하여 결과들을 X 메모리(24) 및/또는 Y 메모리(26)로 이동시키고 이어서 X 메모리(24) 및/또는 Y 메모리(26)로부터의 결과들을 시스템 메모리로 저장하여, 메모리에 기록될 수 있다. 대안적으로, Z 메모리(28)를 메인 메모리에 저장하기 위한 저장 명령어가 또한 지원될 수 있다. 시스템 메모리는 다양한 유형들의 동적 RAM(DRAM) 또는 정적 RAM(SRAM)과 같은 랜덤 액세스 메모리(RAM)로부터 형성될 수 있다. 메모리 제어기는 시스템 메모리와 인터페이싱하기 위해 포함될 수 있다. 일 실시예에서, 코프로세서(10)는 CPU 프로세서(12)와 캐시 일관적일 수 있다. 일 실시예에서, 코프로세서(10)는 L2 캐시(14)에의 액세스를 가질 수 있고, L2 캐시(14)는 CPU 프로세서(12) 캐시들과의 캐시 일관성을 보장할 수 있다. 또 다른 대안에서, 코프로세서(10)는 메모리 시스템에의 액세스를 가질 수 있고, 메모리 시스템 내의 일관성 포인트는 액세스들의 일관성을 보장할 수 있다. 또 다른 대안에서, 코프로세서(10)는 CPU 캐시들에의 액세스를 가질 수 있다. 또 다른 실시예에서, 코프로세서(10)는 하나 이상의 캐시들(필요에 따라 가상으로 어드레스되거나 물리적으로 어드레스될 수 있음)를 가질 수 있다. 코프로세서 캐시들은 L2 캐시(14)가 제공되지 않고 CPU 캐시들에 대한 액세스가 제공되지 않는 경우 사용될 수 있다. 대안적으로, 코프로세서(10)는 캐시들을 가질 수 있고, 이들 캐시들 내의 미스들에 대한 L2 캐시(14)로의 액세스를 가질 수 있다. 다양한 실시예들에서 메모리에 액세스하고 일관성을 보장하기 위한 임의의 메커니즘이 사용될 수 있다.
일 실시예에서, CPU 프로세서(12)는 CPU 프로세서(12) 및 코프로세서(10)에 의해 실행되는 명령어들을 페칭(fetching)하는 것을 담당할 수 있다. 일 실시예에서, 코프로세서 명령어들은, 이들이 더 이상 추론되지 않을 때, CPU 프로세서(12)에 의해 코프로세서(10)에 발행될 수 있다. 대체적으로, 명령어 또는 동작은, 명령어가 예외/인터럽트(interrupt) 없이 실행을 완료할 것으로 알려진 경우, 비-추론적일 수 있다. 따라서, 일단, 이전 명령어들이 CPU 프로세서(12) 내에서 예외들/추론적 플러시들을 야기하지 않는다고 알려진 정도로, 이전 명령어들이 (프로그램 순서로) 프로세싱되었고, 명령어 자체도 예외/추론적 플러시를 야기하지 않는다고 알려지면, 명령어는 비-추론적일 수 있다. 일부 명령어들은 CPU 프로세서(12)에 의해 구현된 명령어 세트 아키텍처에 기초하여 예외들을 야기하지 않는다고 알려질 수 있고, 또한 추론적 플러시들을 야기하지 않을 수 있다. 일단 다른 이전 명령어들이 예외가 없고 플러시가 없다고 결정되었으면, 그러한 명령어들은 또한 예외가 없고 플러시가 없다.
명령어 버퍼(22)는, 다른 명령어들이 수행되고 있는 동안 코프로세서(10)가 명령어들을 큐잉하는 것을 허용하기 위해 제공될 수 있다. 일 실시예에서, 명령어 버퍼(22)는 선입선출(first in, first out, FIFO) 버퍼일 수 있다. 즉, 명령어들은 프로그램 순서로 프로세싱될 수 있다. 다른 실시예들은 다른 유형들의 버퍼들, 상이한 유형들의 명령어들(예컨대, 부하/저장 명령어들 대 계산 명령어들)을 위한 다수의 버퍼들을 구현할 수 있고/있거나 명령어들의 순서 없는 프로세싱을 허용할 수 있다.
X 메모리(24) 및 Y 메모리(26)는 각각 입력 피연산자들의 적어도 하나의 벡터를 저장하도록 구성될 수 있다. 유사하게, Z 메모리(28)는 X 메모리(24)로부터의 피연산자들의 벡터 및 Y 메모리(26)로부터의 피연산자들의 벡터로부터 생성된 적어도 하나의 계산 결과를 저장하도록 구성될 수 있다. 결과는 결과 크기(예를 들어, 16 비트 요소들, 32 비트 요소들 또는 64 비트 요소들)의 결과들의 행렬일 수 있다. 대안적으로, 결과는 명령어에 따라 벡터일 수 있다. 일부 실시예들에서, X 메모리(24) 및 Y 메모리(26)는 다수의 벡터들을 저장하도록 구성될 수 있고/있거나, Z 메모리(28)는 다수의 결과 행렬들/벡터들을 저장하도록 구성될 수 있다. 각각의 벡터/행렬은 메모리들 내의 상이한 뱅크 내에 저장될 수 있고, 주어진 명령어에 대한 피연산자들은 뱅크 번호에 의해 식별될 수 있다. 보다 일반적으로, 메모리들(24, 26, 28) 내의 각각의 엔트리는 레지스터 어드레스(예를 들어, 레지스터 번호)에 의해 어드레스될 수 있고, 따라서 메모리들 내의 엔트리들은 CPU 프로세서(12) 내의 정수 또는 부동 소수점 레지스터와 유사한 레지스터들로서 간주될 수 있다(그러나, 저장 용량의 관점에서는 그러한 레지스터보다 일반적으로 상당히 더 큼). 다른 방식으로 보면, 메모리들(24, 26, 28) 각각은 특정 메모리로 참조되는 어드레스들을 사용하여 엔트리들로서 어드레스가능할 수 있다(예를 들어, 각각의 메모리(24, 26, 28)는 그 자신의 어드레스 공간을 가질 수 있음). X 메모리(24) 내의 주어진 엔트리의 주어진 어드레스는, 예를 들어, Y 메모리(26) 내의 제2의 주어진 엔트리의 제2의 주어진 어드레스와 동일한 수치 값을 가질 수 있다. 그들은 주어진 명령어에서 X 메모리 어드레스 또는 Y 메모리 어드레스로서 코딩되기 때문에, 판독/기록될 정확한 메모리로부터의 정확한 엔트리가 코프로세서(10)에 의해 선택될 수 있다.
실행 회로(30)는 전술된 바와 같이 계산 동작들을 수행하도록 구성될 수 있다. 메모리 액세스 인터페이스(32)는 코프로세서 부하/저장 동작들을 수행하도록 구성될 수 있다. 코프로세서(10)는 명령어 버퍼(22)로부터의 코프로세서 부하/저장 동작들을 메모리 액세스 인터페이스(32)로 제공할 수 있으며, 이는 부하/저장 동작들을 위한 큐 및 실행을 위해 부하/저장 동작들을 선택하기 위한 제어 로직을 포함할 수 있다. 코프로세서 부하/저장 동작들의 어드레스는 CPU 프로세서(12)로부터의 동작과 함께 제공될 수 있다. 일 실시예에서, CPU 프로세서(12)는 부하/저장 동작의 하나 이상의 어드레스 피연산자들로부터 가상 어드레스를 생성할 수 있고, 가상 어드레스를 메모리 관리 유닛(예를 들어, 변환 룩사이드 버퍼(TLB) 및/또는 관련 하드웨어)을 통해 물리적 어드레스로 변환할 수 있다. 다른 실시예에서, 코프로세서(10)는 TLB 및/또는 다른 MMU 하드웨어를 포함할 수 있고, CPU 프로세서(12)는 코프로세서(10)에 의해 변환될 수 있는 가상 어드레스를 제공할 수 있다. CPU 프로세서(12)에 의해 실행되는 TLB 관리 명령어들은 또한 그러한 실시예들에서 코프로세서(10)에 송신되어, CPU 프로세서(12) TLB와 일관되게 코프로세서(10) TLB를 관리할 수 있다. 그러나, 코프로세서 저장 동작들에 대하여, 메모리들(24, 26, 28) 중 하나로부터의 소스 데이터는, 이전 계산 동작들이 완료될 때까지, 이용가능하지 않을 수 있다. 코프로세서 부하 동작들은 일반적으로 메모리 액세스 인터페이스(32)에 제공될 때 실행될 준비가 되어 있을 수 있지만, 더 신생의 코프로세서 부하/저장 동작들과의 순서화 제약들을 가질 수 있다. 메모리 액세스 인터페이스(32)는 순서화 제약들을 해결하고 메모리 동작들을 L2 캐시(14)로 송신하도록 구성될 수 있다.
일 실시예에서, L2 캐시(14)는 코프로세서 부하/저장 동작들에 대한 캐시 히트를 확인하도록 구성될 수 있고, 또한 코프로세서 부하/저장 동작들에 의해 액세스되는 데이터(또는 그의 부분)가 CPU 프로세서(12)의 데이터 캐시 내에 있는지 여부를 결정할 수 있다. L2 캐시(14)는 CPU 프로세서 데이터 캐시를 포함할 수 있고, 따라서 L2 캐시(14) 내의 캐시 라인에 대한 태그는 캐시 라인이 데이터 캐시 내에 있는지 여부를 나타낼 수 있다. 대안적으로, L2 캐시(14)는 데이터 캐시에 대한 태그들의 세트를 포함할 수 있고, 태그들의 세트 내의 데이터 캐시에 어느 캐시 블록들이 있는지를 추적할 수 있다. 데이터가 데이터 캐시에 있는 경우, L2 캐시(14)는 데이터 캐시 라인을 무효화(그리고 데이터가 수정되면 데이터를 페칭)하기 위한 동작을 생성할 수 있다. 이러한 동작은 "백 스누프(back snoop)" 동작으로 지칭될 수 있다. 추가적으로, L2 캐시(14)는 코프로세서 부하/저장 동작에 대한 캐시 누락을 검출할 수 있고, 다른 하위 레벨 캐시 또는 메인 메모리로부터 누락 캐시 라인을 페칭하여 요청을 완료할 수 있다.
캐시 라인은 캐시 내의 할당 및 반납(deallocation)의 단위일 수 있다. 즉, 캐시 라인 내의 데이터는 한 단위로서 캐시에 할당/반납될 수 있다. 캐시 라인들은 크기가 변할 수 있다(예컨대, 32 바이트, 64 바이트, 128 바이트, 또는 더 크거나 더 작은 캐시 라인들). 상이한 캐시들은 상이한 캐시 라인 크기들을 가질 수 있다(예를 들어, CPU 프로세서(12) 내의 데이터 캐시는 일 실시예에서, L2 캐시(14)보다 더 작은 캐시 라인 크기를 가질 수 있음). 각각의 캐시는 임의의 원하는 용량, 캐시 라인 크기 및 구성을 가질 수 있다. L2 캐시(14)는 캐시 계층구조 내에서 임의의 레벨(예를 들어, CPU 프로세서(12)에 대한 마지막 레벨 캐시(last level cache, LLC), 또는 CPU 프로세서(12)/코프로세서(10)와 메인 메모리 시스템 사이의 임의의 중간 캐시 레벨)일 수 있다. CPU 캐시들과 L2 캐시(14) 사이에 더 많은 캐시 레벨들이 있을 수 있고/있거나, L2 캐시(14)와 메인 메모리 사이에 추가 캐시 레벨들이 있을 수 있다.
일 실시예에서, 코프로세서(10)는 단순화된 형태로 예시될 수 있고, 도 1에 도시되지 않은 추가 컴포넌트들을 포함할 수 있다는 것에 유의한다. 예를 들어, 코프로세서(10)는 파이프라인을 포함하여, 코프로세서 동작들을 디코딩하고, 피연산자들의 레지스터 리네이밍을 수행하고, 구조화된 크기보다 더 큰 X 메모리(24) 및 Y 메모리(26)에 대한 물리적 메모리 크기를 사용하고, 계산 동작들을 순서 없이 실행할 수 있다. 다양한 실시예들에서, 코프로세서(10)의 임의의 구현이 사용될 수 있다.
일부 실시예들에서, 코프로세서(10)는 다수의 CPU 프로세서들(12)에 의해 공유될 수 있다는 것에 유의한다. 코프로세서(10)는, 예를 들어, 각각의 CPU 프로세서(12)에 대한 별개의 컨텍스트들을 X 메모리(24), Y 메모리(26), 및 Z 메모리(28) 내에 유지할 수 있다. 대안적으로, 상이한 CPU 프로세서들(12)이 코프로세서(10)에 대한 코프로세서 동작들을 발행할 때, 컨텍스트들은 코프로세서(10) 내에서 스와핑(swapping)될 수 있다.
도 2는 코프로세서(10)의 일 실시예의 보다 상세한 블록도이다. 예시된 실시예에서, 코프로세서(10)는 명령어 버퍼(22), 디코딩 유닛(34), 메모리 액세스 인터페이스(32), 동작(op) 큐(38), 데이터 버퍼(40) 및 실행 회로(30)를 포함한다. 실행 회로(30)는 행들 및 열들의 그리드로서 배열된 프로세싱 요소(PE)들의 어레이(42)를 포함한다. 명령어 버퍼(22)는 코프로세서(10)에 의해 실행될 명령어들을 수신하도록 결합되고, 디코딩 유닛(34)에 결합된다. 디코딩 유닛(34)은 데이터 버퍼(40)에 추가로 결합되는 op 큐(38)에 결합된다. 데이터 버퍼(40)는 실행 회로(30)에 결합된다. op 큐(38)는 스케줄러 회로(36)를 포함한다. 데이터 버퍼(40)는 메모리 액세스 인터페이스(32)에 결합되고, 메모리 액세스 인터페이스(32) 및 데이터 버퍼(40) 둘 모두는 L2캐시(14)에 결합된다.
일반적으로, 코프로세서(10)는 명령어 버퍼(22) 내의 명령어들을 수신하도록 구성될 수 있다. 디코딩 유닛(34)은 실행을 위해 명령어들을 하나 이상의 동작(ops)들로 디코딩할 수 있다. op들은 실행 회로(30)에서 실행되는 컴퓨팅 op들뿐만 아니라 메모리로부터 데이터 버퍼(40)로 데이터를 판독하고 데이터 버퍼(40)로부터 (L2 캐시(14)를 통해) 메모리에 데이터를 저장하는 메모리 op들을 포함할 수 있다. 일 실시예에서, 데이터 버퍼(40)는 실행 회로(30)에 의해 실행되는 컴퓨팅 op들에 대한 피연산자들의 소스일 수 있고, 결과들은 실행 회로(30)(도 2에 도시되지 않음) 내의 분산형 Z 메모리(28)에 저장될 수 있다. 즉, 데이터 버퍼(40)는 X 메모리(24) 및 Y 메모리(26)를 위한 저장소를 포함할 수 있다. X 메모리(24) 및 Y 메모리(26)로부터의 엔트리들은 레지스터 리네이밍 기술들을 사용하여 디코딩 유닛(34)에 의해 데이터 버퍼(40)의 다양한 엔트리들로 리네이밍될 수 있다. 이러한 실시예에서, Z 메모리(28)는 리네이밍되지 않을 수 있다.
앞서 언급된 바와 같이, 코프로세서(10)는 피연산자들의 벡터들 및 피연산자들에 대해 수행될 컴퓨팅(산술/로직 유닛(ALU)) 동작을 특정하는 명령어들을 실행하도록 설계될 수 있다. 예를 들어, 다양한 유형들의 곱셈/누산 동작들이 지원될 수 있다. 곱셈들은 피연산자들의 벡터들에 대해 병렬로 수행될 수 있다. 따라서, 실행 회로(30)는 프로세싱 요소(PE)들(42)의 어레이를 포함한다. PE들(42)의 어레이는 도 2에 예시된 바와 같이 수평 방향(행) 및 수직 방향(열)을 포함할 수 있다. 각각의 PE(42)는 op에 대한 하나 이상의 입력 벡터 요소들로부터 피연산자를 수신할 수 있고, 결과를 생성하기 위해 피연산자들에 대해 특정된 컴퓨팅 동작을 수행할 수 있다. 일부 동작들은 결과들의 벡터를 특정할 수 있고, PE들(42)의 서브세트는 그러한 op들을 위해 사용될 수 있다. 다른 op들은 결과들의 어레이(또는 행렬)를 특정할 수 있다. 예를 들어, 일 실시예에서, 입력 피연산자들의 벡터들에 대한 곱셈-누산 동작들은 벡터들의 외적을 생성할 수 있다. 다른 곱셈-누산 동작들은 그러한 실시예들에 대해 행렬 모드에서 수행될 수 있다. 최대 모든 PE들(42)이 행렬-모드 op들에 사용될 수 있다. 그러나, 일부 경우들에서, 결과들의 어레이조차도 PE들(42) 모두를 사용하지는 않을 수 있다. 예를 들어, 일부 경우들에서, 입력 피연산자들의 벡터 모두가 사용되는 것은 아닐 수 있다.
일 실시예에서, 행렬 동작들을 위해, Y 메모리(26)로부터의 피연산자들의 벡터는 "열"로서 실행 회로(30)에 제공될 수 있고, X 메모리(24)로부터의 피연산자들의 벡터는 "행"으로서 실행 회로(30)에 제공될 수 있다. 따라서, X 메모리(24)로부터의 주어진 벡터 요소는 PE들(42)의 열에 공급될 수 있고, Y 메모리(26)로부터의 주어진 벡터 요소는 행렬 동작을 위해 PE들(42)의 행에 공급될 수 있다. 상이한 피연산자 크기들이 지원되기 때문에, 주어진 PE(42)에 공급되는 벡터 요소들의 수는 명령어의 피연산자 크기에 의존한다. 예를 들어, 실행 회로(30)가 행 또는 열에 N개의 PE들(42)을 갖는 경우, 각각의 PE(42)는 엔트리로부터 데이터의 1/N을 수신할 수 있다. 데이터 내의 피연산자들의 수, 및 그에 따라 주어진 명령어에 대해 PE(42)에 의해 수행되는 동작들의 수는 명령어의 피연산자 크기에 의존할 수 있다. 일 실시예에서, 가장 큰 피연산자 크기는 엔트리로부터의 데이터의 1/N일 수 있다(예를 들어, 각각의 PE(42)는 가장 큰 피연산자 크기로 하나의 피연산자에 대해 동작할 수 있음). 피연산자 크기들은 2의 거듭제곱만큼 변하므로, 각각의 PE(42)는 두번째로 큰 피연산자 크기의 2개의 피연산자들, 세번째로 큰 피연산자 크기의 4개의 피연산자 등에 대해 동작할 수 있다.
디코딩 유닛(34)은 op 큐(38)에 대한 op들을 생성하기 위해 명령어들을 디코딩할 수 있고, 주어진 op에 의해 사용될 수 있는 PE들(42)을 결정할 수 있다. 이전에 언급된 바와 같이, 벡터 op들은 PE들(42)의 하나의 행을 사용할 수 있다. 행렬 op들은 PE들(42)의 모든 행들 및 열들을 사용할 수 있다. 그러나, 명령어들의 유형들 둘 모두는 마스킹(코프로세서(10)에 전송되는 명령어에서 특정 됨)을 지원할 수 있다. 벡터 op들의 경우, 어느 벡터 요소들이 소스 벡터들에서 활성인지를 결정하는 단일 마스크가 존재할 수 있다. 행렬 op들의 경우, 각각의 동작에 대해 수평 마스크 및 수직 마스크가 존재할 수 있다. 수평 마스크는 주어진 op에 대해 평가할 수 있는 도 2에 도시된 바와 같이 수평 방향으로 PE들(42)을 나타낼 수 있고, 수직 마스크는 주어진 op에 대해 평가할 수 있는 도 2에 도시된 바와 같이 수직 방향으로 PE들(42)을 나타낼 수 있다. 따라서, 수평 마스크는 어느 X 벡터 요소들이 활성인지를 식별할 수 있고, 수직 마스크는 어느 Y 벡터 요소들이 활성인지를 나타낼 수 있다. 2개의 마스크들의 교차점은, op가 실행될 때 어느 PE들(42)이 평가할지를 결정할 수 있다. 예를 들어, 각각의 마스크는 주어진 방향에서 각각의 PE(42)에 대한 비트를 포함할 수 있다. 비트는 PE(42)가 평가할 것임을 나타내도록 설정될 수 있고 PE(42)가 op에 대해 평가하지 않을 것임을 나타내도록 클리어될 수 있다. 따라서, 예를 들어, 8 x 8 PE들(42)의 어레이는 8 비트의 수평 마스크 및 8 비트의 수직 마스크를 포함할 수 있다. 다른 실시예에서, 주어진 PE 요소는 적어도 일부 피연산자 크기들에 대해 다수의 입력 벡터 요소들에 대해 동작할 수 있다. 마스크들은 그러한 실시예들에 대해 요소마다 정의될 수 있다. 다양한 실시예들에서, 마스크들의 임의의 조합이 지원될 수 있다.
마스크들, op의 피연산자 크기, 및 op의 유형/모드(벡터 또는 행렬)에 기초하여, 하나 이상의 위험 마스크 값들이 각각의 op에 대해 생성될 수 있다(도 2의 op 큐(38)의 각각의 op 큐 엔트리 내의 HazardMask). 위험 마스크 값들은 op에 의해 업데이트되는 Z 메모리(28)의 부분의 표시일 수 있고, op들 사이의 기록 후 판독 및 판독/기록 후 기록 종속성들이 스케줄링(36)에 의한 op들의 스케줄링에서 준수되는 것을 보장하기 위해 사용될 수 있다. PE들(42)은 파이프라인을 구현할 수 있으며, 파이프라인의 단부에서 Z 메모리(28)가 업데이트될 수 있다. 따라서, 선행 op가 엔트리를 기록한 후에 Z 메모리(28)를 판독하도록 종속 op가 보장될 때 기록 후 판독 종속성들이 클리어될 수 있다. 곱셈-누산 op들의 경우, Z 메모리(28)는 누산 동작의 시작 시에 판독될 수 있고 누산 동작의 종료 시에 기록될 수 있다. 따라서, 선행 op가 누산 파이프라인의 끝에 도달하기 전에, 종속 op가 누산 파이프라인의 시작에 도달하지 않는 것이 보장되면, 종속성이 클리어될 수 있다. 종속 동작이 기록 스테이지에 도달하기 전에 선행 동작이 판독 스테이지 및 기록 스테이지에 도달할 것이기 때문에, 판독/기록 후 기록 종속성들은 선행 동작의 문제에 대해 클리어될 수 있다.
위험 마스크 값들 및 op 자체에 추가하여, 각각의 엔트리는 명령어에 의해 업데이트된 Z 메모리 엔트리를 식별하는 목적지 ID를 저장할 수 있다. 일부 실시예들에서, 목적지 ID는 Z의 어느 행이 업데이트되는지를 결정하기 위해 벡터 op들에 대해서만 사용된다. 다른 실시예들에서, 목적지 ID는 벡터 및 행렬 op들 둘 모두에 사용된다. 다양한 실시예들은 아래에서 더 상세하게 기술된다.
op 큐(38)는 (스케줄러 회로(36)에 의해 결정된 바와 같이) op들이 실행 회로(30)에 의해 실행될 수 있을 때까지 op들을 저장한다. 2개의 예시적인 op 큐 엔트리들이 도 2에 도시되어 있지만, 다른 실시예들에서는 임의의 수의 엔트리들이 지원될 수 있다. 각각의 엔트리는 op, Z 메모리(28)에 대응하는 목적지 ID, 및 X 및 Y 메모리들(24, 26)에 각각 대응하는 소스 ID들을 포함할 수 있다. 소스 ID들은 리네임 레지스터 ID들일 수 있고, 리네임 레지스터들의 구조화된 X 및 Y 메모리 엔트리들로의 맵핑은 디코딩 유닛(34) 내의 리네임 하드웨어에 의해 유지될 수 있다. 일반적으로, X 메모리(24) 또는 Y 메모리(26)가 기록의 목적지(예를 들어, 부하 명령어, Z 명령어로부터의 추출, 또는 일부 실시예들에서, 다양한 다른 이동 명령어들)일 때, 새로운 리네임들이 할당된다. 추가적으로, 각각의 op에 대해 HazardMask 데이터가 도시된다. 다양한 실시예들에서 요구되는 바와 같이, 각각의 엔트리의 상태 필드로서 예시된 다른 목적들을 위해 각각의 op 큐 엔트리에 다양한 다른 정보가 저장될 수 있다. 일 실시예에서, op 큐 엔트리들 내의 HazardMask 데이터 및 새롭게 디코딩된 op에 대한 대응하는 데이터는, op 큐(38)에 기록될 때, 새롭게 디코딩된 op에 대한 종속성 벡터 또는 벡터들을 생성하는 데 사용될 수 있다. 종속성 벡터는 각각의 op 큐 엔트리에 대한 비트를 포함할 수 있으며, 이는 op가 Z 메모리 위험들로 인해 해당 op 큐 엔트리에서 op에 의존하는지 여부를 나타낸다. op들은 예를 들어, 그들의 소스 피연산자들이 준비될 때까지 그리고 종속성 벡터들이 클리어될 때까지 대기할 수 있고, 그 후에 실행 회로(30)로의 발행을 위해 스케줄러 회로(36)에 의해 선택될 수 있다. 다른 조건들이 또한 발행을 제어할 수 있는데, 예를 들어, 더 오래된 op들이 더 신행의 op들 등보다 발행에 대해 선호될 수 있다. 스케줄러 회로(36)는 어느 op들이 발행에 이용가능한지를 결정하고 발행에 대해 op들을 스케줄링하는 것을 담당할 수 있다.
발행된 op는 데이터 버퍼(40)로부터 그들의 소스 피연산자들을 판독하고 실행을 위해 실행 회로(30) 내의 PE들(42)로 진행할 수 있다. PE들(42)은 특정된 동작을 수행하여, 결과들을 생성하고, PE들(42)에 구현된 로컬 Z 메모리 위치들에 결과들을 기록할 수 있다.
메모리 액세스 인터페이스(32)는 메모리 op 큐(46) 및 메모리 스케줄러 회로(44)를 포함할 수 있다. 스케줄러 회로(36)와 유사하게, 메모리 스케줄러 회로(44)는 메모리 op들의 소스 피연산자들이 준비될 때까지 대기하고 메모리 op들을 발행할 수 있다. 메모리 스케줄러 회로(44)는 (예를 들어, 메모리 op들에 의해 액세스되는 어드레스들을 비교하는 것에 기초하여 종속성 벡터들 또는 다른 메커니즘들을 사용하여) 동일한 어드레스에 대한 메모리 op들이 프로그램 순서로 발행되는 것을 보장할 수 있다. 소스 피연산자들은 저장 메모리 op들에 대한 저장 데이터일 수 있다. 이러한 실시예에서, 메모리 어드레스들이 CPU 프로세서(12)에 의해 제공되기 때문에, 부하 메모리 op들은 특정 소스 피연산자들을 갖지 않을 수 있다. 그러나, 부하 메모리 op들은, 존재하는 경우, 어드레스 종속성들에 기초하여 여전히 스케줄링될 수 있다. 저장 op들은 데이터 버퍼(40)로부터 그들의 소스 피연산자들을 판독할 수 있고, 이는 메모리 액세스 인터페이스(32)로부터 메모리 op/어드레스와 함께 데이터를 L2캐시(14)에 전달할 수 있다. 부하 op들의 경우, L2 캐시(14)는 데이터 버퍼(40)(및 부하 op들을 송신할 때 메모리 액세스 인터페이스(32)에 의해 L2 캐시(14)에 송신될 수 있는 데이터가 기록될 어드레스)에 데이터를 제공할 수 있다. 부하 op 데이터를 데이터 버퍼(40)에 기록하는 것은 또한, 그러한 메모리 위치들 내의 소스 데이터가 이제 이용가능하다는 것을 나타내기 위해, op 큐(38)/디코딩 유닛(34)에 통신될 수 있다.
PE들(42)의 8 x 8 그리드의 예가 다음의 실시예들에서 사용된다. 추가의 예로서, 피연산자들의 X 및 Y 벡터는 64 바이트의 데이터일 수 있다. 즉, 피연산자로서 사용될 수 있는 X 및 Y 메모리들(24, 26)의 엔트리는 64 바이트일 수 있다. 다양한 실시예들에서, X 및 Y 메모리들(24, 26)은 임의의 수의 엔트리들을 구현할 수 있다. 다른 실시예들은 더 큰 또는 더 작은 엔트리들을 사용할 수 있다. 이 예는 8 바이트(64 비트)의 (주어진 PE(42)에 대한) 최대 결과 크기를 추가로 포함할 수 있다. 따라서, PE 어레이로부터의 최대 총 결과는 512 바이트일 수 있다. 다른 실시예에서, 주어진 PE(42)에 대한 최대 결과 크기는 16 바이트(128 비트)일 수 있고, 최대 총 결과는 1024 바이트일 수 있다. 일 구현에서, 일부 명령어들은 PE 어레이를 통한 다수의 패스들에 걸쳐 실행될 수 있고, 다수의 패스들에 걸쳐 각각의 PE(42)로부터 최대 64 바이트의 결과를 생성할 수 있다. Z 메모리(28)는 다수의 결과들이 내부에 저장될 수 있도록 512 바이트의 배수일 수 있다. 일례에서, Z 메모리(28)는 4096 바이트(4 킬로바이트)를 가질 수 있다. 따라서, 주어진 PE(42)는 Z 메모리(28) 내의 8개의 64 비트(8 바이트) 위치들을 업데이트할 수 있다. 따라서, 각각의 PE(42)에서 구현되는 Z 메모리(28)의 부분은 8개의 64 바이트 엔트리들일 수 있다. 아래에서 더 상세히 설명될 바와 같이, 엔트리들은 주어진 명령어의 피연산자 크기에 따라 상이하게 어드레스될 수 있다. 다른 실시예들은 PE들(42)의 그리드의 크기들 및 구성들, 피연산자 크기들, X, Y 및 Z 메모리의 양 등을 변화시킬 수 있음에 유의한다.
도 3은 8 x 8 PE들(42)의 그리드, 및 행렬 모드 명령어에 대한 데이터의 분포를 예시하는 블록도이다. 도 3에서, X 피연산자는 그리드의 최상부에 걸쳐 예시되며, 피연산자 요소들 X0 내지 X7로서 표시된다. X0 내지 X7 각각은 이 실시예에서 64 바이트 X 피연산자의 8 바이트일 수 있다. 즉, 그리드 내의 자신의 위치에 기초하여, 주어진 PE(42)는 X 피연산자로부터 X0 내지 X7요소들 중 하나를 수신할 수 있다. 보다 구체적으로, 도 3에 도시된 바와 같은 PE들(42)의 주어진 열은 동일한 X 요소를 수용할 수 있다. 유사하게, Y 피연산자는 도 3에서 그리드의 좌측 에지를 따라 예시되며, Y0 내지 Y7로 표시되며, 여기서 Y0 내지 Y7 각각은 64 바이트 Y 피연산자의 8 바이트일 수 있다. 8 바이트 피연산자 요소는, 예를 들어 명령어의 피연산자 크기에 따라, 단일 8 바이트 벡터 요소, 2개의 4 바이트 벡터 요소들, 또는 4개의 2 바이트 벡터 요소들일 수 있다.
도 4는 8 x 8 PE들(42)의 그리드, 및 벡터 모드 명령어에 대한 데이터의 분포를 예시하는 블록이다. 보다 구체적으로, 일 실시예에서, 코프로세서(10)는, 2개의 벡터 명령어들이 그리드의 상이한 행들을 사용할 때 2개의 벡터 명령어들의 발행을 동시에 지원한다(예를 들어, 타겟 Z 메모리 위치들이 그리드의 상이한 행들에 있음). 따라서, X 및 Y 피연산자들의 2개의 세트들이 PE들(42)에 라우팅될 수 있다. 보다 구체적으로, PE들(42)의 각각의 열은 각각의 동작에 대해 X 및 Y 피연산자 요소(예를 들어, 도 4의 PE들의 최좌측 열에 대해 하나의 벡터 동작에 대한 X0 및 Y0 및 다른 벡터 동작에 대한 X0' 및 Y0')를 수신할 수 있다.
도 5 내지 도 7은 실행 회로(30)의 다양한 실시예들을 예시한다. 예시된 실시예들에서, PE 어레이는 아래에서 더 상세히 논의되는 바와 같이, 다양한 구성들을 갖는 PE 그룹들로 분할될 수 있다. 다른 실시예들이 또한 구현될 수 있고; 예시된 실시예들은 총망라하고자 하는 것이 아니다. 예를 들어, 주어진 PE 그룹 내의 PE들(42)의 수, PE 그룹 내의 PE들(42)의 배열, 및 실행 회로(30) 내의 PE 그룹들의 수는 변할 수 있다.
도 5는 실행 회로(30)의 일 실시예의 보다 상세한 블록도이다. 예시된 실시예에서, 실행 회로(30)는 PE 그룹들(50)의 세트 및 PE 그룹들(50)에 결합된 제1 제어 회로(52)를 포함한다.
PE 그룹들(50) 중 하나는 도 5에 분해도로 도시되어 있고, 다른 PE 그룹들(50)은 유사할 수 있다. 보다 구체적으로, 각각의 PE 그룹(50)은 분해된 PE 그룹(50)에 도시된 바와 같이 구성될 수 있다. 분해도에서, PE 그룹(50)은 PE들(42)의 어레이를 포함한다. PE들(42)의 어레이는 실행 회로(30)를 형성하는 PE들(42)의 전체 어레이의 일부를 구현할 수 있다. 예시된 실시예에서, 각각의 PE 그룹(50)은 PE들(42)의 4 x 4 어레이를 포함하고, 따라서, PE들(42)의 전체 어레이는, 이 실시예에서, 8개의 행들 x 8개의 열들 내의 총 64개의 PE들에 대해 8 x 8이다. 각각의 PE 그룹(50)은 그 PE 그룹(50) 내의 PE들(42)에 결합된 제2 제어 회로(54)를 포함할 수 있다.
PE들(42) 중 하나는 도 5에 분해도로 도시되어 있고, 다른 PE들(42)은 유사할 수 있다. 보다 구체적으로, PE들(42) 각각은 분해된 PE(42)에 도시된 바와 같이 구성될 수 있다. 분해도에서, PE(42)는 ALU 회로(58), 로컬 Z 메모리(60) 및 제3 제어 회로(56)를 포함한다. ALU 회로(58)는 일반적으로, 코프로세서(10)에 대해 정의된 명령어들에 의해 특정될 수 있는 ALU 동작들을 수행하는 회로를 포함할 수 있다. 일 실시예에서, 코프로세서(10)는 융합된 곱셈-가산(또는 곱셈-누산) 동작들을 지원하고, 따라서 ALU 회로(58)는 곱셈기(62) 및 가산기(64)를 포함한다. X 및 Y 피연산자들은 피연산자들을 곱할 수 있는 곱셈기(62)에 제공될 수 있다. 가산기(64)는 곱셈 결과 및 Z 피연산자를 수신할 수 있고, 이는 로컬 Z 메모리(60)의 엔트리들 중 하나의 콘텐츠일 수 있다. 가산기(64)는 곱셈 결과 및 Z 피연산자를 가산하여 결과를 생성할 수 있다. 결과는 Z 피연산자가 판독된 Z 메모리(60) 엔트리에 다시 기록될 수 있다. 따라서, 다수의 명령어들에 걸쳐, 다수의 곱셈들의 결과들은 Z 메모리(60)의 엔트리에 누산될 수 있다. 일부 실시예들은 추가적인 명령어들을 사용하여 단지 곱셈 또는 덧셈만을 수행하는 것을 지원할 수 있다. 또한 추가로, 다른 실시예들은 로직 동작들(AND, OR, NOT 등), 시프트 동작들, 회전 동작들 등과 같은 다른 ALU 동작들을 지원할 수 있다. 그러한 실시예들은 그러한 명령어들을 위해 추가적인 ALU 회로(58)를 이용할 수 있다.
제어 회로들(52, 54, 56)은 각각 실행 회로(30)에서의 명령어들의 전체 실행에 영향을 미치기 위해 다양한 제어 동작들을 구현할 수 있다. 예를 들어, 제어 회로(52)는 제어들의 클로킹, 및 PE 그룹들(50)로의 X 및 Y 피연산자들의 다중화/데이터 라우팅을 담당할 수 있다. 예를 들어, 도 3에 예시된 바와 같이, 행렬 명령어는 주어진 열의 각각의 PE(42)에 동일한 X 피연산자 요소를, 그리고 주어진 행의 각각의 PE(42)에 동일한 Y 피연산자 요소를 제공할 수 있다. 다른 한편으로, 벡터 명령어는 벡터 동작을 수행하는(예를 들어, 도 4에 도시된 각각의 열 a에 동일한 X 및 Y 피연산자 요소들을 공급함) 주어진 행의 각각의 PE(42)에 상이한 Y 피연산자 요소 및 상이한 X 피연산자 요소를 제공한다. 제어 회로(52)는 각각의 명령어에 대해 정확한 피연산자 요소들을 라우팅하기 위한 제어를 제공할 수 있다. 일 실시예에서, X 및 Y 피연산자 요소들은 주어진 X 또는 Y 엔트리 내의 임의의 바이트 오프셋에서 시작하여 판독될 수 있다(그리고 나머지 피연산자들은 주어진 엔트리 및 다양한 오프셋들을 갖는 다음 엔트리로부터 판독될 수 있다). 제어 회로(52)는 PE들(42)의 제1 피연산자를 제1 행 또는 열에 정렬시키고 나머지 피연산자들을 정렬시키는 것을 담당할 수 있다. 대안적으로, 정렬은 데이터 버퍼(40) 내의 또는 데이터 버퍼(40)와 실행 회로(30) 사이의 회로에 의해 관리될 수 있다.
제어 회로(54)는 PE 그룹(50) 내의 어느 PE들(42)이 활성인지를 제어하는 것을 담당할 수 있다. 예를 들어, 앞서 언급된 바와 같이, 일부 실시예들은 코프로세서(10)에 발행된 명령어 자체의 일부로서 주어진 명령어에 대한 입력 벡터 요소들의 마스킹을 지원할 수 있다. 이러한 실시예들에서, 마스크들은 제어 회로(54)에 의해 프로세싱되어, 다양한 PE들(42)이 활성(명령어에 대해 특정된 동작들을 수행하고 마스킹되지 않은 입력 벡터 요소들에 대해 로컬 Z 메모리(60)에서 타겟 Z 엔트리 또는 엔트리들을 업데이트함) 또는 비활성(동작들을 수행하지 않고, 마스킹되는 입력 벡터 요소들에 대한 로컬 Z 메모리(60)를 업데이트하지 않음)이 되게 할 수 있다.
제어 회로(56)는 ALU 회로(58)에 대한 파이프라인 및 로컬 Z 메모리(60)의 판독 및 기록을 제어하는 것을 담당할 수 있다. 로컬 Z 메모리(60)는 주어진 PE(42)가 업데이트할 수 있는 Z 메모리 위치들을 포함한다. 즉, 코프로세서(10)에 제공될 수 있는 임의의 명령어 인코딩들에 걸쳐, Z 메모리(60)는 주어진 PE(42)에 의해 업데이트될 위치들을 포함한다. 또한, 다른 PE(42)는 로컬 Z 메모리(60) 내의 위치들을 업데이트하지 못할 수 있다.
도 5에서, 추가의 Z 메모리(60)는 점선 형태로 도시되어 있다. 일 실시예에서, 코프로세서(10)는 다수의 컨텍스트들을 지원할 수 있다. 로컬 Z 메모리(60)는 각각의 컨텍스트에 대한 위치들을 가질 수 있다. 따라서, 예를 들어, 도 5에 도시된 바와 같이 2개의 컨텍스트들이 존재할 수 있다. 그러나, 다른 실시예들은 2개 초과의 컨텍스트들을 지원할 수 있다. 코프로세서(10)에 발행된 주어진 명령어는 주어진 명령어에 대한 컨텍스트들 사이에서 선택하기 위한 컨텍스트 ID를 포함할 수 있다. 위험은 또한 컨텍스트를 고려할 수 있다(예를 들어, 상이한 컨텍스트들에서 명령어들 사이에 어떠한 위험도 검출되지 않을 수 있음). 일 실시예에서, 코프로세서(10)를 공유할 수 있는 각각의 프로세서에 대한 하나의 컨텍스트가 존재할 수 있다.
가산기(64)에 데이터를 공급하고 가산기(64)로부터 데이터를 수신하는 것에 추가하여, PE(42)는 또한 데이터를 제공할 수 있다(예를 들어, 도 5에서 우측으로의 화살표). 데이터 출력은 (Z 메모리(28)로부터 X 메모리(24) 또는 Y 메모리(26)로 데이터를 이동시키는) 추출 명령어들에 대한 결과들을 기록하기 위해 데이터 버퍼(40)에 다시 제공될 수 있다. 데이터 출력은 또한 Z 메모리(28)로부터의 데이터를 메인 메모리에 기록하는 Z 명령어들을 저장하기 위해 사용될 수 있다. 일 실시예에서, 디코딩 유닛(34)은 부하 Z를 디코딩하고 Z 명령어들을 2개의 op들: 메모리와 임시 레지스터 사이에서 데이터를 이동시키는 부하/저장 op, 및 임시 레지스터와 Z 메모리 사이에서 데이터를 이동시키는 이동 op로 저장할 수 있다. 로컬 Z 메모리(60)로부터 데이터 버퍼(40)로의 출력은 Z 메모리로부터 임시 레지스터로의 데이터의 이동을 지원할 수 있다. 추가의 세부사항들은 도 10과 관련하여 아래에서 제공된다.
도 6은 실행 회로(30)의 다른 실시예를 예시하는 블록도이다. 이 실시예에서, PE 어레이는 제어 회로(52)와 함께 PE 그룹들(66)의 열들로부터 형성될 수 있다. PE 그룹들(66) 중 하나는 도 6에 분해도로 예시되어 있고, 다른 PE 그룹들(66)은 유사할 수 있다. 보다 구체적으로, 각각의 PE 그룹(66)은 분해된 PE 그룹(66)에 도시된 바와 같이 구성될 수 있다. PE 그룹(66)에 대해 PE들(42)의 2개의 열들이 도 6에 도시되어 있고, 따라서 4개의 PE 그룹들(66)은 PE들(42)의 8 x 8 그리드를 제공한다. 제어 회로(54)는 또한 각각의 PE 그룹(66)에 대해 포함된다.
PE들(42) 중 하나는 도 6에 분해도로 도시되어 있고, 다른 PE들(42)은 유사할 수 있다. 보다 구체적으로, PE들(42) 각각은 분해된 PE(42)에 도시된 바와 같이 구성될 수 있다. PE(42)는 도 5에 도시된 PE(42)와 동일할 수 있고, 도 5 및 PE(42)에 관한 위의 논의는 도 6에 또한 적용된다.
도 7은 실행 회로(30)의 또 다른 실시예의 블록도이다. 이 실시예에서, PE 어레이는 제어 회로(52)와 함께 PE 그룹들(68)의 행들로부터 형성될 수 있다. PE 그룹들(68) 중 하나는 도 7에 분해도로 예시되어 있고, 다른 PE 그룹들(68)은 유사할 수 있다. 보다 구체적으로, 각각의 PE 그룹(68)은 분해된 PE 그룹(68)에 도시된 바와 같이 구성될 수 있다. PE 그룹(68)에 대해 PE들(42)의 2개의 행들이 도 7에 도시되어 있고, 따라서 4개의 PE 그룹들(68)은 PE들(42)의 8 x 8 그리드를 제공한다. 제어 회로(54)는 또한 각각의 PE 그룹(68)에 포함된다.
PE들(42) 중 하나는 도 7에 분해도로 도시되어 있고, 다른 PE들(42)은 유사할 수 있다. 보다 구체적으로, PE들(42) 각각은 분해된 PE(42)에 도시된 바와 같이 구성될 수 있다. PE(42)는 도 5에 도시된 PE(42)와 동일할 수 있고, 도 5 및 PE(42)에 관한 위의 논의는 도 7에 또한 적용된다.
PE 그룹들(50, 66, 또는 68)은, Z 메모리가 각각의 PE(42)에 로컬이고, 제어 회로들이 PE 그룹들 및 PE들에 또한 분배되기 때문에, 다소 독립적일 수 있다. 따라서, PE 그룹들(50, 66, 또는 68)은 일부 유연성으로 집적 회로 상에 물리적으로 배치될 수 있으며, 이는 전체적으로 코프로세서(10)의 구현을 용이하게 할 수 있다. 예를 들어, PE 그룹들에 대한 배선 혼잡을 완화시키기 위해 PE 그룹들(50, 66, 또는 68) 사이에 공간이 생성될 수 있다. PE 그룹들(50, 66, 또는 68)은 이용가능한 공간 등에 맞도록 회전되거나 또는 달리 배향될 수 있다.
도 3 및 도 4에 기초하여, PE 그룹들(50, 66, 및 68)은 상이한 배선 요건들을 가질 수 있다. 예를 들어, 주어진 PE 그룹(50)은 행렬 모드에 대해 32 바이트의 X 피연산자 요소들 및 32 바이트의 Y 피연산자 요소들을 수신할 수 있고, 벡터 모드에 대해 2 세트의 32 바이트의 X 피연산자 요소들 및 2 세트의 32 바이트의 Y 피연산자 요소들을 수신할 수 있다. 따라서, 최악의 경우의 배선 요건들은 PE 그룹(50)에 대해 X 피연산자 요소들(벡터 모드, 2x32x8)에 대한 512개의 와이어들 및 Y 피연산자 요소들에 대한 512개의 와이어들(벡터 모드 2x32x8)이다. 주어진 PE 그룹(66)은 행렬 모드에 대해 16 바이트의 X 피연산자 요소들 및 64 바이트의 Y 피연산자 요소들을 수신할 수 있고, 벡터 모드에 대해 2 세트의 16 바이트의 X 피연산자 요소들 및 2 세트의 16 바이트의 Y 피연산자 요소들을 수신할 수 있다. 따라서, PE 그룹(66)에 대한 최악의 경우의 배선 요건들은 X 피연산자 요소들(벡터 모드, 2x16x8)에 대한 256개의 와이어들 및 Y 피연산자 요소들에 대한 512개의 와이어들(행렬 모드 64x8)이다. 주어진 PE 그룹(68)은 행렬 모드에 대해 64 바이트의 X 피연산자 요소들 및 16 바이트의 Y 피연산자 요소들을 수신할 수 있고, 벡터 모드에 대해 2 세트의 64 바이트의 X 피연산자 요소들 및 2 세트의 64 바이트의 Y 피연산자 요소들을 수신할 수 있다. 따라서, PE 그룹(68)에 대한 최악의 경우의 배선 요건들은 X 피연산자 요소들(벡터 모드, 2x64x8)에 대한 1024개의 와이어들 및 Y 피연산자 요소들에 대한 1024개의 와이어들(행렬 모드 2x64x8)이다.
배선 요건들에 기초한 변형들에 추가하여, (예를 들어, 도 15 내지 도 17과 관련하여 아래에서 설명되는 바와 같이) 감소된 크기의 그리드를 지원하는 실시예들은 벡터 또는 행렬 모드 명령어를 완료하는 데 필요한 패스들의 수에서 트레이드오프들을 가질 수 있다. 따라서, 상이한 실시예들은 PE 그룹들에 대해 상이한 형태들을 사용하여, 주어진 구현에 대해 원하는 대로 다양한 이점들 및 비용들을 트레이드오프하도록 선택할 수 있다.
도 8은 코프로세서(10)에 대한 Z 메모리 위험의 일 실시예의 블록도이다. 예시된 실시예에서, Z 메모리(28)는 64개의 데이터 행들로서 어드레스되며, 따라서 주어진 코프로세서 명령어는 6 비트 목적지 식별자(도 2의 DestID)를 포함할 수 있다. 4 킬로바이트 Z 메모리(28)의 경우, 각각의 행은 64 바이트의 데이터를 포함할 수 있다. 8개의 PE들(42)의 8개의 행들이 존재하기 때문에, 각각의 PE(42)는 Z 메모리(28)의 8개의 행들을 포함할 수 있고, PE(42)가 포함된 열 번호만큼 행의 시작으로부터 오프셋된, 그 행의 8개의 바이트들을 포함할 수 있다.
피연산자 크기에 따라, 주어진 행렬 명령어는 Z 메모리(28)의 가변 수의 행들을 판독 및/또는 업데이트할 수 있는데, 이는 피연산자 크기가 감소함에 따라 동작들의 수가 증가하기 때문이다. 즉, X 메모리(24) 및 Y 메모리(26)의 주어진 엔트리는 코프로세서(10)에 의해 지원되는 가장 큰 크기의 피연산자를 열 또는 행의 각각의 PE(42)에 제공하기에 충분한 저장소를 포함할 수 있다(예를 들어, 일 실시예에서 8개의 피연산자들). 따라서, 가장 큰 피연산자 크기를 갖는 명령어를 실행할 때 64개의 결과들이 생성될 수 있다. 두번째로 큰 피연산자 크기는 (피연산자 크기들이 2의 거듭제곱에 의해 관련되기 때문에) 가장 큰 피연산자 크기의 절반이다. 따라서, X 및 Y 메모리들에서 동일한 공간에 2배의 많은 피연산자들이 제공된다. X의 각각의 피연산자에 Y의 각각의 피연산자가 곱해지기 때문에, 4배의 많은 동작들이 수행되어, 4배의 많은 결과들을 생성할 수 있다. 결과들의 더 작은 크기에 대해 조정하면, 결과들을 기록하기 위해(그리고 또한 누산을 위한 값들을 공급하기 위해) 2배의 많은 공간이 소비된다. 유사하게, 세번째로 큰 피연산자 크기는 가장 큰 피연산자 크기의 1/4이고, 16배 많은 결과들을 생성하여 공간의 4배를 점유하는 등등이다. 벡터 동작들은 Z 메모리(28)의 하나의 행을 판독/기록한다. 부하/저장 명령어들은 LoadZI/StoreZI 명령어들에 대해 하나의 행 또는 2개의 인접한 행들에 영향을 미친다. 명령어 세트는 또한 Z 메모리(28)로부터 X 메모리(24) 또는 Y 메모리(26)로 데이터를 이동시키는 추출 명령어들을 지원할 수 있다. 일 실시예에서, X로의 추출 명령어는 Z의 하나의 행이 X의 하나의 행으로 이동되는 것을 허용하고, 따라서 하나의 행이 영향을 받는다. Y로의 추출 명령어는 피연산자 크기를 가질 수 있고, 유사한 크기의 ALU 동작들과 유사하게 다수의 행들을 추출할 수 있다. 일 실시예에서, 곱셈-누산 동작들은 64, 32, 또는 16 비트(FP 64, FP 32, 또는 FP 16)의 부동 소수점 값들 또는 16 비트의 정수 값들(MAC 16)일 수 있다.
명령어 세트는, 표(70)의 중간 열에 도시된 바와 같이, 누산 피연산자들에 대해 판독되고 다양한 크기들의 결과들에 의해 기록되는 Z 메모리(28)의 엔트리들이 Z 메모리(28)에서 규칙적인 패턴으로 분리되도록 특정할 수 있다. 즉, 64 비트 피연산자 크기들은 8번째 행마다 업데이트하고, 32 비트 피연산자 크기들은 4번째 행마다 업데이트하고, 16 비트 피연산자 크기들은 2번째 행마다 업데이트한다. 일 실시예에서, 명령어 세트는 또한, Z 메모리(28)의 모든 행을 업데이트하는 32 비트 누산을 갖는 16 비트 피연산자 크기를 지원한다. 업데이트될 행들은 DestID에 기초한다. 즉, 제1 결과에 의해 업데이트된 행은 DestID에 의해 특정되고, 업데이트될 다음 행은 DestID + 업데이트들 사이의 행들의 수 등이다. 따라서, 업데이트되는 행들의 수에 따라, 목적지 ID의 오직 일부만이 위험에 대해 고려될 필요가 있다. 8번째 행마다 업데이트되는 경우, DestID의 3개의 최하위 비트들은 명령어에 의해 판독/업데이트된 행들을 식별한다. 4번째 행마다 업데이트되면, DestID의 2개의 최하위 비트들은 판독/업데이트된 행들 등을 식별한다. 따라서, 표의 처음 4개의 행들의 HazardMask 열에 도시된 바와 같이, 최상위 비트들에서 0들을 갖고 최하위 비트들에서 1들(또는 모든 행이 판독/업데이트되는 경우 모두 0들)을 갖는 마스크가 생성될 수 있다. 단일 행이 판독/업데이트될 때, 전체 DestID가 위험에 사용되며(모든 행들의 HazardMask), 2개의 인접한 행들이 업데이트될 때, DestID의 최하위 비트는 위험에 사용되지 않는다(표(70)의 마지막 3개의 행들).
디코딩 유닛(34)은 명령어를 디코딩할 때 각각의 명령어에 대해 HazardMask를 생성할 수 있고, 명령어와 함께 HazardMask를 op 큐(38)에 기록할 수 있다. 추가적으로, 기록되고 있는 명령어의 HazardMask 및 op 큐(38)에 이미 있는 명령어들의 HazardMask는 위험들을 검출하기 위해 기록되고 있는 명령어의 DestID와 op 큐(38)의 명령어들의 DestID를 비교하는 데 사용될 수 있다. 더 구체적으로, 기록되고 있는 명령어의 HazardMask는 큐 내의 주어진 명령어의 HazardMask와 논리적으로 AND될 수 있고, 대응하는 마스크는 기록된 명령어의 DestID 및 주어진 명령어의 DestID를 마스킹하는 데 사용될 수 있다. 마스킹된 DestID들은 주어진 명령어에 대해 기록되고 있는 명령어의 종속성인 위험을 검출하기 위한 등식에 대해 비교될 수 있다(방정식 72). 방정식(72)은 기록되고 있는 명령어에 대한 Z 위험 종속성 벡터를 생성하기 위해 큐 내의 각각의 명령어 및 기록되고 있는 명령어에 대해 평가될 수 있다. 스케줄러 회로(36)는, Z 위험 종속성 벡터 내의 세트 비트들에 의해 식별된 명령어들이 발행되고 위험을 클리어하기에 충분히 멀리 파이프라인을 클리어할 때까지 명령어의 스케줄링이 기록되는 것을 방지할 수 있다. 판독/기록 후의 기록 위험들에 대해, 선행 명령어의 발행은 위험을 클리어하기에 충분하다. 기록 후 판독 위험들에 대해, 선행 명령어는 적어도, 누산을 위해 판독된 Z 메모리(예를 들어, 일 실시예에서, 가산 파이프라인의 제1스테이지)와 Z 메모리가 기록된 스테이지(예를 들어, 일 실시예에서, 가산 파이프라인의 마지막 스테이지) 사이의 파이프라인에 존재하는 사이클들의 수만큼 진행할 필요가 있다.
도 9는 코프로세서(10)에 대한 Z 메모리 위험의 다른 실시예의 블록도이다. 예시된 실시예에서, Z 메모리(28)는 Z 피연산자 크기에 의존하는 행들의 수 및 행 당 뱅크들의 수로서 어드레스된다. Z 피연산자 크기는, 16 비트 X/Y 피연산자들을 사용하지만 32 비트 누산을 사용하는 명령어들을 제외하고, X/Y 피연산자 크기와 동일할 수 있으며, 이 경우 Z 피연산자 크기는 32 비트일 수 있다. 도 9에서, 표(74)는 다양한 요소 크기들을 예시한다. 이 실시예에서, 8 비트 요소 크기가 또한 지원된다. 요소 크기가 감소함에 따라, Z 메모리(28)의 행들의 수는 증가하고 뱅크들의 수는 감소한다. 따라서, 64 비트 요소 크기는 8개의 뱅크들/행을 갖는 8개의 행들로서 어드레스되고; 32 비트 요소 크기는 4개의 뱅크들/행의 16개의 행들로서 어드레스되고; 16 비트 요소 크기는 2개의 뱅크들/행의 32개의 행들로서 어드레스되고, 8 비트 요소 크기는 행 당 하나의 뱅크를 갖는 64개의 행들로서 어드레스된다.
물리적으로, Z 메모리(28)는 다양한 어드레싱 모드들에 대해 변화하지 않는다. 대신에, 뱅크들은 기존의 Z 메모리(28)의 교번 엔트리들에 맵핑된다. 따라서, 로컬 Z 메모리(60)의 경우, 8개의 뱅크들은 Z 메모리(60)의 8개의 엔트리들에 맵핑되고, 단일 엔트리는 명령어에 의해 특정된 뱅크 번호에 따라 기록될 수 있다(예를 들어, DestID는 뱅크 번호일 수 있거나 또는 뱅크 번호를 포함할 수 있다). 4개의 뱅크의 경우에, 처음 4개의 엔트리들은 4개의 뱅크들에 맵핑되고, 마지막 4개의 엔트리들은 맵핑을 반복한다(예를 들어, 엔트리 4는 뱅크 0이고, 엔트리 5는 뱅크 1인 것 등). 따라서, 명령어는 뱅크 번호에 따라 2개의 로컬 Z 메모리 엔트리들을 기록할 수 있다. 2개의 뱅크의 경우에, 뱅크들은 교번 엔트리들에 맵핑되고, 4개의 엔트리들은 뱅크 번호에 따라 기록될 수 있다. 하나의 뱅크의 경우에 대해, 로컬 Z 메모리(60)의 모든 엔트리들이 기록될 수 있다.
따라서, 도 9의 실시예에 대한 HazardMask는 2개의 마스크들: 명령어에 의해 기록되는 Z 메모리(60) 엔트리들을 식별하는 ZRowMask 및 실행 회로(30) 내의 PE들(42)의 어느 행들이 명령어에 대해 활성인지를 식별하는 PERowMask를 포함할 수 있다.
ZRowMask는 마스크 내의 1들의 수를 나타내는 Z 피연산자 크기에 기초하여 생성될 수 있다. 뱅크 번호는 마스크 내의 1들의 위치를 나타낸다. 따라서, 표(74)의 ZRowMask 열에 도시된 바와 같이, ZRowMask는 디폴트 값을 가질 수 있고, 명령어에 대해 특정된 뱅크 번호(이 실시예에서는 0 내지 뱅크들-1의 수)에 기초하여 우측 시프트될 수 있다. 이 실시예에서, 뱅크 번호는 DestID일 수 있다. 따라서, 예를 들어, 뱅크 1에 대한 ZRowMask는 64 비트 피연산자 크기에 대해 01000000, 32 비트 피연산자 크기에 대해 01000100, 16 비트 피연산자 크기에 대해 01010101, 및 8 비트 피연산자 크기에 대해 11111111일 수 있다. 8 비트 피연산자 크기의 경우, 모든 엔트리들이 판독/기록되고, 따라서 시프트가 없다.
행렬 동작들의 경우, 모든 행들이 활성일 수 있고, 그에 따라, PERowMask는 모두 1일 수 있고, 벡터 동작들의 경우(하나의 행이 업데이트됨), PERowMask는 활성인 행에 대해 단일 세트 비트를 가질 수 있다. 각각의 경우에 대한 PERowMask는 도 9의 표(74) 아래에 도시된다(참조 번호 78). 일 실시예에서, 코프로세서(10)에 대한 명령어들은 또한 마스크들을 통해 PE들의 활성 행들 및 열들을 특정할 수 있다. 실시예에서, PERowMask는 위험을 더 정확하게 만들기 위한 명령어에 대한 행 마스크에 기초하여 조정될 수 있다. 그러나, 다른 실시예들은 행 마스크를 고려할 필요가 없는데, 그 이유는 위험이 행 마스크 없이 정확한 결과를 생성할 것이기 때문이다(그러나 일부 명령어들을 필요한 것보다 더 오래 지연시킬 수 있음).
방정식(76)은 op 큐(38)에 기록되는 명령어 및 op 큐(38)에 이미 있는 주어진 명령어에 대한 ZRowMask 및 PERowMask에 기초한 위험 검출을 예시한다. PERowMask들이 적어도 하나의 공통 세트 비트를 갖고 ZRowMask들이 적어도 하나의 공통 세트 비트를 갖는 경우, 위험이 검출될 수 있다. 이는, 각각의 마스크들을 논리적으로 AND하고, 결과들에서 적어도 하나의 세트 비트를 검출하기 위해 결과들을 비트 단위로 OR함으로써 표현된다. 도 8과 관련하여 위의 논의에서와 같이, 방정식(76)의 결과가 위험이면, 주어진 명령어에 대응하는 비트가 기록되고 있는 명령어의 종속성 벡터에 설정될 수 있다. 기록되고 있는 명령어 및 op 큐(38)에 이미 있는 각각의 명령어에 대한 방정식(76)을 평가하는 것은 이전에 논의된 바와 같이 종속성 벡터를 생성하는 데 사용될 수 있다.
이제 도 10을 참조하면, 일 실시예에 대해, Z 메모리(28)에 대한 부하 및 저장 명령어들의 처리를 예시하는 흐름도가 도시되어 있다. Z 메모리(28)가 PE들(42)에 분배되기 때문에, 이전에 설명된 바와 같이, Z 메모리(28)를 타겟팅하는 부하/저장 명령어들은 X 메모리(24) 및 Y 메모리(26)를 타겟팅하는 부하/저장 명령어들(이는 데이터 버퍼(40)를 사용하여 완료됨)과는 달리 실행 회로(30)에 발행될 수 있다. 실시예에서, 디코딩 유닛(34)은 Z 메모리 명령어들에 대한 부하/저장을 검출할 수 있고, 이들을 2개의 op들: 메모리 액세스 인터페이스(32)에 의해 실행되는, 임시 레지스터와 메인 메모리 사이에서 데이터를 이동시키는 부하/저장 op, 및 PE들(42)에 의해 실행되는, 임시 레지스터와 Z 메모리(28) 사이에서 데이터를 이동시키는 이동 op로 디코딩할 수 있다. 임시 레지스터는 X 메모리(24) 및 Y 메모리(26)와 논리적으로 분리된 레지스터일 수 있지만, X 메모리(24) 및 Y 메모리(26)에 추가하여 데이터 버퍼(40)의 엔트리들로 리네이밍될 수 있다. 임시 레지스터들은, 코프로세서(10)에 대한 명령어들을 기록하는 프로그래머가 임시 레지스터들을 특정하지 않을 수 있다는 점에서 구조화되지 않을 수 있다. 그러나, 임시 레지스터들은 코프로세서(10) 하드웨어에 의해 사용될 수 있다.
보다 구체적으로, 디코딩 유닛(34)이 부하 Z 명령어를 디코딩하면(결정 블록(80), "예" 레그), 디코딩 유닛(34)은 CPU 프로세서(12)로부터 부하 Z 명령어가 제공되는 메모리 어드레스 및 목적지로서 디코딩 유닛(34)에 의해 할당된 임시 레지스터를 갖는 부하 op를 생성할 수 있고, 부하 Z 명령어가 제공된 목적지 ID를 사용하여 데이터를 임시 레지스터로부터 Z 레지스터(28)로 이동시키는 이동 op가 이어진다(블록(82)). 임시 레지스터는, X 및 Y 메모리 엔트리들을 리네이밍하는 것과 유사하게, 데이터 버퍼(40) 내의 이용가능한 엔트리로 리네이밍될 수 있다. 디코딩 유닛(34)은 부하 op를 메모리 액세스 인터페이스(32) 내의 메모리 op 큐(46)에 전송할 수 있고(블록(84)), 이동 op를 op 큐(38)에 전송할 수 있다(블록(86)). 부하 op는 메모리 액세스 인터페이스(34)에 의해 다른 부하 op들과 유사하게 실행되어, L2 캐시(14)에 액세스하고, 데이터가 L2 캐시(14)에 저장되지 않으면 L2 캐시(14)가 데이터를 획득하도록 허용할 수 있다. L2 캐시(14)에 의해 리턴된 데이터는 임시 레지스터의 리네임으로서 할당된 데이터 버퍼(40)의 엔트리에 기록될 수 있다. 기록에 응답하여, 데이터 버퍼 엔트리는 유효한 것으로 마킹될 수 있으며, 이는 이동 op가 발행하도록 허용할 수 있다. 이동 op는 임시 레지스터로부터 데이터를 판독하고, 타겟 Z 메모리 위치들에 데이터를 기록할 수 있다.
디코딩 유닛(34)이 저장 Z 명령어를 디코딩하면(결정 블록(88), "예" 레그), 디코딩 유닛(34)은 부하 Z 명령어가 제공된 목적지 ID를 사용하여 데이터를 Z 레지스터(28)로부터 디코딩 유닛(34)에 의해 할당된 임시 레지스터로 이동시키는 이동 op를 생성할 수 있고(블록(90)), CPU 프로세서(12)로부터의 저장 Z 명령어가 제공된 메모리 어드레스 및 소스로서의 임시 레지스터를 갖는 저장 op가 이어진다. 임시 레지스터는, X 및 Y 메모리 엔트리들을 리네이밍하는 것과 유사하게, 데이터 버퍼(40) 내의 이용가능한 엔트리로 리네이밍될 수 있다. 디코딩 유닛(34)은 저장 op를 메모리 액세스 인터페이스(32) 내의 메모리 op 큐(46)에 전송할 수 있고(블록(92)), 이동 op를 op 큐(38)에 전송할 수 있다(블록(94)). 이동 op는 임의의 Z 위험이 클리어될 때 실행될 수 있고, 데이터는 PE들(42)로부터 출력되고 데이터 버퍼(40)에 기록될 수 있다. 기록에 응답하여, 데이터 버퍼 엔트리는 유효한 것으로 마킹될 수 있으며, 이는 저장 op가 발행하도록 허용할 수 있다(임의의 메모리 순서화 제약들이 충족된다고 가정함). 저장 op는 임시 레지스터로부터 데이터를 판독하고, 예를 들어, 영향받는 캐시 라인이 L2 캐시(14)에 캐시되는지 여부에 따라 그리고 L2 캐시(14)의 설계에 기초하여, 데이터를 L2 캐시(14)로 전송하는 것 및 L2 캐시(14)가 로컬로 또는 메인 메모리에 기록을 완료하도록 허용하는 것, 또는 둘 모두에 의해 데이터를 타겟 메인 메모리 위치들에 기록할 수 있다. 명령어가 부하 또는 저장 Z 명령어가 아니면, 디코딩 유닛(34)은 op를 정상적으로 디코딩할 수 있다(블록(96)).
이제 도 11을 참조하면, 코프로세서(10)의 다른 실시예가 도시된다. 도 11의 실시예는 일반적으로 도 2의 실시예와 유사할 수 있고, 도 2에 관한 논의는 일반적으로 도 11에 적용될 수 있다. 도 11은 op 큐(38)의 op 큐 엔트리들에서 상이한 데이터를 강조하며, 따라서 도 2 및 도 11의 실시예들이 조합될 수 있다. 보다 구체적으로, op 큐 엔트리들은 도 11의 바이패스 필드를 포함한다. HazardMask 필드는 각각의 엔트리에서 상태의 일부일 수 있다. 도 2에서, 바이패스 필드는 상태의 일부일 수 있다.
일부 경우들에서, 동작을 위해 하나 이상의 파이프라인 스테이지들이 바이패스될 수 있다. 예를 들어, 곱셈-누산 동작의 경우, 일부 명령어들은 곱셈만을 특정할 수 있지만 결과들을 누산하지 않을 수 있다. 그러한 동작은 파이프라인의 곱셈 스테이지들에서 활성일 수 있지만 누산(가산) 스테이지들에서는 활성이 아닐 수 있다. 다른 명령어들은 누산(가산) 동작만을 특정할 수 있고, 따라서 명령어들은 곱셈 스테이지들에서 활성이 아닐 수 있고 누산 스테이지들에서 활성일 수 있다. 또 다른 명령어들(예를 들어, 부하/저장 Z 명령어들의 일부인 이동 op들, 또는 Z로부터 X 또는 Y 메모리로 데이터를 이동시키는 추출 명령어들)은 파이프라인에서 어떠한 동작들도 수행하지 않을 수 있고(noop들), 단지 Z 레지스터에 값을 판독 또는 기록할 수 있다. 이러한 명령어들은 로컬 Z 메모리(60)를 판독 또는 기록하는 것 이외의 실행 스테이지들 중 임의의 실행 스테이지에서 활성이 아닐 수 있다. 디코딩 유닛(34)은 op들에 대한 바이패스 값들을 생성할 수 있고, 이는 실행 파이프라인(20)의 어느 실행 스테이지들이 주어진 op에 의해 바이패스되는지(그 스테이지들에서 활성이 아님)를 나타낼 수 있다. 예를 들어, 각각의 op는 바이패스 필드에서 bypassM 및 bypassA 표시를 가질 수 있으며, 이는 곱셈 스테이지들이 바이패스되는지 여부(bypassM 활성) 및 누산(가산) 스테이지들이 바이패스되는지 여부(bypassA 활성)를 나타낼 수 있다. bypassM 및 bypassA 표시들은, 예를 들어 바이패스(바이패스 활성)를 나타내도록 설정될 수 있고 바이패스 없음(바이패스 비활성, 실행 스테이지들 활성)을 나타내도록 클리어될 수 있는 비트들일 수 있다. 다양한 실시예들에서, 세트 및 클리어 상태들에 대한 반대의 의미들이 사용될 수 있거나, 또는 멀티-비트 값들이 사용될 수 있다. 상이한 ALU들을 구현하는 실시예들은 그러한 ALU들에 또한 대응하는 바이패스 표시들을 포함할 수 있다.
도 12는 바이패스를 구현하는 일 실시예에 대한 PE(42)의 블록도이다. PE(42)는 ALU(58)(예를 들어, 이 실시예에서, 곱셈기(62) 및 가산기(64)), 로컬 Z 메모리(60), 및 제어 회로(56)를 포함한다. 곱셈기(62)는 op에 대한 PE(42)로 라우팅되는 X 및 Y 피연산자들뿐만 아니라 op에 대한 목적지 ID(DestID)를 수신하도록 결합된다. 곱셈기(62)는 DestID를 가산기(64)에 파이프라인화하여 op에 의해 영향받는 Z 메모리 엔트리를 판독하고 그리고/또는 op에 대해 특정된 바와 같이 Z 메모리 엔트리를 기록할 수 있다. 대안적으로, DestID는 Z 메모리(60)를 판독/기록하기 위해 제어 회로(56)에 제공될 수 있다.
제어 회로(56)는 또한, op에 대한 BypassM 및 BypassA 표시들을 수신하도록 결합될 수 있고, 곱셈기(62) 및 가산기(64)를 각각 제어하도록 구성될 수 있다. 제어 회로(56)는 도 12에 도시된 바와 같이 곱셈기(62) 및 가산기(64)에 결합되고, 또한 로컬 Z 메모리(60)에 결합된다. 보다 구체적으로, 제어 회로(56)는, BypassM 표시가 활성이면, 곱셈기(62)로 하여금 입력 피연산자들에 대해 곱셈을 수행하지 않게 할 수 있고(예를 들어, 곱셈기 회로는 평가하지 않을 수 있음), 피연산자들은 가산기(64)를 통해 전달될 수 있다. 유사하게, 제어 회로(56)는 가산기 회로(64)로 하여금, BypassA 표시가 활성인지 여부를 평가하지 않게 할 수 있다. 상이한 ALU들(58)을 구현하는 다른 실시예들은 원하는 대로, ALU(58)의 각각의 컴포넌트 또는 ALU(58)의 각각의 파이프라인에 대한 바이패스 표시들을 포함할 수 있다.
가산기(64)에 데이터를 제공하고 가산기(64)로부터 결과를 수신하는 것에 추가하여, Z 메모리(60)는 이동 op 또는 추출 op에 응답하여 데이터를 제공하기 위해 데이터 버퍼(40)에 결합될 수 있다. 데이터 버퍼(40)에 대한 결합은, 데이터를 데이터 버퍼(40)에 제공하기 위해, 하나 이상의 파이프라인 스테이지들 및/또는 다른 PE들(42), 예를 들어, PE(42)와 동일한 열 내의 다른 PE들(42)과의 다중화를 통한 것일 수 있다. 이동 op가 (예를 들어, LoadZ 명령어의 일부로서) Z 메모리(60)에 데이터를 기록하고 있는 경우, 데이터는 (이 경우, 임시 레지스터에 할당된 엔트리로부터 데이터 버퍼(40)로부터 판독되었더라도) X, Y 피연산자 입력들 중 하나 상에 제공될 수 있다. BypassM 및 BypassA 표시들 둘 모두는 곱셈기 및 가산기에 의한 평가를 방지하도록 설정될 수 있고, 데이터는 저장을 위해 Z 메모리(60)에 제공될 수 있다.
도 13은 명령어를 디코딩하기 위한 디코딩 유닛(34)의 일 실시예의 동작을 예시하는 흐름도이다. 블록들이 특정 순서로 도시되지만, 다른 순서들이 사용될 수 있다. 블록들은 디코딩 유닛(34) 내의 조합 로직에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 디코딩 유닛(34)은 도 13에 도시된 동작을 구현하도록 구성될 수 있다.
디코딩 유닛(34)은 명령어를 디코딩하고, 동작이 곱셈을 배제하는지 여부를 결정할 수 있다. 예를 들어, 가산만을 특정하는 명령어들은 곱셈을 배제할 수 있다. 이동 및 추출 명령어들은 곱셈을 배제할 수 있다. 명령어가 곱셈을 배제하면(결정 블록(100), "예" 레그), 디코딩 유닛(34)은 디코딩된 op에 대한 BypassM 비트를 설정할 수 있다(블록(102)). 그렇지 않으면(결정 블록(100), "아니오" 레그), 명령어는 곱셈을 포함하고, 디코딩 유닛(34)은 디코딩된 op에 대한 BypassM 비트를 클리어할 수 있다(블록(104)). 유사하게, 디코딩 유닛(34)은 명령어를 디코딩하고, 디코딩된 op가 가산을 배제하는지 여부를 결정할 수 있다. 예를 들어, 곱셈만을 특정하는 명령어들은 가산을 배제할 수 있다. 이동 및 추출 명령어들은 가산을 배제할 수 있다. 명령어가 가산을 배제하면(결정 블록(106), "예" 레그), 디코딩 유닛(34)은 디코딩된 op에 대한 BypassA 비트를 설정할 수 있다(블록(108)). 그렇지 않으면(결정 블록(106), "아니오" 레그), 명령어는 가산을 포함하고, 디코딩 유닛(34)은 디코딩된 op에 대한 BypassA 비트를 클리어할 수 있다(블록(110)). 디코딩 유닛(34)은 op 및 바이패스 표시(예를 들어, BypassM 및 BypassA 비트들)를 op 큐(38)에 기록할 수 있다.
도 14는 op 큐(38)에 의해 발행된 op를 실행하기 위한 실행 회로(30)(및 보다 구체적으로는 각각의 PE(42))의 일 실시예의 동작을 예시하는 흐름도이다. 블록들이 특정 순서로 도시되지만, 다른 순서들이 사용될 수 있다. 블록들은 실행 회로(30)/PE들(42) 내의 조합 로직에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 실행 회로(30)/PE들(42)은 도 14에 도시된 동작을 구현하도록 구성될 수 있다.
BypassM 비트가 설정되면(결정 블록(120), "예" 레그), PE(42)는 곱셈기(62)를 디스에이블하고 수신된 피연산자들을 가산기(64)에 전달할 수 있다(블록(122)). 그렇지 않으면(결정 블록(120), "아니오" 레그), 곱셈기(62)는 피연산자들을 곱하고 그 결과를 가산기(64)에 전달할 수 있다(블록(124)). BypassA 비트가 클리어되면(결정 블록(126), "아니오" 레그) PE(42)는 DestID에 의해 특정된 Z 메모리를 판독하고, 그 값을 가산기 입력에 가산하고(예를 들어, BypassM 비트가 클리어되면 승산 결과, 또는 BypassM 비트가 설정되면 입력 피연산자 또는 피연산자들), 그 결과를 DestID에 의해 특정된 Z 메모리에 기록할 수 있다(블록(130)).
BypassA 비트가 설정되면(결정 블록(126), "예" 레그), PE(42)는 가산기(64)를 디스에이블할 수 있다(블록(128)). op가 Z 메모리로부터의 이동 또는 추출 Z이면(결정 블록(132), "예" 레그), PE(42)는 DestID에 의해 특정된 Z 메모리 위치를 판독하고 그 결과를 데이터 버퍼(40)에 포워딩할 수 있다(블록(134)). op가 Z로부터의 이동 또는 추출 Z이 아니면, 이는 BypassA 비트 세트를 갖는 컴퓨팅 op 또는 Z로의 이동 op이다(결정 블록(132), "아니오" 레그). 이 경우, PE(42)는 입력 데이터를 로컬 Z 메모리(60)에 대한 가산기(64)에(예를 들어, 곱셈 결과 또는 입력 피연산자를 각각 컴퓨팅 op 또는 Z로의 이동 op에 대한 PE(42)에) 기록할 수 있다(블록(136)).
도 15는, 단일 PE 그룹(50, 66, 또는 68)을 각각 구현하는 대응하는 실시예들과 함께, 도 5, 도 6 및 도 7에 도시된 실행 회로(30)의 다양한 실시예들의 블록도이다. 다른 실시예들은 원하는 대로 단일 PE 그룹(50, 66, 또는 68)보다 더 많지만 모든 PE 그룹들(50, 66, 또는 68)보다 더 적은 수를 구현할 수 있다.
단일 PE 그룹(50, 66, 또는 68)을 구현하는 실시예들은 더 작은 실행 회로(30)가 요구될 때 사용될 수 있다. 예를 들어, 일 실시예에서, 시스템은 고성능 프로세서 클러스터 및 전력 효율적인 프로세서 클러스터를 포함할 수 있다. 고성능 프로세서 클러스터는 고성능을 위해 설계되고 전력 효율적인 클러스터와 비교하여 실행될 때 비교적 많은 양의 전력을 소비할 수 있는 CPU 프로세서(들)(12)를 포함할 수 있다. 고성능 클러스터의 경우, 고성능 코프로세서(10)를 갖는 것이 바람직할 수 있고, 따라서 고성능 프로세서 클러스터에 대해 전체 실행 회로(30)가 구현될 수 있다. 그러나, CPU 프로세서(들)(12)를 갖는 코프로세서(10)를 전력 효율적인 클러스터에 포함시키는 비용을 감소시키기 위해, 감소된 크기 실행 회로(30)가 전력 효율적인 프로세서 클러스터에서 사용될 수 있다. 전력 효율적인 클러스터는 고성능 클러스터만큼 높은 성능을 요구하지 않을 수 있는데, 이는 CPU 프로세서(들)(12)가 전력 효율적인 클러스터에서도 더 낮은 성능으로 실행될 수 있기 때문이다.
단일 PE 그룹(50, 66, 또는 68)이 포함되는 경우, 코프로세서 컴퓨팅 op들은 전체 동작을 완료하기 위해 여러 번 발행될 수 있다(PE 그룹(50, 66, 또는 68)을 통한 다수의 패스들). 예를 들어, 행렬 모드 명령어들은 4회 재발행될 수 있고, 단일 PE 그룹(50, 66, 또는 68)은 각각의 발행에서 전체 동작의 상이한 부분을 수행할 수 있다. 다른 방식으로 보면, 단일 PE 그룹(50)은 행렬 모드 컴퓨팅 op의 상이한 패스들에서 전체 구현(다양한 실시예들에서 임의의 순서로 상부 좌측, 상부 우측, 하부 좌측 및 하부 우측)의 각각의 PE 그룹(50)으로서의 역할을 할 수 있다. 따라서, 각각의 발행에서, 대응하는 PE 그룹(상부 좌측, 상부 우측, 하부 좌측, 하부 우측)에 의해 동작될 행렬 모드 명령어에 대한 피연산자들의 상이한 서브세트가 주어진 발행 동안 단일 PE 그룹(50)에 공급된다. 예를 들어, 데이터 버퍼(40)가 판독될 수 있고, 피연산자들의 대응하는 서브세트는 데이터로부터 선택되고 (예를 들어, 멀티플렉서들의 세트 등을 통해) 단일 PE 그룹(50)에 공급될 수 있다. 대안적으로, 데이터 버퍼(40)는 단일 PE 그룹(50)의 구성 및 발행되고 있는 반복에 기초하여, 명령어 동작에 대한 전체 피연산자들의 서브세트들을 전달하도록 설계될 수 있다. 유사하게, 단일 그룹(66)은 전체 구현의 각각의 PE 그룹(66)으로서의 역할을 할 수 있다(그리고 그에 따라, 하나의 반복에 대해 전체 그리드의 열 0 및 1, 다른 반복에 대해 전체 그리드의 열 2 및 3 등과 같은 피연산자 서브세트들이 선택될 수 있다). 단일 PE 그룹(68)은 전체 구현의 각각의 PE 그룹(68)으로서의 역할을 할 수 있다(그리고 그에 따라, 하나의 반복에 대해 전체 그리드의 행 0 및 1, 다른 반복에 대해 전체 그리드의 행 2 및 3 등과 같은 피연산자 서브세트들이 선택될 수 있다). 따라서, 행렬 모드 op는 도 15에 도시된 실시예들 중 임의의 것에 대해 4개의 패스들로서 수행된다.
벡터 모드 op는 PE 어레이의 하나의 행을 사용한다. 따라서, 벡터 모드 op는 단일 PE 그룹(50)에 대해 2회, 단일 PE 그룹(66)에 대해 4회, 또는 단일 PE 그룹(68)에 대해 1회 발행될 것이다. 일 실시예에서, 코프로세서(10)의 전력 효율적인 구현은 PE 그룹(68)을 사용할 수 있다. 그러나, 이전에 언급된 배선 트레이드오프들로 인해, 다른 실시예들은 다른 PE 그룹들(50 또는 66) 중 하나를 단일 PE 그룹으로서 구현하도록 선택할 수 있다.
단일 PE 실행 회로(30)의 PE 그룹(50, 66, 68)은 일반적으로 전체 실행 회로(30)의 하나의 PE 그룹(50, 66, 또는 68)과 동일할 수 있지만, 로컬 Z 메모리(60)의 양은 상이할 수 있음에 유의한다. 보다 구체적으로, 로컬 Z 메모리(60)는 단일 PE 그룹(50, 66, 또는 68) 내의 PE(42)가 업데이트할 수 있는 모든 Z 메모리(예를 들어, 전체 실행 회로(30)의 PE(42)보다 4배 많은 Z 메모리(60))를 포함할 수 있다. 행렬 모드 op를 완료하기 위한 각각의 패스에서, Z 메모리(60)의 상이한 부분은 그 패스 동안 평가되는 전체 동작의 일부에 기초하여 액세스될 수 있다.
코프로세서(10) 하드웨어는 상당한 변화들 없이 단일 PE 그룹 구현 또는 전체 구현 중 어느 하나를 처리하도록 설계될 수 있다. 보다 구체적으로, op 큐(38) 내의 스케줄러 회로(36)는 실행 회로(30)가 어떻게 구성되는지에 기초하여, op를 완료하는 데 필요한 것과 동일한 컴퓨팅 op를 재발행하도록 설계될 수 있다. 스케줄러 회로(36)의 일 실시예에서 사용될 수 있는 예시적인 상태 머신이 도 16에 도시된다. 예시된 실시예에서, 상태 머신은 유휴 상태(140), 발행 상태(142) 및 재발행 상태(144)를 포함한다. 유휴 상태(140)는 op 큐(38)로부터 op가 발행되지 않은 상태일 수 있다. 스케줄러 회로(36)는 op 큐(38)에서 op들의 위험 마스크들 및 피연산자 준비를 모니터링할 수 있고, op가 발행될 준비가 되었다고 결정할 수 있다. 스케줄러 회로(36)가 op를 발행할 때, 상태 머신은 발행 상태(142)로 전환한다.
발행 상태(142)에서, 스케줄러 회로(36)는 op가 멀티패스 op인지 여부를 결정할 수 있다. 멀티패스 op는 실행 회로(30)에 1회 초과로 발행되는 op일 수 있다(예를 들어, op는 실행 회로(30)를 통한 하나 초과의 패스를 행하여 실행을 완료한다). 일 실시예에서, 전체 실행 회로(30)가 구현되는 경우, 멀티패스 op들은 없다. 감소된 실행 회로(30)가 구현되면(예를 들어, 단일 PE 그룹 구현들), 행렬 모드 op들은 멀티패스 op들일 수 있다. 각각의 패스는 op에 대한 피연산자들의 전체 세트의 1/4에 대해 동작할 수 있다. 각각의 패스 동안, 주어진 패스에 대해 평가되고 있는 전체 PE 어레이의 사분면에 대응하는 상이한 세트의 피연산자들이 제공될 수 있다. 일 실시예에서, 벡터 모드 op들은 단일 PE 그룹 구현에서 단일 패스일 수 있다(예를 들어, PE 그룹(68)이 사용되는 경우). 다른 실시예들에서, 벡터 모드 op는 또한 멀티패스일 수 있다(예를 들어, PE 그룹(50)에서 2회 패스들, PE 그룹(66)에서 4회 패스들).
op가 멀티패스가 아니면, 상태 머신은 발행 상태(142)로부터 유휴 상태(140)로 다시 전환할 수 있고, 추가적인 op들이 발행될 수 있다. op가 멀티패스이면, 상태 머신은 재발행 상태(144)로 전환할 수 있다. 스케줄러 회로(36)는 재발행 상태(144)에 있는 동안 추가적인 패스들에 대해 동일한 op를 재발행할 수 있다. 추가적인 패스들이 발행되면, 상태 머신은 재발행 상태(144)로부터 유휴 상태(140)로 전환될 수 있다.
일반적으로, 스케줄러 회로(36)는 발행 사이클 당 최대 하나의 op를 발행할 수 있다. 그러나, 이전에 언급된 바와 같이, 벡터 모드 op들은 실행 동안 PE들(42)의 단일 행만을 사용할 수 있다. 주어진 벡터 모드 op에 대해 선택된 행은 (DestID에 기초하여) 벡터 모드 op에 의해 타겟팅되는 Z 메모리(60)를 포함하는 행이다. 다른 행들은 벡터 모드 op의 실행 동안 유휴 상태이다.
일 실시예에서, 스케줄러 회로(36)는, 제2 벡터 모드 op가 유휴 행들 중 하나를 사용하면, 제2 벡터 모드 op를 벡터 모드 op와 융합시키도록 구성될 수 있다. 또 다른 실시예들에서, 실행 회로(30)의 상이한 행들을 사용하는 다수의 벡터 모드 op들이 융합될 수 있다. 2개의 벡터 op들을 융합시키는 예가 도 17의 흐름도를 통해 예시된다. 블록들은 도 17에서 특정 순서로 도시되지만, 다른 순서들이 사용될 수 있다. 블록들은 스케줄러 회로(36) 내의 조합 로직에 의해 병렬로 수행될 수 있다. 스케줄러 회로(36)는 도 17에 도시된 동작을 구현하도록 구성될 수 있다.
스케줄러 회로(36)는 발행할 준비가 되어 있고 임의의 다른 준비된 op들(예를 들어, op 큐(38)에서 가장 오래된 준비된 op)에 대한 발행을 위해 선택되는 op를 식별할 수 있다. 준비된 op가 벡터 모드 op가 아니면(결정 블록(150), "아니오" 레그), 스케줄러 회로(36)는 다른 op를 준비된 op와 융합시키지 못할 수 있고 융합 없이 준비된 op를 발행할 수 있다(블록(152)). 준비된 op가 벡터 모드 op(결정 블록(150), "예" 레그)이면, 다른 벡터 모드 op와의 op 융합이 가능할 수 있다. 다른 준비된 벡터 모드 op가 없으면(결정 블록(154), "아니오" 레그), 또는 다른 준비된 벡터 모드 op가 있지만 PE들(42)의 다른 행을 사용하지 않으면(결정 블록(154), "예" 레그 및 결정 블록(156), "아니오" 레그), 융합이 가능하지 않으며, 스케줄러 회로(36)는 융합 없이 준비된 op를 발행할 수 있다(블록(152)). 다른 준비된 벡터 op가 있고 op가 초기 준비된 벡터 op와는 상이한 행의 PE들을 사용하면(결정 블록들(154 및 156), "예" 레그들), 스케줄러 회로(36)는 융합된 op들을 발행할 수 있다(블록(158)).
op 융합을 검출하도록 설계된 스케줄러 회로(36)에 추가하여, 데이터 버퍼(40)로부터 2개의 벡터 op들에 대한 피연산자들을 판독하고 피연산자들을 PE들(42)의 정확한 행들로 라우팅하기 위해 일부 추가적인 하드웨어 회로들이 또한 포함될 수 있다. op 융합을 위한 배선이 상기 도 4에 예시되어 있다.
도 18은 시스템(200)의 일 실시예의 블록도이다. 예시된 실시예에서, 시스템(200)은 하나 이상의 주변장치들(204) 및 외부 메모리(208)에 결합된 집적 회로(integrated circuit, IC)(202)의 적어도 하나의 인스턴스를 포함한다. IC(202)에 공급 전압들을 공급할 뿐만 아니라, 메모리(208) 및/또는 주변장치들(204)에 하나 이상의 공급 전압들을 공급하는 전원 장치(206)가 제공된다. IC(202)는 CPU 프로세서(12)의 하나 이상의 인스턴스들 및 코프로세서(10)의 하나 이상의 인스턴스들을 포함할 수 있다. 다른 실시예에서, 다수의 IC들이, 그들 상에 CPU 프로세서(12) 및/또는 코프로세서(10)의 인스턴스들을 갖는 상태로, 제공될 수 있다.
주변장치들(204)은 시스템(200)의 유형에 따라 임의의 원하는 회로부를 포함할 수 있다. 예를 들어, 일 실시예에서, 시스템(200)은 컴퓨팅 디바이스(예를 들어, 개인용 컴퓨터, 랩톱 컴퓨터 등), 모바일 디바이스(예를 들어, 개인 휴대 정보 단말기(PDA), 스마트 폰, 태블릿 등), 또는 코프로세서(10)로부터 이득을 얻을 수 있는 애플리케이션 특정 컴퓨팅 디바이스(예를 들어, 신경망들, LSTM 네트워크들, 머신 학습을 구현하는 디바이스들을 포함하는 다른 머신 학습 엔진들 등)일 수 있다. 시스템(200)의 다양한 실시예들에서, 주변장치들(204)은 Wifi, 블루투스, 셀룰러, 글로벌 포지셔닝 시스템 등과 같은 다양한 유형들의 무선 통신용 디바이스들을 포함할 수 있다. 또한, 주변장치들(204)은 RAM 저장소, 솔리드 스테이트 저장소, 또는 디스크 저장소를 포함하는, 추가 저장소를 포함할 수 있다. 주변장치들(204)은 터치 디스플레이 스크린 또는 멀티터치 디스플레이 스크린을 비롯한 디스플레이 스크린, 키보드 또는 다른 입력 디바이스들, 마이크로폰, 스피커 등과 같은 사용자 인터페이스 디바이스들을 포함할 수 있다. 다른 실시예들에서, 시스템(200)은 임의의 유형의 컴퓨팅 시스템(예를 들어, 데스크톱 개인용 컴퓨터, 랩톱, 워크스테이션, 넷 톱(net top) 등)일 수 있다.
외부 메모리(208)는 임의의 유형의 메모리를 포함할 수 있다. 예를 들어, 외부 메모리(208)는 SRAM, 동적 RAM(DRAM), 예컨대, 동기식 DRAM(synchronous DRAM, SDRAM), 더블 데이터 레이트(double data rate)(DDR, DDR2, DDR3 등) SDRAM, RAMBUS DRAM, 저전력 버전들의 DDR DRAM(예컨대, LPDDR, mDDR 등) 등일 수 있다. 외부 메모리(208)는 메모리 디바이스들이 장착되는 하나 이상의 메모리 모듈들, 예컨대, 단일 인라인 메모리 모듈(single inline memory module, SIMM)들, 듀얼 인라인 메모리 모듈(dual inline memory module, DIMM)들 등을 포함할 수 있다. 대안적으로, 외부 메모리(208)는 칩-온-칩(chip-on-chip) 또는 패키지-온-패키지(package-on-package) 구현예로 IC(202) 상에 장착되는 하나 이상의 메모리 디바이스들을 포함할 수 있다.
도 19는, IC(202)의 전자 디스크립션(도면 부호 212)을 저장하는 컴퓨터 액세스가능 저장 매체(210)가 도시된 일 실시예의 블록도이다. 보다 구체적으로, 디스크립션은 적어도 코프로세서(10) 및/또는 CPU 프로세서(12)를 포함할 수 있다. 일반적으로 말하면, 컴퓨터 액세스가능 저장 매체는 명령어들 및/또는 데이터를 컴퓨터에 제공하기 위하여 사용 동안 컴퓨터에 의해 액세스가능한 임의의 저장 매체를 포함할 수 있다. 예를 들어, 컴퓨터 액세스가능 저장 매체는, 자기 또는 광학 매체, 예를 들어, 디스크(고정식 또는 착탈식), 테이프, CD-ROM, DVD-ROM, CD-R, CD-RW, DVD-R, DVD-RW, 또는 블루레이(Blu-Ray)와 같은 저장 매체를 포함할 수 있다. 저장 매체들은, RAM(예를 들어, 동기식 동적 RAM(SDRAM), 램버스 DRAM(RDRAM), 정적 RAM(SRAM) 등), ROM, 또는 플래시 메모리와 같은 휘발성 또는 비휘발성 메모리 매체들을 추가로 포함할 수 있다. 저장 매체들은 저장 매체들이 명령어들/데이터를 제공하는 컴퓨터 내에 물리적으로 포함될 수 있다. 대안적으로, 저장 매체들은 컴퓨터에 접속될 수 있다. 예를 들어, 저장 매체들은 네트워크 부착형 저장소와 같이, 네트워크 또는 무선 링크를 통해 컴퓨터에 접속될 수 있다. 저장 매체들은 USB(Universal Serial Bus)와 같은 주변장치 인터페이스를 통해 접속될 수 있다. 일반적으로, 컴퓨터 액세스가능 저장 매체(210)는 비일시적 방식으로 데이터를 저장할 수 있고, 이러한 맥락에서 비일시적이란 신호 상에서 명령어들/데이터를 전송하지 않는 것을 지칭할 수 있다. 예를 들어, 비일시적 저장소는 휘발성(그리고 전력 차단에 응답하여 저장된 명령어들/데이터를 상실할 수 있음) 또는 비휘발성일 수 있다.
대체적으로, 컴퓨터 액세스가능 저장 매체(210) 상에 저장된 IC(202)의 전자 디스크립션(212)은 프로그램에 의해 판독될 수 있고 IC(202)를 포함하는 하드웨어를 제조하기 위해 직접 또는 간접적으로 사용될 수 있는 데이터베이스일 수 있다. 예를 들면, 디스크립션은 베릴로그 또는 VHDL과 같은 고레벨 설계 언어(high level design language, HDL)에서 하드웨어 기능의 거동-레벨 디스크립션(behavioral-level description) 또는 레지스터-전송 레벨(register-transfer level, RTL) 디스크립션일 수 있다. 디스크립션은 합성 라이브러리로부터의 게이트들의 목록을 포함하는 넷리스트(netlist)를 생성하기 위해 디스크립션을 합성할 수 있는 합성 도구에 의해 판독될 수 있다. 넷리스트는 IC(202)를 포함하는 하드웨어의 기능을 또한 표현하는 한 세트의 게이트들을 포함한다. 이어서, 넷리스트는 마스크에 적용될 기하학적 형상을 설명하는 데이터 세트를 생성하기 위해 배치되고 라우팅될 수 있다. 이어서, 마스크들은 IC(202)에 대응하는 반도체 회로 또는 회로들을 생성하기 위한 다양한 반도체 제조 단계들에서 사용될 수 있다. 대안적으로, 컴퓨터 액세스가능 저장 매체(210) 상의 디스크립션(212)은, 원하는 바에 따라, 넷리스트(합성 라이브러리가 있거나 없음) 또는 데이터 세트일 수 있다.
컴퓨터 액세스가능 저장 매체(210)가 IC(202)의 디스크립션(212)을 저장하지만, 다른 실시예들은, 원하는 바에 따라, IC(202)의 임의의 부분(예를 들어, 전술된 바와 같은 코프로세서(10) 및/또는 CPU 프로세서(12))의 디스크립션(212)을 저장할 수 있다.
위의 개시내용이 완전히 이해된다면, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 있어서 다수의 변형들 및 수정들이 명백해질 것이다. 다음의 청구범위는 모든 그러한 변형들 및 수정들을 망라하는 것으로 해석되도록 의도된다.

Claims (21)

  1. 코프로세서(coprocessor)로서,
    행들 및 열들의 그리드(grid)로 배열된 복수의 프로세싱 요소들 - 상기 복수의 프로세싱 요소들 중 주어진 프로세싱 요소는 결과를 생성하기 위해 복수의 입력 피연산자들에 대해 복수의 산술-로직 유닛(ALU) 동작들을 수행하도록 구성된 ALU 회로를 포함하고, 상기 복수의 ALU 동작들은 제1 ALU 동작 및 적어도 하나의 명령어 동작에 대해 상기 제1 ALU 동작에 후속하여 발생하는 제2 ALU 동작을 포함함 -; 및
    상기 복수의 프로세싱 요소들에 결합되고, 명령어 동작들을 상기 복수의 프로세싱 요소들에 발행하도록 구성된 스케줄러 회로를 포함하는 큐(queue)를 포함하고, 주어진 명령어 동작은 상기 복수의 ALU 동작들의 서브세트를 수행하도록 규정되고, 상기 주어진 명령어 동작은 상기 제1 ALU 동작 및 상기 제2 ALU 동작 중 적어도 하나가 상기 복수의 프로세싱 요소들 각각에서 바이패스되게 하는 바이패스 표시를 포함하고, 상기 제1 ALU 동작 및 상기 제2 ALU 동작 중 상기 적어도 하나는 상기 서브세트의 일부가 아니고;
    상기 ALU 회로는 상기 바이패스 표시에 응답하여 상기 제1 ALU 동작 및 상기 제2 ALU 동작 중 상기 적어도 하나를 구현하는 회로의 평가를 방지하도록 구성되고, 상기 제1 ALU 동작 및 상기 제2 ALU 동작 중 상기 적어도 하나를 구현하는 상기 회로에 입력되는 하나 이상의 피연산자들은 상기 바이패스 표시에 응답하여 상기 회로의 출력에 상기 회로를 통해 바이패스되는, 코프로세서.
  2. 제1항에 있어서, 상기 ALU 회로는 곱셈기 및 가산기를 포함하고, 상기 곱셈기는 상기 복수의 입력 피연산자들을 곱하도록 구성되고, 상기 가산기는 상기 곱셈기의 결과에 제2 입력 피연산자를 가산하도록 구성되고, 상기 바이패스 표시는 상기 곱셈기가 바이패스되는지 여부를 나타내는 제1 표시 및 상기 가산기가 바이패스되는지 여부를 나타내는 제2 표시를 포함하는, 코프로세서.
  3. 제2항에 있어서, 상기 주어진 프로세싱 요소는 상기 제2 입력 피연산자를 저장하는 메모리 위치를 추가로 포함하고, 상기 가산기의 출력은 상기 메모리 위치에 다시 기록되고, 이에 의해, 상기 ALU 회로는, 상기 제1 표시가 바이패스를 나타내지 않고 상기 제2 표시가 바이패스를 나타내지 않는 것에 응답하여 상기 메모리 위치에서 곱셈-누산 동작을 수행하는, 코프로세서.
  4. 제2항에 있어서, 상기 ALU 회로는 상기 곱셈기가 바이패스됨을 상기 제1 표시가 나타내는 것에 응답하여 상기 곱셈기를 디스에이블하고 상기 복수의 입력 피연산자들을 상기 가산기에 전달하도록 구성되는, 코프로세서.
  5. 제2항에 있어서, 상기 ALU 회로는 상기 가산기가 바이패스됨을 상기 제2 표시가 나타내는 것에 응답하여 상기 가산기를 디스에이블하고 상기 곱셈기 결과를 상기 ALU 회로의 출력에 전달하도록 구성되는, 코프로세서.
  6. 제3항에 있어서, 상기 ALU 회로는 상기 제1 표시가 바이패스를 나타내는 것, 상기 제2 표시가 바이패스를 나타내는 것, 및 상기 주어진 명령어 동작에 응답하여 상기 복수의 입력 피연산자들 중 하나를 상기 메모리 위치에 기록하도록 구성되는, 코프로세서.
  7. 제3항에 있어서, 상기 ALU 회로는 상기 제1 표시가 바이패스를 나타내는 것, 상기 제2 표시가 바이패스를 나타내는 것, 및 상기 주어진 명령어 동작에 응답하여 상기 메모리 위치로부터 상기 제2 입력 피연산자를 출력하도록 구성되는, 코프로세서.
  8. 제1항에 있어서, 코프로세서 명령어들을 디코딩하도록 구성된 디코딩 유닛을 추가로 포함하고, 상기 디코딩 유닛은 상기 주어진 명령어 동작을 디코딩하는 주어진 코프로세서 명령어를 디코딩하는 것에 응답하여 상기 바이패스 표시를 생성하도록 구성되는, 코프로세서.
  9. 제8항에 있어서, 상기 디코딩 유닛은 상기 주어진 명령어가 곱셈 동작을 배제함을 검출하도록 구성되고, 상기 디코딩 유닛은, 상기 주어진 명령어가 상기 곱셈 동작을 배제함을 검출하는 것에 응답하여 상기 ALU 회로 내의 곱셈기를 바이패스하도록 상기 바이패스 표시를 생성하도록 구성되고, 상기 디코딩 유닛은 상기 주어진 명령어가 가산 동작을 배제함을 검출하도록 구성되고, 상기 디코딩 유닛은, 상기 주어진 명령어가 상기 가산 동작을 배제함을 검출하는 것에 응답하여 상기 ALU 회로 내의 가산기를 바이패스하도록 상기 바이패스 표시를 생성하도록 구성되는, 코프로세서.
  10. 제1항에 있어서,
    주어진 코프로세서 명령어는 하나 이상의 행들 및 하나 이상의 열들의 제2 그리드에 배열된 제2 복수의 프로세싱 요소들의 평가를 야기하도록 정의되고, 상기 제2 그리드는 상기 복수의 프로세싱 요소들 중 상기 그리드보다 더 많은 프로세싱 요소들을 포함하고;
    상기 큐는 상기 주어진 명령어를 완료하기 위해 상기 주어진 명령어에 대응하는 주어진 명령어 동작을 복수의 시간들에 발행하도록 구성되고, 상기 복수의 프로세싱 요소들은 상기 명령어 동작이 발행된 상기 복수의 시간들 각각에서 상기 주어진 명령어 동작의 상이한 부분을 수행하는, 코프로세서.
  11. 제10항에 있어서, 상기 코프로세서는 상기 주어진 명령어 동작이 발행된 상기 복수의 시간들 동안 상기 주어진 코프로세서 명령어에 대한 피연산자들의 상이한 서브세트들을 공급하도록 구성되는, 코프로세서.
  12. 제10항에 있어서, 상기 큐와 상기 복수의 프로세싱 요소들 사이에 결합된 데이터 버퍼를 추가로 포함하고, 상기 데이터 버퍼는 상기 주어진 코프로세서 명령어에 대한 상기 피연산자들을 저장하는, 코프로세서.
  13. 제12항에 있어서, 상기 피연산자들의 상기 상이한 서브세트들은 상기 주어진 명령어 동작이 발행된 상기 복수의 시간들 각각에 대해 상기 데이터 버퍼로부터 판독되는, 코프로세서.
  14. 제10항에 있어서, 상기 코프로세서는 제2 주어진 명령어 동작을 단일 시간에 발행하도록 구성되고, 상기 제2 주어진 명령어 동작은 벡터 동작을 수행하는 제2 코프로세서 명령어에 대응하고, 상기 복수의 프로세싱 요소들은 하나의 발행에서 상기 벡터 동작을 수행하기에 충분한, 코프로세서.
  15. 제10항에 있어서, 상기 복수의 프로세싱 요소들 각각은 상기 주어진 명령어 동작이 발행된 상기 복수의 시간들 각각으로부터의 결과들을 별개로 저장하도록 구성된 로컬 결과 메모리를 포함하는, 코프로세서.
  16. 제1항에 있어서,
    주어진 명령어 동작은 상기 그리드의 다수의 행들에서 계산들을 야기하는 행렬 모드 동작 또는 상기 그리드의 제1 행에서 계산들을 야기하는 벡터 모드 동작 중 어느 하나를 특정하고;
    상기 스케줄러 회로는, 상기 주어진 명령어 동작이 상기 벡터 모드 동작인 것에 응답하여 그리고 제2 주어진 명령어 동작이 상기 벡터 모드 동작인 것에 추가로 응답하여 상기 제1 행과는 상이한 상기 그리드의 제2 행을 사용하여, 상기 주어진 명령어 동작과 함께 상기 제2 주어진 명령어 동작을 동시에 발행하도록 구성되는, 코프로세서.
  17. 제16항에 있어서, 상기 제1 행 및 상기 제2 행은 상기 주어진 명령어 동작 및 상기 제2 주어진 명령어 동작의 목적지 식별자들에 기초하여 결정되는, 코프로세서.
  18. 제16항에 있어서, 상기 복수의 프로세싱 요소들 중 주어진 프로세싱 요소는 상기 주어진 프로세싱 요소에 의해 생성된 결과들을 저장하는 로컬 메모리를 포함하고, 목적지 식별자들은 상기 제1 행 및 상기 제2 행 내의 상기 로컬 메모리의 위치들을 각각 식별하는, 코프로세서.
  19. 제18항에 있어서, 상기 제1 행을 형성하는 상기 복수의 프로세싱 요소들 중 제1 복수의 프로세싱 요소들은 상기 주어진 명령어 동작의 제1 벡터 결과의 벡터 요소들을 생성하고, 상기 제2 행을 형성하는 상기 복수의 프로세싱 요소들 중 제2 복수의 프로세싱 요소들은 상기 주어진 명령어 동작의 제2 벡터 결과의 벡터 요소들을 생성하는, 코프로세서.
  20. 방법으로서, 행들 및 열들의 그리드로 배열된 복수의 프로세싱 요소들을 포함하는 코프로세서 - 상기 복수의 프로세싱 요소들 중 주어진 프로세싱 요소는 결과를 생성하기 위해 복수의 입력 피연산자들에 대해 복수의 산술-로직 유닛(ALU) 동작들을 수행하도록 구성된 ALU 회로를 포함하고, 상기 복수의 ALU 동작들은 제1 ALU 동작 및 적어도 하나의 명령어 동작에 대해 상기 제1 ALU 동작에 후속하여 발생하는 제2 ALU 동작을 포함하고, 상기 코프로세서는 상기 복수의 프로세싱 요소들에 결합되고 스케줄러 회로를 포함하는 큐를 더 포함함 - 에서,
    상기 스케줄러 회로에 의해 상기 큐로부터 상기 복수의 프로세싱 요소들로 명령어 동작들을 발행하는 단계 - 주어진 명령어 동작은 상기 복수의 ALU 동작들의 서브세트를 수행하도록 정의되고, 상기 주어진 명령어 동작은 상기 제1 ALU 동작 및 상기 제2 ALU 동작 중 적어도 하나가 바이패스되게 하는 바이패스 표시를 포함하고, 상기 제1 ALU 동작 및 상기 제2 ALU 동작 중 적어도 하나는 상기 서브세트의 일부가 아님 -; 및
    상기 바이패스 표시에 응답하여 상기 제1 ALU 동작 및 상기 제2 ALU 동작 중 상기 적어도 하나를 구현하는 상기 ALU 회로 내의 회로의 평가를 방지하는 단계를 포함하고, 상기 제1 ALU 동작 및 상기 제2 ALU 동작 중 상기 적어도 하나를 구현하는 상기 회로에 입력되는 하나 이상의 피연산자들은 상기 바이패스 표시에 응답하여 상기 회로의 출력에 상기 회로를 통해 바이패스되는, 방법.
  21. 삭제
KR1020217027301A 2019-02-26 2020-02-23 바이패스 최적화, 가변 그리드 아키텍처 및 융합된 벡터 동작들을 갖는 코프로세서들 KR102611813B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020237041950A KR20230170981A (ko) 2019-02-26 2020-02-23 바이패스 최적화, 가변 그리드 아키텍처 및 융합된 벡터 동작들을 갖는 코프로세서들

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/286,170 US11429555B2 (en) 2019-02-26 2019-02-26 Coprocessors with bypass optimization, variable grid architecture, and fused vector operations
US16/286,170 2019-02-26
PCT/US2020/019389 WO2020176366A1 (en) 2019-02-26 2020-02-23 Coprocessors with bypass optimization, variable grid architecture, and fused vector operations

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020237041950A Division KR20230170981A (ko) 2019-02-26 2020-02-23 바이패스 최적화, 가변 그리드 아키텍처 및 융합된 벡터 동작들을 갖는 코프로세서들

Publications (2)

Publication Number Publication Date
KR20210116651A KR20210116651A (ko) 2021-09-27
KR102611813B1 true KR102611813B1 (ko) 2023-12-11

Family

ID=69811985

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020237041950A KR20230170981A (ko) 2019-02-26 2020-02-23 바이패스 최적화, 가변 그리드 아키텍처 및 융합된 벡터 동작들을 갖는 코프로세서들
KR1020217027301A KR102611813B1 (ko) 2019-02-26 2020-02-23 바이패스 최적화, 가변 그리드 아키텍처 및 융합된 벡터 동작들을 갖는 코프로세서들

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020237041950A KR20230170981A (ko) 2019-02-26 2020-02-23 바이패스 최적화, 가변 그리드 아키텍처 및 융합된 벡터 동작들을 갖는 코프로세서들

Country Status (5)

Country Link
US (3) US11429555B2 (ko)
EP (1) EP3931687A1 (ko)
KR (2) KR20230170981A (ko)
CN (1) CN113490913A (ko)
WO (1) WO2020176366A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CR20210207A (es) 2018-10-24 2021-09-02 Viiv Healthcare Uk No 5 Ltd Inhibidores de la replicación del virus de la inmunodeficiencia humana
US11210100B2 (en) * 2019-01-08 2021-12-28 Apple Inc. Coprocessor operation bundling
US11188341B2 (en) * 2019-03-26 2021-11-30 Intel Corporation System, apparatus and method for symbolic store address generation for data-parallel processor
US11409874B2 (en) * 2019-07-03 2022-08-09 International Business Machines Corporation Coprocessor-accelerated verifiable computing
US11841792B1 (en) * 2019-12-09 2023-12-12 Amazon Technologies, Inc. Instructions with multiple memory access modes
CN113867789A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
US12086080B2 (en) * 2020-09-26 2024-09-10 Intel Corporation Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits
EP3979248A1 (en) * 2020-09-30 2022-04-06 Imec VZW A memory macro
US11669331B2 (en) 2021-06-17 2023-06-06 International Business Machines Corporation Neural network processing assist instruction
US11656854B2 (en) * 2021-08-30 2023-05-23 Huawei Technologies Co., Ltd. Methods and devices for computing a memory size for software optimization
CN114595813B (zh) * 2022-02-14 2024-09-06 清华大学 异构加速处理器及数据计算方法
US11995030B1 (en) * 2022-11-10 2024-05-28 Azurengine Technologies, Inc. Reconfigurable parallel processor with stacked columns forming a circular data path

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120216012A1 (en) * 2008-10-15 2012-08-23 Hyperion Core, Inc. Sequential processor comprising an alu array

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2273377A (en) * 1992-12-11 1994-06-15 Hughes Aircraft Co Multiple masks for array processors
US5778250A (en) * 1994-05-23 1998-07-07 Cirrus Logic, Inc. Method and apparatus for dynamically adjusting the number of stages of a multiple stage pipeline
US6212628B1 (en) 1998-04-09 2001-04-03 Teranex, Inc. Mesh connected computer
US6148316A (en) * 1998-05-05 2000-11-14 Mentor Graphics Corporation Floating point unit equipped also to perform integer addition as well as floating point to integer conversion
US6675376B2 (en) * 2000-12-29 2004-01-06 Intel Corporation System and method for fusing instructions
US20040128482A1 (en) * 2002-12-26 2004-07-01 Sheaffer Gad S. Eliminating register reads and writes in a scheduled instruction cache
CN101027635A (zh) * 2004-09-22 2007-08-29 皇家飞利浦电子股份有限公司 其中功能单元共用读取端口的数据处理电路
ATE493703T1 (de) * 2004-11-03 2011-01-15 Koninkl Philips Electronics Nv Programmierbare datenverarbeitungsschaltung, die simd-befehle unterstützt
US7673164B1 (en) * 2004-12-13 2010-03-02 Massachusetts Institute Of Technology Managing power in a parallel processing environment
US7694114B2 (en) * 2005-06-09 2010-04-06 Qualcomm Incorporated Software selectable adjustment of SIMD parallelism
US7721071B2 (en) * 2006-02-28 2010-05-18 Mips Technologies, Inc. System and method for propagating operand availability prediction bits with instructions through a pipeline in an out-of-order processor
US8521800B1 (en) * 2007-08-15 2013-08-27 Nvidia Corporation Interconnected arithmetic logic units
US8086806B2 (en) * 2008-03-24 2011-12-27 Nvidia Corporation Systems and methods for coalescing memory accesses of parallel threads
KR101553648B1 (ko) * 2009-02-13 2015-09-17 삼성전자 주식회사 재구성 가능한 구조의 프로세서
US11216720B2 (en) * 2015-10-08 2022-01-04 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit that manages power consumption based on memory accesses per period
CN111104164A (zh) 2016-04-26 2020-05-05 中科寒武纪科技股份有限公司 一种用于执行矩阵乘运算的装置和方法
US10120649B2 (en) 2016-07-29 2018-11-06 Microunity Systems Engineering, Inc. Processor and method for outer product accumulate operations
US10558575B2 (en) 2016-12-30 2020-02-11 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10387037B2 (en) 2016-12-31 2019-08-20 Intel Corporation Microarchitecture enabling enhanced parallelism for sparse linear algebra operations having write-to-read dependencies
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120216012A1 (en) * 2008-10-15 2012-08-23 Hyperion Core, Inc. Sequential processor comprising an alu array

Also Published As

Publication number Publication date
CN113490913A (zh) 2021-10-08
EP3931687A1 (en) 2022-01-05
KR20210116651A (ko) 2021-09-27
US20200272597A1 (en) 2020-08-27
KR20230170981A (ko) 2023-12-19
WO2020176366A1 (en) 2020-09-03
US11429555B2 (en) 2022-08-30
US20220358082A1 (en) 2022-11-10
US20220350776A1 (en) 2022-11-03

Similar Documents

Publication Publication Date Title
KR102611813B1 (ko) 바이패스 최적화, 가변 그리드 아키텍처 및 융합된 벡터 동작들을 갖는 코프로세서들
US11042373B2 (en) Computation engine that operates in matrix and vector modes
KR102588399B1 (ko) 코프로세서 동작 번들링
Farkas et al. Complexity/performance tradeoffs with non-blocking loads
US8583894B2 (en) Hybrid prefetch method and apparatus
CN111316261B (zh) 矩阵计算引擎
US10621100B1 (en) Unified prefetch circuit for multi-level caches
EP1278125A2 (en) Indexing and multiplexing of interleaved cache memory arrays
US8694759B2 (en) Generating predicted branch target address from two entries storing portions of target address based on static/dynamic indicator of branch instruction type
US11650825B2 (en) Coprocessor synchronizing instruction suppression
US10846091B2 (en) Coprocessor with distributed register
US10990401B2 (en) Computation engine with strided dot product
Matson et al. Circuit implementation of a 600 MHz superscalar RISC microprocessor
US10831488B1 (en) Computation engine with extract instructions to minimize memory access
JP2023550231A (ja) 局所性を欠くデータを対象とするメモリ要求のプリフェッチ無効化
US20200241876A1 (en) Range Mapping of Input Operands for Transcendental Functions
Erciyes et al. The Hardware
Ozkul et al. Recent Architectural Developments for Reducing Power Consumption and Increasing Performance
Gudaparthi et al. Energy-Efficient VLSI Architecture & Implementation of Bi-modal Multi-banked Register-File Organization
Harrington Architecture of AMD Athlon Processors
Sridharan Cache memory model for cycle accurate simulation
Welna Computer Architecture 219 (623.219)

Legal Events

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