KR20170110686A - 벡터들을 결합 및 분할하기 위한 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서 - Google Patents

벡터들을 결합 및 분할하기 위한 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서 Download PDF

Info

Publication number
KR20170110686A
KR20170110686A KR1020177024756A KR20177024756A KR20170110686A KR 20170110686 A KR20170110686 A KR 20170110686A KR 1020177024756 A KR1020177024756 A KR 1020177024756A KR 20177024756 A KR20177024756 A KR 20177024756A KR 20170110686 A KR20170110686 A KR 20170110686A
Authority
KR
South Korea
Prior art keywords
vector
register
elements
register file
input
Prior art date
Application number
KR1020177024756A
Other languages
English (en)
Other versions
KR102255318B1 (ko
Inventor
마얀 모우드길
개리 제이. 나세르
씨. 존 글로쓰너
아서 조셉 호언
폴 허틀리
무루가판 센틸벨란
파블로 발조라
Original Assignee
옵티멈 세미컨덕터 테크놀로지스 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 옵티멈 세미컨덕터 테크놀로지스 인코포레이티드 filed Critical 옵티멈 세미컨덕터 테크놀로지스 인코포레이티드
Publication of KR20170110686A publication Critical patent/KR20170110686A/ko
Application granted granted Critical
Publication of KR102255318B1 publication Critical patent/KR102255318B1/ko

Links

Images

Classifications

    • 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
    • G06F15/8076Details on data register access
    • 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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7828Architectures of general purpose stored program computers comprising a single central processing unit without memory
    • 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/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/141Discrete Fourier transforms
    • G06F17/142Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
    • 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/3001Arithmetic 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/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/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • 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
    • G06F9/30112Register structure comprising data of variable length
    • 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/30098Register arrangements
    • G06F9/30141Implementation provisions of register files, e.g. ports
    • 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/30149Instruction analysis, e.g. decoding, instruction word fields of variable length 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/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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3855
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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
    • 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
    • G06F9/462Saving or restoring of program or task context with multiple register sets

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Discrete Mathematics (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

컴퓨터 프로세서가 개시된다. 컴퓨터 프로세서는 가변수의 엘리먼트들을 홀딩하기 위하여 적어도 하나의 레지스터를 포함하는 벡터 레지스터 파일을 포함하는 벡터 유닛을 포함할 수 있다. 컴퓨터 프로세서는 벡터를 분리하거나 또는 2개의 벡터들을 결합하는 하나 또는 그 초과의 명령들을 사용하여 벡터 레지스터 파일 내의 가변수의 엘리먼트들에 대하여 연산하도록 구성된 프로세싱 로직을 더 포함할 수 있다. 컴퓨터 프로세서는 모놀리식 집적 회로로서 구현될 수 있다.

Description

벡터들을 결합 및 분할하기 위한 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
관련 출원들에 대한 상호 참조
[0001] 본 출원은 2015년 2월 2일에 출원된 미국 가특허 출원 제62/110,840호, 및 2015년 6월 1일에 출원된 미국 특허 출원 제14/727,076호를 우선권으로 주장하며, 이 출원들의 개시 내용들은 인용에 의해 그 전체가 본원에 포함된다.
[0002] 본 개시내용의 실시예들은 벡터 프로세서에 관한 것이며, 특히, 벡터들을 결합 및 분할하기 위한 명령들을 사용하여 가변 길이 벡터들에 대해 연산하는 하나 또는 그 초과의 명령들을 포함하는 벡터 프로세서의 아키텍처 및 구현에 관한 것이다.
[0003] 벡터 명령은 하나의 명령을 사용하여 값들의 그룹에 대해 실행하는 명령이다. 예컨대, x86 아키텍처에서, SSE(streaming SIMD extension) 명령 ADDPS
Figure pct00001
(패킹(packing)된 단일-정밀도(single-precision) 부동-소수점 값들을 가산)에서, 2개의 xmm 레지스터들은 각각, 서로 가산되어 제 1 레지스터에 저장되는 4개의 단일-정밀도 부동-소수점 값들을 홀딩한다. 이러한 행위(behavior)는 의사-코드 시퀀스와 등가이다.
Figure pct00002
[0004] 값들의 그룹은 레지스터들, 메모리, 또는 이 둘의 조합으로부터 유래될 수 있다. 일반적으로 벡터 명령들에 의한 사용에 의도되는 값들의 그룹들을 홀딩하는 레지스터들은 벡터 레지스터들로 지칭된다. 그룹에서 값들의 수는 벡터 길이로 지칭된다. 일부 예들에서, 벡터 길이는 또한, 벡터 명령에 의해 수행되는 연산들의 수를 설명하기 위해 사용된다. 일반적으로, 벡터 레지스터를 호출하는 대응하는 벡터 명령에서의 연산들의 수 및 벡터 레지스터에서의 값들의 수는 동일하지만, 이들은 특정한 상황들에서는 상이할 수 있다.
[0005] 벡터 명령들을 포함하는 ISA(instruction set architecture)는 벡터 ISA 또는 벡터 아키텍처로 알려졌다. 벡터 ISA를 구현하는 프로세서는, 벡터 프로세서로 알려졌다.
[0006] 모든 벡터 명령들이 어느 벡터 레지스터들도 사용하지 않고 자신의 벡터 입력들을 메모리로부터 판독하고 메모리에 기록하는 벡터 ISA는, 메모리-투-메모리 벡터 또는 메모리-벡터 아키텍처로 알려졌다.
[0007] 로드 또는 저장 이외의 모든 벡터 명령들이 메모리에 액세스하지 않고 벡터 레지스터만을 사용하는 벡터 ISA는, 레지스터-벡터 아키텍처로 알려졌다.
[0008] 벡터 명령들(이를테면, 전술한 ADDPS)은 연산들의 고정 수(ADDPS 명령들의 경우 4)를 묵시적으로 특정할 수 있다. 이들은 고정-길이 벡터 명령들로 지칭된다. 고정-길이 레지스터-벡터 명령들에 대한 다른 용어는 SIMD(Single Instruction Multiple Data) 명령들이다.
[0009] 이전 세대의 벡터 프로세서들은, 성능을 개선하기 위해 커스터마이징된(customized) 기술들을 사용하여 다수의 보드(board)들 상에서 구현되었다. 이들 대부분은, 수퍼컴퓨터들을 흔히 필요로 하는 고성능 컴퓨터 애플리케이션들, 이를테면, 일기 예보에 타겟팅되었다. 그러나 기술 개발은 단일-칩 마이크로프로세서들이 이러한 멀티-보드 구현들을 더 잘 구현하게 인에이블하여, 이러한 벡터 프로세서들이 점차 사라지게 했다. 대신에, 수퍼컴퓨터들은 이러한 다수의 고성능 마이크로프로세서들을 함께 결합한 멀티-프로세서들이 되었다.
[0010] 이러한 프로세서들의 공통 특징은, 이들 프로세서들이 동일 회사의 이전 모델들과 일반적으로 호환하지 않았다는 것인데, 그 이유는 명령 세트가 모델마다 변하기 때문이다. 이러한 관행은, 가능한 한 많은 성능을 추출하는 것이 중요한 문제 영역들로 프로세서들이 타겟팅되었고 사람들이 기꺼히 그렇게 하도록 애플리케이션을 재기록했던 사실에 기인하였다. 그러나 이러한 관행은 머신의 구현 세부사항들이 명령 세트에 노출되게 할 수 있고, 머신 구현 세부사항들이 모델마다 변경되기 때문에 명령 세트들은 변경될 수 있다. 예컨대, 특정될 수 있는 최대 벡터 길이는, 벡터 레지스터가 각각의 구현에서 홀딩할 수 있는 엘리먼트들의 최대 수에 의해 결정되었다.
[0011] 트랜지스터들의 밀도가 계속 증가함에 따라 벡터 프로세서의 제 2 스트림이 출현하였다. 1990년대 후반까지, 비록 더 많은 스칼라 기능 유닛들을 지원하기 위해 사용될 수 있는 칩 영역이 여전히 존재했지만, 범용 마이크로프로세서들은 자신들이 지원할 수 있는 스칼라 기능 유닛들의 수를 증가시킴으로써 리턴들을 감소시키는 수준에 도달하였다. 동시에, 이러한 마이크로프로세서들 상에서 비디오 인코딩 및 디코딩을 직접 지원하기 위한 요구가 존재하였다. 이러한 두 트렌드들의 융합은, 예컨대, 기존 범용 아키텍처들-인텔 x86용 MMX, IBM PowerPC용 Altivec/VMX 및 DEC Alpha용 MVI에 대한 다양한 고정 길이 벡터 확장들의 도입을 초래하였다.
[0012] 이러한 SIMD 스타일 아키텍처들은 고정 바이트 길이(MMX의 경우 8바이트, Altivec의 경우 16바이트)를 갖는 레지스터들을 사용하였다. 레지스터들은, 동시에 연산할 수 있는 다수의 보다 작은 길이 엘리먼트들을 홀딩하도록 일반적으로 설계되었다. 따라서, MMX 아키텍처는 2개의 4-바이트 정수들 또는 4개의 2-바이트 정수들 또는 8개의 1-바이트 정수들을 홀딩할 수 있다. 명령들 PADDD/PADDW/PADDB은 2개의 레지스터들의 콘텐츠들을 함께 가산하여, 이들 콘텐츠들을 각각 2개의 4-Byte 값/4개의 2-Byte 값/8개의 1-Byte 값을 홀딩하는 것으로 처리한다.
[0013] 기술이 진보함에 따라, 벡터 레지스터들이 추가적인 값들을 홀딩하게 하는 것이 가능해졌다. x86 아키텍처용 MMX 확장에 이어 16-Byte SSE, 32-Byte AVX2 및 64-Byte AVX3가 후속한다. 각각의 포인트에서, 추가적인 명령들이 실질적으로 동일한 연산들을 수행하도록 도입되었다.
[0014] 범용 아키텍처들의 구현의 경우, 사업상의 이유로, 상이한 모델들이 구 모델에 대해 기록된 코드를 실행할 수 있다. 따라서, x86 아키텍처의 새로운 구현은, 다수의 상이한 벡터 레지스터 폭들, 및 이러한 명령 레지스터 폭들 모두에 대해 연산하는 명령들을 지원할 수 있다.
[0015] 벡터 유닛을 포함하는 컴퓨터 프로세서를 제공함으로써, 기술분야에서, 위에서 설명된 문제들이 해결되고 기술적 솔루션이 달성되는데, 이 벡터 유닛은, 가변수의 엘리먼트들을 홀딩하기 위한 적어도 하나의 벡터 레지스터를 포함하는 벡터 레지스터 파일을 포함한다. 컴퓨터 프로세서는, 벡터를 분리하거나 또는 2개의 벡터들을 결합하는 하나 또는 그 초과의 명령들을 사용하여 벡터 레지스터 파일 내의 가변수의 엘리먼트들에 대하여 연산하도록 구성된 프로세싱 로직을 더 포함할 수 있다. 컴퓨터 프로세서는 모놀리식 집적 회로로서 구현될 수 있다.
[0016] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 테일(tail) 별개 명령을 포함할 수 있다. 벡터 테일 별개 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독할 수 있고, 엘리먼트들의 출력 벡터를 형성하기 위하여 입력 벡터로부터의 오프셋에서 시작하는 인접수의 엘리먼트들을 선택할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다. 인접수의 엘리먼트들 및 오프셋은 벡터 길이 레지스터 파일의 하나 또는 그 초과의 레지스터들 내의 값들에 부분적으로 기반하여 결정될 수 있다.
[0017] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 연접(concatenate) 결합 명령을 포함할 수 있다. 벡터 연접 결합 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독할 수 있고, 제 1 입력 벡터의 엘리먼트들을 선택하고 제 2 입력 벡터로부터의 엘리먼트들을 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다. 제 1 벡터 내의 엘리먼트들의 수 및 제 2 벡터 내의 엘리먼트들의 수는 벡터 길이 레지스터 파일의 하나 또는 그 초과의 레지스터들 내의 값들에 부분적으로 기반하여 결정될 수 있다.
[0018] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 이븐(even) 별개 명령을 포함할 수 있다. 벡터 이븐 별개 명령은 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독할 수 있고, 제 1 엘리먼트에서 시작하여, 입력 벡터로부터 하나 걸러 하나씩 엘리먼트를 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0019] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 오드(odd) 별개 명령을 포함할 수 있다. 벡터 오드 별개 명령은 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독할 수 있고, 제 2 엘리먼트에서 시작하여, 입력 벡터로부터 하나 걸러 하나씩 엘리먼트를 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0020] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 인터리브(interleave) 결합 명령을 포함할 수 있다. 벡터 인터리브 결합 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독할 수 있고, 제 1 입력 벡터 및 제 2 입력 벡터로부터 엘리먼트들을 교대로 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0021] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 테일 별개 명령을 포함할 수 있다. 벡터 테일 별개 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독할 수 있고, 엘리먼트들의 출력 벡터를 형성하기 위하여 입력 벡터로부터의 오프셋에서 시작하는 인접수의 엘리먼트들을 선택할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0022] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 연접 결합 명령을 포함할 수 있다. 벡터 연접 결합 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독할 수 있고, 제 1 입력 벡터의 엘리먼트들을 먼저 선택하고 제 2 입력 벡터의 엘리먼트들을 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0023] 일 예에서, 컴퓨터 프로세서는 가변수의 비트들을 포함하는 하나 또는 그 초과의 벡터 마스크 레지스터들을 포함하는 벡터 마스크 레지스터 파일을 포함할 수 있다.
[0024] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 펑처(puncture) 별개 명령을 포함할 수 있다. 벡터 펑처 별개 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독하고, 벡터 마스크 레지스터 파일의 레지스터로부터 비트들의 입력 벡터를 판독할 수 있는 선택 기준들로서 0 또는 1을 선택할 수 있고, 비트들의 입력 벡터에서의 대응하는 포지션에서의 비트가 선택 기준들과 매칭하는 엘리먼트들만을 입력 벡터로부터 선택할 수 있으며, 엘리먼트들의 출력 벡터를 형성하기 위하여, 선택된 엘리먼트들을 연접할 수 있고, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0025] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 믹스(mix) 결합 명령을 포함할 수 있다. 벡터 믹스 결합 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독하고, 벡터 마스크 레지스터 파일의 레지스터로부터 비트들의 입력 벡터를 판독할 수 있는 선택 기준들로서 0 또는 1을 선택할 수 있고, 비트들의 입력 벡터의 비트들에 대해 반복할 수 있으며, 선택된 엘리먼트들로부터 출력 벡터를 형성하기 위하여, 비트가 선택 기준들을 충족하면 제 1 입력 벡터의 다음 미선택된 엘리먼트를 선택할 수 있고, 비트가 선택 기준들을 충족하지 않으면 제 2 입력 벡터의 다음 미선택된 엘리먼트를 선택할 수 있고, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0026] 일 예에서, 컴퓨터 프로세서는, 적어도 하나의 레지스터를 포함하는 벡터 길이 레지스터 파일을 더 포함할 수 있으며, 벡터 길이 레지스터 파일의 적어도 하나의 레지스터는 프로세싱 로직이 연산하는 엘리먼트들의 수를 특정하기 위하여 사용된다.
[0027] 컴퓨터 프로세서의 하나 또는 그 초과의 레지스터들을 포함하는 벡터 레지스터 파일이, 가변수의 엘리먼트들을 홀딩할 수 있다. 컴퓨터 프로세서의 프로세싱 로직이, 벡터를 분리하거나 또는 2개의 벡터들을 결합하는 하나 또는 그 초과의 명령들을 사용하여 벡터 레지스터 파일 내의 가변수의 엘리먼트들에 대해 연산할 수 있다. 컴퓨터 프로세서는 모놀리식 집적 회로로서 구현될 수 있다.
[0028] 일 예에서, 컴퓨터 프로세서는, 적어도 하나의 레지스터를 포함하는 벡터 길이 레지스터 파일을 더 포함할 수 있으며, 벡터 길이 레지스터 파일의 적어도 하나의 레지스터는 프로세싱 로직이 연산하는 엘리먼트들의 수를 특정하기 위하여 사용될 수 있다.
[0029] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 테일 별개 명령을 포함할 수 있다. 벡터 테일 별개 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독할 수 있고, 엘리먼트들의 출력 벡터를 형성하기 위하여 입력 벡터로부터의 오프셋에서 시작하는 인접수의 엘리먼트들을 선택할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다. 인접수의 엘리먼트들 및 오프셋은 벡터 길이 레지스터 파일의 하나 또는 그 초과의 레지스터들 내의 값들에 부분적으로 기반하여 결정될 수 있다.
[0030] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 연접 결합 명령을 포함할 수 있다. 벡터 연접 결합 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독할 수 있고, 제 1 입력 벡터의 엘리먼트들을 선택하고 제 2 입력 벡터로부터의 엘리먼트들을 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다. 제 1 벡터 내의 엘리먼트들의 수 및 제 2 벡터 내의 엘리먼트들의 수는 벡터 길이 레지스터 파일의 하나 또는 그 초과의 레지스터들 내의 값들에 부분적으로 기반하여 결정될 수 있다.
[0031] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 이븐 별개 명령을 포함할 수 있다. 벡터 이븐 별개 명령은 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독할 수 있고, 제 1 엘리먼트에서 시작하여, 입력 벡터로부터 하나 걸러 하나씩 엘리먼트를 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0032] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 오드(odd) 별개 명령을 포함할 수 있다. 벡터 오드 별개 명령은 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독할 수 있고, 제 2 엘리먼트에서 시작하여, 입력 벡터로부터 하나 걸러 하나씩 엘리먼트를 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0033] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 인터리브 결합 명령을 포함할 수 있다. 벡터 인터리브 결합 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독할 수 있고, 제 1 입력 벡터 및 제 2 입력 벡터로부터 엘리먼트들을 교대로 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0034] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 테일 별개 명령을 포함할 수 있다. 벡터 테일 별개 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독할 수 있고, 엘리먼트들의 출력 벡터를 형성하기 위하여 입력 벡터로부터의 오프셋에서 시작하는 인접수의 엘리먼트들을 선택할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0035] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 연접 결합 명령을 포함할 수 있다. 벡터 연접 결합 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독할 수 있고, 제 1 입력 벡터의 엘리먼트들을 먼저 선택하고 제 2 입력 벡터의 엘리먼트들을 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0036] 일 예에서, 컴퓨터 프로세서는 가변수의 비트들을 포함하는 하나 또는 그 초과의 벡터 마스크 레지스터들을 포함하는 벡터 마스크 레지스터 파일을 포함할 수 있다.
[0037] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 펑처 별개 명령을 포함할 수 있다. 벡터 펑처 별개 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독하고, 벡터 마스크 레지스터 파일의 레지스터로부터 비트들의 입력 벡터를 판독할 수 있는 선택 기준들로서 0 또는 1을 선택할 수 있고, 비트들의 입력 벡터에서의 대응하는 포지션에서의 비트가 선택 기준들과 매칭하는 엘리먼트들만을 입력 벡터로부터 선택할 수 있으며, 엘리먼트들의 출력 벡터를 형성하기 위하여, 선택된 엘리먼트들을 연접할 수 있고, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0038] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 믹스 결합 명령을 포함할 수 있다. 벡터 믹스 결합 명령은, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독하고, 벡터 마스크 레지스터 파일의 레지스터로부터 비트들의 입력 벡터를 판독할 수 있는 선택 기준들로서 0 또는 1을 선택할 수 있고, 비트들의 입력 벡터의 비트들에 대해 반복할 수 있으며, 선택된 엘리먼트들로부터 출력 벡터를 형성하기 위하여, 비트가 선택 기준들을 충족하면 제 1 입력 벡터의 다음 미선택된 엘리먼트를 선택할 수 있고, 비트가 선택 기준들을 충족하지 않으면 제 2 입력 벡터의 다음 미선택된 엘리먼트를 선택할 수 있고, 그리고 벡터 레지스터 파일의 레지스터에 출력 벡터를 기록할 수 있다.
[0039] 본 발명은, 이하의 도면들과 함께 고려되어 하기에서 제시되는 예시적인 실시예의 상세한 설명으로부터 보다 용이하게 이해될 수 있다.
[0040] 도 1은 본 개시내용의 예에 따른 프로세서이다.
[0041] 도 2는 본 개시내용의 예에 따른 벡터 유닛이다.
[0042] 도 3은 본 개시내용의 예에 따른 실행 파이프라인이다.
[0043] 도 4는 본 개시내용의 예에 따른 다른 실행 파이프라인이다.
[0044] 도 5는 본 개시내용의 예에 따른 벡터 실행 파이프라인이다.
[0045] 도 6은 본 개시내용의 예에 따른 넌-오버랩핑 서브-벡터 이슈이다.
[0046] 도 7은 본 개시내용의 예에 따른 오버랩핑 서브-벡터 이슈이다.
[0047] 도 8은 본 개시내용의 예에 따른 명령 이슈 구조이다.
[0048] 도 9는 본 개시내용의 예에 따른, 명령 시퀀스를 실행하는 동안의 이름변경을 도시한다.
[0049] 도 10은 본 개시내용의 예에 따른 레지스터 파일 편성을 도시한다.
[0050] 도 11은 본 개시내용의 예에 따른 메모리 뱅크이다.
[0051] 도 12는 본 개시내용의 예에 따른 벡터 레지스터 파일이다.
[0052] 본 개시내용의 예들은, 레지스터-투-레지스터(register-to-register) 가변 길이 벡터 명령들을 사용하는 아키텍처를 포함한다. 이러한 아키텍처는, 동일한 명령들을, 하지만 상이한 레이트들로 실행할 수 있어서, 미래의 아키텍처 설계들을 수용하고 그리고 상이한 가격/성능 트레이드-오프들 모두를 허용하는 가변 구현들을 허용하도록 설계된다. 본 개시내용의 예들은, 디지털 신호 프로세싱 및 그래픽 프로세싱 둘 모두뿐만 아니라, 고성능 컴퓨팅을 지원하는 피처들을 포함한다.
[0053] 본 개시내용의 예들은 현대의 비순차 수퍼스칼라 프로세서의 컨텍스트에서 효율적인 구현들을 위해 설계된 것으로서, 레지스터 이름변경 및 비순차 실행이 가변-길이 벡터 레지스터 아키텍처들의 구현에 어떻게 적용되는 지에 관련된다.
[0054] 본 개시내용의 예들은 현대의 범용 마이크로프로세서의 컨텍스트에서의 구현에 적절한 가변-길이 레지스터 벡터 아키텍처를 포함한다. 일 예에서, 아키텍처는:
Figure pct00003
명령이, 하드웨어에서 현재 구현될 수 있는 것들보다 더 큰 값들을 갖는 벡터 길이들을 특정하도록 허용하고, 그리고
Figure pct00004
특정 구현의 레지스터들 내로 패킹(packing)될 수 있는 엘리먼트들의 수와 무관하게, 벡터 길이가 수행될 연산들의 수를 특정하게 할수 있다.
[0055] 본 개시내용의 예들은 역방향 호환가능(backward compatible)하도록 허용하는 바, 즉, 예들은 보다 큰 레지스터들을 갖는 구현이, 동일한 세트의 명령들을 지원하면서, 보다 짧은 레지스터들을 갖는 프로세서에 대해 최적화된 벡터 길이들을 갖는 명령들을 실행하도록 허용한다.
[0056] 일부 예들에서, 아키텍처는 벡터 명령들에 대한 정확한 예외들을 지원하고, 특정 구현에서 하드웨어에 의해 직접 실행될 수 없는 벡터 명령에 대한 예외를 야기한다. 이러한 피처들은 순방향 호환성(forward compatibility)을 허용하는 것을 가능하게 한다. 이 경우, 명령이, 특정 구현에 대해 지원되는 것보다 더 큰 길이의 벡터들에 대해 최적화된다면, 본 개시내용의 실시예들은 명령을 트래핑하고, 이후에, 하드웨어가 명령을 실행하고자 할 때 소프트웨어 내의 명령을 에뮬레이팅할 수 있다.
[0057] 실제 구현으로부터 벡터 길이를 분리시키면, 상이한 레이트들에서의 연산들의 실행을 지원하는 다양한 구현들에 대해 유연성(flexibility)이 제공된다. 일반적으로, 올드-스타일의 가변 길이 벡터 프로세서들은 매 사이클마다 벡터의 하나의 엘리먼트의 프로세싱을 시작할 것인 한편, SIMD 고정-길이 벡터 구현은 일반적으로 모든 엘리먼트들을 동시에 프로세싱하는 것을 시작한다. 대조적으로, 본 개시내용의 실시예들은 상이한 유닛들이 상이한 레이트들로 연산들을 프로세싱하는 것을 허용한다. 예컨대, 하나 또는 그 초과의 실시예들은 한 번에 16개까지의 ADD 연산들을 시작하는 것을 선정할 수 있고, 그에 따라, 벡터 길이 38의 가산은 3개의 클록 사이클에 걸쳐서 시작될 것이며, 여기서, 16개의 ADD 연산들은 처음 2개의 클록 사이클들 동안 이루어지고, 나머지 6개의 ADD 연산들은 마지막 클록 사이클 동안 이루어진다. 동일한 실시예는 단지 하나의 나누기 유닛을 구현하는 것을 선정할 수 있으며, 그에 따라, 벡터 길이 38의 나누기는, 각각의 사이클 동안 하나의 나누기로, 38개의 클록 사이클들에 걸쳐서 시작될 것이다.
[0058] 올드-스타일의 벡터 프로세서들은 고성능 부동-소수점 프로세싱에 타겟팅되었던 한편, 현대의 SIMD 스타일 아키텍처들은 보다 일반적인 목적을 갖는다. 본 개시내용의 실시예들은, 이용가능한 보다 큰 레지스터 크기들 및 명령들의 가변 길이 특성을 이용하는 방식으로 디지털 신호 프로세싱 및 그래픽 응용들에 대해 구체적으로 타겟팅되는 명령들을 포함한다.
[0059] 일 실시예에서, 벡터 아키텍처는 순차 프로세서로서 구현될 수 있다. 다른 실시예에서, 벡터 아키텍처는 보다 우수한 성능을 달성하기 위해 비순차 이슈 및 레지스터 이름변경과 같은 기법들을 사용하여 구현될 수 있다. 본 개시내용은, 가변-길이 벡터 프로세서가, 비순차 이슈 및 레지스터 이름변경과 같은 피처들을 활용하는 아키텍처에 어떻게 맞게 될(fit) 수 있고 그리고 성능을 개선하기 위해 이러한 피처들을 어떻게 이용할 수 있는 지를 도시한다.
[0060] 벡터 명령에 대한 입력들 중 하나는 연산들의 수를 특정하는 레지스터일 수 있다. 예컨대, 벡터 ISA가 구현될 수 있고, 여기서, 벡터 ADD 명령은,
Figure pct00005
의 행위를 갖는, VADD
Figure pct00006
이다.
[0061] 이러한 스타일의 벡터 명령에 대해 어떠한 특정 항(term)도 없다. 프로토타입(prototypical) 벡터 프로세서인 Cray-1은 벡터 명령들의 길이를 특정하기 위해 벡터 카운트 레지스터들을 사용하고, 그리고 디폴트로, Cray-1 스타일 벡터 명령들은 벡터 길이 레지스터와 연관된다. 하지만, 다음의 논의에서, 고정-길이 벡터 명령들로부터 명시적으로 구별하기 위해, 레지스터로부터 자신들의 길이를 얻는 벡터 명령들은 가변-길이 벡터 명령들로서 지칭된다.
[0062] 일 실시예에서, 동일한 명령 세트 아키텍처는 상이한 실현들을 가질 수 있다. 하나의 가능한 실현에서, 벡터 유닛은, 본 개시내용의 실시예에 따른 프로세서를 예시하는 도 1에 도시된 바와 같이, 현대의 비순차 프로세서 내의 몇 개의 유닛들 중 하나인 것으로 가정한다.
[0063] 도 1에 도시된 바와 같은 프로세서는:
Figure pct00007
실행하기 위한 명령들을 홀딩하는 명령 캐시(102);
Figure pct00008
명령 캐시(102)로부터 명령들을 페치하는 명령 페치 유닛(104);
Figure pct00009
페치되는 명령들 및 다양한 예측 방법들 모두에 기초하여, 명령 캐시(102)로부터 페치되는 명령들을 제어하는 제어/브랜치 실행 유닛(106);
Figure pct00010
정수 명령들을 실행하기 위한 정수 유닛들(110) 및 부동-소수점 명령들에 대한 부동-소수점 유닛들(112)을 포함하는 다양한 유닛들;
Figure pct00011
메모리로부터 다양한 유닛들과 연관된 레지스터들로의 데이터의 이동을 조정하는 것을 담당하는 로드/저장 유닛(114);
Figure pct00012
데이터 엘리먼트들을 유지하는 데이터-캐시(116);
Figure pct00013
벡터 유닛(108)을 포함할 수 있다.
[0064] 벡터 유닛(108)은, 도 2에 도시된 것처럼, 다양한 회로 블록들을 포함할 수 있다. 도 2는 본 개시내용의 실시예에 따른 벡터 유닛(200)을 예시한다. 도 2에 도시된 벡터 유닛은 하기의 것들을 포함할 수 있다:
Figure pct00014
구조화된 벡터 유닛 레지스터들을 물리적 레지스터들로 이름변경하는 레지스터 이름변경 블록(202);
Figure pct00015
아직 완료되지 않은 벡터 명령들을 홀딩하고 실행을 위해 이들 명령들을 전송하는 것을 담당하는 비순차 이슈 블록(204). 해당 명령에 대해 이용가능한 기능 유닛들의 수 및 벡터 길이에 기반하여, 벡터 명령이 반복적으로 이슈될 수 있다는 것이 주목된다;
Figure pct00016
하기의 것을 포함하는 다양한 물리적 벡터 레지스터 파일들(214):
o 엘리먼트들의 벡터들을 홀딩하는 벡터 레지스터 파일(206);
o 벡터 명령에 의해 수행되는 연산들의 수를 특정하는데 사용되는 벡터 길이 레지스터 파일(208);
o 벡터들을 합산하는 것과 같은 연산들로부터 유발되는 스칼라 값들을 홀딩하는 벡터 누산기 레지스터 파일(210);
o 단일 비트 값들을 홀딩하며 벡터 연산들의 실행을 제어하는데 사용되는 벡터 마스크 레지스터 파일(212);
Figure pct00017
하기의 것을 포함하는 (도면에 도시된 것과 같은) 다양한 기능 블록들:
o 2개의 곱셈기들(216);
o 4개의 ALU들(218);
o 단일 나누기 및/또는 제곱근(220);
o 최대값/최소값에 대해 검색하기 위한 검색 블록(222);
o 벡터 엘리먼트들을 단일 값으로 합산하기 위한 감소 블록(224).
[0065] 도 2에 도시된 것과 같은 블록들의 이러한 조합은 예시적인 목적들을 위해 선택되며 완전한(exhaustive) 것은 아니다.
유니티 벡터 아키텍처
[0066] 유니티 ISA는 통상적 제어를 수행하는 스칼라 명령들, 정수, 부동-소수점 및 메모리 액세스 명령들을 정의한다. 이는 또한 명령들의 벡터들을 조작하는 명령들의 서브세트를 정의한다. 이전 섹션에 설명된 클래스법에서, 유니티는 가변-길이 벡터-레지스터 아키텍처이다.
[0067] 이 섹션은 스칼라 서브세트로부터 디커플링되는 유니티 ISA의 벡터 서브세트에 초점을 둔다. 본 개시내용의 실시예들은 레지스터들의 수 및 명령들의 인코딩을 변경함으로써 다른 스칼라 명령 세트들에 적응될 수 있는 명령들을 포함한다.
[0068] 일 실시예에서, 벡터 서브세트를 형성하는 유니티 ISA 레지스터는 하기의 것들을 포함한다:
Figure pct00018
벡터 명령들에 의해 연산되는 엘리먼트들의 집합들을 홀딩하는 벡터 레지스터들;
Figure pct00019
벡터 명령들의 길이를 특정하는데 사용되는 벡터 카운트 레지스터들, 및 엘리먼트 카운트들이 사용되는 다른 장소들;
Figure pct00020
단일 엘리먼트들에 대한 벡터 명령들의 행위를 제어하기 위해 사용되는, 단일 비트의 벡터를 홀딩하는 벡터 마스크 레지스터들;
Figure pct00021
스칼라 값들이 벡터 명령들에 대한 입력 또는 출력으로서 요구될 때 사용되는 벡터 누산기 레지스터들.
[0069] 일 실시예에서, 유니티 ISA의 벡터 카운트 레지스터는 16-비트를 포함하며 65535까지의 벡터 길이들을 특정할 수 있다. 65535의 더블 정밀도 부동 수들의 벡터는 레지스터 당 거의 512K 바이트의 메모리를 필요로 할 수 있다. 이 크기는 현재 기술에서 구현하기에 비실용적이다. 본 개시내용의 실시예들은, 널리 행해지고 있는 기술 및 타겟 애플리케이션의 가격/성능에 적합한, 벡터 레지스터들의 상이한 크기들을 구현하는 다양한 구현들을 허용한다. 벡터 카운트가 구현된 벡터 크기에 맞지 않을 수 있는 경우, 프로세서는 예외를 취하고 명령을 에뮬레이팅할 수 있다.
명령들
[0070] 하나의 유니티 벡터 명령, 이를테면 2개의 벡터들을 가산한 명령은 vadd
Figure pct00022
로서 특정된다. 이 명령은 2개의 소스 벡터 레지스터들
Figure pct00023
로부터의
Figure pct00024
엘리먼트들을 가산하며 타겟 벡터 레지스터
Figure pct00025
에 결과를 저장한다. 이 명령의 세맨틱스는 하기의 의사-코드와 등가이다:
Figure pct00026
분류
[0071] 일 실시예에서, 유니티 벡터 ISA의 벡터의 각각의 엘리먼트는 하기의 타입들 중 하나로서 묵시적으로 분류될 수 있다:
Figure pct00027
byte: 1-바이트 정수
Figure pct00028
short: 2-바이트 정수
Figure pct00029
int: 4-바이트 정수
Figure pct00030
long: 8-바이트 정수
Figure pct00031
half: 16 비트 IEEE 부동-소수점
Figure pct00032
single: 32 비트 IEEE 부동-소수점
Figure pct00033
double: 64 비트 IEEE 부동-소수점
[0072] 벡터 레지스터들에 대해서 연산하는 모든 명령들은, 이 명령들이 입력들로서 예상하는 엘리먼트들의 타입 및 이 명령들이 출력으로서 생성하는 엘리먼트들의 타입을 특정한다. 이 명령들은, 벡터 레지스터 로드들 및 저장들, 그리고 벡터 레지스터들에 대해서 실제로는 연산하지 않고, 벡터 레지스터들 사이에 데이터를 재배열하는 연산들을 포함한다. 이 명령들은 또한 일 타입의 벡터들을 다른 타입들의 벡터들로 변환하는 명령들을 포함한다. 이들 명령들은 입력 타입 및 출력 타입 둘 모두를 특정한다.
[0073] 어셈블러 니모닉스(mnemonics) 및 본 개시내용의 설명에서, 부동-소수점 엘리먼트들에 대해서 연산하는 벡터 명령들은 'f' 접미사가 붙는다. 따라서, vadd는 정수들의 벡터들을 가산하고, vaddf는 부동-소수점 엘리먼트들의 벡터들에 대해서 연산한다. 정수/부동-소수점 엘리먼트들의 크기는 정수들에 대해
Figure pct00034
의 그리고 부동-소수점에 대해
Figure pct00035
의 추가 접미어로 표시된다. 따라서,
Figure pct00036
는 1 바이트 정수들의 벡터들을 가산하고
Figure pct00037
는 단일-정밀도 부동-소수점 값들의 벡터들을 가산한다. (입력들 및 출력들의 크기 및 타입을 수정하는 것 이외에) 엘리먼트 크기는 일반적으로 명령의 세맨틱스를 변경하지 않기 때문에, 본 개시내용에서 크기 접미사는 일반적으로 생략된다.
[0074] 벡터 레지스터 엘리먼트는 제 1 명령에 의해 특정 타입으로서 기록되고 일부 다른 타입의 벡터 레지스터들을 예상하는 제 2 명령에 의해 추후 판독될 경우, 제 2 명령에 의한 판독 행위는 정의되지 않는다.
[0075] 유니티 ISA는, 각각의 구현에 대해, 모든 벡터 레지스터들을 보관하고 복원할 수 있는 구현 특정 메커니즘이 존재한다는 것을 특정한다.
[0076] 벡터 엘리먼트들의 분류에 대한 제약들은, 유니티 ISA의 구현들이 다양한 벡터 엘리먼트 타입들의 적합한 내부 표현들을 선정하는데 프리(free)하다는 것을 의미한다. 예컨대, 32-비트 부동-소수점 수들은, 25 비트 부호 있는 가수, 8 비트 지수, 및 NaN 및 무한대를 표시하기 위한 비트들―총 35 비트를 갖는 확장된 포맷으로 저장될 수 있다.
[0077] 사실상, 이들 제한들은 구현이 벡터 엘리먼트들의 타입에 의존하여 동일한 벡터 레지스터에 대한 별개의 저장소를 사용하는 것을 허용한다. 예컨대, 각각의 모든 벡터 레지스터는 2개의 상이한 레지스터 어레이들 ―하나는 부동-소수점 타입들을 사용하는 벡터 명령들에 의한 사용을 위한 것이며 하나는 고정-소수점 타입들을 위한 것임―중 하나에 매핑될 수 있다. 이는 벡터 파일의 총 크기를 증가시킬 것이지만, 정수 및 부동-소수점 벡터 연산 명령들의 증가된 오버랩을 허용함으로써 그리고/또는 레지스터들 및 기능 유닛들 간의 더 근접한 커플링을 허용함으로써 구현의 성능을 증가시킬 수 있을 것이며, 이는 사이클 시간 및/또는 파이프라인 스테이지의 수를 감소시킬 것이다.
[0078] 모든 벡터 레지스터들을 보관하고 그리고/또는 복원하는 구현-의존 방식의 존재에 대한 요건은, 컨텍스트 스위칭 동안, 스와프 아웃되고(swapped out) 있는 실행 프로세스의 벡터 레지스터들이 보관되고, 실행될 예정인 프로세스의 벡터 레지스터들이 스와프 인 된다는(swapped in) 사실로 인해 발생한다. 그러나, 컨텍스트 스위치 코드는 각각의 레지스터에 마지막 기록된 엘리먼트들의 타입들을 알지 못한다. 결과적으로, 표준 명령들이 적합한 타입이 될 엘리먼트를 예상하는 제약을 위반하지 않고는 그 표준 명령들을 사용하는 것이 불가능하다.
[0079] 벡터 레지스터의 구현에 의존하여 몇 개의 가능한 메커니즘들이 이용가능하다. 모든 벡터 엘리먼트들이 메모리에서처럼 동일한 포맷으로 레지스터들에 저장될 경우, 바이트 이동 명령을 사용하여 (존재할 경우) 타입 체킹을 억제하는 것이 중요한 문제이다. 벡터 엘리먼트들이 타입에 기반하여 상이하게 저장될 경우, 구현은 구현 특정(및 가능하게는 비-구조화된) 레지스터의 각각의 벡터 레지스터에 기록된 마지막 타입을 추적할 수 있다. 컨텍스트 스위치 코드는, 적합한 타입의 저장 및 로드 명령들을 사용하여 값들을 보관한 한 다음 추후 복원하기 위해 해당 정보를 사용할 수 있다.
기록되지 않은 벡터 엘리먼트들
[0080] 벡터 명령이 N개의 엘리먼트들을 벡터 레지스터에 기록하고, 후속적인 벡터 명령이 벡터 레지스터로부터 기록되지 않은 엘리먼트를 판독하는 경우, 행위는 정의되지 않는다. 이 상황에서, 구현은 예외를 취하거나 기록되지 않은 엘리먼트들에 대해 미리 정의된 값을 리턴하도록 선정할 수 있다.
[0081] 모든 경우들에, 기록되지 않은 값들을 판독하는 명령을 실행할 때, 행위들은 재현 가능할 필요가 있다. 이는, 명령들의 동일한 시퀀스가 반복적으로 실행되면 그것은 동일한 결과들을 리턴한다는 것을 의미한다. 이는, 중간에 일어나는 인터럽트 또는 컨텍스트 스위치가 있어도 마찬가지이다.
[0082] 이 요건에 대한 동기부여는 프로세서 상에서 실행되는 코드의 결함들을 격리시키는 것을 가능하게 한다는 것이다. 프로그램이 어떤 결함으로 인해 벡터에 대한 이전 기록에 의해 기록되지 않은 벡터 엘리먼트를 판독하는 명령을 실행하고 판독되는 값이 일관성이 없는 경우, 프로그램의 실행의 결과들은 실행마다 변할 수 있고 이는 정확한 원인을 밝혀내는 것을 어렵게 한다.
부동-소수점 라운딩-모드/예외들
[0083] 스칼라 연산들에 대해 정의된 IEEE 부동-소수점 라운딩-모드들 및 예외들은 벡터를 일련의 부동-소수점 연산들로서 취급함으로써 부동-소수점 연산들의 벡터들로 확장되며, 이들 각각은 IEEE 부동-소수점 라운딩 모드들을 준수해야 하며 5개의 IEEE 부동-소수점 예외 타입들을 적절하게 핸들링한다.
[0084] 5개의 부동-소수점 예외 타입들(무효, 제로에 의한 나눗셈, 오버플로우, 언더플로우, 부정확) 각각에 대해, 제어 비트 및 상태 비트가 있다. 제어 비트는 예외에 직면하면 인터럽트들을 억제하거나 취하는데 사용되고, 상태 비트는 억제되지 않은 부동-소수점-예외의 발생을 레코딩하는데 사용된다.
[0085] 부동-소수점 벡터 명령이 부동-소수점 연산들의 시퀀스를 실행하고 연산들의 시퀀스 중 하나가 5개의 예외들 중 하나를 야기할 입력 피연산자들에 직면할 때, 제어 비트가 검사된다. 이 예외가 취해질 인터럽트를 유발하지 않는다고 제어 비트가 표시하는 경우, 예외 타입에 대응하는 상태 비트는 1로 세팅된다. 연산들의 시퀀스를 실행하는 동안 다수의 예외 타입들에 직면하게 되고 모든 이들 예외 타입들에 대한 제어 비트들은 인터럽트가 취해지지 않도록 하는 경우, 단일 벡터 부동-소수점 명령의 실행 동안 다수의 상태 비트들이 세팅될 수 있다는 것에 주목해야 한다.
[0086] 예외에 직면하게 되고 예외가 인터럽트를 야기하는 것으로 제어 비트가 세팅된 경우, 인터럽트는 명령이 실행되지 않은 것처럼 취해진다. 인터럽트 핸들러가 연산의 연산 시퀀스에서 인터럽트가 취해지게 한 예외 타입 및 포지션을 식별할 수 있도록 충분한 정보가 레코딩된다.
[0087] 완전한 IEEE 부동-소수점 지원을 위해, 부동-소수점 벡터 명령들은 모든 4개의 IEEE 라운딩 모드들 즉, -0, -∞, +∞, 최근사값(짝수로 제한됨)를 지원한다. 라운딩 모드는 적용될 부동-소수점 라운딩 모드를 특정하는데 사용되는 제어 레지스터에 의해 특정된다. 벡터 부동-소수점 명령이 실행되면, 연산들의 시퀀스의 각각의 결과들은 제어 레지스터 산술 유너리(unary) 명령에 기반하여 라운딩된다.
[0088] 1개의 벡터 레지스터 입력을 갖는 산술 벡터 명령들(VOP $n0, $v1, $v)은 $v2로부터 $v1로 기록하는 엘리먼트들 상에서 $n0 유너리 연산들을 실행한다. 의사-코드에서:
Figure pct00038
[0089] 기본 정수 유너리 명령들은 다음과 같다:
Figure pct00039
vabs : 각각의 엘리먼트의 절대 값을 컴퓨팅함
Figure pct00040
vneg : 각각의 엘리먼트를 무효화함
[0090] 기본 부동-소수점 산술 유너리 명령들은 다음을 포함한다:
Figure pct00041
vabsf : 각각의 엘리먼트의 절대 값을 컴퓨팅함
Figure pct00042
vnegf : 각각의 엘리먼트를 무효화함
Figure pct00043
vrecf : 각각의 엘리먼트의 역수를 컴퓨팅함
Figure pct00044
vrecef : 소프트웨어에 의해 정확한 결과로 정제(refine)될 수 있는 각각의 엘리먼트의 역수의 초기 추정을 컴퓨팅함
Figure pct00045
vsqrtf : 각각의 엘리먼트의 제곱근을 컴퓨팅함
Figure pct00046
vsqrtef : 소프트웨어에 의해 정확한 결과로 정제될 수 있는 각각의 엘리먼트의 제곱근의 초기 추정을 컴퓨팅함
[0091] vabs/vabsf 및 vneg/vnegf 명령은 모든 제로 엘리먼트들을 포함하는 제 1 입력을 갖는 바이너리(binary) vdiff/vdiffs 및 vsub/vsubf 바이너리 명령들(아래에서 설명됨)과 등가라는 것에 주목해야 한다.
산술 바이너리 명령들
[0092] 2개의 벡터 레지스터 입력들을 갖는 산술 벡터 명령들(VOP $n0, $v1, $v2, $v3)은 $n0 바이너리 연산들을 실행하여, 하나의 입력을 $v2로부터 그리고 다른 하나를 $v3으로부터 취하고 $v1에 기록한다. 의사-코드에서:
Figure pct00047
[0093] 기본 부동-소수점 산술 바이너리 명령들은 다음을 포함한다:
Figure pct00048
vaddf : 엘리먼트들을 가산함
Figure pct00049
vsubf: 엘리먼트들을 감산함
Figure pct00050
vdifff : 엘리먼트들의 절대 차를 찾음
Figure pct00051
vmulf : 엘리먼트들을 곱함
Figure pct00052
vminf : 2개의 엘리먼트들 중 최소
Figure pct00053
vmaxf : 2개의 엘리먼트들 중 최대
Figure pct00054
vdivf : 부동-소수점 나누기
[0094] 기본 정수 산술 바이너리 명령들은 다음을 포함한다 :
Figure pct00055
vadd : 엘리먼트들을 가산함
Figure pct00056
vsub: 엘리먼트들을 감산함
Figure pct00057
vdiff: 엘리먼트들의 절대 차
Figure pct00058
vmul: 엘리먼트들을 곱하고 결과의 하위 부분을 유지
Figure pct00059
vmin : 2개의 엘리먼트들 중 최소, 부호 있는 정수로 처리됨
Figure pct00060
vminu : 2개의 엘리먼트들 중 최소, 부호 없는 정수로 처리됨
Figure pct00061
vmax : 2개의 엘리먼트들 중 최대, 부호 있는 정수로 처리됨
Figure pct00062
vmaxu : 2개의 엘리먼트들 중 최대, 부호 없는 정수로 처리됨
Figure pct00063
vand : 엘리먼트들의 비트들의 논리 and
Figure pct00064
vor : 엘리먼트들의 비트들의 논리 or
Figure pct00065
vnand : 엘리먼트들의 비트들의 논리 nand
Figure pct00066
vxor : 엘리먼트들의 비트들의 논리 xor
Figure pct00067
vshl : 제 1 엘리먼트의 값이 byte/short/int/long 정수 타입인지에 의존하여, 제 2 엘리먼트의 관련된 3/4/5/6 하위 비트들만큼 제 1 엘리먼트의 값을 좌측으로 시프트함
Figure pct00068
vshr : 제 2 엘리먼트의 관련된 하위 비트들만큼 제 1 엘리먼트의 값을 우측으로 시프트함, 0들에서 시프트함(논리적 우측 시프트)
Figure pct00069
vshra : 제 2 엘리먼트의 관련된 하위 비트들만큼 제 1 엘리먼트의 값을 우측으로 시프트함, 부호 비트에서 시프트함(산술 우측 시프트)
[0095] 일 실시예에서, 유니티 ISA는 시프트 명령들의 바이트 변량들을 제공한다. 이 명령들에서, 제 1 인수는 정수 타입들 중 하나인 반면에, 제 2 인수는 바이트 엘리먼트들의 벡터이다. 이 명령들은 vshl, vshbr, vshra에 대응하는 vshbl, vshbr 및 vshbra를 포함한다.
[0096] N 바이트의 정수 곱셈의 결과는 일반적으로 표현하기 위하여 2N바이트를 필요로 할 수 있다. 이를 인식하여, 실시예들은 벡터 곱셈의 몇 가지 상이한 플레이버(flavor)들을 포함한다. 기본 명령인 vmul은 2개의 N개의 바이트 엘리먼트들을 함께 곱하고 결과의 하위 N 바이트를 저장한다. 일 실시예에서, 유니티 ISA는 다수의 결과들을 다음의 더 큰 정수 타입으로 프로모팅하고 전체 결과를 저장하는 벡터 명령들을 포함할 수 있다. 벡터 명령들은 다음을 포함할 수 있다:
Figure pct00070
v2mul : 2개의 엘리먼트들을 곱함, 두 인수들을 할당된 정수들로 처리함.
Figure pct00071
v2mulus : 2개의 엘리먼트들을 곱함, 제 1 인수를 부호 있는 정수로, 그리고 제 2 인수를 부호 없는 정수로 처리함
Figure pct00072
v2muluu : 2개의 엘리먼트들을 곱함, 두 인수들을 부호 없는 정수들로서 처리함
[0097] 일부 구현들에서, 위에서 논의된 바와 같은 벡터 명령들은 긴 정수 타입에 대해 정의되지 않는다.
[0098] M개의 N-바이트 엘리먼트들의 벡터들을 프로세싱하고 M개의 2N-바이트 엘리먼트들의 단일 벡터를 산출할 수 있게 하는 것은, 고정-벡터 아키텍처들이 할 수 없는 것이다. 벡터 레지스터들의 크기가 고정되므로, 이들이 M * N개의 바이트를 판독하고 2 * M * N개의 바이트를 산출하는 경우, 이들은 다음 중 하나를 요구한다:
Figure pct00073
2개의 별개의 명령들을 사용하여 벡터를 프로세싱함, 이들 각각은 M/2 입력을 판독함, 또는
Figure pct00074
2개의 별개의 벡터 레지스터들에 기록하는 명령을 사용함, 각각은 M/2 출력들을 가짐.
곱셈 및 가산
[0099] 곱셈-및-가산 벡터 명령은 3-입력 명령들, 예컨대, $v2 및 $v3로부터의 입력들을 곱하고 그것을 $v4와 결합하고, 이어서 $v1에 기록하는 $n0 곱셈-및-가산 연산들을 실행하는 VOP $n0,$v1,$v2,$v3,$v4의 명령을 포함할 수 있다. 의사 코드에서, VOP 명령은 다음을 나타낸다:
Figure pct00075
[00100] 곱셈의 결과가 제 3 인수와 결합할 수 있는 방식들에 대응하는, 곱셈-및-가산 명령에 대한 4개의 부동-소수점 변량들이 있다.
Figure pct00076
vmuladdf : 곱셈의 결과를 제 3 인수에 가산함
Figure pct00077
vmulsubf : 곱셈의 결과를 제 3 인수의 네거티브에 가산함
Figure pct00078
vnmuladdf : 곱셈의 결과의 네거티브를 제 3 인수에 가산함
Figure pct00079
vnmulsubf : 곱셈의 결과의 네거티브를 제 3 인수의 네거티브에 가산함
[00101] 결과의 타입이 입력들의 타입과 동일한지 또는 그것이 크기가 2배인지에 기반하여 정수 곱셈-및-가산의 2개의 클래스들이 있다.
[00102] 제 1 클래스의 4개의 명령들에서, 모든 3개의 입력들은 동일한 길이이다. 곱셈의 하위 N 바이트이 제 3 인수와 결합되며 결과의 N 바이트이 저장된다. 명령들의 제 1 클래스는 다음을 포함한다:
Figure pct00080
vmuladd : 곱셈의 결과를 제 3 인수에 가산함
Figure pct00081
vmulsub : 곱셈의 결과를 제 3 인수의 네거티브에 가산함
Figure pct00082
vnmuladd : 곱셈의 결과의 네거티브를 제 3 인수에 가산함
Figure pct00083
vnmulsub : 곱셈의 결과의 네거티브를 제 3 인수의 네거티브에 가산함
[00103] 제 2 클래스에서, 곱셈에 대한 2개의 입력들은 크기 N이고 제 3 입력은 크기 2N이다. 최초의 2개의 인수들은 부호 있는 정수들로서 함께 곱해지고 결과의 2N 바이트 값은 2N 바이트의 제 3 인수에 가산되며, 2N 바이트의 결과가 저장된다. 명령들의 제 2 클래스는 다음을 포함한다:
Figure pct00084
v2muladd : 곱셈의 결과를 제 3 인수에 가산함
Figure pct00085
v2mulsub : 곱셈의 결과를 제 3 인수의 네거티브에 가산함
Figure pct00086
v2nmuladd : 곱셈의 결과의 네거티브를 제 3 인수에 가산함
Figure pct00087
v2nmulsub : 곱셈의 결과의 네거티브를 제 3 인수의 네거티브에 가산함
감소
[00104] 감소 연산들은 벡터 레지스터들을 감소 레지스터에 저장되는 스칼라 결과들과 결합한다. 선택적으로, 감소 레지스터는 또한 결과에 가산될 수 있다.
[00105] 감소 명령들의 제 1 클래스는 벡터 합 감소 명령들을 포함한다. 부동-소수점 벡터 합 감소 명령인 vsumred0f $n0,$c1,$v2은 $v2의 $n0 엘리먼트들을 함께 가산하고 이들을 누산기 레지스터 $c1에 저장한다. 변량 형태인 vsumredf $n0, $c1, $v2, $c3가 또한 결과에 $c3을 가산한다. 의사-코드에서:
Figure pct00088
[00106] 부동-소수점 합은 입력 타입들과 동일한 정밀도로 컴퓨팅된다.
[00107] 대조적으로, 명령들의 정수 형태들(vsumred 및 vsumred0)은 벡터 $v2의 엘리먼트들의 타입에 독립적으로 64 비트 수로서 결과들을 합산한다.
[00108] 감소 명령들의 제 2 클래스는 벡터 곱셈 합 명령들을 포함한다. 부동-소수점 곱셈 감소 명령은 vmulred0f $n0,$c1,$v2,$v3 및 vmulred0f $n0,$c1,$v2,$v3,$c4이다. 이 명령들의 행위는 2개의 벡터 레지스터들의 엘리먼트들이 합산되기 전에 함께 곱해진다는 점을 제외하면 합 감소와 유사하다. 의사-코드에서:
Figure pct00089
[00109] 벡터 합 감소의 경우에서와 같이, 부동-소수점 합은 벡터 엘리먼트들과 동일한 정밀도로 컴퓨팅된다.
[00110] 곱셈 감소의 정수 형태(vmulred 및 vmulred0)의 경우에, 2개의 벡터들의 엘리먼트들은 부호 있는 정수들로서 함께 곱해지고, 더블 폭 곱들은 64 비트로 함께 합산된다.
부분 감소
[00111] 일 실시예에서, 유니티 ISA의 명령들은 부분 감소들을 수행할 수 있다. 이러한 명령들은 벡터들의, 또는 계산 결과들의 서브세트들을, 더 적은 수의 엘리먼트들을 갖는 벡터들로 결합할 수 있다.
[00112] 기본 부동-소수점 결합 명령은 vsumnf_xN $n0,$v1,$v2이고, 여기서 N은 전체 수이다. 이 명령은 $v2의 N개의 엘리먼트들의 그룹들을 합산하고, $n0/N 결과들을 $v2에 둔다. 이 명령을 위한 의사-코드는 다음과 같다:
Figure pct00090
[00113] 일 실시예에서, 정수 동치(vsumn) 및 입력들의 2배 크기인 결과들을 사용하여 정수 값 엘리먼트들을 합산하는 동치(v2sumn)가 존재한다.
[00114] 다른 실시예에서, 유니티 ISA는 2개의 벡터들의 엘리먼트들을 곱셈한 후, 곱들의 그룹들을 합산하는 다른 부분 감소 벡터 명령을 포함할 수 있다. 부동-소수점 엘리먼트들에 관하여 연산하는 버전은 vdotf_xN $n0,$v1,$v2,$v3이며, 연산은 내적(dot product)에 대한 연산과 유사하기 때문에, 명령에서 "도트"는 "도트-곱"을 줄인 표현이다. 이 명령을 위한 의사-코드는 다음과 같다:
Figure pct00091
[00115] 정수 및 더블-폭 정수 동치들은 vdot 및 v2dot이다.
복소수 명령들
[00116] 일 실시예에서, 유니티 ISA의 명령들은, 벡터 엘리먼트들에 대해 복소수 곱셈들을 수행하는 명령들을 포함할 수 있으며, 벡터는 교번 실수 및 허수 값들의 시퀀스들로서 취급된다. 예컨대, 벡터 복소수 부동-소수점 곱셈 명령, vxmulf $n0,$v1,$v2,$v3는 다음 의사-코드에 의해 설명된 행위를 포함한다.
Figure pct00092
[00117] $n0은 복소수 곱셈들의 수의 2배를 특정한다는 것을 주목한다. 이유는, 복소수 곱셈들에 대해 다른 연산들을 수행할 경우, 정상 벡터 연산들, 이를테면, 벡터 가산이 사용된다는 점이다. 이들은 실수 및 허수 ADD들을 별개의 ADD들로서 카운팅한다. 따라서, N/2 복소수 값들의 벡터를 가산하기 위해서, N의 카운트가 특정될 필요가 있다. 벡터 복소수 곱셈 명령은 N을 사용하므로, 연산들의 종류들 둘 모두를 제어하는데 동일한 벡터 카운트가 사용될 수 있다. 카운트가 홀수인 경우 벡터 복소수 곱셈 명령의 행위가 정의되지 않는다.
[00118] 부동-소수점 곱셈 또는 부호 있는-부호 있는 정수 곱셈을 사용하는 벡터 명령들의 모든 형태들은 그들의 복소수 곱셈 동치를 갖는다. 벡터 부동-소수점 곱셈 명령들 외에도, 이들은 벡터 정수 곱셈들(vxmul) 및 벡터 더블 폭 정수 곱셈들(v2xmul), 부동-소수점 곱셈 가산(vxmuladdf, vxmulsubf, vxnmuladdf, vxnmulsubf), 정수 곱셈 가산(vxmuladd, vxmulsub, vxnmuladd , vxmulsub) 및 정수 더블 폭 곱셈 가산(v2xmuladd, v2xmulsub, v2xnmuladd, v2xnmulsub)을 포함한다.
[00119] 또한, 벡터 복소수 합 감소 및 벡터 복소수 곱셈 감소 명령도 있다. 이들 명령들은 2개의 누산기를 타겟으로 하는데, 하나는 실수합을 위한 것이고 하나는 허수 합을 위한 것이다. 예컨대, vxmulred0f $n0,$c1,$c2,$v3,$v4 복소수는 벡터 레지스터들 $v3 및 $v4의 엘리먼트들 쌍들을 곱하고, 이들을 복소수로 처리한 후, 실수 및 허수 값들을 개별적으로 합산한다. 실수 합은 $c0로 그리고 허수 합은 $c1로 기록된다. 결과들을 다시 기록 전에 비-제로(non-zero) 변량 vxmulredf $n0,$c1,$c2,$v3,$v4는 $c0 및 $c1의 원래의 콘텐츠들을 합들에 가산한다. 이는 다음 의사-코드로 표현될 수 있다:
Figure pct00093
[00120] 벡터 복소수 합 명령들, 이를테면, vxsumred0f $n0,$c1,$c2,$v3는 벡터 레지스터의 교번 엘리먼트들을 합산하고 이들을 2개의 지정된 누산기들에 저장한다. 감소 명령들의 부동-소수점(vxsumredf, vxsumred0f, vxmulredf, vxmulred0f) 및 정수 동치들(vxsumred, vxsumred0, vxmulred, xvmulred0) 둘 모두가 있다.
[00121] 부분 감소 명령들은 또한 복소수 동치들 - vxsumnf, vxsumn, v2xsumn, vxdotf, vxdot, v2xdot를 갖는다.
포화
[00122] 일 실시예에서, 유니티 ISA의 명령들은 고정-소수점 포화 벡터 명령들을 포함할 수 있다. 이 명령들은 정수 타입의 엘리먼트들에 대해 연산한다. 이들 고정-소수점 포화 명령들 각각은 정수 타입 데이터에 대해서 연산하는 동치 비포화 벡터 명령을 포함할 수 있다. 일반적으로, 고정-소수점 포화 명령은 결과 엘리먼트의 타입에 의해 표현가능한 값들의 범위를 초과하는 무한 정밀도 결과들의 처리에 있어서 그의 비포화 동치와는 상이하다. 비포화 연산들의 경우에서, 결과가 트렁케이팅된다. 포화 명령들의 경우, 결과는 결과의 부호에 의존하여 표현가능한 최대 포지티브/네거티브 값으로 포화된다.
[00123] 기본 패턴에 맞는 명령들은 다음과 같다:
Figure pct00094
vadds : 포화를 가산
Figure pct00095
vsubs : 포화를 감산
Figure pct00096
vdiffs : 절대 차 포화; 이는 최대 포지티브 값까지만 포화될 수 있다는 것을 주목한다
Figure pct00097
vshls : 포화를 좌측 시프트
Figure pct00098
vshbls : 포화를 바이트 단위로 좌측 시프트
[00124] 고정-소수점 곱셈들은 입력들 둘 모두를 부호 있는 것으로서 취급한다. 고정-소수점 곱셈들은, 2개의 엘리먼트들의 곱셈들의 결과들에 추가로 2를 곱하는 추가 특성을 포함한다. 따라서, 정수 곱셈과 고정-소수점 곱셈의 결과는, 포화가 발생하지 않더라도 2배 만큼 다를 수 있다. 크기 N의 고정-소수점 곱셈의 결과가 크기 N에 다시 저장될 경우, 하위 N 바이트가 저장되는 정수 곱셈과는 다르게, 곱셈의 상위 N 바이트가 저장된다.
[00125] 곱셈 기반 고정-소수점 명령들은 다음을 포함한다:
Figure pct00099
vmuls : 포화를 고정-소수점 곱셈
Figure pct00100
vmuladds : 포화를 고정-소수점 곱셈 및 가산
Figure pct00101
vmulsubs : 포화를 고정-소수점 곱셈 및 감산
Figure pct00102
vnmuladds : 포화를 고정-소수점 곱셈 및 가산후 무효화
Figure pct00103
vnmulsubs : 포화를 고정-소수점 곱셈 및 감산후 무효화
Figure pct00104
v2muls : 포화를 더블-폭 결과로 고정-소수점 곱셈
Figure pct00105
v2muladds : 포화를 더블-폭 결과로 고정-소수점 곱셈 및 가산
Figure pct00106
v2mulsubs : 포화를 더블-폭 결과로 고정-소수점 곱셈 및 감산
Figure pct00107
v2nmuladds : 포화를 더블-폭 결과로 고정-소수점 곱셈 및 가산후 무효화
Figure pct00108
v2nmulsubs : 포화를 더블-폭 결과로 고정-소수점 곱셈 및 감산 무효화
[00126] 게다가, 복소수 정수 곱셈들 변량들은 또한 포화 고정-소수점 변량들을 포함한다.
Figure pct00109
vxmuls : 포화를 고정-소수점 복소수 곱셈
Figure pct00110
vxmuladds : 포화를 고정-소수점 복소수 곱셈 및 가산
Figure pct00111
vxmulsubs : 포화를 고정-소수점 복소수 곱셈 및 감산
Figure pct00112
vxnmuladds : 포화를 고정-소수점 복소수 곱셈 및 가산후 무효화
Figure pct00113
vxnmulsubs : 포화를 고정-소수점 복소수 곱셈 및 감산후 무효화
Figure pct00114
v2xmuls : 포화를 더블-폭 결과로 고정-소수점 복소수 곱셈
Figure pct00115
v2xmuladds : 포화를 더블-폭 결과로 고정-소수점 복소수 곱셈 및 가산
Figure pct00116
v2xmulsubs : 포화를 더블-폭 결과로 고정-소수점 복소수 곱셈 및 감산
Figure pct00117
v2xnmuladds : 포화를 더블-폭 결과로 고정-소수점 복소수 곱셈 및 가산후 무효화
[00127] 정수 감소 연산들은 그들의 고정-소수점 동치들을 또한 갖는다. 이 경우, 합산의 결과들은 누산기 레지스터들에 기록되기 전에 포화된다. 이들 명령들은 다음과 같다:
Figure pct00118
vsumred0s : 엘리먼트 합산들 및 포화 감소
Figure pct00119
vsumreds : 누산기로 엘리먼트들 합산 및 포화 감소
Figure pct00120
vmulred0s : 엘리먼트 곱들 합산 및 포화 감소
Figure pct00121
vmulreds : 누산기로 엘리먼트 곱들 합산 및 포화 감소
Figure pct00122
vxsumred0s : 교번 엘리먼트들 합산 및 포화 감소
Figure pct00123
vxsumreds : 누산기로 교번 엘리먼트들 합산 및 포화 감소
Figure pct00124
vxmulred0s : 복소수 엘리먼트 곱들 합산 및 포화 감소
Figure pct00125
vxmulreds : 누산기로 복소수 엘리먼트 곱들 합산 및 포화 감소
[00128] 부분 감소 연산들은 또한 고정-소수점 동치들을 포함한다. 이 경우, 곱셈들은 고정-소수점 세맨틱스를 사용하여 수행되고, 그 결과는, 다시 기록되기 전에 포화된다.
Figure pct00126
vsumns : 벡터 엘리먼트들의 그룹들을 합산 및 합들을 포화
Figure pct00127
v2sumns : 더블-폭 결과들로 벡터 엘리먼트들의 그룹들을 합산 및 합들을 포화
Figure pct00128
vdots : 고정-소수점 세맨틱스를 사용하여 엘리먼트들을 곱셈, 곱들을 합산 및 합들을 포화
Figure pct00129
v2dots : 고정-소수점 세맨틱스를 사용하여 엘리먼트들을 곱셈, 더블 폭 결과들로 곱들의 합산, 및 합들을 포화
Figure pct00130
vxsumns : 교번 엘리먼트들의 그룹들을 합산 및 합들을 포화
Figure pct00131
v2xsumns : 더블-폭 결과들로 교번 엘리먼트들의 그룹들을 합산 및 합들을 포화
Figure pct00132
vxdots : 복소수 고정-소수점 세맨틱스를 사용하여 엘리먼트들을 곱셈, 곱들을 합산 및 합들을 포화
Figure pct00133
v2dxots : 복소수 고정-소수점 세맨틱스를 사용하여 엘리먼트들을 곱셈, 더블 폭 결과들로 곱들을 합산 및 합들을 포화
변환
[00129] 벡터의 부동-소수점 엘리먼트들은 vunpackf $n0,$v1,$v2 명령을 사용하여 다음 더 큰 크기로 변환될 수 있다. 따라서, vunpack_f $n0,$v1,$v2는 $v2의 $n0 단일-정밀도 값들을 배수로 변환하고, 결과들을 $v1에 저장할 수 있다.
[00130] 벡터의 부동-소수점 엘리먼트들은 vpackf $n0,$v1,$v2 명령을 사용하여 다음 더 작은 크기로 변환될 수 있다. 따라서, vunpack_f $n0,$v1,$v2 는 $v2의 $n0 단일-정밀도 값들을 하프-정밀도 값들로 변환하고, 결과들을 $v1에 저장할 수 있다.
[00131] 벡터의 정수 엘리먼트들은 vunpack 명령을 사용함으로써 다음 더 큰 크기로 변환될 수 있다. 이 명령은 다음을 포함하여 몇 가지 변량들을 갖는다:
Figure pct00134
부호 확장
Figure pct00135
제로 확장
Figure pct00136
상위 절반에 배치하고, 제로들을 오른쪽에 추가
[00132] 예컨대, 바이트 0xff를 언패킹(unpacking)할 경우, 3개의 옵션들은 각각 하프-워드들 0x00ff, 0xffff, 0xff00을 발생시킬 수 있다.
[00133] 벡터의 정수 엘리먼트들은 vpack 명령을 사용하여 다음 하위 크기로 변환될 수 있다. 이는 또한 다음을 포함하여 몇 가지 변량들을 갖는다:
Figure pct00137
하위 절반을 사용
Figure pct00138
하위 절반을 포화
Figure pct00139
상위 절반을 사용
Figure pct00140
고정-소수점 패킹; 이는, 하위 절반의 최고 비트가 세팅되는 경우 1씩 증가하여 상위 절반을 취하는 것을 포함하고, 필요한 경우 포화된다.
[00134] 예컨대, 하프 워드
Figure pct00141
을 패킹할 때, 4 개의 옵션들은
Figure pct00142
의 결과들을 산출한다.
[00135] 정수 값들의 벡터는 명령들(
Figure pct00143
)을 사용하여 등가 부동-소수점 값들의 벡터로 변환되거나 이로부터 변환될 수 있다. 이들 명령들은 정수 및 부동-소수점 엘리먼트들 둘 모두의 타입들을 특정한다. 따라서,
Figure pct00144
는 4 바이트 정수들을 32 비트 단일-정밀도 부동-소수점 수들로 변환하고, 반면에
Figure pct00145
는 더블-정밀도 부동-소수점 엘리먼트들을 4 바이트 정수들로 변환한다.
스칼라/벡터 이동
[00136] 벡터는 벡터 브로드캐스트 명령(
Figure pct00146
)을 사용하여 누산기 레지스터의 콘텐츠들을 사용하는 정수 값 엘리먼트들로 그리고 부동-소수점 동치(
Figure pct00147
)를 사용하여 부동-소수점 엘리먼트들로 초기화될 수 있다. 이러한 명령에 대한 의사-코드는 다음과 같다.
Figure pct00148
[00137] 단일 정수 엘리먼트는 벡터 첨부 명령(
Figure pct00149
)을 사용하여 벡터에 삽입될 수 있다. 부동-소수점 동치는
Figure pct00150
이다. 이들 명령들은 포지션(
Figure pct00151
Figure pct00152
)에서 엘리먼트(
Figure pct00153
)를 첨부하고, 이어서
Figure pct00154
을 증가시킨다. 이러한 명령에 대한 의사-코드는 다음과 같다.
Figure pct00155
[00138]
Figure pct00156
의 증가는, 카운트 레지스터를 명시적으로 변경해야 할 필요 없이, 벡터로의 반복된 삽입들을 허용한다.
[00139] 정수 엘리먼트가
Figure pct00157
명령들을 사용하여 벡터로 카피될 때, 정수 엘리먼트는 트렁케이팅된다.
Figure pct00158
명령들은, 기록 전에, 그 값을 특정된 정수 엘리먼트 폭까지 포화시킨다.
[00140] 단일 정수 엘리먼트는
Figure pct00159
Figure pct00160
명령들을 사용하여 벡터로부터 누산기로 이동될 수 있다.
Figure pct00161
명령은
Figure pct00162
에서의
Figure pct00163
내의 부호 있는 정수 엘리먼트를 누산기(
Figure pct00164
)로 카피하고, 이어서
Figure pct00165
을 증가시킨다.
Figure pct00166
명령은
Figure pct00167
를 감소시키고, 이어서
Figure pct00168
로부터의 감소된 포지션에서의 값을
Figure pct00169
로 카피한다. 의사-코드는 다음과 같다.
Figure pct00170
[00141] 연산들은 시작 또는 종료에서 시작하여 연속적인 값들을 벡터 레지스터로부터 누산기로 이동시키는 것을 허용하도록 이러한 방식으로 특정된다.
[00142] 부동-소수점 동치들은
Figure pct00171
Figure pct00172
이다.
데이터 재정렬
[00143] 데이터를 재정렬하는 다양한 명령들이 존재하는데, 일부는 단지 하나의 벡터를 사용하고, 다른 것들은 2개의 벡터들을 사용한다. 이들 명령들의 정수 및 부동-소수점 변량들의 행위는, 이동되는 값들의 크기를 제외하고, 동일하다.
[00144] 벡터 인터리브 명령들(
Figure pct00173
) 및 그의 부동-소수점 동치(
Figure pct00174
)는,
Figure pct00175
Figure pct00176
으로부터 N 개의 엘리먼트들을 교번적으로 선택함으로써
Figure pct00177
개의 엘리먼트들의 결과 벡터(
Figure pct00178
)를 생성한다.
Figure pct00179
Figure pct00180
의 배수일 수 있다. 이들 명령들의 행위는 다음의 의사-코드에 의해 캡처된다.
Figure pct00181
[00145] 본 개시내용의 실시예들은 또한,
Figure pct00182
Figure pct00183
와 그들의 부동-소수점 동치들(
Figure pct00184
)을 함께 포함하는 역 연산을 수행하는 벡터 명령들을 제공한다. 이들 명령들은 N 개의 엘리먼트들의 홀수 및 짝수 그룹들을 추출한다. 이것은 다음의 의사-코드에서 입증될 수 있다.
Figure pct00185
[00146] 일 실시예에서,
Figure pct00186
Figure pct00187
명령들은 벡터의 엘리먼트들의 교번적인 그룹들을 분리하고, 이어서
Figure pct00188
를 사용하여 그들을 다시 합하기 위해 사용된다.
[00147] 벡터의 트레일링 엘리먼트들은
Figure pct00189
명령을 사용하여 추출될 수 있다. 이러한 명령(및 그의 부동-소수점 동치
Figure pct00190
)은
Figure pct00191
에서 시작하는
Figure pct00192
개의 엘리먼트들을 벡터(
Figure pct00193
)로부터 추출하고, 그들을
Figure pct00194
에 도입한다. 다음의 의사 코드는 연산들을 상세히 도시한다.
Figure pct00195
[00148] 2 개의 벡터들은
Figure pct00196
명령, 그의 부동-소수점 동치(
Figure pct00197
)을 사용하여 연쇄될 수 있다. 이러한 명령에서,
Figure pct00198
의 첫번째
Figure pct00199
개의 엘리먼트들은,
Figure pct00200
로 기록된
Figure pct00201
개의 엘리먼트들을 포함하는 새로운 벡터를 형성하기 위해
Figure pct00202
에 대한 대응하는 엘리먼트들과 결합된다. 다음의 의사 코드는 연산들을 상세히 도시한다.
Figure pct00203
[00149] 단일 벡터 내의 엘리먼트들의 그룹들은
Figure pct00204
를 사용하여 재정렬될 수 있다. 이러한 명령은
Figure pct00205
개의 엘리먼트들을 N 개의 엘리먼트들의 그룹들로 분할하고, 이어서 이들 그룹들을 스와프하고 그들을
Figure pct00206
에 기록한다. 이러한 명령의 행위는,
Figure pct00207
Figure pct00208
의 배수가 아니면, 정의되지 않는다. 의사-코드는 다음과 같다.
Figure pct00209
마스크 세트
[00150] 벡터 마스크 레지스터들은 일반적으로 단일 비트들의 벡터로서 고려될 수 있다.
[00151] 벡터 마스크 레지스터들은 다양한 벡터 비교 명령들의 결과에 의해 세팅될 수 있다. 예컨대, 명령(
Figure pct00210
)은, 엘리먼트들이 적합한 크기의 부호 있는 정수들이라고 가정하여, 벡터의 엘리먼트들을 비교하고, 이어서 조건이 거짓/참이라고 가정하는 0/1을 저장한다. 이러한 명령에 대한 의사-코드는 다음과 같다.
Figure pct00211
[00152] 조건(cond)은 "동일함", "동일하지 않음", "더 큼", "더 작음", "더 크거나 동일함", 및 "더 적거나 동일함" 중 하나일 수 있다.
[00153] 유사한 명령(
Figure pct00212
)은 부호 없는 값들로서 정수 엘리먼트들의 벡터들을 비교한다. 이것은 동일한 6 개의 조건들을 포함한다.
[00154] 부동-소수점 명령(
Figure pct00213
)은 부동-소수점의 벡터들을 비교한다. 게다가, 이는, 어느 입력이 NaN인지를 체크하기 하고, 어떠한 입력도 NaN이 아닌지를 체크하기 위해, 2 개 또는 그 초과의 조건들을 수용한다.
[00155] 실시예들은 또한, 벡터(
Figure pct00214
)의 각각의 엘리먼트의 부동-소수점 클래스를 테스팅하고, 그것이 명령 내의 클래스 필드에 의해 특정된 클래스(들)의 멤버인지 여부에 기반하여
Figure pct00215
에서 대응하는 것을 세팅하는 명령(
Figure pct00216
)을 포함할 수 있다. 부동-소수점 수는 다음과 같을 수 있다.
· NaN(Not-a-Number); 이는 qNaN(quiet NaN)들 또는 sNaN(signaling NaN)들로 추가로 분할될 수 있음
· 무한성
· 제로
· 준정상
· 정상(모든 다른 경우들임)
[00156] 클래스 명령 수정자는 명령이 물론 클래스들의 조합들, 이를테면, 정상+제로, 정상+제로+준정상 등을 테스팅하도록 허용할 수 있다.
[00157] 실시예들은 부호 및 클래스의 테스팅을 동시적으로 허용하는 2 개의 명령들을 포함할 수 있다.
Figure pct00217
는 위와 같이 클래스 멤버쉽을 체크하고, 또한 부호 비트를 체크한다. 마스크 비트는, 테스팅되는 클래스가 NaN인 경우를 제외하고, 명령이 테스팅되는 클래스 내에 있고 포지티브인 경우에만, 1로 세팅된다. 이러한 예외 경우에 대해, 조건은, NaN이 sNaN(signaling NaN)인 경우에만 참이다.
Figure pct00218
는 네거티브/qNaN을 체크한다.
[00158]
Figure pct00219
은 비트 단위 op(operation)를 사용하여 벡터 마스크 레지스터들(
Figure pct00220
Figure pct00221
)의
Figure pct00222
비트들을 결합하고, 결과적인 비트들을
Figure pct00223
에 다시 저장한다. 이러한 명령에 대한 의사-코드는 다음과 같다.
Figure pct00224
[00159] op는 "논리곱", "부정 논리곱", "논리합", "부정 논리합", "배타적 논리합", "배타적 부정 논리합", "논리곱-보수", 또는 "부정 논리곱-보수" 중 하나이다.
마스크 데이터
[00160] 마스크 비트들의 제어 하에서 벡터 레지스터들의 콘텐츠들을 이동시키는 마스킹된 데이터 연산들의 몇몇의 플레이버들이 존재한다.
[00161] 벡터 선택 명령들(
Figure pct00225
) 및 그의 정수 대응물(
Figure pct00226
)은 마스크 레지스터의
Figure pct00227
비트들 각각을 검토하고, 비트의 값에 의존하여
Figure pct00228
또는
Figure pct00229
으로부터 대응하는 엘리먼트를 선택하고, 이를
Figure pct00230
내의 그 포지션에 저장한다. 그의 의사-코드는 다음과 같다.
Figure pct00231
[00162] 벡터 펑처 명령(
Figure pct00232
)은, tf가 0 또는 1 중 하나인 경우에, 벡터 마스크(
Figure pct00233
)의
Figure pct00234
개의 정수 엘리먼트들에 걸쳐 스테핑하고, 자신이 tf와 동일하면,
Figure pct00235
의 대응하는 엘리먼트를 결과 벡터(
Figure pct00236
)에 첨부한다. 첨부된 엘리먼트들의 수는 다시
Figure pct00237
에 기록된다. 부동-소수점 동치는
Figure pct00238
이다. 그들의 행위는 의사-코드를 사용하여 설명될 수 있다.
Figure pct00239
[00163] 다른 명령은 벡터
Figure pct00240
명령(
Figure pct00241
)이다.
Figure pct00242
명령 및 그의 부동-소수점 대응물(
Figure pct00243
)에서,
Figure pct00244
Figure pct00245
비트들이 검사된다. 그의 값에 기반하여,
Figure pct00246
의 다음 미판독된 값 또는
Figure pct00247
의 다음 미사용된 값이 선정되고,
Figure pct00248
에 가산된다. 행위는 다음의 의사-코드에 의해 캡처된다.
Figure pct00249
[00164]
Figure pct00250
Figure pct00251
명령들의 결합은 벡터들을 사용하는 조건들을 통해 루프들을 효율적으로 구현하는데 사용될 수 있다. 예컨대, 아래의 의사 코드 프래그먼트는 하나의 구현을 도시한다.
Figure pct00252
[00165] 일 실시예에서, 벡터 펑처 명령들은 입력 어레이(A)의 엘리먼트들을 참 및 거짓 경우들에 대한 벡터들로 분리하는데 사용되고, 이어서 참 및 거짓 경우들로부터의 결과들을 출력 어레이(X)로 결합하기 위해
Figure pct00253
명령들을 사용한다. 이는, 코드-프래그먼트가 다음과 같이 다시 기록된 것처럼 동일하다.
Figure pct00254
Figure pct00255
[00166] 이들 종류들의 변환들이 매우 유용한 하나의 경우는 다이버전트 그래픽 커널들을 구현하는 것이다.
검색
[00167] 벡터 검색 명령들(
Figure pct00256
Figure pct00257
)은 벡터 내의
Figure pct00258
내의
Figure pct00259
개의 엘리먼트들의 최대 또는 최소 값 엘리먼트를 검색하고, 그 값을
Figure pct00260
에 그리고 최대 또는 최소 값 엘리먼트의 대응하는 포지션을 $n1에 저장할 수 있다. 다음의 의사-코드는
Figure pct00261
에 대한 것이다.
Figure pct00262
[00168] 실시예들은 또한, 예컨대,
Figure pct00263
,
Figure pct00264
,
Figure pct00265
Figure pct00266
를 포함하는 이들 명령들에 대한 부호 없는 및 부동-소수점 동치들을 포함한다.
디지털 신호 프로세싱
[00169] 위에 설명된 다양한 명령들(이를테면, 고정-소수점 포화 명령들)은 DSP(digital signaling processing) 애플리케이션들에 유용하다. 이 섹션은, DSP 동작들의 성능을 가속화시키는 것이 주요 동기인 명령들을 설명한다.
[00170] DSP에서의 하나의 세트의 공통 동작들은 더 긴 벡터의 엘리먼트들 내의 다양한 포지션들과 짧은 벡터의 반복된 내적들을 비롯해서 필터링 및 상관이다. 정식(canonical) 필터의 경우, 이하의 코드 프레그먼트에 도시된 바와 같이, 연속적인 포지션들에서 내적들이 수행된다.
Figure pct00267
[00171] 유니티 ISA는 이것을 가속화하기 위해 vfilt_xN $n0,$v1,$v2,$v3,$n4 명령(및 그의 부동-소수점 및 포화 고정-소수점 동치들(vfiltf & vfilts))을 사용한다. vfilt_xN에서, $v3은 $n0 내적들을 컴퓨팅하는 $n4개의 엘리먼트들의 벡터이며, 여기서 처음에 $v2의 $n4개의 엘리먼트들이 시작하고 크기 N의 단계들로 진행한다. 이러한 행위는 이하의 의사-코드에 의해 설명된다.
Figure pct00268
Figure pct00269
[00172] 유니티 ISA가 가속하는 다른 공통 DSP 동작은 기수-2 FFT(Fast Fourier Transform)이다. 기수-2 FFT는, 후술하는 코드 프레그먼트에서와 같이 표현될 수 있는 커널(kernel)과 함께 다수의 스테이지들을 포함한다.
Figure pct00270
[00173] 이 예에서 X, A, 및 W는 모두 복소수들이며, 곱셈은 복소수-복소수 곱셈이라는 점이 주목된다. W는 트위들 팩터(twiddle factor)로 알려져 있다.
[00174] 당업자는, vfftf_xN $n0,$v1,$v2,$v3를 사용함으로써, 또는 그의 정수 및 고정-소수점 포화 동치들(vfft & vffts)을 사용함으로써 이 커널을 가속화한다. 이러한 명령들은 $v2의 $n0개의 엘리먼트들을 2*N개의 복소수들의 그룹들로 - 즉, 4*N개의 엘리먼트들로 나누고, 엘리먼트들의 쌍들은 실수부 및 허수부를 나타낸다. 크기 log2(N)의 기수-2 FFT는, $v3의 처음 2*N개의 엘리먼트들을 트위들 팩터들로서 사용하여 각각의 그룹에 대해 실행되고, 그 결과는 $v1에 기록된다. 이 연산에 대한 의사-코드는 다음과 같다.
Figure pct00271
Figure pct00272
[00175] 이 명령의 행위는, $n0이 4N의 배수가 아니라면 정의되지 않는다. vffts의 곱셈은 고정-소수점 세맨틱스를 사용하여 이루어진다. 일반적으로, N은 2의 멱수들로 제한될 수 있다.
[00176] 위의 예에서 2M이 1일 때, W[0] = 1이며, 곱셈은 필요하지 않다. vfft2f $n0,$v1,$v2 명령, 및 그의 대응물들(vfft2 & vfft2s)은 이 사실을 이용할 수 있다. 이 명령에 대한 의사-코드는 다음과 같다.
Figure pct00273
[00177] FFT 이후에(또는 이전에), 데이터는 비트 반전으로 지칭되는 패턴으로 재순서화(reorder)될 필요가 있을 수 있다. 길이 M의 비트 반전에서, 당업자가 값의 인덱스를 포지션(bM-1bM-2…b1bo)에 있는 것으로 기록하면, 그것은 포지션(b0b1…bM-2bM-1)으로; 즉, 자신의 비트들이 반전된 인덱스로 이동될 수 있다(이름이 여기서 유래했다). vswapbr_M_xN $n0,$v1,$v2 명령 및 그의 부동-소수점 동치(vswapbrf)가 이 변환을 수행하는데 사용될 수 있다. 이들은 $v2의 엘리먼트들을 크기 N의 그룹들로 그룹화하고, 그런다음 그 그룹들을 N*2M의 클러스터들로 배열한다. 이러한 클러스터들 내부의 그룹들은 비트 반전에 기반하여 스와프된다. 이러한 명령들의 행위는, $n0이 N*2M의 배수가 아니라면 정의되지 않는다. 의사-코드는 다음과 같다.
Figure pct00274
Figure pct00275
그래픽들
[00178] 그래픽 코드는, 대부분 작은 4x4 매트릭스들 및 4-벡터들에 대해, 그리고 대부분 단일 정밀도 부동-소수점을 사용하는, 벡터 및 매트릭스 산술을 수반한다. 4개의 벡터들(vdot_x4)의 내적을 컴퓨팅할 수 있는 명령들은 이전의 섹션들에서 논의된다.
[00179] vmulmmf_xN $n0,$v1,$v2,$v3 명령은, $v2와 $v3이 함께 곱해지는 NxN 정방 매트릭스들의 집합이며 그 결과들이 $v1에 저장되는 것으로 가정한다. $n0는 N2의 배수일 수 있다. 의사-코드는 다음과 같다.
Figure pct00276
[00180] vmulmvf_ord_xN $n0,$v1,$v2,$v3 명령은, $v2가 N개의 벡터들의 집합이고 $v3이 NxN 매트릭스인 것으로 가정한다. 이러한 명령은, 벡터들 각각을 매트릭스와 곱하고, $n0 결과들을 $v1에 기록한다. $n0은 N의 배수일 수 있다. 매트릭스의 순서(ord)는 열-우선(column major) 또는 행-우선(row-major)으로 특정될 수 있다. 매트릭스의 순서는, 매트릭스의 엘리먼트들이 벡터 $v3에 어떻게 저장되는지를 나타낸다. 행-순서의 경우, 의사-코드는 다음과 같다.
Figure pct00277
Figure pct00278
[00181] 열 순서의 경우, 의사 코드는 $v3[i+j+N*k]를 판독할 수 있다.
[00182] 자주 발생하는 다른 벡터 연산은 벡터 정규화이다. 벡터 정규화에서, 각각의 N-벡터는 그의 길이가 1이 되도록 스케일링된다. 이는, vnormalf_xN $n0,$v1,$v2 명령을 사용하여 이루어진다. 이는, $v2의 $n0개의 엘리먼트들을 N의 그룹들로 나누고 그리고 이들을 나눈다. 의사-코드는 다음과 같다.
Figure pct00279
[00183] 이는, 컴퓨팅하는데 상당히 비용이 많이 드는 동작일 수 있다. 그래픽 코드에서는 정확한 정밀도가 일반적으로 필요하지 않기 때문에, 일부 실시예들은 벡터 정규화 근사의 명령(vnormalaf)을 사용할 수 있는데, 그 명령은 이것이 실제 정규화된 값에 대한 근사치를 산출한다는 점을 제외하고는 vnormalf 명령과 유사하다.
[00184] 그래픽들을 지원하기 위해 유니티 ISA에 정의된 다른 연산은, 벡터 내 데이터를 재배열하여 정방 매트릭스의 매트릭스 전치(matrix transpose)를 구현하는 것이다. 명령 vswaptrf_xN $n0,$v1,$v2는, $v2의 $n0 엘리먼트들을 NxN 정방 매트릭스들의 집합으로서 처리한다. 그런다음, 이들 각각은 전치되고, 그 결과는 $v1에 기록된다. 이에 대한 의사-코드는 다음과 같다.
Figure pct00280
Figure pct00281
[00185] 이 섹션에 설명된 명령들의 정수 동치들은 vmulmm, vmulmv, vnormal, vnormala, 및 vswaptr이다.
벡터 로드/저장
[00186] 벡터들은 벡터 로드들 및 저장들을 사용하여 메모리로부터 벡터 레지스터들로 그리고 그 반대로 이동된다. 메모리 어드레스를 특정하는 상이한 방법들이 존재한다. 유니티 ISA에서, 기본 어드레스는 $a로 표기된 어드레스 레지스터에 의해 제공된다. 여기에 설명된 명령들을 다른 아키텍처에 적응시킬 때, 기본 어드레스를 생성하는 메커니즘은 그 아키텍처의 특징들에 맞도록 변화될 필요가 있을 수 있다.
[00187] 기본 로드/저장은 메모리의 인접하는 블록을 벡터 레지스터로/로부터 이동시킨다. 명령들(ldv $n0,$v1,$a2 및 stv $n0,$v1,$a2)은 $v1의 $n0 개의 정수 엘리먼트를 $a2에서 시작하는 메모리의 인접하는 블록으로부터/으로 이동시킨다. 부동-소수점 벡터들은 ldvf/stvf 명령들을 사용하여 이동된다. ldv 연산에 대한 의사 코드는 다음과 같다.
Figure pct00282
[00188] 스트라이드된 로드/저장들은 메모리의 비-인접 블록들을 이동시킨다. 여기서, 각각의 엘리먼트에 대한 어드레스는 명령들(ldstv $n0,$v1,$a2,$n3 및 ststv $n0,$v1,$a2,$n3)의 $n3에 특정된 스트라이드에 기반하여 컴퓨팅된다. ststdv 명령에 대한 의사-코드는 다음과 같다.
Figure pct00283
[00189] 인덱스된 로드/저장들(ldixv $n0,$v1,$a2,$v3 및 stixv $n0,$v1,$a2,$v3)은 기본 어드레스 $a2 내부로 오프셋들을 제공하기 위해 벡터($v3)의 엘리먼트들을 사용하여, 메모리로부터/로 이동되는 $v1의 $n0개의 엘리먼트들 각각에 대한 어드레스를 제공한다. ldixv 명령에 대한 의사-코드는 다음과 같다.
Figure pct00284
[00190] 벡터 오프셋 엘리먼트들은 임의의 타입일 수 있다. 유니티 ISA의 실시예에 따르면, 벡터 오프셋 엘리먼트들은 하프-워드 정밀도(half-word precision)가 되는 것으로 가정된다.
[00191] 스트라이드된 그리고 인덱싱된 로드들/저장들은, 부동-소수점 동치(ldstvf, ststvf, ldixvf, 및 stixvf)를 가질 수 있다.
변형들
길이 레지스터
[00192] 본 개시내용의 실시예들은 명시적인 길이 레지스터($n0)를 사용할 수 있다. 모든 각각의 벡터 명령은 명시적인 길이 필드를 포함할 수 있다. 대안적으로, 선택된 인코딩 방식이 사용될 수 있는데, 여기서 길이 레지스터들은 종종 또는 항상 명령의 다른 정보로부터 유도되며, 여기서 명령은 예컨대 이하를 포함한다:
Figure pct00285
타겟 레지스터
Figure pct00286
소스 레지스터들 중 하나
Figure pct00287
명령 opcode
[00193] 대안적으로, 정확하게 하나의 길이 레지스터가 선택되어 모든 명령들이 그 길이 레지스터를 사용할 수 있다. 다른 카운트 레지스터들은 명령들, 이를테면, vtail을 처리하는데 사용될 수 있으며, 여기서 다수의 카운트들이 필요하다.
[00194] 다른 대안은 활성 길이 레지스터의 개념을 갖는 것이다. 이 모델에서는, 명령(말하자면, vactive $n0)이 존재하는데, 이 명령은 vactive 명령의 다음 실행까지 벡터 카운트 레지스터들($n0) 중 하나를 모든 후속 벡터 명령들에 대한 묵시적인 입력으로서 만든다. 이것은 현재 활성 카운트 레지스터를 계속 추적하기 위해 더 많은 수의 상태들을 프로세서로 도입한다는 점이 주목된다.
분류
[00195] 설명된 아키텍처에서, 모든 벡터 명령들에 의해 판독되고 산출된 벡터들의 엘리먼트들의 타입들이 특정된다. 엘리먼트들의 입력 타입이 벡터 명령들에 의해 예상되는 타입과 매치하지 않는다면, 그 결과는 정의되지 않는다.
[00196] 신규한 대안적인 모델은 벡터 엘리먼트들의 타입들을 동적으로 계속 추적하는 것에 의존하고; 벡터가 기록될 때마다, 엘리먼트들의 타입이 레코딩된다. 이 모델에서, 벡터 명령이 실행되는 경우, 각각의 입력의 레코딩된 타입은 예상되는 타입과 비교된다. 이들이 동일하지 않으면, 입력은 규칙들의 일부 세트를 사용하여, 예상되는 입력 타입으로 묵시적으로 변환된다. 예컨대, 실행되는 명령이 vaddf_d(즉, 벡터 가산 더블-정밀도)라고 가정하는 경우, 입력 중 하나가 단일-정밀도 부동-소수점 엘리먼트들의 벡터라면, 이 단일-정밀도 부동-소수점 엘리먼트들은 사용되기 전에 더블-정밀도 부동-소수점 엘리먼트들로 변환될 수 있다.
[00197] 이 신규한 모델에서, 변환 규칙들은, 가능하게는 제어 레지스터를 사용함으로써 고정될 수 있거나 또는 동적으로 구성될 수 있다.
[00198] 또 다른 대안적인 모델은 대부분의 벡터 명령들에 대한 분류를 생략한다. 이 모델에서, 벡터 명령은 일반적으로, 어떤 타입들도 특정하지 않는다. 대신에, 벡터 명령이 실행되는 경우, 모델은 자신의 입력들의 레코딩된 타입들을 검사하며, 동작 및 출력 타입들 둘 다를 추론한다. 이 모델에서, 예컨대, vadd 명령이 실행되면, 발생되는 것을 고려해보자.
Figure pct00288
모델은 자신의 입력들을 판독한다.
Figure pct00289
둘 모두의 입력들이 부동-소수점 벡터들이면, 모델은 부동-소수점 가산 연산을 수행할 것이고, 둘 모두의 입력들이 정수들이면, 모델은 정수 가산 연산을 수행할 것이다.
Figure pct00290
출력 벡터 타입은 입력의 타입으로 세팅된다.
[00199] 입력의 타입들이 아키텍처 정의에 기반하여 동일하지 않으면, 결과적인 행위는 정의되지 않을 수 있거나 또는 결과적인 행위는 값들의 묵시적 변환들을 초래할 수 있다.
[00200] 이 접근법에서, 일부 명령들은 여전히, (벡터 로드들과 같은) 출력 타입을 추론하기에 충분한 정보가 존재하지 않는 경우의 그러한 명령들 및 벡터들의 타입들을 명시적으로 변경하는 그러한 명령들을 포함하여, 벡터들의 출력 타입들을 특정할 필요가 있을 수 있다.
스칼라 레지스터들
[00201] 지금까지의 개시내용은, 아마도 벡터 유닛에 특정적인 카운트 레지스터들 및 누산기의 사용을 특정하였다. 그러나, 다른 스칼라 레지스터 타입들이 이 레지스터들 대신에 사용될 수 있다. 예컨대, 범용/정수 레지스터들이 카운트들을 특정하기 위해 사용될 수 있고, 부동-소수점 레지스터들이 부동-소수점 감소 연산들에 대한 타겟으로서 사용될 수 있다.
카운트 레지스터 대 상수
[00202] 그룹 카운트들_xN in vilv 등과 같은 다양한 명령들에서, 상수 값들이 명령의 일부로서 특정된다. 대안적으로, 카운트 레지스터들이 사용될 수 있다. 따라서, vilv_xN $n0,$v1,$v2,$v3 대신에, vilv $n0,$v1,$v2,$v3,$n4가 사용될 수 있다. $n4가 값 N을 포함하는 경우, vilv $n0,$v1,$v2,$v3,$n4는 동일한 행위를 제공한다.
그 외의 것들
[00203] 설명된 명령들은 위에서 설명된 것들 이외의 상이한 방식들(다음의 것들을 포함함)로 인코딩될 수 있다:
Figure pct00291
일부 경우들에서, 설명은, 정의되지 않은 그룹 카운트들_xNinvilv, vsumn, vdot와 같은 다양한 필드들의 범위를 벗어날 수 있다. 아키텍처는 값들의 다양한 서브세트들을 선정할 수 있다.
Figure pct00292
vpunct와 같은 다른 경우들에서, 단일 레지스터(예컨대, vpunct의 경우, $n0)는 입력 및 출력 둘 모두가 되도록 선정된다. 대안적인 인코딩은 이 목적을 위해 별개의 레지스터들을 사용할 수 있다 ― 따라서 vpunct_tf$n0,$v1,$v2,$m3 대신에, 명령은 vpunct_tf $n0,$n1,$v2,$v3,$m4일 수 있고, $n1은 출력이다 ― .
Figure pct00293
다른 방향이 또한 가능하다. 예컨대, $v1이 출력이고 $v4가 가산기 입력인 vmuladd $n0,$v1,$v2,$v3,$v4가 사용되는 반면, $v1이 가산기 입력으로 사용되고 그리고 출력 타겟으로 사용되는 vmuladd $n0,$v1,$v2,$v3이 또한 사용될 수 있다.
Figure pct00294
본 개시내용은 명령에 의해 사용되는 모든 레지스터들을 명시적으로 열거하였다. 예컨대, vxmulred $n0,$c1,$c2,$v3,$v4에서, 2개의 타겟 누산기 레지스터들 $c1 및 $c2가 명시적으로 명명된다. 일부 실시예들에서, 레지스터 쌍들이 사용될 수 있으며, 여기서, 레지스터들 중 단지 하나 만이 명명되고, 다른 하나는 묵시적으로 유도된다. 다른 실시예에서, 명령이 항상 동일한 2개의 누산기들에 기록되도록 타겟들이 고정된다.
Figure pct00295
상이한 길이들 및/또는 다른 카운트들의 벡터들이 수반되는 명령에서, 벡터 카운트 레지스터(들)가 값들의 일부를 특정하고, 다른 카운트들이 유도된다. 상이한 카운트들이 명시적으로 특정되는 인코딩들을 가지는 것이 가능하다. 예컨대, vsumn_xN $n0,$v1,$v2 명령에서, $n0이 입력 $v2의 길이를 특정하고, 출력 $v1의 길이가 $n0/N이 되도록 유도된다. 대안적으로, 출력 $v1의 길이를 특정하기 위해 그리고 $n0*N으로서 입력의 길이를 유도하기 위해 $n0이 사용될 수 있다.
명령 이슈
[00204] 이 섹션은 가변-길이 긴 벡터-레지스터 아키텍처, 이를테면, 유니티 명령 세트 아키텍처를 구현하는 것에 관한 이슈들에 관련되며, 특정하게 명령 이슈 ― 즉, 이용가능한 명령들로부터의 하나 또는 그 초과의 명령들의 선택 및 실행을 위해 선택된 명령들의 디스패치 ― 와 관련된다. 이슈들은 다양한 구현 스타일들의 컨텍스트에서 이루어진다. 고려되는 스타일들은, 간단한 순차적이고, 이름변경되지 않고, 파이프라이닝되지 않은 구현들로부터, 더 성능-지향적인 비순차적이고, 이름변경되고, 깊게 파이프라이닝된 구현들로의 범위이다.
[00205] 긴-벡터 아키텍처들의 하나의 정의하는 특징은 벡터의 엘리먼트들의 수 및 그에 따른, 그 벡터에 대해 수행되도록 요구되는 연산들의 수가, 그러한 연산들을 수행할 수 있는 이용가능한 기능 유닛들의 수를 초과한다는 것이다. 각각의 사이클에서, 벡터 연산들의 서브세트만이 프로세싱되도록 시작할 수 있다. 따라서, 벡터 명령은 일반적으로, 다수의 사이클들이 완료하도록 요구할 수 있다.
스칼라 명령 이슈
[00206] 도 3에 도시된 6-스테이지 프로세서 실행 파이프라인을 고려해보자. 프로세서 파이프라인의 구현들은 다양한 스테이지들(예컨대, 디코딩 및 이슈)을 결합함으로써 더 단순해질 수 있거나, 또는 더 복잡해질 수 있다(예컨대, 다수의 명령 페치 및 실행 스테이지들). 실제 파이프라인은 프로세스 기술, 원하는 전력/면적/성능 및 구현되는 명령 세트 아키텍처의 기능이다.
[00207] 2개의 연산들: mul $r0,$r1,$r2 및 add $r0,$r4,$0을 실행시키기 위한 상황을 고려해보자. 제 1 명령들은:
Figure pct00296
RF(register fetch) 스테이지에서 레지스터 파일로부터 레지스터들 $r1 및 $r2를 판독하고,
Figure pct00297
EX(execution) 스테이지에서, 판독된 이러한 값들을 곱하고,
Figure pct00298
WB(write-back) 스테이지에서 그 결과들을 레지스터 $r0에 다시 기록한다
[00208] 제 2 명령은 곱셈들의 결과들 및 레지스터 $r4를 판독하고, 이 값들을 가산하며, 그 결과들을 $r0에 다시 기록한다.
[00209] 단순한 프로세서 구현에서, ADD 명령은 곱셈의 콘텐츠들이 레지스터 파일에 기록될 때까지 이슈할 수 없다. 이것은 곱셈 직후에 ADD 명령이 실행될 수 없다는 것을 의미한다. 대신에, ADD 명령은 2개의 가외의 사이클들을 기다릴 필요가 있다. 대안적으로, 레지스터 파일이 라이트-스루(write-through) 레지스터 파일이면, 또는 레지스터 파일이 바이패스 로직을 포함하면, ADD의 레지스터 파일은 곱셈의 WB와 오버랩할 수 있고, 가산은 단지 하나의 사이클에 대해 유지된다. 프로세서가 실행 스테이지의 결과들을 바이패싱하기 위한 로직을 포함하여서 다음 명령이 그것을 사용할 수 있게 하면, ADD 명령은 mul 명령과 연속적으로 이슈할 수 있다.
[00210] 명령 이슈 로직(204)은 명령들의 이슈를 조정하는 것을 담당하여서 이러한 명령들이 성공적으로 실행되게 한다. 이것은 위에서 도시된 바와 같이, 적합한 값들이 판독되는지를 확인하는 것을 포함한다. 그것은 또한, 더 많은 명령들이, 지원되지 않는 하드웨어 자원에 액세스하고자 시도하지 않도록 보장한다. 일부 예들은 다음과 같다:
Figure pct00299
1개의 곱셈기 및 1개의 가산기를 가지는 프로세서. 명령들 이슈 로직은 2개의 가산들이 실행을 위해 전송되지 않도록 보장할 수 있다
Figure pct00300
완전히 파이프라인이 아니며, 단지 하나 건너 하나의 사이클에서 명령들을 수용할 수 있는 4-스테이지 곱셈기를 가지는 프로세서. 명령 이슈 로직은 2의 곱셈들이 연속적인 실행을 위해 전송되지 않도록 보장할 수 있다
Figure pct00301
레지스터-파일에 1개의 기록 포트를 가지지만, 가변수의 실행 스테이지들을 가지는 다수의 기능 유닛들을 가지는 프로세서. 명령 이슈 로직은, 동일한 사이클에서 두 명령들이 완료되지 않는 그러한 방식으로 명령들이 실행을 위해 전송되도록 보장할 수 있다
[00211] 명령 이슈는 일반적으로, 2가지 클래스들, 순차 및 비순차로 나누어질 수 있다. 순차 명령 이슈에서, 명령들은 그들이 메모리로부터 페치되는 순서로 실행을 위해 전송된다. 명령이 이슈될 수 없으면, 그 명령이 이슈될 때까지 모든 후속 명령들이 이슈로부터 차단된다. 비순차 명령 이슈에서, 명령들의 풀이 유지된다. 명령들은 이 풀로부터 선정되며, 실행을 위해 이슈된다. 명령이 이슈될 수 없지만, 후속적인 명령이 이슈될 수 있으면, 후속적인 명령이 먼저 실행되는 것이 가능하다.
[00212] 프로세서 파이프라인의 다른 편성이 도 4에 도시된다. 이 파이프라인 편성은 일반적으로, 비순차 프로세서들에서 발견된다. 명령들은 레지스터 파일로부터 자신들의 입력 값들을 판독하며, 이슈 구조에 진입한다. 이슈 구조는 명령들을 홀딩하기 위해 사용되는 메모리의 일부인 반면, 이슈 로직은 실행을 위해 전송하기 위한 이슈 구조에 저장된 명령들로부터 선택하기 위해 사용되는 로직 회로이다. 일 실시예에서, 이슈 구조 및 이슈 로직 둘 다는 도 2에 도시된 이슈 블록(204)의 일부이다. 일부 입력 값들은 레지스터 파일에서 이용가능하지 않을 수 있다는 점이 주목되는데, 이는 이러한 입력 값들을 산출하는 명령들이 실행을 종료하지 않았거나 또는 이슈 구조에서 자체적으로 기다리고 있기 때문이다. 이슈 로직은 이슈 구조에서 명령들의 풀을 검사하며, 그리고 자신들의 모든 입력 값들이 이용가능하고 그리고 이용가능한 자원들이 주어지면 실행될 수 있는 명령들로부터, 실행하기 위한 하나 또는 그 초과의 명령들을 선정한다. 명령 실행이 완료되는 경우, 실행 결과들은 레지스터 파일에 다시 기록된다. 이 결과들은 또한 이슈 구조에 전송되며, 여기에서, 이 결과들을 기다리고 있는 임의의 명령이 이 결과들을 카피하고, 이제 이슈될 준비가 될 수 있다.
가변-길이 긴 벡터 레지스터 명령들
[00213] 벡터 레지스터는 예컨대, 다수의 단일-정밀도 부동-소수점 수들 또는 다수의 바이트들과 같은 다수의 값들을 홀딩할 수 있는 레지스터이다. 이러한 레지스터들은 $vN으로 식별될 수 있다. 벡터 명령은 벡터 레지스터들에 대한 연산들을 특정하는 것이며, 일반적으로 벡터들의 개별적인 엘리먼트들에 동일한 연산을 적용시킨다. 가변 길이 명령은, 명령이 레지스터(일반적으로 벡터-길이 레지스터로서 알려져 있으며 $nN으로 표시됨)를 사용하여 프로세싱될 수 있는 엘리먼트들의 수를 특정하는 것이다. 예컨대, 명령 vadd_f $n0,$v1,$v2,$v3은 다음의 의사-코드와 유사한 행위를 가진다.
Figure pct00302
[00214] 긴 벡터 명령들은 명령들이 다수의 실행 사이클을 취할 수 있는 것들이다. 예컨대, 벡터들이 최대 64개의 부동-소수점 수들을 유지할 수 있고, 단지 8개의 부동-소수점 가산기들이 존재하면, 벡터 명령의 실행은 최대 길이 벡터를 실행하기 위해 적어도 8개의 사이클들을 취할 수 있다. 그러나, $n0은 훨씬 더 작은 벡터를 특정하는 것이 가능하다. 그 경우, 더 적은 실행 사이클들($n0이 0이면, 0을 포함함)을 사용하여 명령을 완료하는 것이 가능하다.
벡터 명령 이슈
[00215] 스칼라 명령 이슈와 유사한 방식으로 벡터 명령 이슈를 구현하는 것이 가능하여 ― 입력 벡터 레지스터들은 벡터 길이 레지스터와 함께 전체적으로 판독되고, 실행 유닛은 다수의 사이클들에 걸쳐, 입력들의 서브세트들에 대해 연산하는 것, 대응하는 결과들을 생성하는 것 및 그런 다음, 결과를 출력 레지스터에 기록하는 것을 실행한다. 이러한 접근법에서, 사이클들 각각에서 실행 유닛들에 의해 판독되고 기록될 서브세트를 식별할 수 있는 상태 머신 또는 시퀀서가 요구된다. 이러한 시퀀서는 항상 최대 수의 사이클들 동안 실행되어 벡터-길이를 무시할 수 있거나, 또는 바람직하게는 벡터 길이 레지스터의 콘텐츠들에 기반한 사이클들의 수 동안 실행될 수 있다. 행위는 vadd_f $n0,$v1,$v2,$v3의 실행에 대해 다음의 의사-코드에서 캡처된다:
Figure pct00303
[00216] 이러한 접근법은, 매우 넓은 중간 입력 및 출력 파이프라인 레지스터들인 레지스터 파일 전체가 판독될 것을 요구하는 결점을 갖는데, 그 이유는, 이들이 레지스터 파일의 크기에 매치해야 하고, 실행 유닛들이 동작할 수 있는 입력들의 서브세트를 선택하기 위해 매우 넓은 멀티플렉서들을 가져야 하기 때문이다.
[00217] 대안적인 접근법은 실행 스테이지에 의해 요구되는 각각의 사이클에서 벡터 파일의 그러한 서브세트들을 판독하고 기록하는 것이다. 이러한 접근법은 다음의 의사 코드로 예시된다:
Figure pct00304
[00218] 이러한 예시적인 의사 코드는, 파이프라인 오버랩 및 상황의 핸들링을 포함하는 몇몇 세부사항들을 생략하며, 여기서 $n0은 NUM_ADDERS의 배수가 아니고, 이의 핸들링은 적절한 방식으로 구현될 수 있다.
[00219] 이러한 접근법은 또한 시퀀서를 포함할 수 있다. 일 실시예에서, 시퀀서는 독립형일 수 있다. 대안적인 실시예에서, 시퀀서는 명령 이슈 로직에 통합될 수 있다. 통합되는 경우, 명령 이슈 및 시퀀싱의 모든 세부사항들은 하나의 블록에 통합된다.
[00220] 벡터 명령을 효율적으로 실행하기 위해 사용되는 입력들 중 하나는 벡터 길이 레지스터의 콘텐츠들이다. 벡터 길이 레지스터의 콘텐츠들은 이슈 이전에 벡터 길이 레지스터를 판독할 필요성을 제안한다. 그러나, 효율성 이유들 때문에, 이슈 이후에 벡터 길이 레지스터를 판독하는 것이 바람직하다(그렇지 않으면, 벡터 길이 레지스터의 콘텐츠들은 이슈 구조에서 유지될 필요가 있다). 따라서, 벡터 유닛에 대한 바람직한 파이프라인 편성은 도 5에 도시된 것과 유사한 것이다.
서브-벡터 명령 이슈
[00221] 위에서 언급된 바와 같이, 명령은, 그 입력 값들이 이용가능할(또는 바이패싱을 통해 이용가능하게 될) 때까지는 이슈될 수 없다. 긴 벡터 실행에서, 각각의 실행 사이클 동안, 벡터 명령은 오직 벡터의 서브세트에 대해 한번 연산한다. 따라서, 실행은 이용가능한 전체 벡터가 아니라 오직 서브세트에만 의존한다. 더 높은 성능 구현의 경우, 명령 이슈 로직이 서브-벡터 레벨에서 벡터 명령들을 처리하는 것이 바람직하다.
[00222] 벡터 유닛이 실행 유닛들의 2개의 세트들, 즉, 8개의 곱셈기들 및 8개의 가산기들을 갖는 경우를 고려한다. 명령들 vmul_f $n0,$v0,$v1,$v2 및 vadd_f $n0,$v3,$v4,$v0이 실행될 필요가 있고, 벡터 길이들이 동일하고, 벡터 곱의 결과들이 벡터 가산에 의해 사용되는 것으로 가정한다. 추가로, 실행 유닛들의 타입들 둘 모두는 1 실행 사이클이 소요되고, $n0은 32인 것으로 가정한다. 도 6에 도시된 바와 같이, 명령 이슈 로직이 vadd를 시작하기 전에 $v0의 모든 엘리먼트들이 기록되기를 대기하면, 실행하기 위해 12 사이클들이 소요될 수 있다.
[00223] 대안적으로, 명령 이슈가 오직 $v0의 적합한 서브-벡터를 대기하면, 도 7에 도시된 바와 같이 vadd의 실행을 vmul과 부분적으로 오버랩하여 9 사이클들의 총 시간을 도출할 수 있다.
[00224] 명령-이슈 로직이 비순차적이면, 서브-벡터 이슈는, 명령들의 서브-벡터들이 서로에 대해 비순차적인 실행을 위해 이슈되게 허용하도록 적응될 수 있다. 이는 단일 명령에 속하는 상이한 서브-벡터들의 재순서화를 포함할 수 있다.
[00225] 일 실시예에서, 벡터 명령은, 각각 특정 서브-벡터를 다루는 서브-명령들로 분할될 수 있고, 이러한 서브-명령들 각각을, 명령 이슈 로직에 의해 독립적으로 다루어질 이슈 구조에 삽입한다. 이는 특히 명령 완료 및 리타이어 로직을 포함하는 파이프라인의 나머지에 영향을 미칠 수 있다.
구현들
[00226] 구현들은 별개의 벡터 명령들과 작은 정도의 비순차간의 실행을 오버랩하는 능력을 포함하는 설계 타겟에 기반한다. 특히, 타겟 애플리케이션은 명령들을 서브-명령들로 분할함으로써 인에이블링되는 극단적인 성능을 요구하지 않는다. 대신에, 오직 하나의 서브-벡터가 임의의 하나의 시간에 실행을 위한 후보이고, 일반적으로 최소 미실행 서브-벡터이다.
[00227] 구현에서, 모든 레지스터들은 이름변경되어, 벡터 레지스터 파일에서 기록-기록 충돌들의 가능성을 제거한다. 추가로, 벡터 레지스터 파일은, 32 바이트의 8개의 서브-벡터들로 편성되는 256 바이트의 12개의 물리적 레지스터들을 갖는 것으로 가정된다.
[00228] 도 8에 도시된 바와 같은 명령 이슈 구조는 명령 페치 순서로 소팅된 잠재적인 벡터 명령들에 대한 슬롯들의 큐를 유지한다. 명령이 이슈 구조에 가산되는 경우, 큐의 테일에서 다음으로 이용가능한 슬롯을 할당받는다. 파이프라인의 이전 스테이지들은, 이용가능한 슬롯이 항상 존재하는 것을 보장하도록 셋업된다. 이용가능한 어떠한 슬롯도 존재하지 않으면, 명령 페치는 스톨링할 수 있다. 명령이 가산되는 경우, 유효 비트는 1로 세팅되고, 큐의 테일은 증가된다. At-Count는 0으로 세팅된다.
[00229] 명령이 초기에 명령 이슈 큐에 삽입되기 전에, 벡터 길이 레지스터들을 판독한다. 그 벡터 길이 레지스터의 값이 유효하지 않으면, 명령은 스케줄링을 위해 준비된 것으로 고려되지 않고 펜딩으로 마킹된다. 벡터 길이 레지스터에 값이 다시 기록될 때마다, 레지스터 수는, 세팅된 펜딩 비트를 갖는 이슈 슬롯에서 각각의 명령의 벡터 길이 레지스터 수에 대해 비교된다. 이들이 매치하면, 값은 그 레지스터에 대한 슬롯으로 카피된다.
[00230] 길이가 이용가능하게 되는 경우, 남은 카운트는 요구되는 실행 사이클들의 수까지 세팅된다. 이는 일반적으로 길이/8이다. 따라서, 이는 그 명령에 대해 남은 서브-벡터들의 수의 카운트이다. 남은 카운트가 제로에 도달하는 경우, 명령은 큐로부터 제거되고, 큐는 압축된다. 그 서브-벡터에 대한 값들이 레지스터 파일에 기록될 때, 명령 완료/리타이어 로직은 그 명령의 완료를 통지받는다.
[00231] 명령이 이슈 구조에 삽입되는 경우, 서브-벡터들 각각에 대응하는 비트-마스크가 초기화된다. 이러한 경우, 비트-벡터는 96 비트 길이이다. 이러한 비트-마스크는, 명령이 제 1 서브-벡터에 대해 이슈되기 위해 이용가능할 필요가 있는 서브-벡터들에 대응한다. 일반적으로, N-입력 명령의 경우, 각각의 입력 레지스터에 대해 판독되는 제 1 서브-벡터에 대응하는, 세팅된 N 비트를 갖는다. 그러나, 하나의 인수로부터 서브-벡터보다 큰 일부 수의 값들을 판독하고, 그런 다음, 이들을 다음 인수로부터의 서브-벡터들에 대해 반복적으로 적용하는 일부 명령들이 존재할 수 있다. 그 경우, 제 1 인수에 대한 서브-벡터들에 대응하는 다수의 비트들 및 제 2 인수에 대한 제 1 서브-벡터에 대한 1 비트가 세팅될 수 있다.
[00232] 이슈 로직은 이용가능하지 않은 서브-벡터들의 유사한 비트-마스크를 유지한다. 이는 이름변경 로직 및 레지스터-파일 백-라이트(write-back) 로직과 협력하여 동작한다. 물리적 벡터 레지스터가 명령에 할당될 때마다, 그 벡터 레지스터에 대응하는 모든 8개의 서브-벡터들은 이용가능하지 않은 것으로 마킹된다(즉, 1로 세팅된다). 명령이 서브-벡터에 다시 기록하는 경우, 대응하는 비트는 클리어된다.
[00233] 모든 사이클에서, 이슈 로직은 슬롯들의 모든 명령을 검사한다. 각각의 슬롯에 대해,
Figure pct00305
슬롯이 유효한지 여부
Figure pct00306
벡터 길이가 펜딩이 아닌지 여부
Figure pct00307
벡터 카운트가 제로가 아닌지 여부
Figure pct00308
서브-벡터 판독 비트-마스크 및 이용가능하지 않은 서브-벡터 비트마스크의 비트단위-and가 모두 제로들인지 여부를 체크한다.
[00234] 큐에서, 실행을 위한 이러한 조건들을 만족시키는 가장 오래된 명령(즉, 헤드에 가장 가까운 명령)을 선택한다.
[00235] 명령이 실행을 위해 전송되는 경우, 그 카운트가 감소되고, 서브-벡터 판독-마스크가 조정된다. 일반적으로, 이는 비트들 중 일부를 1만큼 시프트하는 것을 수반한다.
[00236] 벡터 카운트가 0이고 명령이 큐로부터 제거되는 경우, 이의 출력 벡터 레지스터에 대한 이용가능하지 않은 비트들은 모두 클리어된다. 이는, 모든 서브-벡터들이 기록되지는 않는 벡터 길이의 상황을 처리한다.
벡터 레지스터 구현
[00237] 본 섹션은 가변-길이 긴 벡터-레지스터 아키텍처, 이를테면, 구체적으로 레지스터 파일과 관련된 유니티 명령 세트 아키텍처를 구현하는 것과 관련된 이슈들을 고려한다. 본 섹션은 다양한 구현 스타일들의 컨텍스트에서 이러한 이슈들을 검사한다. 고려되는 스타일들은, 간단한 순차적이고, 이름변경되지 않고, 파이프라이닝되지 않은 구현들로부터, 더 성능-지향적인 비순차적이고, 이름변경되고, 깊게 파이프라이닝된 구현들까지의 범위이다.
[00238] 긴-벡터 아키텍처들의 하나의 정의하는 특징은, 벡터에서 엘리먼트들의 수 및 그에 따라 그 벡터에 대해 수행되도록 요구되는 연산들의 수가, 그러한 연산들을 수행할 수 있는 이용가능한 기능 유닛들의 수를 초과한다는 점이다. 각각의 사이클에서, 벡터 연산들의 오직 서브세트만이 프로세싱되도록 시작할 수 있다. 결국, 벡터 명령은 일반적으로 완료를 위해 다수의 사이클들을 요구할 수 있다.
규약들
[00239] 하기의 것들을 포함하는, 벡터 유닛에 특정되는 4가지 종류의 레지스터들이 가정된다:
Figure pct00309
엘리먼트들의 벡터들, 이를테면 바이트들 또는 부동-소수점 단일-정밀도 수들을 포함하는, $vN으로 기록되는 벡터 레지스터들;
Figure pct00310
연산될 엘리먼트들의 수의 카운트를 포함하는, $nN으로 기록되는 벡터 카운트 레지스터들;
Figure pct00311
일반적으로 벡터 비교들의 출력으로서 또는 벡터 명령의 엘리먼트-단위 행위를 컨디셔닝하기 위해 사용되는 단일 비트들의 벡터들을 포함하는, $mN으로 기록되는 벡터 마스크 레지스터들; 및
Figure pct00312
벡터 감소 연산들 이를테면 내적들의 스칼라 결과들을 홀딩하기 위해 사용되고 벡터 연산들에 대해 스칼라 입력/출력이 요구되는 다른 상황들에서 사용되는 것을 포함하는, $cN으로 기록되는 벡터 누산기 레지스터들.
[00240] 이름변경이 있는 레지스터 파일 및 이름변경없는 레지스터 파일 둘 모두의 구현이 검사된다. 직접적인 구현, 즉 이름변경없는 구현에서, 구조화된 레지스터와 물리적 레지스터 간에 일대일 매핑이 존재한다. 이름변경된 구현에서, 2개가 상이하다. 동일한 타입의 구조화된 레지스터와 물리적 레지스터 간을 구별하는 것이 바람직한 컨텍스트들에서, 하위 경우 및 상위 경우가 사용된다. 따라서, 이름변경이 있는 구현에서, 벡터 레지스터 수 3이 물리적 레지스터(11)에 매핑되면, 본 발명은 $v3 및 $V11을 각각 사용해야 한다.
다이렉트
[00241] 이름변경의 부재 시에, 구조화된 레지스터와 물리적 레지스터 간에 일대일 매핑이 존재한다. 따라서, 명령, 이를테면 vaddf $n0,$v0,$v1,$v2는 물리적 레지스터들 $V1 및 $V2를 판독하고 물리적 레지스터 $V0을 기록할 수 있다. 이러한 섹션은 직접적인 구현에서의 핸들링 예외들에서 발생하는 이슈들을 검사한다.
부정확한 예외들
[00242] 벡터 명령의 실행 동안 연산들의 시퀀스 중 하나의 연산의 실행이 예외, 이를테면 벡터 부동-소수점 나누기를 수행하는 동안 2개의 엘리먼트들을 나누는 경우에 제로로 나누기, 또는 벡터 부동-소수점 가산 동안 2개의 엘리먼트들을 가산하는 경우에 오버플로우/언더플로우를 야기할 수 있는 경우를 고려한다.
[00243] 하나의 시나리오는, 예외가 기록되기 전에 벡터 출력 레지스터의 어떠한 엘리먼트도 기록될 수 없다는 것이다. 가능하게, 이것은 깊게-파이프라인된 연산, 이를테면 부동-소수점 나누기의 경우이다. 제 1 스테이지에서 제로들로 나누기, 4개의 나누기 유닛들, 및 최대 64개의 엘리먼트 벡터를 검출하는 20 스테이지 부동-소수점 나누기 파이프라인을 가정하면, 벡터 내의 마지막 엘리먼트의 제로로 나누기 예외가 검출되는 경우, 벡터의 제 1 엘리먼트는 완료로부터 여전히 몇 스테이지들 떨어져 있으므로, 출력 레지스터가 수정되기 전에 전체 명령이 중단될 수 있다.
[00244] 다른 더 가능성 있는 시나리오는, 벡터 명령의 출력들 중 전부가 아니라 일부가 기록되었던 포인트에서 예외가 발생하는 시나리오이다. 그 경우, 예외가 발생하는 포인트에서, 출력 레지스터는 벡터 명령에 의해 산출된 새로운 값들과 오래된 값들의 혼합을 포함한다. 예외 포인트에서의 프로세서의 상태가 명령의 실행과 그의 완료 간의 중간인 이러한 상황은 부정확한 예외로 알려져 있다. 예외를 픽스 업하고 재개하기 위한 방법들을 포함하는 그러한 예외는 임의의 적절한 방법을 사용하여 핸들링될 수 있다.
[00245] 정확한 예외들을 다루는 경우의 하나의 코너 경우는 동일한 레지스터가 입력 및 출력 둘 모두로 사용되는 경우 발생하며, 출력이 중첩기록된 이후에도 입력 값이 필요한 가능성이 존재한다. 유니티 ISA 명령 vmulmvf $n0,$v1,$v2,$v3을 고려한다. 이러한 명령은, 자신의 제 2 입력 $v3이 NxN 매트릭스를 유지하고 자신의 제 1 입력 $v2가 다수의 N-벡터들을 유지한다고 가정한다. 그것은 $v2내의 N-벡터들 각각을 $v3 내의 NxN 벡터와 반복적으로 곱하고, 결과들을 $v1에 기록한다. 이제, 동일한 레지스터가 출력 및 매트릭스 둘 모두에 대해 사용되면, vmulmvf $no,$v1,$v2,$v1에서와 같이 매트릭스는 결과들에 의해 중첩기록될 수 있다.
[00246] 하나의 솔루션은 계산을 시작하기 전에 내부 레지스터에서 매트릭스를 버퍼링하는 구현을 갖고, 모든 매트릭스-벡터 곱셈들이 매트릭스 입력에 대한 그 내부 버퍼 레지스터를 사용하게 하는 것이다. 이러한 솔루션에 관한 이슈는, 중간 계산들 중 하나가 예외를 취하면, 이러한 포인트에서 $v1의 원래의 값은 (부분적으로) 중첩기록된다는 것이다. 명령을 픽스 업한 이후 재시작할 수 있기 위해, 본 발명은, 가능하게 내부 버퍼 레지스터를 노출시킴으로써 원래의 매트릭스를 복원할 수 있어야 할 것이다.
[00247] 다른 솔루션은, (어떠한 출력 레지스터도 결코 입력과 동일할 수 없도록) 글로벌하게 또는 선택적인 경우들에서(그러므로, vmulmvf의 출력이 매트릭스 입력이 아니라 벡터 입력과 동일하게 함) 그러한 명령들을 금지하는 것이다.
[00248] 일반적으로, 부정확한 예외들을 허용하는 것은 다음을 포함하는 수 개의 바람직하지 않은 결과들을 갖는다:
Figure pct00313
매우 복잡한 예외 복원 코드
Figure pct00314
복원을 돕기 위한 내부 상태의 가산
Figure pct00315
구현 특정 내부 상태의 노출.
정확한 예외들
[00249] 대조적으로, 정확한 예외들을 갖는 프로세서 상에서, 예외가 명령에 의해 야기된 이후 예외 핸들러가 진입되는 포인트에서, 프로세서 상태는 명령이 결코 실행되지 않는 것처럼 보인다.
[00250] 긴 벡터 명령들의 컨텍스트에서, 정확한 예외들을 구현하기 위한 하나의 방법은, 모든 엘리먼트들이 프로세싱될 때까지 임의의 결과들을 중간 레지스터에 기록 위한 명령을 일시적으로 갖고, 그런다음 이러한 결과들을 출력 레지스터에 카피하는 것이다. 예외가 중간에서 발생하면, 카피는 폐기되어, 출력 레지스터를 자신의 원래의 콘텐츠들을 갖게 유지한다.
[00251] 대안적으로, 본 발명은 출력 레지스터의 원래의 콘텐츠들을 내부 레지스터에 카피할 수 있다. 예외가 발생하면, 내부 레지스터는 내부 레지스터에 다시 카피된다. 실행이 성공하면, 내부 레지스터 콘텐츠들이 폐기될 수 있다. 출력 레지스터의 원래의 콘텐츠들의 내부 레지스터로의 카피는 명령의 실행 전에, 또는 더 여유롭게는 출력 레지스터의 콘텐츠들이 중첩기록됨에 따라 벌크로 수행될 수 있다. 제 2 접근법이 사용되면, 예외가 발생하면 출력 레지스터의 중첩기록된 부분들만이 내부 레지스터로부터 다시 카피된다.
[00252] 벡터 명령들에서의 부정확한 예외들의 하나의 장점은 본 발명이 예외를 핸들링한 이후 벡터 명령을 재수행하기를 원하는 상황에서 발생한다. 정확한 예외들에 관해, 제 1 엘리먼트에서 시작하고 임의의 이전에 수행된 작업을 재수행하는 것은 필수적이다. 부정확한 예외들에 관해, 예외를 핸들링한 이후, 예외를 야기했던 엘리먼트에서 시작하여, 모든 이전의 작업을 재수행해야 하는 필요성을 절감하는 것이 일반적으로 가능하다. 이것은 잠재적으로 큰 절감들일 수 있다.
이름변경
벡터 레지스터들의 이름변경
[00253] 본 개시내용의 실시예들은 레지스터 이름변경의 기법을 긴 벡터 레지스터들로 적응시킬 수 있다. 레지스터 이름변경에서, 구조화된 레지스터, 즉 명령에서 이름이 지어진 레지스터들이 물리적 레지스터들에 매핑된다. 구조화된 레지스터들보다 더 많은 물리적 레지스터들이 존재한다. 명령이 실행되기 전에, 그의 입력 레지스터들은 물리적 레지스터들에 매핑되고, 그의 출력 레지스터들은 새로운 사용되지 않은 물리적 레지스터에 매핑된다. 물리적 레지스터들은 프리(free)한 물리적 레지스터들을 제공하기 위해 알려진 기법들에 따라 재활용될 수 있다.
[00254] 예로서, 구조화된 레지스터 및 물리적 레지스터가 일대일 관계를 가지므로, $v0이 $V0에 매핑되고, $v1이 $V1에 매핑되는 식이라고 가정한다. 추가적으로, 8개의 구조화된 레지스터들 및 12개의 물리적 레지스터들이 존재한다고 가정한다. 도 9는 명령들의 시퀀스를 실행하기 전 및 후의 매핑을 도시한다. 먼저, 명령 vadd $n0,$v0,$v1,$v2가 실행되어, 구조화된 레지스터 $v1을 물리적 레지스터 $V1에 매핑하고 $v2를 $V2에 매핑하며, 그리고 새로운 레지스터, 즉 $V8을 $v0에 할당한다. 그러므로, 실행되는 명령은 vadd $n0,$V8,$V1,$V2와 동등하다($n0에 대한 어떠한 이름변경도 무시함). 다음으로, 명령 vmul $n0,$v1,$v2,$v0이 실행된다. 이제, $v2는 여전히 $V2에 매핑되지만, 구조화된 $v0는 실제로는 물리적 $V8이다. $v1에 대한 새로운 레지스터, 즉 $V9가 할당된다. 실행되게 되는 명령은 vmul $n0,$V9,$V2,$V8이다. 마지막으로, vsub $n0,$v0,$v1,$v0가 실행된다. 이러한 포인트에서의 $v0 및 $v1은 $V8 및 $V9에 매핑되며, $v0는 이제 새로운 레지스터, 즉 $V10을 할당받아, 효과적인 명령 vsub $n0,$V10,$V9,$V8을 초래한다.
예외 핸들링
[00255] 명백하게, 이름변경을 이용하면, 정확한 예외들을 획득하는 것이 달성되기에 용이하다. 이름변경을 이용하면, 출력 레지스터는, 그것이 동일한 구조화된 레지스터 이름들을 갖더라도 입력 레지스터와는 물리적으로 상이한 달리 사용되지 않는 레지스터이다. 벡터 명령을 실행하는 동안 예외가 발생하는 경우, 원래의 상태는 예외가 발생되기 전의 그의 값으로 매핑을 롤링 백함으로써 획득될 수 있다.
[00256] 현재의 레지스터 할당 방식들에서, 예외가 발생하는 경우, 결과들이 더 이상 유용하지 않기 때문에 새로운 출력 레지스터가 프리(free)하게 된다. 그러나, 벡터 레지스터들의 경우에서, 부분적으로 완료된 결과들은, 디버깅 시에, 예외의 원인을 진단하는 것을 돕는데, 또는 예외에 대해 재시작한 이후 이 부분적인 결과들을 재계산해야 하는 것을 회피하는데에 유익할 수 있다. 일 실시예에서, 이 부분적인 결과들은 이들을 예외 핸들링 메커니즘에 노출시키도록 보존된다. 이것은 수 개의 방식들 중 하나에서 수행될 수 있다:
Figure pct00316
출력 레지스터의 콘텐츠들을 상이한 레지스터, 즉 아마도 특수-목적 이름변경되지 않은 레지스터에 카피하고, 그런다음 평소와 같이 레지스터를 프리(free)하게 하도록 진행한다.
Figure pct00317
레지스터가 즉시 프리(free)하게 되는 것을 방지하며, 그의 콘텐츠들에 액세스하기 위한 예외 핸들링 코드에 대한 수단을 제공한다. 이를 수행하는 하나의 방식은, 매핑 로직이 이러한 레지스터에 매핑할 수 있는 다른 구조화된 레지스터 이름을 갖는 것이다. 일단 예외 프로세싱 및 복원 로직이 자신의 콘텐츠들로 수행되면, 레지스터를 프리(free)하게 하기 위한 메커니즘이 또한 존재한다.
이름 재사용
[00257] 현재의 레지스터 할당 방식들에서, 모든 각각의 출력 레지스터는 새로운 사용되지 않는 물리적 레지스터를 할당받는다. 그러나, 이것이 바람직하지 않은 상황들이 존재한다. 예컨대, $v1이 입력 및 출력 둘 모두이도록 포지션 $n0에서 벡터 레지스터 $v1으로 $c2의 콘텐츠들을 삽입하는 유니티 ISA 명령 vappendc $n0,$v1,$c2를 고려한다. $v1에 대한 출력의 물리적 레지스터가 입력의 물리적 레지스터와 상이하면, ($n0에서의 레지스터 이외의) 입력의 물리적 레지스터의 엘리먼트들은 출력의 물리적 레지스터로 카피된다. 이것은 꽤 값비쌀 수 있다. 벡터 내의 하나의 엘리먼트를 수정하기 위해, 벡터를 효과적으로 카피하는 것이 바람직하다.
[00258] 본 개시내용의 실시예들은, 출력 레지스터들에 대한 새로운 매핑을 항상 생성하지는 않지만 대신 일부 명령들에 대한 매핑을 보존하는 이름변경 메커니즘을 포함한다. 긴-벡터 레지스터 구현들의 컨텍스트에서, 이것은, 출력 레지스터가 또한 입력 레지스터인 명령들에 대해 유용하며, 입력의 값들의 서브세트만이 수정된다.
레지스터 뱅크들
세그먼테이션
[00259] 큰-레지스터-벡터를 구현하는데 요구되는 총 메모리는 꽤 커질 것이다. 예컨대, 256바이트를 각각 갖는 8개의 물리적 벡터 레지스터들이 존재하면, 필요한 메모리는 4K 바이트이다. 그러나, 벡터 명령이 다수의 사이클들에 걸쳐 완료되기 위한 것이라고 가정하면, 벡터 레지스터들의 모든 콘텐츠들이 동시에 필요한 것은 아니다.
[00260] 일 실시예에서, 벡터 명령이 통상적으로 동시에 최대 세그먼트 만큼의 데이터를 프로세싱하도록, 각각의 레지스터는 세그먼트들로 분할된다. 예컨대, 256-바이트 레지스터는 각각 32 바이트의 8개의 세그먼트들로 분리될 수 있다. 단일-정밀도 부동-소수점 가산 명령 vaddf _s $n0,$v0,$v1,$v2는 $v1 및 $v2의 제 1 세그먼트에서 8개의 단일-정밀도 수들을 판독하고, 그들을 함께 가산하며, 그리고 결과들을 다시 $v0의 제 1 세그먼트에 기록할 수 있다. 그런다음, 제 2 세그먼트 등이 유사하게 프로세싱된다. $n0이 최대값(이러한 경우에는 64)보다 작으면, 모든 세그먼트들을 판독할 필요는 없을 수 있다. 예컨대, $n0가 8이면, $v1 및 $v2의 제 1 세그먼트들만이 판독 및 프로세싱될 필요가 있다.
[00261] 기능 유닛들의 수가 완전한 세그먼트를 프로세싱하는데 요구되는 수와 매치하면, 프로세싱은 입력의 세그먼트들을 판독하고 기능 유닛들을 시작할 수 있다. 기능 유닛들의 수가 그 수보다 작으면, 다수의 사이클들이 세그먼트들의 전체를 소비하는데 필요할 수 있다. 구현은:
Figure pct00318
전체 세그먼트가 프로세싱될 때까지 세그먼트를 재판독하여 상이한 서브세트들을 선정하고, 그리고/또는
Figure pct00319
내부 레지스터에 세그먼트를 버퍼링하고 그 세그먼트가 완전히 프로세싱될 때까지 , 그 내부 레지스터로부터 반복적으로 판독할 수 있다.
[00262] 기능 유닛들의 수가 완전한 세그먼트를 프로세싱하는데 요구되는 수를 초과하고 그들을 비지하게 유지하는 것을 원한다면, 구현은 다수의 세그먼트들을 판독하고 기록 필요가 있을 수 있다.
[00263] 다수의 세그먼트들을 판독/기록하는 것이 필요한 다른 경우는, 동일한 레지스터로부터의 비-인접 엘리먼트들에 대해 동시적으로 연산하는 그 벡터 명령들의 경우에 있으며, 여기서, 비-인접 엘리먼트들이 레지스터의 상이한 세그먼트들로부터 유리되는 것이 가능하다. 예컨대, 유니티 ISA에서, 명령 vfftf_s_x8 $n0,$v1,$v2,$v3은, 구현이 $v2의 8개의 엘리먼트들에 걸쳐 radix-2 FFT를 수행하는 것을 특정하며, 여기서, 엘리먼트들은 복소 단일-정밀도 부동-소수점 수들이다. 이러한 경우에서, 제 1 FFT를 수행하기 위해, 명령은 바이트들 [0...7] 및 바이트들 [64...71]을 동시적으로 판독할 필요가 있을 수 있다. 따라서, 이러한 연산을 수행하기 위해, 명령은 2개의 32바이트 세그먼트들을 판독할 필요가 있다.
메모리 어레이들
[00264] 이들 레지스터 파일들을 구현하는 하나의 방식은 메모리-어레이들을 사용하는 것이다. 메모리 어레이는 다수의 행들을 포함할 수 있고, 각각의 행은 특정 수의 비트들을 포함한다. 행이 어드레싱될 때, 그 행의 비트들이 판독되거나 기록될 수 있다. 행에서 비트들의 수는 어레이의 폭이라 지칭된다.
[00265] 메모리 어레이는 다수의 행들이 동일한 사이클에서 판독 및/또는 기록되게 할 수 있다. 동일한 사이클에서 N개의 동시적인 액세스들을 지원하는 어레이는 N-포티드(ported) 어레이라 지칭된다. 일부 포트들은 판독하거나 기록하는 것을 행하는 것으로 제한될 수 있다. 예컨대, 소위 "듀얼 포티드 어레이"는 동일한 사이클에서 최대 하나의 행이 판독되고 하나의 열이 기록되도록 허용할 수 있다. 따라서, "듀얼 포티드 어레이"는 하나의 판독 포트 및 하나의 기록 포트를 포함한다. 그에 반하여, "2개의 포트 어레이"는 판독 또는 기록에 사용될 수 있는 2개의 포트들을 가진다. 따라서, "2개의 포트 어레이"는 동일한 사이클에서 2개의 판독들, 또는 2개의 기록들, 또는 하나의 판독 및 하나의 기록를 행할 수 있다. 행들의 수 및 폭을 일정하게 유지하면서 포트들의 수를 증가시킴에 따라, 어레이의 크기는 증가하고 성능은 떨어진다.
[00266] 메모리 어레이의 폭과 이의 전력/성능 간에 트레이드오프가 존재한다. 특정 설계 포인트에서, 특정 수의 행들에 대하여, 달성될 수 있는 최대 폭이 존재한다. 다수의 더 작은 메모리 어레이들이 함께 그룹화될 수 있고 병렬로 액세스되어 더 넓은 메모리 어레이로 보이는 것을 구축(build)할 수 있다. 논의의 목적들을 위하여, 직접 또는 더 작은 어레이들을 그룹화함으로써 원하는 폭의 어레이들을 구축하는 것이 가능하다는 것이 가정된다.
편성
[00267] 일 실시예에서, 레지스터 파일은 실질적으로 하나의 세그먼트 폭인 행당 하나의 세그먼트를 가지는 메모리 어레이를 사용하기 위한 것이다. 따라서, 32 바이트의 4개의 세그먼트들을 가지는 12개의 레지스터들을 가진 레지스터 파일에 대해, 이를 256 비트들의 48개의 행들(48x32 바이트)을 가지는 메모리 어레이로서 구현할 수 있다.
[00268] 대안적인 구현 기법은 다수의 메모리 어레이들을 사용하기 위한 것이다. 따라서, 위의 예는 24개의 행들을 각각 포함하는 2개의 메모리 어레이들, 또는 16개의 행들을 가진 3개의 메모리 어레이들로 구현될 수 있다. 이들 어레이들 각각이 더 적은 수의 행들을 포함하기 때문에, 다수의 메모리 어레이는 더 빠른 속도 및 더 낮은 전력의 장점들을 제공한다.
판독 포트들
[00269] 명령-세트 아키텍처가 전체 성능을 위해 3개의 세그먼트들을 판독할 수 있고 1개의 세그먼트를 기록할 수 있는 명령들, 이를테면 vmuladd(vector multiply add)
Figure pct00320
을 포함하면, 단일 어레이 구현은 3개의-판독, 1개의-기록 포트 레지스터 파일을 필요로 할 수 있다. 이런 종류의 벡터 명령의 관심있는 특징은, 명령이 3개 모두의 레지스터들의 동일한 세그먼트들을 판독한다는 것이다. 명령은 먼저 3개 모두의 레지스터들의 제 1 세그먼트를 판독하고, 그 다음 제 2 세그먼트를 판독하는 식이다. 2개 이하의 레지스터들이 동일한 어레이에 동일한 세그먼트를 가지도록 레지스터들의 i번째 세그먼트가 상이한 어레이들에 분산되는 다중-뱅크 구현은 판독 포트 요건을 2개로 줄일 수 있다. 이것은 최소한, 어레이들의 수가 레지스터들의 수의 절반인 것을 요구할 수 있다.
[00270] 본 개시내용의 실시예들은 도 10에 도시된 48개의 세그먼트들을 편성할 수 있다. 표기법(
Figure pct00321
)은 벡터 레지스터(N)의 I번째 세그먼트를 의미한다. 각각의 열은 별개의 메모리 어레이에 대응하고, 각각의 행은 그 어레이 내의 행에 대응한다. 행들의 수는 세그먼트들의 수의 2배이다.
[00271] 도 10에 도시된 바와 같이, 임의의 행에는 각각의 세그먼트의 단지 2개의 인스턴스들이 존재한다. 따라서, vmulred에 대한 입력들을 판독하기 위하여, 최대 2개의 판독 포트들이 요구된다. 이것은, 모든 입력 레지스터들이 상이하다는 것을 가정한다.
Figure pct00322
과 같은 명령이 동일한 레지스터를 2번(또는 3번) 특정하면, 하드웨어는, 이 경우가 단지 2개의 레지스터들(또는 1개의 레지스터)만을 액세스하고 필요할 때 이를 복제한다는 것을 인지할 수 있다.
[00272] 간단한 레지스터 파일 구현이 레지스터 파일에 3개의 판독 포트들을 필요로 하는 것을 요구할 수 있는 다른 경우는, 명령이 레지스터의 다수의 세그먼트들뿐 아니라, 다른 레지스터의 일부 다른 세그먼트(위의 vfft 예에서처럼)에 액세스할 필요가 있는 경우이다.
[00273] 다시, 다수의 어레이들은 판독 포트 요건을 2개로 감소시키기 위하여 사용될 수 있다. 레지스터의 모든 세그먼트들이 상이한 어레이들에 있는 한, 레지스터의 상이한 세그먼트들은 레지스터 포트들의 수를 증가시킴이 없이 동일한 사이클에서 판독될 수 있다. 이것은, 뱅크들의 수가 적어도 세그먼트들의 수만큼 큰 것을 요구한다. 위의 예에서 이 조건이 만족되는 것을 주목하라.
[00274] FFT 경우에, 동시에 액세스될 세그먼트들은 2의 거듭제곱 떨어져 있다. 8개의 세그먼트들이 있고 FFT의 크기에 의존한다는 것을 가정하여, 명령은 세그먼트 I 및 세그먼트들 I+1, I+2 또는 I+4 에 동시에 액세스할 수 있다. 적어도 3개의 메모리 뱅크들이 있고 메모리 어레이들의 수가 2의 거듭제곱이 아닌 한, 2개의 액세스 패턴의 이런 거듭제곱이 동일한 레지스터에 대한 동일한 메모리 뱅크의 상이한 행들에 대해 2개의 액세스들을 결코 요구하지 않도록 세그먼트들을 배열하는 것이 가능하다.
기록 포트들
[00275] 기록 포트(들)를 판독 포트들과 결합하고, 그리고 몇 가지 방식들 중 하나의 방식으로 레지스터 파일을 구현함으로써 메모리 어레이들에서 포트들의 전체 수를 감소시키는 것이 가능할 수 있다.
[00276] 일 실시예에서, 레지스터 파일은, 명령이 기록하려 할 때, 현재 또는 임의의 다른 명령에 의한 임의의 레지스터 판독들을 방지하고, 그리고 하나의 사이클만큼 판독을 지연하도록, 발생할 모든 기록들에 대한 명령 실행을 스톨링시킴으로써 구현된다.
[00277] 이런 접근법의 변형은, 메모리 어레이들이 2개의 판독 포트들 및 단일 판독/기록 포트를 가지는 경우이다. 그 경우에, 기록와 동시에 3개의 입력 명령을 발행하는 것을 시도할 때만 스톨이 발생한다. 그 경우에, 3개의-입력 명령은 지연된다. 2개의 입력 명령들에 대한 어떠한 영향력도 없다.
[00278] 본 개시내용의 실시예들은 다수의 뱅크들과 스톨 접근법을 결합할 수 있다. 이 경우에, 메모리들은 1개의 판독 포트 및 1개의 판독/기록 포트를 가질 수 있다. 명령이 동일한 뱅크로부터 동시에 2개의 행들을 판독하는 것을 시도하면, 그 뱅크에 하나의 값이 기록되고, 명령은 하나의 사이클만큼 지연될 수 있다.
[00279] 또한, 레지스터 이름변경 로직이 입력들에 대응하는 물리적 레지스터들을 검사하고, 그 다음으로 이들과 충돌하지 않는 물리적 레지스터를 할당함으로써, 레지스터 이름변경을 이용하는 구현을 통해 기록-포트 충돌들을 제어하는 것이 가능하다.
[00280] 4개의 세그먼트들의 12개의 레지스터의 예에 대해, 세그먼트/뱅크 레이아웃이 예와 같다고 가정하고, 그리고 이 예의 목적을 위하여, 모든 명령들이 하나의 사이클을 차지한다고 가정하자. 명령, 이를테면 vmuladd에 대해, 이것은, 출력의 세그먼트 0가 기록되는 것과 동시에 3개의 입력들의 세그먼트 1가 판독되는 것을 의미한다. 포트들 둘 모두가 판독들에 사용되는 어레이는 최대 하나일 수 있다. 출력 레지스터의 0번째 세그먼트가 해당 포트에 있지 않도록 출력 레지스터가 할당되면, 아무런 충돌도 없을 수 있다. 명령이 vmulred
Figure pct00323
이고
Figure pct00324
Figure pct00325
Figure pct00326
에 매핑되는 것을 가정하자.
Figure pct00327
Figure pct00328
는 매 사이클마다 메모리 어레이로부터 판독된다. 제 2 사이클에서, 이들은 뱅크 1로부터 판독된다. 레지스터 이름변경 로직이
Figure pct00329
내지
Figure pct00330
또는
Figure pct00331
에 매핑하지 않는 한, 기록들과 판독들 간에 어떠한 충돌도 없다.
특성들
타입
[00281] 레지스터에 마지막에 기록된 엘리먼트들의 타입이 명령에 의해 예상되는 타입과 매치하지 않으면, 아키텍처는 명령의 행위를 정의되지 않은 것으로 특정할 수 있다.
[00282] 하나의 옵션은 이 상황을 무시하고, 그리고 예상된 타입의 엘리먼트들인 것처럼 레지스터의 콘텐츠를 해석하는 것이다. 이 옵션은 덜 비싼 하드웨어를 유발할 수 있지만, 프로그램들 내 특정 종류의 버그들을 검출하는 것을 더 어렵게 만든다.
[00283] 다른 옵션은 이런 미스매치를 검출하고 그리고 바람직하게 예외를 발생시킴으로써 액션을 취하는 것이다. 이 경우에, 타입 정보는 각각의 레지스터에 저장된다. 컨텍스트 스위칭의 목적들을 위하여, 이 정보는 레지스터 상태를 보관하고 복원하는 코드에 의해 액세스가능할 수 있어서, 또한 타입 정보를 저장 및 복원할 수 있다.
길이
[00284] 레지스터에 마지막에 기록된 엘리먼트들의 수가 명령에 의해 판독될 수보다 더 적으면, 아키텍처는 명령의 행위가 정의되지 않은 것을 정의할 수 있다.
[00285] 하나의 옵션은 이런 미스매치를 검출하고 그리고 바람직하게 예외를 발생시킴으로써 수정 액션을 취하는 것이다. 이 경우에, 길이 정보는 각각의 레지스터에 저장된다. 컨텍스트 스위칭의 목적들을 위하여, 이 정보는 레지스터 상태를 보관하고 복원하는 코드에 의해 액세스가능할 수 있어서, 또한 길이 정보를 보관 및 복원할 수 있다.
[00286] 대안적인 접근법은 길이 미스매치를 무시하고, 그리고 레지스터의 콘텐츠를 사용하는 것이다. 특히, 레지스터에 기록하기 위한 마지막 명령에 의해 기록된 엘리먼트들 초과의 엘리먼트들의 값은 레지스터에 기록하기 위한 이전 명령들에 의해 기록된 값들에 의존할 수 있다. 이들은, 이들 값들이 현재 프로그램 이외의 명령들에 의해 기록되는 상황에서는 예측가능하지 않을 수 있으며, 이는 허용하기 어려운 가변적인 결과들을 유도한다.
[00287] 레지스터가 기록될 때마다 전체 레지스터를 중첩기록하기 위한 명령을 가지는 다른 대안적인 접근법은, 그렇지 않았다면, 명령에 의해 기록되지 않았을 엘리먼트들을 디폴트 값으로 세팅하는 것이다. 이런 디폴트 값은 NaN 또는 일부 다른 미리정의된 값일 수 있거나, 구성 레지스터의 콘텐츠들일 수 있다.
[00288] 대안적으로, 저장된 길이를 사용하여 기록된 엘리먼트들 초과로 판독하기 위한 시도들을 검출하기 위하여, 길이가 각각의 레지스터에 저장된다(위에서 설명된 바와 같음). 이때, 리턴된 값은 디폴트 값일 수 있다.
[00289] 하이브리드 접근법은 벡터 레지스터를 특정 수의 섹션들로 나누고, 바람직하게 비트-마스크를 사용하여 명령에 의해 기록된 섹션들의 수를 계속 추적하는 것이다. 벡터 명령이 벡터 레지스터에 기록될 때, 기록된 섹션들의 수는 레코딩된다. 마지막 섹션이 부분적으로만 기록되면, 그 섹션의 트레일링(trailing) 엘리먼트들은 디폴트 값으로 세팅된다.
[00290] 이런 접근법에서, 컨텍스트 스위치 코드가 임의의 길이 레지스터들을 보관할 필요가 없다는 것을 주목하라. 컨텍스트 스위치 코드는, 레지스터를 판독할 때, 전체 레지스터를 판독하도록 시도할 수 있다. 이것은 이 레지스터에 마지막에 기록된 엘리먼트들과, 디폴트 값들을 포함하는 가능하게 일부 트레일링 엘리먼트들을 포함한다. 그 다음으로, 벡터 레지스터가 복원될 때, 이 모두는 중첩 기록될 수 있지만, 트레일링 엘리먼트들의 동일한 세트는 디폴트 값들을 포함할 수 있다.
변형들
[00291] 비록 최대 3개의 입력들 및 1개의 출력을 가지는 예시적인 명령들이 본 개시내용에서 논의되지만, 동일한 기법들이 제한 없이, 더 많은 입력들 및 출력들을 가지는 명령들에 적용될 수 있다. 유사하게, 본 개시내용이 다중-뱅킹에 의해 벡터 레지스터 파일에서 3개의 판독+1개의 기록 포트로부터 1개의 판독+1개의 판독/기록 포트로 포트 요건으로 줄이는 것을 설명하지만, 유사한 기법들이 다른 컨텍스트들에서 절감들을 달성하기 위하여 사용될 수 있다.
구현
[00292] 구현은, 별개의 벡터 명령들과 작은 정도의 비순차 간의 실행을 오버랩하여, 정확한 예외들을 지원하고 구현 비용을 최소화할 필요성을 포함하는 설계 타겟에 기반한다.
[00293] 일 실시예는 8개의 구조화된 레지스터들을 12개의 물리적 레지스터들에 명명하는 이름변경된 레지스터 파일의 구현을 포함할 수 있다. 물리적 레지스터들은 길이가 256 바이트이고, 각각 32 바이트의 8개의 서브-벡터들로 나눠진다. 레지스터들은, 사실상 크기가 16x512 바이트가 되도록, 더 작은 어레이들로 만들어진 6개의 메모리 뱅크들을 사용하여 구현된다.
[00294] 일 실시예에서, 타입 또는 길이 태그들은 각각의 레지스터 상에 유지되지 않는다. 그러나, 레지스터 파일의 정의되지 않은 부분들에 대한 디폴트 값을 리턴하는 것이 지원된다.
[00295] 메모리 뱅크들은, 공통으로 연결된 다양한 제어 및 별개의 데이터 신호들을 갖는 4개의 16x128b 어레이들을 사용하여 만들어진다. 이는 도 11에 도시된다. 이들 뱅크들 각각은 판독/기록 포트 A 및 판독-전용 포트 B를 포함한다. 포트 A에 대한 판독-인에이블(RENA), 포트 A에 대한 기록-인에이블(WENA), 포트 A에 대한 행 어드레스(ADRA), 포트 B에 대한 판독-인에이블(RENB), 포트 A에 대한 기록-인에이블(WENB), 포트 B에 대한 행 어드레스(ADRB), 및 클록(CLK)은 모든 메모리 어레이들에 대해 공통이다. 도 11에 도시된 바와 같이, 포트 A에 대한 기록 데이터 입력(DA) 및 포트들 A & B에 대한 2개의 판독 데이터 출력들(QA,QB)은 모든 메모리 어레이들에 걸쳐 분산된다.
[00296] 이들 어레이들로 형성된 6개의 메모리 뱅크들은 도 12에 도시된 바와 같이 결합된다. 디코드 로직은 매 사이클마다 서브벡터들에 대해 최대 3개의 판독들 및 1개의 기록 요청들을 수신하여, 상이한 서브벡터들이 판독 및 기록에 대해 인에이블되는 것을 초래할 수 있다. 디코드 로직은 이들 요청들을 판독 및 기록 인에이블들로 변환할 수 있을 뿐만 아니라 6개의 뱅크들 각각에 대한 2개의 포트들에 대한 어드레스들로 변환할 수 있다. 따라서, 한 사이클에서 최대 4개의 뱅크들이 활성화될 수 있다. 아래에서 설명되는 바와 같이, 3개의 출력들 각각은 512 바이트 폭 7-투-1 mux를 사용하여, 6개의 뱅크들뿐만 아니라 디폴트 값에 연결된다.
[00297] 레지스터 R에서 서브벡터 N을 매핑하기 위한 로직은 아래와 같다:
Figure pct00332
[00298] 추가하여, 실시예들은 정의되지 않은 서브벡터들에 대해 디폴트 값을 제공한다. 대응하는 서브-벡터가 유효 콘텐츠들을 갖는지를 표시하기 위해 사용되는 96 비트들의 어레이가 존재한다. 이는, 대응하는 서브-벡터가 연산 동안 마지막으로 기록된 경우 1로 설정되는 플롭들을 사용하여 구현된다. 이는, 칩 리셋 시에 그리고 레지스터가 이름변경 동안 처음 할당될 때, 클리어된다. 서브-벡터가 기록될 때, 서브-벡터의 비트가 설정된다. 서브-벡터가 판독되고 서브-벡터의 비트가 0일 때, 제공된 값은 디폴트 값 레지스터로부터 판독된다. 이는 콘텐츠들이 512 비트들로 복제될 수 있는 64 비트 레지스터이다.
구현 변동들
[00299] 구현들은, 정확한 파이프라인 편성 및 선정된 기술 등의 미세 마이크로 선정들에서 서로 상이할 수 있다. 그러나, 이 섹션은 아래와 같은 가능한 구현 변동들을 포함하여 위의 섹션에서 설명된 바와 같은 구현의 성질의 더 개략적인 변동들을 검사한다:
Figure pct00333
상이한 벡터 레지스터 크기들,
Figure pct00334
가능하게는 상이한 수의 엘리먼트들을 갖는 상이한 타입들에 대한 상이한 벡터 레지스터들,
Figure pct00335
기능 유닛들의 상이한 혼합들,
Figure pct00336
상이한 비구현된 벡터 명령들(예컨대, 소프트웨어로 완전히 구현되는 명령들),
Figure pct00337
부분 구현(예컨대, 일부 명령 변량들은 하드웨어로 구현되지만, 다른 명령 변량들은 인터럽트들을 야기하며 소프트웨어로 구현됨).
벡터-유닛을 더 적게 구현
[00300] 극히 저비용의 구현을 위한 하나의 가능성은, 실행을 위해 벡터 명령이 선택될 때마다 취해질 인터럽트를 유발하는 벡터 유닛을 생략하는 것이다. 이 경우, 벡터-유닛은 전적으로 소프트웨어로 구현되며, 모든 벡터 명령들은 에뮬레이션을 통해 실행된다.
멀티-스레딩 구현
[00301] 라운드-로빈, 하이퍼-스레딩, 대칭적 멀티-스레딩 등을 포함하는 많은 스타일들의 멀티-스레딩 구현이 존재한다. 벡터 유닛의 컨텍스트에서, 멀티-스레딩의 기법들이 아래와 같이 적용된다:
Figure pct00338
프로세서에 의해 지원되는 스레드들 각각에 대한 구조화된 레지스터 파일의 카피가 존재함;
Figure pct00339
순차 멀티-스레딩 프로세서에서, 각각의 스레드에 대한 별개의 레지스터 파일이 존재함;
Figure pct00340
이름변경을 이용하는 멀티-스레딩 프로세서에서, 각각의 스레드는 이름변경을 위해 자체적인 레지스터들의 풀을 가질 수 있거나, 또는 공통 풀이 존재할 수 있으며, 레지스터들은 그 풀로부터 이름변경됨;
Figure pct00341
모든 스레드들은 그들의 벡터 명령들을 실행하기 위해 동일한 기능 유닛들을 사용하여 공유됨.
비대칭 멀티-스레딩
[00302] 본 개시내용의 실시예들은 비대칭 멀티-스레딩을 포함하며, 이는 프로세서의 자원들에 대해 모든 스레드들이 동일한 액세스를 갖지 않는 멀티-스레딩의 버전이다. 벡터 프로세서를 이용한 구현의 특정 컨텍스트에서, 이는 일부 스레드들만이 벡터 유닛에 대한 액세스를 가질 것임을 의미할 것이다.
[00303] 벡터 유닛에서, 벡터 레지스터 파일에 의해 상당한 영역이 소비된다. 멀티-스레딩 구현에서, 각각의 추가의 스레드는 요구되는 레지스터들의 수를 증가시켜서, 레지스터 파일의 영역이 커지도록 야기한다. 더 큰 영역은 비용들을 증가시키고 사이클 시간에 영향을 미칠 수 있다.
[00304] 또한, 모든 스레드들이 벡터 유닛을 요구하지는 않는다. 예컨대, 하나의 스레드가 I/O 인터럽트들을 핸들링하고 다른 스레드가 넘버 크런칭(number crunching)을 수행하는 투웨이 멀티-스레딩 프로세서가 존재하는 경우, 인터럽트 핸들링 스레드는 어떠한 벡터 프로세싱도 필요로 하지 않는다. 이 경우, 단지 하나의 스레드만이 벡터 유닛에 대한 액세스를 갖는 것이 좋다. 결과적으로, 실시예가, 일부 스레드들이 벡터 유닛에 대한 액세스를 갖고 다른 스레드들은 벡터 유닛에 대한 액세스를 갖지 않는 멀티-스레딩 프로세서를 포함하는 경우, 액세스를 갖는 스레드들의 요건들을 만족시키기에 충분한 벡터 레지스터 상태들만을 구현할 필요가 있으므로, 레지스터 영역이 절감된다. 예컨대, 단지 1개의 스레드만이 벡터 유닛에 액세스하도록 허용된 3-스레딩 프로세서가 존재하는 경우, 구현은 3개가 아니라 단지 1개의 스레드에 대한 벡터 레지스터들만을 가질 필요가 있어서, 큰 절감들이 초래된다. 한 번에 단지 하나의 프로그램만이 벡터 유닛을 사용할 필요가 있는 것으로 밝혀지는 경우, 이러한 절감은 성능의 손실 없이 이루어진다.
정적 대 동적 비대칭 멀티-스레딩
[00305] 정적 멀티-스레딩의 경우, 특정 하드웨어 스레드들은 벡터 유닛에 대한 액세스를 갖고, 다른 스레드들은 벡터 유닛에 대한 액세스를 갖지 않는다. 하드웨어 스레드들의 할당은 하드웨어에 의해 고정된다. 벡터 유닛에 대한 액세스를 갖지 않는 스레드 상에서 실행되는 프로그램이 벡터 명령들을 실행하는 것을 시작하기를 원하는 경우, 이는 프로세서로부터 스와프되고, 그 후에 벡터 액세스를 갖는 스레드 상으로 다시 스와프된다.
[00306] 동적 멀티-스레딩의 경우, 프로세서는 상이한 스레드들을 벡터 유닛에 대해 허용하도록 구성될 수 있어서, 임의의 일 시간에 모든 스레드들의 서브세트만이 벡터 유닛에 대한 액세스를 갖지만, 그 서브세트는 변경될 수 있다. 이러한 특정 경우에서, 벡터 유닛에 대한 어떠한 액세스도 갖지 않는 스레드 상에서 실행되는 프로그램이 벡터 명령들을 실행하는 것을 시작하기를 원하는 경우, 하드웨어는 벡터 유닛에 대한 스레드 액세스를 허용하도록 재구성될 수 있다.
[00307] 동적 멀티-스레딩의 경우, 어떠한 다른 프로그램도 벡터 유닛을 사용하고 있지 않다면, 프로그램은 벡터 유닛에 직접적으로 액세스하도록 할당될 수 있거나, 또는 벡터 유닛을 사용하고 있는 프로그램이 벡터 유닛을 릴리즈하거나 또는 일부 다른 스레드가 자신의 벡터 유닛을 릴리즈하도록 강제될 수 있어서 벡터 유닛이 이용가능해질 때까지 대기하도록 만들 수 있다.
[00308] 일반적으로, 프로그램이 벡터 유닛을 릴리즈할 때, 이는 컨텍스트 스위치 동안 스와프 아웃되는 것과 유사한다. 프로그램에 의해 사용되는 벡터 레지스터들은, 일반적으로 운영 시스템에 의해, 그 프로그램에 특정적인 영역에 보관된다. 프로그램이 벡터 유닛을 획득할 때, 이는 컨텍스트 스위치 동안 스와프 인되는 것과 유사한다. 벡터 레지스터들은, 일반적으로 운영 시스템에 의해, 그 프로그램에 특정적인 영역으로부터 로딩된다.
일반화
[00309] 이 섹션은, 스레드들의 서브세트만이 벡터 유닛에 대한 동시적인 액세스가 허용되고, 이에 의해, 모든 스레드들에 대한 벡터 상태를 홀딩하는 것이 아니라, 그 스레드들에 대한 벡터 상태만을 홀딩하는 구현을 허용하는, 벡터 유닛에 적용되는 바와 같은 비대칭 멀티-스레딩을 설명한다. 벡터 레지스터들의 크기 및 벡터 레지스터 파일들의 영역을 고려하면, 이는 실질적인 절감들을 초래한다.
[00310] 그러나, 이 아이디어는 더 일반적인 적용가능성을 갖는다. 예컨대, 임의의 멀티-스레딩 프로세서에서, 스레드들이 프로세서 자원들에 대한 비대칭 액세스를 갖도록 허용하고, 이에 의해, 모든 스레드들이 모든 자원들에 액세스할 수 있는 비용을 절감하는 것이 가능하다. 예컨대, 임베디드 프로세서를 위한 멀티-스레딩 구현에서, 부동-소수점 유닛 ― 즉, 4개의 스레드들 ― 에 대해 동일한 작업을 하는 것이 합리적일 수 있지만, 단지 하나만이 부동-소수점 유닛에 대한 액세스를 갖고, 그러므로, 부동-소수점 레지스터들의 하나의 세트만을 갖는다.
[00311] 일 예에서, 벡터(컴퓨터) 프로세서(100)는 벡터들을 결합 및 분할하기 위한 명령들을 사용하여 가변 길이 벡터들에 대해 연산하는 하나 또는 그 초과의 명령들을 포함할 수 있다. 컴퓨터 프로세서(100)는 가변수의 엘리먼트들을 홀딩하기 위한 적어도 하나의 벡터 레지스터를 포함하는 벡터 레지스터 파일(206)을 포함하는 벡터 유닛(108, 200)을 포함할 수 있다. 컴퓨터 프로세서(100)는 벡터를 분리하거나 또는 2개의 벡터들을 결합하는 하나 또는 그 초과의 명령들을 사용하여 벡터 레지스터 파일(206) 내의 가변수의 엘리먼트들에 대해 연산하도록 구성된 프로세싱 로직을 더 포함할 수 있다. 컴퓨터 프로세서(100)는 모놀리식 집적 회로로서 구현될 수 있다.
[00312] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 테일 별개 명령을 포함할 수 있다. 벡터 테일 별개 명령은, 벡터 레지스터 파일(206)의 레지스터로부터 엘리먼트들의 입력 벡터를 판독할 수 있고, 엘리먼트들의 출력 벡터를 형성하기 위하여 입력 벡터로부터의 오프셋에서 시작하는 인접수의 엘리먼트들을 선택할 수 있으며, 그리고 벡터 레지스터 파일(206)의 레지스터에 출력 벡터를 기록할 수 있다. 인접수의 엘리먼트들 및 오프셋은 벡터 길이 레지스터 파일(208)의 하나 또는 그 초과의 레지스터들 내의 값들에 부분적으로 기반하여 결정될 수 있다.
[00313] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 연접 결합 명령을 포함할 수 있다. 벡터 연접 결합 명령은, 벡터 레지스터 파일(206)의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 벡터 레지스터 파일(206)의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독할 수 있고, 제 1 입력 벡터의 엘리먼트들을 선택하고 제 2 입력 벡터로부터의 엘리먼트들을 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일(206)의 레지스터에 출력 벡터를 기록할 수 있다. 제 1 벡터 내의 엘리먼트들의 수 및 제 2 벡터 내의 엘리먼트들의 수는 벡터 길이 레지스터 파일(208)의 하나 또는 그 초과의 레지스터들 내의 값들에 부분적으로 기반하여 결정될 수 있다.
[00314] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 이븐 별개 명령을 포함할 수 있다. 벡터 이븐 별개 명령은 벡터 레지스터 파일(206)의 레지스터로부터 엘리먼트들의 입력 벡터를 판독할 수 있고, 제 1 엘리먼트에서 시작하여, 입력 벡터로부터 하나 걸러 하나씩 엘리먼트를 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일(206)의 레지스터에 출력 벡터를 기록할 수 있다.
[00315] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 오드 별개 명령을 포함할 수 있다. 벡터 오드 별개 명령은 벡터 레지스터 파일(206)의 레지스터로부터 엘리먼트들의 입력 벡터를 판독할 수 있고, 제 2 엘리먼트에서 시작하여, 입력 벡터로부터 하나 걸러 하나씩 엘리먼트를 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일(206)의 레지스터에 출력 벡터를 기록할 수 있다.
[00316] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 인터리브 결합 명령을 포함할 수 있다. 벡터 인터리브 결합 명령은, 벡터 레지스터 파일(206)의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 벡터 레지스터 파일(206)의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독할 수 있고, 제 1 입력 벡터 및 제 2 입력 벡터로부터 엘리먼트들을 교대로 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일(206)의 레지스터에 출력 벡터를 기록할 수 있다.
[00317] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 테일 별개 명령을 포함할 수 있다. 벡터 테일 별개 명령은, 벡터 레지스터 파일(206)의 레지스터로부터 엘리먼트들의 입력 벡터를 판독할 수 있고, 엘리먼트들의 출력 벡터를 형성하기 위하여 입력 벡터로부터의 오프셋에서 시작하는 인접수의 엘리먼트들을 선택할 수 있으며, 그리고 벡터 레지스터 파일(206)의 레지스터에 출력 벡터를 기록할 수 있다.
[00318] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 연접 결합 명령을 포함할 수 있다. 벡터 연접 결합 명령은, 벡터 레지스터 파일(206)의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 벡터 레지스터 파일(206)의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독할 수 있고, 제 1 입력 벡터의 엘리먼트들을 먼저 선택하고 제 2 입력 벡터의 엘리먼트들을 선택함으로써 출력 벡터를 형성할 수 있으며, 그리고 벡터 레지스터 파일(206)의 레지스터에 출력 벡터를 기록할 수 있다.
[00319] 일 예에서, 컴퓨터 프로세서(100)는 가변수의 비트들을 포함하는 하나 또는 그 초과의 벡터 마스크 레지스터들을 포함하는 벡터 마스크 레지스터 파일(212)을 포함할 수 있다.
[00320] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 펑처 별개 명령을 포함할 수 있다. 벡터 펑처 별개 명령은, 벡터 레지스터 파일(206)의 레지스터로부터 엘리먼트들의 입력 벡터를 판독하고, 벡터 마스크 레지스터 파일(212)의 레지스터로부터 비트들의 입력 벡터를 판독할 수 있는 선택 기준들로서 0 또는 1을 선택할 수 있고, 비트들의 입력 벡터에서의 대응하는 포지션에서의 비트가 선택 기준들과 매칭하는 엘리먼트들만을 입력 벡터로부터 선택할 수 있으며, 엘리먼트들의 출력 벡터를 형성하기 위하여, 선택된 엘리먼트들을 연접할 수 있고, 그리고 벡터 레지스터 파일(206)의 레지스터에 출력 벡터를 기록할 수 있다.
[00321] 일 예에서, 하나 또는 그 초과의 명령들은 벡터 믹스 결합 명령을 포함할 수 있다. 벡터 믹스 결합 명령은, 벡터 레지스터 파일(206)의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독하고, 벡터 마스크 레지스터 파일(212)의 레지스터로부터 비트들의 입력 벡터를 판독하는 선택 기준들로서 0 또는 1을 선택할 수 있고, 비트들의 입력 벡터의 비트들에 대해 반복할 수 있으며, 선택된 엘리먼트들로부터 출력 벡터를 형성하기 위하여, 비트가 선택 기준들을 충족하면 제 1 입력 벡터의 다음 미선택된 엘리먼트를 선택할 수 있고, 비트가 선택 기준들을 충족하지 않으면 제 2 입력 벡터의 다음 미선택된 엘리먼트를 선택할 수 있고, 그리고 벡터 레지스터 파일(206)의 레지스터에 출력 벡터를 기록할 수 있다.
[00322] 전술한 설명에서, 다수의 세부사항들이 제시된다. 그러나, 본 개시내용이 이들 특정 세부사항들 없이도 실시될 수 있다는 것이 본 개시내용의 이익을 얻는 당업자에게 자명할 것이다. 일부 경우들에서, 잘-알려진 구조들 및 디바이스들은 본 개시내용을 불분명하게 하는 것을 피하기 위해, 상세히 도시되기 보다는 블록 다이어그램 형태로 도시된다.
[00323] 상세한 설명의 일부 부분들은 컴퓨터 메모리 내의 데이터 비트들에 대한 연산들의 심볼 표현들 및 알고리즘들에 관하여 제시되었다. 이들 알고리즘 설명들 및 표현들은 데이터 프로세싱 기술들의 당업자가 다른 당업자에게 그들의 작업의 본질을 가장 효과적으로 전달하기 위해 사용되는 수단이다. 본원에서 그리고 일반적으로, 알고리즘은 원하는 결과로 인도하는 단계들의 자기-부합적 시퀀스인 것으로 생각된다. 단계들은 물리적 양들의 물리적 조작들을 요구하는 것들이다. 일반적으로, 필수적이지는 않지만, 이들 양들은 저장, 전달, 결합, 비교, 및 그렇지 않으면 조작될 수 있는 전기 또는 자기 신호들의 형태를 취한다. 주로 일반적인 용법의 이유로, 이들 신호들을 비트들, 값들, 엘리먼트들, 심볼들, 문자들, 항들, 수들 등으로 지칭하는 것이 종종 편리한 것으로 입증되었다.
[00324] 그러나, 모든 이들 및 유사한 용어들이 적합한 물리적 양들과 연관될 것이고, 단지 이들 양들에 적용되는 편리한 라벨들일 뿐이라는 것이 유념되어야 한다. 다음의 논의로부터 자명한 것으로 상세하게 달리 서술되지 않는 한, 설명의 전체에 걸쳐, "세그먼트화하는", "분석하는", "결정하는", "인에이블하는", "식별하는", "수정하는" 등과 같은 용어들을 활용하는 논의들은, 컴퓨터 시스템의 레지스터들 및 메모리들 내의 물리적(예컨대, 전자) 양들로서 표현되는 데이터를, 컴퓨터 시스템 메모리들 또는 레지스터들, 또는 다른 그러한 정보 저장, 송신 또는 디스플레이 디바이스들 내의 물리적 양들로서 유사하게 표현되는 다른 데이터로 조작 및 변환하는, 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 디바이스의 액션들 및 프로세스들을 지칭한다는 것이 인지된다.
[00325] 본 개시내용은 또한, 본원에서의 동작들을 수행하기 위한 장치에 관한 것이다. 이 장치는 요구되는 목적들을 위해 특수하게 구성될 수 있거나, 또는 이 장치는 컴퓨터에 저장된 컴퓨터 프로그램에 의해 선택적으로 활성화 또는 재구성되는 범용 컴퓨터를 포함할 수 있다. 그러한 컴퓨터 프로그램은, 플로피 디스크들, 광학 디스크들, CD-ROM들 및 자기-광학 디스크들을 포함하는 임의의 타입의 디스크, ROM(read-only memory)들, RAM(random access memory)들, EPROM들, EEPROM들, 자기 또는 광학 카드들, 또는 전자 명령들을 저장하는데 적절한 임의의 타입의 매체와 같은 (그러나 이에 제한되지 않음) 컴퓨터 판독가능 저장 매체에 저장될 수 있다.
[00326] 단어들 "예" 또는 "예시적인"은 본원에서 예, 보기, 또는 예시로서 역할을 하는 것을 의미하기 위해 사용된다. "예" 또는 "예시적인" 것으로서 본원에서 설명되는 임의의 양상 또는 설계가 반드시 다른 양상들 또는 설계들보다 바람직하거나 또는 유리한 것으로 해석되는 것은 아니다. 오히려, 단어들 "예" 또는 "예시적인"의 사용은 구체적인 방식으로 개념들을 제시하도록 의도된다. 본 출원에서 사용되는 바와 같이, 용어 "또는"은 배타적인 "또는"보다는 포괄적인 "또는"을 의미하도록 의도된다. 즉, 달리 특정되거나 또는 문맥으로부터 분명하지 않는 한, "X는 A 또는 B를 포함한다"는 자연적 포괄적인 치환들 중 임의의 치환을 의미하도록 의도된다. 즉, X가 A를 포함하거나; X가 B를 포함하거나; 또는 X가 A 및 B 둘 모두를 포함하는 경우에, "X는 A 또는 B를 포함한다"는 전술한 경우들 중 어느 경우 하에서도 만족된다. 게다가, 일반적으로, 본 출원 및 첨부된 청구항들에서 사용되는 바와 같은 단수형은, 단수형으로 지시되도록 달리 특정되거나 또는 문맥으로부터 분명하지 않는 한, "하나 또는 그 초과"를 의미하도록 해석되어야 한다. 더욱이, 전체에 걸쳐 용어 "실시예" 또는 "일 실시예", 또는 "구현" 또는 "일 구현"의 사용은, 동일한 것으로서 설명되지 않는 한, 동일한 실시예 또는 구현을 의미하도록 의도되지 않는다.
[00327] 본 명세서의 전체에 걸쳐 "일 실시예" 또는 "실시예"에 대한 참조는 본 실시예에 관련하여 설명되는 특정 특징, 구조, 또는 특성이 적어도 하나의 실시예에 포함되는 것을 의미한다. 따라서, 본 명세서의 전체에 걸친 다양한 위치들에서의 문구 "일 실시예에서" 또는 "실시예에서"의 출현들이 반드시 모두 동일한 실시예를 지칭하는 것은 아니다. 게다가, 용어 "또는"은 배타적인 "또는"보다는 포괄적인 "또는"을 의미하도록 의도된다.
[00328] 위의 설명이 예시적인 것으로 의도되고, 제한적인 것으로 의도되지 않는다는 것이 이해되어야 한다. 다수의 다른 구현들은 위의 설명을 읽고 이해할 시에 당업자에게 자명하게 될 것이다. 그에 따라, 본 개시내용의 범위는, 첨부된 청구항들에 부여되는 균등물들의 완전한 범위와 함께, 첨부된 청구항들을 참조하여 결정되어야 한다.

