KR20210096684A - 벡터 우선 및 다수의 레인 구성을 가진 벡터 프로세서 - Google Patents

벡터 우선 및 다수의 레인 구성을 가진 벡터 프로세서 Download PDF

Info

Publication number
KR20210096684A
KR20210096684A KR1020217023470A KR20217023470A KR20210096684A KR 20210096684 A KR20210096684 A KR 20210096684A KR 1020217023470 A KR1020217023470 A KR 1020217023470A KR 20217023470 A KR20217023470 A KR 20217023470A KR 20210096684 A KR20210096684 A KR 20210096684A
Authority
KR
South Korea
Prior art keywords
vector
lane
value
lanes
vector register
Prior art date
Application number
KR1020217023470A
Other languages
English (en)
Inventor
스티븐 제프리 월랙
Original Assignee
마이크론 테크놀로지, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크론 테크놀로지, 인크. filed Critical 마이크론 테크놀로지, 인크.
Publication of KR20210096684A publication Critical patent/KR20210096684A/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
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/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
    • G06F15/8084Special arrangements thereof, e.g. mask or switch
    • 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/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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/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]

Landscapes

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

Abstract

벡터 우선 및 다수의 레인 구성을 가진 벡터 프로세서. 벡터 프로세서에 대한 벡터 연산은 입력으로서 단일 벡터 또는 다수의 벡터들을 포함할 수 있다. 입력을 위한 다수의 레인들은 연산을 병렬로 가속시키기 위해 사용될 수 있다. 그리고, 벡터 우선 구성은 연산을 병렬로 수행하기 위해 레인들에서 액세스된 요소들의 수를 감소시킴으로써 다수의 레인들을 강화할 수 있다.

Description

