KR20150105199A - 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법 - Google Patents

데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법 Download PDF

Info

Publication number
KR20150105199A
KR20150105199A KR1020150023772A KR20150023772A KR20150105199A KR 20150105199 A KR20150105199 A KR 20150105199A KR 1020150023772 A KR1020150023772 A KR 1020150023772A KR 20150023772 A KR20150023772 A KR 20150023772A KR 20150105199 A KR20150105199 A KR 20150105199A
Authority
KR
South Korea
Prior art keywords
vector
micro
vector register
control information
processing
Prior art date
Application number
KR1020150023772A
Other languages
English (en)
Other versions
KR102256188B1 (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 KR20150105199A publication Critical patent/KR20150105199A/ko
Application granted granted Critical
Publication of KR102256188B1 publication Critical patent/KR102256188B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/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
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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/30018Bit or string 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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
    • 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/3017Runtime instruction translation, e.g. macros

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)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

데이터 처리장치(2)는 몇몇이 벡터 오퍼랜드들의 데이터 소자들 중 어느 것이 처리를 위해서 선택되었는지를 식별하는 제어 정보를 갖는 벡터 마이크로 연산들에 응답해서 벡터 레지스터 스토어(6)로부터 벡터 오퍼랜드들을 처리하기 위한 처리회로(4)를 갖는다. 제어회로(20)는 처리될 벡터 오퍼랜드의 일부가 비선택된 소자들을 갖는다는 것을 제어 정보가 지정하는 벡터 마이크로 연산들을 검출한다. 이것이 그 경우이면, 제어회로(20)는 원래의 마이크로 연산 대신에 낮은 레이턴시 대체 마이크로 연산을 처리하도록 처리회로(4)를 제어한다. 이것은 어떤 선택된 소자도 없으면 마이크로 연산을 바이패스하기 위해서 분기 명령을 사용하는 경우보다 더 좋은 성능을 제공한다.

Description