Claims (26)

  1. 컴퓨터 프로세서로서,
    벡터 유닛을 포함하며,
    상기 벡터 유닛은,
    가변수의 엘리먼트들을 홀딩(holding)하기 위하여 적어도 하나의 레지스터를 포함하는 벡터 레지스터 파일; 및
    벡터를 분리하거나 또는 2개의 벡터들을 결합하는 하나 또는 그 초과의 명령들을 사용하여 상기 벡터 레지스터 파일 내의 상기 가변수의 엘리먼트들에 대해 연산하도록 구성된 프로세싱 로직을 포함하는, 컴퓨터 프로세서.
  2. 제 1 항에 있어서,
    상기 컴퓨터 프로세서는 모놀리식 집적 회로로서 구현되는, 컴퓨터 프로세서.
  3. 제 1 항 또는 제 2 항에 있어서,
    적어도 하나의 레지스터를 포함하는 벡터 길이 레지스터 파일을 더 포함하며,
    상기 벡터 길이 레지스터 파일의 적어도 하나의 레지스터는 상기 프로세싱 로직이 연산하는 엘리먼트들의 수를 특정하기 위하여 사용되는, 컴퓨터 프로세서.
  4. 제 3 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 테일(tail) 별개 명령을 포함하고,
    상기 벡터 테일 별개 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독하고;
    엘리먼트들의 출력 벡터를 형성하기 위하여 상기 입력 벡터로부터의 오프셋에서 시작하는 인접수의 엘리먼트들을 선택하고; 그리고
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하고;
    상기 인접수의 엘리먼트들 및 상기 오프셋은 상기 벡터 길이 레지스터 파일의 하나 또는 그 초과의 레지스터들 내의 값들에 부분적으로 기반하여 결정되는, 컴퓨터 프로세서.
  5. 제 3 항 또는 제 4 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 연접(concatenate) 결합 명령을 포함하고,
    상기 벡터 연접 결합 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독하고;
    상기 제 1 입력 벡터의 엘리먼트들을 선택하고, 상기 제 2 입력 벡터로부터의 엘리먼트들을 선택함으로써 출력 벡터를 형성하고; 그리고
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하고,
    상기 제 1 벡터 내의 엘리먼트들의 수 및 상기 제 2 벡터 내의 엘리먼트들의 수는 상기 벡터 길이 레지스터 파일의 하나 또는 그 초과의 레지스터들 내의 값들에 부분적으로 기반하여 결정되는, 컴퓨터 프로세서.
  6. 제 1 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 이븐(even) 별개 명령을 포함하고,
    상기 벡터 이븐 별개 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독하고;
    상기 제 1 엘리먼트에서 시작하여, 상기 입력 벡터로부터 하나 걸러 하나씩 엘리먼트를 선택함으로써 출력 벡터를 형성하고; 그리고
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하는, 컴퓨터 프로세서.
  7. 제 1 항 또는 제 6 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 오드(odd) 별개 명령을 포함하고,
    상기 벡터 오드 별개 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독하고;
    상기 제 2 엘리먼트에서 시작하여, 상기 입력 벡터로부터 하나 걸러 하나씩 엘리먼트를 선택함으로써 출력 벡터를 형성하고; 그리고
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하는, 컴퓨터 프로세서.
  8. 제 1 항 또는 제 6 항 내지 제 7 항 중 어느 한 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 인터리브(interleave) 결합 명령을 포함하고,
    상기 벡터 인터리브 결합 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독하고;
    상기 제 1 입력 벡터 및 상기 제 2 입력 벡터로부터 엘리먼트들을 교대로 선택함으로써 출력 벡터를 형성하고; 그리고
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하는, 컴퓨터 프로세서.
  9. 제 1 항 또는 제 6 항 내지 제 8 항 중 어느 한 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 테일 별개 명령을 포함하고,
    상기 벡터 테일 별개 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독하고;
    엘리먼트들의 출력 벡터를 형성하기 위하여 상기 입력 벡터로부터의 오프셋에서 시작하는 인접수의 엘리먼트들을 선택하고; 그리고
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하는, 컴퓨터 프로세서.
  10. 제 1 항 또는 제 6 항 내지 제 9 항 중 어느 한 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 연접(concatenate) 결합 명령을 포함하고,
    상기 벡터 연접 결합 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독하고;
    상기 제 1 입력 벡터의 엘리먼트들을 먼저 선택하고, 상기 제 2 입력 벡터의 엘리먼트들을 선택함으로써 출력 벡터를 형성하고; 그리고
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하는, 컴퓨터 프로세서.
  11. 제 1 항 또는 제 6 항 내지 제 10 항 중 어느 한 항에 있어서,
    가변수의 비트들을 포함하는 하나 또는 그 초과의 벡터 마스크 레지스터들을 포함하는 벡터 마스크 레지스터 파일을 더 포함하는, 컴퓨터 프로세서.
  12. 제 11 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 펑처(puncture) 별개 명령을 포함하고,
    상기 벡터 펑처 별개 명령은,
    선택 기준들로서 0 또는 1을 선택하고;
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독하고, 상기 벡터 마스크 레지스터 파일의 레지스터로부터 비트들의 입력 벡터를 판독하고;
    상기 비트들의 입력 벡터에서의 대응하는 포지션에서의 비트가 상기 선택 기준들과 매칭하는 엘리먼트들만을 상기 입력 벡터로부터 선택하고;
    엘리먼트들의 출력 벡터를 형성하기 위하여, 선택된 엘리먼트들을 연접하고; 그리고
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하는, 컴퓨터 프로세서.
  13. 제 11 항 또는 제 12 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 믹스(mix) 결합 명령을 포함하고,
    상기 벡터 믹스 결합 명령은,
    선택 기준들로서 0 또는 1을 선택하고;
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독하고, 상기 벡터 마스크 레지스터 파일의 레지스터로부터 비트들의 입력 벡터를 판독하고;
    상기 비트들의 입력 벡터의 상기 비트들에 대해 반복하고, 상기 선택된 엘리먼트들로부터 출력 벡터를 형성하기 위하여, 상기 비트가 상기 선택 기준들을 충족하면 상기 제 1 입력 벡터의 다음 미선택된 엘리먼트를 선택하고, 상기 비트가 상기 선택 기준들을 충족하지 않으면 상기 제 2 입력 벡터의 다음 미선택된 엘리먼트를 선택하고; 그리고
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하는, 컴퓨터 프로세서.
  14. 방법으로서,
    컴퓨터 프로세서의 하나 또는 그 초과의 레지스터들을 포함하는 벡터 레지스터 파일이, 가변수의 엘리먼트들을 홀딩하는 단계; 및
    상기 컴퓨터 프로세서의 프로세싱 로직이, 벡터를 분리하거나 또는 2개의 벡터들을 결합하는 하나 또는 그 초과의 명령들을 사용하여 상기 벡터 레지스터 파일 내의 상기 가변수의 엘리먼트들에 대해 연산하는 단계를 포함하는, 방법.
  15. 제 14 항에 있어서,
    상기 컴퓨터 프로세서는 모놀리식 집적 회로로서 구현되는, 방법.
  16. 제 14 항 또는 제 15 항에 있어서,
    적어도 하나의 레지스터를 포함하는 벡터 길이 레지스터 파일을 더 포함하며,
    상기 벡터 길이 레지스터 파일의 적어도 하나의 레지스터는 상기 프로세싱 로직이 연산하는 엘리먼트들의 수를 특정하기 위하여 사용되는, 방법.
  17. 제 16 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 테일 별개 명령을 포함하고,
    상기 벡터 테일 별개 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독하기 위한 동작;
    엘리먼트들의 출력 벡터를 형성하기 위하여 상기 입력 벡터로부터의 오프셋에서 시작하는 인접수의 엘리먼트들을 선택하기 위한 동작; 및
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하기 위한 동작을 포함하고,
    상기 인접수의 엘리먼트들 및 상기 오프셋은 상기 벡터 길이 레지스터 파일의 하나 또는 그 초과의 레지스터들 내의 값들에 부분적으로 기반하여 결정되는, 방법.
  18. 제 16 항 또는 제 17 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 연접 결합 명령을 포함하고,
    상기 벡터 연접 결합 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독하기 위한 동작;
    상기 제 1 입력 벡터의 엘리먼트들을 선택하고, 상기 제 2 입력 벡터로부터의 엘리먼트들을 선택함으로써 출력 벡터를 형성하기 위한 동작; 및
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하기 위한 동작을 포함하고,
    상기 제 1 벡터 내의 엘리먼트들의 수 및 상기 제 2 벡터 내의 엘리먼트들의 수는 상기 벡터 길이 레지스터 파일의 하나 또는 그 초과의 레지스터들 내의 값들에 부분적으로 기반하여 결정되는, 방법.
  19. 제 14 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 이븐 별개 명령을 포함하고,
    상기 벡터 이븐 별개 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독하기 위한 동작;
    상기 제 1 엘리먼트에서 시작하여, 상기 입력 벡터로부터 하나 걸러 하나씩 엘리먼트를 선택함으로써 출력 벡터를 형성하기 위한 동작; 및
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하기 위한 동작을 포함하는, 방법.
  20. 제 14 항 또는 제 19 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 오드 별개 명령을 포함하고,
    상기 벡터 오드 별개 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독하기 위한 동작;
    상기 제 2 엘리먼트에서 시작하여, 상기 입력 벡터로부터 하나 걸러 하나씩 엘리먼트를 선택함으로써 출력 벡터를 형성하기 위한 동작; 및
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하기 위한 동작을 포함하는, 방법.
  21. 제 14 항 또는 제 19 항 내지 제 20 항 중 어느 한 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 인터리브 결합 명령을 포함하고,
    상기 벡터 인터리브 결합 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 상기 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독하기 위한 동작;
    상기 제 1 입력 벡터 및 상기 제 2 입력 벡터로부터 엘리먼트들을 교대로 선택함으로써 출력 벡터를 형성하기 위한 동작; 및
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하기 위한 동작을 포함하는, 방법.
  22. 제 14 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 테일 별개 명령을 포함하고,
    상기 벡터 테일 별개 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독하기 위한 동작;
    엘리먼트들의 출력 벡터를 형성하기 위하여 상기 입력 벡터로부터의 오프셋에서 시작하는 인접수의 엘리먼트들을 선택하기 위한 동작; 및
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하기 위한 동작을 포함하는, 방법.
  23. 제 14 항 또는 제 22 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 연접 결합 명령을 포함하고,
    상기 벡터 연접 결합 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독하기 위한 동작;
    상기 제 1 입력 벡터의 엘리먼트들을 먼저 선택하고, 상기 제 2 입력 벡터의 엘리먼트들을 선택함으로써 출력 벡터를 형성하기 위한 동작; 및
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하기 위한 동작을 포함하는, 방법.
  24. 제 14 항 또는 제 22 항 내지 제 23 항 중 어느 한 항에 있어서,
    가변수의 비트들을 포함하는 하나 또는 그 초과의 벡터 마스크 레지스터들을 포함하는 벡터 마스크 레지스터 파일을 더 포함하는, 방법.
  25. 제 24 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 펑처 별개 명령을 포함하고,
    상기 벡터 펑처 별개 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 입력 벡터를 판독하고, 상기 벡터 마스크 레지스터 파일의 레지스터로부터 비트들의 입력 벡터를 판독하는 선택 기준들로서 0 또는 1을 선택하기 위한 동작;
    상기 비트들의 입력 벡터에서의 대응하는 포지션에서의 비트가 상기 선택 기준들과 매칭하는 엘리먼트들만을 상기 입력 벡터로부터 선택하기 위한 동작;
    엘리먼트들의 출력 벡터를 형성하기 위하여, 선택된 엘리먼트들을 연접하기 위한 동작; 및
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하기 위한 동작을 포함하는, 방법.
  26. 제 24 항 또는 제 25 항에 있어서,
    상기 하나 또는 그 초과의 명령들은 벡터 믹스 결합 명령을 포함하고,
    상기 벡터 믹스 결합 명령은,
    상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 1 입력 벡터를 판독하고, 상기 벡터 레지스터 파일의 레지스터로부터 엘리먼트들의 제 2 입력 벡터를 판독하고, 상기 벡터 마스크 레지스터 파일의 레지스터로부터 비트들의 입력 벡터를 판독하는 선택 기준들로서 0 또는 1을 선택하기 위한 동작;
    상기 비트들의 입력 벡터의 상기 비트들에 대해 반복하고, 선택된 엘리먼트들로부터 출력 벡터를 형성하기 위하여, 상기 비트가 상기 선택 기준들을 충족하면 상기 제 1 입력 벡터의 다음 미선택된 엘리먼트를 선택하고, 상기 비트가 상기 선택 기준들을 충족하지 않으면 상기 제 2 입력 벡터의 다음 미선택된 엘리먼트를 선택하기 위한 동작; 및
    상기 벡터 레지스터 파일의 레지스터에 상기 출력 벡터를 기록하기 위한 동작을 포함하는, 방법.
