KR20210074276A - 정확한 인터럽트 그리고/또는 덮어 쓰기 기능을 갖는 벡터 명령어 - Google Patents
정확한 인터럽트 그리고/또는 덮어 쓰기 기능을 갖는 벡터 명령어 Download PDFInfo
- Publication number
- KR20210074276A KR20210074276A KR1020217007458A KR20217007458A KR20210074276A KR 20210074276 A KR20210074276 A KR 20210074276A KR 1020217007458 A KR1020217007458 A KR 1020217007458A KR 20217007458 A KR20217007458 A KR 20217007458A KR 20210074276 A KR20210074276 A KR 20210074276A
- Authority
- KR
- South Korea
- Prior art keywords
- vector
- register
- instruction
- registers
- result
- Prior art date
Links
- 239000013598 vector Substances 0.000 title claims abstract description 256
- 238000012545 processing Methods 0.000 claims abstract description 24
- 230000004044 response Effects 0.000 claims abstract description 11
- 238000000034 method Methods 0.000 claims description 16
- 238000013507 mapping Methods 0.000 claims description 12
- 238000013459 approach Methods 0.000 description 6
- 238000003860 storage Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 230000007812 deficiency Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012432 intermediate storage Methods 0.000 description 1
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
- G06F9/38585—Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
-
- G06F9/3859—
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
- G06F9/3869—Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
프로세서는 복수의 벡터 레지스터들을 포함하는 벡터 레지스터 파일, 적어도 하나의 버퍼 레지스터, 및 벡터 레지스터 파일 및 적어도 하나의 버퍼 레지스터에 통신 가능하게 연결되는 벡터 처리 코어를 포함하며, 벡터 처리 코어는: 복수의 벡터 레지스터들 중 제1 벡터 레지스터를 나타내는 제1 식별자, 및 복수의 벡터 레지스터들 중 제2 벡터 레지스터를 나타내는 제2 식별자를 포함하는 벡터 명령어를 수신하고 - 제1 벡터 레지스터는 소스 레지스터이고 제2 벡터 레지스터는 목적지 레지스터임 -, 제1 벡터 레지스터에 저장된 데이터 값들에 기초하여 벡터 명령어를 실행하여 결과를 생성하고 결과를 적어도 하나의 버퍼 레지스터에 저장하며, 제2 벡터 레지스터가 기록하기에 안전하다는 결정에 응답하여, 결과를 적어도 하나의 버퍼 레지스터로부터 제2 벡터 레지스터로 복사하는 것이다.
Description
관련 출원에 대한 상호-참조
본 출원은 2018년 8월 14일에 출원된 미국 가 출원 제62/718,426호의 우선권을 주장하며, 이의 내용은 전문이 참고로 통합된다.
기술분야
본 개시는 컴퓨터 프로세서들에 관한 것으로서, 특히 정확한 인터럽트(precise interrupts) 및/또는 덮어 쓰기(overwrites) 기능을 갖는 벡터 명령어들을 지원하는 프로세서들에 관한 것이다.
벡터 프로세서(배열 프로세서라고도 알려짐)는 운영하는 데이터 요소들의 벡터들에 대해 연산하는 벡터 명령어들을 포함하는 명령어 집합 아키텍처(ISA, instruction set architecture)를 구현하는 하드웨어 처리 디바이스(예를 들어, 중앙 처리 유닛(CPU) 또는 그래픽 처리 유닛(GPU))이다. 벡터는 정렬된 스칼라 데이터 요소들을 포함하는 단방향 배열이다. 비교해서, 스칼라 명령어는 단일 데이터 요소들에 대해 연산한다. 벡터 프로세서들은 다수의 데이터 요소들을 포함하는 벡터들에 대해 연산함으로써, 단일 데이터 요소들에 대해 연산하는 스칼라 명령어들을 지원하는 스칼라 프로세서들에 비해 상당한 성능 향상을 달성할 수 있다.
본 개시는 아래에 주어지는 상세한 설명 및 본 개시 내용의 다양한 실시 예들의 첨부 도면들로부터 보다 완전하게 이해될 것이다. 그러나, 도면들은 본 개시를 특정 실시 예들로 제한하기 위한 것이 아니라, 단지 설명 및 이해를 위한 것이다.
도 1은 본 개시의 구현에 따른 하드웨어 프로세서를 도시한다.
도 2는 본 개시의 구현에 따른 버퍼 레지스터들을 사용하는 벡터 명령어의 예시적인 구현을 도시한다.
도 1은 본 개시의 구현에 따른 하드웨어 프로세서를 도시한다.
도 2는 본 개시의 구현에 따른 버퍼 레지스터들을 사용하는 벡터 명령어의 예시적인 구현을 도시한다.
하드웨어 프로세서에 의해 실행되도록 구현된 벡터 명령어는 특정 데이터 유형의 하나보다 많은 요소들을 포함하는 벡터들에 대한 연산들을 수행하는 명령어이다. 입력 및 출력 데이터는 프로세서와 연관된 하나 이상의 벡터 레지스터에 저장된다. 이러한 벡터 레지스터들은 벡터들의 다수의 데이터 요소들을 홀딩하도록 설계된 저장 유닛들이다. 예시적인 벡터 명령어들은 x86 명령어 집합 아키텍처(ISA)에 지정된 스트리밍 단일 명령어 다중 데이터 확장(SSE, streaming single instruction multiple data extension) 명령어들을 포함한다. ISA의 일부 구현들은 가변 길이 벡터 명령어들을 지원할 수 있다. 가변 길이 벡터 명령어는 명령어에 의해 연산될 벡터의 요소들의 수를 저장하는 레지스터를 지정하는 레지스터 식별자를 포함한다. 가변 길이 벡터 명령어에서의 레지스터를 벡터 길이 레지스터라고 한다.
벡터 명령어들은 프로세서 성능을 상당히 향상시킬 수 있지만, 벡터 명령어들은 잠재적으로 판독 후 기록 데이터 해저드(data hazards)를 겪을 수 있다. 판독 후 기록 데이터 해저드는 다음 예를 사용하여 설명된다. 일례로서, 명령어들에서의 $v0 내지 $v7에 의해 식별되는 여덟(8) 개의 벡터 레지스터들을 지정하는 명령어 집합 아키텍처를 고려한다. 이러한 벡터 레지스터들 각각은 32-바이트 분량의 데이터를 홀딩할 수 있다. 이러한 32 바이트는 상이한 데이터 유형들을 홀딩하기 위해 상이한 방식들로 사용될 수 있다. 예를 들어, 32-바이트 벡터 레지스터의 요소들은 다음과 같이 해석된다:
요소들의 상이한 데이터 유형들은 벡터 레지스터 상에서 접미사를 사용하여 표현될 수 있다. 예를 들어, “_h,”“_w,” 및 “_f"는 레지스터에 저장된 데이터 요소들이 각각 하프, 워드, 및 단정도 부동 소수점 값으로서 처리되어야 함을 나타내는 데 사용될 수 있다. 인덱스 값 [i]는 벡터 레지스터에 저장된 요소 #i를 나타 내는 데 사용될 수 있으며, 0이 첫 번째이다. 이에 따라, $vl_h[3]은 레지스터 $vl의 네 번째 하프 워드이며, 바이트 6 및 7에 저장된다. 일례로서, 벡터 레지스터 유형에서의 상이한 유형들의 레지스터 요소들의 배열은 아래 표 1에 제시된 바와 같다:
표 1에 제시된 바와 같이, 워드 0은 하프 워드 0 및 워드 1이 각각, 바이트 0 내지 바이트 1 및 바이트 2 내지 바이트 3의 위치들에 배치되기 때문에 이들에 의해 점유되는 위치들과 겹치는 바이트 0 내지 바이트 3의 위치들을 점유할 수 있다.
판독 후 기록(WAR, write-after-read) 해저드를 입증하기 위해 두 개의 벡터 명령어들이 사용된다:
이러한 두 명령어들 양자는 소스 벡터 레지스터로부터 판독되고 이 결과들을 목적지 벡터 레지스터에 기록한다.
벡터 부정 부동 소수점(vnegf) 명령어의 의미는 다음과 같다:
for ( i = 0; i < 8; i++ )
vdst_f[i] = -$vsrc_f[i]
벡터 변환 무부호 하프 대 워드 명령어(vcvtuhw)에 대한 의미는 다음과 같다:
for ( i = 0; i < 8; i++ )
$vdst_w[i] = $vsrc_h[i]
vcvtuhw 명령어는 목적지 레지스터가 소스 레지스터와 동일할 때 잠재적인 문제를 가질 수 있다. vcvtuhw $v3, $v3의 경우를 고려한다. 이 경우, 의도는 $v0의 처음 8개의 하프 워드들을 워드들로 변환한 다음, 이것들을 다시 $3에 저장하는 것이다. 그러나 단순한 구현은 잘못된 결과들을 초래할 수 있다. 다음과 같은 간단한 구현을 고려한다:
명령어를 실행하기 위해, 프로세서의 실행 유닛은 $v3의 바이트 0 및 1로부터 하프 워드#0를 판독할 수 있다. 실행 유닛은 바이트 0 및 1에 저장된 하프 워드#0를 바이트 0, 1, 2 및 3의 워드로 확장하고, $v3의 바이트 0, 1, 2 및 3에 기록할 수 있다. 다음으로, 실행 유닛은 $v3의 바이트 2 및 3으로부터 하프 워드#1을 판독할 수 있다. 그러나, 이러한 바이트들은 명령어의 시작시 원래 바이트들이 아니다. 대신, 이것들은 하프 워드#0으로부터 확장된 값에 의해 덮어 써졌다. 이것이 판독 후 기록 해저드(반의존성(anti-dependence)이라고도 함)의 일례이다. 이것은 벡터 명령어가 잠재적인 판독 후 기록 해저드를 가지는 단지 한 가지 예일 뿐이다.
WAR 해저드가 발생하는 것을 방지하는 한 가지 방법은 목적지 레지스터가 벡터 명령어들에 대한 소스 레지스터와 동일한 것을 금지하는 것이다. WAR 해저드를 방지하는 또 다른 방법은 동시 판독을 사용하는 것이다. 마이크로 프로세서는 명령어 실행을 명령어 페치 스테이지, 명령어 디코딩 및 레지스터 판독 스테이지, 하나 이상의 명령어 실행 스테이지, 및 레지스터 재기록 스테이지를 포함하는 여러 파이프라인 스테이지들로 세분될 수 있는 명령어 실행 파이프라인을 포함할 수 있다. 또한, 명령어 실행 파이프라인은 벡터 명령어들에 대해 데이터 값들의 순차적 평가를(즉, 한 번에 하나의 요소씩) 수행하지 않는다. 대신, 명령어 실행 파이프라인은 여러 명령어 블록들을 동시에 연산하고 여러 요소들을 병렬적으로 평가할 수 있다. 실행 블록들의 수가 많고 벡터 길이들이 보통인 프로세서들의 경우, 명령어 실행 파이프라인은 벡터의 모든 요소들을 동시에 판독하고, 이것들을 동시에 처리 한 다음, 모든 값들을 레지스터들에 재기록할 수 있다. 이러한 종류의 구현은 임의의 기록 연산이 발생하기 전에 모든 요소들이 판독되도록 보장할 것이므로, WAR 해저드를 방지한다. 예를 들어, 프로세서가 8개의 실행 블록들을 갖는다면, 프로세서는 다음과 같은 시퀀스를 사용하여 vcvt uh w 명령어를 실행할 수 있다:
기록되기 전에 모든 값들이 판독되므로, vcvt uhw 명령어의 실행은 WAR 해저드를 방지할 수 있다.
특정 판독 연산들 및 기록 연산들을 재배열함으로써 WAR 해저드를 방지하는 것이 가능하다. 예를 들어, vcvt uh w 명령어들의 경우 상술된 바와 같이 파이프라인화되지만 4개의 실행 블록들만 사용한다. 프로세서는 WAR 해저드를 방지하기 위해 다음과 같은 시퀀스에 따라 vcvt uhw를 실행할 수 있다:
일부 구현들은 WAR 해저드를 방지하기 위해 레지스터 재명명을 사용할 수 있다. 레지스터 재명명은 아키텍처화된 레지스터들 및 물리적 레지스터들 간의 매핑들을 변경하는 것을 필요로 한다. ISA는 ISA에 의해 정의된 명령어들에 의해 참조될 수 있는 레지스터들의 집합(아키텍처화된 레지스터들이라고 함)을 지정할 수 있다. 프로세서는 아키텍처화된 레지스터들을 지원하는 데 사용될 수 있는 물리적 레지스터들을 포함할 수 있다. 프로그램은 하나 이상의 아키텍처화된 레지스터를 참조하는 벡터 명령어를 포함할 수 있다. 실행 동안, 프로세서는 첫 번째 벡터 명령어에 의해 호출되는 아키텍처화된 레지스터들 각각을 대응하는 물리적 레지스터들에 할당할 수 있으며, 이에 따라 아키텍처화된 레지스터들과 물리적 레지스터들 간에 첫 번재 매핑을 생성할 수 있다. 하나 이상의 아키텍처화된 레지스터를 참조하는 두 번째 벡터를 호출하는 것에 응답하여, 프로세서는 의도하지 않은 덮어 쓰기 연산의 가능성이 있다면 아키텍처화된 레지스터들과 물리적 레지스터들 간의 매핑을 업데이트할 수 있다. 예를 들어, 프로세서가 두 번째 벡터 명령어에서 첫 번째 아키텍처화된 레지스터의 호출에 의해 첫 번째 아키텍처화된 레지스터에 연결된 첫 번째 물리 레지스터가 덮어 써질 수 있다고 결정한다면, 프로세서는 의도하지 않은 결과를 방지하기 위해 첫 번째 아키텍처화된 레지스터의 매핑을 두 번째 물리적 레지스터로 업데이트할 수 있다. 레지스터 재명명을 구현하려면, 프로세서는 아키텍처화된 레지스터들과 물리적 레지스터들 간의 매핑들을 유지하고 업데이트하는 로직 회로들을 포함해야 할 수 있다. 매핑들을 유지하고 업데이트하는 로직 회로들은 복잡하고 넓은 회로 영역을 점유하며 전력을 소비한다.
상이한 레지스터 재명명 방식들은 다음과 같은 단계들을 포함할 수 있다:
이는 명령어에 지정된 소스 및 타겟 아키텍처화된 레지스터들이 동일하더라도, 이것들이 실제로는 상이한 물리적 레지스터들에 기록하고 상이한 물리적 레지스터들로부터 판독되고 있다는 것을 의미한다. 레지스터 재명명을 구현하는 프로세서는 WAR 해저드는 방지할 수 있지만 큰 회로 영역 및 더 많은 전력 소비가 발생한다.
특정 상황들 하에서, WAR 해저드에 대한 상술된 솔루션들은 만족스럽지 않다. 예를 들어, 역방향 ISA 호환성은 소스 레지스터 및 목적지 레지스터가 동일하지 않도록 금지하는 것을 불가능하게 한다. 벡터들의 길이는 실행 블록들의 수 또는 파이프라인 길이보다 클 수 있다. 이는 벡터가 완전히 판독되지 전에 결과들의 적어도 일부가 재기록되게 한다. 이러한 상황에서는, 기록 전에 판독을 구현하는 것이 불가능하다. 레지스터 재명명은 더 큰 회로 영역 및 더 많은 전력 소비를 필요로 한다. 이에 따라, 저전력 소비 및 소형 풋프린트 프로세서에서는 레지스터 재명명이 이용 가능하지 않을 수 있다.
위에서 확인된 결함들 및 다른 결함들을 극복하기 위해, 본 개시의 구현들은 하나 이상의 추가 버퍼 레지스터로 벡터 레지스터 파일을 증강하고 WAR 해저드를 제거하기 위해 버퍼 레지스터들을 사용하는 기술적 솔루션을 제공한다. 버퍼 레지스터들을 사용함으로써, 본 개시의 구현들은 기존 ISA와의 호환성을 달성하고, 긴 벡터 레지스터들을 허용하며, 레지스터 재명명에 의해 필요한 매핑 로직 회로들을 제거하여 레지스터 재명명 방식에 비해 작은 회로 풋프린트 및 더 적은 전력 소비를 달성할 수 있다.
도 1은 본 개시의 구현에 따른 하드웨어 프로세서(100)를 도시한다. 프로세서(100)는 중앙 처리 유닛(CPU), CPU의 처리 코어, 그래픽 처리 유닛(GPU), 또는 임의의 적절한 유형들의 처리 디바이스일 수 있다. 도 1에 도시된 바와 같이, 프로세서(100)는 벡터 명령어 실행 파이프라인(104) 및 벡터 레지스터 파일(106)을 포함할 수 있다. 프로세서(100)는 벡터 명령어 집합 아키텍처(102)에 따라 지정된 벡터 명령어들(118)을 구현하는 회로들을 포함할 수 있다. 벡터 명령어(118)의 실행은 벡터 명령어 실행 파이프라인(104)에 의해 처리되는 마이크로 연산들(micro-operations, 마이크로-op들)로 분할될 수 있다. 벡터 길이가 실행 블록들의 수보다 훨씬 큰 경우들에서, 마이크로-op들은 전체 벡터들의 하위 집합에 대해 연산할 수 있는 하위 벡터 연산들일 수 있다. 예를 들어, 실행 블록들의 수가 여덟(8) 개이고 벡터 길이가 64라면, 여덟 개의 하위 벡터 연산들이 요구된다. 벡터 명령어 실행 파이프라인(104)은 명령어 페치 스테이지(110), 명령어 디코딩 및 레지스터 판독 스테이지(112), 명령어 실행 스테이지(114) 및 명령어 재기록 스테이지(116)를 포함할 수 있다. 벡터 명령어 실행 파이프라인(104)의 각 스테이지는 하나 이상의 벡터 명령어들의 별도의 마이크로-op들을 처리할 수 있다. 이후 스테이지의 실행은 이전 스테이지로부터의 결과들에 따라 달라질 수 있다. 마이크로-op들은 프로세서(100)에 결합된 메모리에 저장된 대기 풀에서 실행되기를 대기하고 있을 수 있다. 명령어들은 클록 사이클들에 기초하여 벡터 명령어 실행 파이프라인(104)을 통해 이동된다. 벡터 명령어 실행 파이프라인(104)은 다음과 같이 연산할 수 있다.
제1 클록 사이클에서, 명령어 페치 스테이지(110)는 실행되기를 대기하는 마이크로-op들의 풀로부터 제1 마이크로-op를 검색할 수 있다.
제2 클록 사이클에서, 명령어 디코딩 스테이지(112)는 제1 마이크로-op를 디코딩할 수 있고, 필요하다면, 벡터 레지스터 파일(106)의 벡터 레지스터들($v0 - $v7)로부터 데이터 값들을 검색할 수 있으며; 명령어 페치 스테이지(110)는 풀로부터 제2 마이크로-op을 검색할 수 있다.
제3 클록 사이클에서, 명령어 실행 스테이지(114)는 디코딩된 제1 마이크로-op을 실행할 수 있고; 명령어 디코딩 스테이지(112)는 제2 마이크로-op를 디코딩할 수 있고, 필요하다면, 벡터 레지스터 파일(106)의 벡터 레지스터들($v0 - $v7)로부터 데이터 값들을 검색할 수 있으며; 명령어 페치 스테이지(110)는 풀로부터 제3 마이크로-op을 검색할 수 있다.
제4 클록 사이클에서, 명령어 재기록 스테이지(116)는 명령어 실행 스테이지(114)에 의해 생성된 결과들을 벡터 레지스터 파일(106)의 하나 이상의 벡터 레지스터($v0 - $v7)에 기록할 수 있고; 명령어 실행 스테이지(114)는 디코딩된 제2 마이크로-op을 실행할 수 있고; 명령어 디코딩 스테이지(112)는 제3 마이크로-op를 디코딩할 수 있고, 필요하다면, 벡터 레지스터 파일(106)의 벡터 레지스터들($v0 - $v7)로부터 데이터 값들을 검색할 수 있으며; 명령어 페치 스테이지(110)는 풀로부터 제4 마이크로-op을 검색할 수 있다. 이에 따라, 벡터 명령어 실행 파이프라인(104)은 파이프라인을 통해 동시에 그리고 효율적으로 마이크로-op들을 처리할 수 있다.
일 구현에서, 프로세서(100)는 레지스터 재명명을 위한 매핑 로직 회로 없이 구현되어 작은 풋프린트를 달성할 수 있다. 벡터 명령어 집합(102)에 정의된 아키텍처화된 레지스터들 각각은 매핑 로직 회로를 사용하여 벡터 명령어들의 실행 동안 아키텍처화된 레지스터들 간의 매핑들을 동적으로 생성하고 업데이트하는 대신, 벡터 레지스터 파일(106)에서의 대응하는 물리적 레지스터에 할당될 수 있다. 예를 들어, 벡터 명령어 집합(102)이 여덟(8) 개의 아키텍처화된 벡터 레지스터들을 정의한다면, 아키텍처화된 레지스터 각각은 $v0 - $v7 중 대응하는 것에 고정 할당될 수 있다. 잠재적인 WAR 해저드를 방지하기 위해, 본 개시의 구현들은 버퍼 레지스터들(108)을 포함할 수 있다. 일 구현에서, 버퍼 레지스터들(108)은 벡터 레지스터 파일(106)의 벡터 레지스터들($v0 - $v7) 외의 엑스트라 레지스터들이다. 또 다른 구현에서, 버퍼 레지스터(108)는 메모리 내의 버퍼 영역일 수 있다. 벡터 레지스터들($v0 - $v7)과 달리, 버퍼 레지스터들(108)은 벡터 명령어 집합(102)에 정의되지 않으므로 벡터 명령어 집합(102)에 정의된 임의의 아키텍처화된 레지스터들에 매핑되지 않는다. 이에 따라, 버퍼 레지스터들(108)은 벡터 명령어들(118)에 의해 식별 가능하지 않다. 대신, 버퍼 레지스터들(108)은 WAR 해저드를 제거하는 데 도움이 될 수 있는 중간 저장소로서 역할을 할 수 있다. 일 구현에서, WAR 해저드와 연관되지 않은 명령어들은 벡터 명령어 실행 파이프라인(104)을 통해 정상적으로 실행될 수 있다.
일대일로 물리적 레지스터에 할당된 아키텍처화된 레지스터들 각각은 벡터 명령어들의 실행 동안 레지스터 재명명에 영향을 받지 않으므로, 아키텍처화된 벡터 레지스터들(예를 들어, $v0 - $v7)은 또한 다음 설명에서 벡터 레지스터 파일(107)에서의 대응하는 물리적 레지스터들에 대응하거나 대응하는 물리적 레지스터들을 나타내는 것으로 이해된다. 일 구현에서, 프로세서(100)와 연관된 벡터 레지스터들은 두 개의 그룹들로 분할될 수 있다. 벡터 레지스터 파일(106)에서의 $v0 - $v7과 같은 벡터 레지스터들의 제1 그룹은 벡터 명령어 집합(102)에 정의된 벡터 명령어들(118)에 의해 식별 가능하며; 제2 그룹의 버퍼 레지스터들(108)은 벡터 명령어들(118)의 임의의 아키텍처화된 레지스터들에 매핑되지 않으므로 벡터 명령어 집합(102)의 벡터 명령어들(118)에 의해 식별 가능하지 않다. WAR 해저드을 잠재적으로 겪는 것으로 알려져 있는 명령어들은 두 단계로 실행될 수 있다. 제1 단계에서, 명령어 디코딩 스테이지(112)는 마이크로-op를 디코딩하고 벡터 레지스터들($v0 - $v7)로부터 판독될 수 있다. 명령어 실행 스테이지(114)에 의해 마이크로-op를 실행한 후, 명령어 재기록 스테이지(116)는 마이크로-op에 의해 식별된 벡터 레지스터들($v0 - $v7) 중 어느 하나가 아닌 버퍼 레지스터들(108)에 목적지 레지스터로서 결과들을 기록할 수 있다. 명령어의 실행과 연관된 모든 마이크로-op들이 완료되고, 버퍼 레지스터에서 원하는 결과들이 이용 가능할 때, 제2 단계가 시작될 수 있다. 목적지 벡터 레지스터에 재기록하는 것이 안전한 제2 단계에서, 명령어 재기록 스테이지(116)는 버퍼 레지스터들로부터 목적지 벡터 레지스터로 결과들을 복사할 수 있다.
도 2는 본 개시의 구현에 따른 버퍼 레지스터들을 사용하는 벡터 명령어의 예시적인 구현을 도시한다. 도 2에 도시된 바와 같이, vect uwh $v3, $v3 명령어의 실행은 두 단계로 수행될 수 있다. 1 단계에서, 명령어 실행 스테이지(114)는 vect uwh $v3, $v3를 실행할 수 있고, 명령어 재기록 스테이지(116)는 결과들을 식별된 목적지 레지스터($v3)가 아닌 버퍼 레지스터($buffer)에 기록할 수 있다. 버퍼 레지스터($buffer)는 명령어에서 식별되지 않는다. 로직 회로는 더 이상 명령어가 목적지 레지스터($v3)로부터 판독되지 않을 것이라고 결정할 수 있고, 2 단계에서 목적지 레지스터에 기록하는 것이 안전하다. 2 단계에서, 로직 회로는 WAR 해저드에 대한 위험 없이 버퍼 레지스터($buffer)에 저장된 데이터 값을 목적지 레지스터($v3)로 복사할 수 있다.
엑스트라 레지스터를 버퍼 레지스터로서 사용하는 것은 명령어 재기록 스테이지가 항상 레지스터에 기록하고 레지스터 파일에 엑스트라 레지스터를 추가하는 비용이 예를 들어, 플립 플롭 또는 래치와 같은 다른 저장 디바이스를 사용하는 것보다 낮기 때문에 수행을 일관되게 만드는 데 도움이 될 수 있다. 버퍼 레지스터는 별도의 로직 회로일 수 있거나 $v0 - $v7에 대한 추가 레지스터로서 구현될 수 있다. 예를 들어, $v0 - $v7이 8-엔트리 RAM을 사용하여 구현된다면, RAM은 RAM에서의 9 번째 엔트리로서 버퍼 레지스터를 이용하여 9-엔트리 RAM으로 확장될 수 있다. 또 다른 구현에서, 1 단계에서, 명령어 재기록 스테이지(116)는 결과들을 일시적으로 홀딩하기 위해 메모리 위치에 기록할 수 있고, 2 단계에서, 메모리 위치에 저장된 결과들로부터 목적지 레지스터로 복사할 수 있다.
또 다른 구현에서, 명령어 재기록 스테이지(116)는 출력의 모든 요소들을 버퍼 레지스터에 기록하는 대신, 출력의 요소들의 하위 집합을 버퍼 레지스터에 기록한 다음 요소들의 하위 집합을 목적지 레지스터로 복사할 수 있는 한편, 요소들의 나머지는 목적지 레지스터에 직접 기록된다. 이러한 구현은 예를 들어, 벡터가 판독된 후 출력 벡터의 대부분의 요소들이 덮어 써지고, 요소들의 작은 하위 집합만 WAR 해저드에 노출되는 경우 더 높은 효율을 달성할 수 있다. 이 경우, 단지 마지막 벡터 요소가 판독되기 전에 기록된 벡터 요소들만 버퍼링될 필요가 있으며; 이는 복사되어야 하는 데이터의 양을 최소화할 것이다.
또 다른 구현에서, 잠재적인 WAR 해저드를 갖는 명령어들에 대해, 명령어 재기록 스테이지(116)는 소스 및 목적지 레지스터가 동일한 지 여부에 관계 없이, 항상 출력을 버퍼 레지스터에 기록한다. 이는 소스와 목적지가 동일한지를 확인하고 두 경우를 상이하게 핸들링할 필요 없이 이러한 명령어들에 대한 제어를 규칙화할 수 있는 이점을 가진다.
버퍼 레지스터들은 정확한 인터럽트를 구현하는 데 사용될 수 있다. 대부분의 최신 프로세서 아키텍처들은 정확한 인터럽트를 지원한다. 저장된 프로세서 상태가 하나의 명령어 실행이 다음 명령어 실행이 시작되기 전에 끝나는 순차적인 프로그램 실행 모델과 대응한다면 인터럽트 또는 예외가 정확하다고 한다. 정확한 인터럽트의 요구 사항들 중 하나는 명령어의 실행이 중단될 때, 프로세서의 상태가 명령어가 실행되지 않았던 것처럼 되어야 한다는 것이다. 벡터 명령어들과 관련하여, 이는 벡터 명령어의 실행 동안 프로세서가 중지된다면, 해당 명령어의 목적지 레지스터들이 변경되지 않아야 함을 의미한다.
실행되는 명령어가 인터럽트를 유발할 때 문제가 발생한다. 예를 들어, 부동 소수점 연산은 다양한 IEEE 부동 소수점 인터럽트를 일으킬 수 있다. 벡터 부동 소수점 명령어의 경우, 요소에 관한 연산들 중 어느 하나가 인터럽트를 유발한다면 그리고 정확한 인터럽트가 지원된다면, 구현은 인터럽트를 일으킨 요소 이전에 계산된 요소들을 포함하여, 벡터 명령어의 결과들 중 어느 것도 기록되지 않도록 해야 한다.
정확한 인터럽트를 달성하기 위해, 본 개시의 구현은 잠재적으로 인터럽트를 일으켜 항상 버퍼 레지스터에 기록할 수 있는 명령어를 제공할 수 있다. 명령어의 실행이 성공적으로 완료되었다는 결정에 응답하여, 프로세서는 결과들을 실제 출력 레지스터로 복사할 수 있다. 벡터 명령어가 인터럽트를 가진다면, 인터럽트가 일어나기 전에 버퍼 레지스터들에 저장된 결과들이 폐기된다. 목적지 레지스터는 영향을 받지 않고 유지되어 정확한 인터럽트의 요구 사항을 충족한다.
정확한 인터럽트에 필요한 버퍼링은 도 2에 도시된 바와 같은 회로를 사용하여 구현될 수 있다. 도 2에 도시된 바와 같은 실질적으로 동일한 회로 구조들을 사용하여 버퍼링이 수행될 수 있다.
일부 구현들에서, 정확한 인터럽트는 결과들을 버퍼 레지스터들에 기록할 필요가 있고, 인터럽트가 발생하지 않는다면, 결과들을 버퍼 레지스터들로부터 목적지 레지스터들로 복사할 필요가 있다. 인터럽트가 발생할지 여부가 다중 사이클 명령어에서 초기에 결정될 수 있다면 이는 가장 효율적인 접근법이 아니다. 이러한 상황들에서, 실행 파이프라인은 인터럽트가 초기 스테이지(예를 들어, 첫 번째 클록 사이클)에서 발생할지 여부를 결정할 수 있다. 예를 들어, 나눗셈 연산에서, 실행 파이프라인은 첫 번째 클록 사이클(벡터 명령어 실행 파이프라인을 통한 실행 시작 이전)에서 제로로 나누는 예외에 의해 유발되는 인터럽트가 있을지 여부를 결정할 수 있다(예를 들어, 제수가 제로이거나 제로에 매우 가까운지를 확인함으로써). 일 구현에서, 제어 로직 회로는 실행 파이프라인에서의 초기에, 특정 인터럽트(이를테면 벡터 나눗셈의 경우 제로로 나누기와 같은)가 발생할지 여부를 결정할 수 있다. 출력 결과의 어떤 요소도 인터럽트를 유발할 수 없다는 결정에 응답하여, 모든 요소들은 벡터 레지스터들에 재기록될 수 있으므로, 정확한 인터럽트의 수행을 더욱 개선한다.
명령어의 실행이 인터럽트를 일으킬 가능성을 가질 때 버퍼에 기록한 다음 복사하고 명령어가 인터럽트를 일으킬 수 없을 때 벡터 레지스터에 직접 기록하는 접근법은 특히 프로세서가 주로 명령어들이 인터럽트를 일으킬 수 없는 모드에서 실행될 것일 때 효율적이다. 이러한 무인터럽트 모드는 다음과 같은 상황들에서 발생할 수 있다:
프로세서는 인터럽트가 정확하지 않은 모드(벡터 명령어가 부분적으로 작성된 타겟들과 인터럽트를 일으키는 것이 허용 가능한 경우)로 설정될 수 있으며; 이 경우 벡터 명령어들은 목적지 레지스터에 직접 기록할 수 있다.
일 구현에서, 벡터 명령어가 목적지 레지스터에 직접 기록할 수 있는지 여부는 WAR 해저드에 대한 위험이 있는지 여부 또는 프로세서가 WAR 해저드를 방지하기 위한 상이한 회로를 포함하는지 여부에 따라 달라진다. 프로세서가 버퍼 레지스터를 사용하여 WAR 해저드도 방지하고 정확한 인터럽트도 지원하고 있다면, 정확한 인터럽트가 활성화되지 않더라도 명령어가 버퍼 레지스터에 기록해야 할 수 있다.
또 다른 구현에서, 명령어의 실행은 정확한 인터럽트 수행을 개선하기 위해 두 단계로 수행될 수 있다. 1 단계에서, 명령어의 실행은 이러한 연산들이 인터럽트를 일으킬지 여부를 결정하기 위해 특정 연산들을 수행하기 위해 모든 요소들을 순회할 수 있다. 1 단계 동안, 프로세서는 어떠한 상태도 업데이트하지 않는다(즉, 목적지 벡터 레지스터들을 업데이트하지 않는다). 이에 따라, 프로세서에 의해 실행되는 연산들은 소스 벡터 레지스터들로부터의 판독 연산들만 수반한다.
1 단계 동안 인터럽트가 검출되면, 명령어에 대해 인터럽트가 일어난다. 1 단계 동안 인터럽트가 검출되지 않으면, 명령어의 실행이 2 단계로 이동한다. 2 단계에서, 명령어가 이번에는 임의의 목적지 벡터 레지스터들을 포함하여, 결과들을 계산하고 상태들을 업데이트하는, 모든 요소들을 통해 실행된다. 이는 소스 벡터 레지스터들을 재판독하는 것을 수반할 것이다.
이러한 접근법의 한 가지 이점은 이것이 레지스터들을 업데이트하는 것들뿐만 아니라, 임의의 벡터 명령어에 대한 정확한 인터럽트들을 구현하는 데 적용될 수 있다는 점이다. 벡터 레지스터로부터의 요소들을 일련의 메모리 주소들에 저장하는 벡터 분산 저장의 명령어를 고려한다. 이러한 주소들 중 하나가 잘못되고 인터럽트를 유발하는 것이 가능하다. 분산 저장을 실행 취소하거나 모든 주소들이 확인될 때까지 분산 저장을 버퍼링할 수 있는 임으이의 메커니즘은 계산 비용이 많이 들 것이다. 상술된 2 단계 접근법은 제1 단계에서 모든 주소들을 검증하고 제2 단계에서 결과들을 기록하는 것이 보다 효율적이다. 이러한 2-단계 접근법은 정확한 인터럽트가 대부분 시간에 오프될 때; 특히 유용하다; 인터럽트가 오프된다면, 제2 단계만 수행하면 된다. 정확한 인터럽트는 프로그램 오류를 디버깅하는 데 사용할 수 있는데, 이는 이것이 기계의 상태가 명령어를 완료하기 전에 모든 명령어들의 상태들과 동일하게 유지되어 인터럽트를 유발하지만 어떤 후속 명령어도 프로세서 상태들을 변경하지 않는 경우 프로세서가 명령어 경계 상에서 중지되도록 보장할 수 있기 때문이다. 그러나, 상술된 바와 같이, 정확한 인터럽트는 추가적인 성능 오버 헤드를 더할 수 있다. 이에 따라, 일부 구현들에서, 정확한 인터럽트 모드는 프로세서 성능을 더욱 개선하기 위해 비활성화될 수 있다. 정확한 인터럽트 모드가 비활성화되고 예외가 발생할 때, 프로세서 상태는 분명한 경계를 보장하지 않을 것이다. 예를 들어, 인터럽트를 유발하는 명령어가 목적지 레지스터의 일부를 기록했을 수 있다.
또 다른 구현에서, 이러한 2-단계 접근법은 메모리 액세스 명령어들에 적용될 수 있는 한편 벡터 레지스터 연산들에 대해서는 버퍼 메커니즘이 적용될 수 있다.
상기한 설명은 제한적이 아니라 예시적인 것으로 의도된다. 본 개시는 구체적인 예시적인 예들 및 구현들을 참조하여 설명되었지만, 본 개시는 설명된 예들및 구현들로 제한되지 않는다는 것이 인식될 것이다. 본 개시의 범위는 다음 청구항들을 참조하여, 이러한 청구항들의 권리가 주어지는 균등물들의 전체 범위와 함께 결정되어야 한다.
Claims (22)
- 프로세서에 있어서,
복수의 벡터 레지스터들을 포함하는 벡터 레지스터 파일;
적어도 하나의 버퍼 레지스터; 및
상기 벡터 레지스터 파일 및 상기 적어도 하나의 버퍼 레지스터에 통신 가능하게 연결되는 벡터 처리 코어를 포함하며, 상기 벡터 처리 코어는:
상기 복수의 벡터 레지스터들 중 제1 벡터 레지스터를 나타내는 제1 식별자, 및 상기 복수의 벡터 레지스터들 중 제2 벡터 레지스터를 나타내는 제2 식별자를 포함하는 벡터 명령어를 수신하고 - 상기 제1 벡터 레지스터는 소스 레지스터이고 상기 제2 벡터 레지스터는 목적지 레지스터임 -;
제1 벡터 레지스터에 저장된 데이터 값들에 기초하여 상기 벡터 명령어를 실행하여 결과를 생성하고 상기 결과를 적어도 하나의 버퍼 레지스터에 저장하며;
상기 제2 벡터 레지스터가 기록하기에 안전하다는 결정에 응답하여, 상기 결과를 상기 적어도 하나의 버퍼 레지스터로부터 상기 제2 벡터 레지스터로 복사하는 것인, 프로세서. - 제1항에 있어서, 상기 소스 레지스터는 상기 목적지 레지스터와 동일하거나 상이한 것 중 하나인 것인, 프로세서.
- 제1항 또는 제2항에 있어서, 상기 벡터 명령어 집합은 복수의 아키텍처화된 레지스터들을 정의하고, 상기 복수의 상기 아키텍처화된 레지스터들 각각은 상기 복수의 벡터 레지스터들 중 대응하는 벡터 레지스터에 매핑되는 것인, 프로세서.
- 제1항 또는 제2항에 있어서, 상기 복수의 상기 아키텍처화된 레지스터들 각각은 상기 복수의 벡터 레지스터들 중 대응하는 벡터 레지스터에 고정 매핑되고, 아키텍처화된 레지스터와, 대응하는 벡터 레지스터 간의 매핑은 제2 벡터 명령어의 실행 동안 레지스터 재명명에 의해 변경되지 않는 것인, 프로세서.
- 제1항 또는 제2항에 있어서, 상기 벡터 명령어의 실행은, 제1 결과를 생성하고 상기 제1 결과를 상기 적어도 하나의 버퍼 레지스터에 저장하는 제1 단계, 및 상기 결과를 상기 적어도 하나의 버퍼 레지스터로부터 상기 제2 벡터 레지스터로 복사하는 제2 단계를 포함하여 2 단계로 수행되는 것인, 프로세서.
- 제1항 또는 제2항에 있어서, 상기 적어도 하나의 버퍼 레지스터는 상기 프로세서와 연관된 메모리, 상기 벡터 레지스터 파일과 별도의 로직 회로, 또는 상기 벡터 레지스터 파일에서의 상기 복수의 벡터 레지스터들 외의 추가 벡터 레지스터의 위치 중 하나인 것인, 프로세서.
- 제1항 또는 제2항에 있어서, 상기 제2 벡터 레지스터가 기록하기에 안전하다는 결정은 상기 벡터 명령어의 실행이 판독 후 기록 해저드(write-after-read hazard)의 대상이 되지 않는다는 결정을 포함하는 것인, 프로세서.
- 제1항 또는 제2항에 있어서, 상기 제2 벡터 레지스터가 기록하기에 안전하다는 결정은 상기 벡터 명령어의 실행이 인터럽트를 유발하는지 여부의 결정을 포함하고, 상기 벡터 명령어의 실행이 상기 인터럽트를 유발하지 않는다는 결정 또는 상기 프로세싱 코어가 부정확한 인터럽트 모드(non-precise interrupt mode) 하에서 실행된다는 결정에 응답하여, 상기 프로세싱 코어는 상기 결과를 상기 적어도 하나의 버퍼 레지스터를 우회하여 상기 제2 벡터 레지스터에 직접 기록하는 것인, 프로세서.
- 제8항에 있어서, 상기 벡터 명령어의 실행이 정확한 인터럽트(precise interrupt)를 유발한다는 결정에 응답하여, 상기 프로세싱 코어는:
상기 제1 벡터 레지스터에 저장된 데이터 값들에 기초하여 상기 벡터 명령어를 실행하여 결과를 생성하고 상기 결과를 상기 적어도 하나의 버퍼 레지스터에 저장하고;
상기 결과를 상기 적어도 하나의 버퍼 레지스터로부터 상기 제2 벡터 레지스터로 복사하는 것인, 프로세서. - 제1항 또는 제2항에 있어서, 상기 처리 코어는 벡터 명령어 실행 파이프라인을 포함하며, 상기 벡터 명령어 실행 파이프라인은:
상기 벡터 명령어를 수신하는 명령어 페치 회로;
상기 벡터 명령어에 기초하여 마이크로-op들을 생성하는 명령어 디코딩 회로;
상기 제1 벡터 레지스터에 저장된 데이터 값들에 기초하여 상기 벡터 명령어를 실행하여 제1 결과를 생성하고 상기 제1 결과를 상기 적어도 하나의 버퍼 레지스터에 저장하는 명령어 실행 회로; 및
상기 제2 벡터 레지스터가 기록하기에 안전하다는 결정에 응답하여, 상기 결과를 상기 적어도 하나의 버퍼 레지스터로부터 상기 제2 벡터 레지스터로 복사하는 명령어 재기록 회로를 포함하는 것인, 프로세서. - 제1항 또는 제2항에 있어서, 상기 벡터 명령어는 소스 레지스터들로서의 역할을 하는 하나보다 많은 제1 벡터 레지스터들을 나타내는 하나보다 많은 제1 식별자들, 목적지 레지스터들로서의 역할을 하는 하나보다 많은 제2 벡터 레지스터들을 나타내는 하나보다 많은 제2 식별자들, 및 결과들을 저장하기 위한 하나보다 많은 버퍼 레지스터들을 포함하고, 상기 제1 벡터 레지스터는 복수의 데이터 요소들을 포함하고, 상기 처리 코어는:
상기 하나보다 많은 제1 벡터 레지스터들에 저장된 데이터 값들에 기초하여 상기 벡터 명령어를 실행하여 데이터 요소들을 포함하는 결과를 생성하고;
상기 결과의 상기 데이터 요소들의 제1 하위 집합을 상기 하나보다 많은 버퍼 레지스터들에 저장하고 상기 결과의 상기 데이터 요소들의 제2 하위 집합을 상기 하나보다 많은 제2 벡터 레지스터들에 저장하며;
상기 하나보다 많은 제2 벡터 레지스터들이 기록하기에 안전하다는 결정에 응답하여, 상기 결과의 상기 데이터 요소들의 제1 하위 집합을 상기 하나보다 많은 제2 벡터 레지스터들로 복사하는 것인, 프로세서. - 제11항에 있어서, 상기 복수의 데이터 요소들은 8-비트 정수 값들, 16-비트 정수 값들, 32-비트 정수 값들, 64-비트 정수 값들, 16-비트 부동 소수점 값들, 32-비트 부동 소수점 값들, 또는 64-비트 부동 소수점 값들 중 하나인, 프로세서.
- 프로세서에 있어서,
복수의 벡터 레지스터들을 포함하는 벡터 레지스터 파일; 및
적어도 하나의 버퍼 레지스터; 및
상기 벡터 레지스터 파일 및 상기 적어도 하나의 버퍼 레지스터에 통신 가능하게 연결되는 벡터 처리 코어를 포함하며, 상기 벡터 처리 코어는:
상기 복수의 벡터 레지스터들 중 제1 벡터 레지스터를 나타내는 제1 식별자, 및 상기 복수의 벡터 레지스터들 중 제2 벡터 레지스터를 나타내는 제2 식별자를 포함하는 벡터 명령어를 수신하고 - 상기 제1 벡터 레지스터는 소스 레지스터이고 상기 제2 벡터 레지스터는 목적지 레지스터임 -;
상기 제1 벡터 레지스터에 저장된 데이터 값들에 기초하여 상기 벡터 명령어를 실행하여 결과를 생성하고 상기 결과를 상기 적어도 하나의 버퍼 레지스터에 저장하며;
상기 결과를 상기 적어도 하나의 버퍼 레지스터로부터 상기 제2 벡터 레지스터로 복사하는 것인, 프로세서. - 제13항에 있어서, 상기 소스 레지스터는 상기 목적지 레지스터와 동일하거나 상이한 것 중 하나인 것인, 프로세서.
- 제13항 또는 제14항에 있어서, 상기 벡터 명령어 집합은 복수의 아키텍처화된 레지스터들을 정의하고, 상기 복수의 상기 아키텍처화된 레지스터들 각각은 상기 복수의 벡터 레지스터들 중 대응하는 벡터 레지스터에 매핑되는 것인, 프로세서.
- 제13항 또는 제14항에 있어서, 상기 복수의 상기 아키텍처화된 레지스터들 각각은 상기 복수의 벡터 레지스터들 중 대응하는 벡터 레지스터에 고정 매핑되고, 아키텍처화된 레지스터와, 대응하는 벡터 레지스터 간의 매핑은 제2 벡터 명령어의 실행 동안 레지스터 재명명에 의해 변경되지 않는 것인, 프로세서.
- 제13항 또는 제14항에 있어서, 상기 벡터 명령어의 실행은, 제1 결과를 생성하고 상기 제1 결과를 상기 적어도 하나의 버퍼 레지스터에 저장하는 제1 단계, 및 상기 결과를 상기 적어도 하나의 버퍼 레지스터로부터 상기 제2 벡터 레지스터로 복사하는 제2 단계를 포함하여 2 단계로 수행되는 것인, 프로세서.
- 제13항 또는 제14항에 있어서, 상기 적어도 하나의 버퍼 레지스터는 상기 프로세서와 연관된 메모리, 상기 벡터 레지스터 파일과 별도의 로직 회로, 또는 상기 벡터 레지스터 파일에서의 상기 복수의 벡터 레지스터들 외의 추가 벡터 레지스터의 위치 중 하나인 것인, 프로세서.
- 제13항 또는 제14항에 있어서, 상기 처리 코어는 벡터 명령어 실행 파이프라인을 포함하며, 상기 벡터 명령어 실행 파이프라인은:
상기 벡터 명령어를 수신하는 명령어 페치 회로;
상기 벡터 명령어에 기초하여 마이크로-op들을 생성하는 명령어 디코딩 회로;
상기 제1 벡터 레지스터에 저장된 데이터 값들에 기초하여 상기 벡터 명령어를 실행하여 제1 결과를 생성하고 상기 제1 결과를 상기 적어도 하나의 버퍼 레지스터에 저장하는 명령어 실행 회로; 및
상기 결과를 상기 적어도 하나의 버퍼 레지스터로부터 상기 제2 벡터 레지스터로 복사하는 명령어 재기록 회로를 포함하는 것인, 프로세서. - 프로세서에 있어서,
복수의 벡터 레지스터들을 포함하는 벡터 레지스터 파일;
적어도 하나의 버퍼 레지스터; 및
상기 벡터 레지스터 파일 및 상기 적어도 하나의 버퍼 레지스터에 통신 가능하게 연결되어, 벡터 명령어를 실행하는 벡터 처리 코어를 포함하며, 상기 벡터 처리 코어는:
상기 복수의 벡터 레지스터들 중 제1 벡터 레지스터를 나타내는 제1 식별자, 및 상기 복수의 벡터 레지스터들 중 제2 벡터 레지스터를 나타내는 제2 식별자를 포함하는 상기 벡터 명령어를 수신하는 것에 응답하여, 그리고 상기 벡터 명령어의 연산을 수행하기 전에, 상기 벡터 명령어의 상기 연산이 정확한 인터럽트를 유발할 가능성을 갖는지 여부를 결정하고 - 상기 제1 벡터 레지스터는 소스 레지스터이고 상기 제2 벡터 레지스터는 목적지 레지스터임 -;
상기 연산의 수행이 상기 정확한 인터럽트를 유발할 상기 가능성을 갖는다는 결정에 응답하여,
상기 제1 벡터 레지스터에 저장된 데이터 값들에 기초하여 상기 벡터 명령어를 실행하여 결과를 생성하고 상기 결과를 상기 적어도 하나의 버퍼 레지스터에 저장하며;
상기 결과를 상기 적어도 하나의 버퍼 레지스터로부터 상기 제2 벡터 레지스터로 복사하는 것인, 프로세서. - 제20항에 있어서, 상기 연산의 수행이 상기 정확한 인터럽트를 유발할 가능성을 갖지 않는다는 결정에 응답하여, 상기 처리 코어는 상기 제1 벡터 레지스터에 저장된 데이터 값들에 기초하여 상기 벡터 명령어를 실행하여 결과를 생성하고 상기 결과를 상기 제2 벡터 레지스터에 저장하는 것인, 프로세서.
- 제20항에 있어서, 상기 처리 코어가 부정확한 인터럽트 모드 하에서 실행된다는 결정에 응답하여, 상기 처리 코어는 상기 제1 벡터 레지스터에 저장된 데이터 값들에 기초하여 상기 벡터 명령어를 실행하여 결과를 생성하고 상기 결과를 상기 제2 벡터 레지스터에 저장하는 것인, 프로세서.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862718426P | 2018-08-14 | 2018-08-14 | |
US62/718,426 | 2018-08-14 | ||
PCT/US2019/046275 WO2020036917A1 (en) | 2018-08-14 | 2019-08-13 | Vector instruction with precise interrupts and/or overwrites |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20210074276A true KR20210074276A (ko) | 2021-06-21 |
Family
ID=69524912
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020217007458A KR20210074276A (ko) | 2018-08-14 | 2019-08-13 | 정확한 인터럽트 그리고/또는 덮어 쓰기 기능을 갖는 벡터 명령어 |
Country Status (5)
Country | Link |
---|---|
US (2) | US20210311735A1 (ko) |
EP (1) | EP3837601A4 (ko) |
KR (1) | KR20210074276A (ko) |
CN (1) | CN112912843A (ko) |
WO (1) | WO2020036917A1 (ko) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116257350B (zh) * | 2022-09-06 | 2023-12-08 | 进迭时空(杭州)科技有限公司 | 一种针对risc-v矢量寄存器的重命名分组装置 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05508506A (ja) * | 1991-04-23 | 1993-11-25 | イーストマン・コダック・カンパニー | 耐障害性回路網ファイルシステム |
US6922716B2 (en) * | 2001-07-13 | 2005-07-26 | Motorola, Inc. | Method and apparatus for vector processing |
US7487502B2 (en) * | 2003-02-19 | 2009-02-03 | Intel Corporation | Programmable event driven yield mechanism which may activate other threads |
US8307194B1 (en) * | 2003-08-18 | 2012-11-06 | Cray Inc. | Relaxed memory consistency model |
US7200742B2 (en) * | 2005-02-10 | 2007-04-03 | International Business Machines Corporation | System and method for creating precise exceptions |
US8904151B2 (en) * | 2006-05-02 | 2014-12-02 | International Business Machines Corporation | Method and apparatus for the dynamic identification and merging of instructions for execution on a wide datapath |
US7984273B2 (en) * | 2007-12-31 | 2011-07-19 | Intel Corporation | System and method for using a mask register to track progress of gathering elements from memory |
US20120254591A1 (en) * | 2011-04-01 | 2012-10-04 | Hughes Christopher J | Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements |
US9298456B2 (en) * | 2012-08-21 | 2016-03-29 | Apple Inc. | Mechanism for performing speculative predicated instructions |
US20150089189A1 (en) * | 2013-09-24 | 2015-03-26 | Apple Inc. | Predicate Vector Pack and Unpack Instructions |
US11544214B2 (en) * | 2015-02-02 | 2023-01-03 | Optimum Semiconductor Technologies, Inc. | Monolithic vector processor configured to operate on variable length vectors using a vector length register |
US10108417B2 (en) * | 2015-08-14 | 2018-10-23 | Qualcomm Incorporated | Storing narrow produced values for instruction operands directly in a register map in an out-of-order processor |
US11275590B2 (en) * | 2015-08-26 | 2022-03-15 | Huawei Technologies Co., Ltd. | Device and processing architecture for resolving execution pipeline dependencies without requiring no operation instructions in the instruction memory |
-
2019
- 2019-08-13 WO PCT/US2019/046275 patent/WO2020036917A1/en unknown
- 2019-08-13 CN CN201980061943.6A patent/CN112912843A/zh active Pending
- 2019-08-13 EP EP19850442.5A patent/EP3837601A4/en not_active Withdrawn
- 2019-08-13 KR KR1020217007458A patent/KR20210074276A/ko unknown
- 2019-08-13 US US17/266,338 patent/US20210311735A1/en not_active Abandoned
-
2023
- 2023-07-11 US US18/350,729 patent/US20230350688A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230350688A1 (en) | 2023-11-02 |
EP3837601A4 (en) | 2022-05-04 |
US20210311735A1 (en) | 2021-10-07 |
WO2020036917A1 (en) | 2020-02-20 |
EP3837601A1 (en) | 2021-06-23 |
CN112912843A (zh) | 2021-06-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210026634A1 (en) | Apparatus with reduced hardware register set using register-emulating memory location to emulate architectural register | |
US5774711A (en) | Apparatus and method for processing exceptions during execution of string instructions | |
JP4815539B2 (ja) | フレーム管理を有する動的アドレス変換 | |
JP5309636B2 (ja) | 演算処理装置及び演算処理装置の制御方法 | |
JP6807383B2 (ja) | 転送プレフィックス命令 | |
KR102478874B1 (ko) | 비순차적 하드웨어 소프트웨어 공동 설계된 프로세서에서 스택 동기화 명령어를 갖는 술어 값의 스택을 구현하고 유지하기 위한 방법 및 장치 | |
US20150220451A1 (en) | Storing Look-Up Table Indexes in a Return Stack Buffer | |
US20050055536A1 (en) | Compiler instructions for vector transfer unit | |
JP2006099800A (ja) | 先進のマイクロプロセッサにおけるスケジューリング強化方法および装置 | |
JPH0283735A (ja) | 命令先取り装置 | |
CN105993000B (zh) | 用于浮点寄存器混叠的处理器和方法 | |
TWI733735B (zh) | 向量式原子記憶體更新指令 | |
TW202138996A (zh) | 切換影堆疊指標的硬體設備以及方法 | |
US7761672B2 (en) | Data movement and initialization aggregation | |
CN114676090A (zh) | 用于低时延页解压缩和压缩加速的电路和方法 | |
CN115640047B (zh) | 指令操作方法及装置、电子装置及存储介质 | |
KR102161682B1 (ko) | 이미디에이트 핸들링 및 플래그 핸들링을 위한 프로세서 및 방법 | |
US20140244987A1 (en) | Precision Exception Signaling for Multiple Data Architecture | |
US20230350688A1 (en) | Vector instruction with precise interrupts and/or overwrites | |
US5784607A (en) | Apparatus and method for exception handling during micro code string instructions | |
KR100308512B1 (ko) | 편집 기능을 위한 전문 밀리코드 지시 | |
KR100317769B1 (ko) | 압축 기억된 십진수 나눗셈에 대한 전문 밀리코드 명령 | |
KR19990082748A (ko) | 번역및테스트를위한전문밀리코드명령 | |
JP3170472B2 (ja) | レジスタ・リマップ構造を有する情報処理システム及び方法 | |
KR100322725B1 (ko) | 전문 갱신 및 분기 명령을 이용하는 밀리코드 플래그 |