데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법{DATA PROCESSING APPARATUS AND METHOD FOR PROCESSING VECTOR OPERANDS}
본 기술은 데이터 처리의 분야에 관한 것이다. 특히, 본 기술은 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법에 관한 것이다.
벡터 오퍼랜드의 각 데이터 소자에 대해 (흔히 병렬로) 대응하는 데이터 처리 동작을 수행할 수 있는 다수의 데이터 소자를 갖는 벡터 오퍼랜드들을 처리하는 데이터 처리장치를 제공하는 것이 알려져 있다. 몇몇의 경우에는, 벡터 처리 동작은 벡터 오퍼랜드의 데이터 소자들 중의 어느 것이 처리되어야 하는지를 나타내는 제어 정보와 관련되어 있다. 이 처리 동작은 제어 정보로 나타낸 선택된 소자들에만 적용될 수 있고, 다른 소자들에는 적용되지 않는다.
본 기술은 상기와 같은 벡터 처리 동작을 처리할 때의 처리 성능을 개선하기 위한 것이다.
일 국면에서 보면, 본 기술은
복수의 데이터 소자로 이루어진 벡터 오퍼랜드들을 저장하도록 구성된 벡터 레지스터 스토어와,
상기 벡터 레지스터 스토어로부터 취득된 벡터 오퍼랜드들을 이용해서 벡터 처리를 수행하도록 구성된 처리회로와,
벡터 마이크로 연산들에 응답해서 상기 벡터 처리를 수행하도록 상기 처리회로를 제어하도록 구성된 제어회로를 구비하는 데이터 처리장치를 제공하고,
상기 벡터 레지스터 스토어의 소스 벡터 레지스터와 목적지 벡터 레지스터를 지정하고, 상기 소스 벡터 레지스터의 일부의 데이터 소자들 중 어느 것이 상기 처리회로에 의해 처리될 선택된 소자들인지를 나타내는 제어 정보와 관련된, 벡터 마이크로 연산에 응답해서, 상기 제어회로는,
(a) 상기 제어 정보가, 상기 소스 벡터 레지스터의 일부가 어떤 선택된 소자들도 포함하지 않는다는 것을 나타내는 미리 정한 조건을 충족하는지 여부를 검출하고,
(b) 상기 제어 정보가 상기 미리 정한 조건을 충족하지 않으면, 상기 소스 벡터 레지스터의 일부에 대응하는 목적지 벡터 레지스터의 일부에 저장될 결과를 생성하기 위해서, 상기 벡터 마이크로 연산을 처리해서 상기 소스 벡터 레지스터의 일부의 한 개 이상의 선택된 소자들을 이용해 미리 정한 처리 동작을 수행하도록 처리회로를 제어하고,
(c) 상기 제어 정보가 상기 미리 정한 조건을 충족하면, 상기 벡터 마이크로 연산을, 상기 벡터 마이크로 연산보다 더 낮은 처리 레이턴시(latency)를 갖고 상기 제어 정보가 상기 미리 정한 조건을 충족하는 경우에 상기 벡터 마이크로 연산과 같은 목적지 레지스터의 일부에 대한 결과를 제공하는 대체 마이크로 연산으로 교체하고, 상기 대체 마이크로 연산을 처리하도록 상기 처리회로를 제어하도록 구성된다.
본 기술은 소스 벡터 레지스터의 대응하는 부분의 모든 데이터 소자들이 처리회로에 의해 처리되지 않아도 되는 비선택된 소자들이라는 것을 나타내는 제어 정보와 관련된 벡터 마이크로 연산이 실행되는 것이 가능하다는 것을 인식한다. 이 경우에, 벡터 마이크로 연산을 처리하는 것은 처리 리소스를 낭비할 수도 있다. 이 문제를 해결하기 위한 이전의 기술은, 제어 정보가 처리될 어떤 선택된 소자들도 없다는 것을 나타내는지 여부를 테스트하고, 만일 그렇다면, 다음의 마이크로 연산을 지나서 분기하는, 벡터 마이크로 연산 이전에 프로그래머가 "가딩(guarding)" 분기 명령(branch instruction)을 포함했었다. 그렇지만, 본 기술의 발명자는 분기 동작이 보통 분기 예측되기 때문에, 그러한 가딩 분기 명령이 보통 성능을 향상시키는 것보다 성능을 감소시킬 수 있고, 분기되었는지 아닌지 여부는 매우 데이터 의존적이기 때문에 분기 예측 실패가 가딩 분기 동작에 대해서 일반적이라는 것을 알았다. 분기 예측 실패가 발생한 경우에는, 이것은 플러시(flush)될 처리 파이프라인 및 모든 상태가 정확하다고 알려져 있는 이전의 실행 지점으로부터 재시작될 처리를 필요로 하는데, 이것은 성능에 심각한 영향을 미친다. 그러므로, 보통 가딩 분기 명령을 전혀 포함하지 않는 것이 낫고, 대신 제어 정보가 벡터 마이크로 연산에 의해 처리될 어떤 선택된 소자들도 지정하지 않는다고 판명되더라도 평상시처럼 벡터 마이크로 연산을 간단히 처리하는 것이 낫다.
그러므로, 본 기술은 그러한 벡터 마이크로 연산을 가속화하기 위한 다른 접근법을 취한다. 제어회로는, 소스 벡터 레지스터의 관련된 부분이 어떤 선택된 소자들도 포함하지 않는다는 것을 나타내는 소정의 조건을 제어 정보가 충족하는지 여부를 검출한다. 제어 정보가 소정의 조건(즉, 소스 벡터 레지스터의 관련된 부분에 적어도 한 개의 선택된 소자가 있다)을 충족하지 않으면, 제어회로는 소스 벡터 레지스터의 일부의 1개 이상의 선택된 소자를 이용해서 소정의 처리 동작을 수행하고, 소스 벡터 레지스터의 일부에 대응하는 목적지 벡터 레지스터의 일부에 저장되는 결과를 생성하도록 벡터 마이크 조작을 처리하는 처리회로를 제어한다. 그래서, 적어도 한 개의 선택된 소자가 있으면, 벡터 마이크로 연산이 평상시처럼 처리된다. 추가의 가딩 분기 명령이 필요 없으므로, 가딩 분기 명령이 잘못 예측되는 어떤 위험도 파이프라인 플러시 및 성능의 부족을 발생시키지 않는다.
한편, 제어 정보가 소정의 조건을 충족하도록 결정되면, 즉 소스 벡터 레지스터의 필요한 부분에 어떤 선택된 소자도 없으면, 제어회로는 벡터 마이크로 연산을, 낮은 처리 레이턴시를 가지며, 소정의 조건이 충족되는 경우에 원래의 벡터 마이크로 연산과 같은 결과를 제공하는, 대체 마이크로 연산으로 교체한다. 그 다음 제어회로는 이 대체 마이크로 연산을 처리하도록 처리회로를 제어한다. 이런 이유로, 제어회로의 하드웨어는 어떤 선택된 데이터 소자도 없는 경우를 인식할 수 있고, 이 경우에 벡터 마이크로 연산을 처리회로에 의해 좀더 빨리 처리될 수 있는 마이크로 연산으로 교체한다. 이런 이유로, 성능을 향상시킬 수 있다.
또한, 통상 원래의 벡터 마이크로 연산을 처리하는 벡터 처리 유닛에 대해 다른 처리 유닛을 이용해서 대체 마이크로 연산을 처리할 수 있으면, 이것에 의해 선택된 데이터 소자들을 갖는 다른 벡터 마이크로 연산들이 원래의 마이크로 연산이 교체되지 않았던 경우보다 먼저 처리될 수 있도록 벡터 처리 유닛을 이용해서 처리될 수 있다. 이것은 추가의 성능 향상을 제공할 수 있다.
어떤 실시예에서는 제어회로는 처리회로의 일부일 수 있고, 또는 별도의 회로로서 제공될 수 있다.
마이크로 연산은 다른 마이크로 연산들과 관계없이 스케줄될 수 있는, 처리회로에 의해 수행된 어떤 동작일 수도 있다. 어떤 예에 있어서는, 메모리로부터 페치(fetch)된 각 명령은 프로세서에 전해진 단일 마이크로 연산에 대응하므로, 마이크로 연산들은 그저 프로그램 명령일 뿐이다. 그렇지만, 많은 경우에 있어서는, 다수의 마이크로 연산들에 맵(map)핑하는 몇몇의 복잡한 프로그램 명령이 있을 수도 있다. 예를 들면, 다수의 로드/스토어(load/store) 명령은 독립적으로 스케줄될 수 있는 다수의 로드/스토어 마이크로 연산에 맵핑될 수 있다. 또한, 벡터 오퍼랜드를 처리하기 위한 단일 벡터 프로그램 명령은 벡터 오퍼랜드의 다른 부분을 각각 처리하는 몇 개의 마이크로 연산에 맵핑될 수 있다(예를 들면, 이것은 실행 폭이 좁은 처리회로가 좀더 큰 벡터 오퍼랜드를 처리하는 것을 허용한다).
벡터 마이크로 연산에 의해 처리되는(제어회로가 선택된 데이터 소자들에 대해 체크하는) 소스 벡터 레지스터의 부분은 어떤 마이크로 연산에 대해서는 전체 소스 벡터 레지스터일 수 있고, 다른 마이크로 연산에 대해서는 단지 소스 벡터 레지스터의 서브 섹션(sub-section)만일 수도 있다.
상기 대체 마이크로 연산은 무동작(no-op) 마이크로 연산(벡터 레지스터 내의 어떤 상태도 변경하지 않는 마이크로 연산), 목적지 벡터 레지스터의 적어도 일부를 소스 벡터 레지스터의 일부와 같은 값으로 설정하는 마이크로 연산(예를 들면, 레지스터 무브(move) 명령), 및 목적지 벡터 레지스터의 적어도 일부를 소정의 값(0, 또는 비트들이 모두 1과 같은 값 등)으로 설정하는 마이크로 연산 중 하나일 수 있다. 놀랍게도, 본 기술은 어떤 선택된 데이터 소자들도 없는 경우를 예상할 수도 있기 때문에, 보통 벡터 마이크로 연산을 무동작 마이크로 연산으로 교체하는 것으로 충분하지 않다고 인식한다.
마이크로 연산의 제1 타입에 의해, 처리회로는 소스 벡터 레지스터의 비선택된 데이터 소자들에 대응하는 목적지 벡터 레지스터의 일부를 소정의 값, 예를 들면 0으로 설정할 수 있다. 이 경우에, 소스 벡터의 일부가 전부 비선택된 데이터 소자들로 구성될 때 무동작 마이크로 연산을 간단히 수행하는 것만으로는 충분하지 않고, 대신 대체 마이크로 연산은 목적지 벡터 레지스터의 대응하는 부분을 소정의 값으로 설정하는 마이크로 연산일 수도 있다.
벡터 마이크로 연산의 제2 타입에 대해서는, 처리회로는 목적지 레지스터의 비선택된 데이터 소자들을, 소스 벡터 레지스터의 대응하는 비선택된 데이터 소자들과 같은 값으로 설정할 수도 있다.
어떤 경우에는, 소스 벡터 레지스터 및 목적지 벡터 레지스터는 같은 것일 수도 있다. 이 경우에, 처리회로는, 비선택된 데이터 소자들을 그들의 원래의 값으로 유지하면서, 타겟 레지스터 내의 선택된 데이터 소자들을, 처리동작을 선택된 데이터 소자들에 적용함으로써 결정된 대응하는 값들로 교체할 수도 있다. 비선택된 소자들이 그들의 원래의 값으로 유지되고 있기 때문에, 레지스터의 일부 내의 모든 소자들이 비선택된 소자들인 경우에는, 무동작 마이크로 연산이 대체 마이크로 연산에 대해 충분할 수 있다고 예상할 수도 있다. 그렇지만, 이것은 순차(in-order) 프로세서, 비순차(out-of-order) 프로세서 또는 레지스터 재명명(renaming)을 이용하는 다른 타입의 프로세서에 적합할 수 있고, 마이크로 연산에 의해 지정된 소스 및 목적지 레지스터가 같은 것이라도, 마이크로 연산이 프로세서에 도달할 때까지, 소스 및 목적지 레지스터는 프로세서에 의해 보여지는 것처럼 다른 물리적인 레지스터에 맵핑되었을 수도 있다. 이런 이유로, 마이크로 연산에 의해 지정된 소스 및 목적지 벡터 레지스터가 같은 것인 경우에도, 목적지 벡터 레지스터의 부분을 소스 벡터 레지스터의 대응하는 부분의 값으로 설정하는 대체 마이크로 연산을 사용할 수 있다.
한편, 다른 레지스터들이 벡터 마이크로 연산의 제2 타입에 대해서 소스 벡터 레지스터 및 목적지 벡터 레지스터로서 지정되면, 대체 마이크로 연산은 또한 목적지 벡터 레지스터의 부분을 소스 벡터 레지스터의 대응하는 부분의 값으로 설정하는 마이크로 연산일 수도 있다(상기 설명한 레지스터 재명명 예와 동일).
벡터 마이크로 연산의 또 다른 타입에 있어서는, 소스 벡터 레지스터의 비선택된 데이터 소자들에 대응하는 목적지 벡터 레지스터의 부분의 값이 보존될 수 있다. 이 경우에, 대체 마이크로 연산이 무동작 마이크로 연산일 수도 있고, 또는 레지스터 재명명이 사용되는 경우에는, 목적지 레지스터에 대응하는 새로운 재명명된 레지스터의 부분을, 목적지 레지스터로서 이전에 재명명된 레지스터의 대응하는 부분의 값으로 설정하는 마이크로 연산일 수도 있다.
제어 정보는 다양한 형태를 가질 수도 있다. 일 예에 있어서는, 선택된 데이터 소자들 또는 비선택된 데이터 소자들로서 소스 벡터 레지스터의 부분 내부의 데이터 소자들의 개개의 그룹 또는 개개의 데이터 소자들을 지정하는 마스크 정보가 제공될 수도 있다. 이 경우에, 제어회로는, 소스 벡터 레지스터의 부분 내의 데이터 소자들 중 어느 것도 선택되지 않는다는 것을 마스크 정보가 나타내면 소정의 조건이 충족되었다고 판정할 수도 있다. 이 마스크 정보는 예를 들면, 특별한 제어 레지스터, 또는 범용 레지스터들 중 하나의 레지스터 내에 저장될 수도 있다.
제어 정보의 또 다른 예는 벡터 마이크로 연산에 응답해서 많은 데이터 소자들이 어떻게 처리되는지를 나타내는 벡터 길이 정보이다. 예를 들면, 벡터 길이 정보로 나타낸 마지막 데이터 소자보다 더 큰 위치에 있는 어떤 데이터 소자들이 비선택된 소자들일 수도 있다고 가정할 수 있다. 이 경우, 제어회로는 벡터 길이 정보가 1개 이상의 소정의 값 중 하나를 갖는지 여부에 근거해서 소정의 조건이 충족되는지 여부를 벡터 길이 정보로부터 판정할 수 있다(예를 들면, 마이크로 연산이 8 데이터 소자를 갖는 벡터 레지스터의 상위 절반에 대해 동작하면, 벡터 길이가 4 이하일 때 소정의 조건이 충족될 수 있다). 벡터 길이 정보는 예를 들면 제어 레지스터 내에 저장될 수 있고, 또는 마이크로 연산의 인코딩에 포함될 수 있다.
또한, 제어 정보는 마이크로 연산과 관련된 벡터 포맷 정보를 구비할 수도 있다. 일 예에 있어서, 벡터 포맷 정보는 마이크로 연산의 인코딩으로부터 파생된 정보(예를 들면 마이크로 연산으로 처리될 벡터 길이 또는 특별한 형태의 조작을 지정하는 정보)일 수 있고, 이것에 의해 제어회로가 소스 벡터 오퍼랜드에서 선택된 및 비선택된 데이터 소자들의 패턴을 판정할 수 있다. 예를 들면, 특별한 포맷 식별자는 벡터 레지스터의 제1 및 제3 쿼터(quarter)만이 선택된 소자를 포함하고, 제2 및 제4 쿼터가 비선택되었다는 것을 표시할 수 있고, 그래서 제2 또는 제4 쿼터를 처리하는 마이크로 연산이 포맷 식별자와 관련되어 있으면, 제어회로는 소정의 조건이 충족되었다고 판정할 수 있으므로, 상기 설명한 것처럼 벡터 마이크로 연산을 대체 마이크로 연산으로 교체할 수 있다. 다른 예에 있어서는, 벡터 포맷 정보는 마이크로 연산의 인코딩으로부터 파생되는 것보다는, 제어 레지스터 내에 저장될 수 있다.
많은 경우에는, 다른 마이크로 연산이 다른 제어 정보를 사용할 수 있도록, 처리회로에 의해 유지되는 다수의 제어 정보가 있을 수도 있다. 예를 들면, 마스크 정보를 저장하는 데에 유용한 특정한 수의 마스크 레지스터들이 있을 수도 있다. 따라서, 마이크로 연산은 어느 제어 정보가 사용되어야 하는지를 지정할 수 있고, 제어회로는 마이크로 연산을 대체 마이크로 연산으로 교체할지 여부를 판정할 때 현재의 마이크로 연산에 대한 관련 제어 정보를 체크할 수 있다.
어떤 경우에는, 제어회로는 마이크로 연산과 관련되는 제어 정보로부터 분리되는 추가의 제어 지표(indicator)를 유지할 수도 있다. 소정의 조건이 제어 정보로부터 직접 충족되는지 여부를 제어회로가 판정할 수 있고, 어떤 경우에는 이것은 몇 가지 처리를 취할 수 있다. 예를 들면, 마스크 정보에 의해 제어 정보의 몇 개의 비트가 그 부분의 모든 데이터 소자가 비선택되었는지 여부를 판정하기 위해 각각 체크될 필요가 있다. 제어 지표는 소스 벡터 레지스터의 필요한 부분 내의 모든 데이터 소자가 비선택되었는지를 나타내는 단일 정보이므로, 제어 지표는 원래의 제어 정보보다 더 효율적으로 체크될 수 있다. 제어 지표는 제어 정보가 갱신될 때마다 갱신될 수 있다. 보통, 특정한 제어 정보의 갱신 후에는, 제어 정보가 다시 갱신되기 전에 다른 마이크로 연산에 대해서 또는 같은 마이크로 연산의 반복되는 경우에 대해서 몇 번 사용된다. 그러므로, 제어 정보가 갱신될 때마다 제어 지표를 생성함으로써, 제어 지표를 판정하는 처리의 오버헤드(overhead)가 제어 정보의 여러 가지 용도에 걸쳐 공유될 수 있을 가능성이 높아서, 제어 정보가 사용될 때마다 이 처리를 수행할 필요가 없다.
처리회로는 마이크로 연산을 처리하기 위한 처리 파이프라인의 일부일 수도 있다. 이 처리회로는 예를 들면 파이프라인의 1개 이상의 실행 단계에 대응할 수도 있다. 어떤 경우에는, 제어회로는 마이크로 연산들이 처리회로에 의해 처리되기 위해서 전송되는 지점까지 마이크로 연산들을 처리하기 위한 파이프라인의 한 개 이상의 이전 단계에 대응할 수 있다. 예를 들면, 파이프라인은 마이크로 연산들을 디코딩하고 디코딩된 마이크로 연산들을 이슈 회로에 디스패치하는 디스패치 회로를 가질 수도 있고, 마이크로 연산들이 그들의 오퍼랜드가 사용할 수 있게 되기를 기다리는 동안 이슈 회로는 마이크로 연산들을 큐잉(queue)하고, 처리하기 위한 마이크로 연산들을 발행한다.
상기 설명한 것과 같은 마이크로 연산의 교체는 파이프라인의 다른 부분에서 구현될 수 있다. 일 예에 있어서는, 디스패치 회로가 교체를 수행할 수도 있다. 이 접근법의 이점은 원래의 벡터 마이크로 연산 대신에 대체 마이크로 연산을 이슈 회로에 디스패치함으로써 디스패치 회로가 벡터 마이크로 연산을 교체하는 것이 비교적 간단하다는 점이다. 한편, 디스패치 회로가 이 결정을 내리는 시점에서는, 마이크로 연산에 필요한 제어 정보가 파이프라인의 이슈 단계 또는 처리 단계에서 실행중인 마이크로 연산에 의해 여전히 갱신되기 때문에 아직 이용가능하지 않을 수도 있다. 그러므로, 때때로 디스패치 회로는 제어 정보가 소정의 조건을 충족하는지 여부를 알 수 없다. 모든 마이크로 연산이 정확하게 처리되는 것을 보장하기 위해서, 디스패치 회로는 제어 정보의 보수적인 추정치를 이용하여, 제어 정보가 아직 이용할 수 없으면 적어도 한 개의 선택된 소자가 있다고 가정하여, 그것의 교체 대신에 원래의 벡터 마이크로 연산을 디스패치한다. 디스패치 회로는 처리되고 있는 레지스터의 일부 내에 어떤 선택된 소자도 없는 경우를 모두 검출할 수 없지만, 이들 마이크로 연산의 대부분의 경우를 가속화함으로써 성능 향상을 여전히 제공할 수 있다.
디스패치 회로는 마이크로 연산을 교체할지 여부의 결정을 하기 위해서 제어 정보를 체크할 수 있다. 그렇지만, 흔히 제어 정보는 처리 회로 또는 이슈 회로에 국부적인 레지스터 파일 내에 보유되어, 디스패치 회로에 대한 액세스 속도가 느려질 수 있다. 레이턴시를 줄이기 위해서, 파이프라인의 다른 단계들 사이를 통과하는 트래픽의 양을 줄이는 것이 바람직하다. 이것을 해결하기 위해서, 디스패치 회로는 소스 벡터의 일부분의 모든 데이터 소자가 비선택된 데이터 소자인지 여부를 나타내는 제1 제어 지표를 유지함으로써, 제어 정보 자체를 체크하는 일없이 소정의 조건이 충족되는지 여부를 판정할 수 있다.
이슈 회로는 비슷한 방식으로 제2 제어 지표를 유지할 수 있고, 제어 정보의 갱신에 응답해서 그것의 제2 제어 지표를 갱신할 수 있다. 이슈 회로 및 디스패치 회로 간의 트래픽을 줄이기 위해서, 제어 정보가 갱신될 때, 이슈 회로는 제어 정보의 갱신이 제2 제어 지표에 대한 갱신을 발생시키는 경우에만 그것의 제1 제어 지표를 갱신하도록 디스패치 회로를 제어할 수 있다. 이런 이유로, 제어 정보가 갱신되더라도, 이것은 마이크로 연산의 교체가 발생해야 하는지 아닌지 여부를 변경하지 않으면 디스패치 회로에 갱신이 전파되는 것을 트리거(trigger)하지 않을 것이다. 즉, 제1 제어 지표는, 소스 벡터 레지스터의 관련 부분에 대한 0 선택된 데이터 소자들을 나타내는 것과 그 부분에 대한 1이상의 선택된 데이터 소자를 나타내는 것 사이에서 제어 정보가 변화하는 경우에만 갱신된다. 예를 들면 2 선택된 데이터 소자들 대신에 4 선택된 데이터 소자들을 나타내기 위한 제어 정보의 변화는 마이크로 연산의 교체가 필요한지 여부에 영향을 미치지 않기 때문에, 디스패치 회로에 의해서 제1 제어 지표의 갱신을 발생시키지 않을 것이다.
디스패치 회로로 다시 전파될 필요가 있는 갱신의 개수를 줄이는 또 다른 방법은, 소스 벡터 레지스터의 일부 내의 데이터 소자들 모두가 비선택된 소자들이 아니라는 것을 나타내도록 처음에 제1 제어 지표를 설정하는 것이다(즉, 이것은 제어 정보를 갱신하는 명령이 디스패치될 때 행해질 수 있다). 이슈 회로는 현재 레지스터의 일부 내에 비선택된 소자들만 있도록 제어 정보가 변화하는 경우에만 제1 제어 지표의 갱신이 디스패치 회로에 전파되는 것을 트리거할 수 있다.
다른 예에서는, 제어회로가 이슈 회로를 구비할 수 있다. 이슈 회로는 제어 정보가 소정의 조건을 충족하는지 여부를 검출할 수 있고, 만일 그렇다면, 벡터 마이크로 연산을 대체 마이크로 연산으로 교체할 수 있다. 이 접근법의 이점은, 어떤 경우든 마이크로 연산들이 처리를 위해 준비되고 모든 그들의 오퍼랜드가 이용가능할 때까지 이슈 회로 내에서 기다리기 때문에, 마이크로 연산이 이슈 회로를 떠나기 전에 제어 정보가 이슈 회로에 이용가능할 것이라는 점이다. 그렇지만, 때로는 디스패치 단계에서보다 이슈 큐(issue queue)에서 마이크로 연산의 교체를 수행하는 것이 더 어려울 수 있다. 예를 들면, 프로세서는 다른 벡터 처리 유닛과 관련된 별도의 이슈 큐를 가질 수 있고, 원래의 마이크로 연산이 대체 마이크로 연산을 처리하는 큐와 다른 큐 내에 있으면, 하나의 큐로부터 마이크로 연산을 삭제하고 다른 큐에 마이크로 연산을 더하는 것과 관련된 큰 오버헤드가 있을 수도 있다. 그럼에도 불구하고, 이것은 여전히 가능할 것이다. 또한, 이 오버헤드를 피하기 위해서, 통상 원래의 마이크로 연산을 수행하는 처리 유닛에 추가의 기능을 더하는 것이 가능함으로써, 대체 마이크로 연산도 처리할 수 있고, 이런 이유로, 이슈 큐의 어떤 변화도 필요 없어, 교체 처리를 좀더 간소화할 수 있다. 무동작 마이크로 연산 또는 벡터 무브 마이크로 연산의 경우에는, 이 추가의 기능이 다량의 회로를 요구하지 않을 수도 있어, 어떤 선택된 소자도 없는 벡터 마이크로 연산들을 가속화하는 성능 이점을 고려해 볼 때 작은 추가 회로 에어리어(area)는 정당화될 수도 있다.
본 기술은 상이한 데이터 소자 사이즈 및 상이한 개수의 데이터 소자들을 벡터에 지원하는 시스템에 특히 유용하다. 그러한 시스템에 있어서는, 오퍼랜드가 오퍼랜드를 완전히 점유하지 않는 좀더 작은 데이터 소자들을 포함하기 때문에 오퍼랜드의 일부가 비활성 상태인 몇몇의 오퍼랜드 포맷이 있을 수도 있다. 이들 경우에는, 비선택된 것으로서 오퍼랜드들의 일부를 표시하기 위해서 제어 정보를 이용하는 것이 유용할 수 있고, 변환된 벡터 오퍼랜드의 비활성 부분에 작용하는 마이크로 연산들을, 본 기술을 이용해서 가속화할 수 있다.
또 다른 국면에서 보면, 본 발명은, 복수의 데이터 소자를 포함하는 벡터 오퍼랜드들을 저장하기 위한 벡터 레지스터 저장수단과,
상기 벡터 레지스터 저장수단으로부터 취득된 벡터 오퍼랜드들을 이용해서 벡터 처리를 수행하기 위한 처리수단과,
벡터 마이크로 연산들에 응답해서 상기 벡터 처리를 수행하도록 상기 처리수단을 제어하기 위한 제어수단을 구비하는 데이터 처리장치를 제공하고,
상기 벡터 레지스터 저장수단의 소스 벡터 레지스터와 목적지 벡터 레지스터를 지정하고 상기 소스 벡터 레지스터의 일부의 데이터 소자들 중 어느 것이 상기 처리수단에 의해 처리될 선택된 소자들인지를 나타내는 제어 정보와 관련된 벡터 마이크로 연산에 응답해서, 상기 제어수단은,
(a) 상기 소스 벡터 레지스터의 일부가 어떤 선택된 소자들도 포함하지 않는다는 것을 나타내는 미리 정한 조건을 상기 제어정보가 충족하는지 여부를 검출하고,
(b) 상기 제어 정보가 상기 미리 정한 조건을 충족하지 않으면, 상기 소스 벡터 레지스터의 일부에 대응하는 상기 목적지 벡터 레지스터의 일부에 저장될 결과를 생성하기 위해서, 상기 소스 벡터 레지스터의 상기 일부의 한 개 이상의 선택된 소자들을 이용하는 미리 정한 처리 동작을 수행하기 위한 상기 벡터 마이크로 연산을 처리하도록 상기 처리수단을 제어하고,
(c) 상기 제어 정보가 상기 미리 정한 조건을 충족하면, 상기 벡터 마이크로 연산보다 더 낮은 처리 레이턴시를 갖고 상기 제어 정보가 상기 미리 정한 조건을 충족하는 경우에는 상기 벡터 마이크로 연산과 같은 상기 목적지 벡터 레지스터의 일부에 대한 결과를 제공하는 대체 마이크로 연산으로 상기 벡터 마이크로 연산을 교체하고, 상기 대체 마이크로 연산을 처리하도록 상기 처리수단을 제어하도록 구성된다.
추가 국면에서 보면, 본 기술은 복수의 데이터 소자를 포함하는 벡터 오퍼랜드들을 저장하도록 구성된 벡터 레지스터 스토어와, 상기 벡터 레지스터 스토어로부터 취득된 벡터 오퍼랜드들을 이용하는 벡터 처리를 수행하도록 구성된 처리회로를 구비하는 장치의 데이터를 처리하는 방법을 제공하고, 상기 방법은,
상기 벡터 레지스터 스토어의 소스 벡터 레지스터와 목적지 벡터 레지스터를 지정하고 상기 소스 벡터 레지스터의 일부의 데이터 소자들 중 어느 것이 상기 처리회로에 의해 처리될 선택된 소자들인지를 나타내는 제어 정보와 관련된 벡터 마이크로 연산을 수신하는 단계와,
상기 벡터 마이크로 연산에 응답해서, 상기 소스 벡터 레지스터의 일부가 어떤 선택된 소자들도 포함하지 않는다는 것을 나타내는 미리 정한 조건을 상기 제어 정보가 충족하는지 여부를 검출하는 단계와,
상기 제어 정보가 상기 미리 정한 조건을 충족하지 않으면, 상기 소스 벡터 레지스터의 일부에 대응하는 상기 목적지 벡터 레지스터의 일부에 저장될 결과를 생성하기 위해서, 상기 소스 벡터 레지스터의 상기 일부의 한 개 이상의 선택된 소자들을 이용하는 미리 정한 처리 동작을 수행하기 위한 상기 벡터 마이크로 연산을 처리하도록 처리회로를 제어하는 단계와,
상기 제어 정보가 상기 미리 정한 조건을 충족하면, 상기 벡터 마이크로 연산보다 더 낮은 처리 레이턴시를 갖고 상기 제어 정보가 상기 미리 정한 조건을 충족하는 경우에는 상기 벡터 마이크로 연산과 같은 상기 목적지 벡터 레지스터의 일부에 대한 결과를 제공하는 대체 마이크로 연산으로 상기 벡터 마이크로 연산을 교체하고, 상기 대체 마이크로 연산을 처리하도록 상기 처리회로를 제어하는 단계를 포함한다.
본 기술은 가상 머신 환경에서도 구현될 수 있다. 상기 설명한 방식으로 벡터 마이크로 연산을 처리할 수 있는 가상 실행 환경을 제공하는 기록매체 상에 기억된 컴퓨터 프로그램은 컴퓨터에 의해 실행될 때, 제공될 수 있다.
본 기술의 추가 국면, 특징 및 이점은 첨부도면과 관련해서 판독되는 이하의 예시 실시예의 설명으로부터 분명해질 수 있다.
본 발명에 의하면, 벡터 처리 동작을 취급할 때의 처리 성능을 개선할 수 있다.
도 1은 벡터 처리를 위한 데이터 처리장치를 개략적으로 나타낸 것이다.
도 2는 소스 벡터 오퍼랜드로부터 선택된 데이터 소자들을 처리하는 벡터 마이크로 오퍼랜드의 예를 나타낸 것이다.
도 3은 비선택된 데이터 소자들만을 구비하는 소스 벡터 레지스터의 일부의 예를 나타낸 것이다.
도 4는 일부가 어떤 선택된 데이터 소자도 구비하지 않는 벡터 마이크로 오퍼랜드로 이어질 수 있는 내포된 루프(nested loops)의 예를 나타낸 것이다.
도 5는 디스패치 단계에서 벡터 마이크로 오퍼랜드를 교체하는 제1 예를 나타낸다.
도 6 및 도 7은 마스크 레지스터 파일 내에 제어 지표를 저장하는 2개의 예를 나타낸다.
도 8은 벡터 길이 레지스터 파일 내에 제어 지표 저장하는 예를 나타낸다.
도 9는 디스패치 단계에 의해 유지된 제어 지표의 예를 나타낸다.
도 10은 이슈 단계에서 마이크로 오퍼랜드를 교체하는 예를 나타낸다.
도 11은 벡터 오퍼랜드를 처리하는 방법을 나타낸다.
도 12는 본 기술의 가상 머신 구현을 나타낸다.
도 1은 벡터 처리를 지원하는 처리회로(4)를 갖는 데이터 처리장치(2)의 예를 개략적으로 나타낸 것이다. 처리회로(4)는 입력 버스(8)를 통해서 벡터 레지스터 스토어(6)로부터 수신된 소스 벡터 오퍼랜드들을 처리할 수 있고, 소스 오퍼랜드들의 각 데이터 소자에 대해서 대응하는 데이터 처리 동작을 행해서 출력 버스(10)를 통해서 벡터 레지스터 스토어(6)에 출력된 결과 벡터 오퍼랜드를 생성할 수 있다. 이 처리회로는 서로 병렬로 각 데이터 소자에 대해서 동작을 행하는 벡터 프로세서, 또는 병렬보다는 순차적으로 동작을 행하는 스칼라 프로세스를 구비할 수도 있다. 처리회로(4)는 서로 다른 타입의 처리동작을 수행하는 몇 개의 기능유닛(12)을 포함한다. 이 예에 있어서, 기능유닛(12)은 덧셈, 곱셈, 시프트 및 논리 연산 등의 ALU(Arithmetic Logic Unit) 연산을 수행하는 ALU, 곱셈 누적 연산을 수행하는 MAC(Multiply Accumulate) 유닛 및 플로팅 포인트 연산을 수행하는 FPU(Floating Point Unit)을 포함한다. 다른 타입의 기능유닛이 제공될 수도 있는 것을 인식할 것이다. 벡터 로드/스토어(load/store) 유닛(14)은 또한 캐시 또는 메모리로부터의 데이터를 벡터 레지스터 스토어(6)로 로드하고, 벡터 레지스터 스토어(6)로부터의 데이터를 캐시 또는 메모리에 저장하기 위해서 설치되어 있다.
데이터 처리장치(2)는 또한 처리회로에 의해 수행되는 동작을 제어하기 위한 제어회로(20)도 갖는다. 제어회로(20)는 캐시 또는 메모리로부터 명령들을 수신하는 명령 큐(22), 처리회로(4)에 의해 처리되어야 하는 마이크로 연산을 생성하기 위한 명령을 디코드하여, 마이크로 연산을 이슈 큐(26)에 디스패치하는 디스패치 단계(24)를 갖는다. 마이크로 연산은 마이크로 연산을 수행하는 데에 필요한 그들의 오퍼랜드 및 어떤 제어 정보가 이용가능하게 될 때까지 이슈 큐(26)에 남아 있고, 그 지점에서 마이크로 연산이 로드/스토어 마이크로 연산이면, 처리회로(4)의 처리유닛(12) 중 하나에 의해, 또는 로드/스토어 유닛(14)에 의해 처리하기 위한 마이크로 연산이 발행된다.
마이크로 연산(μops)은 전체 명령 또는 일부 명령에 각각 대응한다. 일부 명령들은 로드/스토어 다중 명령의 상이한 로드/스토어 등, 수행되어야 할 상이한 동작들, 또는 소스 벡터 오퍼랜드로부터의 데이터 소자들의 시퀀스의 조합에 근거해 데이터 값을 생성하기 위한 벡터 스캔 동작 등의 복합 처리 동작의 상이한 스텝들에 대응하는 다수의 마이크로 연산으로 분리될 수 있다. 다른 명령들은 소스 오퍼랜드들의 상이한 부분들을 처리하는 별도의 마이크로 연산들로 분리될 수 있다. 예를 들면, 벡터 오퍼랜드는 256 혹은 512개의 데이터 소자를 포함할 수도 있지만, 한 번에 32 혹은 64개의 데이터 소자들을 처리하는 상이한 마이크로 연산들에 의해서 좀더 작은 덩어리(chunks)로 분리될 수도 있다. 다른 예들은 8 혹은 16개의 소자를 벡터에 사용하고, 한 번에 4 혹은 8개의 소자의 작은 덩어리에서 그들을 처리할 수도 있다.
처리회로(4)는 마이크로 연산에 의해 처리될 소스 레지스터들의 일부 내에 있는 어느 데이터 소자들이 처리되어야 할 선택된 소자들인지를 제어하는 제어 정보(28)에의 액세스를 갖는다. 도 2는 어느 데이터 소자들이 선택된 데이터 소자들(1)인지와 어느 데이터 소자들이 비선택된 데이터 소자들(0)인지를 정의하는 마스크 정보(30)를 구비한다. 덧셈 마이크로 연산은 2개의 소스 오퍼랜드 32, 34의 선택된 비트 소자들을 더하고, 벡터 레지스터 스토어(6)에 기록되는 결과 오퍼랜드(36)의 대응하는 데이터 소자들 내에 소자들의 각 쌍의 합을 배치한다. 소스 오퍼랜드들의 비선택된 데이터 소자들은 더해지지 않고, 그래서 결과 오퍼랜드(36)의 대응하는 소자들(이 예에 있어서는 소자 1 및 3)이 또 다른 값으로 설정된다. 결과 오퍼랜드의 비선택된 부분의 값을 선택하기 위한 서로 다른 모드들이 제공될 수도 있다. 하나의 예에 있어서, 결과값에서의 비선택된 부분들은 1로 모두 설정된 비트들을 가진 값 또는 제로 등, 소정의 값으로 설정될 수도 있다. 또 다른 예에 있어서, 비선택된 부분은 소스 레지스터의 대응하는 부분의 값을 취할 수도 있고, 결과 오퍼랜드(36)를 저장하기 위한 벡터 레지스터 스토어(6) 내에 목적지 레지스터(destination register)의 대응하는 부분의 이전 값을 보유할 수도 있다. 도 2는 제어 정보(28)가 마스크 정보(30)인 예를 나타내고, 다른 예에 있어서는, 제어 정보는 선택된 소자들을 포함하는 소스 레지스터의 일부의 길이를 지정하는 벡터 길이 정보, 또는 선택된/비선택된 데이터 소자들의 특정 패턴을 지정하는 포맷 정보일 수도 있다.
처리회로(4)에 의해 처리되어야 할 마이크로 연산이, 처리되어야 할 소스 레지스터의 일부 내의 데이터 소자들 중의 어떤 것도 선택된 소자들이 아니라는 것을 지정하는 제어 정보(28)를 갖는 것이 가능한 상황이 있다. 그러한 마이크로 연산은 이하에서는 "제로 길이" 마이크로 연산이라고 칭한다(마스크 정보 또는 다른 제어 정보를 이용해서 제로 길이 마이크로 연산을 표시하는 것도 가능하지만, 그들은 제로의 벡터 길이 파라미터로 표시될 수 있다). 도 3은 제로 길이 마이크로 연산이 발생할 수도 있는 첫 번째의 예를 나타낸다. 처리회로(4)는 상이한 데이터 소자 사이즈를 지지할 수 있음으로써, 데이터 레지스터가 예를 들면 4개의 32비트 데이터 소자들(도 3의 F32 포맷에 나타낸 것처럼) 또는 2개의 64비트 데이터 소자들로 분리될 수도 있다. 도 3에 도시한 바와 같이, 2개의 32비트 데이터 소자들이 128 비트 레지스터의 부분 0 및 2 내에 배치되지만, 32비트 부분 1 및 3은 비활성 상태인 포맷 F64도 있을 수 있다. 이것은 예를 들면, 계산을 위한 더 단순한 (흔히 더 빠른) 단일 정밀 하드웨어를 사용하는 것을 허용하기 위해서, 더블 및 단일 정밀 플로팅 포인트 값들 간의 캐스트들(casts)을 간소화하는 데에 유용할 수 있다. 도 3에 나타낸 마스크에 의해 예측이 제공되는 일없이, 전체 F64 값은 처리회로(4)의 기능유닛(12)을 통해서 전파될 것이고, 이것은, 데이터패스(datapath)의 절반이 불필요하게 활성화될 것이라는 것을 의미할 것이다. F64 값의 부분 1 및 3이 비선택된 소자들이라는 것을 나타내기 위한 마스크를 이용해서, 이들 소자들을 처리하기 위한 처리 리소스(resource)가 절약 가능하다. 따라서, 부분 1 및 3 중 하나에서 동작하는 마이크로 연산은 처리할 어떤 선택된 데이터 소자도 가지고 있지 않기 때문에 제로 길이 마이크로 연산이다.
도 4는 어레이 A[x], B[y]의 소자들을 이용하는 어떤 처리 동작이 2개의 변수 x 및 y에 대해서 반복하는 내포된 루프가 있는 또 다른 예를 나타낸다. 벡터 처리는 단일 마이크로 연산으로 루프의 다수의 상이한 반복을 결합하기 위해서 사용될 수 있다. 예를 들면, 루프의 512 반복은 512 소자 벡터를 이용해서 처리될 수 있다. 그렇지만, 루프는 흔히 정확한 2의 거듭제곱(예를 들면, 760)이 아닌 다수의 반복을 통해서 반복해야 할 수도 있다. 이 경우에, 512 반복은 완전히 점유된 512 소자의 벡터를 이용해서 처리될 수 있지만, 512 소자 벡터를 완전히 채우지 않는 나머지의 245 반복이 있어서, 많은 벡터가 비선택된 소자들로 구성될 것이다. 벡터의 소자들의 수가 클수록 연속적인 2개의 파워(powers) 간의 간격이 커지기 때문에, 벡터 사이즈가 증가함에 따라 이 문제가 커지게 되므로, 루프는 많은 비선택된 소자들이 있는 하나의 벡터를 이용해서 행해진 벡터 연산을 포함할 가능성이 높다. 이것은, 루프에 대한 최종 벡터 연산만이 불완전한 벡터를 이용해서 행해지기 때문에, 단일 루프에 대한 중요한 문제가 아닐 수도 있다. 그렇지만, 도 4에 나타낸 것과 같은 내포된 루프가 있는 경우에는, 외부 루프의 각 반복시에, 내부 루프의 최종 스텝은 불완전한 벡터를 처리할 수도 있으므로, 외부 루프가 여러 번 반복되면, 제로 길이 마이크로 연산의 처리가 상당한 성능 손실을 일으킬 수 있다.
제로 길이 마이크로 연산이 발생할 수 있는 또 다른 상황은, 그것의 실행 경로에 대한 비트 폭이 더 좁은 처리회로가 사용될 수 있도록, 좀더 큰 벡터들을 이용하는 벡터 연산들이 좀더 작은 덩어리의 벡터를 각각 처리하는 별도의 벡터 마이크로 연산으로 분할되는 경우이다. 예를 들면, 벡터 레지스터 파일(6)이 128 소자 벡터를 지지할 수도 있지만, 회로 면적을 줄이기 위해서 처리회로는 64 소자 벡터만을 처리할 수 있는 데이터 경로를 가질 수도 있다. 이 경우, 128 소자 벡터는 처리회로를 통해서 2개의 패스(pass)에서 처리될 수도 있다. 128 소자가 별도의 패스에서 처리된다는 점은 128 소자 벡터 처리 명령을 지정할 수도 있었던 프로그래머에게는 보이지 않을 수도 있다. 이 명령은 벡터 오퍼랜드의 절반 또는 다른 절반이 비선택된 소자들을 포함한다는 것을 나타내는 제어 정보에 의해서 마이크로 연산에 맵핑될 수 있다. 이런 이유로, 비선택된 소자들로 완전히 구성되는 레지스터의 일부분을 처리하는 몇 개의 마이크로 연산이 있을 수도 있다.
그러므로, 제로 길이 마이크로 연산이 상당히 자주 발생할 수도 있다. 적어도 한 개의 선택된 소자가 있는 경우에 행해지는 처리 동작은 완료하는 데에 몇 가지의 처리 사이클을 요구할 수도 있다. 예를 들면, MAC 유닛에 의해 수행된 곱셈 누적 연산, 혹은 FPU에 의해 수행된 플로팅 포인트 연산은 몇 개의 사이클을 요구할 수도 있다. 제로 길이 마이크로 연산이 이들 유닛 중의 하나에 발행되면, 이것은 제로 길이 마이크로 연산의 결과가 다른 마이크로 연산에 대해서 이용가능하게 되기 전에 몇 개의 사이클의 지연을 일으킬 수도 있고, 그 동안에 다른 마이크로 연산이 같은 처리유닛(12)을 이용하는 것을 방지할 수 있어, 성능의 손실을 일으킬 수 있다. 본 기술은 이것이 제로 길이 마이크로 연산이 좀더 빠른 마이크로 연산과 교체될 수 있기 때문에 불필요하다는 것을 인식한다.
제어회로(20)는, 제어 정보(28)가 처리될 소스 레지스터의 부분만이 비선택된 소자들을 구비하는 것을 나타내는 소정의 조건을 충족하는 경우를 식별하고, 만일 그렇다면, 제어회로(20)는 원래의 마이크로 연산이 발생했을 경우보다 더 적은 사이클로 처리될 수 있는 대체 마이크로 연산으로 마이크로 연산을 교체한다. 이하의 테이블은 상이한 타입의 교체가 이루어질 수 있는 예를 나타낸다.
명령 타입 제로잉(Zeroing) 파괴 & 머징 비파괴 & 머징 1 비파괴 & 머징 2
설명 목적지 레지스터의 비선택된 소자들을 0으로 설정한다.