KR1020177024756A 2015-02-02 2016-01-25 벡터들을 결합 및 분할하기 위한 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서 KR102255318B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562110840P 2015-02-02 2015-02-02
US62/110,840 2015-02-02
US14/727,076 US9910824B2 (en) 2015-02-02 2015-06-01 Vector processor configured to operate on variable length vectors using instructions to combine and split vectors
US14/727,076 2015-06-01
PCT/US2016/014733 WO2016126448A1 (en) 2015-02-02 2016-01-25 Vector processor configured to operate on variable length vectors using instructions to combine and split vectors

Publications (2)

Publication Number Publication Date
KR20170110686A true KR20170110686A (ko) 2017-10-11
KR102255318B1 KR102255318B1 (ko) 2021-05-24

Family

ID=56553121

Family Applications (10)

Application Number Title Priority Date Filing Date
KR1020177024754A KR102258024B1 (ko) 2015-02-02 2016-01-21 엘리먼트 폭들을 변경시키는 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
KR1020177024756A KR102255318B1 (ko) 2015-02-02 2016-01-25 벡터들을 결합 및 분할하기 위한 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
KR1020177024762A KR20170117452A (ko) 2015-02-02 2016-01-27 레지스터 이름변경을 이용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
KR1020177024751A KR102255298B1 (ko) 2015-02-02 2016-01-27 암묵적으로 분류된 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
KR1020177024757A KR20170110687A (ko) 2015-02-02 2016-01-27 가변 길이 벡터들에 대해 연산하도록 구성된 모놀로식 벡터 프로세서
KR1020177024755A KR102255313B1 (ko) 2015-02-02 2016-01-28 비대칭 멀티-스레딩을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
KR1020177024759A KR102270020B1 (ko) 2015-02-02 2016-01-28 디지털 신호 프로세싱 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
KR1020177024758A KR102255324B1 (ko) 2015-02-02 2016-01-28 비순차적 실행을 통해 가변 길이 벡터들에 대해 동작하도록 구성된 벡터 프로세서
KR1020177024761A KR102276335B1 (ko) 2015-02-02 2016-01-29 그래픽 프로세싱 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
KR1020177024760A KR102311010B1 (ko) 2015-02-02 2016-01-29 하나 또는 그 초과의 복소수 산술 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020177024754A KR102258024B1 (ko) 2015-02-02 2016-01-21 엘리먼트 폭들을 변경시키는 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서