벡터 우선 및 다수의 레인 구성을 가진 벡터 프로세서
관련 출원
본 출원은 2019년 3월 18일에 출원되고 "벡터 우선 및 다수의 레인 구성을 가진 벡터 프로세서"라는 제목의 미국 특허 출원 일련 번호 제16/356,146호에 대한 우선권을 주장하며, 이의 전체 개시는 본 출원에 참조로서 통합된다.
기술 분야
전반적으로, 본 출원에서 개시된 적어도 몇몇 실시예들은 벡터 프로세서들에 관한 것이다. 또한, 본 출원에서 개시된 적어도 몇몇 실시예들은 다수의 레인 구성들을 가진 벡터 프로세서들 및 벡터 우선 구성(vector first configuration)들을 가진 벡터 프로세서들에 관한 것이다.
벡터 프로세서는 일반적으로 벡터들로서 불리우는 데이터의 어레이들에 대해 동작하는 명령들을 포함한 명령 세트를 구현하는 중앙 프로세싱 유닛(CPU)이거나 또는 이를 포함할 수 있다. 이것은 스칼라 프로세서와 상이하며, 여기에서 명령들은 단일 데이터 아이템들에 대해 동작한다. 벡터 프로세서들은 스칼라 프로세서, 특히 수치 시뮬레이션 및 유사한 태스크들에 대한 특정한 작업 부하들 상에서의 성능을 크게 개선할 수 있다. 벡터 프로세서들은 1970년대 초기에 나타났으며 여기에서 슈퍼컴퓨팅 설계의 많은 부분은 1970년대에서 1990년대까지 나타났다. 스칼라 프로세서 설계들과 같은, 더 종래의 마이크로프로세서 설계들의 가격-대-성능 비에서의 급격한 하락은, 벡터 프로세서의 더 적은 개발 및 제조로 이어졌다.
일반적으로, 종래의 CPU들(예컨대, 스칼라 기반 CPU들)은 기껏해야, 한 번에 몇 조각들의 데이터를 조작할 수 있다. 예를 들어, 이러한 CPU들은 본질적으로 A를 B에 부가하는 것을 제공하며 결과를 C에 저장하는 명령을 갖는다. A, B, 및 C에 대한 데이터는 보통 데이터를 유지하는 메모리 위치로의 어드레스를 건넴으로써 가리켜진다. 이러한 어드레스를 디코딩하며 메모리로부터 데이터를 얻는 것은 얼마의 시간이 걸리며, 그동안 CPU는 가동되지 않고 요청된 데이터가 나타나길 기다릴 수 있다.
이들 단계들에 의해 소비된 시간의 양을 감소시키기 위해, 보다 현대의 CPU들은 명령들이 여러 서브 유닛들을 차례로 통과하는 명령 파이프라이닝으로서 알려진 기술을 사용한다. 제 1 서브 유닛은 어드레스를 판독하며 그것을 디코딩하고, 다음으로 이들 어드레스들에서 값들을 페치(fetch)하며, 다음으로 그 자체를 수학적 처리한다(math). 파이프라이닝을 이용하여, CPU는 어셈블리 라인과 유사하게, 첫 번째가 CPU를 떠나기 전일지라도 다음 명령을 디코딩하기 시작한다. 이러한 식으로, 어드레스 디코더, 및 다른 언급된 부분들은 동시에 및 항상 사용 중이다. 파이프라이닝 때문에, 임의의 명령은 완료하는데 동일한 양의 시간이 걸린다.
벡터 프로세서들은 단지 명령들만을 파이프라이닝하는 대신에, 이러한 프로세서들이 또한 데이터 자체를 파이프라인함으로써 파이프라이닝에 대해 개선한다. 따라서, 항상 명령들을 디코딩하고 그 후 명령들을 완료하는데 필요한 데이터를 페치해야만 하는 대신에, 벡터 프로세서는 메모리로부터 단일 명령을 판독한다. 이것은 감소된 디코딩 시간 및 감소된 전력 소비를 허용한다(예컨대, 다수의 디코딩들 대신에 하나가 벡터 프로세서들을 갖고 디코딩한다).
본 개시는 이하에서 제공된 상세한 설명으로부터 및 본 개시의 다양한 실시예들의 수반된 도면들로부터 더 완전하게 이해될 것이다.
도 1은 본 개시의 몇몇 실시예들에 따른, 예시적인 컴퓨팅 디바이스(100)의 예시적인 부분들을 예시한다.
도 2는 본 개시의 몇몇 실시예들에 따른, 예시적인 컴퓨팅 디바이스(200)의 예시적인 부분들을 예시한다.
도 3은 본 개시의 몇몇 실시예들에 따른, 두 개의 레인들을 가진 예시적인 벡터 우선 시스템(300)을 예시한다.
도 4 및 도 5는 본 개시의 몇몇 실시예들에 따른, 방법(400)의 예시적인 동작들을 예시한다.
도 6은 본 개시의 몇몇 실시예들에 따른, 4개의 레인들을 가진 예시적인 벡터 우선 시스템(500)을 예시한다.
일반적으로, 본 출원에서 개시된 적어도 몇몇 실시예들은 벡터 프로세서들에 관한 것이다. 또한, 본 출원에서 개시된 적어도 몇몇 실시예들은 다수의 레인 구성들을 가진 벡터 프로세서들 및 벡터 우선 구성들을 가진 벡터 프로세서들에 관한 것이다. 본 출원에서 개시된 실시예들은 적어도 배경 섹션 및 출원의 다른 부분들에서 언급된 기술적 문제들뿐만 아니라 본 출원에서 설명되지 않지만 이 기술분야에서의 숙련자들에 의해 인식된 다른 기술적 문제들에 대한 특정 기술적 해법들을 제공한다. 본 출원에서 개시된 적어도 몇몇 실시예들은 벡터 우선 및 다수의 레인 구성을 가진 벡터 프로세서를 포함한다. 벡터 프로세서에 대한 벡터 연산은 입력으로서 단일 벡터 또는 다수의 벡터들을 포함할 수 있다. 입력을 위한 다수의 레인들은 연산을 병렬로 가속시키기 위해 사용될 수 있다. 그리고, 벡터 우선 구성은 연산을 병렬로 수행하기 위해 레인들에서 액세스된 요소들의 수를 감소시킴으로써 다수의 레인들을 강화할 수 있다. 언급된 바와 같이, 입력을 위한 다수의 레인들은 연산을 병렬로 가속시키기 위해 사용될 수 있다. 예를 들어, 연산은 벡터들 A 및 B의 덧셈, 또는 벡터들 A 및 B의 요소별(element-wise) 곱셈들, 또는 둘 이상의 벡터들에 대한 임의의 다른 유형의 연산일 수 있다.
연산의 각각의 벡터는 병렬로 동작되는 다수의 레인들(k 레인들)로 분리될 수 있다. 예를 들어, A(i)×B(i)의 곱셈을 고려하자(i = 0, 1, 2, …, (n=1)*k). 이것은 k개 병렬 레인들에서 행해질 수 있다: 병렬로 레인 j = 0, 1, 2, …, k-1에 대해 A(m)×B(m)(m = k X i+j, 및 i = 0, 1, 2, …, n-1). 일반적으로, 곱셈 "×"는 또 다른 연산(예컨대, 덧셈, 뺄셈, 비트별(bit-wise) OR 등)으로 대체될 수 있다. 둘 이상의 벡터들에 대한 연산의 결과는 스칼라 또는 벡터일 수 있다.
또한, 언급된 바와 같이, 벡터 우선 구성은 연산을 병렬로 수행하기 위해 레인들에서 액세스된 요소들의 수를 감소시킴으로써 다수의 레인들을 강화할 수 있다. 본 출원에서 개시된 적어도 몇몇 실시예들은 다수의 레인들을 가진 벡터 레지스터들로 벡터 우선 구성을 구현할 수 있는 컴포넌트들을 포함하며, 이것은 연산들을 보다 효율적으로 병렬로 수행하기 위해 레인들에서 액세스된 요소들의 수를 감소시킬 수 있다. 예를 들어, 컴포넌트들 중 하나는 벡터 우선 레지스터일 수 있다. 벡터 우선 레지스터는 벡터를 수반한 계산을 위해 사용된 제 1 요소가 발견될 수 있는지를 나타내기 위해 사용될 수 있다. 벡터 우선 레지스터 없이, 계산은 항상 벡터 데이터 레지스터에 포함된 벡터의 요소 0으로 시작한다. 그리고, 계산이 항상 벡터 데이터 레지스터에 포함된 벡터의 요소 0으로 시작한다면, 전체 피연산자는 항상 재로딩되어야 한다. 그러나, 벡터 우선 프로세싱을 이용하여, 단지 새로운 피연산자만이 로딩될 필요가 있다.
예를 들어, 벡터 A(i)(i=0, 1, 2, …, n-1)을 고려하자. 벡터 우선 레지스터가 m을 저장한다면, 계산을 위해 사용된 요소들은 A(i)(i=m, m+1, …)이다. 문제는 벡터가 다수의 레인들로 분리되는 상황에서 발생한다. 총 k개의 레인들이 사용된다면, 레인(j)은 벡터 A의 요소들 A(k × i + j)(i=0, 1, …)을 가지며 여기에서 j는 0, 1, …, k-1이다. 요소(k × a + b)(여기에서 b는 0이 아니다)에 대한 연산을 시작하기 위해, 문제는 제 1 요소가 벡터 우선 레지스터의 사용 없이 레인 0에 있지 않을 것이라는 것이다. 대신에, 제 1 요소는 레인 b에 있을 것이다(예컨대, 레인 0에 있지 않을 것이다). 요소(k × a + b)에 대해 시작하기 위해, 레인 j에서 사용될 요소들은 A(k × i + j)(i=a+1, 1, … 및 j > b)이며; j <= b에 대해, 레인 j에서 사용될 요소들은 A(k × i + j) (i=a, 1, …)이다. 시스템의 멀티플렉서는 b에 따라 레인 0을 향해 레인들의 콘텐츠를 시프트하도록 구성될 수 있다. 멀티플렉서는 하나의 레인에서 또 다른 레인으로 전체 피연산자를 시프트하는 시프터로 대체될 수 있다. 시프팅 및/또는 멀티플렉싱은 제 1 요소(k × a + b)가 레인 0에 위치되도록 구성될 수 있다. 구체적으로, 레인 j의 A(k × i + j)는 레인 j-b(i = a, 1, …, 및 j >=b에 대해)로 및 레인 k+j-b(i = a+1, 1, …, 및 j<b에 대해)로 시프트된다. 이러한 시프트를 갖고, 연산들은 레인들(b 내지 k-1)의 입력 요소(a)에 대해, 및 레인들(0 내지 b-1)의 입력 요소(a+1)에 대해 시작할 수 있다. 요소(k × a + b)에 대해 시작하기 위해, b는 레인 시프트를 제어하며; a/a+1은 레인들에서 제 1 요소의 선택을 제어한다. 2-레인 경우에, 그것은 k × a + b가 홀수인지 또는 짝수인지에 기초하여 시프트 및/또는 스위치로서 단순화될 수 있다. 시스템의 예들은 2레인들, 4레인들, 16레인들, 및 2의 거듭제곱을 가진 레인들의 임의의 배열과 함께 사용될 수 있다. 그러나, 하드웨어는 레인 수에서의 증가에 따라 기하급수적으로 더 복잡해진다.
도 1은 본 개시의 몇몇 실시예들에 따른, 예시적인 컴퓨팅 디바이스(100)의 예시적인 부분들을 예시한다. 디바이스(100)는 도시된 바와 같이, 하나 이상의 네트워크들(112)에 통신 가능하게 결합될 수 있다. 디바이스(100)는 본 개시의 몇몇 실시예들에 따른 벡터 프로세서(102)를 포함한다. 디바이스(100)는 또한 적어도 버스(104), 메인 메모리(106), 데이터 저장 시스템(108), 및 네트워크 인터페이스(110)를 포함한다. 버스(104)는 벡터 프로세서(102), 메인 메모리(106), 데이터 저장 시스템(108), 및 네트워크 인터페이스(110)를 통신 가능하게 결합한다. 디바이스(100)는 적어도 벡터 프로세서(102), 메인 메모리(106)(예컨대, 판독-전용 메모리(ROM), 플래시 메모리, 동기식 동적 랜덤 액세스 메모리(SDRAM) 또는 램버스 DRAM(RDRAM)과 같은 DRAM, 정적 랜덤 액세스 메모리(SRAM) 등), 및 데이터 저장 시스템(108)을 포함하는 컴퓨터 시스템을 포함하며, 이것은 버스(104)(다수의 버스들을 포함할 수 있다)를 통해 서로 통신한다.
달리 말하면, 도 1은 본 개시의 실시예들이 동작할 수 있는 컴퓨터 시스템을 가진 예시적인 디바이스(100)의 블록도이다. 몇몇 실시예들에서, 컴퓨터 시스템은 실행될 때, 기계가 본 출원에서 논의된 방법론들 중 임의의 하나 이상을 수행하게 하기 위한, 명령들의 세트를 포함할 수 있다. 이러한 실시예들에서, 기계는 LAN, 인트라넷, 엑스트라넷, 및/또는 인터넷(예컨대, 네트워크(들)(112))에서 다른 기계들에 연결될 수 있다(예컨대, 네트워크 인터페이스(110)를 통해 네트워킹될 수 있다). 기계는 피어-투-피어(또는 분산형) 네트워크 환경(본 출원에서 설명된 피어-투-피어 네트워크들과 같은)에서의 피어 기계로서, 또는 클라우드 컴퓨팅 기반시설 또는 환경에서의 서버 또는 클라이언트 기계로서, 클라이언트-서버 네트워크 환경에서 서버 또는 클라이언트 기계의 용량에서 동작할 수 있다.
벡터 프로세서(102)는 본 개시의 몇몇 실시예들에 따른 하나 이상의 벡터 프로세서들을 나타낸다. 벡터 프로세서(102)는 마이크로프로세서, 중앙 프로세싱 유닛 등을 포함할 수 있다. 보다 특히, 벡터 프로세서(102)는 복잡한 명령 세트 컴퓨팅(CISC) 마이크로프로세서, 축소 명령 세트 컴퓨팅(RISC) 마이크로프로세서, 매우 긴 명령 워드(VLIW) 마이크로프로세서, 또는 다른 명령 세트들을 구현한 프로세서, 또는 명령 세트들의 조합을 구현한 프로세서, 프로세서가 사용하는 한: 벡터 명령들, 벡터 레지스터들, 벡터 우선 및 다수의 레인 구성을 포함할 수 있다. 벡터 프로세서(102)는 또한 애플리케이션 특정 집적 회로(ASIC), 필드 프로그램 가능한 게이트 어레이(FPGA), 디지털 신호 프로세서(DSP), 그래픽 프로세싱 유닛(GPU), 네트워크 프로세서 등과 같은 하나 이상의 특수-목적 프로세싱 디바이스들일 수 있다. 벡터 프로세서(102)는 본 출원에서 논의된 동작들 및 단계들을 수행하기 위한 명령들을 실행하도록 구성될 수 있다. 벡터 프로세서(102)는 하나 이상의 통신 네트워크(네트워크(들)(112)와 같은)를 통해 통신하기 위해 네트워크 인터페이스(110)와 같은 네트워크 인터페이스 디바이스를 추가로 포함할 수 있다.
데이터 저장 시스템(108)은 하나 이상의 세트들의 명령들 또는 소프트웨어가 저장되는 기계-판독 가능한 저장 매체(또한 컴퓨터-판독 가능한 매체로서 알려진)를 포함할 수 있으며 본 출원에서 설명된 방법론들 또는 기능들 중 하나 이상의 적어도 몇몇 양상들을 구체화할 수 있다. 데이터 저장 시스템(108)은 비-휘발성 저장장치를 포함할 수 있다. 명령들은 또한, 컴퓨터 시스템에 의한 실행 동안 메인 메모리(106) 내에서 및/또는 벡터 프로세서(102) 내에서 완전히 또는 적어도 부분적으로 존재할 수 있으며, 메인 메모리(106) 및 벡터 프로세서(102)는 또한 기계-판독 가능한 저장 미디어를 구성할 수 있다. 메모리, 벡터 프로세서, 및 데이터 저장 부분들이 각각 단일 부분인 것으로 예시적인 실시예에서 도시되지만, 각각의 부분은 명령들을 저장하며 그것들 각각의 동작들을 수행할 수 있는 단일 부분 또는 다수의 부분들을 포함하는 것으로 취해져야 한다. 용어 "기계-판독 가능한 저장 매체"는 또한 기계에 의한 실행을 위한 명령들의 세트를 저장하거나 또는 인코딩할 수 있으며 기계로 하여금 본 개시의 방법론들 중 임의의 하나 이상을 수행하게 하는 임의의 매체를 포함하는 것으로 취해질 것이다. 용어 "기계-판독 가능한 저장 매체"는 따라서, 이에 제한되지 않지만, 고체-상태 메모리들, 광학 미디어, 및 자기 미디어를 포함하는 것으로 취해질 것이다.
도 2는 본 개시의 몇몇 실시예들에 따른, 예시적인 컴퓨팅 디바이스(200)의 예시적인 부분들을 예시한다. 도시된 바와 같이, 컴퓨팅 디바이스(200)는 벡터 프로세서(102)뿐만 아니라 버스(104) 및 메인 메모리(106)(예컨대, 도 1 참조)를 포함한다. 컴퓨팅 디바이스(200)는 또한 컴퓨팅 디바이스(100)이거나 또는 이를 포함할 수 있다.
도 2에 도시된 바와 같이, 벡터 프로세서(102)는 벡터 레지스터들(202), 스칼라 레지스터들(204), 버스(206), 산술 논리 유닛들(208)(ALU들(208)), 및 벡터 로드 저장 유닛(210)을 포함한다. 컴퓨팅 디바이스(200)의 다른 실시예들은 벡터 프로세서(102)의 외부에 있거나 또는 벡터 레지스터들(202)을 가진 벡터 프로세서에서의 유닛으로부터 벡터 프로세서의 별개의 유닛에 스칼라 레지스터들(204)을 포함할 수 있다. 버스(206)는 벡터 레지스터들(202), 스칼라 레지스터들(204), 산술 논리 유닛들(ALU들)(208), 및 벡터 로드 저장 유닛(210)을 통신 가능하게 결합하며, 이러한 컴포넌트들은 버스(206)(다수의 버스들을 포함할 수 있다)를 통해 서로 통신할 수 있다. 벡터 레지스터들(202)은 다수의 벡터 레지스터들을 포함한다. 그리고, ALU들(208)은 다수의 ALU들 - 예컨대, 산술 논리 유닛(ALU) 0, ALU 1, 및 ALU N을 포함한다.
벡터 프로세서(102)는 벡터 우선 및 다수의 레인 구성을 포함한다. 벡터 프로세서(102)는 벡터들로 불리우는 데이터의 1-차원 어레이들에 대해 동작하는 명령들을 구현한 하나 이상의 중앙 프로세싱 유닛들(CPU들)이거나 또는 이를 포함할 수 있다. 벡터 프로세서(102)에서의 벡터 레지스터들(202)은 다수의 레인 구성들을 가진 벡터 레지스터들을 포함할 수 있다. 스칼라 레지스터들(204)은 인덱싱을 제공하며 다수의 레인 구성들을 가진 벡터 레지스터들의 벡터 우선 구성들에 대한 값들을 제어할 수 있는 스칼라 레지스터들을 포함할 수 있다. 스칼라 레지스터들은 또한 벡터 명령들에 의해 사용된 수치 값들을 제공할 수 있다. 예를 들어, 벡터 레지스터에 의해 제공된 벡터는 스칼라 레지스터에 의해 제공된 스칼라로 곱하여질 수 있다. 따라서, 벡터 레지스터들(202) 중 적어도 일부는 벡터 우선 및 다수의 레인 구성을 가질 수 있다. 이러한 레지스터들의 각각은 ALU들(208)의 각각의 ALU에 연결될 수 있다. ALU들(208)의 ALU는 정수 이진 수들에 대해 산술 및 비트별 연산들을 수행하는 조합형 디지털 전자 회로를 포함할 수 있다. 벡터 프로세서(102)에서, ALU들(208)의 ALU는 벡터 우선 및 다수의 레인 구성을 가진 벡터 레지스터에 연결될 수 있다.
또한, 스칼라 레지스터들(204)은 프로그램 가능한 스칼라 레지스터들을 포함할 수 있다. 프로그램 가능한 스칼라 레지스터는 벡터 레지스터(예컨대, 벡터 레지스터들(202) 중 하나)에 의해 제공된 벡터가 프로그램 가능한 스칼라 레지스터들 중 하나에 의해 제공된 스칼라에 의해 연산되며 그것으로 프로그램될 수 있도록 하기 위해 사용될 수 있다. 예를 들어, 연산들 중 하나는 스칼라 값으로 곱한 벡터(예컨대, 벡터 A(i) × 스칼라(p))를 포함할 수 있다.
벡터 로드 저장 유닛(210)은 로드 및 저장 명령들을 실행하고, 로드 및 저장 연산들의 어드레스들을 생성하며 메모리로부터 데이터를 로딩하거나 또는 그것을 벡터 프로세서(102)의 레지스터들로부터 메모리로 다시 저장하기 위한 회로부를 포함한다. 벡터 로드 저장 유닛(210)은 도 4 내지 도 5의 방법(400)의 동작들을 포함하여 본 출원에서 논의된 동작들 중 많은 것을 수행할 수 있다.
레지스터들(202)의 벡터 레지스터는 벡터 우선 및 다수의 레인 구성을 포함할 수 있다. 벡터 우선 및 다수의 레인 구성의 예는 이하에서 설명된다. 또한, 벡터 우선 및 다수의 레인 구성의 예들은 도 3 내지 도 6에서 더 상세하게 설명된다.
본 출원에서 설명된 컴퓨팅 디바이스들의 각각은 기계에 의해 취해질 동작들을 특정하는 명령들의 세트(순차적 또는 기타)를 실행할 수 있는 상기 기계일 수 있다. 뿐만 아니라, 단일 기계가 도 1 및 도 2의 예시된 컴퓨팅 디바이스들의 각각을 위해 예시되지만, 용어 "기계"는 또한 본 출원에서 논의된 방법론들 또는 동작들 중 임의의 하나 이상을 수행하기 위해 명령들의 세트(또는 다수의 세트들)를 개별적으로 또는 공동으로 실행하는 기계들의 임의의 모음을 포함하는 것으로 취해질 것이다. 그리고, 예시된 컴퓨팅 디바이스들의 각각은 각각 적어도 버스 및/또는 마더보드, 하나 이상의 제어기들(하나 이상의 CPU들과 같은), 임시 데이터 저장장치를 포함할 수 있는 메인 메모리, 적어도 하나의 유형의 네트워크 인터페이스, 영구 데이터 저장장치를 포함할 수 있는 저장 시스템, 및/또는 그것의 임의의 조합을 포함할 수 있다.
도 3은 본 개시의 몇몇 실시예들에 따른, 2개의 레인들을 가진 예시적인 벡터 우선 시스템(300)을 예시한다. 벡터 우선 시스템(300)은 벡터 프로세서(102)(예컨대, 도 1 또는 도 2 참조)의 부분일 수 있다. 벡터 우선 시스템(300)은 벡터 레지스터 레인들(301 및 303)을 포함하는 제 1 벡터 레지스터의 복수의 레인들(302)을 포함한다. 달리 말하면, 시스템(300)은 제 1 벡터 레지스터(예컨대, 벡터 레지스터들(202) 중 하나)의 두 개의 레인들을 위한 제 1 벡터 레지스터 레인(301) 및 제 2 벡터 레지스터 레인(303)을 포함한다. 시스템(300)은 제 1 벡터 레지스터의 컴포넌트들을 도시하지만, 시스템은 제 2 벡터 레지스터의 컴포넌트들과 직접 상호작용한다. 제 1 및 제 2 벡터 레지스터들 각각은 시스템(300)의 ALU(304a) 및 ALU(304b)에 대한 각각의 입력을 제공한다.
일반적으로, 입력을 위한 다수의 레인들은 병렬로 연산을 가속시키기 위해 사용될 수 있다. 도시된 바와 같이, 레인들 각각은 각각의 ALU들(예컨대, ALU들(304a 및 304b))을 갖는다. 예를 들어, 연산은 제 1 및 제 2 벡터들(즉, 벡터 A 및 벡터 B)의 덧셈, 또는 벡터들의 요소별 곱셈들, 또는 두 개의 벡터들에 대한 임의의 다른 유형의 연산일 수 있다. 연산의 각각의 벡터는 병렬로 동작되는 다수의 레인들(k 레인들)로 분리될 수 있다. 예를 들어, A(i) × B(i)(i=0, 1, 2, …, (n-1)*k)의 곱셈을 고려하자. 이것은 k개 병렬 레인들에서 행해질 수 있다: 레인 j =0, 1, 2, …, k-1에 대해 병렬로 A(m) × B{m)(m = k × i + j, 및 i = 0, 1, 2, …, n-1). 일반적으로, 곱셈 "×"는 또 다른 연산(예컨대, 덧셈, 뺄셈, 비트별 OR 등)으로 대체될 수 있다. 두 개 이상의 벡터들에 대한 병렬 레인 ALU들(예컨대, ALU들(304a 및 304b))의 연산들의 두 개의 레인들(예컨대, 출력들(314a 및 314b))을 가진 병렬 프로세싱으로부터의 결과들은 스칼라 또는 벡터일 수 있다.
또한, 일반적으로, 벡터 우선 구성은 연산을 병렬로 수행하기 위해 레인들에서 액세스된 요소들의 수를 감소시킴으로써 다수의 레인들을 강화할 수 있다. 적어도 도 3 내지 도 6에서 도시된 바와 같이, 시스템(300 또는 500)의 컴포넌트들은 다수의 레인들을 갖는 벡터 레지스터들을 가진 벡터 우선 구성(즉, 벡터 우선 및 다수의 레인 구성)을 구현할 수 있으며, 이것은 연산들을 더 효율적으로 병렬로 수행하기 위해 레인들에서 액세스된 요소들의 수를 감소시킬 수 있다. 예를 들어, 컴포넌트들 중 하나는 벡터 우선 레지스터(예컨대, VFR 값을 저장한 레지스터(320 또는 520))일 수 있다. 벡터 우선 레지스터는 벡터를 수반한 계산을 위해 사용된 제 1 요소가 발견될 수 있는지를 나타내기 위해 사용될 수 있다. 벡터 우선 레지스터 없이, 계산은 항상 벡터의 요소 0으로 시작한다.
벡터 우선 구성은 병렬로 연산을 수행하기 위해 레인들에서 액세스된 요소들의 수를 감소시킴으로써 다수의 레인들을 강화할 수 있다. 본 출원에서 개시된 적어도 몇몇 실시예들은 다수의 레인들을 갖는 벡터 레지스터들을 가진 벡터 우선 구성을 구현할 수 있는 컴포넌트들을 포함하며, 이것은 연산들을 더 효율적으로 병렬로 수행하기 위해 레인들에서 액세스된 요소들의 수를 감소시킬 수 있다. 예를 들어, 컴포넌트들 중 하나는 벡터 우선 레지스터일 수 있다. 벡터 우선 레지스터는 벡터를 수반한 계산을 위해 사용된 제 1 요소가 발견될 수 있는지를 나타내기 위해 사용될 수 있다. 벡터 우선 레지스터 없이, 계산은 항상 벡터 데이터 레지스터에 포함된 벡터의 요소 0으로 시작한다. 그리고, 계산이 항상 벡터 데이터 레지스터에 포함된 벡터의 요소 0으로 시작한다면, 전체 피연산자는 항상 재로딩되어야 한다. 그러나, 벡터 우선 프로세싱을 이용하여, 단지 새로운 피연산자만이 로딩될 필요가 있다.
예를 들어, 벡터 A(i)(i=0, 1, 2, …, n-1)를 고려하자. 벡터 우선 레지스터가 m을 저장하면, 요소들은 계산 A(i) (i=m, m+1, …)을 위해 사용된다. 문제는 벡터가 다수의 레인들로 분리되는 상황에서 발생한다. 총 k개 레인들이 사용된다면, 레인 j는 벡터 A의 요소들 A(k × i + j)(i=0, 1, …)를 가지며 여기에서 j는 0, 1, …, k-1이다. 요소(k × a + b)(b는 0이 아니다)에 대한 연산을 시작하기 위해, 문제는 제 1 요소가 벡터 우선 레지스터의 사용 없이 레인 0에 있지 않을 것이라는 것이다. 대신에, 제 1 요소는 레인 b에 있을 것이다. 요소(k × a + b)에 대해 시작하기 위해, 레인 j에서 사용될 요소들은 A(k × i + j)(i=a+1, 1, … 및 j > b)이며; j <= b에 대해, 레인 j에서 사용될 요소들은 A(k × i + j)(i=a, 1, …)이다.
시스템의 하나 이상의 멀티플렉서들(예컨대, 멀티플렉서들(309 및 311) 참조)은 b에 따라 레인 0을 향해 레인들의 콘텐츠를 시프트하도록 구성될 수 있다. 멀티플렉서(들)는 하나 이상의 시프터들로 대체될 수 있다. 시프팅 및/또는 멀티플렉싱은 제 1 요소(k × a + b)가 레인 0에 위치되도록 구성될 수 있다. 구체적으로, 레인 j의 A(k × i + j)는 레인 j-b(i=a, 1, …, 및 j >= b에 대해)로 및 레인 k+j-b(i=a+1, 1, …, 및 j < b에 대해)로 시프트된다. 이러한 시프트를 갖고, 연산들은 레인들(b 내지 k-1)의 입력 요소 a에 대해, 및 레인들(0 내지 b-1)의 입력 요소 a+1에 대해 시작할 수 있다. 요소(k × a + b)에 대해 시작하기 위해, b는 레인 시프트를 제어하며; a/a+1은 레인들에서 제 1 요소의 선택을 제어한다. 2-레인 경우에, 그것은 k × a + b가 홀수인지 또는 짝수인지에 기초하여 시프트 및/또는 스위치로서 단순화될 수 있다. 시스템의 예들은 2레인들, 4레인들, 16레인들, 및 2의 거듭제곱을 가진 레인들의 임의의 배열과 함께 사용될 수 있다. 그러나, 하드웨어는 레인들의 수에서의 증가에 따라 기하급수적으로 더 복잡해진다. 컴포넌트들의 2-레인 예시적인 배열은 도 3에서 도시된다. 그리고, 4-레인 예시적인 배열이 도 6에서 도시된다.
도 3에서의 2-레인 예를 참조하면, 제 1 벡터 레지스터 레인(301)은 벡터 요소들(VE)(305a, 305b, 305c, 및 305d)을 포함하며, 제 2 벡터 레지스터 레인(303)은 벡터 요소들(VE)(307a, 307b, 307c, 및 307d)을 포함한다. 벡터 레지스터들의 요소들의 사용은 도 4 및 도 5에 도시된 방법(400)에 대하여 더 상세하게 설명된다.
시스템(300)은 또한 적어도 제 1 벡터 레지스터 및 제 2 벡터 레지스터에 대해 ALU(304a)(Lane_0에 대한 ALU) 및 ALU(304b)(Lane_1에 대한 ALU)를 포함한다. 몇몇 실시예들에서, ALU들(304a 및 304b)은 ALU들(208) 중 하나일 수 있으며 제 1 및 제 2 벡터 레지스터들은 벡터 레지스터들(202) 중 두 개일 수 있다. 제 2 벡터 레지스터의 부분들은 ALU에 대한 레인 입력들인 그것의 출력들 - 예컨대, 308b 및 312b 참조 - 을 제외하고 도시되지 않는다.
ALU(304a)는 제 1 벡터 레지스터의 제 1 벡터 레지스터 레인(301) 또는 제 2 벡터 레지스터 레인(303)으로부터 전달된 출력에 대한 제 1 레인 입력(308a)을 포함하여 도시된다. ALU(304a)는 또한 제 2 벡터 레지스터의 제 1 벡터 레지스터 레인 또는 제 2 벡터 레지스터 레인으로부터 전달된 출력에 대한 제 1 레인 입력(308b)을 포함하여 도시된다.
ALU(304b)는 제 1 벡터 레지스터의 제 1 벡터 레지스터 레인(301) 또는 제 2 벡터 레지스터 레인(303)으로부터 전달된 출력에 대한 제 2 레인 입력(312a)을 포함하여 도시된다. ALU(304b)는 또한 제 2 벡터 레지스터의 제 1 벡터 레지스터 레인 또는 제 2 벡터 레지스터 레인으로부터 전달된 출력에 대한 제 2 레인 입력(312b)을 포함하여 도시된다.
몇몇 실시예들에서, 시스템의 ALU(예컨대, ALU(304a 또는 304b))는 ALU의 적어도 하나의 함수 및 제 1 및 제 2 벡터 레지스터들의 동일한 레인 출력들로부터의 입력들에 기초하는 ALU 출력을 포함할 수 있다. 예를 들어, ALU 출력(314a)은 ALU(304a)의 적어도 하나의 함수 및 제 1 및 제 2 벡터 레지스터들의 제 1 레인 입력들(308a 및 308b)에 기초할 수 있다. 그리고, ALU 출력(314b)은 ALU(304b)의 적어도 하나의 함수 및 제 1 및 제 2 벡터 레지스터들의 제 2 레인 입력들(312a 및 312b)에 기초할 수 있다. ALU들(304a 및 304b)의 각각에 대한 함수(들)는 각각의 ALU에 대해 동일한 함수(들)일 수 있다.
시스템(300)은 또한 입력들(예컨대, 입력들(306a 및 306b))로서, 제 1 벡터 레지스터 레인(301)으로부터의 출력 및 제 2 벡터 레지스터 레인(303)으로부터의 출력을 수신하도록 구성된 제 1의 2:1 멀티플렉서(309)를 포함한다. 제 1의 2:1 멀티플렉서(309)는 또한, 선택 입력(예컨대, 선택 입력(324))으로서, 벡터 우선 레지스터 값(예컨대, VRF 값(320))을 수신하도록 구성될 수 있다. 도시된 바와 같이, 제 1의 2:1 멀티플렉서(309)에 대한 선택 입력(324)은 스칼라 레지스터(예컨대, 제 1 벡터 레지스터에 대한 스칼라 레지스터들(313)에서 VFR 값(320)에 대한 레지스터)의 출력으로부터 수신된다. 제 1 스칼라 레지스터는 도 2에서 도시된 스칼라 레지스터들(204)의 스칼라 레지스터들 중 하나일 수 있다. 제 1의 2:1 멀티플렉서(309)는 또한 선택 입력(324)에 기초하여 제 1 벡터 레지스터 레인(301)으로부터의 출력 또는 제 2 벡터 레지스터 레인(303)으로부터의 출력을 선택하도록 구성될 수 있다. 제 1의 2:1 멀티플렉서(309)는 또한 선택된 출력을 제 1 레지스터에 대한 ALU(304a)의 제 1 레인 입력(308a)으로 전달하도록 구성될 수 있다.
시스템(300)은 또한 입력들(예컨대, 입력들(310a 및 310b))로서, 제 1 벡터 레지스터 레인(301)으로부터의 출력 및 제 2 벡터 레지스터 레인(303)으로부터의 출력을 수신하도록 구성된 제 2의 2:1 멀티플렉서(311)를 포함한다. 제 2의 2:1 멀티플렉서(311)는 또한, 선택 입력(예컨대, 선택 입력(324))으로서, VFR 값(예컨대, VFR 값(320))을 수신하도록 구성될 수 있다. 도시된 바와 같이, 제 2의 2:1 멀티플렉서(311)에 대한 선택 입력(324)은 스칼라 레지스터(예컨대, 스칼라 레지스터들(313)에서 VFR 값(320)에 대한 레지스터)의 출력으로부터 수신된다. 스칼라 레지스터는 도 2에서 도시된 스칼라 레지스터들(204)의 스칼라 레지스터들 중 하나일 수 있다. 제 2의 2:1 멀티플렉서(311)는 또한 선택 입력(324)에 기초하여 제 1 벡터 레지스터 레인(301)으로부터의 출력 또는 제 2 벡터 레지스터 레인(303)으로부터의 출력을 선택하도록 구성될 수 있다. 제 2의 2:1 멀티플렉서(311)는 또한 선택된 출력을 제 1 레지스터에 대한 ALU(304b)의 제 2 레인 입력(312a)으로 전달하도록 구성될 수 있다.
스칼라 레지스터들(313)은 또한 제 1 벡터 레지스터(예컨대, VAR 레지스터(322))의 각각의 인덱스에 의해, 제 1 벡터 레지스터 레인(301) 및 제 2 벡터 레지스터 레인(303)에 대한 요소 어드레스 값들(EA 값들)을 제공하도록 구성되는 VAR 레지스터를 포함할 수 있다 - 예컨대, 이러한 값들이 입력(326)과 매칭될 때 대응하는 요소들로의 액세스를 제공하는 도 3 및 도 6에서 도시된 벡터 레지스터 레인들에 도시된 "EA" 하에서의 값들 "0", "1", "2", 및 "3"을 참조하자. 다시 말해서, 입력들(326)은 EA 값들을 갖거나 또는 그것에 관련되는 입력들을 고려할 수 있다.
또한, 스칼라 레지스터들(313)은 프로그램 가능한 스칼라 레지스터들을 포함할 수 있다. 프로그램 가능한 스칼라 레지스터는 벡터 레지스터(예컨대, 레인들(301 및 303)을 가진 벡터 레지스터)에 의해 제공된 벡터가 프로그램 가능한 스칼라 레지스터들 중 하나에 의해 제공된 스칼라에 의해 연산되며 그것으로 프로그램될 수 있도록 하기 위해 사용될 수 있다. 예를 들어, 연산들 중 하나는 스칼라 값으로 곱한 벡터(예컨대, 벡터 A(i) × 스칼라(p))를 포함할 수 있다.
VFR 값들 및 EA 값들은 각각 도 2에 도시된 스칼라 레지스터들(204)에서의 레지스터들과 같은 스칼라 레지스터들에 저장된 스칼라들일 수 있다. VFR 값 및 EA 값들은 도 4 및 도 5에서 방법(400)에 대하여 더 상세하게 설명된다. VFR 값들 및 EA 값들은 각각의 벡터 레인들을 액세스하기 위해 사용되는 초기 어드레스들을 결정하기 위해 사용될 수 있다(예컨대, 도 3에 도시된 벡터 요소들(305a 및 307a)에서 및 도 6에 도시된 벡터 레지스터 레인들에서 전체 어드레스들 "Element_0_0" 및 "Element_1_0" 참조). 입력(326)은 요소들의 선택을 위한 입력이 VAR 레지스터(322)의 출력된 값으로부터 온다는 점에서 벡터 로드 저장 유닛과 같은, 벡터 프로세서의 부분이 어떻게 벡터 레지스터 레인들에서 요소들을 선택하는지를 보여준다.
몇몇 실시예들에서, 벡터 프로세서(예컨대, 도 1 및 도 2에 도시된 벡터 프로세서(102))는 벡터 로드 저장 유닛(예컨대, 도 2에 도시된 벡터 로드 저장 유닛(210)) 및 벡터 레지스터들(예컨대, 벡터 레지스터들(202))을 포함할 수 있다. 레지스터들 중 적어도 하나는 벡터 레지스터의 두 개의 레인들에 대한 제 1 벡터 레지스터 레인(예컨대, 도 3에 도시된 제 1 벡터 레지스터 레인(301)) 및 제 2 벡터 레지스터 레인(예컨대, 도 3에 도시된 벡터 레지스터 레인(303))을 포함할 수 있다. 벡터 프로세서는 또한 ALU들(예컨대, ALU들(208))을 포함할 수 있다. ALU들은 둘 이상의 벡터 레지스터들에 대한 ALU들(예컨대, ALU들(304a 및 304b))을 포함할 수 있다.
벡터 레지스터들에 대한 ALU는 제 1 벡터 레지스터의 제 1 벡터 레지스터 레인 또는 제 2 벡터 레지스터 레인으로부터 전달된 출력에 대한 제 1 레인 입력(예컨대, 입력(308a))을 포함할 수 있다. 벡터 레지스터들에 대한 또 다른 ALU는 제 1 벡터 레지스터의 제 1 벡터 레지스터 레인 또는 제 2 벡터 레지스터 레인으로부터 전달된 출력에 대한 제 2 레인 입력(예컨대, 입력(312a))을 포함할 수 있다. ALU는 ALU의 적어도 하나의 함수 및 제 1 및 제 2 벡터 레지스터들의 제 1 레인 입력들에 기초하는 ALU 출력 - 예컨대, ALU 출력(314a)) 참조 - 을 추가로 포함할 수 있다.
벡터 레지스터들에 대한 ALU는 제 2 벡터 레지스터의 제 1 벡터 레지스터 레인 또는 제 2 벡터 레지스터 레인으로부터 전달된 출력에 대한 제 1 레인 입력(예컨대, 입력(308b))을 포함할 수 있다. 벡터 레지스터들에 대한 ALU는 또한 제 2 벡터 레지스터의 제 1 벡터 레지스터 레인 또는 제 2 벡터 레지스터 레인으로부터 전달된 출력에 대한 제 2 레인 입력(예컨대, 입력(312b))을 포함할 수 있다. ALU는 ALU의 적어도 하나의 함수 및 제 1 및 제 2 벡터 레지스터들의 제 2 레인 입력들에 기초하는 ALU 출력 - 예컨대, ALU 출력(314b) 참조 - 을 추가로 포함할 수 있다.
이러한 실시예들에서, 버스(예컨대, 도 2에 도시된 버스(206))는 벡터 로드 저장 유닛, 벡터 레지스터들, 및 산술 논리 유닛들을 통신 가능하게 결합하도록 구성될 수 있다.
버스는 입력들(예컨대, 입력들(306a 및 306b))로서, 제 1 벡터 레지스터 레인으로부터의 출력 및 제 2 벡터 레지스터 레인으로부터의 출력을 수신하도록 구성된 제 1의 2:1 멀티플렉서(예컨대, 2:1 멀티플렉서(309))를 포함할 수 있다. 제 1의 2:1 멀티플렉서는 또한 선택 입력(예컨대, 선택 입력(324))으로서, 벡터 우선 레지스터 값(VFR 값)을 수신하도록 구성될 수 있다. 제 1의 2:1 멀티플렉서에 대한 선택 입력은 제 1 스칼라 레지스터(예컨대, 스칼라 레지스터들(204)의 스칼라 레지스터들 중 하나일 수 있는 스칼라 레지스터들(313) 참조)의 출력으로부터 수신될 수 있다. 제 1의 2:1 멀티플렉서는 또한 선택 입력에 기초하여 제 1 벡터 레지스터 레인으로부터의 출력 또는 제 2 벡터 레지스터 레인으로부터의 출력을 선택하며, 선택된 출력을 ALU(304a)의 제 1 레인 입력(예컨대, 입력(308a))으로 전달하도록 구성될 수 있다.
버스는 입력들(예컨대, 입력들(310a 및 310b))로서, 제 1 벡터 레지스터 레인으로부터의 출력 및 제 2 벡터 레지스터 레인으로부터의 출력을 수신하도록 구성된 제 2의 2:1 멀티플렉서(예컨대, 2:1 멀티플렉서(311))를 포함할 수 있다. 제 2의 2:1 멀티플렉서는 또한 선택 입력(예컨대, 선택 입력(324))으로서, VFR 값을 수신하도록 구성될 수 있다. 제 2의 2:1 멀티플렉서에 대한 선택 입력은 스칼라 레지스터(예컨대, 스칼라 레지스터들(204)의 스칼라 레지스터들 중 하나일 수 있는 스칼라 레지스터들(313) 참조)의 출력으로부터 수신될 수 있다. 제 2의 2:1 멀티플렉서는 또한 선택 입력에 기초하여 제 1 벡터 레지스터 레인으로부터의 출력 또는 제 2 벡터 레지스터 레인으로부터의 출력을 선택하며, 선택된 출력을 ALU(304b)의 제 2 레인 입력(예컨대, 입력(312a) 참조)으로 전달하도록 구성될 수 있다.
몇몇 실시예들에서, 프로세서는 벡터 로드 저장 유닛, 제 1 벡터 레지스터 레인 및 제 2 벡터 레지스터 레인을 가진 적어도 하나의 벡터 레지스터, 적어도 하나의 프로그램 가능한 스칼라 레지스터, 및 벡터 레지스터의 레인들에 의해 제공된 값들이 프로그램 가능한 스칼라 레지스터에 의해 제공된 값에 의해 연산될 수 있도록 벡터 레지스터 및 프로그램 가능한 스칼라 레지스터에 연결된 제 1 및 제 2 ALU들을 포함할 수 있다.
또한, 이러한 실시예들에서, 제 1 벡터 프로세서는 멀티플렉서들을 위한 선택 입력으로서 사용될 제 1 및 제 2의 2:1 멀티플렉서들로 VFR 값(예컨대, VFR 값(320))을 제공하도록 구성된 벡터 우선 레지스터(예컨대, VFR)를 포함할 수 있다. 제 2 벡터 레지스터(도 3에 도시되지 않음)는 VFR 값을 제공하도록 구성된 VFR 및 선택 입력으로서 사용될 제 2 벡터 레지스터에 대한 멀티플렉서들을 포함할 수 있다.
또한, 이러한 실시예들에서, 벡터 프로세서는 요소 어드레스 값(EA 값) - 예컨대, 입력(326) 참조 - 을 제공하도록 구성된, 제 1 벡터 레지스터 레인에 대한 인덱스 레지스터(예컨대, VAR 레지스터(322))를 포함할 수 있다. 그리고, 인덱스 레지스터는 또한 EA 값 - 예컨대, 입력(326) 참조 - 을 제공하도록 구성된, 제 2 벡터 레지스터 레인에 대한 것일 수 있다.
이러한 실시예들에서, 벡터 프로세서는 또한 VFR 값 및 EA 값에 따라, 제 1 벡터 레지스터 레인을 액세스하기 위해 사용되는 제 1 초기 어드레스를 결정하도록 구성될 수 있는 벡터 로드 저장 유닛을 포함할 수 있다. 벡터 로드 저장 유닛은 또한 VFR 값 및 요소 어드레스 값에 따라, 제 2 벡터 레지스터 레인을 액세스하기 위해 사용되는 제 2 초기 어드레스를 결정하도록 구성될 수 있다. 이러한 실시예들에서, ALU는 제 1 초기 어드레스에 따라 제 1 벡터 레지스터 레인을 액세스하며, 제 2 초기 어드레스에 따라 제 2 벡터 레지스터 레인을 액세스하도록 구성될 수 있다.
이러한 실시예들에서, 벡터 로드 저장 유닛은 EA 값을 증분할 뿐만 아니라 VFR 값 및 증분된 요소 어드레스 값에 따라, 제 1 벡터 레지스터 레인을 액세스하기 위해 사용되는 제 1 다음 어드레스를 결정하며, VFR 값 및 증분된 요소 어드레스 값에 따라, 제 2 벡터 레지스터 레인을 액세스하기 위해 사용되는 제 2 다음 어드레스를 결정하도록 구성될 수 있다. ALU는 제 1 다음 어드레스에 따라, 제 1 벡터 레지스터 레인을 액세스하며, 제 2 다음 어드레스에 따라 제 2 벡터 레지스터 레인을 액세스하도록 구성될 수 있다.
또한, 이러한 예들에서, 벡터 로드 저장 유닛은 제 1 요소 어드레스 값 및 제 2 요소 어드레스 값의 증분을 반복하도록 구성될 수 있다. 따라서, 벡터 로드 저장 유닛은 제 1 요소 어드레스 값이 제 1 벡터 레지스터 레인에서의 요소들의 수(예컨대, EA 값을 포함할 수 있는 입력(326), 및 벡터 요소들(305a, 305b, 305c, 및 305d)의 수 참조)와 같을 때, VFR 값을 변경하며, 제 2 요소 어드레스 값이 제 2 벡터 레지스터 레인에서의 요소들의 수(예컨대, EA 값을 포함할 수 있는 입력(326), 및 벡터 요소들(307a, 307b, 307c, 및 307d)의 수를 참조)와 같을 때, VFR 값을 변경하도록 구성될 수 있다.
이러한 예들에서, 벡터 로드 저장 유닛은 또한, 제 1 인덱스에서, 제 1 요소 어드레스 값을 리셋하며, 제 2 인덱스에서, 제 2 요소 어드레스 값을 리셋하도록 구성될 수 있다. 벡터 로드 저장 유닛은 또한 변경된 VFR 값 및 리셋된 요소 어드레스 값에 따라, 제 2 벡터 레지스터 레인을 액세스하기 위해 사용되는 상이한 제 1 초기 어드레스를 결정하도록 구성될 수 있다. 그리고, 벡터 로드 저장 유닛은 또한 변경된 VFR 값 및 리셋된 요소 어드레스 값에 따라, 제 1 벡터 레지스터 레인을 액세스하기 위해 사용되는 상이한 제 2 초기 어드레스를 결정하도록 구성될 수 있다. ALU는 상이한 제 1 초기 어드레스에 따라 제 2 벡터 레지스터 레인을 액세스하며, 상이한 제 2 초기 어드레스에 따라 제 1 벡터 레지스터 레인을 액세스하도록 구성될 수 있다.
또한, 벡터 로드 저장 유닛은 리셋된 제 1 요소 어드레스 값 및 리셋된 제 2 요소 어드레스 값을 증분하도록 구성될 수 있다. 벡터 로드 저장 유닛은 또한, 변경된 VFR 값 및 증분된 요소 어드레스 값에 따라, 제 2 벡터 레지스터 레인을 액세스하기 위해 사용되는 상이한 제 1 다음 어드레스를 결정하도록 구성될 수 있다. 그리고, 벡터 로드 저장 유닛은 또한, 변경된 VFR 값 및 증분된 요소 어드레스 값에 따라, 제 1 벡터 레지스터 레인을 액세스하기 위해 사용되는 상이한 제 2 다음 어드레스를 결정하도록 구성될 수 있다. ALU는 상이한 제 1 다음 어드레스에 따라 제 2 벡터 레지스터 레인을 액세스하며, 상이한 제 2 다음 어드레스에 따라 제 1 벡터 레지스터 레인을 액세스하도록 구성될 수 있다.
몇몇 실시예들에서, 벡터 프로세서는 레지스터가 4개의 레인들(예컨대, 도 6에 예시된 벡터 레지스터 레인들(501a, 501b, 501c, 및 501d) 참조)을 포함하도록 제 1 벡터 레지스터의 두 개의 부가적인 레인들을 위한 제 3 벡터 레지스터 레인 및 제 4 벡터 레지스터 레인을 포함할 수 있다. 제 3 및 제 4 벡터 레지스터 레인들을 위하며 그것과 함께 동작하는 컴포넌트들은 본 출원에서 설명된 제 1 및 제 2 벡터 레지스터 레인들을 위하며 그것과 함께 동작하는 컴포넌트들과 유사할 수 있다. 예컨대, 2개의 레인들 대신에, 4개의 레인들을 가진 벡터 우선 시스템의 도시를 위한 도 6을 참조하자.
도 4 및 도 5는 본 개시의 몇몇 실시예들에 따른, 방법(400)의 예시적인 동작들을 예시한다. 몇몇 실시예들에서, 벡터 로드 저장 유닛(210)과 같은, 벡터 로드 저장 유닛은 단독으로 또는 벡터 프로세서의 다른 부분들과 조합하여, 방법(400)의 동작들을 수행하거나 또는 가능하게 할 수 있다. 몇몇 실시예들에서, 본 출원에서 설명된 값들에 대한 결정들, 증분들, 및 변화들은 벡터 로드 저장 유닛에 저장된 명령들에 따라 벡터 프로세서의 벡터 로드 저장 유닛에 의해 수행될 수 있다. 몇몇 다른 실시예들에서, 벡터 프로세서의 다른 부분들은 방법(400)의 동작들뿐만 아니라 본 출원에서 설명된 다른 동작들을 수행하거나 또는 가능하게 할 수 있다.
도 4에서, 방법(400)은 복수의 산술 논리 유닛들(ALU들)을 위한 입력들을 제공하는 복수의 벡터 레지스터들에 대해 수행될 수 있다. 예를 들어, 방법(400)은 각각 벡터 프로세서의 ALU들로 입력을 제공하는 제 1 및 제 2 벡터 레지스터들에 대해 수행될 수 있다. 이러한 예에서, 제 1 및 제 2 벡터 레지스터들의 각각은 다수의 레인들을 포함할 수 있으며, 레지스터당 레인들의 수는 2의 거듭제곱일 수 있으며, 레지스터들로부터 입력들을 수신하는 ALU들의 수는 레인들의 수와 같다. 예를 들어, 단계(402) 또는 방법(400)의 다른 단계들 중 임의의 것은 도 3 및 도 6의 제 1 및 제 2 벡터 레지스터들의 각각의 벡터 레지스터에 대해 수행될 수 있다.
도 4에서, 방법(400)은, 벡터 프로세서의 ALU들로 입력을 제공하는 다수의 레인들을 가진 벡터 레지스터의 벡터 우선 레지스터(VFR)에 의해, 벡터 레인들을 액세스하기 위해 사용된 벡터 우선 레지스터 값(VFR 값)을 제공하는, 단계 402에서 시작한다. 벡터 레지스터는 ALU들로 입력을 제공하는 복수의 벡터 레지스터들의 레지스터이다. VFR은, 예를 들어, 2-레인 시스템에 대한(예컨대, 도 3에 도시된 VFR(320)) 또는 4-레인 시스템에 대한(예컨대, 도 6에 도시된 VFR(520)) VFR을 포함할 수 있다. 벡터 레인들은 벡터 레지스터 레인들(예컨대, 벡터 레지스터 레인들(301 및 303 또는 501a, 501b, 501c, 및 501d))에 의해 제공될 수 있다. 벡터 레지스터 레인들의 세트의 각각의 레인은 벡터 프로세서에서의 ALU(예컨대, ALU들(304a 및 304b 또는 504a, 504b, 504c, 및 504d))를 위한 것일 수 있다.
달리 말하면, 단계 402는 VFR에 의해, 레인들을 액세스하기 위해 사용된 벡터 우선 레지스터 값(VRF 값)을 제공하는 것을 포함할 수 있다.
몇몇 실시예들에서, 각각의 벡터 레인들의 수는 2의 임의의 거듭제곱(예컨대, 2레인들, 4레인들, 16레인들 등)일 수 있다. 예를 들어, 각각의 벡터 레인들의 수는 4일 수 있다(예컨대, 벡터 우선 시스템(500)은 4개의 레인들을 가진 다수의 레인 벡터를 위한 것인 도 6을 참조하자). 또한, 각각의 벡터 레인들의 수는 2일 수 있다(예컨대, 벡터 우선 시스템(300)은 2개의 레인들을 가진 다수의 레인 벡터를 위한 것인 도 3을 참조하자).
각각의 벡터 레지스터 레인들 및 벡터 요소 값들 및 메타데이터를 포함한, 각각의 벡터 레지스터 레인들에 저장된 데이터는 벡터 레지스터들 중 하나(예컨대, 벡터 레지스터들(202) 참조)에 포함될 수 있다.
단계 (404)에서, 방법(400)은 벡터 레지스터 레인들(예컨대, 각각 도 3 및 도 6에 도시된 VAR 레지스터들(322 또는 522))에 대한 인덱스에 의해, 요소 어드레스 값(EA 값) - 예컨대, 도 3 및 도 6에 도시된 벡터 레지스터 레인들에 도시된 "EA" 하에서의 값들 "0", "1", "2", 및 "3" 참조 - 을 제공하는 것을 계속한다. VFR 값 및 EA 값은 각각 도 2에 도시된 스칼라 레지스터들에서의 레지스터들과 같은, 스칼라 레지스터들에 저장된 스칼라일 수 있다.
단계 (406)에서, 방법(400)은 VFR 값 및 EA 값에 따라, 벡터 레인들을 액세스하기 위해 사용되는 초기 어드레스들을 결정하는 것을 계속한다. 초기 어드레스들의 예들에 대해, 도 3에 도시된 벡터 요소들(305a 및 307a)에서 및 도 6에 도시된 벡터 레지스터 레인들에서 전체 어드레스들 "Element_0_0" 및 "Element_1_0"을 참조하자. 입력(326 또는 526)은 이들 예들에서, 요소들의 선택을 위한 입력들이 VAR 레지스터들(322 또는 522)의 출력된 값들에서 온 것이라는 점에서, 벡터 로드 저장 유닛과 같은, 벡터 프로세서의 부분이 어떻게 벡터 레지스터 레인들에서의 요소들을 사용하는지를 보여준다.
단계 (408)에서, 방법(400)은 ALU들에 의해, 초기 어드레스들에 따라 벡터 레인들을 액세스하는 것을 계속한다. 초기 어드레스들에 따른 각각의 벡터 레인들의 액세스는 도 3에서 도시된 2:1 멀티플렉서들(309 및 311) 또는 도 6에 도시된 4:1 멀티플렉서들(505a, 505b, 505c, 및 505d)을 통해서와 같은, 멀티플렉서들을 통해 발생할 수 있다. 이들 도면들에서 도시된 바와 같이, 각각의 레인에 대한 각각의 멀티플렉서가 있다. 몇몇 실시예들에서, 어드레스들은 멀티플렉서들을 적어도 부분적으로 제어하며 벡터 레인들로 액세스하기 위해 사용된다 - 예컨대, 각각의 레인에 대한 VFR 값 및 어드레스는 대응하는 멀티플렉서에 대한 입력 선택을 제어하고 벡터 레인들로 액세스하기 위해 조합하여 사용될 수 있다.
단계 (410)에서, 방법(400)은 EA 값을 증분하는 것을 계속한다(예컨대, VAR = 0을 VAR = 1로 변경하는 것).
단계 (412)에서, 방법(400)은, VFR 값 및 증분된 ER 값에 따라, 벡터 레인들을 액세스하기 위해 사용되는 다음 어드레스들을 결정하는 것을 계속한다(예컨대, 도 3에 도시된 벡터 요소들(305b 및 307b)에서 및 도 6에서 도시된 벡터 레지스터 레인들에서 전체 어드레스들 "Element_0_1" 및 "Element_1_1" 참조).
단계 (414)에서, 방법(400)은 ALU들에 의해(예컨대, 도 3에 도시된 2:1 멀티플렉서들(309 및 311)을 통해, 또는 도 6에 도시된 4:1 멀티플렉서들(505a, 505b, 505c, 및 505d)을 통해), 다음 어드레스들에 따라 벡터 레인들을 액세스하는 것을 계속한다. 언급된 바와 같이, 어드레스들은 멀티플렉서들을 적어도 부분적으로 제어하며 벡터 레인들로 액세스하기 위해 사용될 수 있다 - 예컨대, 각각의 레인에 대한 VFR 값 및 어드레스는 대응하는 멀티플렉서에 대한 입력 선택을 제어하며 벡터 레인들로 액세스하기 위해 조합하여 사용될 수 있다.
단계 (416)에서, 방법(400)은 EA 값이 벡터 레인들 중 하나에서의 요소들의 수와 같은지를 결정하는 것을 계속한다. EA 값 레지스터의 값이 벡터 레인들의 벡터 레인에서 요소들의 수와 같지 않을 때, 방법(400)은 단계 410에서 EA 값의 증분을 반복하는 것을 계속한다(예컨대, VAR = 1에서 VAR = 2로 변경하는 것 등).
그렇지 않다면, 도 5에 예시된, 단계들(420)에서의 단계(422)에서, 방법은, EA 값이 벡터 레인들의 벡터 레인에서 요소들의 수와 같을 때, VFR 값을 변경하는 것을 포함한다.
예를 들어, 제 1 벡터 레지스터 레인(301)에 대한 EA 값이 제 4 요소로 참조 표시한, "3"이면, EA 값은 대표하여 레인에서 요소들 중 4와 같으며; 따라서 제 1 벡터 레지스터 레인(301)에 대한 VFR 값은 단계 422에서 변경된다. 이러한 예를 이용하여, 두 개의 레인들이 있는 경우에, 레인의 VFR에 대한 "0"의 값은 ALU가 각각의 멀티플렉서를 통해 상기 레인으로부터 요소들을 액세스한다는 것을 나타낼 수 있는 반면, 레인의 VFR에 대한 "1"의 값은 각각의 멀티플렉서를 통해 다른 레인으로부터 요소들을 액세스한다는 것을 나타낼 수 있다. 동작들 및 파라미터들의 이러한 예시적인 조합은 다수의 레인들에서 벡터 우선 프로세싱을 위해 제공할 수 있다.
단계 (424)에서, 방법(400)은, 도 5의 서브-단계들(420)에서, 인덱스에서, EA 값을 리셋하는 것을 계속한다. 예를 들어, 리셋은 레인에 4개의 요소들이 있을 때, 레인의 EA 값을 "3"에서 "0"으로 변경하는 것을 포함할 수 있다.
단계 (426)에서, 방법(400)은 변경된 VFR 값 및 리셋된 EA 값에 따라, 벡터 레인들을 액세스하기 위해 사용되는 상이한 초기 어드레스들을 결정하는 것을 계속한다. 예를 들어, VFR 값이 변하였을 때 두 개의 레인들 중 두 번째에 대한 ALU 입력에 의해 두 개의 레인들 중 첫 번째의 초기 요소를 액세스하기 위해 사용될 수 있는, 도 3 및 도 6에서의 전체 어드레스 "Element_0_0"을 참조하며, VFR 값이 변하였을 때 제 1 레인에 대한 ALU 입력에 의해 제 2 레인의 초기 어드레스를 액세스하기 위해 사용될 수 있는, 도 3 및 도 6에서의 전체 어드레스 "Element_1_0"을 참조하자.
단계 (428)에서, 방법(400)은 ALU들에 의해(예컨대, 도 3에 도시된 2:1 멀티플렉서들(309 및 311)을 통해, 또는 도 6에 도시된 4:1 멀티플렉서들(505a, 505b, 505c, 및 505d)을 통해), 상이한 초기 어드레스들에 따라 벡터 레인들을 액세스하는 것을 계속한다. 몇몇 실시예들에서, 어드레스들은 멀티플렉서들을 적어도 부분적으로 제어하며 벡터 레인들로 액세스하기 위해 사용된다 - 예컨대, 각각의 레인에 대한 VFR 값 및 어드레스는 대응하는 멀티플렉서에 대한 입력 선택을 제어하며 벡터 레인들로 액세스하기 위해 조합하여 사용될 수 있다.
단계 (430)에서, 방법(400)은 리셋된 EA 값을 증분하는 것(예컨대, VAR = 0에서 VAR = 1로 변경하는 것, VAR = 1 에서 VAR = 2로 변경하는 것 등)을 계속한다.
단계 432에서, 방법(400)은 변경된 VFR 값 및 증분된 EA 값에 따라, 각각의 벡터 레인들을 액세스하기 위해 사용되는 상이한 다음 어드레스들을 결정하는 것을 계속한다. 예를 들어, VFR 값이 변하였을 때 두 개의 레인들 중 두 번째에 대한 ALU 입력에 의해 두 개의 레인들 중 첫 번째의 다음 요소를 액세스하기 위해 사용될 수 있는 전체 어드레스 "Element_0_1"을 참조하며, VFR 값이 변하였을 때 제 1 레인에 대한 ALU 입력에 의해 제 2 레인의 다음 요소를 액세스하기 위해 사용될 수 있는 전체 어드레스 "Element_1_1"을 참조하자.
단계 (434)에서, 방법(400)은 ALU들에 의해(예컨대, 도 3에 도시된 2:1 멀티플렉서들(309 및 311)을 통해 또는 도 6에 도시된 4:1 멀티플렉서들(505a, 505b, 505c, 및 505d)을 통해), 상이한 다음 어드레스들에 따라 벡터 레인들을 액세스하는 것을 계속한다. 몇몇 실시예들에서, 어드레스들은 멀티플렉서들을 적어도 부분적으로 제어하며 벡터 레인들로 액세스하기 위해 사용된다 - 예컨대, 각각의 레인에 대한 VFR 값 및 어드레스는 대응하는 멀티플렉서에 대한 입력 선택을 제어하며 벡터 레인들로 액세스하기 위해 조합하여 사용될 수 있다.
단계 (436)에서, 방법(400)은 EA 값이 벡터 레인들 중 하나에서의 요소들의 수와 같은지를 결정하는 것을 계속한다. EA 값이 벡터 레인들의 벡터 레인에서 요소들의 수와 같지 않을 때, 방법(400)은 단계(430)에서 EA 값을 증분하는 것(예컨대, VAR = 1에서 VAR = 2로 변경하는 것 등)을 반복하는 것을 계속한다.
그렇지 않다면, 단계 438에서, 방법(400)은, EA 값이 벡터 레인들의 벡터 레인에서 요소들의 수와 같을 때, 종료하거나 또는 VFR 값을 변경하는 것을 포함한다. 그 후, 방법(400)은 새로운 데이터에 대해 반복될 수 있다.
언급된 바와 같이, 각각의 벡터 레인들의 수는 2일 수 있다(예컨대, 벡터 우선 시스템(300)이 2개의 레인들을 가진 다수의 레인 벡터를 위한 것인 도 3을 참조하자). 이러한 예들에서, VFR 값의 제공은 벡터 프로세서의 산술 논리 유닛(ALU)에 대한 제 1 벡터 레인을 위한 벡터 레지스터의 벡터 우선 레지스터(VFR)에 의해, 제 1 ALU에 대한 복수의 벡터 레인들 중 제 1 벡터 레인을 액세스하기 위해 사용된 VFR 값을 제공하는 것을 포함할 수 있다. 또한, 이러한 예들에서, VFR 값의 제공은 제 2 ALU에 대한 제 2 벡터 레인을 위한 VFR 값을 제공하는 것을 포함할 수 있으며, 상기 VFR 값은 복수의 벡터 레인들 중 제 2 벡터 레인을 액세스하기 위해 사용된다.
또한, 마지막에 언급된 예들에서, 초기 어드레스들의 결정은, VFR 값 및 요소 어드레스 값에 따라, 제 1 벡터 레인을 액세스하기 위해 사용되는 제 1 초기 어드레스를 결정하는 것을 포함할 수 있다. 초기 어드레스들의 결정은 또한 VFR 값 및 요소 어드레스 값에 따라, 제 2 벡터 레인을 액세스하기 위해 사용되는 제 2 초기 어드레스를 결정하는 것을 포함할 수 있다. 초기 어드레스들에 따른 벡터 레인들의 액세스는, ALU들 중 제 1 ALU에 의해, 제 1 초기 어드레스에 따라 제 1 벡터 레인을 액세스하는 것을 포함할 수 있다. 그리고, 초기 어드레스들에 따른 벡터 레인들의 액세스는 ALU들 중 제 2 ALU에 의해, 제 2 초기 어드레스에 따른 제 2 벡터 레인을 액세스하는 것을 포함할 수 있다.
또한, 마지막에 언급된 예들에서, 다음 어드레스들의 결정은, VFR 값 및 증분된 요소 어드레스 값에 따라, 복수의 벡터 레인들의 벡터 레인을 액세스하기 위해 사용되는 제 1 다음 어드레스를 결정하는 것을 포함할 수 있다. 다음 어드레스들의 결정은 또한 VFR 값 및 증분된 요소 어드레스 값에 따라, 복수의 벡터 레인들의 벡터 레인을 액세스하기 위해 사용되는 제 2 다음 어드레스를 결정하는 것을 포함할 수 있다. 다음 어드레스들에 따른 벡터 레인들의 액세스는 제 1 ALU에 의해, 제 1 다음 어드레스에 따라 제 1 벡터 레인을 액세스하는 것을 포함할 수 있다. 또한, 이러한 예들에서, 다음 어드레스들에 따른 벡터 레인들의 액세스는 제 2 ALU에 의해, 제 2 다음 어드레스에 따라 제 2 벡터 레인을 액세스하는 것을 포함할 수 있다.
또한, 마지막에 언급된 예들에서, 상이한 초기 어드레스들의 결정은, 변경된 VFR 값 및 리셋된 요소 어드레스 값에 따라, 제 2 벡터 레인을 액세스하기 위해 사용되는 상이한 제 1 초기 어드레스를 결정하는 것을 포함할 수 있다. 또한, 상이한 각각의 초기 어드레스들의 결정은 변경된 VFR 값 및 리셋된 요소 어드레스 값에 따라, 제 1 벡터 레인을 액세스하기 위해 사용되는 상이한 제 2 초기 어드레스를 결정하는 것을 포함할 수 있다. 이러한 인스턴스들에서, 상이한 초기 어드레스들에 따라 벡터 레인들을 액세스하는 것은, 제 1 ALU에 의해, 상이한 제 1 초기 어드레스에 따라 제 2 벡터 레인을 액세스하는 것을 포함할 수 있다. 벡터 레인들의 이러한 액세스는 또한 제 2 ALU에 의해, 상이한 제 2 초기 어드레스에 따라 제 1 벡터 레인을 액세스하는 것을 포함할 수 있다.
또한, 마지막에 언급된 예들에서, 상이한 다음 어드레스들의 결정은, 변경된 VFR 값 및 증분된 요소 어드레스 값에 따라, 제 2 벡터 레인을 액세스하기 위해 사용되는 상이한 제 1 다음 어드레스를 결정하는 것을 포함할 수 있다. 상이한 다음 어드레스들의 결정은 또한, 변경된 VFR 값 및 증분된 요소 어드레스 값에 따라, 제 1 벡터 레인을 액세스하기 위해 사용되는 상이한 제 2 다음 어드레스를 결정하는 것을 포함할 수 있다. 이러한 인스턴스들에서, 상이한 다음 어드레스들에 따른 벡터 레인들의 액세스는, 제 1 ALU에 의해, 상이한 제 1 다음 어드레스에 따라 제 2 벡터 레인을 액세스하는 것을 포함할 수 있다. 또한, 각각의 벡터 레인들의 이러한 액세스는 제 2 ALU에 의해, 상이한 제 2 다음 어드레스에 따라 제 1 벡터 레인을 액세스하는 것을 포함할 수 있다.
언급된 바와 같이, 본 출원에서 설명된 값들에 대한 적어도 결정들, 증분들, 및 변화들은 벡터 로드 저장 유닛에 저장된 명령들에 따라 벡터 프로세서의 벡터 로드 저장 유닛에 의해 수행될 수 있다.
또한, 몇몇 실시예들에서, 벡터 프로세서는 레지스터가 4개의 레인들을 포함하도록(예컨대, 도 6에 예시된 벡터 레지스터 레인들(501a, 501b, 501c, 및 501d) 참조) 제 1 벡터 레지스터의 두 개의 부가적인 레인들에 대한 제 3 벡터 레지스터 레인 및 제 4 벡터 레지스터 레인을 포함할 수 있다. 제 3 및 제 4 벡터 레지스터 레인들을 위하며 그것과 함께 동작하는 컴포넌트들은 본 출원에서 설명된 제 1 및 제 2 벡터 레지스터 레인들을 위하며 그것과 함께 동작하는 컴포넌트들과 유사할 수 있다.
도 6은 본 개시의 몇몇 실시예들에 따른, 4개의 레인들을 가진 예시적인 벡터 우선 시스템(500)을 예시한다. 벡터 우선 시스템(500)은 벡터 우선 시스템(300)과 다소 유사하지만; 시스템(500)은 레지스터가 4개의 레인들(예컨대, 벡터 레지스터 레인들(501a, 501b, 501c, 및 501d) 참조)을 포함하도록 제 1 벡터 레지스터의 2개의 부가적인 레인들에 대한 제 3 벡터 레지스터 레인 및 제 4 벡터 레지스터 레인을 추가로 포함한다.
도 6에서, ALU들(예컨대, ALU들(504a, 504b, 504c, 및 504d)은 제 1 및 제 2 벡터 레지스터들의 제 3 레인 입력들 및 제 4 레인 입력들을 추가로 포함한다. 제 1 레인 입력(예컨대, 레인 입력(507a))은 제 1 벡터 레지스터의 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 전달된 출력에 대한 것이다. 제 2 레인 입력(예컨대, 레인 입력(509a))은 제 1 벡터 레지스터의 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 전달된 출력에 대한 것이다. 제 3 레인 입력(예컨대, 레인 입력(511a))은 제 1 벡터 레지스터의 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 전달된 출력에 대한 것이다. 그리고, 제 4 레인 입력(예컨대, 레인 입력(513a))은 제 1 벡터 레지스터의 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 전달된 출력에 대한 것이다. 달리 말하면, ALU는 각각 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 전달된 정보를 수신할 수 있는 제 1 벡터 레지스터로부터 4개의 레인 입력들을 갖는다. 그러나, 4개의 레인 입력들의 각각은 각각의 벡터 레인에 속하는 각각의 멀티플렉서의 각각의 출력을 고유하게 인터페이싱한다. 몇몇 실시예들에서, ALU들의 각각은 ALU의 적어도 하나의 함수 및 제 1 및 제 2 벡터 레지스터들의 동일한 레인들의 레인 입력들에 기초한 ALU 출력을 포함한다 - 예컨대, ALU 출력들(514a, 514b, 514c, 및 514d)을 참조하자.
또한, ALU들(예컨대, ALU들(504a, 504b, 504c, 및 504d))은 제 1 및 제 2 벡터 레지스터들(ALU에 대한 레인 입력들인 출력들 - 예컨대, 507b, 509b, 511b, 및 513b 참조 - 을 제외하고 제 2 벡터 레지스터의 부분들은 도시되지 않는다)에 대한 제 3 레인 입력들 및 제 4 레인 입력들을 추가로 포함한다. 제 1 레인 입력(예컨대, 레인 입력(507b))은 제 2 벡터 레지스터의 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 전달된 출력에 대한 것이다. 제 2 레인 입력(예컨대, 레인 입력(509b))은 제 2 벡터 레지스터의 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 전달된 출력에 대한 것이다. 제 3 레인 입력(예컨대, 레인 입력(511b))은 제 2 벡터 레지스터의 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 전달된 출력에 대한 것이다. 그리고, 제 4 레인 입력(예컨대, 레인 입력(513b))은 제 2 벡터 레지스터의 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 전달된 출력에 대한 것이다. 달리 말하면, ALU는 각각이 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 전달된 정보를 수신할 수 있는 제 2 벡터 레지스터로부터의 4개의 레인 입력들을 갖는다. 유사하게, 4개의 레인 입력들의 각각은 각각의 벡터 레인에 속하는 각각의 멀티플렉서의 각각의 출력을 고유하게 인터페이싱한다. 몇몇 실시예들에서, ALU들의 각각은 ALU의 적어도 하나의 함수 및 제 1 및 제 2 벡터 레지스터들의 동일한 레인들의 레인 입력들에 기초하는 ALU 출력을 포함한다 - 예컨대, ALU 출력들(514a, 514b, 514c, 및 514d)을 참조하자.
도시된 바와 같이, 벡터 우선 시스템(500)을 이용하여, 제 1의 2:1 멀티플렉서는 제 1의 4:1 멀티플렉서(505a)로 대체되며, 제 2의 2:1 멀티플렉서는 제 2의 4:1 멀티플렉서(505b)로 대체된다. 시스템(500)은 또한 제 3의 4:1 멀티플렉서(505c) 및 제 4의 4:1 멀티플렉서(505d)를 포함한다.
제 1의 4:1 멀티플렉서(505a)는, 입력들(예컨대, 입력들(506))로서, 제 1, 제 2, 제 3, 및 제 4 벡터 레지스터 레인들로부터 출력들을 수신하도록 구성될 수 있다. 제 1의 4:1 멀티플렉서(505a)는 또한, 선택 입력(예컨대, 선택 입력(524a))으로서, VFR 값을 수신하도록 구성될 수 있다. 몇몇 예들에서, 제 1의 4:1 멀티플렉서에 대한 선택 입력은 스칼라 레지스터(예컨대, 스칼라 레지스터들(515)의 스칼라 레지스터)의 출력으로부터 수신된다. 제 1의 4:1 멀티플렉서(505a)는 또한 선택 입력에 기초하여 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 출력을 선택하며, 선택된 출력을 ALU의 제 1 레인 입력(예컨대, 입력(507a) 참조)으로 전달하도록 구성될 수 있다.
제 2의 4:1 멀티플렉서(505b)는 입력들(예컨대, 입력들(508))로서, 제 1, 제 2, 제 3, 및 제 4 벡터 레지스터 레인들로부터 출력들을 수신하도록 구성될 수 있다. 제 2의 4:1 멀티플렉서(505b)는 또한, 선택 입력(예컨대, 선택 입력(524b))으로서, VFR 값을 수신하도록 구성될 수 있다. 몇몇 예들에서, 제 2의 4:1 멀티플렉서에 대한 선택 입력은 스칼라 레지스터(예컨대, 스칼라 레지스터들(515)의 스칼라 레지스터)의 출력으로부터 수신된다. 제 2의 4:1 멀티플렉서(505b)는 또한, 선택 입력에 기초하여 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 출력을 선택하며, 선택된 출력을 ALU의 제 2 레인 입력(예컨대, 입력(509a) 참조)으로 전달하도록 구성될 수 있다.
제 3의 4:1 멀티플렉서(505c)는 입력들(예컨대, 입력들(510))로서, 제 1, 제 2, 제 3, 및 제 4 벡터 레지스터 레인들로부터 출력들을 수신하도록 구성될 수 있다. 제 3의 4:1 멀티플렉서(505c)는 또한, 선택 입력(예컨대, 선택 입력(524c))으로서, VFR 값을 수신하도록 구성될 수 있다. 몇몇 예들에서, 제 3의 4:1 멀티플렉서에 대한 선택 입력은 스칼라 레지스터(예컨대, 스칼라 레지스터들(515)의 스칼라 레지스터)의 출력으로부터 수신된다. 제 3의 4:1 멀티플렉서(505c)는 또한 선택 입력에 기초하여 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 출력을 선택하며, 선택된 출력을 ALU의 제 3 레인 입력(예컨대, 입력(511a) 참조)으로 전달하도록 구성될 수 있다.
제 4의 4:1 멀티플렉서(505d)는 입력들(예컨대, 입력들(512))로서, 제 1, 제 2, 제 3, 및 제 4 벡터 레지스터 레인들로부터 출력들을 수신하도록 구성된다. 제 4의 4:1 멀티플렉서(505d)는 또한, 선택 입력(예컨대, 선택 입력(524d))으로서, VFR 값을 수신하도록 구성된다. 몇몇 예들에서, 제 4의 4:1 멀티플렉서에 대한 선택 입력은 스칼라 레지스터(예컨대, 스칼라 레지스터들(515)의 스칼라 레지스터)의 출력으로부터 수신된다. 제 4의 4:1 멀티플렉서(505d)는 또한 선택 입력에 기초하여 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 출력을 선택하며, 선택된 출력을 ALU의 제 4 레인 입력(예컨대, 입력(513a) 참조)으로 전달하도록 구성된다.
또한, 스칼라 레지스터들(515)은 프로그램 가능한 스칼라 레지스터들을 포함할 수 있다. 프로그램 가능한 스칼라 레지스터는 벡터 레지스터(예컨대, 레인들(501a, 501b, 501c, 및 501d)을 가진 벡터 레지스터)에 의해 제공된 벡터가 프로그램 가능한 스칼라 레지스터들 중 하나에 의해 제공된 스칼라에 의해 연산되며 그것으로 프로그램될 수 있도록 하기 위해 사용될 수 있다. 예를 들어, 연산들 중 하나는 스칼라 값으로 곱한 벡터(예컨대, 벡터 A(i) × 스칼라(p))를 포함할 수 있다.
앞서 말한 상세한 설명들의 몇몇 부분들은 컴퓨터 메모리 내에서 데이터 비트들에 대한 동작들의 알고리즘들 및 심볼 표현들에 대하여 제공되었다. 이들 알고리즘 설명들 및 표현들은 그들의 작업의 본질을 이 기술분야에서의 다른 숙련자들에게 가장 효과적으로 전달하기 위해 데이터 프로세싱 기술들에서의 숙련자들에 의해 사용된 방식들이다. 알고리즘은, 여기에서, 일반적으로, 원하는 결과를 이끄는 동작들의 자기-일관형 시퀀스인 것으로 지각된다. 동작들은 물리적 수량들의 물리적 조작들을 요구하는 것들이다. 보통, 반드시는 아니지만, 이들 수량들은 저장되고, 조합되고, 비교되며, 그 외 조작될 수 있는 전기 또는 자기 신호들의 형태를 취한다. 때로는, 주로, 비트들, 값들, 요소들, 심볼들, 문자들, 용어들, 숫자들 등으로서 이들 신호들을 나타내는 것이, 주로 일반적인 사용을 위해 편리하다고 증명되어 왔다.
그러나, 이들 및 유사한 용어들 모두는 적절한 물리적 수량들과 연관될 것이며 단지 이들 수량들에 적용된 편리한 라벨들이라는 것을 유념해야 한다. 본 개시는 컴퓨터 시스템의 레지스터들 및 메모리들 내에서의 물리적 (전자) 수량들로서 표현된 데이터를 조작하며 이를 컴퓨터 시스템 메모리들 또는 레지스터들 또는 다른 이러한 정보 저장 시스템들 내에서의 물리적 수량들로서 유사하게 표현된 다른 데이터로 변환하는 컴퓨터 시스템, 또는 유사한 전자 컴퓨팅 디바이스의 동작 및 프로세스들을 나타낼 수 있다.
본 개시는 또한 본 출원에서 동작들을 수행하기 위한 장치에 관한 것이다. 이러한 장치는 의도된 목적들을 위해 특수하게 구성될 수 있거나, 또는 그것은 컴퓨터에 저장된 컴퓨터 프로그램에 의해 선택적으로 활성화되거나 또는 재구성된 컴퓨터를 포함할 수 있다. 이러한 컴퓨터 프로그램은 이에 제한되지 않지만, 각각이 컴퓨터 시스템 버스에 결합된, 플로피 디스크들, 광학 디스크들, CD-ROM들, 및 자기-광학 디스크들, 판독-전용 메모리들(ROM들), 랜덤 액세스 메모리들(RAM들), EPROM들, EEPROM들, 자기 또는 광학 카드들, 또는 전자 명령들을 저장하는데 적합한 임의의 유형의 미디어와 같은, 컴퓨터 판독 가능한 저장 매체에 저장될 수 있다.
본 출원에서 제공된 알고리즘들 및 디스플레이들은 본질적으로 임의의 특정한 컴퓨터 또는 다른 장치와 관련되지 않는다. 다양한 시스템들은 본 출원에서의 교시들에 따라 프로그램들과 함께 사용될 수 있거나, 또는 그것은 방법을 수행하기 위해 더 특수화된 장치를 구성하는 것이 편리하다는 것을 증명할 수 있다. 다양한 이들 시스템들을 위한 구조는 이하에서의 설명에서 제시된 것처럼 보일 것이다. 또한, 본 개시는 임의의 특정한 프로그래밍 언어를 참조하여 설명되지 않는다. 다양한 프로그래밍 언어들은 본 출원에서 설명된 바와 같이 본 개시의 교시들을 구현하기 위해 사용될 수 있다는 것이 이해될 것이다.
본 개시는 본 개시에 따른 프로세스를 수행하도록 컴퓨터 시스템(또는 다른 전자 디바이스들)을 프로그램하기 위해 사용될 수 있는, 명령들을 저장한 기계-판독 가능한 매체를 포함할 수 있는, 컴퓨터 프로그램 제품, 또는 소프트웨어로서 부분적으로 제공될 수 있다. 기계-판독 가능한 매체는 기계(예컨대, 컴퓨터)에 의해 판독 가능한 형태로 정보를 저장하기 위한 임의의 메커니즘을 포함한다. 몇몇 실시예들에서, 기계-판독 가능한(예컨대, 컴퓨터-판독 가능한) 매체는 판독 전용 메모리("ROM"), 랜덤 액세스 메모리("RAM"), 자기 디스크 저장 미디어, 광학 저장 미디어, 플래시 메모리 컴포넌트들 등과 같은 기계(예컨대, 컴퓨터) 판독 가능한 저장 매체를 포함한다.
앞서 말한 명세서에서, 본 개시의 실시예들은 그것의 특정한 예시적인 실시예들을 참조하여 설명되었다. 다양한 수정들이 다음의 청구항들에서 제시된 바와 같이 본 개시의 실시예들의 더 넓은 사상 및 범위로부터 벗어나지 않고 그것에 대해 이루어질 수 있다는 것이 명백할 것이다. 명세서 및 도면들은, 따라서, 제한적인 의미보다는 예시적인 의미로 간주된다.

Claims (20)

  1. 방법에 있어서,
    제 1 및 제 2 벡터 레지스터들 각각은 벡터 프로세서의 다수의 산술 논리 유닛들(ALU들)로 입력을 제공하고, 상기 제 1 및 제 2 벡터 레지스터들의 각각은 다수의 레인(lane)들을 포함하며, 레지스터당 상기 레인들의 수는 2의 거듭제곱(power)이고 상기 제 1 및 제 2 벡터 레지스터들로부터 입력을 수신하는 ALU들의 수와 같으며;
    상기 제 1 및 제 2 벡터 레지스터의 각각의 벡터 레지스터에 대해,
    벡터 우선 레지스터(VFR)에 의해, 상기 레인들을 액세스하기 위해 사용된 벡터 우선 레지스터 값(VFR 값)을 제공하는 단계;
    상기 레인들의 인덱스에 의해, 요소 어드레스 값(EA 값)을 제공하는 단계;
    상기 VFR 값 및 상기 EA 값에 따라, 상기 레인들을 액세스하기 위해 사용되는 초기 어드레스들을 결정하는 단계;
    ALU들에 의해, 상기 초기 어드레스들에 따라 상기 레인들을 액세스하는 단계;
    상기 EA 값을 증분하는 단계;
    상기 VFR 값 및 상기 증분된 EA 값에 따라, 상기 레인들을 액세스하기 위해 사용되는 다음 어드레스들을 결정하는 단계;
    상기 ALU들에 의해, 상기 다음 어드레스들에 따라 상기 레인들을 액세스하는 단계;
    상기 EA 값의 증분을 반복하는 단계;
    상기 EA 값이 상기 레인들 중 하나의 레인에서 요소들의 수와 같을 때, 상기 VFR 값을 변경하는 단계;
    상기 인덱스에서, 상기 EA 값을 리셋하는 단계;
    상기 변경된 VFR 값 및 상기 리셋된 EA 값에 따라, 상기 레인들을 액세스하기 위해 사용되는 상이한 초기 어드레스들을 결정하는 단계;
    상기 ALU들에 의해, 상기 상이한 초기 어드레스들에 따라 상기 레인들을 액세스하는 단계;
    상기 리셋된 EA 값을 증분하는 단계;
    상기 변경된 VFR 값 및 상기 증분된 EA 값에 따라, 상기 레인들을 액세스하기 위해 사용되는 상이한 다음 어드레스들을 결정하는 단계; 및
    상기 ALU들에 의해, 상기 상이한 다음 어드레스들에 따라 상기 레인들을 액세스하는 단계를 포함하는, 방법.
  2. 청구항 1에 있어서,
    상기 초기 어드레스들의 결정 단계는,
    상기 VFR 값 및 상기 EA 값에 따라, 상기 레인들의 제 1 레인을 액세스하기 위해 사용되는 제 1 초기 어드레스를 결정하는 단계; 및
    상기 VFR 값 및 상기 EA 값에 따라, 상기 레인들의 제 2 레인을 액세스하기 위해 사용되는 제 2 초기 어드레스를 결정하는 단계를 포함하며,
    상기 초기 어드레스들에 따른 상기 레인들의 액세스 단계는,
    상기 ALU들 중 제 1 ALU에 의해, 상기 제 1 초기 어드레스에 따라 상기 제 1 레인을 액세스하는 단계; 및
    상기 ALU들 중 제 2 ALU에 의해, 상기 제 2 초기 어드레스에 따라 상기 제 2 레인을 액세스하는 단계를 포함하는, 방법.
  3. 청구항 2에 있어서,
    상기 다음 어드레스들의 결정 단계는,
    상기 VFR 값 및 상기 증분된 EA 값에 따라, 상기 제 1 레인을 액세스하기 위해 사용되는 제 1 다음 어드레스를 결정하는 단계; 및
    상기 VFR 값 및 상기 증분된 EA 값에 따라, 상기 제 2 레인을 액세스하기 위해 사용되는 제 2 다음 어드레스를 결정하는 단계를 포함하며;
    상기 다음 어드레스들에 따른 상기 레인들의 액세스 단계는,
    상기 제 1 ALU에 의해, 상기 제 1 다음 어드레스에 따라 상기 제 1 레인을 액세스하는 단계; 및
    상기 제 2 ALU에 의해, 상기 제 2 다음 어드레스에 따라 상기 제 2 레인을 액세스하는 단계를 포함하는, 방법.
  4. 청구항 3에 있어서,
    상기 상이한 초기 어드레스들의 결정 단계는,
    상기 변경된 VFR 값 및 상기 리셋된 EA 값에 따라, 상기 제 2 레인을 액세스하기 위해 사용되는 상이한 제 1 초기 어드레스를 결정하는 단계; 및
    상기 변경된 VFR 값 및 상기 리셋된 EA 값에 따라, 상기 제 1 레인을 액세스하기 위해 사용되는 상이한 제 2 초기 어드레스를 결정하는 단계를 포함하며;
    상기 상이한 초기 어드레스들에 따라 상기 벡터 레인들을 액세스하는 단계는,
    상기 제 1 ALU에 의해, 상기 상이한 제 1 초기 어드레스에 따라 상기 제 2 레인을 액세스하는 단계; 및
    상기 제 2 ALU에 의해, 상기 상이한 제 2 초기 어드레스에 따라 상기 제 1 레인을 액세스하는 단계를 포함하는, 방법.
  5. 청구항 4에 있어서,
    상기 상이한 다음 어드레스들의 결정 단계는,
    상기 변경된 VFR 값 및 상기 증분된 EA 값에 따라, 상기 제 2 레인을 액세스하기 위해 사용되는 상이한 제 1 다음 어드레스를 결정하는 단계; 및
    상기 변경된 VFR 값 및 상기 증분된 EA 값에 따라, 상기 제 1 레인을 액세스하기 위해 사용되는 상이한 제 2 다음 어드레스를 결정하는 단계를 포함하며;
    상기 상이한 각각의 다음 어드레스들에 따른 상기 각각의 벡터 레인들의 액세스 단계는,
    상기 제 1 ALU에 의해, 상기 상이한 제 1 다음 어드레스에 따라 상기 제 2 벡터 레인을 액세스하는 단계; 및
    상기 제 2 ALU에 의해, 상기 상이한 제 2 다음 어드레스에 따라 상기 제 1 벡터 레인을 액세스하는 단계를 포함하는, 방법.
  6. 청구항 1에 있어서,
    상기 벡터 레인들의 수는 4인, 방법.
  7. 청구항 1에 있어서,
    상기 값들에 대한 적어도 상기 결정들, 상기 증분들, 및 상기 변화들은 벡터 로드 저장 유닛에서의 명령들에 따라 상기 벡터 프로세서의 상기 벡터 로드 저장 유닛에 의해 수행되는, 방법.
  8. 벡터 프로세서에 있어서,
    벡터 로드 저장 유닛(vector load-store unit);
    벡터 레지스터들로서, 상기 벡터 레지스터들 중 적어도 하나는 벡터 레지스터의 두 개의 레인들에 대한 제 1 벡터 레지스터 레인 및 제 2 벡터 레지스터 레인을 포함하는, 상기 벡터 레지스터들;
    프로그램 가능한 스칼라 레지스터를 포함한, 스칼라 레지스터들;
    상기 벡터 레지스터의 레인들에 의해 제공된 값들이 상기 프로그램 가능한 스칼라 레지스터에 의해 제공된 값에 의해 연산될 수 있도록 상기 벡터 레지스터 및 상기 프로그램 가능한 스칼라 레지스터에 연결된 제 1 및 제 2 산술 논리 유닛들(ALU들)을 포함한, 상기 ALU들로서,
    상기 제 1 ALU는 상기 제 1 벡터 레지스터 레인 또는 상기 제 2 벡터 레지스터 레인으로부터 전달된 출력에 대한 제 1 레인 입력을 포함하며, 상기 제 2 ALU는 상기 제 1 벡터 레지스터 레인 또는 상기 제 2 벡터 레지스터 레인으로부터 전달된 출력에 대한 제 2 레인 입력을 포함하는, 상기 ALU들; 및
    상기 벡터 로드 저장 유닛, 상기 벡터 레지스터들, 및 상기 산술 논리 유닛들을 통신 가능하게 결합하도록 구성된 버스로서, 상기 버스는,
    제 1의 2:1 멀티플렉서로서,
    입력들로서, 상기 제 1 벡터 레지스터 레인으로부터의 출력 및 제 2 벡터 레지스터 레인으로부터의 출력을 수신하고;
    선택 입력으로서, 벡터 우선 레지스터 값(VFR 값)을 수신하고;
    상기 선택 입력에 기초하여 상기 제 1 벡터 레지스터 레인으로부터의 출력 또는 상기 제 2 벡터 레지스터 레인으로부터의 출력을 선택하며;
    상기 선택된 출력을 상기 제 1 ALU의 제 1 레인 입력으로 전달하도록 구성된, 상기 제 1의 2:1 멀티플렉서; 및
    제 2의 2:1 멀티플렉서로서,
    입력들로서, 상기 제 1 벡터 레지스터 레인으로부터의 출력 및 상기 제 2 벡터 레지스터 레인으로부터의 출력을 수신하고;
    선택 입력으로서, 상기 VFR 값을 수신하고;
    상기 선택 입력에 기초하여 상기 제 1 벡터 레지스터 레인으로부터의 출력 또는 상기 제 2 벡터 레지스터 레인으로부터의 출력을 선택하며;
    상기 선택된 출력을 상기 제 2 ALU의 제 2 레인 입력으로 전달하도록 구성된, 상기 제 2의 2:1 멀티플렉서를 포함하는, 벡터 프로세서.
  9. 청구항 8에 있어서,
    상기 VFR 값을 상기 제 1의 2:1 멀티플렉서 및 상기 제 2의 2:1 멀티플렉서로 제공하도록 구성된 벡터 우선 레지스터(VFR)를 더 포함하는, 벡터 프로세서.
  10. 청구항 9에 있어서,
    요소 어드레스(EA) 값을 제공하도록 구성된 인덱스 레지스터를 더 포함하며,
    상기 벡터 로드 저장 유닛은,
    상기 VFR 값 및 상기 EA 값에 따라, 상기 제 1 벡터 레지스터 레인을 액세스하기 위해 사용되는 제 1 초기 어드레스를 결정하며;
    상기 VFR 값 및 상기 EA 값에 따라, 상기 제 2 벡터 레지스터 레인을 액세스하기 위해 사용되는 제 2 초기 어드레스를 결정하도록 구성되고;
    상기 제 1 ALU는 상기 제 1 초기 어드레스에 따라 상기 제 1 벡터 레지스터 레인을 액세스하도록 구성되며;
    상기 제 2 ALU는 상기 제 2 초기 어드레스에 따라 상기 제 2 벡터 레지스터 레인을 액세스하도록 구성되는, 벡터 프로세서.
  11. 청구항 10에 있어서,
    상기 벡터 로드 저장 유닛은,
    상기 EA 값을 증분하고;
    상기 VFR 값 및 상기 증분된 EA 값에 따라, 상기 제 1 벡터 레지스터 레인을 액세스하기 위해 사용되는 제 1 다음 어드레스를 결정하며;
    상기 VFR 값 및 상기 증분된 EA 값에 따라, 상기 제 2 벡터 레지스터 레인을 액세스하기 위해 사용되는 제 2 다음 어드레스를 결정하도록 구성되고,
    상기 제 1 ALU는 상기 제 1 다음 어드레스에 따라 상기 제 1 벡터 레지스터 레인을 액세스하도록 구성되며;
    상기 제 2 ALU는 상기 제 2 다음 어드레스에 따라 상기 제 2 벡터 레지스터 레인을 액세스하도록 구성되는, 벡터 프로세서.
  12. 청구항 11에 있어서,
    상기 벡터 로드 저장 유닛은,
    상기 EA 값의 증분을 반복하며;
    상기 EA 값이 상기 제 1 벡터 레지스터 레인 또는 상기 제 2 벡터 레지스터에서의 요소들의 수와 같을 때, 상기 VFR 값을 변경하도록 구성되는, 벡터 프로세서.
  13. 청구항 12에 있어서,
    상기 벡터 로드 저장 유닛은,
    상기 인덱스에서, 상기 EA 값을 리셋하고;
    상기 변경된 VFR 값 및 상기 리셋된 EA 값에 따라, 상기 제 2 벡터 레지스터 레인을 액세스하기 위해 사용되는 상이한 제 1 초기 어드레스를 결정하며;
    상기 변경된 VFR 값 및 상기 리셋된 EA 값에 따라, 상기 제 1 벡터 레지스터 레인을 액세스하기 위해 사용되는 상이한 제 2 초기 어드레스를 결정하도록 구성되고;
    상기 제 1 ALU는 상기 상이한 제 1 초기 어드레스에 따라 상기 제 2 벡터 레지스터 레인을 액세스하도록 구성되며;
    상기 제 2 ALU는 상기 상이한 제 2 초기 어드레스에 따라 상기 제 1 벡터 레지스터 레인을 액세스하도록 구성되는, 벡터 프로세서.
  14. 청구항 13에 있어서,
    상기 벡터 로드 저장 유닛은,
    상기 리셋된 EA 값을 증분하고;
    상기 변경된 VFR 값 및 상기 증분된 EA에 따라, 상기 제 2 벡터 레지스터 레인을 액세스하기 위해 사용되는 상이한 제 1 다음 어드레스를 결정하며;
    상기 변경된 VFR 값 및 상기 증분된 EA에 따라, 상기 제 1 벡터 레지스터 레인을 액세스하기 위해 사용되는 상이한 제 2 다음 어드레스를 결정하도록 구성되고;
    상기 제 1 ALU는 상기 상이한 제 1 다음 어드레스에 따라 상기 제 2 벡터 레지스터 레인을 액세스하도록 구성되며;
    상기 제 2 ALU는 상기 상이한 제 2 다음 어드레스에 따라 상기 제 1 벡터 레지스터 레인을 액세스하도록 구성되는, 벡터 프로세서.
  15. 청구항 8에 있어서,
    상기 벡터 레지스터의 두 개의 부가적인 레인들에 대한 제 3 벡터 레지스터 레인 및 제 4 벡터 레지스터 레인을 더 포함하여 상기 레지스터는 4개의 레인들을 포함하는, 벡터 프로세서.
  16. 시스템에 있어서,
    제 1 벡터 레지스터의 두 개의 레인들에 대한 제 1 벡터 레지스터 레인 및 제 2 벡터 레지스터 레인;
    제 2 벡터 레지스터의 두 개의 레인들에 대한 제 1 벡터 레지스터 레인 및 제 2 벡터 레지스터 레인;
    상기 제 1 및 제 2 벡터 레지스터들의 각각의 레지스터에 대해, 상기 제 1 벡터 레지스터 레인 또는 상기 제 2 벡터 레지스터 레인으로부터 전달된 출력에 대한 제 1 레인 입력을 포함한, 상기 제 1 및 제 2 벡터 레지스터들에 연결된 제 1 산술 논리 유닛(ALU);
    상기 제 1 및 제 2 벡터 레지스터들의 각각의 레지스터에 대해, 상기 제 1 벡터 레지스터 레인 또는 상기 제 2 벡터 레지스터 레인으로부터 전달된 출력에 대한 제 2 레인 입력을 포함한, 상기 제 1 및 제 2 벡터 레지스터들에 연결된 제 2 ALU; 및
    상기 ALU에 상기 제 1 및 제 2 벡터 레지스터들을 연결하도록 구성된 버스로서, 상기 버스는 상기 제 1 및 제 2 벡터 레지스터들의 각각의 레지스터에 대해,
    제 1의 2:1 멀티플렉서로서,
    입력들로서, 상기 제 1 벡터 레지스터 레인으로부터의 출력 및 제 2 벡터 레지스터 레인으로부터의 출력을 수신하고;
    선택 입력으로서, 벡터 우선 레지스터 값(VFR 값)을 수신하고;
    상기 선택 입력에 기초하여 상기 제 1 벡터 레지스터 레인으로부터의 출력 또는 상기 제 2 벡터 레지스터 레인으로부터의 출력을 선택하며;
    상기 선택된 출력을 상기 제 1 ALU의 제 1 레인 입력으로 전달하도록 구성된, 상기 제 1의 2:1 멀티플렉서; 및
    제 2의 2:1 멀티플렉서로서,
    입력들로서, 상기 제 1 벡터 레지스터 레인으로부터의 출력 및 상기 제 2 벡터 레지스터 레인으로부터의 출력을 수신하고;
    선택 입력으로서, 상기 VFR 값을 수신하고;
    상기 선택 입력에 기초하여 상기 제 1 벡터 레지스터 레인으로부터의 출력 또는 상기 제 2 벡터 레지스터 레인으로부터의 출력을 선택하며;
    상기 선택된 출력을 상기 제 2 ALU의 제 2 레인 입력으로 전달하도록 구성된, 상기 제 2의 2:1 멀티플렉서를 포함하는, 시스템.
  17. 청구항 16에 있어서,
    상기 제 1 및 제 2 벡터 레지스터들의 각각의 레지스터에 대해, 상기 시스템은 상기 벡터 레지스터의 두 개의 부가적인 레인들에 대한 제 3 벡터 레지스터 레인 및 제 4 벡터 레지스터 레인을 더 포함하여 상기 레지스터가 4개의 레인들을 포함하고, 상기 4개의 레인들의 각각에 대한 ALU가 있는, 시스템.
  18. 청구항 17에 있어서,
    상기 4개의 ALU들의 각각의 ALU는 각각의 레인 입력을 포함하며, 상기 각각의 레인 입력은 상기 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 전달된 출력을 위한 것인, 시스템.
  19. 청구항 18에 있어서,
    상기 제 1의 2:1 멀티플렉서는 제 1의 4:1 멀티플렉서로 대체되고, 상기 제 2의 2:1 멀티플렉서는 제 2의 4:1 멀티플렉서로 대체되며, 상기 시스템은 제 3의 4:1 멀티플레서 및 제 4의 4:1 멀티플렉서를 더 포함하는, 시스템.
  20. 청구항 19에 있어서,
    상기 제 1의 4:1 멀티플렉서는,
    입력들로서, 상기 제 1, 제 2, 제 3, 및 제 4 벡터 레지스터 레인들로부터 출력들을 수신하고,
    선택 입력으로서, 상기 VFR 값을 수신하고;
    상기 선택 입력에 기초하여 상기 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 상기 출력을 선택하며;
    상기 선택된 출력을 상기 4개의 ALU들 중 제 1 ALU의 제 1 레인 입력으로 전달하도록 구성되고;
    상기 제 2의 4:1 멀티플렉서는,
    입력들로서, 상기 제 1, 제 2, 제 3, 및 제 4 벡터 레지스터 레인들로부터 출력들을 수신하고;
    선택 입력으로서, 상기 VFR 값을 수신하고;
    상기 선택 입력에 기초하여, 상기 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 상기 출력을 선택하며;
    상기 선택된 출력을 상기 4개의 ALU들 중 제 2 ALU의 제 2 레인 입력으로 전달하도록 구성되고;
    상기 제 3의 4:1 멀티플렉서는,
    입력들로서, 상기 제 1, 제 2, 제 3, 및 제 4 벡터 레지스터 레인들로부터 출력들을 수신하고;
    선택 입력으로서, 상기 VFR 값을 수신하고;
    상기 선택 입력에 기초하여 상기 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 상기 출력을 선택하며;
    상기 선택된 출력을 상기 4개의 ALU들 중 제 3 ALU의 제 3 레인 입력으로 전달하도록 구성되며;
    상기 제 4의 4:1 멀티플렉서는,
    입력들로서, 상기 제 1, 제 2, 제 3, 및 제 4 벡터 레지스터 레인들로부터 출력을 수신하고;
    선택 입력으로서, 상기 VFR 값을 수신하고;
    상기 선택 입력에 기초하여 상기 제 1, 제 2, 제 3, 또는 제 4 벡터 레지스터 레인으로부터 상기 출력을 선택하며;
    상기 선택된 출력을 상기 4개의 ALU들 중 제 4 ALU의 제 4 레인 입력으로 전달하도록 구성되는, 시스템.
KR1020217023470A 2019-03-18 2020-03-03 벡터 우선 및 다수의 레인 구성을 가진 벡터 프로세서 KR20210096684A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/356,146 2019-03-18
US16/356,146 US10877925B2 (en) 2019-03-18 2019-03-18 Vector processor with vector first and multiple lane configuration
PCT/US2020/020780 WO2020190501A1 (en) 2019-03-18 2020-03-03 Vector processor with vector first and multiple lane configuration

Publications (1)

Publication Number Publication Date
KR20210096684A true KR20210096684A (ko) 2021-08-05

Family

ID=72516018

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217023470A KR20210096684A (ko) 2019-03-18 2020-03-03 벡터 우선 및 다수의 레인 구성을 가진 벡터 프로세서

Country Status (5)

Country Link
US (2) US10877925B2 (ko)
EP (1) EP3942424A4 (ko)
KR (1) KR20210096684A (ko)
CN (1) CN113366462A (ko)
WO (1) WO2020190501A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10877925B2 (en) 2019-03-18 2020-12-29 Micron Technology, Inc. Vector processor with vector first and multiple lane configuration
US11327862B2 (en) * 2019-05-20 2022-05-10 Micron Technology, Inc. Multi-lane solutions for addressing vector elements using vector index registers
CN113608786B (zh) * 2021-10-09 2022-02-18 苏州浪潮智能科技有限公司 一种向量读写方法、向量寄存器系统、设备及介质

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6088783A (en) * 1996-02-16 2000-07-11 Morton; Steven G DPS having a plurality of like processors controlled in parallel by an instruction word, and a control processor also controlled by the instruction word
US6006315A (en) * 1996-10-18 1999-12-21 Samsung Electronics Co., Ltd. Computer methods for writing a scalar value to a vector
US6009505A (en) * 1996-12-02 1999-12-28 Compaq Computer Corp. System and method for routing one operand to arithmetic logic units from fixed register slots and another operand from any register slot
US6446193B1 (en) * 1997-09-08 2002-09-03 Agere Systems Guardian Corp. Method and apparatus for single cycle processing of data associated with separate accumulators in a dual multiply-accumulate architecture
GB2382673B (en) 2001-10-31 2005-10-26 Alphamosaic Ltd A vector processing system
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
US8200945B2 (en) * 2003-11-07 2012-06-12 International Business Machines Corporation Vector unit in a processor enabled to replicate data on a first portion of a data bus to primary and secondary registers
US7493475B2 (en) 2006-11-15 2009-02-17 Stmicroelectronics, Inc. Instruction vector-mode processing in multi-lane processor by multiplex switch replicating instruction in one lane to select others along with updated operand address
US8239438B2 (en) 2007-08-17 2012-08-07 International Business Machines Corporation Method and apparatus for implementing a multiple operand vector floating point summation to scalar function
US8078836B2 (en) * 2007-12-30 2011-12-13 Intel Corporation Vector shuffle instructions operating on multiple lanes each having a plurality of data elements using a common set of per-lane control bits
US20130212354A1 (en) * 2009-09-20 2013-08-15 Tibet MIMAR Method for efficient data array sorting in a programmable processor
US9128531B2 (en) * 2012-02-22 2015-09-08 Arm Limited Operand special case handling for multi-lane processing
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
US10049054B2 (en) * 2015-04-01 2018-08-14 Micron Technology, Inc. Virtual register file
US9720691B2 (en) 2015-09-23 2017-08-01 Qualcomm Incorporated Speculative scalarization in vector processing
US20170177359A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Scatter Operations
US20170185413A1 (en) * 2015-12-23 2017-06-29 Intel Corporation Processing devices to perform a conjugate permute instruction
KR102659495B1 (ko) 2016-12-02 2024-04-22 삼성전자주식회사 벡터 프로세서 및 그 제어 방법
US11880683B2 (en) * 2017-10-31 2024-01-23 Advanced Micro Devices, Inc. Packed 16 bits instruction pipeline
US11055096B2 (en) * 2018-01-05 2021-07-06 Arm Limited Checkpointing of architectural state for in order processing circuitry
US10877925B2 (en) 2019-03-18 2020-12-29 Micron Technology, Inc. Vector processor with vector first and multiple lane configuration

Also Published As

Publication number Publication date
US11907158B2 (en) 2024-02-20
WO2020190501A1 (en) 2020-09-24
US10877925B2 (en) 2020-12-29
EP3942424A4 (en) 2022-12-14
US20210117375A1 (en) 2021-04-22
US20200301875A1 (en) 2020-09-24
CN113366462A (zh) 2021-09-07
EP3942424A1 (en) 2022-01-26

Similar Documents

Publication Publication Date Title
US11907158B2 (en) Vector processor with vector first and multiple lane configuration
EP3566134A1 (en) Multi-function unit for programmable hardware nodes for neural network processing
US11681594B2 (en) Multi-lane solutions for addressing vector elements using vector index registers
US11941402B2 (en) Registers in vector processors to store addresses for accessing vectors
US20120072704A1 (en) &#34;or&#34; bit matrix multiply vector instruction
US20220318186A1 (en) Conditional operations in a vector processor having true and false vector index registers
US20230077404A1 (en) True/false vector index registers and methods of populating thereof
US11768685B2 (en) Processing device with vector transformation execution
GB2580664A (en) Double load instruction
CN112074810A (zh) 并行处理设备
KR20200094771A (ko) 벡터 자리올림이 있는 가산 명령
US20240231831A1 (en) Vector index registers
CN112463717B (zh) 一种粗粒度可重构架构下条件分支实现方法
US20240118811A1 (en) Conflict detection and address arbitration for routing scatter and gather transactions for a memory bank
WO2023009468A1 (en) Apparatus and methods employing a shared read port register file

Legal Events

Date Code Title Description
E902 Notification of reason for refusal