하나의 소스 레지스터가 절대적으로 목적지 레지스터로서 작용한다.
vScr/vDst 레지스터의 비선택된 소자들을 보존한다.
레지스터 재명명에 의해, 비순차(O3) 프로세서가 원래(재명명 전)의 레지스터로부터 신규(재명명 후) 레지스터로 소자들을 카피할 필요가 있다.
소스 및 목적지 레지스터에 대한 별도의 오퍼랜드를 허용

vDst 레지스터의 비선택된 소자들을 보존
소스 및 목적지 레지스터에 대한 별도의 오퍼랜드를 허용

목적지 레지스터의 비선택된 소자들을 그에 대응하는 소스 레지스터의 소자들로 교체
교체 "vmov vDst, 0" 순차:NOP
O3:"vmov vDstnew, vDstorg"
순차:NOP
O3:"vmov vDstnew, vDstorg"
"vmov vDst, vSrc"
의존성 없음 순차: 없음
O3:vDstorg
vDstorg vSrc
벡터 무브 마이크로 연산 "vmov" 혹은 무동작(no-op) 마이크로 연산 "NOP"는 일반적으로 결과의 값을 생성하기 위해서 소스 데이터 소자들의 처리를 필요로 하는 더 복잡한 마이크로 연산보다 더 적은 사이클로 처리될 수 있고, 그래서 원래의 조작을 이들 마이크로 연산 중의 하나로 교체함으로써 처리를 가속화할 수 있다. 제로 길이 벡터 마이크로 연산을 대체 마이크로 연산으로 교체함으로써 얻은 잠재적인 성능(potential performance)은 기본 기능유닛(12)의 레이턴시 및 유용성에 의존한다. 예를 들면, 정해진 벡터 기능유닛(12)은 3개 이상의 사이클을 필요로 하지만, 벡터 무브 마이크로 연산은, 2개의 사이클로 수행될 수도 있어, 적어도 한 개의 사이클이 절약될 수 있다. 또한, 처리회로(2)는 2개의 제로 길이 마이크로 연산이 병렬로 가속화될 수 있을 때까지, 벡터 무브 마이크로 연산을 수생하기 위한 2개의 순열 기능유닛뿐만 아니라 듀얼 이슈 능력을 지니고 있어, 원래 타킷으로 하는 기능유닛(12)이 다른 명령들에 의해 자유롭게 사용되게 된다.
대부분의 상황에서는 마이크로 연산을 무동작 조작으로 교체하는 것이 충분하지 않다는 점에 유념한다. 대신에, 벡터 무브(vmov) 명령은 목적지 레지스터가 정확한 값을 사용하는 것을 보장하기 위해서 사용될 수 있다. 이것은 특히 레지스터 재명명(renaming)이 일어났었던 비순차(out-of-order) 프로세서의 경우이며, 그래서 소스 및 목적지 레지스터가 같은 경우에도, 레지스터 재명명이 이들을 다른 물리적 레지스터에 맵핑해서, 벡터 무브 명령이 여전히 요구될 수 있다. 또한, 제어 정보가 필요한 부분의 모든 소자가 비선택된 소자들이라는 것을 나타내는 경우에도, 마이크로 연산이 이전 명령의 결과를 기다리는 것을 요구하는 데이터 의존성이 여전히 있을 수도 있다. 이것은 목적지 레지스터가 소스 레지스터와 다른(또는 레지스터 재명명에 의해 다른 레지스터에 맵핑되었던) 경우에 발생하고, 목적지 레지스터의 비선택된 부분은 소스 레지스터의 대응하는 부분과 같은 값으로 설정되고 있다. 상기에 나타낸 "파괴(destructive) & 머징(merging)" 경우는, 목적지 레지스터의 비활성 소자들을 소스 레지스터로부터의 소자들로 교체하는 것으로 가정함으로써, 명령이 목적지 레지스터에 입력 의존성을 보이지 않아서(만약 레지스터 재명명이 없다면), 더 빨라질 수 있는 특별한 경우이다. "비파괴(non-destructive) & 머징 1"에 대해서는, 목적지 레지스터의 비선택된 소자들이 보존되고 있기 때문에 목적지 레지스터에 대한 입력 의존성이 있다.
특별한 주의는 조건 실행을 지지하는 시스템에 있어서 조건 플래그의 갱신을 통상적으로 수행하는 명령들에 대해서 취해져야 한다. 조건 마이크로 연산은 조건 플래그가 특별한 상태를 나타내는 경우에만 실행될 수도 있다. 일부 마이크로 연산은 그들의 처리 결과에 의거해서 조건 플래그를 갱신할 수도 있다. 마이크로 연산을 갱신하는 조건 플래그가 제로 길이 마이크로 연산이면, 어떤 경우에 있어서는 종종 비선택된 소자들이 플래그 갱신에 아무런 영향을 미치지 않기 때문에 플래그 갱신이 무시될 수도 있다. 그렇지만, 마이크로 연산에 의해 처리될 비선택된 소자들이 있더라도 플래그 갱신이 요구될 가능성이 있으면, 이것은 (예를 들면 통상적으로 벡터 무브 마이크로 연산의 경우가 아닌) 조건 플래그를 갱신하기 위한 기능도 포함하도록 대체 마이크로 연산을 수행하는 처리유닛(12)을 확장함으로써 처리될 수 있었다.
마이크로 연산의 교체는 디스패치 회로(24)에서 또는 이슈 회로(26)에서 일어날 수 있다. 도 5는 디스패치 회로(24)가 교체를 수행하는 예를 나타낸다. 이 경우에, 벡터 및 명령(슬롯 2에서 vadd)은 레지스터의 필요한 부분이 전체적으로 비선택된 소자들로 구성되는 것을 나타내는 대응하는 마스크 정보 VM(0)를 갖는다. 그러므로, 덧셈 명령은 벡터 무브 명령(vmov vv2, vv1)으로 교체된다. 모든 소자가 비선택된 소자여도, 슬롯 1에서의 vmov가 슬롯 2에서 마이크로 연산을 위한 소스 레지스터 vv1 내에 배치되는 값을 생성하기 때문에 벡터 무브 명령은 여전히 이전의 벡터 무브 명령(슬롯 1에서 vmov)에 의존한다. 그렇지 않으면, 슬롯 2에서의 벡터 무브 명령은 슬롯 1에서의 작동 후의 값보다는 오히려 슬롯 1에서의 작동이 실행되기 전의 레지스터 vv1 내의 값에서 작동할 것이다.
도 6 및 도 7은 제어 정보(28)를 저장하기 위한 마스크 레지스터 파일의 다른 예를 나타낸다. 다수의 마스크 레지스터가 제공될 수도 있고, 마이크로 연산이 마스크 레지스터들 중의 어느 것이 그 마이크로 연산을 위한 제어 정보를 저장하는지를 나타낼 수도 있다. 디스패치 회로(24)가 원래의 마스크 데이터 자체에 의존해서 마이크로 연산의 교체를 수행할지 여부를 판정하는 것이 가능하다. 그렇지만, 이 경우에 디스패치 회로는 연산을 교체하는 데에 필요한 동작이 충족되는지 여부를 판정하기 위해서 마스크 정보의 몇 개의 비트를 결합해야 할 것이다. 마이크로 연산이 제로 길이 마이크로 연산인지 여부를 확인하는 속도를 높기 위해서, 마스크로 나타낸 모든 소자가 선택 또는 비선택되었는지를 나타내는 추가 제어 플래그(40)를 포함하도록 각 마스크 레지스터가 도 6에 나타낸 것처럼 확장될 수도 있다. 도 6에 나타낸 추가 제어 지표(40)는 마스크의 비트 중의 어느 하나가 1이면 "거짓(false)"의 값을 갖고, 마스크의 비트의 모두가 0이면 "참(true)"의 값을 갖는다. 추가 제어 지표(40)는 대응하는 마스크의 비트들에 대해 NOR 연산을 적용함으로써 결정될 수 있다. 주어진 마이크로 연산을 위한 제어 지표(40)가 "참"이면, 디스패치 회로(24)는 상기 설명한 바와 같이 대응하는 마이크로 연산을, 좀더 빠른 NOP 또는 vmov 마이크로 연산으로 교체할 수 있다.
도 7은 마스크의 다른 절반에 각각 대응하는, 2개의 제어 지표 40, 42가 제공되어 있는 마스크 레지스터 파일의 두 번째 예를 나타낸다. 이것에 의해 마이크로 연산을 대체 마이크로 연산으로 교체함으로써 마이크로 연산들을 가속화할 수 있는지 확인하기 위해 벡터 오퍼랜드의 절반에 대해서만 동작하는 마이크로 연산들을 체크할 수 있다. 마찬가지로, 마스크 레지스터의 좀더 작은 부분에 대응하는(예를 들면, 마스크를 4, 8, 16 등으로 분할하는) 추가 제어 플래그를 생성하는 것이 가능하다.
도 6 및 7에 대해서는, 마스크 레지스터에의 기록이 있을 때마다, 제어회로(20)는 대응하는 제어 지표 40, 42를 갱신할 수 있다. 이것은 지표 40, 42를 설정 또는 재설정하도록 NOR 네트워크를 통해서 기록을 패스함으로써 달성될 수 있다. 일반적으로, 같은 마스크는 다시 갱신되기 전에 다른 마이크로 연산에 의해 여러 번 사용될 수 있고, 그래서 이렇게 마스크 레지스터에의 기록에 대해 플래그 40, 42를 갱신함으로써, 플래그 40, 42를 생성하기 위한 처리가 모든 판독에 대해 반복되는 것보다는 오히려 다수의 판독 전체에 걸쳐 분할상환(amortized)될 수 있다.
도 8은 다른 마이크로 연산에 대해 벡터 길이 데이터(44)를 저장하기 위한 레지스터를 갖는 벡터 길이 레지스터 파일을 구비하는, 제어 정보(28)의 또 다른 예를 나타낸다. 각 마이크로 연산은 어느 레지스터가 그 마이크로 연산에 대한 벡터 길이를 저장하는지를 지정할 수 있다. 벡터 길이 필드(44)는 얼마나 많은 선택된 데이터 소자들이 존재하는지를 나타내고, 벡터 길이로 나타낸 소자보다 더 높은 위치에 있는 소자들이 비선택된 것으로 가정할 수 있다. 다시, 어떤 부분이 완전히 비선택된 소자로 구성되는지를 나타내기 위한 제어 플래그 40, 42를 결정할 수 있다. 예를 들면, 도 8에 있어서는, 2개의 플래그 40, 42가 8 소자 벡터의 제1 및 제2의 절반에 대응한다. 벡터 길이가 0이면, 양쪽 절반은 완전히 비선택된 소자로 구성되고, 그래서 2개의 플래그 40, 42가 모두 "참"이다. 벡터 길이가 4이면, 플래그 40이 "거짓"이고, 플래그 42는 "참"인데, 그 이유는 벡터의 제2의 절반만이 비선택된 소자로 이루어지기 때문이다. 벡터 길이가 8이면, 모든 데이터 소자가 선택되고, 그래서 양쪽 플래그가 "거짓"이다. 그러므로, 디스패치 회로(24)는 마이크로 연산을 교체할지를 결정하기 위해서 도 8에 나타낸 테이블을 이용할 수 있다.
디스패치 회로(24)는 또한 도 9에 나타낸 바와 같이 그 자신의 제어 지표 44, 46의 테이블을 유지할 수도 있으므로, 흔히 이슈 큐(26)에 대해 국부적인 마스크/벡터 길이 레지스터 파일에 액세스해야 했던 경우보다 더 빨리 주어진 조작에 대한 마스크 또는 벡터 길이가 모든 비선택된 소자의 한 블록을 지정하는지 여부를, 결정할 수 있다. 그렇지만, 제로 길이 마이크로 연산의 검출이 일찍 디스패치 단계에서 수행될 때, 이슈 큐(26)에서 실행중인 마이크로 연산에 의해 대응하는 제어 정보(28)가 여전히 생성되는 몇몇의 동작이 있을 수도 있다. 그러므로, 제어 지표 44, 46의 "참" 및 "거짓" 상태뿐만 아니라, "모름" 상태 "x"도 있을 수 있다. 일반적으로, 제어 정보가 알려져 있지 않으면, 디스패치 회로(24)는 보수적으로 적어도 한 개의 선택된 소자가 있을 수도 있다고 가정하고, 즉 "x"가 "거짓"으로서 처리됨으로써 마이크로 연산이 수행되지 않고 원래의 마이크로 연산은 이슈 큐(26)에 디스패치된다. 또한, 하나의 제어 정보를 갱신하는 명령의 디스패치 시에는, 디스패치 회로(24)는 대응하는 플래그 44, 46을 설정해서 x/거짓을 나타낼 수도 있다. 도 9에 있어서의 플래그 44, 46은 마스크 레지스터 파일 또는 벡터 길이 레지스터 파일 내의 이슈 큐(26)에 의해 유지되는 대응하는 플래그 40, 42의 대응하는 갱신에 응답해서 디스패치 회로(24)에 의해 갱신된다. 이슈 큐(26)는 제어 플래그 40, 42가 상태를 변경하는 경우에만 제어 플래그 40, 42의 갱신을 다시 디스패치 회로(24)로 전파한다. 제어 정보의 갱신이 제어 플래그 40, 42의 상태를 변경하지 않으면, 디스패치 회로(24)에 의해 유지된 플래그 44, 46은, 불필요한 단계들 간의 트래픽(traffic)을 피하기 위해서 갱신되지 않는다. 대신에, 모든 플래그 갱신을 다시 디스패치 회로(24)에 전파하는 증가된 트래픽이 허용되면, 마스크/벡터 길이 레지스터 파일이 플래그 40, 42를 포함할 필요가 없고, 대신에 디스패치 회로(24)에 의해 유지된 플래그 44, 46은 유일한 제어 플래그(이하에서는 옵션)일 수도 있다.
요약하면, 도 9에 나타낸 플래그 44, 46은 아래와 같이 디스패치 회로(24)에 의해서 갱신될 수도 있다:
● 특정한 마스크 레지스터에 기록하는 마이크로 연산이 이슈 큐(26)에 디스패치될 때 관련 플래그 44, 46을 (0으로 설정) 무효화(이 예에 있어서는, 0은 도 9의 x/거짓에 대응한다)
● 관련 플래그 44, 46을 설정/재설정:
a) 제어 정보의 모든 갱신 시에, 또는
b) 대응하는 플래그 40, 42가 제어 정보의 갱신 후에 변화하는 경우에만.
옵션 a) 디스패치 단계 및 이슈/실행 단계 간의 상호작용을 증가시키지만, 도 6 내지 8에 나타낸 바와 같이 확장된 레지스터 파일을 요구하지 않고, 옵션 b) 디스패치 단계와 이슈/실행 단계 간의 상호작용을 감소시킨다.
제로 길이 마이크로 연산을 검출해서 그들을 디스패치 단계에서 교체하는 것은 비교적 구현이 간단하고 다음 파이프라인 단계에 매우 낮은 영향을 미친다. 그렇지만, 제어 정보의 몇몇의 실행중인 갱신이 있을 수도 있기 때문에, 디스패치 단계는 제로 길이 마이크로 연산을 보수적으로 추정해야 하고, 그래서 이것에 의해 제로 길이 마이크로 연산의 실행이 여전히 발생할 수 있다.
도 10에 도시한 바와 같이, 또 다른 옵션은, 이슈 큐(26)에 대해서 제로 길이 마이크로 연산을 검출해서 그들을 또 다른 마이크로 연산으로 교체하는 것이다. 이것은 마이크로 연산이 이슈 큐에 진입하는 시점에 제어 정보의 실행중인 갱신이 있더라도 제로 길이 마이크로 연산을 가속화할 수 있는 이점이 있다. 그러므로, 도 10의 예에 있어서는, 마스크 레지스터 파일 VM0을 설정하는 영거(younger) vset 연산 뒤에 슬롯 2에서 벡터 가산 연산이 있다. 이 가산 연산은 set가 완료하고 결과의 마스크를 이슈 큐에 전파할 때까지 기다려야 한다. 마스크가 갱신될 때 이슈 큐(26)도 마스크 레지스터 파일과 관련된 대응하는 제어 플래그 40, 42를 갱신한다. 이 플래그가 거짓이면 vadd 마이크로 연산이 정상적으로 진행한다. 플래그가 참이면, 이슈 큐(26)는 vadd 마이크로 연산을, 레지스터 vv1의 부분을 레지스터 vv2의 대응하는 부분으로 이동시키기 위한 대체 벡터 무브 마이크로 연산으로 교체한다. 처리회로(4)의 다른 기능유닛(12)에 대응하는 다수의 다른 이슈 큐가 있으면, 마이크로 연산을 교체할 때 이슈 큐를 전환할 필요성을 피하기 위해서, 교체 마이크로 연산도 수행할 수 있도록 통상적으로 원래의 마이크로 연산을 수행하는 기능유닛(12) 내부에 회로를 제공하는 것이 유용할 수도 있다.
어떤 시스템은 디스패치 단계(24)에서 제로 길이 마이크로 연산을 검출해서 교체할 수 있고 다른 것들은 이슈 단계(26)에서 이것을 행할 수 있으며, 양쪽 단계에서 검출 및 교체를 행하는 것도 가능하다. 이것은 몇몇의 제로 길이 마이크로 연산을, 이들 조작이 또 다른 조작으로 좀더 쉽게 교체될 수 있는 시점에서 캐치(catch)하고, 이 이슈 단계가 제어 정보의 실행중인 갱신에 의존하는 약간의 나머지 제로 길이 마이크로 연산을 검출하는 이점이 있다. 이것은 주어진 마이크로 연산에 대해서 가능한 가장 효율적인 방식으로 교체를 실현하면서, 모든 제로 길이 마이크로 연산이 검출되는 것을 허용함으로써, 성능 향상 및 회로/처리 복잡성 사이에 더 나은 균형이 있을 수도 있다.
도 11은 벡터 처리를 수행하는 방법을 나타낸다. 스텝 100에서, 제어회로(20)는 어느 소자가 선택된 소자 및 비선택된 소자인지를 식별하는 제어 정보를 갖는 펜딩(pending) 벡터 마이크로 연산이 있는지 여부를 검출한다. 그러한 조작이 검출된 경우 스텝 102에서는 제어 정보가 소스 레지스터 또는 레지스터들의 현재의 부분에 선택된 소자들이 없다는 것을 나타내는지 여부를 판정한다. 이것은 제어 정보 자신으로부터, 또는 상기 설명한 것처럼 제어 플래그 40, 42, 44, 46과 같은 파생된 파라미터로부터 행해질 수 있다. 적어도 한 개의 선택된 소자가 있으면, 스텝 104에서는 제어회로(20)는 선택된 소자들을 이용하여 그것의 원래의 형태로 벡터 마이크로 연산을 처리하도록 처리회로(4)를 제어한다. 어떠한 선택된 소자들도 없으면, 스텝 106에서는 벡터 마이크로 연산을 대체 마이크로 연산으로 교체하고, 처리회로(4)는 원래의 마이크로 연산 대신에 대체 마이크로 연산을 처리하도록 제어된다. 대체 마이크로 연산은 원래의 마이크로 연산보다 더 적은 사이클로 처리될 수 있고, 그래서 이러한 교체는 성능을 향상시킨다.
도 12는 사용될 수 있는 가상 머신 구현을 나타낸다. 관련된 기술을 지지하는 특정한 처리 하드웨어를 동작시키기 위한 장치 및 방법의 관점에서 이전에 설명한 실시예는 본 발명을 구현하고, 소위 하드웨어 디바이스의 가상 머신 구현을 제공하는 것도 가능하다. 이들 가상 기계 구현은 가상 머신 프로그램(210)을 지지하는 호스트 오퍼레이팅 시스템(220)을 일반적으로 작동시키는 호스트 프로세서(230) 상에서 실행된다. 일반적으로, 큰 강력한 프로세서는 적당한 속도로 실행하는 가상 기계 구현을 제공하는 데에 필요하지만, 그러한 접근은 호환성 또는 재사용 이유 때문에 또 다른 프로세서에 고유한 코드를 실행하는 요구가 있는 경우 등, 특정 환경에서 정당화될 수도 있다. 가상 기계 프로그램(210)은 실제의 하드웨어 디바이스에 의한 프로그램의 실행에 의해 제공되는 것과 같은 결과를 주기 위해서 어플리케이션 프로그램(또는 오퍼레이팅 시스템)(200)을 실행할 수 있다. 이와 같이, 상술한 메모리 액세스의 제어를 포함하는 프로그램 명령들을, 가상 기계 프로그램(210)을 이용해서 어플리케이션 프로그램(200) 내에서 실행할 수 있다.
예시한 본 발명의 예시한 실시예는 첨부도면을 참조하면서 여기서 상세히 설명되었지만, 본 발명은 이들 특정한 실시예에 한정되지 않는다는 것을 알 수 있고, 다양한 변화 및 변형이 첨부된 청구항에 의해 정의된 것처럼 본 발명의 범위 및 정신으로부터 벗어나지 않고 본 기술분야에 속하는 당업자에 의해서 발생될 수 있다.
2; 데이터 처리장치
4: 처리회로
6: 벡터 레지스터 스토어
8; 입력 버스
10; 출력 버스
14: 벡터 로드/스토어 유닛
20: 제어회로
22: 명령 큐
24: 디스패치 단계
26: 이슈 큐
28: 제어 정보