Family Applications After (8)

Application Number Title Priority Date Filing Date
KR1020177024762A KR20170117452A (ko) 2015-02-02 2016-01-27 레지스터 이름변경을 이용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
KR1020177024751A KR102255298B1 (ko) 2015-02-02 2016-01-27 암묵적으로 분류된 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
KR1020177024757A KR20170110687A (ko) 2015-02-02 2016-01-27 가변 길이 벡터들에 대해 연산하도록 구성된 모놀로식 벡터 프로세서
KR1020177024755A KR102255313B1 (ko) 2015-02-02 2016-01-28 비대칭 멀티-스레딩을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
KR1020177024759A KR102270020B1 (ko) 2015-02-02 2016-01-28 디지털 신호 프로세싱 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
KR1020177024758A KR102255324B1 (ko) 2015-02-02 2016-01-28 비순차적 실행을 통해 가변 길이 벡터들에 대해 동작하도록 구성된 벡터 프로세서
KR1020177024761A KR102276335B1 (ko) 2015-02-02 2016-01-29 그래픽 프로세싱 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
KR1020177024760A KR102311010B1 (ko) 2015-02-02 2016-01-29 하나 또는 그 초과의 복소수 산술 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서

Country Status (5)

Country Link
US (10) US11544214B2 (ko)
EP (10) EP3254185A4 (ko)
KR (10) KR102258024B1 (ko)
CN (10) CN107430507B (ko)
WO (10) WO2016126433A1 (ko)