Claims (27)

  1. 복수의 데이터 소자로 이루어진 벡터 오퍼랜드들을 저장하도록 구성된 벡터 레지스터 스토어와,
    상기 벡터 레지스터 스토어로부터 취득된 벡터 오퍼랜드들을 이용해서 벡터 처리를 수행하도록 구성된 처리회로와,
    벡터 마이크로 연산들에 응답해서 상기 벡터 처리를 수행하도록 상기 처리회로를 제어하도록 구성된 제어회로를 구비하고,
    상기 벡터 레지스터 스토어의 소스 벡터 레지스터와 목적지 벡터 레지스터를 지정하고, 상기 소스 벡터 레지스터의 일부의 데이터 소자들 중 어느 것이 상기 처리회로에 의해 처리될 선택된 소자들인지를 나타내는 제어 정보와 관련된, 벡터 마이크로 연산에 응답해서, 상기 제어회로는,
    (a) 상기 제어 정보가, 상기 소스 벡터 레지스터의 일부가 어떤 선택된 소자들도 포함하지 않는다는 것을 나타내는 미리 정한 조건을 충족하는지 여부를 검출하고,
    (b) 상기 제어 정보가 상기 미리 정한 조건을 충족하지 않으면, 상기 소스 벡터 레지스터의 일부에 대응하는 목적지 벡터 레지스터의 일부에 저장될 결과를 생성하기 위해서, 상기 벡터 마이크로 연산을 처리해서 상기 소스 벡터 레지스터의 일부의 한 개 이상의 선택된 소자들을 이용해 미리 정한 처리 동작을 수행하도록 처리회로를 제어하고,
    (c) 상기 제어 정보가 상기 미리 정한 조건을 충족하면, 상기 벡터 마이크로 연산을, 상기 벡터 마이크로 연산보다 더 낮은 처리 레이턴시(latency)를 갖고 상기 제어 정보가 상기 미리 정한 조건을 충족하는 경우에 상기 벡터 마이크로 연산과 같은 목적지 벡터 레지스터의 일부에 대한 결과를 제공하는 대체 마이크로 연산으로 교체하고, 상기 대체 마이크로 연산을 처리하도록 상기 처리회로를 제어하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  2. 제 1 항에 있어서,
    상기 소스 벡터 레지스터의 일부는 상기 소스 벡터 레지스터의 전체를 포함하고, 상기 목적지 벡터 레지스터의 일부는 상기 목적지 벡터 레지스터의 전체를 포함하는 것을 특징으로 하는, 데이터 처리장치.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 대체 마이크로 연산은 무동작(no-op) 마이크로 연산, 상기 목적지 벡터 레지스터의 적어도 일부를 상기 소스 벡터 레지스터의 일부와 같은 값으로 설정하는 마이크로 연산, 및 상기 목적지 벡터 레지스터의 적어도 일부를 미리 정한 값으로 설정하는 마이크로 연산 중 하나를 포함하는 것을 특징으로 하는, 데이터 처리장치.
  4. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    상기 벡터 마이크로 연산의 제1 타입에 응답해서, 상기 제어회로는 상기 소스 벡터 레지스터의 일부의 비선택된 데이터 소자들에 대응하는 상기 목적지 벡터 레지스터의 일부의 미리 정한 값 데이터 소자들로 설정하도록 상기 처리회로를 제어하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  5. 제 4 항에 있어서,
    상기 벡터 마이크로 연산의 제1 타입에 대해서, 상기 대체 마이크로 연산은 상기 목적지 벡터 레지스터의 일부를 상기 미리 정한 값으로 설정하는 마이크로 연산을 포함하는 것을 특징으로 하는, 데이터 처리장치.
  6. 제 1 항 내지 제 5 항 중 어느 한 항에 있어서,
    상기 벡터 마이크로 연산의 제2 타입에 응답해서, 상기 제어회로는 상기 소스 벡터 레지스터의 일부의 비선택된 데이터 소자들에 대응하는 상기 목적지 벡터 레지스터의 일부의 데이터 소자들이 상기 소스 벡터 레지스터의 일부의 대응하는 비선택된 데이터 소자들과 같은 값을 갖도록 상기 처리회로를 제어하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  7. 제 6 항에 있어서,
    상기 벡터 마이크로 연산의 상기 제2 타입이 상기 소스 벡터 레지스터 및 상기 목적지 벡터 레지스터와 같은 레지스터를 지정하면, 상기 대체 마이크로 연산은 무동작 마이크로 연산을 포함하는 것을 특징으로 하는, 데이터 처리장치.
  8. 제 6 항에 있어서,
    상기 벡터 마이크로 연산의 상기 제2 타입이 상기 소스 벡터 레지스터 및 상기 목적지 벡터 레지스터와 같은 레지스터를 지정하면, 상기 대체 마이크로 연산은 상기 목적지 벡터 레지스터의 적어도 일부를 상기 소스 벡터 레지스터의 대응하는 일부와 같은 값으로 설정하는 마이크로 연산을 포함하는 것을 특징으로 하는, 데이터 처리장치.
  9. 제 6 항 내지 제 8 항 중 어느 한 항에 있어서,
    상기 벡터 마이크로 연산의 상기 제2 타입이 상기 소스 벡터 레지스터 및 상기 목적지 벡터 레지스터와 다른 레지스터들을 지정하면, 상기 대체 마이크로 연산은 상기 목적지 벡터 레지스터의 상기 적어도 일부를 상기 소스 벡터 레지스터의 대응하는 일부와 같은 값으로 설정하는 마이크로 연산을 포함하는 것을 특징으로 하는, 데이터 처리장치.
  10. 제 1 항 내지 제 9 항 중 어느 한 항에 있어서,
    상기 벡터 마이크로 연산의 제2 타입에 응답해서, 상기 제어회로는 상기 소스 벡터 레지스터의 상기 일부의 비선택된 데이터 소자들에 대응하는 상기 목적지 벡터 레지스터의 일부의 데이터 소자들의 값들이 보존되도록 상기 처리회로를 제어하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  11. 제 1 항 내지 제 10 항 중 어느 한 항에 있어서,
    상기 제어 정보는,
    (i) 상기 소스 벡터 레지스터의 상기 일부의 데이터 소자들의 그룹들 또는 특정한 데이터 소자들 중 어느 것이 선택된 데이터 소자들인지를 지정하는 마스크 정보 - 상기 마스크 정보가, 상기 소스 벡터 레지스터의 상기 일부의 데이터 소자들 중의 어느 것도 선택된 데이터 소자들이 아니라는 것을 나타내면 상기 미리 정한 조건이 충족된다 - 와,
    (ii) 상기 벡터 마이크로 연산에 응답해서 처리될 다수의 데이터 소자를 나타내는 벡터 길이 정보 - 상기 벡터 길이 정보가 한 개 이상의 미리 정한 값 중 하나를 가지면 상기 미리 정한 조건이 충족된다 - 와,
    (iii) 상기 소스 벡터 레지스터 또는 상기 목적지 벡터 레지스터 내에 저장된 벡터 오퍼랜드의 포맷을 지정하는 벡터 포맷 정보 - 상기 벡터 포맷 정보가 한 개 이상의 미리 정한 값 중 하나를 가지면 상기 미리 정한 조건이 충족된다 - 중 적어도 하나를 포함하는 것을 특징으로 하는, 데이터 처리장치.
  12. 제 1 항 내지 제 11 항 중 어느 한 항에 있어서,
    상기 제어회로는, 상기 제어 정보가 상기 소스 벡터 레지스터의 일부의 상기 데이터 소자들의 모두가 비선택된 데이터 소자들이라는 것을 나타내는지 여부를 가리키는 제어 지표를 유지하고, 상기 제어 지표가 미리 정한 값을 가지면 상기 미리 정한 조건이 충족된다는 것을 결정하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  13. 제 12 항에 있어서,
    상기 제어회로는 상기 제어 정보의 갱신에 응답해서 상기 제어 지표를 결정하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  14. 제 1 항 내지 제 13 항 중 어느 한 항에 있어서,
    상기 제어회로는 디스패치 회로 및 이슈 회로를 구비하고,
    상기 디스패치 회로는 마이크로 연산들을 디코딩하고, 디코딩된 마이크로 연산들을 상기 이슈 회로에 디스패치하도록 구성되며,
    상기 이슈 회로는 상기 처리회로로 처리하기 위한 마이크로 연산들을 발행하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  15. 제 14 항에 있어서,
    상기 디스패치 회로는 상기 제어 정보가 상기 미리 정한 조건을 충족하는지 여부를 검출하고, 상기 제어 정보가 상기 미리 정한 조건을 충족하면 상기 벡터 마이크로 연산 대신에 상기 대체 마이크로 연산을 상기 이슈 회로에 디스패치하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  16. 제 15 항에 있어서,
    상기 디스패치 회로가 상기 벡터 마이크로 연산에 대한 상기 제어 정보가 또 다른 마이크로 연산의 결과에 근거해서 여전히 갱신된다는 것을 검출하면 상기 디스패치 회로는 상기 벡터 마이크로 연산을 상기 대체 마이크로 연산으로 교체하는 일없이 상기 벡터 마이크로 연산을 상기 이슈 회로에 디스패치하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  17. 제 15 항 또는 제 16 항에 있어서,
    상기 디스패치 회로는, 상기 제어 정보가 상기 소스 벡터 레지스터의 일부의 상기 데이터 소자들의 모두가 비선택된 데이터 소자들이라는 것을 나타내는지 여부를 표시하는 제1 제어 지표를 유지하고, 상기 제1 제어 지표에 근거해서 상기 미리 정한 조건이 충족되는지 여부를 결정하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  18. 제 17 항에 있어서,
    상기 이슈 회로는 상기 제어 정보가 상기 소스 벡터 레지스터의 일부의 상기 데이터 소자들의 모두가 비선택된 데이터 소자들이라는 것을 나타내는지 여부를 표시하는 제2 제어 지표를 유지하도록 구성되고,
    상기 제어 정보의 갱신에 응답해서, 상기 이슈 회로는 상기 제어 정보의 상기 갱신이 상기 제2 제어 지표에 대한 갱신을 발생시키면 상기 제1 제어 지표를 갱신하도록 상기 디스패치 회로를 트리거하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  19. 제 17 항 또는 제 18 항에 있어서,
    상기 제어 정보를 설정하기 위한 명령의 디스패치에 응답해서, 상기 디스패치 회로는, 상기 소스 벡터 레지스터의 일부의 상기 데이터 소자들의 모두가 비선택된 데이터 소자들이 아니라는 것을 상기 제어 정보가 나타내는 것을 표시하도록 상기 제1 제어 지표를 설정하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  20. 제 14 항에 있어서,
    상기 이슈 회로는 상기 제어 정보가 상기 미리 정한 조건을 충족하는지 여부를 검출하고, 상기 제어 정보가 상기 미리 정한 조건을 충족하면 상기 벡터 마이크로 연산을 상기 대체 마이크로 연산으로 교체하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  21. 제 1 항 내지 제 20 항 중 어느 한 항에 있어서,
    상기 벡터 오퍼랜드들은 복수의 데이터 소자 사이즈로부터 선택된 데이터 소자 사이즈를 갖는 가변수의 데이터 소자들을 포함하는 것을 특징으로 하는, 데이터 처리장치.
  22. 복수의 데이터 소자를 포함하는 벡터 오퍼랜드들을 저장하기 위한 벡터 레지스터 저장수단과,
    상기 벡터 레지스터 저장수단으로부터 취득된 벡터 오퍼랜드들을 이용해서 벡터 처리를 수행하기 위한 처리수단과,
    벡터 마이크로 연산들에 응답해서 상기 벡터 처리를 수행하도록 상기 처리수단을 제어하기 위한 제어수단을 구비하고,
    상기 벡터 레지스터 저장수단의 소스 벡터 레지스터와 목적지 벡터 레지스터를 지정하고 상기 소스 벡터 레지스터의 일부의 데이터 소자들 중 어느 것이 상기 처리수단에 의해 처리될 선택된 소자들인지를 나타내는 제어 정보와 관련된 벡터 마이크로 연산에 응답해서, 상기 제어수단은,
    (a) 상기 소스 벡터 레지스터의 일부가 어떤 선택된 소자들도 포함하지 않는다는 것을 나타내는 미리 정한 조건을 상기 제어정보가 충족하는지 여부를 검출하고,
    (b) 상기 제어 정보가 상기 미리 정한 조건을 충족하지 않으면, 상기 소스 벡터 레지스터의 일부에 대응하는 상기 목적지 벡터 레지스터의 일부에 저장될 결과를 생성하기 위해서, 상기 소스 벡터 레지스터의 상기 일부의 한 개 이상의 선택된 소자들을 이용하는 미리 정한 처리 동작을 수행하기 위한 상기 벡터 마이크로 연산을 처리하도록 상기 처리수단을 제어하고,
    (c) 상기 제어 정보가 상기 미리 정한 조건을 충족하면, 상기 벡터 마이크로 연산보다 더 낮은 처리 레이턴시를 갖고 상기 제어 정보가 상기 미리 정한 조건을 충족하는 경우에는 상기 벡터 마이크로 연산과 같은 상기 목적지 벡터 레지스터의 일부에 대한 결과를 제공하는 대체 마이크로 연산으로 상기 벡터 마이크로 연산을 교체하고, 상기 대체 마이크로 연산을 처리하도록 상기 처리수단을 제어하도록 구성되는 것을 특징으로 하는, 데이터 처리장치.
  23. 복수의 데이터 소자를 포함하는 벡터 오퍼랜드들을 저장하도록 구성된 벡터 레지스터 스토어와, 상기 벡터 레지스터 스토어로부터 취득된 벡터 오퍼랜드들을 이용하는 벡터 처리를 수행하도록 구성된 처리회로를 구비하는 장치의 데이터를 처리하는 방법으로서,
    상기 벡터 레지스터 스토어의 소스 벡터 레지스터와 목적지 벡터 레지스터를 지정하고 상기 소스 벡터 레지스터의 일부의 데이터 소자들 중 어느 것이 상기 처리회로에 의해 처리될 선택된 소자들인지를 나타내는 제어 정보와 관련된 벡터 마이크로 연산을 수신하는 단계와,
    상기 벡터 마이크로 연산에 응답해서, 상기 소스 벡터 레지스터의 일부가 어떤 선택된 소자들도 포함하지 않는다는 것을 나타내는 미리 정한 조건을 상기 제어 정보가 충족하는지 여부를 검출하는 단계와,
    상기 제어 정보가 상기 미리 정한 조건을 충족하지 않으면, 상기 소스 벡터 레지스터의 일부에 대응하는 상기 목적지 벡터 레지스터의 일부에 저장될 결과를 생성하기 위해서, 상기 소스 벡터 레지스터의 상기 일부의 한 개 이상의 선택된 소자들을 이용하는 미리 정한 처리 동작을 수행하기 위한 상기 벡터 마이크로 연산을 처리하도록 처리회로를 제어하는 단계와,
    상기 제어 정보가 상기 미리 정한 조건을 충족하면, 상기 벡터 마이크로 연산보다 더 낮은 처리 레이턴시를 갖고 상기 제어 정보가 상기 미리 정한 조건을 충족하는 경우에는 상기 벡터 마이크로 연산과 같은 상기 목적지 벡터 레지스터의 일부에 대한 결과를 제공하는 대체 마이크로 연산으로 상기 벡터 마이크로 연산을 교체하고, 상기 대체 마이크로 연산을 처리하도록 상기 처리회로를 제어하는 단계를 포함하는 것을 특징으로 하는, 데이터 처리방법.
  24. 컴퓨터에 의해 실행될 때, 청구항 1 내지 21 중 어느 한 항에 따른 데이터 처리장치에 대응하는 가상 실행 환경을 제공하는 컴퓨터 프로그램을 기억하는 컴퓨터 판독가능한 기억매체.
  25. 첨부도면을 참조하여 실질적으로 여기에 설명한 것과 같은 데이터 처리장치.
  26. 첨부도면을 참조하여 실질적으로 여기에 설명한 것과 같은 데이터 처리방법.
  27. 첨부도면을 참조하여 실질적으로 여기에 설명한 것과 같은 컴퓨터 프로그램을 기억하는 컴퓨터 판독가능한 기억매체.