Families Citing this family (68)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11461096B2 (en) 2019-05-24 2022-10-04 Texas Instruments Incorporated Method and apparatus for vector sorting using vector permutation logic
GB2540944B (en) * 2015-07-31 2018-02-21 Advanced Risc Mach Ltd Vector operand bitsize control
US10423411B2 (en) * 2015-09-26 2019-09-24 Intel Corporation Data element comparison processors, methods, systems, and instructions
CN107315717B (zh) * 2016-04-26 2020-11-03 中科寒武纪科技股份有限公司 一种用于执行向量四则运算的装置和方法
CN107315563B (zh) * 2016-04-26 2020-08-07 中科寒武纪科技股份有限公司 一种用于执行向量比较运算的装置和方法
US10891131B2 (en) * 2016-09-22 2021-01-12 Intel Corporation Processors, methods, systems, and instructions to consolidate data elements and generate index updates
EP3336692B1 (en) * 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
EP3336691B1 (en) * 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
US11144820B2 (en) 2017-02-28 2021-10-12 Microsoft Technology Licensing, Llc Hardware node with position-dependent memories for neural network processing
US10489877B2 (en) * 2017-04-24 2019-11-26 Intel Corporation Compute optimization mechanism
US10698685B2 (en) * 2017-05-03 2020-06-30 Intel Corporation Instructions for dual destination type conversion, mixed precision accumulation, and mixed precision atomic memory operations
US10430197B2 (en) 2017-05-12 2019-10-01 Samsung Electronics Co., Ltd. Banking register renaming to reduce power
US11579881B2 (en) * 2017-06-29 2023-02-14 Intel Corporation Instructions for vector operations with constant values
US10572255B2 (en) * 2017-06-29 2020-02-25 Texas Instruments Incorporated Stream engine with element promotion and decimation modes
CN109284822B (zh) * 2017-07-20 2021-09-21 上海寒武纪信息科技有限公司 一种神经网络运算装置及方法
US20190073337A1 (en) * 2017-09-05 2019-03-07 Mediatek Singapore Pte. Ltd. Apparatuses capable of providing composite instructions in the instruction set architecture of a processor
US10514924B2 (en) 2017-09-29 2019-12-24 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US11243765B2 (en) * 2017-09-29 2022-02-08 Intel Corporation Apparatus and method for scaling pre-scaled results of complex multiply-accumulate operations on packed real and imaginary data elements
US10802826B2 (en) 2017-09-29 2020-10-13 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US10664277B2 (en) 2017-09-29 2020-05-26 Intel Corporation Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US10552154B2 (en) 2017-09-29 2020-02-04 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US10534838B2 (en) 2017-09-29 2020-01-14 Intel Corporation Bit matrix multiplication
US10795677B2 (en) 2017-09-29 2020-10-06 Intel Corporation Systems, apparatuses, and methods for multiplication, negation, and accumulation of vector packed signed values
US11074073B2 (en) 2017-09-29 2021-07-27 Intel Corporation Apparatus and method for multiply, add/subtract, and accumulate of packed data elements
US10795676B2 (en) 2017-09-29 2020-10-06 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US10635602B2 (en) 2017-11-14 2020-04-28 International Business Machines Corporation Address translation prior to receiving a storage reference using the address to be translated
US10592164B2 (en) 2017-11-14 2020-03-17 International Business Machines Corporation Portions of configuration state registers in-memory
US10664181B2 (en) 2017-11-14 2020-05-26 International Business Machines Corporation Protecting in-memory configuration state registers
US10552070B2 (en) 2017-11-14 2020-02-04 International Business Machines Corporation Separation of memory-based configuration state registers based on groups
US10761751B2 (en) 2017-11-14 2020-09-01 International Business Machines Corporation Configuration state registers grouped based on functional affinity
US10698686B2 (en) 2017-11-14 2020-06-30 International Business Machines Corporation Configurable architectural placement control
US10761983B2 (en) 2017-11-14 2020-09-01 International Business Machines Corporation Memory based configuration state registers
US10496437B2 (en) 2017-11-14 2019-12-03 International Business Machines Corporation Context switch by changing memory pointers
US10642757B2 (en) 2017-11-14 2020-05-05 International Business Machines Corporation Single call to perform pin and unpin operations
US10901738B2 (en) 2017-11-14 2021-01-26 International Business Machines Corporation Bulk store and load operations of configuration state registers
US10558366B2 (en) 2017-11-14 2020-02-11 International Business Machines Corporation Automatic pinning of units of memory
US10684854B2 (en) * 2017-11-28 2020-06-16 Intel Corporation Apparatus and method for converting a floating-point value from half precision to single precision
US10489154B2 (en) * 2017-11-28 2019-11-26 Intel Corporation Apparatus and method for complex multiply and accumulate
US10452394B2 (en) 2017-11-28 2019-10-22 Intel Corporation Apparatus and method for complex multiplication
US10528346B2 (en) 2018-03-29 2020-01-07 Intel Corporation Instructions for fused multiply-add operations with variable precision input operands
US20210311735A1 (en) * 2018-08-14 2021-10-07 Optimum Semiconductor Technologies Inc. Vector instruction with precise interrupts and/or overwrites
EP3853717A4 (en) * 2018-09-18 2022-06-15 Optimum Semiconductor Technologies, Inc. SYSTEM AND METHOD FOR IMPLEMENTING HIDDEN VECTOR INSTRUCTIONS
US11175915B2 (en) * 2018-10-10 2021-11-16 Micron Technology, Inc. Vector registers implemented in memory
US10963246B2 (en) * 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
CN109992411B (zh) * 2019-02-18 2021-05-18 华夏芯(北京)通用处理器技术有限公司 一种实现可快速释放的vlv访存阵列的方法
US10803259B2 (en) * 2019-02-26 2020-10-13 Lightmatter, Inc. Hybrid analog-digital matrix processors
US11294670B2 (en) * 2019-03-27 2022-04-05 Intel Corporation Method and apparatus for performing reduction operations on a plurality of associated data element values
US20200364047A1 (en) * 2019-05-16 2020-11-19 Facebook, Inc. High throughput neural network operations using inter-layer memory layout transformation
FR3097345B1 (fr) * 2019-06-13 2021-06-25 Stmicroelectronics Grand Ouest Sas Procede de gestion du fonctionnement d’une unite de calcul capable de fonctionner avec des instructions de tailles differentes et circuit integre correspondant
US11481471B2 (en) * 2019-08-16 2022-10-25 Meta Platforms, Inc. Mapping convolution to a matrix processor unit
US11782713B1 (en) * 2019-08-27 2023-10-10 Amazon Technologies, Inc. Security vulnerability mitigation using address space co-execution
WO2021061329A1 (en) * 2019-09-24 2021-04-01 Alibaba Group Holding Limited Apparatus and system for execution of neural network
US11157238B2 (en) 2019-11-15 2021-10-26 Intel Corporation Use of a single instruction set architecture (ISA) instruction for vector normalization
CN111158755A (zh) * 2019-11-29 2020-05-15 华东师范大学 用于消除simd向量化程序中缓存缺失的多向量交错执行方法
US11119772B2 (en) * 2019-12-06 2021-09-14 International Business Machines Corporation Check pointing of accumulator register results in a microprocessor
CN115552477A (zh) * 2020-05-01 2022-12-30 奇跃公司 采用施加的分层归一化的图像描述符网络
US11243778B1 (en) * 2020-12-31 2022-02-08 Microsoft Technology Licensing, Llc Instruction dispatch for superscalar processors
CN113590197B (zh) * 2021-07-30 2023-09-26 中国人民解放军国防科技大学 一种支持可变长向量处理的可配置处理器及其实现方法
US20230060146A1 (en) * 2021-08-31 2023-03-02 Intel Corporation Bfloat16 classification and manipulation instructions
US11900111B2 (en) * 2021-09-24 2024-02-13 Qualcomm Incorporated Permutation instruction
KR20230061180A (ko) * 2021-10-28 2023-05-08 주식회사 사피온코리아 컴퓨팅 시스템 및 이를 위한 전치 방법
CN113918883B (zh) * 2021-11-03 2022-05-27 海光信息技术股份有限公司 数据处理方法、装置以及设备和计算机可读存储介质
EP4318225A1 (en) * 2022-08-03 2024-02-07 Intel Corporation 8-bit floating point classification and manipulation instructions
CN116257350B (zh) * 2022-09-06 2023-12-08 进迭时空(杭州)科技有限公司 一种针对risc-v矢量寄存器的重命名分组装置
US11977496B1 (en) 2022-09-29 2024-05-07 Amazon Technologies, Inc. Security vulnerability mitigation using hardware-supported context-dependent address space hiding
CN116820910A (zh) * 2023-08-28 2023-09-29 英特尔(中国)研究中心有限公司 处理装置、用于处理装置的验证装置和验证方法
CN117093268B (zh) * 2023-10-19 2024-01-30 超睿科技(长沙)有限公司 一种向量处理方法、系统、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070143574A1 (en) * 2005-12-19 2007-06-21 Bonebakker Jan L Method and apparatus for supporting vector operations on a multi-threaded microprocessor
US20120131308A1 (en) * 2010-11-18 2012-05-24 Yaakov Dekter System, device, and method for on-the-fly permutations of vector memories for executing intra-vector operations
US20120254588A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US20130275734A1 (en) * 2011-12-22 2013-10-17 Bret L. Toll Packed data operation mask concatenation processors, methods, systems and instructions

Family Cites Families (127)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5852265B2 (ja) 1977-01-12 1983-11-21 株式会社日立製作所 デ−タ処理装置
JPS6055864B2 (ja) 1980-07-21 1985-12-06 株式会社日立製作所 ベクトルプロセツサ
US4541046A (en) 1981-03-25 1985-09-10 Hitachi, Ltd. Data processing system including scalar data processor and vector data processor
JPS6123275A (ja) 1984-07-11 1986-01-31 Nec Corp ベクトル処理装置
US4745547A (en) 1985-06-17 1988-05-17 International Business Machines Corp. Vector processing
US4794516A (en) 1985-10-31 1988-12-27 International Business Machines Corporation Method and apparatus for communicating data between a host and a plurality of parallel processors
US5113521A (en) 1988-03-18 1992-05-12 Digital Equipment Corporation Method and apparatus for handling faults of vector instructions causing memory management exceptions
US5170370A (en) 1989-11-17 1992-12-08 Cray Research, Inc. Vector bit-matrix multiply functional unit
US5418973A (en) 1992-06-22 1995-05-23 Digital Equipment Corporation Digital computer system with cache controller coordinating both vector and scalar operations
US5513366A (en) 1994-09-28 1996-04-30 International Business Machines Corporation Method and system for dynamically reconfiguring a register file in a vector processor
US5685005A (en) 1994-10-04 1997-11-04 Analog Devices, Inc. Digital signal processor configured for multiprocessing
US5680338A (en) 1995-01-04 1997-10-21 International Business Machines Corporation Method and system for vector processing utilizing selected vector elements
US5537606A (en) 1995-01-31 1996-07-16 International Business Machines Corporation Scalar pipeline replication for parallel vector element processing
US6385634B1 (en) 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US5936872A (en) 1995-09-05 1999-08-10 Intel Corporation Method and apparatus for storing complex numbers to allow for efficient complex multiplication operations and performing such complex multiplication operations
US6237016B1 (en) 1995-09-05 2001-05-22 Intel Corporation Method and apparatus for multiplying and accumulating data samples and complex coefficients
US6058465A (en) 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
KR100188013B1 (ko) * 1996-09-17 1999-06-01 윤종용 벡터 레지스터와 스칼라 레지스터 내부의 엘리먼트 자리이동을 이용한 유한충격응답(fir) 필터 구현방법
US5832288A (en) * 1996-10-18 1998-11-03 Samsung Electronics Co., Ltd. Element-select mechanism for a vector processor
US5991531A (en) * 1997-02-24 1999-11-23 Samsung Electronics Co., Ltd. Scalable width vector processor architecture for efficient emulation
US6879341B1 (en) 1997-07-15 2005-04-12 Silverbrook Research Pty Ltd Digital camera system containing a VLIW vector processor
US6076156A (en) 1997-07-17 2000-06-13 Advanced Micro Devices, Inc. Instruction redefinition using model specific registers
US7197625B1 (en) * 1997-10-09 2007-03-27 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6230257B1 (en) 1998-03-31 2001-05-08 Intel Corporation Method and apparatus for staggering execution of a single packed data instruction using the same circuit
US6263426B1 (en) * 1998-04-30 2001-07-17 Intel Corporation Conversion from packed floating point data to packed 8-bit integer data in different architectural registers
US6304963B1 (en) * 1998-05-14 2001-10-16 Arm Limited Handling exceptions occuring during processing of vector instructions
US6292193B1 (en) 1998-07-30 2001-09-18 Compaq Computer Corporation Techniques for anisotropic texture mapping using multiple space-invariant filtering operations per pixel
US6405304B1 (en) * 1998-08-24 2002-06-11 Compaq Information Technologies Group, L.P. Method for mapping instructions using a set of valid and invalid logical to physical register assignments indicated by bits of a valid vector together with a logical register list
US6480818B1 (en) * 1998-11-13 2002-11-12 Cray Inc. Debugging techniques in a multithreaded environment
US6594754B1 (en) * 1999-07-07 2003-07-15 Intel Corporation Mapping destination logical register to physical register storing immediate or renamed source register of move instruction and using mapping counters
JP3940542B2 (ja) 2000-03-13 2007-07-04 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
US7062523B1 (en) 2000-08-01 2006-06-13 Analog Devices, Inc. Method for efficiently computing a fast fourier transform
DE60144022D1 (de) * 2000-11-06 2011-03-24 Broadcom Corp Umkonfigurierbares verarbeitungssystem und -verfahren
US6901422B1 (en) 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US6898691B2 (en) 2001-06-06 2005-05-24 Intrinsity, Inc. Rearranging data between vector and matrix forms in a SIMD matrix processor
US7430578B2 (en) * 2001-10-29 2008-09-30 Intel Corporation Method and apparatus for performing multiply-add operations on packed byte data
GB2383145B (en) 2001-10-31 2005-09-07 Alphamosaic Ltd Data access in a processor
US7467287B1 (en) * 2001-12-31 2008-12-16 Apple Inc. Method and apparatus for vector table look-up
US20040073773A1 (en) 2002-02-06 2004-04-15 Victor Demjanenko Vector processor architecture and methods performed therein
KR100434502B1 (ko) 2002-05-07 2004-06-05 삼성전자주식회사 DSP(Digital SignalProcessor)의 데이터 추출/삽입 방법 및 데이터추출/삽입 장치
US7376812B1 (en) 2002-05-13 2008-05-20 Tensilica, Inc. Vector co-processor for configurable and extensible processor architecture
US7580965B2 (en) 2002-09-27 2009-08-25 Texas Instruments Incorporated Discrete-time convolution cycle reduction with programmable digital signal processor
US6904511B2 (en) 2002-10-11 2005-06-07 Sandbridge Technologies, Inc. Method and apparatus for register file port reduction in a multithreaded processor
US6781529B1 (en) 2002-10-24 2004-08-24 Apple Computer, Inc. Methods and apparatuses for variable length encoding
US20040193838A1 (en) * 2003-03-31 2004-09-30 Patrick Devaney Vector instructions composed from scalar instructions
US7334110B1 (en) 2003-08-18 2008-02-19 Cray Inc. Decoupled scalar/vector computer architecture system and method
US7107436B2 (en) * 2003-09-08 2006-09-12 Freescale Semiconductor, Inc. Conditional next portion transferring of data stream to or from register based on subsequent instruction aspect
US9465611B2 (en) 2003-10-02 2016-10-11 Broadcom Corporation Processor execution unit with configurable SIMD functional blocks for complex number operations
US7793072B2 (en) 2003-10-31 2010-09-07 International Business Machines Corporation Vector execution unit to process a vector instruction by executing a first operation on a first set of operands and a second operation on a second set of operands
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US20070106718A1 (en) 2005-11-04 2007-05-10 Shum Hoi L Fast fourier transform on a single-instruction-stream, multiple-data-stream processor
US7840954B2 (en) 2005-11-29 2010-11-23 International Business Machines Corporation Compilation for a SIMD RISC processor
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
US20070239815A1 (en) 2006-04-04 2007-10-11 Qualcomm Incorporated Pipeline fft architecture and method
US20080071851A1 (en) 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
ATE463788T1 (de) 2007-06-26 2010-04-15 Ericsson Telefon Ab L M Datenverarbeitungseinheit für anweisungen in geschachtelten schleifen
US8245016B2 (en) * 2007-09-28 2012-08-14 International Business Machines Corporation Multi-threaded processing
US20090100249A1 (en) * 2007-10-10 2009-04-16 Eichenberger Alexandre E Method and apparatus for allocating architectural register resources among threads in a multi-threaded microprocessor core
US7847349B2 (en) 2007-10-31 2010-12-07 Agere Systems Inc. Single-cycle FFT butterfly calculator
US20090172348A1 (en) * 2007-12-26 2009-07-02 Robert Cavin Methods, apparatus, and instructions for processing vector data
WO2009107631A1 (ja) * 2008-02-25 2009-09-03 味の素株式会社 5’-グアニル酸の製造法
CN101299233B (zh) * 2008-04-08 2010-11-10 西安交通大学 基于fpga实现的运动目标识别与跟踪方法
US7966519B1 (en) 2008-04-30 2011-06-21 Hewlett-Packard Development Company, L.P. Reconfiguration in a multi-core processor system with configurable isolation
US8131979B2 (en) 2008-08-15 2012-03-06 Apple Inc. Check-hazard instructions for processing vectors
US9342486B2 (en) 2008-10-03 2016-05-17 Microsoft Technology Licensing, Llc Fast computation of general fourier transforms on graphics processing units
US20100115234A1 (en) * 2008-10-31 2010-05-06 Cray Inc. Configurable vector length computer processor
US20100115232A1 (en) 2008-10-31 2010-05-06 Johnson Timothy J Large integer support in vector operations
US20100115233A1 (en) 2008-10-31 2010-05-06 Convey Computer Dynamically-selectable vector register partitioning
US8200949B1 (en) * 2008-12-09 2012-06-12 Nvidia Corporation Policy based allocation of register file cache to threads in multi-threaded processor
GB2466976B (en) 2009-01-16 2011-04-27 Springsource Ltd Controlling access to a shared resourse in a computer system
WO2010095182A1 (ja) * 2009-02-17 2010-08-26 パナソニック株式会社 マルチスレッドプロセッサ及びデジタルテレビシステム
US8650240B2 (en) 2009-08-17 2014-02-11 International Business Machines Corporation Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US8555034B2 (en) * 2009-12-15 2013-10-08 Oracle America, Inc. Execution of variable width vector processing instructions
CN101776988B (zh) 2010-02-01 2012-11-07 中国人民解放军国防科学技术大学 一种块大小可变的可重构矩阵寄存器文件
US8601044B2 (en) 2010-03-02 2013-12-03 Altera Corporation Discrete Fourier Transform in an integrated circuit device
US20110320765A1 (en) * 2010-06-28 2011-12-29 International Business Machines Corporation Variable width vector instruction processor
US9928105B2 (en) * 2010-06-28 2018-03-27 Microsoft Technology Licensing, Llc Stack overflow prevention in parallel execution runtime
US9092213B2 (en) 2010-09-24 2015-07-28 Intel Corporation Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation
CN102012803B (zh) * 2010-11-25 2014-09-10 中国人民解放军国防科学技术大学 支持多宽度simd和多粒度simt的可配置矩阵寄存器单元
US8959501B2 (en) 2010-12-14 2015-02-17 Microsoft Corporation Type and length abstraction for data types
KR20120072226A (ko) 2010-12-23 2012-07-03 한국전자통신연구원 고속 퓨리에 변환기
US20120216011A1 (en) * 2011-02-18 2012-08-23 Darryl Gove Apparatus and method of single-instruction, multiple-data vector operation masking
CN108376097B (zh) * 2011-03-25 2022-04-15 英特尔公司 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段
PL3422178T3 (pl) 2011-04-01 2023-06-26 Intel Corporation Przyjazny dla wektorów format instrukcji i jego wykonanie
CN102156637A (zh) * 2011-05-04 2011-08-17 中国人民解放军国防科学技术大学 向量交叉多线程处理方法及向量交叉多线程微处理器
JP2012252374A (ja) 2011-05-31 2012-12-20 Renesas Electronics Corp 情報処理装置
US9158597B2 (en) 2011-07-08 2015-10-13 Microsoft Technology Licensing, Llc Controlling access to shared resource by issuing tickets to plurality of execution units
US20130080672A1 (en) * 2011-09-27 2013-03-28 Kaminario Technologies Ltd. System, method and computer program product for access control
SE535856C2 (sv) * 2011-10-18 2013-01-15 Mediatek Sweden Ab Digital signalprocessor och basbandskommunikationsanordning
CN102375805B (zh) 2011-10-31 2014-04-02 中国人民解放军国防科学技术大学 面向向量处理器的基于simd的fft并行计算方法
WO2013086380A1 (en) * 2011-12-08 2013-06-13 Oracle International Corporation Techniques for more efficient usage of memory - to - cpu bandwidth
US20140189296A1 (en) 2011-12-14 2014-07-03 Elmoustapha Ould-Ahmed-Vall System, apparatus and method for loop remainder mask instruction
US20130159665A1 (en) 2011-12-15 2013-06-20 Verisilicon Holdings Co., Ltd. Specialized vector instruction and datapath for matrix multiplication
CN104011616B (zh) 2011-12-23 2017-08-29 英特尔公司 改进置换指令的装置和方法
US9798541B2 (en) 2011-12-23 2017-10-24 Intel Corporation Apparatus and method for propagating conditionally evaluated values in SIMD/vector execution using an input mask register
US9092228B2 (en) 2012-01-17 2015-07-28 Texas Instruments Incorporated Systems and methods for software instruction translation from a high-level language to a specialized instruction set
CN102665049B (zh) * 2012-03-29 2014-09-17 中国科学院半导体研究所 基于可编程视觉芯片的视觉图像处理系统
US9098265B2 (en) * 2012-07-11 2015-08-04 Arm Limited Controlling an order for processing data elements during vector processing
US9594724B2 (en) 2012-08-09 2017-03-14 International Business Machines Corporation Vector register file
GB2499277B (en) * 2012-08-30 2014-04-02 Imagination Tech Ltd Global register protection in a multi-threaded processor
CN103067706B (zh) * 2012-12-20 2016-01-20 西安电子科技大学 基于fpga的ip核
US9720843B2 (en) 2012-12-28 2017-08-01 Intel Corporation Access type protection of memory reserved for use by processor logic
US9501276B2 (en) * 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9778932B2 (en) 2013-01-23 2017-10-03 International Business Machines Corporation Vector generate mask instruction
US20140244977A1 (en) * 2013-02-22 2014-08-28 Mips Technologies, Inc. Deferred Saving of Registers in a Shared Register Pool for a Multithreaded Microprocessor
US9495154B2 (en) * 2013-03-13 2016-11-15 Qualcomm Incorporated Vector processing engines having programmable data path configurations for providing multi-mode vector processing, and related vector processors, systems, and methods
US9354884B2 (en) 2013-03-13 2016-05-31 International Business Machines Corporation Processor with hybrid pipeline capable of operating in out-of-order and in-order modes
US9275014B2 (en) 2013-03-13 2016-03-01 Qualcomm Incorporated Vector processing engines having programmable data path configurations for providing multi-mode radix-2x butterfly vector processing circuits, and related vector processors, systems, and methods
US9304940B2 (en) 2013-03-15 2016-04-05 Intel Corporation Processors, methods, and systems to relax synchronization of accesses to shared memory
US10241793B2 (en) 2013-03-15 2019-03-26 Analog Devices Global Paralleizing loops in the presence of possible memory aliases
US9639503B2 (en) 2013-03-15 2017-05-02 Qualcomm Incorporated Vector indirect element vertical addressing mode with horizontal permute
US9348589B2 (en) 2013-03-19 2016-05-24 Apple Inc. Enhanced predicate registers having predicates corresponding to element widths
US9354891B2 (en) 2013-05-29 2016-05-31 Apple Inc. Increasing macroscalar instruction level parallelism
US9619230B2 (en) 2013-06-28 2017-04-11 International Business Machines Corporation Predictive fetching and decoding for selected instructions
US20150007196A1 (en) 2013-06-28 2015-01-01 Intel Corporation Processors having heterogeneous cores with different instructions and/or architecural features that are presented to software as homogeneous virtual cores
KR102332478B1 (ko) * 2013-10-27 2021-11-30 어드밴스드 마이크로 디바이시즈, 인코포레이티드 부동 소수점 레지스터 앨리어싱을 위한 프로세서 및 방법들
GB2520731B (en) * 2013-11-29 2017-02-08 Imagination Tech Ltd Soft-partitioning of a register file cache
US9329867B2 (en) * 2014-01-08 2016-05-03 Qualcomm Incorporated Register allocation for vectors
CN103699516B (zh) 2014-01-13 2017-02-15 中国人民解放军国防科学技术大学 向量处理器中基于simd的并行fft/ifft蝶形运算方法及装置
GB2523823B (en) 2014-03-07 2021-06-16 Advanced Risc Mach Ltd Data processing apparatus and method for processing vector operands
US9804846B2 (en) * 2014-03-27 2017-10-31 International Business Machines Corporation Thread context preservation in a multithreading computer system
US11200058B2 (en) * 2014-05-07 2021-12-14 Qualcomm Incorporated Dynamic load balancing of hardware threads in clustered processor cores using shared hardware resources, and related circuits, methods, and computer-readable media
US20160026607A1 (en) * 2014-07-25 2016-01-28 Qualcomm Incorporated Parallelization of scalar operations by vector processors using data-indexed accumulators in vector register files, and related circuits, methods, and computer-readable media
US9665466B2 (en) * 2014-09-02 2017-05-30 Nxp Usa, Inc. Debug architecture for multithreaded processors
US9720696B2 (en) * 2014-09-30 2017-08-01 International Business Machines Corporation Independent mapping of threads
US9916130B2 (en) * 2014-11-03 2018-03-13 Arm Limited Apparatus and method for vector processing

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070143574A1 (en) * 2005-12-19 2007-06-21 Bonebakker Jan L Method and apparatus for supporting vector operations on a multi-threaded microprocessor
US20120131308A1 (en) * 2010-11-18 2012-05-24 Yaakov Dekter System, device, and method for on-the-fly permutations of vector memories for executing intra-vector operations
US20120254588A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US20130275734A1 (en) * 2011-12-22 2013-10-17 Bret L. Toll Packed data operation mask concatenation processors, methods, systems and instructions