KR1020150023772A 2014-03-07 2015-02-17 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법 KR102256188B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1404037.2 2014-03-07
GB1404037.2A GB2523823B (en) 2014-03-07 2014-03-07 Data processing apparatus and method for processing vector operands

Publications (2)

Publication Number Publication Date
KR20150105199A true KR20150105199A (ko) 2015-09-16
KR102256188B1 KR102256188B1 (ko) 2021-05-26

Family

ID=50554680

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150023772A KR102256188B1 (ko) 2014-03-07 2015-02-17 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법

Country Status (4)

Country Link
US (1) US10514919B2 (ko)
KR (1) KR102256188B1 (ko)
CN (1) CN104899181B (ko)
GB (1) GB2523823B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180137521A (ko) * 2016-04-26 2018-12-27 에이알엠 리미티드 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US10691456B2 (en) * 2015-11-13 2020-06-23 International Business Machines Corporation Vector store instruction having instruction-specified byte count to be stored supporting big and little endian processing
US10691453B2 (en) 2015-11-13 2020-06-23 International Business Machines Corporation Vector load with instruction-specified byte count less than a vector size for big and little endian processing
US10628157B2 (en) * 2017-04-21 2020-04-21 Arm Limited Early predicate look-up
US10963253B2 (en) * 2018-07-10 2021-03-30 Arm Limited Varying micro-operation composition based on estimated value of predicate value for predicated vector instruction
KR20210066843A (ko) * 2018-09-18 2021-06-07 옵티멈 세미컨덕터 테크놀로지스 인코포레이티드 마스킹된 벡터 명령어 구현 시스템 및 방법
CN111338694B (zh) * 2018-12-19 2022-05-31 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质
US11327766B2 (en) * 2020-07-31 2022-05-10 International Business Machines Corporation Instruction dispatch routing
US11714652B2 (en) * 2021-07-23 2023-08-01 Advanced Micro Devices, Inc. Zero operand instruction conversion for accelerating sparse computations in a central processing unit pipeline

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR920700425A (ko) * 1988-03-18 1992-02-19 로날드 이. 마이릭 벡터 처리 시스템의 명령실행방법 및 그 장치
KR20090042320A (ko) * 2006-08-18 2009-04-29 콸콤 인코포레이티드 스칼라/벡터 명령들을 사용하여 데이터를 처리하는 시스템 및 방법
KR20130064797A (ko) * 2010-09-24 2013-06-18 인텔 코포레이션 범용 논리 연산 방법 및 장치

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6266377A (ja) * 1985-09-19 1987-03-25 Fujitsu Ltd マスクパタ−ン生成方式
JPS62202264A (ja) * 1986-02-07 1987-09-05 Fujitsu Ltd ベクトル演算処理方式
US5539911A (en) * 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
US5940625A (en) * 1996-09-03 1999-08-17 Cray Research, Inc. Density dependent vector mask operation control apparatus and method
US5903769A (en) * 1997-03-31 1999-05-11 Sun Microsystems, Inc. Conditional vector processing
US9529592B2 (en) * 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US8713912B2 (en) * 2010-07-12 2014-05-06 Raytheon Company Solid propellant rocket motors employing tungsten alloy burst discs and methods for the manufacture thereof
US8904153B2 (en) * 2010-09-07 2014-12-02 International Business Machines Corporation Vector loads with multiple vector elements from a same cache line in a scattered load operation
GB2484654B (en) * 2010-10-12 2013-10-09 Advanced Risc Mach Ltd Conditional selection of data elements
US20120216011A1 (en) * 2011-02-18 2012-08-23 Darryl Gove Apparatus and method of single-instruction, multiple-data vector operation masking
US8880857B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
US20130029068A1 (en) * 2011-07-28 2013-01-31 Eastman Chemical Company Extrusion blow molded articles
WO2013085491A1 (en) * 2011-12-06 2013-06-13 Intel Corporation System, apparatus and method for translating vector instructions
CN104011646B (zh) * 2011-12-22 2018-03-27 英特尔公司 用于产生按照数值顺序的连续整数的序列的处理器、方法、系统和指令
US9146741B2 (en) * 2012-04-26 2015-09-29 Qualcomm Incorporated Eliminating redundant masking operations instruction processing circuits, and related processor systems, methods, and computer-readable media

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR920700425A (ko) * 1988-03-18 1992-02-19 로날드 이. 마이릭 벡터 처리 시스템의 명령실행방법 및 그 장치
KR20090042320A (ko) * 2006-08-18 2009-04-29 콸콤 인코포레이티드 스칼라/벡터 명령들을 사용하여 데이터를 처리하는 시스템 및 방법
KR20130064797A (ko) * 2010-09-24 2013-06-18 인텔 코포레이션 범용 논리 연산 방법 및 장치

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180137521A (ko) * 2016-04-26 2018-12-27 에이알엠 리미티드 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법

Also Published As

Publication number Publication date
US10514919B2 (en) 2019-12-24
KR102256188B1 (ko) 2021-05-26
US20150254077A1 (en) 2015-09-10
CN104899181B (zh) 2020-01-03
GB2523823B (en) 2021-06-16
GB2523823A (en) 2015-09-09
GB201404037D0 (en) 2014-04-23
CN104899181A (zh) 2015-09-09

Similar Documents

Publication Publication Date Title
KR102256188B1 (ko) 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법
US11003450B2 (en) Vector data transfer instruction
US10776124B2 (en) Handling exceptional conditions for vector arithmetic instruction
US9411589B2 (en) Branch-free condition evaluation
US9256427B2 (en) Tracking multiple conditions in a general purpose register and instruction therefor
JP2018531467A6 (ja) ベクトル演算命令の例外条件処理
US10564968B2 (en) Vector load instruction
KR101016257B1 (ko) 프로세서 및 정보 처리 장치
US11803388B2 (en) Apparatus and method for predicting source operand values and optimized processing of instructions
US11392386B2 (en) Program counter (PC)-relative load and store addressing for fused instructions
Shah et al. SPSIM: SuperScalar Processor SIMulater CS305 Project Report

Legal Events

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