Also Published As

Publication number Publication date
EP3254186A4 (en) 2019-04-24
CN107408103A (zh) 2017-11-28
CN107408037B (zh) 2021-03-02
KR20170110690A (ko) 2017-10-11
EP3254205A1 (en) 2017-12-13
CN107408038B (zh) 2021-09-28
CN107408063A (zh) 2017-11-28
KR102255298B1 (ko) 2021-05-21
EP3254185A1 (en) 2017-12-13
KR20170110689A (ko) 2017-10-11
US9959246B2 (en) 2018-05-01
CN107430507B (zh) 2021-08-27
US20160224512A1 (en) 2016-08-04
US20160224344A1 (en) 2016-08-04
CN107408102A (zh) 2017-11-28
KR102276335B1 (ko) 2021-07-12
US20160224514A1 (en) 2016-08-04
EP3254206A4 (en) 2019-05-08
EP3254195B1 (en) 2020-12-23
US10339095B2 (en) 2019-07-02
KR20170117452A (ko) 2017-10-23
KR20170110691A (ko) 2017-10-11
EP3254208A1 (en) 2017-12-13
EP3254187B1 (en) 2023-07-19
CN107430589A (zh) 2017-12-01
CN107430507A (zh) 2017-12-01
KR102255313B1 (ko) 2021-05-24
US20160224345A1 (en) 2016-08-04
WO2016126521A1 (en) 2016-08-11
WO2016126485A1 (en) 2016-08-11
WO2016126486A1 (en) 2016-08-11
EP3254207A4 (en) 2019-05-01
EP3254186A1 (en) 2017-12-13
EP3254206A1 (en) 2017-12-13
CN107408101A (zh) 2017-11-28
WO2016126543A1 (en) 2016-08-11
US20160224346A1 (en) 2016-08-04
KR20170110688A (ko) 2017-10-11
CN107430589B (zh) 2021-02-09
EP3254204A4 (en) 2019-04-24
WO2016126519A1 (en) 2016-08-11
CN107430581B (zh) 2021-08-27
US20160224513A1 (en) 2016-08-04
CN107408063B (zh) 2020-11-03
WO2016126433A1 (en) 2016-08-11
EP3254188A1 (en) 2017-12-13
EP3254188A4 (en) 2019-04-17
CN107408040B (zh) 2021-09-28
US10733140B2 (en) 2020-08-04
EP3254186B1 (en) 2022-09-14
US10922267B2 (en) 2021-02-16
EP3254187A4 (en) 2019-05-08
CN107408038A (zh) 2017-11-28
CN107408037A (zh) 2017-11-28
WO2016126545A1 (en) 2016-08-11
CN107408103B (zh) 2021-07-06
KR20170110684A (ko) 2017-10-11
EP3254187A1 (en) 2017-12-13
EP3254204A1 (en) 2017-12-13
US10339094B2 (en) 2019-07-02
US9910824B2 (en) 2018-03-06
CN107408101B (zh) 2021-03-30
KR20170110687A (ko) 2017-10-11
WO2016126448A1 (en) 2016-08-11
KR20170110685A (ko) 2017-10-11
US20160224509A1 (en) 2016-08-04
KR102270020B1 (ko) 2021-06-28
CN107408102B (zh) 2021-10-08
US20160224340A1 (en) 2016-08-04
EP3254195A4 (en) 2018-11-07
KR102311010B1 (ko) 2021-10-07
KR20170109670A (ko) 2017-09-29
US10824586B2 (en) 2020-11-03
EP3254185A4 (en) 2019-05-01
US10846259B2 (en) 2020-11-24
CN107408040A (zh) 2017-11-28
EP3254207A1 (en) 2017-12-13
US20160224510A1 (en) 2016-08-04
KR102255324B1 (ko) 2021-05-24
US20160224511A1 (en) 2016-08-04
EP3254208A4 (en) 2019-05-08
WO2016126516A1 (en) 2016-08-11
EP3254205A4 (en) 2019-05-01
KR102258024B1 (ko) 2021-05-27
CN107430581A (zh) 2017-12-01
WO2016126482A1 (en) 2016-08-11
US11544214B2 (en) 2023-01-03
KR102255318B1 (ko) 2021-05-24
EP3254195A1 (en) 2017-12-13

Similar Documents

Publication Publication Date Title
KR102311010B1 (ko) 하나 또는 그 초과의 복소수 산술 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant