KR20180132085A - 복소수 승산 명령 - Google Patents

복소수 승산 명령 Download PDF

Info

Publication number
KR20180132085A
KR20180132085A KR1020187030693A KR20187030693A KR20180132085A KR 20180132085 A KR20180132085 A KR 20180132085A KR 1020187030693 A KR1020187030693 A KR 1020187030693A KR 20187030693 A KR20187030693 A KR 20187030693A KR 20180132085 A KR20180132085 A KR 20180132085A
Authority
KR
South Korea
Prior art keywords
component
vector
instruction
complex
real
Prior art date
Application number
KR1020187030693A
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 KR20180132085A publication Critical patent/KR20180132085A/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/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/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/30141Implementation provisions of register files, e.g. ports
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields

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 Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

복소수의 실수부를 표현하기 위한 적어도 한 개의 실수 데이터 성분 및 복소수의 허수부를 표현하기 위한 적어도 한 개의 허수 성분을 포함하는 복수의 데이터 성분을 포함하는 제 1 및 제 2 피연산자 벡터들에 대해 연산을 하기 위해 제 1 및 제 2 형태의 복소수 승산 명령이 주어진다. 제 1 및 제 2 형태의 명령 중에서 한 개는 목적지 벡터의 적어도 한 개의 실수 성분을 대상으로 하고, 너머지 한 개는 적어도 한 개의 허수 성분을 대상으로 한다. 각 명령의 한 개를 실행함으로써, (a+ib)*(c+id)의 형태를 갖는 복소수 승산이 비교적 적은 수의 명령과 단지 2개의 벡터 레지스터 판독 포트를 사용하여 계산될 수 있으므로, 비교적 저전력의 하드웨어 구현을 사용하여 FFT 등의 DSP 알고리즘이 더욱 효율적으로 계산될 수 있다.

Description

복소수 승산 명령
본 발명은 데이터 처리의 기술분야에 관한 것이다.
일부 데이터 처리 응용은 실수부와 허수부를 갖는 복소수, 즉 a+ib의 형태를 갖는 수의 처리를 포함하고, 이때 i는 -1의 제곱근을 표시한다(때때로 -1의 제곱근은 'j'로 표시될 수도 있지만, 여기에서는 'i'를 사용한다). 복소수 연산은 디지털 신호 처리(DSP) 응용, 예를 들어 Fast Fourier Transforms(FFT)의 계산에 특히 유용할 수 있다. 일부 DSP 알고리즘은 r=(a+ib)*(c+id)의 형태를 갖는 다수의 승산을 필요로 하므로, 프로세서에 의해 복소수 승산을 처리하는 방식은 성능에 영향을 미치는 요인이 될 수 있다.
적어도 일부 실시예는,
데이터 처리를 행하는 처리회로와,
명령을 디코드하여 상기 처리회로가 데이터 처리를 행하도록 제어하는 명령 디코더를 구비하고,
상기 명령 디코더는 복소수 승산 명령을 디코드하여, 상기 처리회로를 제어하여 제 1 및 제 2 피연산자 벡터들에 대해 부분 복소수 승산 연산을 행함으로써 제 1 곱 및 제 2 곱의 가산 또는 감산 결과에 따른 값으로 목적지 벡터의 적어도 한 개의 대상 성분을 설정하고, 상기 제 1 및 제 2 피연산자 벡터들과 상기 목적지 벡터 각각은 복소수의 실수부를 표현하기 위한 적어도 한 개의 실수 성분 및 복소수의 허수부를 표현하기 위한 적어도 한 개의 허수 성분을 포함하는 복수의 데이터 성분을 포함하고,
제 1 형태의 복소수 승산 명령에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 제 1 피연산자 벡터의 실수 성분 및 상기 제 2 피연산자 벡터의 대응하는 실수 성분의 곱을 포함하는 제 1 곱과, 상기 제 1 피연산자 벡터의 허수 성분 및 상기 제 2 피연산자 벡터의 대응하는 허수 성분의 곱을 포함하는 제 2 곱을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
제 2 형태의 복소수 승산 명령에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 제 1 피연산자 벡터의 실수 성분 및 상기 제 2 피연산자 벡터의 허수 성분의 곱을 포함하는 제 1 곱과, 상기 제 1 피연산자 벡터의 허수 성분 및 상기 제 2 피연산자 벡터의 실수 성분의 곱을 포함하는 제 2 곱을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
상기 제 1 및 제 2 형태의 복소수 승산 명령 중 한 개에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 목적지 벡터의 적어도 한 개의 실수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
상기 제 1 및 제 2 형태의 복소수 승산 명령 중 나머지 한 개에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 목적지 벡터의 적어도 한 개의 허수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
상기 제 1 및 제 2 형태의 복소수 승산 명령 중에서 적어도 한 개에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 적어도 한 개의 대상 성분 이외의 상기 목적지 벡터의 적어도 한 개의 성분의 갱신을 금지하도록 구성된 데이터 처리장치를 제공한다.
적어도 일부 실시예는,
데이터 처리를 행하는 수단과,
명령을 디코드하여 상기 데이터 처리를 행하는 수단이 데이터 처리를 행하도록 제어하는 명령 디코딩 수단을 구비하고,
상기 디코딩 수단은 복소수 승산 명령을 디코드하여, 상기 데이터 처리를 행하는 수단을 제어하여 제 1 및 제 2 피연산자 벡터들에 대해 부분 복소수 승산 연산을 행함으로써 제 1 곱 및 제 2 곱의 가산 또는 감산 결과에 따른 값으로 목적지 벡터의 적어도 한 개의 대상 성분을 설정하고, 상기 제 1 및 제 2 피연산자 벡터들과 상기 목적지 벡터 각각은 복소수의 실수부를 표현하기 위한 적어도 한 개의 실수 성분 및 복소수의 허수부를 표현하기 위한 적어도 한 개의 허수 성분을 포함하는 복수의 데이터 성분을 포함하고,
제 1 형태의 복소수 승산 명령에 응답하여, 상기 디코딩 수단은 상기 데이터 처리를 행하는 수단을 제어하여, 상기 제 1 피연산자 벡터의 실수 성분 및 상기 제 2 피연산자 벡터의 대응하는 실수 성분의 곱을 포함하는 제 1 곱과, 상기 제 1 피연산자 벡터의 허수 성분 및 상기 제 2 피연산자 벡터의 대응하는 허수 성분의 곱을 포함하는 제 2 곱을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
제 2 형태의 복소수 승산 명령에 응답하여, 상기 디코딩 수단은 상기 데이터 처리를 행하는 수단을 제어하여, 상기 제 1 피연산자 벡터의 실수 성분 및 상기 제 2 피연산자 벡터의 허수 성분의 곱을 포함하는 제 1 곱과, 상기 제 1 피연산자 벡터의 허수 성분 및 상기 제 2 피연산자 벡터의 실수 성분의 곱을 포함하는 제 2 곱을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
상기 제 1 및 제 2 형태의 복소수 승산 명령 중 한 개에 응답하여, 상기 디코딩 수단은 상기 데이터 처리를 행하는 수단을 제어하여, 상기 목적지 벡터의 적어도 한 개의 실수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
상기 제 1 및 제 2 형태의 복소수 승산 명령 중 나머지 한 개에 응답하여, 상기 디코딩 수단은 상기 데이터 처리를 행하는 수단을 제어하여, 상기 목적지 벡터의 적어도 한 개의 허수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
상기 제 1 및 제 2 형태의 복소수 승산 명령 중에서 적어도 한 개에 응답하여, 상기 디코딩 수단은 상기 데이터 처리를 행하는 수단을 제어하여, 상기 적어도 한 개의 대상 성분 이외의 상기 목적지 벡터의 적어도 한 개의 성분의 갱신을 금지하도록 구성된 데이터 처리장치를 제공한다.
적어도 일부 실시예는,
복소수 승산 명령을 디코드하여, 상기 처리회로를 제어하여 제 1 및 제 2 피연산자 벡터들에 대해 부분 복소수 승산 연산을 행함으로써 제 1 곱 및 제 2 곱의 가산 또는 감산 결과에 따른 값으로 목적지 벡터의 적어도 한 개의 대상 성분을 설정하는 단계를 포함하고, 상기 제 1 및 제 2 피연산자 벡터들과 상기 목적지 벡터 각각은 복소수의 실수부를 표현하기 위한 적어도 한 개의 실수 성분 및 복소수의 허수부를 표현하기 위한 적어도 한 개의 허수 성분을 포함하는 복수의 데이터 성분을 포함하고,
제 1 형태의 복소수 승산 명령에 응답하여, 상기 제 1 피연산자 벡터의 실수 성분 및 상기 제 2 피연산자 벡터의 대응하는 실수 성분의 곱을 포함하는 제 1 곱과, 상기 제 1 피연산자 벡터의 허수 성분 및 상기 제 2 피연산자 벡터의 대응하는 허수 성분의 곱을 포함하는 제 2 곱을 사용하여 상기 부분 복소수 승산 연산을 행하고,
제 2 형태의 복소수 승산 명령에 응답하여, 상기 제 1 피연산자 벡터의 실수 성분 및 상기 제 2 피연산자 벡터의 허수 성분의 곱을 포함하는 제 1 곱과, 상기 제 1 피연산자 벡터의 허수 성분 및 상기 제 2 피연산자 벡터의 실수 성분의 곱을 포함하는 제 2 곱을 사용하여 상기 부분 복소수 승산 연산을 행하고,
상기 제 1 및 제 2 형태의 복소수 승산 명령 중 한 개에 응답하여, 상기 목적지 벡터의 적어도 한 개의 실수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하고,
상기 제 1 및 제 2 형태의 복소수 승산 명령 중 나머지 한 개에 응답하여, 상기 목적지 벡터의 적어도 한 개의 허수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하고,
상기 제 1 및 제 2 형태의 복소수 승산 명령 중에서 적어도 한 개에 응답하여, 상기 적어도 한 개의 대상 성분 이외의 상기 목적지 벡터의 적어도 한 개의 성분의 갱신을 금지하는 데이터 처리방법을 제공한다.
적어도 일부 실시예는, 호스트 데이터 처리장치를 제어하여 전술한 장치에 대응하는 명령 실행 환경을 제공하는 프로그램 명령들을 포함하는 가상머신 컴퓨터 프로그램을 제공한다.
또한, 가상 머신 컴퓨터 프로그램을 기억하는 컴퓨터 판독가능한 기억매체를 제공할 수 있다. 이 기억매체는 비일시적인 기억매체이어도 된다.
본 발명의 또 다른 발명내용, 특징 및 이점은 다음의 첨부도면을 참조하여 주어지는 이하의 실시예로부터 명백해질 것이다.
도 1은 벡터 명령의 실행을 지원하는 데이터 처리장치의 일례를 개략적으로 나타낸 것이다.
도 2는 벡터 명령을 사용하여 2개의 복소수를 승산하는 또 다른 접근방법을 나타낸 비교예이다.
도 3은 제 1 형태 및 제 2 형태의 복소수 승산 명령을 사용하여 2개의 복소수를 승산하는 예를 나타낸 것이다.
도 4는 제 1 및 제 2 형태의 명령을 사용하여 복소수 공역 승산을 계산하는 예를 나타낸 것이다.
도 5는 제 1 및 제 2 형태의 복소수 승산 명령의 두 번째 버전을 개략적으로 나타낸 것이다.
도 6은 복소수의 실수부 또는 허수부를 표현하기 위해 벡터의 실수 및 허수 성분들을 할당하는 다른 예를 나타낸 것이다.
도 7 및 도 8은 목적지 벡터의 대상 성분을 생성하기 위해 절단(truncation)을 행하는 다양한 방법을 나타낸 것이다.
도 9는 복소수 승산 명령의 성분-확대(element-widening) 변형을 나타낸 것이다.
도 10 및 도 11은 명령의 성분-확대 변형에 응답하여 절단을 행하는 2개의 다른 방법을 나타낸 것이다.
도 12는 벡터 프레디케이트 명령으로 벡터 명령을 선행하여 벡터 명령의 프레디케이션를 제어하는 일례를 개략적으로 나타낸 것이다.
도 13은 벡터화된 루프들의 처리 중에 프레디케이션을 제어하는 일례를 개략적으로 나타낸 것이다.
도 14 내지 도 16은 벡터 명령들의 실행의 각각의 비트(beat)들을 중첩하는 예를 나타낸 것이다.
도 17은 복소수 승산 명령의 처리방법을 나타낸 흐름도이다.
도 18은 사용되는 가상머신 구현예를 나타낸 것이다.
일부 구체적인 실시예를 이하에서 설명한다. 본 발명은 이들 특정한 실시예에 한정되는 것은 아니다.
데이터 처리장치는, 처리회로를 제어하여, 제 1 및 제 2 피연산자 벡터들에 대해 부분 복소수 승산 연산을 행함으로써 목적지 벡터의 적어도 한 개의 대상 성분을 제 1 곱 및 제 2 곱의 가산 또는 감산 결과에 따른 값으로 설정하기 위한 복소수 승산 명령의 디코딩을 지원하는 명령 디코더를 갖는다. 제 1 및 제 2 피연산자 벡터와 목적지 벡터 각각은 복소수의 실수부를 표현하기 위한 적어도 한 개의 실수 성분 및 복소수의 가상 부분을 표현하기 위한 적어도 한 개의 허수 성분을 포함하는 복수의 데이터 성분들을 포함한다.
2가지 형태의 복소수 승산 명령이 제공된다. 이들 형태는 제 1 곱 및 제 2 곱의 가산 또는 감산 결과에 따른 값으로 목적지 벡터의 적어도 한 개의 대상 성분을 설정한다. 제 1 형태의 복소수 승산 명령에 대해, 명령 디코더는 처리회로를 제어하여, 제 1 피연산자 벡터의 실수 성분과 제 2 피연산자 벡터의 대응하는 실수 성분의 곱을 포함하는 제 1 곱과, 제 1 피연산자 벡터의 허수 성분과 제 2 피연산자 벡터의 대응하는 허수 성분의 곱을 포함하는 제 2 곱을 사용하여 부분 복소수 승산 연산을 행한다. 제 2 형태의 복소수 승산 명령에 대해, 제 1 곱은 제 1 피연산자 벡터의 실수 성분과 제 2 피연산자 벡터의 허수 성분의 곱을 포함하고, 제 2 곱은 제 1 피연산자 벡터의 허수 성분과 제 2 피연산자 벡터의 실수 성분의 곱을 포함한다. 제 1 및 제 2 형태의 복소수 승산 명령 중에서 한 개는 목적지 벡터의 적어도 한 개의 실수 성분을 포함하는 대상 성분을 갖는 한편, 나머지 한 개는 목적지 벡터의 적어도 한 개의 허수 성분을 대상으로 한다. 제 1 및 제 2 형태의 복소수 승산 명령의 적어도 한 개는 적어도 한 개의 대상 성분 이외의 목적지 벡터의 적어도 한 개의 성분의 갱신을 금지한다.
이와 같은 접근방법은 다양한 이점을 갖는다. 먼저, 복소수의 실수 및 허수부들이 벡터의 각각의 성분들에 의해 표현되는 전용의 복소수 승산 명령을 제공하는 것은, 더 적은 수의 명령을 사용하고, 승산의 개별적인 항목들(예를 들어, ac, ibc, iad, -bd)을 최종 결과에 누적하기 전에 이들 항목들을 일시적으로 기억하기 위해 매우 많은 수의 벡터 레지스터들을 할당할 필요가 없이, (a+ib)(c+id)의 형태의 승산이 계산될 수 있도록 하기 때문에, 통상의 벡터 승산 명령들만을 지원하는 시스템에 비해, 성능을 향상시키고 레지스터 압력을 줄일 수 있다. 이와 같은 줄어든 레지스터 압력은, 메모리에 흘리고 채울 필요성을 줄여, 성능을 상당히 향상시킬 수 있기 때문에, 비교적 저전력 구현에 매우 중요한 인자가 될 수 있다. 또한, 한 개가 목적지의 실수 성분들을 대상으로 하고 나머지가 허수 성분들을 대상으로 하는 제 1 및 제 2 형태의 복소수 승산 명령을 제공하는 것은, 단지 2개의 명령과 2개의 벡터 레지스터 판독 포트들을 사용하여 완전히 복합한 승산 결과를 계산할 수 있도록 할 수 있다. 제 3 레지스터 판독 포트를 구현할 필요성을 없애는 것은 비교적 저전력 구현에서 상당한 회로 면적 및 전력 절감을 제공할 수 있다.
속기를 위해, 제1/제2 형태의 명령에 대한 각각의 제 1 및 제 2 곱을 다음과 같이 부른다:
· R*R-제 1 피연산자 벡터의 실수 성분과 제 2 피연산자 벡터의 실수 성분의 곱에 대응하는 제 1 형태의 명령의 제 1 곱.
· I*I-제 1 피연산자 벡터의 허수 성분과 제 2 피연산자 벡터의 허수 성분의 곱에 대응하는 제 1 형태의 명령의 제 2 곱.
· R*I-제 1 피연산자 벡터의 실수 성분과 제 2 피연산자 벡터의 허수 성분의 곱에 대응하는 제 2 형태의 명령의 제 1 곱.
· I*R-제 1 피연산자 벡터의 허수 성분과 제 2 피연산자 벡터의 실수 성분의 곱에 대응하는 제 2 형태의 명령의 제 2 곱.
제 1 및 제 2 형태의 복소수 승산 명령은 어떤 방법으로, 예를 들어, 서로 다른 옵코드를 사용하거나, 명령이 제 1 형태인지 또는 제 2 형태인지 지정하기 위한 명령 인코딩 내에 다른 파라미터를 설치함으로써, 구별할 수 있다.
벡터가 실수 성분 및 허수 성분으로 분할되는 특정한 방법은, 지정된 프로세서 구현에 대해 임의로 선택될 수 있는 구현 선택이다. 이때, 벡터의 실수 성분 또는 허수 성분에 기억된 수치값이 그 자체가 이들 성분이 복소수의 실수 성분인지 또는 허수 성분인지 식별할 필요는 없다. 벡터 성분은 단순히 (실수 성분에 대해서는) 1의 배수 또는 (허수 성분에 대해서는) i의 배수를 표현하는 수치값을 기억한다. 그러나, 처리회로의 하드웨어는, 벡터 내부의 적절한 위치로부터 실수/허수 성분을 판독하고, 전술한 다양한 곱에 따라 실수/허수 성분을 결합하고, 명령이 제 1 형태인지 또는 제 2 형태인지에 따라 목적지의 실수 또는 허수 성분을 덧붙이기 위한 회로 상호접속을 구비한다. 따라서, 성분이 실수/허수 성분인지 여부는, 벡터 그 자체에 기억된 값이 아니라, 곱을 계산하기 위해 처리회로 내에 설치된 하드웨어 상호접속에 관해 반영된다. 복소수 승산 명령을 사용하여 프로그램을 작성하거나 컴파일할 때, 복수수의 실수 및 허수 성분을 표현하기 위한 적절한 값으로 입력 피연산자들의 실수 및 허수 성분을 덧붙여, 그 결과를 목적지 벡터 내에서 적절히 해석하는 것은 프로그래머 또는 컴파일러에 달려 있다. 따라서, 용어 "실수" 및 "허수"는 단순히 제 1 서브셋의 성분들 및 제 2 서브셋의 성분들에 대한 라벨로 간주할 수 있다.
처리회로는 한 개의 벡터 내에 서로 다른 데이터 성분 크기를 지원해도 된다. 예를 들어, 128비트 벡터는 2개의 64비트 데이터 성분, 4개의 32비트 데이터 성분, 8개의 16비트 데이터 성분 또는 16개의 8비트 데이터 성분으로 분할될 수 있다. 처리회로는 복소수 승산 명령과 관련된 파라미터에 근거하여 데이터 성분의 수를 결정하는데, 이것은 명령 인코딩에서 중간 값이나 파라미터를 포함하는 레지스터를 표시하는 값으로 지정될 수 있다. 이 파라미터는 데이터 성분들의 수, 또는 데이터 성분들의 폭(성분당 비트 수), 또는 데이터 성분들의 수가 결정되도록 하는 다른 값을 나타낼 수 있다.
따라서, 복소수 승산 명령이 2개의 성분만을 포함하는 벡터에 대해 동작하는 인스턴스에서는, 벡터가 한 개의 실수 성분과 한 개의 허수 성분만을 가져도 된다. 다른 실행 인스턴스에 대해서는, 벡터가 2개보다 많은 수의 데이터 성분을 가져도 된다. 실수/허수 성분들이 벡터 내에서 인터리브되는 것이 특히 유용할 수 있다. 예를 들어, 실수 성분이 짝수의 성분일 수 있고 허수 성분이 짝수 성분일 수 있으며, 역도 성립한다. 실수 및 허수 성분을 인터리브함으로써, 제 1 및 제 2 형태의 복소수 승산 명령에 의해 가산되거나 감산될 각각의 곱을 형성하기 위한 승산이, 2개 이상의 벡터 레인(lane)에 걸치는 더 길이가 긴 교차 레인 신호 경로를 필요로 하는 것이 아니라, 동일한 벡터 레인 내부 또는 바로 인접하는 벡터 레인 내부로의 교차하는 것으로 제한될 수 있기 때문에, 하드웨어 설계를 더 효율적으로 만들 수 있다.
입력 벡터 내에 2개 이상의 허수 실수 성분 및 2개 이상의 허수 성분이 존재할 때, 복소수 승산 명령이 처리회로를 기동하여 목적지 벡터의 2개 이상의 대상 성분을 설정하는데, 각각의 대상 성분은 제 1 피연산자 벡터의 실수/허소 성분들의 각각의 쌍과 제 2 피연산자 벡터의 실수/허수 성분들의 각각의 쌍을 이용하여 계산된 제 1/제2 곱의 합/차에 해당한다. 예를 들어, 실수/허수 성분들이 인터리브되는 경우에는, 2개의 인접하는 성분(한개의 실수 성분과 한 개의 허수 성분)의 각각의 레인은 제 1/제2 피연산자 벡터 내부의 대응하는 레인들의 실수 및 허수 성분들의 처리 결과에 근거하여 설정된 대상 성분(실수 성분 또는 허수 성분)을 갖는다.
전술한 것과 같이, 제 1 및 제 2 형태의 복소수 승산 명령 중 한 개는 목적지 벡터의 실수 성분을 대상으로 하고 나머지는 허수 성분을 대상으로 하며, 이때 제 1 형태는 R*R 및 I*I의 합 또는 차를 계산하고 제 2 형태는 R*I 및 I*R의 합 또는 차를 계산한다. 전체 복소수 승산은 보통 R*R, I*I, R*I 및 I*R 각각 중에서 한 개의 계산을 필요로 하므로, 각각의 형태의 한 개의 명령을 포함하는, 동일한 소스 레지스터들을 지정하고 동일한 목적지 레지스터를 대상으로 하는 한쌍의 명령을 실행함으로써, 전체 복소수 승산 연산을 행함으로써, 실수 및 허수부 모두를 포함하는 복소수 결과를 생성할 수 있다. 그러나, 두 번째로 실행되는 제 1 및 제 2 형태의 복소수 승산 명령 중에서 한 개는 그것이 설정하고 있는 대상 성분 이외의 목적지 벡터의 적어도 한 개의 성분의 갱신을 금지하여, 이전의 복소수 승산 명령의 결과를 오버라이트하지 못하게 한다. 따라서, 제 1 및 제 2 형태의 복소수 승산 명령의 적어도 한 개는 처리회로를 기동하여, 대상 성분 이외의 목적지 벡터의 적어도 한 개의 비대상 성분의 갱신을 금지한다. 제 1 및 제 2 형태의 명령 중에서 한 개만이 이와 같은 갱신의 금지를 일으키는 경우에는, 동일한 복소수 곱의 서로 다른 부분들을 계산하기 위한 제 1/제 2 형태의 복소수 승산 명령의 쌍 내부에서, 비대상 성분들의 갱신을 금지하는 형태가 두 번째로 실행되는 것을 보장하도록 프로그래머 또는 컴파일러를 강제하게 된다. 그러나, 제 1 및 제 2 형태의 복소수 승산 명령이 처리회로를 기동하여 비대상 성분들의 갱신을 금지함으로써, 프로그래머/컴파일러가 어떤 순서로도 제 1/제2 형태의 명령을 자유롭게 코딩하는 경우에는, 더 큰 유연성이 제공될 수 있다.
일부 실시예는, 처리회로가 프레디케이션(predication) 정보에 응답하여 목적지 벡터의 특정한 부분과 관련된 연산의 마스킹을 제어하는 벡터 연산의 프레디케이션을 제공한다. 이것은 예를 들어 if-then형 조건 연산을 구현하는데 유용할 수 있다. 프레디케이션을 제공하는 다양한 방법이 존재한다. 예를 들어, 일부 시스템은, 비교 조건의 결과를 평가하고 이 비교 결과에 근거하여 벡터의 어떤 부분을 마스킹해야 하는지를 지정하는 프레디케이트 정보를 설정하는 벡터 명령 이전에 실행될 수 있는 프레디케이션 명령을 지원한다. 또한, 일부 시스템은, 다른 명령들의 일부의 벡터 레인들을 마스킹하기 위한 프레디케이트 정보를 설정하기 위해 기록될 수 있는 다수의 범용 프레디케이트 레지스터를 설치하며, 이 경우에 프레디케이트할 벡터 명령은 프레디케이트들 중에서 어느 것에 명령을 프레디케이트할 것인지를 나타내는 파라미터를 갖는다. 또 다른 접근방법은, 벡터화된 루프들의 실행시에, 이 루프에 의해 처리할 데이터 성분들의 총수가 벡터 길이의 정확한 배수가 아닌 경우, 이 루프의 최종 반복에 도달할 때 벡터의 일부 레인들을 부분적으로 프레디케이트하는 것을 지원하는 시스템에 대한 것이다.
프레디케이션이 어떻게 행해지는지에 상관없이, 목적지 벡터의 비대상 성분의 갱신을 금지하는 복소수 승산 명령의 형태에 대해, 이 비대상 성분에 대응하는 목적지 벡터의 일부가 마스킹할 부분이라는 것을 프레디케이션 표시가 확인하는지 여부에 무관하게 이와 같은 금지가 발생한다. 프레디케이션은 대상 성분들이 실제로 복소수 승산 명령에 응답하여 갱신되는지 여부에 영향을 미치지만, 목적지 벡터의 대응하는 부분이 마스킹되지 않아야 한다는 것을 프레디케이션 표시가 확인하더라도, 갱신이 금지되는 비대상 성분은 복소수 승산 명령에 응답하여 갱신되지 않는다.
복소수 승산 명령의 다수의 변종이 제공될 수 있다. 이들 변종 각각은 전술한 제 1 형태 및 제 2 형태 모두를 갖고, 이때 제 1 및 제 2 형태는 각각 실수 및 허수 성분들 중에서 한 개 또는 다른 한 개를 대상으로 한다.
예를 들어, 명령 디코더는 제 1 및 제 2 곱을 가산하여 대상 성분에 설정할 값을 발생하는 가산 변종과, 제 1 및 제 2 곱이 감산되는 감산 변종을 지원해도 된다. 이것은 (a+ib)(c+id)의 형태의 표준 복소수 승산과 (a-ib)(c+id)의 형태의 복소수 공역 승산 모두가 행해질 수 있도록 하므로 매우 유용할 수 있다. 예를 들어, 표준 복소수 승산은 제 1 형태의 감산 변종 복소수 승산 명령과 제 2 형태의 가산 변종 복소수 승산 명령을 사용하여 구현된다. 복소수 공역 승산 연산은 제 1 형태의 가산 변종 복소수 승산 명령과 제 2 형태의 감산 변종 복소수 승산 명령을 사용하여 구현될 수 있다. 복소수 승산 명령의 가산 및 감산 변종은 서로 다른 옵코드을 갖는 것에 의해 또는 그들의 명령 인코딩의 다른 파라미터에 의해 구별할 수도 있다.
명령 디코더는, 제 1 형태 및 제 2 형태 중 어느 것이 실수 성분을 대상으로 하고 어느 것이 목적지 벡터의 허수 성분을 대상으로 하는지에 관해 다른 복소수 승산 명령의 제 1(비전치(non-transposed)) 버전과 제 2(전치) 버전을 더 지원해도 된다.
비전치 버전에 대해서는, 제 1 형태가 목적지 벡터의 적어도 한 개의 실수 성분을 대상으로 하고 제 2 형태가 적어도 한 개의 허수 성분을 대상으로 한다. 따라서, 제 1 형태는 한 개 이상의 실수 성분은 R*R 및 I*I의 합 또는 차에 대응하는 값으로 설정하고, 제 2 형태가 한 개 이상의 허수 성분을 R*I 및 I*R의 합 또는 차에 대응하는 값으로 설정한다. 이것은 (a±ib)*(c+id) 형태의 통상의 복소수 승산이 계산될 수 있게 한다.
한편, 전치 버전에 대해서는, 제 1 형태가 적어도 한 개의 허수 성분을 대상으로 하고, 제 2 형태가 목적지 벡터의 적어도 한 개의 실수 성분을 대상으로 한다. 따라서, 제 1 형태는 한 개 이상의 허수 성분을 R*R 및 I8I의 합 또는 차에 대응하는 값으로 설정하고, 제 2 형태가 한 개 이상의 실수 성분을 R*I 및 I*R의 합 또는 차에 대응하는 값으로 설정한다. 이것은 ±i*(a±ib)*(c+id) 형태의 승산이 계산될 수 있게 하며, 이때 2개의 복소수는 ±i의 추가적인 인자로 곱해진다. 이것은, 복소수 승산 결과를 ±i로 곱하기 위해 벡터의 실수/허수 성분을 전치시키기 위한 추가적인 명령의 필요성을 없애기 때문에, 일부 DSP 알고리즘에 유용할 수 있다.
일부 구현예에서, 명령 디코더는 제 1(비전치) 버전, 또는 제 2(전치) 버전만을 구현하는 반면에, 다른 것은 제 1 및 제 2 버전 모두에 대한 명령 디코더 지원을 갖는다.
복소수 승산 명령의 다른 변종은, 정수/고정 소수점 연산을 사용하여 곱과 합/차가 계산되는 정수 또는 고정 소수점 변종과, 부동소수점 연산에 따라 곱과 합/차가 계산되는 부동소수점 변종을 포함한다. 부동소수점 변동에 대해, 제 1/제 2 피연산자 벡터들과 목적지 벡터의 각각의 성분은, 특정한 부동소수점 포맷, 예를 들어, IEEE에 의해 정의된 배정도, 단정도 또는 반정도 부동소수점으로 표현된다. 일부 경우에, 명령의 서로 다른 변종들이 서로 다른 부동소수점 포맷에 대응하여 제공된다.
또한, 목적지 벡터와 비교하여 제 1 및 제 2 피연산자 벡터들 내부의 데이터 성분들의 상대적인 크기 면에서 변동하는 다른 형태의 명령이 존재해도 된다. 성분 확대 변종이 J비트 데이터 성분을 갖는 제 1 및 제 2 피연산자 벡터들에 작용하여 더 폭이 넓은 K비트(예를 들어, K는 2*J이다) 데이터 성분들을 갖는 목적지 벡터를 발생해도 된다. 제 1/제 2 곱을 발생하기 위한 승산이 폭이 더 넓은 데이터 값을 생성하기 때문에, 이와 같은 접근방법은 최종 결과에 곱의 추가된 정밀도가 얻어질 수 있도록 할 수 있다. 실제로, J비트의 값의 2개의 곱을 발생하고 이들 곱을 가산하거나 감산하는 것은 보통 (2J+1)비트의 값을 발생하므로, 이것을 K비트(2J 비트 값으로 줄이려면, 한 개의 비트를 폐기함으로써 절단을 필요로 할 수 있다. 한가지 접근방법은, 중간값의 최상위 K비트를 선택하고, 최하위 비트를 폐기하는 것이다. 그러나, 제 1 및 제 2 곱의 합 또는 차는 곱해지는 원래의 값이 모두 최대의 가능한 크기를 갖는 경우에만 위로 오버플로우하게 되므로, 2J+1비트(K+1비트) 중간값의 최상위 비트는 거의 항상 중복 비트가 된다. 따라서, 다른 접근방법은, 중간값의 최상단 비트를 폐기하고 최하위 K비트를 절단된 결과로서 선택하는 것이며, 이것은 최하위 비트가 유지될 수 있게 하는데, 이것은 정밀도를 유지하기 위한 유용한 정보를 제공할 가능성이 더 높다.
목적지 비트가 제 1 및 제 2 피연산자 벡터들의 J비트 데이터 성분들과 같은 크기를 갖는 J비트 데이터 성분들을 갖는, 복소수 승산 명령의 성분 크기 보존 변종이 제공될 수도 있다. 마찬가지로, 제 1 및 제 2 곱의 가산 또는 감산 결과에 대응하는 중간값의 절단이 필요할 수 있다. 마찬가지로, 절단은 중간값의 최상위 J비트를 사용하거나, 최상단 비트가 중복 비트일 가능성이 크므로, 최상단 비트를 무시하고 다음의 최상위 J비트를 선택할 수 있다.
절단을 행할 때, 선택된 J비트보다 낮은 비트들을 단순히 폐기하는 것은, 시스템적으로 결과의 크기를 줄이는 경향이 있으므로, 복소수 승산의 시퀀스의 결과에 바이어스(bias)를 일으킨다. 이 바이어스를 줄이기 위해, 중간값을 절단할 때, 선택된 J비트보다 중요도가 작은 중간값의 적어도 한 개의 하위 비트에 근거하여 선택된 J비트를 라운딩한다(예를 들어, J비트를 선택하기 전에, 최상위의 폐기된 비트의 비트값을 선택된 J비트의 최하위 비트에 대응하는 중간값의 비트 위치에 가산함으로써, 절단된 값을 J비트를 사용하여 표현가능한 2K+1 중간 결과의 가장 가까운 값으로 효율적으로 라운딩한다).
일부 시스템은 전체 벡터 명령의 처리를 병렬로 지원하여, 결과 벡터의 성분들 각각이 병렬로 발생된다. 그러나, 일부의 더 낮은 전력의 구현에 대해서는, 목적지 벡터의 모든 성분을 병렬로 계산할 정도로 충분한 하드웨어가 존재하지 않을 수도 있다. 일부 구현에에서는, 특정한 벡터 명령에 응답하여, 처리회로가 복수 비트(beat)의 처리를 행하고, 각각의 비트는 벡터값의 일부에 대응하고, 처리회로는, 제 2 벡터 명령의 제 1 서브셋의 비트들이 제 1 벡터 명령의 제 2 서브셋의 비트들과 병렬로 행해지는 제 1 및 제 2 벡터 명령들의 중첩 실행을 지원한다. 비트(beat)는 벡터의 특정한 고정된 크기를 갖는 일부에 해당하고, 이 비트는 데이터 성분 크기에 무관하다. 복수의 벡터 명령들의 실행을 중첩하는 것은 하드웨어 자원의 더 큰 이용을 허용할 수 있다. 실행의 중첩 속성은 시스템 상에서 실행되는 예외처리기 또는 디버거 등의 소프트웨어가 볼 수 있다. 이와 같은 중첩 실행은 전술한 형태의 복소수 승산 명령을 위해 사용될 수도 있다.
도 1은 벡터 명령의 처리를 지원하는 데이터 처리장치(2)의 일례를 개략적으로 나타낸 것이다. 이때, 이것은 설명을 쉽게 하기 위한 단순화된 도면이며, 실제로는 장치가 간략을 위해 도 1에 미도시된 다수의 구성요소를 갖는다. 장치(2)는 명령 디코더(6)에 의해 디코드된 명령에 응답하여 데이터 처리를 행하는 처리회로(4)를 구비한다. 프로그램 명령은 메모리 시스템(8)으로부터 페치되고 명령 디코더에 의해 디코드되어, 처리회로(4)를 제어하여 명령 세트 아키텍처에 의해 정의된 방식으로 명령을 처리하는 제어신호를 발생한다. 예를 들어 디코더(6)는 디코드된 명령의 옵코드와 명령의 추가적인 제어 필드를 해석하여, 처리회로(4)가 적절한 하드웨어 유닛을 기동하여 산술 연산, 로드/스토어 연산 또는 논리 연산 등의 연산을 행하게 하는 제어신호를 발생한다. 장치는, 처리회로(4)에 의해 처리할 데이터 값과 처리회로의 동작을 환경설정하는 제어 정보를 기억하는 레지스터들의 세트(10)를 갖는다. 산술 또는 논리 명령에 응답하여, 처리회로(4)는 레지스터들(10)로부터 피연산자를 판독하고 명령의 결과를 다시 레지스터(10)에 기록한다. 로드/스토어 명령에 응답하여, 데이터 값이 프로세싱 로직을 거쳐 레지스터들(10)과 메모리 시스템(8) 사이에서 전달된다. 메모리 시스템(8)은 메인 메모리 이외에 한 개 이상의 레벨의 캐시를 포함한다.
레지스터들(10)은 한 개의 데이터 성분을 포함하는 스칼라 값을 기억하는 다수의 스칼라 레지스터를 포함하는 스칼라 레지스터 파일(12)을 구비한다. 명령 디코더(6)와 처리회로(4)에 의해 지원되는 일부 명령은, 스칼라 레지스터(12)에서 판독된 스칼라 피연산자를 처리하여 스칼라 레지스터에 다시 기록되는 스칼라 결과를 발생하는 스칼라 명령이다.
레지스터들(10)은 복수의 데이터 성분을 포함하는 벡터값을 각각 기억하는 다수의 벡터 레지스터들을 포함하는 벡터 레지스터 파일(14)을 더 갖는다. 벡터 명령에 응답하여, 명령 디코더(6)는 처리회로(4)를 제어하여, 벡터 레지스터들(14) 중에서 한 개로부터 판독된 벡터 피연산자의 각각의 성분에 대해 다수의 레인의 벡터 처리를 행함으로써, 스칼라 레지스터(12)에 기록되는 스칼라 결과 또는 벡터 레지스터(14)에 기록되는 또 다른 벡터 결과를 발생한다. 일부 벡터 명령은 한 개 이상의 스칼라 피연산자로부터 벡터 결과를 발생하거나, 스칼라 레지스터 파일의 스칼라 피연산자에 대해 추가적인 스칼라 연산과 벡터 레지스터 파일(14)로부터 판독된 벡터 피연산자에 대해 레인들의 벡터 처리를 행해도 된다. 따라서, 일부 명령은, 한 개 이상의 소스 레지스터와 명령의 목적지 레지스터 중애서 적어도 한 개가 벡터 레지스터(14)이고 한 개 이상의 소스 레지스터와 목적지 레지스터 중에서 다른 한 개가 스칼라 레지스터(12)인 혼합 스칼라-벡터 명령이다. 벡터 명령은, 벡터 레지스터(14)와 메모리 시스템(8) 내부의 위치 사이에서 데이터 값이 전달되도록 하는 벡터 로드/스토어 명령을 더 포함한다. 로드/스토어 명령은, 메모리 내부의 위치가 인접하는 범위의 어드레스들에 대응하는 인접한 벡터 로드/스토어 명령, 또는 다수의 개별 어드레스를 지정하고 처리회로(4)를 제어하여 이들 어드레스 각각으로부터 벡터 레지스터의 각각의 성분 내부로 데이터를 로드하거나 벡터의 각각의 성분으로부터 개별 어드레스에 데이터를 기억하는 스캐터/게더(scatter/gather)형 벡터 로드/스코어 명령을 포함한다.
처리회로(4)는 다양한 다른 데이터 성분 크기를 갖는 벡터의 처리를 지원한다. 예를 들어, 128비트 벡터 레지스터(14)가 16개의 8비트 데이터 성분, 8개의 16비트 데이터 성분, 4개의 32비트 데이터 성분 또는 2개의 64비트 데이터 성분으로 분할될 수 있다. 레지스터 뱅크(10) 내부의 제어 레지스터는 사용되고 있는 현재의 데이터 성분 크기를 지정하거나, 이와 달리 이것이 실행할 특정한 벡터 명령의 파라미터이어도 된다.
레지스터 뱅크(10)는 처리회로(4)의 동작을 제어하는 제어정보를 기억하는 레지스터를 더 구비한다. 제어 레지스터는, 현재의 실행 시점에 대응하는 명령의 어드레스를 표시하는 프로그램 카운터 레지스터, 예외 처리시에 레지스터 상태를 기억/복원하기 위해 스택 데이터 구조의 메모리 시스템(8) 내부의 위치의 어드레스를 나타내는 스택 포인터 레지스터, 및 함수의 실행 후 처리가 분기되는 함수 복귀 어드레스를 기억하는 링크 레지스터 등의 레지스터를 구비한다. 간략을 위해 이것들은 도 1에 도시하지 않았다.
도 1에 도시된 것과 같이, 레지스터는, 벡터화된 루프들의 진행을 추적하는 루프 카운터(16)와, 현재 처리되고 있는 벡터 내부의 각 데이터 성분의 비트 수를 표시하는 파라미터를 기억하는 성분 크기 레지스터(18)와, 한 개의 벡터 레지스터 내부의 총 비트수를 나타내는 파라미터를 기억하는 벡터 폭 레지스터(20)와, 벡터 연산의 프레디케이션을 제어하는 벡터 프레디케이트 레지스터(22)를 더 구비한다. 이것들은 이하에서 더 상세히 설명할 것이다. 일부 실시예에서, 벡터 폭 레지스터(20)는 특정한 디바이스에 대한 벡터 레지스터(14)에 구현된 특정한 벡터 폭에 따라 장치의 제조중에 짜넣어져도 된다. 이와 달리, 벡터 레지스터 파일(14)이 서로 다른 벡터 폭을 갖는 다양한 환경설정을 지원하는 경우에는, 벡터 폭 레지스터(20)가 사용되고 있는 현재 폭을 표시하도록 프로그래밍되어도 된다. 이와 마찬가지로, 성분 크기 레지스터(18)는 특정한 성분 크기가 주어진 장치에 대해 항상 사용되는 경우에는 짜넣어지거나, 또는 장치가 서로 다른 데이터 성분 크기를 갖는 벡터를 사용한 처리를 지원하는 경우에는 변수가 될 수도 있다. 일부 실시예에서, 예를 들어 각각의 벡터 명령이 이 명령에 대해 사용할 성분 크기를 지정하는 경우에는, 성분 크기 레지스터(18)를 생략해도 된다. 루프 카운터(16)를 전용의 제어 레지스터로 나타내었지만, 다른 실시예는 범용 스칼라 레지스터들(12) 중에서 한 개를 사용하여 벡터화된 루프의 진행을 추적해도 된다.
복소수의 실수 및 허수부들이 벡터 레지스터에 인터리브되는 복소수 연산을 행하기 위한 명령은 성능을 향상시키고 레지스터 압력을 줄일 수 있다. 비교적 적은 수의 벡터 레지스터만을 갖는 구현에에서는(예를 들어, 일부 하드웨어 시스템은 단지 8개의 벡터 레지스터만을 제공한다), 처리할 모든 값을 수용할 충분한 레지스터가 존재하지 않는 경우에 이것이 메모리로부터 레지스터 콘텐츠를 흘리고 나중에 레지스터 파일 내부에 값을 다시 판독하는 추가적인 로드/스토어 연산을 필요로 하기 때문에, 레지스터 압력은 전체 프로세서 성능에서 중요한 인자가 될 수 있다. 예를 들어 8개의 벡터 레지스터를 갖는 시스템에서는, 명령 디코더에 복소수 산술 지원이 없으면, 표준 벡터 승산 명령은 레지스터 스필링(spilling)이 없이 기수(radix) 2 FFT만을 구현할 수 있도록 하지만, 복소수 산술 지원이 있으면, 레지스터 스필링이 없어도 기수 4 FFT를 구현할 수 있다. 그 결과, 복소수 산술 명령을 추가함으로써 얻어지는 전체 속도 상승은 Q31 FFT에 대해 56%만큼 클 수 있다.
그러나, 복소수 승산 명령이 구현되는 특정한 방식이 성능, 회로 면적 및 소비전력에 영향을 미친다. 도 2는 또 다른 접근방식에 따른 복소수 승산 명령을 사용하는 비교예를 나타낸 것이다. 도 2의 상단에 나타낸 것과 같이, 2개의 복소수 a+ib 및 c+id를 승산하는 것은 곱 항 ac, ibc, iad, -bd를 생성하기 위한 4개의 승산을 필요로 하므로, 한 개의 벡터 명령으로 복소수 승산을 구현하는 것이 실용적이지 않다. 도 2에 도시된 접근방법에서는, VMOV 명령을 먼저 실행하여 누산기 벡터 레지스터 Q0를 제로값으로 소거한다. 그후, 입력으로서 누산기 레지스터 Q0 및 2개의 입력 피연산자 벡터 Q1, Q2를 취하는 2개의 복소수 승산 벡터 명령이 실행된다. 벡터 레지스터들 Q0, Q1, Q2 각각은 복소수의 실수부를 표현하는 실수 성분(R)으로서 할당된 그것의 짝수 성분 0, 2와, 복소수의 허수부를 표현하는 허수 성분(I)로서 할당된 그것의 홀수 성분 1,3을 갖는다. 인접하는 실수/허수 성분의 쌍 0, 1 및 2, 3 각각은 서로 다른 복소수를 표현하는데, 예를 들어, 벡터 Q1의 성분 0, 1은 복소수 a0+ib0를 표시하고, 벡터 Q1의 성분 2, 3은 다른 복소수 a1+b1을 표시한다. 마찬가지로, Q2 레지스터는 레지스터 Q1의 대응하는 콘텐츠와 승산되는 대응하는 복소수 c0+id0 및 c1+id1을 표시한다. 복소수 승산 명령들 VCMLA 중에서 첫 번째는 도 2의 상단에 나타낸 합의 첫 번째 2개의 항 ac, ibc를 계산하고, 그것의 결과를 누산기 레지스터 Q0에 누적한다. 마찬가지로, 두 번째 복소수 승산 명령은 도 2에 나타낸 합의 세 번째 및 네 번째 항 iad, -bd를 계산하여, 이것을 누산기 레지스터 Q0에 누적한다. 최종 누산기 값에서, 인접하는 실수/허수 성분들의 각 쌍은 Q1, Q2의 대응하는 부분들로 표시된 복소수의 곱에 해당하는 복소수 값을 나타낸다.
더 규모가 큰 구현에에서는, 예를 들어, 이와 같은 접근방법이 비순차 프로세서에 대해 더 효율적일 수 있기 때문에 몇가지 이점을 가질 수 있다. 그러나, 더 낮은 전력의 구현예에서는, 일부 문제점이 존재할 수 있다. 먼저, 누산기 레지스터 Q0를 제로값을 하기 위해 추가적인 명령이 필요하여, 메모리 내부의 코드 밀도를 줄이고 성능을 줄인다. 또한, 결과를 누산기 레지스터 Q0에 누적하기 때문에, 각각의 벡터 승산 명령은 3개의 입력 벡터를 필요로 한다(누산기 레지스터 Q0 및 2개의 입력 벡터 Q1, Q2의 오래된 값). 따라서, 세 번째 벡터 레지스터 판독 포트가 필요하다. 비교적 소규모 구현에서는, 2개보다 많은 수의 벡터 판독 포트를 필요로 하는 다른 명령이 존재하지 않으므로, 단지 한가지 종류의 명령을 위해 세 번째 레지스터 판독 포트를 추가하기 위한 면적 및 전력 비용을 해명하기 매우 어렵다,
이것을 도 3에 도시된 형태의 명령을 사용하여 피할 수 있다. 도 3의 상단에 있는 합에 나타낸 것과 같이, 결과의 실수부가 한 개의 명령에 의해 계산되고 허수부가 다른 명령에 의해 계산되도록 복소수 승산을 다시 인수분해할 수 있다. 제1 및 제 2 형태의 명령이 주어지는데, 이들 중에서 한 개는 목적지 벡터의 실수 성분을 대상으로 하고 나머지는 허수 성분을 대상으로 한다. 인접한 벡터 레인들의 각 쌍에서, 제 1 형태의 명령(이하의 실시예에서는 'X'를 갖지 않는 연상부호로 표시)은 제 1 곱 ac(R*R)과 제 2 곱 bd(I*I)를 생성하고, 제 1 및 제 2 곱을 가산하거나 감산하고, 그 결과를 대응하는 대상 성분(본 실시예에서는, 실수 성분)에 기록한다. 한편, 인접하는 벡터 레인들의 각 쌍에 대해, 제 2 형태의 명령('X'를 갖는 명령 연상부호로 표시)는 제 1 곱 ad(R*I) 및 제 2 곱 bc(I*R)을 생성하고, 제 1 및 제 2 곱을 가산하거나 감산하고, 결과를 대응하는 대상 성분(본 실시예에서는 허수 성분)에 기록한다. 각각의 명령은 성분들의 절반에 기록하기 때문에, 2개의 형태의 명령이 행해진 후 전체 레지스터가 기록되어, 레지스터를 먼저 제로로 만들 필요가 없어진다. 더구나, 각각의 형태의 명령에 대한 대상 성분들이 모든 필요한 곱을 포함하기 때문에, 이전의 결과 위에 누적할 필요가 없으므로, 세 번째 레지스터 판독 포트와 누산기를 소거하기 위한 추가적인 명령의 필요성을 없앨 수 있다.
명령의 가산 및 감산 변종이 제공된다. (연상부호 VMMLAD 또는 VMMLADX로 표시된) 가산 변종에 대해, 제1/제2 곱을 가산하여 대응하는 대상 성분을 형성한다. (연상부호 VMMLSD 또는 VMMLSDX로 표시된) 감산 변종에 대해, 제1/제2 곱을 감산하여 대응하는 대상 성분을 형성한다. 따라서, 제 1 형태의 감산 변종 명령(VMMLSD)을 실행하여, 레지스터 Q0의 성분 0(실수 성분)을 레지스터들 Q1, Q2의 대응하는 부분에 있는 값 a0+ib0 및 c0+id0의 복소수 곱의 실수부를 표현하는 값 a0c0-b0d0로 설정하고, 레지스터 Q0의 성분 2(실수 성분)를 마찬가지로 값 a1c1-b1d1으로 설정한다. 제 2 형태의 가산 변종 명령 VMMLADX를 실행하여, 레지스터 Q0의 성분 1(허수 성분)을 레지스터 A1, A2의 값 a0+ib0 및 c0+id0의 복소수 곱의 허수부를 표현하는 값 a0d0+b0c0로 설정하고, 레지스터 Q0의 성분 3(허수 성분)을 마찬가지로 값 a1d1+b1c1으로 설정한다.
이와 달리 도 4에 나타낸 것과 같이, 제 1 형태의 가산 변종 명령(VMMLAD)과 제 2 형태의 감산 변종 명령(VMMLSDX)을 실행하여, 형태 r=(a-ib)(c+id)를 갖는 복소수 공역 승산을 계산할 수 있다. 따라서, 제 1 형태는 R*R 및 I*I 곱의 합에 근거하여 목적지 벡터 Q0의 실수 성분을 대상으로 하고, 제 2 형태는 R*I 및 I*R 곱의 차에 근거하여 허수 성분을 대상으로 한다.
도 3 및 도 4의 두가지 실시예에서, 명령들은, 제 1 형태의 명령이 목적지 레지스터 Q0의 실수 성분을 대상으로 하고 제 2 형태가 허수 성분을 대상으로 하는 제 1 버전('T'를 갖지 않는 명령 연상부호로 표시된 비전치된 버전)을 갖는다.
그러나, 도 5에 도시된 것과 같이, 제 1 형태의 명령이 허수 성분을 대상으로 하고 제 2 형태가 실수 성분을 대상으로 하는 이들 명령의 제 2 버전이 제공될 수 있다. 제 2 버전은 "T'를 포함하는 명령 연상부호로 표시된 전치 버전이다. 따라서, 이때에는 목적지 레지스터 Q0의 실수 성분이 R*I 및 I*R 곱에 근거하여 설정되고, 허수 성분이 R*R 및 I*I 곱에 근거하여 설정된다. 도 5에 나타낸 것과 같이, 이것은 ±i*(a+ib)*(c+id)의 형태를 갖는 계산을 평가하는데 유용할 수 있다. 그 이외에는, 도 5의 연산은 도 3 및 도 4와 유사하다.
제 1/제2 형태의 복소수 승산 명령들 중에서 한 개 또는 모두에 응답하여, 명령 디코더(6)는 처리회로(4)를 제어하여, 비대상 성분의 갱신을 금지하여, 이전의 명령의 결과의 오버라이팅을 피한다. 제1/제2 형태 중에서 한 개만이 비대상 성분에 대한 이와 같은 갱신 금지를 기동하는 경우에는, 이 명령은 명령들의 쌍에서 두 번째로 실행되어야 한다. 그러나, 두가지 형태가 비대상 성분의 갱신을 금지하는 경우에는, 명령들의 쌍이 양쪽 순서로 실행될 수 있다.
도 3 내지 도 5는 실수 성분이 짝수 위치 0, 2를 갖는 성분이고 허수 성분이 홀수 성분 1, 3인 예를 나타내었다. 그러나, 도 6에 나타낸 것과 같이, 실수 및 허수 성분이 반대 순서가 되어, 허수 성분이 짝수 성분에 대응하고 실수 성분이 홀수에 대응할 수도 있다. 도 6의 상단의 2개의 예에 나타낸 것과 같이, 도 3에 도시된 모든 승산이 2개 이상의 레인을 가로지르는 승산을 요구하는 것 대신에 인접한 벡터 레인들의 쌍 내부에 머무르도록 실수 및 허수 성분들을 인터리브하는 것이 유용할 수 있다. 그렇지만, 도 6의 하단 에에 나타낸 거소가 같이, 실수 및 허수 성분을 이와 다르게 배치하는 것도 가능하다.
위에 나타낸 종류의 명령은 복소수 승상 연산의 결과를 계산하는데 적합하지만, 다른 목적으로도 사용될 수 있다. 실수 성분은 복소수의 실수부를 표현하는데 적합하고 허수 성분은 허수부를 표현하는데 적합하지만, 프로그래머가 동일한 명령에 대해 다른 용도를 발견할 수도 있다. 예를 들어, 도 4에 도시된 복소수 승산 명령의 가산 변종을 실행하는 것은 인접한 레인들의 곱의 합을 목적지 레지스터의 단일 성분에 누적하는 비교적 간단한 방법일 수 있으므로, 일부 프로그래머가 실수의 일부 처리에 대해서도 이와 같은 종류의 명령을 사용하도록 선택해도 된다. 따라서, 이들 명령은 복소수 연산에 대해서만 사용하도록 제한되지는 않는다.
도 3 내지 도 5의 실시예에서는, 명령이 데이터 성분들의 크기를 보존하므로, 목적지 레지스터 Q0가 입력 피연산자 Q1, Q2와 같은 크기의 데이터 성분들을 갖는다. 그러나, 정수/고정 소수점 계산을 사용하고 데이터 성분이 각각 J비트를 포함한다면, J비트 성분들의 2개의 곱의 합은 2J+1비트를 가질 것이므로, 절단을 행하여 특정한 대상 성분에 기록할 J비트 값을 발생한다. 도 7은 절단을 행하는 첫 번째 접근방법을 나타낸 것이다. 이 경우에, 2J+1비트의 중간 결과[2J:0]의 상위 J비트[2J:J+1]을 대상 성분에 기록하도록 선택하고, 바이어스를 줄이기 위해 절단을 행하기 전에 중간 결과에 다음의 최상위 비트 위치[J]에 있는 비트값 1을 가산함으로써 결과를 라운딩하고, J비트 결과를 대상 성분에 기록한다. 이때, 다른 형태의 라운딩을 행해도 된다.
도 8은 절단의 또 다른 접근방법을 나타낸 것으로, 중간 결과의 최상위 비트를 무시하고, 그 대신에 절단을 행할 때 중간 결과의 다음의 J 최상위 비트[2J-1:J]를 선택하고, 다음의 최상위 비트[J-1]에 근거하여 선택된 비트를 라운딩한다. 이것은 2J+1비트의 중간 결과의 최상위 비트[2J]가 중복 비트인 경우가 많고, 원래의 입력 성분들 모두가 가장 큰 가능한 양 또는 음의 크기를 갖는 경우에만 이 비트가 사용될 것이므로, 이것이 더 큰 정밀도를 허용하는 일이 많다. 따라서, 비트 [J]가 비트 [2J]보다 "흥미로운" 결과를 포함할 가능성이 크므로, 이 비트를 최종 결과에 유지하는 것이 바람직하다. 이와 같은 접근방법에서는, 최상위 비트[2J]가 결코 사용되지 않으므로, 하드웨어에 의해 명시적으로 이것을 계산할 필요가 없다(예를 들어, 하드웨어는 2J+1비트 중간 결과 중 하부 2J비트를 결정하는 회로만을 가져도 된다). (2J+1)비트의 중간 결과가 항상 중복 비트가 되도록 보장하기 위해(따라서 최상위 비트를 무시함으로써 정보가 손실되지 않도록 하기 위해), 명령 세트아키텍처는, 프로그래머 또는 컴파일러가 복소수 승산을 행하기 전에 모든 입력 값을 2로 나누게 한 후(따라서 최상위 비트를 필요로 하는 극단 크기를 피한 후), 복소수 승산의 결과가 발생되면, 그 결과에 4를 곱해, 중간 결과의 최상위 비트가 계산되었던 것처럼 동일한 수치 결과를 제공하도록 요구한다.
도 7 및 도 8은 절단에 대한 컷오프 아래의 한 위치에 놓이는 한 개의 더 하위의 비트만을 사용하여 라운딩을 행하는 일례를 나타내었지만, 더 큰 수의 하위 비트를 고려하는 라운딩 기술을 사용하는 것도 가능하다. 특히, 명령의 부동소수점 변종에 대해서는, 공지의 부동소수점 라운딩 기술에 따라 추가적인 비트를 고려해도 된다.
도 9에 도시된 것과 같이, 성분들이 입력 피연산자 Q1, Q2의 성분들의 폭의 2개인 목적지 벡터 Q0를 생성하는, 명령의 성분 확대 변종을 제공할 수 있다. 이 경우에는, 입력 성분의 절반만 결과에 영향을 미친다. 복소수 승산 명령은, 목적지가 피연산자 벡터 Q1, Q2의 성분들의 상부 절반 또는 하부 절반을 사용하여 계산되어야 하는지를 지정한다(예를 들어, 도 9에서는 명령이 피연산자 벡터의 하부 절단에 작용한다). 성분 확대 변종에 대해, 2J비트의 폭이 더 큰 데이터 성분을 생선하기 위해 2J+1비트의 중간값의 절단은, 도 10에 도시된 것과 같이 최상위 2J비트[2J:1]를 선택하거나(도 7과 유사하다), 도 11에 도시된 것과 같이 최상위 비트를 무시하고 최하위 2J비트[2J-1:0]을 선택함으로써 행해질 수 있다(도 8과 유사하다).
전술한 실시예는 각각 4개의 성분(인터리브된 2개의 실수 성분 및 2개의 허수 성분)을 포함하는 입력 벡터를 나타내고 있지만, 다른 수의 성분들에 대해 명령이 실행될 수도 있다.
도 12에 도시된 것과 같이, 2개의 입력 벡터 QA, QB의 각각의 성분을 비교하여 이들이 일부 테스트 조건을 만족하는지 여부를 판정하고, 각 비교의 결과에 따라 벡터 프레디케이트 레지스터(VPR)(22)를 설정하는 벡터 프레디케이션 명령(VPT 명령)으로 명령들을 선행함으로써 복소수 승산 명령이 프레디케이션을 겪는다. VPR(22)은, 처리회로에 의해 지원된 최소 성분 크기의 입도(granularity)에서, 벡터 레지스터의 일부에 각각 대응하는 다수의 프레디케이트 플래그를 포함한다. 예를 들어, 최소 성분 크기가 8비트인 128비트 벡터 레지스터에 대해, 벡터 레지스터의 8비트 청크에 각각 대응하여 16개의 프레디케이트 플래그가 제공될 수 있다.
본 실시예에서, 테스트 조건은 Qa의 정해진 성분이 Qb의 대응하는 성분 이상인지 아닌지이지만, 테스트 조건의 다른 예로는 이상, 미만, 이하, 같다 또는 같지 않다를 들 수 있다. 본 실시예에서는, 레인 0, 1 및 3에서는 테스트 조건을 통과하였지만 레인 2에서는 실패하였다. 따라서, VPT 명령에 응답하여, 처리회로(4)는 레인 2에 대응하는 VPR(22)의 부분에서 프레디케이트 플래그를 0으로 설정하고 레인 0, 1, 3에 대응하는 VPR의 다른 부분에서 프레디케이트 플래그를 1로 설정한다. 본 실시예에서는 VPT 명령에 대한 성분 크기가 32비트이므로(8비트의 최소 성분 크기보다 크다), 4개의 인접하는 프레디케이트 플래그들의 블록이 각각의 레인에 대응하여 0 또는 1로 설정된다. 본 실시예에서는, 0의 프레디케이트 플래그는 벡터 연산의 대응하는 부분이 마스킹되어야 한다는 것을 나타내는 한편, 1은 대응하는 부분이 마스킹되지 않아야 한다는 것을 나타내지만, 다른 실시예는 반대의 매핑을 사용할 수도 있다.
VPT 명령 이후에 복소수 승산 명령이 실행될 때, 처리회로(4)는, VPR이 0으로 설정된 대응하는 프레디케이트 플래그를 가지면, 목적지 벡터의 정해진 부분과 관련된 연산을 마스킹한다. 본 실시예에서는, 목적지 벡터의 성분 4/5에 대응하는 VPR의 부분에서 프레디케이트 플래그가 0이므로, 이들 성분은 복소수 승산 명령에 응답하여 갱신되지 않는다. 따라서, 제 1 형태의 복소수 승산 명령 VMMLSD는, 목적지 벡터 Q0의 성분 4가 보통 이 명령이 대상으로 하는 실수 성분이더라도, VPR의 대응하는 부분이 0이었기 때문에, 이 성분을 갱신하지 않는다. 나머지 실수 성분 0, 2 및 6은 VPR(22)에서 1인 프레디케이트 비트에 대응하기 때문에 갱신된다. 마찬가지로, 제 2 형태의 명령은, 성분 5가 VPR에 의해 마스킹되므로 이 성분을 갱신하지 않지만, 허수 성분 1, 3, 7에는 여전히 기록한다. 이 두가지 형태의 복소수 승산 명령에 대해, VPR 내부의 대응하는 값이 1 또는 0인지에 무관하게, 비대상 성분은 갱신이 금지된다.
VPR이 0의 프레디케이트 비트를 가질 때 레지스터의 정해진 부분과 관련된 연산이 마스킹될 수 있는 다양한 방법이 존재한다. 예를 들어, 목적지 레지스터의 대응하는 부분을 0으로 소거하거나, 목적지 레지스터의 이 부분에 기억된 이전 값을 유지하거나, 또는 이 부분과 관련된 연산을 전혀 행하지 못하게 금지함으로써(예를 들어, 이 레인에 대해 메모리로부터의 로드, 승산, 가산 또는 감산을 행하지 않음으로써), 마스킹을 구현할 수 있다. 일부 구현에에서는, 프레디케이트 정보에 응답하여 목적지 레지스터의 일부 부분의 갱신을 마스킹하기 위해 설치된 하드웨어를 재사용하여 복소수 승산 명령에 응답하여 비대상 성분의 갱신을 금지할 수도 있다. 그러나, 프레디케이션과 달리, 비대상 성분들의 이와 같은 마스킹은 VPE(22)의 대응하는 부분의 콘텐츠에 무관하게 복소수 승산 명령에 응답하여 일어난다.
도 13은 프레디케이션의 또 다른 예를 나타낸 것이다. 벡터 명령에 대한 일반적인 용도는, 특정한 연산들의 시퀀스가 메모리에 기억된 어레이의 각 성분에 적용될 필요가 있는 벡터화된 루프이다. 고급 코드에서 성분당 1회 반복되는 루프는 더 적은 수의 반복을 포함하는 벡터화된 코드로 컴파일되고, 이때 각각의 반복은 성분들의 블록을 벡터 레지스터에 로드하고, 일련의 벡터 명령들을 사용하여 성분들을 처리하고, 각 레인의 처리의 결과를 다시 메모리에 기억한다. 따라서, 루프의 각각의 반복은 한 개의 벡터 레지스터 내부의 데이터 성분들의 수에 대응하는 성분들의 블록을 처리한다. 처리할 어레이 내부의 성분들의 총수가 NE이고 한 개의 벡터의 데이터 성분들의 수가 NV(이것은 데이터 성분 크기 ES로 벡터 폭 VW을 나눈 것과 같다)이면, 최소 NE/NV 반복으로 전체 어레이가 처리될 수 있다. 그러나, 성분의 총수 NE가 한 개의 벡터 내부의 성분들의 수 NV의 정확한 배수가 아닌 경우가 종종 있으므로, 루프의 최종 반복시에는, 벡터의 성분들 전체가 처리할 값으로 채워지게 되는 것은 아니다. 채워지지 않은 레인의 처리가 마스킹되지 않은 채 진행되는 것이 허용되면, 에러를 일으킬 수 있다. 예를 들어, 어레이의 끝을 벗어난 메모리 어드레스 공간이 페이지 테이블에서 매핑되지 않을 수도 있으므로, 로드/스토어 연산이 어레이의 후미를 처리하는 최종 반복에서 "미사용된" 레인들 중에서 한 개에 대해 행해지면, 메모리 액세스 결함이나 어레이에 인접한 데이터의 손상이 존재할 수도 있다.
따라서, 루프의 최종 반복에서 미사용된 레인들의 연산을 마스킹하는 것이 바람직할 수 있다. 도 1에 도시된 것과 같이, 처리회로(4)는, 특정한 벡터화된 루프의 어떤 레인이 인에이블되거나 마스킹되는지를 제어하는 루프 프레디케이션 회로(90)를 구비한다. 벡터화된 루프의 개시시에, 루프 카운터(16)가 루프에서 처리할 성분들의 총수 NE를 지정하는 값으로 설정될 수 있다. 예를 들어, 루프 개시 명령이 성분들의 수를 지정해도 된다. 루프의 각 반복의 종료시에, 한 개의 벡터 내부의 성분들의 수 NV를 루프 카운터(16)로부터 감산하여, 처리할 잔여 성분들의 수 NEremaining을 계산한다. 정해진 루프 반복의 개시시에, NEremaining<NV이면, 루프 프레디케이션 회로(90)는 처리회로(4)를 제어하여, 예를 들어, 벡터처리 그 자체의 레인들을 금지하거나(예를 들어, 로드/스토어 요구가 발행되지 않게 하거나), 및/또는 마스킹된 레인에서 처리된 결과의 기록을 불능으로 함으로써, 벡터 처리의 상부 NV-NEremaining 레인들과 관련된 연산을 마스킹한다.
따라서, 루프 프레디케이션 회로(90)가 일부 레인이 마스킹되어야 한다고 판정하였을 때, 반복시에 복소수 승산 명령이 실행되면, 대상 성분들(명령의 형태 및 버전에 따라 실수거나 허수)이 이들 마스킹된 레인들에서 갱신되지 않는다. 예를 들어, 도 13에서는, 루프 프레디케이션 회로(90)가 벡터의 레인 2 및 3이 마스킹되어야 한다고 판정하므로, VMMLSD 명령이 비마스킹된 레인에 있는 성분 0(실수 성분)만 갱신하고, 마스킹된 레인에 있는 성분 2(실수 성분)를 갱신하지 않는다. 비마스킹된 레인 1에 있는 비대상 성분(본 실시예에서는 허수)은, 어떤 레인이 루프 프레디케이션 회로(90)에 의해 프레디케이트되는지에 무관하게, 복소수 승산 명령에 의해 여전히 갱신되지 않는다.
상기한 예는, 벡터의 각 레인에서의 연산이 병렬로 발생하는 것으로 나타내었지만, 이것은 필수적인 것은 아니다.
처리회로(4)는 서로 다른 클래스의 명령들을 처리하는 다수의 개별 하드웨어 블록을 구비한다. 예를 들어, 메모리 시스템(8)과 상호작용하는 로드/스토어 명령은 전용 로드/스토어 유닛에 의해 처리되는 한편, 산술 또는 논리 명령은 산술 논리 유닛(ALU)(204)에 의해 처리될 수 있다. ALU 그 자체는, 승산을 포함하는 연산을 행하는 승산-누산 유닛(MAC)과, 다른 종류의 ALU 연산을 처리하는 또 다른 유닛으로 더 분할된다. 부동소수점 명령을 처리하기 위해 부동소수점 유닛이 더 설치될 수 있다. 벡터 처리를 포함하지 않는 순수한 스칼라 명령은, 벡터 명령과 비교하여 별개의 하드웨어 블록에 의해 처리되거나, 동일한 하드웨어 블록을 재사용할 수도 있다.
디지털 신호 처리(DSP) 등의 일부 응용에서는, 대략 동일한 수의 ALU 및 로드/스토어 명령이 존재하므로, MAC 등의 일부 큰 블록은 상당한 시간 동안 휴지 상태로 유지될 수 있다. 더 높은 성능을 얻기 위해 실행 자원이 벡터 레인들의 수에 따라 비례축소되므로 벡터 아키텍처에 대해서는 이와 같은 비효율이 악화될 수 있다. 더 작은 프로세서들(예를 들어, 단일 발행 순차 코어)에 대해서는, 벡터 파이프라인을 완전히 확장하는 면적 오버헤드가 너무 과중할 수 있다. 이용가능한 실행 자원의 더 양호한 사용을 가능하게 하면서 면적 충격을 최소화하는 한가지 접근방법은 도 14에 도시된 것과 같이 명령들의 실행을 중첩하는 것이다. 본 실시예에서는, 3개의 벡터 명령이 로드 명령 VLDR, 승산 명령 VMUL 및 시프트 명령 VSHR을 포함하고, 이들 모든 명령은 이들 사이에 데이터 의존성이 존재하더라도 동시에 실행될 수 있다. 이것은, VMUL의 성분 1이 Q1의 성분 1에만 의존하고 Q1 레지스터 전체에 의존하지 않으므로, VLDR의 실행이 종료하기 전에 VMUL의 실행이 개시될 수 있기 때문이다. 명령들이 중첩하도록 허용함으로써, 승산기 등의 고사의 블록이 더 많은 시간 동안 활성 상태로 유지될 수 있다.
따라서, 마이크로아키텍처 구현이 벡터 명령들의 실행을 중첩할 수 있도록 하는 것이 바람직할 수 있다. 그러나, 고정된 양의 명령 중첩이 존재하는 것으로 아키텍처가 가정하면, 마이크로아키텍처 구현이 실제로 아키텍처가 가정한 명형 중첩의 양과 실제로 일치하는 경우에는 이것이 높은 효율을 제공하지만, 다른 중첩을 사용하거나 전혀 중첩하지 않은 다른 마이크로아키텍처에 맞추어 비례축소되는 경우에 문제를 일으킬 수 있다.
그 대신에, 아키텍처가 도 15의 예에 나타낸 것과 같이 다양한 다른 중첩들을 지원해도 된다. 벡터 명령의 실행은 "비트(beat)"로 불리는 부분들로 분할되고, 각각의 비트는 소정 크기를 갖는 벡터의 일부분의 처리에 대응한다. 비트는 전체가 실행되거나 전혀 실행되지 않으며 부분적으로는 실행될 수 없는 벡터 명령의 원자 부분이다. 1 비트에 처리되는 벡터의 부분의 크기는 아키텍처에 의해 정의되며 벡터의 임의의 분율일 수 있다. 도 15의 예에서는, 비트가 벡터 폭의 1/4에 해당하는 처리로 정의되므로, 벡터 명령당 4개의 비트가 존재한다. 명백하게, 이것은 단지 일례이며 다른 아키텍처는 다른 수의 비트, 예를 들면, 2 또는 8개를 사용해도 된다. 1 비트에 대응하는 벡터의 부분은 처리되고 있는 벡터의 데이터 성분 크기와 같은 크기이거나 더 크거나 더 작을 수 있다. 따라서, 성분 크기가 구현마다 또는 서로 다른 명령들 사이의 런타임마다 변동하지만, 비트는 특정한 고정 폭의 벡터 처리이다. 1 비트에 처리되고 있는 비트의 부분이 복수의 데이터 성분을 포함하는 경우에는, 각각의 성분이 독립적으로 처리되도록 보장하기 위해 각각의 성분들 사이의 경계에서 캐리(carry) 신호가 디스에이블될 수 있다. 1 비트에 처리된 벡터의 부분이 성분의 단지 일부이고 하드웨어가 다수의 비트를 병렬로 계산하는데 불충분한 경우에는, 한 개의 비트의 처리 중에 발생된 캐리 출력이 다음 비트의 처리에 대한 캐리 입력으로서 입력되어, 2개의 비트의 결과가 함께 한 개의 데이터 성분을 구성하게 한다.
도 15에 도시된 것과 같이, 처리회로(140의 다양한 마이크로아키텍처 구현은, 추상적인 아키텍처 클록의 1 "틱(tick)"에 다양한 수의 비트를 실행한다. 여기에서, "틱"은 아키텍처 상태 진행의 단위에 해당한다(예를 들어, 간단한 아키텍처 상에서 각각의 틱은, 프로그램 카운터를 다음 명령으로의 지점까지 갱신하는 것을 포함하는, 명령의 실행과 관련된 모든 아키텍처 상태를 갱신하는 인스턴스에 대응해도 된다). 이때, 파이프라이닝 등의 공지의 마이크로아키텍처 기술은, 한 개의 틱이 하드웨어 레벨에서 복수의 클록 사이클이 행해지는 것을 요구하고, 실제로 하드웨어 레벨에서의 한 개의 클록 사이클이 복수의 명령들의 복수의 부분들을 처리한다는 것을 의미한다는 것은 당업자에게 있어서 자명하다. 그러나, 틱은 아키텍처 레벨에서 원자에 해당하므로 이와 같은 마이크로아키텍처 기술은 소프트웨어에게는 보이지 않는다. 간략을 위해 이와 같은 마이크로아키텍처는 본 발명의 추후의 설명 중에는 무시한다.
도 15의 하부 에에 나타낸 것과 같이, 일부 구현예는, 모든 비트들을 1 틱 내에 병렬로 처리하기 위한 충분한 하드웨어 자원을 제공함으로써, 벡터 명령의 모든 4개의 비트를 동일한 틱 내부에 스케줄링한다. 이것은 더 높은 성능의 구현에 적합하다. 이 경우에는, 전체 명령이 1 클릭에 완료될 수 있기 때문에, 아키텍처 레벨에서 명령들 사이에 중첩이 있을 필요가 없다.
한편, 더 면적 효율적인 구현은, 틱 당 2개의 비트만을 처리할 수 있는 더 좁은 처리 유닛을 제공하며, 도 15의 중간 예에서 나타낸 것과 같이, 명령 실행이 첫 번째 명령의 세 번째 및 네 번째 비트와 병렬로 행해지는 두 번째 벡터 명령의 첫 번째 및 두번째 비트와 중첩될 수 있으며, 이때 이들 명령은 처리회로 내부의 다른 실행 유닛에서 실행된다(예를 들어, 도 15에서는 첫 번째 명령이 로드/스토어 유닛을 사용하여 실행되는 로드 명령이고 두 번째 명령이 MAC을 사용하여 실행되는 승산 누산 명령이다).
더욱 더 에너지/면적 효율적인 구현은, 더 폭이 좁고 한번에 한 개의 비트만을 처리할 수 있는 하드웨어 유닛을 제공하는 것이며, 이 경우에는 틱 당 1 비트가 처리되고, 도 15의 상단 에에 나타낸 것과 같이 명령 실행이 1 비트만큼 중첩되고 엇갈린다(이것은 도 14에 나타낸 예와 같다).
이때, 도 15에 나타낸 중첩은 단지 일부 예이며, 다른 구현이 가능하다. 예를 들어, 처리회로(4)의 일부 구현예는 동일한 틱에 병렬로 복수의 명령의 이중 발행을 지원함으로써, 더 큰 명령의 스루풋이 존재한다. 이 경우, 한 개의 사이클에 함께 시작하는 2개 이상의 벡터 명령들이 다음 사이클에 시작하는 2개 이상의 벡터 명령과 중첩되는 일부 비트를 갖는다.
구현마다 중첩량을 다양한 성능 지점에 맞추어 조정하도록 변경하는 것 이외에, 벡터 명령들 사이의 중첩량도 런타임시에 프로그램 내부의 벡터 명령들의 실행의 서로 다른 인스턴스들 사이에서 변경될 수 있다. 따라서, 처리회로(4)는, 이전 명령에 대해 정해진 명령이 실행되는 타이밍을 제어하는 회로를 구비해도 된다. 이것은, 마이크로아키텍처에 대해, 구현하기 더 곤란한 특정한 드문 경우에 또는 명령이 이용가능한 자원에 따라 명령을 중첩하지 않도록 선택할 수 있는 자유를 제공한다. 동일한 자원을 필요로 하고 모든 이용가능한 MAC 또는 ALU 자원이 이미 다른 명령에 의해 사용되고 있는 정해진 종류의 연속적인 명령(예를 들어, 승산 누산)이 존재하는 경우에는, 다음 명령의 실행을 개시하기 위한 충분한 빈 자원이 존재하지 않을 수도 있으므로, 중첩보다는, 첫 번째 명령이 완료할 때까지 두 번째 명령의 발행을 대기할 수 있다.
도 16에 나타낸 것과 같이, 개재하는 스칼라 명령이 존재하는 경우에는 2개의 벡터 명령들 사이의 중첩이 금지될 수도 있다. 이것은, 스칼라 명령은 벡터 명령의 최종 비트의 결과에 의존하고 두 번째 벡터 명령은 모든 비트에서 스칼라 결과에 의존할 수 있으므로, 벡터 명령과 스칼라 명령의 중첩을 피하는 것이 더 안전하기 때문이다.
이와 같은 중첩된 실행은 전술한 종류의 복소수 승산 명령을 위해 사용될 수도 있다. 따라서, 복소수 승산 명령에 대한 각각의 비트들의 처리는, 다른 명령들과 중첩하여, 전체가 병렬로 발생하거나, 다수의 아키텍처 틱 위에서 순차적으로 일어난다.
그러나, 중첩된 실행이 허가되면, 프로그래머가 목적지 레지스터와 복소수 승산 명령에 대한 피연산자 레지스터들 중에서 한 개로서 동일한 벡터 레지스터(예를 들어, VMMLSD Q0, Q1, Q2 대신에 VMMLSD Q0, Q0, Q1)을 지정하지 않도록 명령 세트 레지스터가 지정하는 것이 유용할 수 있다. 데이터 성분 크기가 비트 크기와 같은 1비트/틱 구현에서는, 소스 및 목적지 모두로서 동일한 레지스터 Q0를 지정하는 것은, 다음 비트에서 필요한 소스 값이 소스/목적지 레지스터에서 아직 판독되기 전에, 1 비트에서 공통된 소스/목적지 레지스터 Q0의 특정한 성분이 오바라이트되게 하기 때문에, 불확실한 결과의 위험이 있을 수 있다. 이것은 2 또는 4비트/틱 구현예, 또는 1비트/틱 구현에서 데이터 성분 크기가 비트 크기보다 작은 경우에는, 벡터의 인접한 성분들에 있는 실수/허수부들이 병렬로 판독될 것이기 때문에, 문제가 되지 않는다. 그러나, 실행할 코드를 작성하는 프로그래머는 주어진 시스템에 대해 어떤 특정한 마이크로아키텍처 구현이 사용되었는지 알지 못하므로, 이것이 1비트/틱 구현에서 실행될 수도 있다는 위험이 있다.
한가지 해결책은, 1비트/틱 구현에 대해, 목적지 레지스터가 소스 레지스터들 중에서 한 개와 동일한 경우를 검출하고, 동일한 경우에, 에러를 유발하거나, 예를 들어, 입력들 중에서 한 개를 다른 레지스터에 임시로 복사함으로써, 명령들이 참조하는 레지스터를 재매핑하는 추가적인 회로를 부가하는 것일 수 있다. 그러나, 실제적으로 이와 같은 추가적인 회로의 오버헤드가 해명될 가능성이 낮다. 실제적으로, 복소수 승산 명령은 전술한 것과 같이 동일한 입력 및 목적지 레지스터들을 사용하는 한쌍의 제1/제2 형태로 사용되는 경우가 많으므로, 프로그래머가 소스 레지스터들 중에서 한 개와 동일한 목적지 레지스터를 지정하도록 선택할 가능성이 매우 낮은데, 이것은 이와 같이 하면 이 쌍의 제 1 명령이 제 2 명령에 필요한 입력 피연산자를 오버라이트하게 되기 때문이다. 따라서, 실제적으로는, 프로그래머가 이들 종류의 명령에 대한 소스/목적지 모두와 동일한 레지스터를 지정할 가능성이 낮으므로, 이것을 방지하는 특수한 회로를 추가하는 오버헤드가 해명되지 않을 수 있다. 그 대신에, 프로그래머가 이들 복소수 승산 명령에 대한 소스 및 목적지 모두와 동일한 레지스터를 사용하는 경우 결과가 올바른 것으로 보장될 수 없다는 것을 명령 세트 아키텍처가 단순히 지정할 수 있다. 이것은 매우 드문 경우를 처리하기 위한 비용 발생을 피함으로써 더욱 면적 및 전력 효율적인 하드웨어 구현을 제공할 수 있다.
도 17은 복소수 승산 명령을 실행하는 방법을 나타낸 흐름도이다. 스텝 50에서, 실행할 다음 명령을 디코딩하기 위해 페치하고, 명령 디코더는 명령의 종류를 판정한다. 명령이 복소수 승산 명령이 아니면, 명령 디코더는 처리회로를 제어하여 이 종류의 명령에 적절한 연산을 행한다. 복소수 승산 명령과 마주치면, 스텝 52에서 명령 디코더는 이 명령이 제 1 형태인지 또는 제 2 형태인지 판정한다. 또한, 스텝 54에서, 명령 디코더는 이 명령이 제 1 버전인지 또는 제 2 버전인지 판정한다. 명령이 제 1 형태 및 제 1 버전이면, 스텝 56에서 대상 성분은 목적지의 적어도 한 개의 실수 성분인 반면에, 명령이 제 1 형태 및 제 2 버전이면, 스텝 58에서 대상 성분은 적어도 한 개의 허수 성분이다. 또한, 제 1 형태의 명령에 대해, 스텝 60에서 명령 디코더는 처리회로(4)를 제어하기 위한 제어 정보를 발생하여, 벡터 Q1의 실수 성분과 벡터 Q2의 실수 성분의 곱에 대응하는 제 1 곱과, Q1의 허수 성분과 Q2의 대응하는 허수 성분의 곱에 대응하는 제 2 곱을 생성한다.
한편, 명령이 제 2 형태이면, 스텝 62에서 마찬가지로 명령 디코더가 명령이 제 1 버전인지 제 2 버전인지 판정한다. 명령이 제 1 버전인 경우에는, 스텝 64에서 대상 성분이 적어도 한 개의 허수 성분인 것으로 판정되는 반면에, 명령이 제 2 버전이면, 스텝 66에서 대상이 적어도 한 개의 실수 성분인 것으로 판정된다. 스텝 68에서, 명령 디코더(6)는 처리회로(4)를 제어하기 위한 제어신호를 발생하여, Q1의 실수 성분 및 Q2의 허수 성분의 곱에 대응하는 제 1 곱과, Q1의 허수 성분 및 Q2의 실수 성분의 곱인 제 2 곱을 생성한다.
명령이 발행되어 실행되고, 스텝 69, 68에서 정의된 곱이 입력 벡터 Q1, Q2의 각 쌍의 실수/허수 성분들에 대해 생성되고, 스텝 70에서, 대응하는 제 1 및 제 2 곱들이 (명령이 가산 변종인지 감산 변종인지에 따라) 가산되거나 감산된다. 스텝 72에서, 가산 또는 감산 결과에 따른 값이 프레디케이션에 의해 마스킹되지 않은 각각의 대상 성분에 기록된다. 목적지 벡터의 데이터 성분 크기로 비트들의 수를 줄이기 위해 필요한 경우에는 가산/감산 결과의 라운딩 및 절단이 행해진다. 스텝 74에서, 처리회로는, 이 명령이 대상으로 하지 않은 적어도 한 개의 비대상 성분에 대해 프레디케이션이 지정되었는지 여부에 무관하게, 이 비대상 성분의 갱신을 금지한다.
이때, 소스 벡터 레지스터에 대한 Q1 및 Q2의 선택은 임의이며, 어떤 레지스터가 사용되는지는 아키텍처에 의해 미리 짜넣어진다. 이와 달리, 다른 실시예에서는 복소수 승산 명령이 어떤 레지스터가 소스 벡터 값을 포함하는지 나타내는 파라미터를 포함해도 된다. 마찬가지로, 목적지 레지스터 Q0는 미리 짜넣어지거나 복소수 승산 명령의 파라미터에 의해 선택되어도 된다.
도 18은 사용되는 가상 머신 구현예를 나타낸 것이다. 전술한 실시예는 해당 기술을 지원하는 구체적인 처리 하드웨어를 작동하는 장치 및 방법에 대해 본 발명을 구현하지만, 하드웨어 장치의 소위 가상머신 구현을 제공할 수도 있다. 이들 가상머신 구현은 가상머신 프로그램(130)을 지원하는 호스트 운영체계(140)를 실행하는 호스트 프로세서(150) 상에서 실행된다. 일반적으로, 합당한 속도에서 실행되는 가상머신 구현을 제공하기 위해서는 크고 강력한 프로세서가 필요하지만, 이와 같은 접근방법은 호환성이나 재사용 이유로 인해 다른 프로세서에 네이티브한 코드를 실행할 필요성이 있을 때 등의 특정한 상황에서만 정당화된다. 가상머신 프로그램(130)은 가상머신 프로그램(130)에 의해 모델링되고 있는 장치인 실제 하드웨어에 의해 제공되는 하드웨어 인터페이스와 동일한 게스트 프로그램(120)에 대한 가상머신 인터페이스를 제공한다. 따라서, 전술한 메모리 액세스의 제어를 포함하는 프로그램 명령은 가상머신 프로그램(130)을 사용하여 게스트 프로그램((120) 내에서 실행되어 가상머신 하드웨어와의 그들의 상호작용을 모델화한다. 게스트 프로그램(120)은 순수한 프포그램이거나, 이와 달리 호스트 OS(140)가 가상머신 어플리케이션(1300을 실행하는 방식과 유사하게 어플리케이션을 실행하는 게스트 운영체계이어도 된다. 또한, 다양한 종류의 가상머신이 존재하며, 일부 종류에서는 가상머신이 호스트 OS(140)를 필요로 하지 않고 호스트 하드웨어(150) 상에서 직접 실행된다.
본 발명에서, 단어 "하도록 구성된"은 장치의 구성요소가 정의된 동작을 행할 수 있는 구성을 갖는다는 것을 의미하기 위해 사용된다. 이와 관련하여, "구성"은 하드웨어 또는 소프트웨어의 배치 또는 상호접속 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 갖거나, 프로세서 또는 기타의 처리장치가 기능을 행하도록 프로그래밍되어도 된다. "하도록 구성된"은 이 장치의 구성요소가 정의된 동작을 제공하기 위해 어떤 식으로 변경될 필요가 있는 것을 시사하는 것은 아니다.
첨부도면을 참조하여 본 발명의 예시적인 실시예들을 상세히 설명하였지만, 본 발명은 이들 실시예에 한정되지 않으며, 첨부된 청구범위의 보호범위 및 사상을 벗어나지 않으면서 본 발명이 속한 기술분야의 당업자에 의해 다양한 변경, 부가 및 변화가 행해질 수 있다는 것은 자명하다.

Claims (22)

  1. 데이터 처리를 행하는 처리회로와,
    명령을 디코드하여 상기 처리회로가 데이터 처리를 행하도록 제어하는 명령 디코더를 구비하고,
    상기 명령 디코더는 복소수 승산 명령을 디코드하여, 상기 처리회로를 제어하여 제 1 및 제 2 피연산자 벡터들에 대해 부분 복소수 승산 연산을 행함으로써 제 1 곱 및 제 2 곱의 가산 또는 감산 결과에 따른 값으로 목적지 벡터의 적어도 한 개의 대상 성분을 설정하고, 상기 제 1 및 제 2 피연산자 벡터들과 상기 목적지 벡터 각각은 복소수의 실수부를 표현하기 위한 적어도 한 개의 실수 성분 및 복소수의 허수부를 표현하기 위한 적어도 한 개의 허수 성분을 포함하는 복수의 데이터 성분을 포함하고,
    제 1 형태의 복소수 승산 명령에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 제 1 피연산자 벡터의 실수 성분 및 상기 제 2 피연산자 벡터의 대응하는 실수 성분의 곱을 포함하는 제 1 곱과, 상기 제 1 피연산자 벡터의 허수 성분 및 상기 제 2 피연산자 벡터의 대응하는 허수 성분의 곱을 포함하는 제 2 곱을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
    제 2 형태의 복소수 승산 명령에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 제 1 피연산자 벡터의 실수 성분 및 상기 제 2 피연산자 벡터의 허수 성분의 곱을 포함하는 제 1 곱과, 상기 제 1 피연산자 벡터의 허수 성분 및 상기 제 2 피연산자 벡터의 실수 성분의 곱을 포함하는 제 2 곱을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
    상기 제 1 및 제 2 형태의 복소수 승산 명령 중 한 개에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 목적지 벡터의 적어도 한 개의 실수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
    상기 제 1 및 제 2 형태의 복소수 승산 명령 중 나머지 한 개에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 목적지 벡터의 적어도 한 개의 허수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
    상기 제 1 및 제 2 형태의 복소수 승산 명령 중에서 적어도 한 개에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 적어도 한 개의 대상 성분 이외의 상기 목적지 벡터의 적어도 한 개의 성분의 갱신을 금지하도록 구성된 데이터 처리장치.
  2. 제 1항에 있어서,
    상기 제 1 및 제 2 피연산 벡터가 2개보다 많은 수의 데이터 성분들을 포함하는 복소수 승산 명령에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 복수의 허수 성분들과 인터리브된 복수의 실수 성분들을 각각 포함하는 제 1 및 제 2 피연산자 벡터를 처리하도록 구성된 데이터 처리장치.
  3. 제 2항에 있어서,
    상기 처리회로는 상기 복소수 승산 명령과 관련된 파라미터에 응답하여 상기 제 1 및 제 2 피연산자 벡터들 내부의 실수 및 허수 성분들의 수를 결정하도록 구성되고, 상기 파라미터는,
    실수 성분들 및 허수 성분들의 수를 나타내는 중간값,
    실수 성분들 및 허수 성분들의 폭을 나타내는 중간값,
    실수 성분들 및 허수 성분들의 수를 나타내는 값을 포함하는 레지스터를 나타내는 값, 및
    실수 성분들 및 허수 성분들의 폭을 나타내는 값을 포함하는 레지스터를 나타내는 값 중에서 한 개인 데이터 처리장치.
  4. 제 1항 내지 제 3항 중 어느 한 항에 있어서,
    상기 처리회로는, 특정한 부분을 마스킹할 부분으로서 식별하는 프레디케이션 표시에 응답하여 상기 목적지 벡터의 상기 특정한 부분과 관련된 연산을 마스킹하도록 구성된 데이터 처리장치.
  5. 제 4항에 있어서,
    상기 제 1 및 제 2 형태의 복소수 승산 명령 중에서 적어도 한 개에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 적어도 한 개의 성분에 대응하는 상기 목적지 벡터의 일부가 마스킹할 부분이라는 것을 상기 프레디케이션 표시가 식별하는 것에 무관하게, 상기 적어도 한 개의 대상 성분 이외의 상기 목적지 벡터의 상기 적어도 한 개의 성분의 갱신을 금지하도록 구성된 데이터 처리장치.
  6. 제 1항 내지 제 5항 중 어느 한 항에 있어서,
    복소수 승산 명령의 가산 변종(add-variant)에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 적어도 한 개의 대상 성분을 제 1 곱 및 제 2 곱의 가산 결과에 따른 값으로 설정하도록 구성되고,
    복소수 승산 명령의 감산 변종에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 적어도 한 개의 대상 성분을 제 1 곱 및 제 2 곱의 감산 결과에 따른 값으로 설정하도록 구성된 데이터 처리장치.
  7. 제 1항 내지 제 6항 중 어느 한 항에 있어서,
    제 1 버전의 복소수 승산 명령에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여,
    복소수 승산 명령이 상기 제 1 형태를 갖는 경우에 상기 목적지 벡터의 적어도 한 개의 실수 성분과,
    복소수 승산 명령이 상기 제 2 형태를 갖는 경우에 상기 목적지 벡터의 적어도 한 개의 허수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성된 데이터 처리장치.
  8. 제 1항 내지 제 7항 중 어느 한 항에 있어서,
    제 2 버전의 복소수 승산 명령에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여,
    복소수 승산 명령이 상기 제 1 형태를 갖는 경우에 상기 목적지 벡터의 적어도 한 개의 허수 성분과,
    복소수 승산 명령이 상기 제 2 형태를 갖는 경우에 상기 목적지 벡터의 적어도 한 개의 실수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성된 데이터 처리장치.
  9. 제 1항 내지 제 8항 중 어느 한 항에 있어서,
    복소수 승산 명령의 성분 확대 변종에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, J비트 성분들을 포함하는 상기 제 1 및 제 2 피연산자 벡터들에 대해 상기 부분 승산 연산을 행함으로써, K비트 데이터 성분들을 포함하는 상기 목적지 벡터를 생성하도록 구성되고, 이때 K>J인 데이터 처리장치.
  10. 제 9항에 있어서,
    K=2J이고, 복소수 승산 명령의 상기 성분 확대 변종에 응답하여, 상기 명령 디코더는 상기 목적지 벡터의 상기 적어도 한 개의 대상 성분 각각을,
    제 1 곱 및 제 2 곱의 가상 또는 감산 결과에 대응하는 K+1비트 값 중에서 최상위 K 비트, 및
    상기 K+1비트 값의 최하위 K비트 중에서 한 개로 설정하도록 구성된 데이터 처리장치.
  11. 제 1항 내지 제 10항 중 어느 한 항에 있어서,
    복소수 승산 명령의 성분 크기 보존 변종에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, J비트 성분들을 포함하는 상기 제 1 및 제 2 피연산자 벡터들에 대해 부분 승산 연산을 행함으로써, J비트 데이터 성분들을 포함하는 상기 목적지 벡터를 생성하도록 구성된 데이터 처리장치.
  12. 제 11항에 있어서,
    복소수 승산 명령의 상기 성분 크기 보존 변종에 응답하여, 상기 명령 디코더는 상기 제어회로를 제어하여, 상기 목적지 벡터의 상기 적어도 한 개의 대상 성분 각각을 제 1 곱 및 제 2 곱의 가산 또는 감산 결과에 대응하는 중간값의 절단을 포함하는 J비트 값으로 설정하도록 구성된 데이터 처리장치.
  13. 제 12항에 있어서,
    복소수 승산 명령의 상기 성분 크기 보존 변종에 응답하여, 상기 명령 디코더는 상기 제어회로를 제어하여, 상기 중간값의 J비트들을 선택하는 과정과, 선택된 J비트 이외의 상기 중간값의 적어도 한 개의 하위 비트에 따라 상기 선택된 J비트들을 라운딩하는 과정을 포함하는 절단을 행하도록 구성된 데이터 처리장치.
  14. 제 12항 또는 제 13항에 있어서,
    상기 중간값은 2J+1비트를 포함하고, 상기 절단은 (2J+1)비트 값 중에서 최상위 J비트를 선택하는 것을 포함하는 데이터 처리장치.
  15. 제 12항 또는 제 13항에 있어서,
    상기 중간값은 2J+1비트[2J:0]를 포함하고, 상기 절단은 (2J+1)비트 값 중에서 비트 [2J-1:J]를 선택하는 것을 포함하는 데이터 처리장치.
  16. 제 1항 내지 제 15항 중 어느 한 항에 있어서,
    복소수 승산 명령의 정수 또는 고정 소수점 변종에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 부분 복소수 승산 연산을 행함으로써, 정수 또는 고정 소수점 연산을 사용하여 상기 적어도 한 개의 대상 성분을 생성하도록 구성된 데이터 처리장치.
  17. 제 1항 내지 제 9항과 제 11항 중 어느 한 항에 있어서,
    복소수 승산 명령의 부동소수점 변종에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여, 부분 승산 연산을 행함으로써, 부동소수점 연산을 사용하여 상기 적어도 한 개의 대상 성분을 생성하도록 구성된 데이터 처리장치.
  18. 제 1항 내지 제 17항 중 어느 한 항에 있어서,
    벡터 명령에 응답하여, 상기 처리회로는, 벡터 값의 일부에 대응하는 처리를 각각 포함하는 복수 비트(beat)의 처리를 행하도록 구성되고,
    상기 처리회로는 제 1 서브셋의 비트들의 제 2 벡터 명령들이 제 2 서브셋의 비트들의 제 1 벡터 명령과 병렬로 행해지는 제 1 및 제 2 벡터 명령들의 중첩된 실행을 지원하도록 구성된 데이터 처리장치.
  19. 데이터 처리를 행하는 수단과,
    명령을 디코드하여 상기 데이터 처리를 행하는 수단이 데이터 처리를 행하도록 제어하는 명령 디코딩 수단을 구비하고,
    상기 디코딩 수단은 복소수 승산 명령을 디코드하여, 상기 데이터 처리를 행하는 수단을 제어하여 제 1 및 제 2 피연산자 벡터들에 대해 부분 복소수 승산 연산을 행함으로써 제 1 곱 및 제 2 곱의 가산 또는 감산 결과에 따른 값으로 목적지 벡터의 적어도 한 개의 대상 성분을 설정하고, 상기 제 1 및 제 2 피연산자 벡터들과 상기 목적지 벡터 각각은 복소수의 실수부를 표현하기 위한 적어도 한 개의 실수 성분 및 복소수의 허수부를 표현하기 위한 적어도 한 개의 허수 성분을 포함하는 복수의 데이터 성분을 포함하고,
    제 1 형태의 복소수 승산 명령에 응답하여, 상기 디코딩 수단은 상기 데이터 처리를 행하는 수단을 제어하여, 상기 제 1 피연산자 벡터의 실수 성분 및 상기 제 2 피연산자 벡터의 대응하는 실수 성분의 곱을 포함하는 제 1 곱과, 상기 제 1 피연산자 벡터의 허수 성분 및 상기 제 2 피연산자 벡터의 대응하는 허수 성분의 곱을 포함하는 제 2 곱을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
    제 2 형태의 복소수 승산 명령에 응답하여, 상기 디코딩 수단은 상기 데이터 처리를 행하는 수단을 제어하여, 상기 제 1 피연산자 벡터의 실수 성분 및 상기 제 2 피연산자 벡터의 허수 성분의 곱을 포함하는 제 1 곱과, 상기 제 1 피연산자 벡터의 허수 성분 및 상기 제 2 피연산자 벡터의 실수 성분의 곱을 포함하는 제 2 곱을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
    상기 제 1 및 제 2 형태의 복소수 승산 명령 중 한 개에 응답하여, 상기 디코딩 수단은 상기 데이터 처리를 행하는 수단을 제어하여, 상기 목적지 벡터의 적어도 한 개의 실수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
    상기 제 1 및 제 2 형태의 복소수 승산 명령 중 나머지 한 개에 응답하여, 상기 디코딩 수단은 상기 데이터 처리를 행하는 수단을 제어하여, 상기 목적지 벡터의 적어도 한 개의 허수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하도록 구성되고,
    상기 제 1 및 제 2 형태의 복소수 승산 명령 중에서 적어도 한 개에 응답하여, 상기 디코딩 수단은 상기 데이터 처리를 행하는 수단을 제어하여, 상기 적어도 한 개의 대상 성분 이외의 상기 목적지 벡터의 적어도 한 개의 성분의 갱신을 금지하도록 구성된 데이터 처리장치,
  20. 복소수 승산 명령을 디코드하여, 상기 처리회로를 제어하여 제 1 및 제 2 피연산자 벡터들에 대해 부분 복소수 승산 연산을 행함으로써 제 1 곱 및 제 2 곱의 가산 또는 감산 결과에 따른 값으로 목적지 벡터의 적어도 한 개의 대상 성분을 설정하는 단계를 포함하고, 상기 제 1 및 제 2 피연산자 벡터들과 상기 목적지 벡터 각각은 복소수의 실수부를 표현하기 위한 적어도 한 개의 실수 성분 및 복소수의 허수부를 표현하기 위한 적어도 한 개의 허수 성분을 포함하는 복수의 데이터 성분을 포함하고,
    제 1 형태의 복소수 승산 명령에 응답하여, 상기 제 1 피연산자 벡터의 실수 성분 및 상기 제 2 피연산자 벡터의 대응하는 실수 성분의 곱을 포함하는 제 1 곱과, 상기 제 1 피연산자 벡터의 허수 성분 및 상기 제 2 피연산자 벡터의 대응하는 허수 성분의 곱을 포함하는 제 2 곱을 사용하여 상기 부분 복소수 승산 연산을 행하고,
    제 2 형태의 복소수 승산 명령에 응답하여, 상기 제 1 피연산자 벡터의 실수 성분 및 상기 제 2 피연산자 벡터의 허수 성분의 곱을 포함하는 제 1 곱과, 상기 제 1 피연산자 벡터의 허수 성분 및 상기 제 2 피연산자 벡터의 실수 성분의 곱을 포함하는 제 2 곱을 사용하여 상기 부분 복소수 승산 연산을 행하고,
    상기 제 1 및 제 2 형태의 복소수 승산 명령 중 한 개에 응답하여, 상기 목적지 벡터의 적어도 한 개의 실수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하고,
    상기 제 1 및 제 2 형태의 복소수 승산 명령 중 나머지 한 개에 응답하여, 상기 목적지 벡터의 적어도 한 개의 허수 성분을 포함하는 상기 적어도 한 개의 대상 성분을 사용하여 상기 부분 복소수 승산 연산을 행하고,
    상기 제 1 및 제 2 형태의 복소수 승산 명령 중에서 적어도 한 개에 응답하여, 상기 적어도 한 개의 대상 성분 이외의 상기 목적지 벡터의 적어도 한 개의 성분의 갱신을 금지하는 데이터 처리방법.
  21. 호스트 데이터 처리장치를 제어하여 청구항 1 내지 18 중 어느 한 항에 기재된 장치에 대응하는 명령 실행 환경을 제공하는 프로그램 명령들을 포함하는 가상머신 컴퓨터 프로그램.
  22. 청구항 21에 기재된 가상머신 프로그램 명령을 기억하는 컴퓨터 판독가능한 기억매체.
KR1020187030693A 2016-04-01 2017-02-22 복소수 승산 명령 KR20180132085A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1605557.6A GB2548908B (en) 2016-04-01 2016-04-01 Complex multiply instruction
GB1605557.6 2016-04-01
PCT/GB2017/050443 WO2017168118A1 (en) 2016-04-01 2017-02-22 Complex multiply instruction

Publications (1)

Publication Number Publication Date
KR20180132085A true KR20180132085A (ko) 2018-12-11

Family

ID=58108685

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187030693A KR20180132085A (ko) 2016-04-01 2017-02-22 복소수 승산 명령

Country Status (9)

Country Link
US (1) US10628155B2 (ko)
EP (1) EP3436928B1 (ko)
JP (1) JP2019511056A (ko)
KR (1) KR20180132085A (ko)
CN (1) CN108885550B (ko)
GB (1) GB2548908B (ko)
IL (1) IL261429B (ko)
TW (1) TWI728068B (ko)
WO (1) WO2017168118A1 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2564696B (en) * 2017-07-20 2020-02-05 Advanced Risc Mach Ltd Register-based complex number processing
CN107894966A (zh) * 2017-12-11 2018-04-10 上海齐网网络科技有限公司 一种基于流水线的块浮点模式下的fft处理器引擎原型
EP3499362B1 (en) * 2017-12-13 2022-11-30 ARM Limited Vector add-with-carry instruction
US10732929B2 (en) * 2018-01-09 2020-08-04 Samsung Electronics Co., Ltd. Computing accelerator using a lookup table
JP7159696B2 (ja) * 2018-08-28 2022-10-25 富士通株式会社 情報処理装置,並列計算機システムおよび制御方法
US11789734B2 (en) * 2018-08-30 2023-10-17 Advanced Micro Devices, Inc. Padded vectorization with compile time known masks
JPWO2020066375A1 (ja) * 2018-09-25 2021-08-30 日本電気株式会社 情報処理装置、情報処理方法、プログラム
US11823052B2 (en) * 2019-10-11 2023-11-21 Qualcomm Incorporated Configurable MAC for neural network applications
CN117093268B (zh) * 2023-10-19 2024-01-30 超睿科技(长沙)有限公司 一种向量处理方法、系统、设备及存储介质

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05233682A (ja) * 1992-02-21 1993-09-10 Matsushita Electric Ind Co Ltd ディジタル信号処理装置
EP1102163A3 (en) * 1999-11-15 2005-06-29 Texas Instruments Incorporated Microprocessor with improved instruction set architecture
US7072929B2 (en) 2000-11-01 2006-07-04 Pts Corporation Methods and apparatus for efficient complex long multiplication and covariance matrix implementation
US20040073773A1 (en) * 2002-02-06 2004-04-15 Victor Demjanenko Vector processor architecture and methods performed therein
US6801459B2 (en) * 2002-03-22 2004-10-05 Intel Corporation Obtaining data mask mapping information
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
US7689641B2 (en) * 2003-06-30 2010-03-30 Intel Corporation SIMD integer multiply high with round and shift
US9465611B2 (en) * 2003-10-02 2016-10-11 Broadcom Corporation Processor execution unit with configurable SIMD functional blocks for complex number operations
US7793072B2 (en) * 2003-10-31 2010-09-07 International Business Machines Corporation Vector execution unit to process a vector instruction by executing a first operation on a first set of operands and a second operation on a second set of operands
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
AU2005269896A1 (en) * 2004-07-08 2006-02-09 Asocs Ltd. A method of and apparatus for implementing fast orthogonal transforms of variable size
US8423979B2 (en) * 2006-10-12 2013-04-16 International Business Machines Corporation Code generation for complex arithmetic reduction for architectures lacking cross data-path support
JP2009048532A (ja) * 2007-08-22 2009-03-05 Nec Electronics Corp マイクロプロセッサ
JP2009075676A (ja) * 2007-09-18 2009-04-09 Nec Electronics Corp マイクロプロセッサ
GB2464292A (en) * 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US8650240B2 (en) * 2009-08-17 2014-02-11 International Business Machines Corporation Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture
GB2474901B (en) * 2009-10-30 2015-01-07 Advanced Risc Mach Ltd Apparatus and method for performing multiply-accumulate operations
US20120166511A1 (en) * 2010-12-22 2012-06-28 Hiremath Chetan D System, apparatus, and method for improved efficiency of execution in signal processing algorithms
KR20120077164A (ko) * 2010-12-30 2012-07-10 삼성전자주식회사 Simd 구조를 사용하는 복소수 연산을 위한 사용하는 장치 및 방법
US9235414B2 (en) * 2011-12-19 2016-01-12 Intel Corporation SIMD integer multiply-accumulate instruction for multi-precision arithmetic
EP2851786A1 (en) 2013-09-23 2015-03-25 Telefonaktiebolaget L M Ericsson (publ) Instruction class for digital signal processors
JP2015219823A (ja) * 2014-05-20 2015-12-07 富士通株式会社 プロセッサ
US9785565B2 (en) * 2014-06-30 2017-10-10 Microunity Systems Engineering, Inc. System and methods for expandably wide processor instructions

Also Published As

Publication number Publication date
CN108885550B (zh) 2023-03-03
IL261429B (en) 2020-10-29
GB2548908A (en) 2017-10-04
EP3436928B1 (en) 2020-05-27
IL261429A (en) 2018-10-31
TWI728068B (zh) 2021-05-21
WO2017168118A1 (en) 2017-10-05
EP3436928A1 (en) 2019-02-06
US10628155B2 (en) 2020-04-21
TW201737075A (zh) 2017-10-16
US20190310847A1 (en) 2019-10-10
JP2019511056A (ja) 2019-04-18
GB2548908B (en) 2019-01-30
CN108885550A (zh) 2018-11-23

Similar Documents

Publication Publication Date Title
KR20180132085A (ko) 복소수 승산 명령
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
KR100498482B1 (ko) 명령어수에 수행 주기 회수를 가중치로 사용하여 쓰레드를페치하는 동시 다중 쓰레딩 프로세서 및 그 방법
CN111381880A (zh) 加载-存储指令
US20170277537A1 (en) Processing mixed-scalar-vector instructions
CN111381939A (zh) 多线程处理器中的寄存器文件
KR20180067582A (ko) 벡터 로드 명령어
US11106465B2 (en) Vector add-with-carry instruction
TWI770079B (zh) 向量產生指令
TWI756212B (zh) 處理向量指令
CIOBANU Customizing Vector Instruction Set Architectures
Valentine et al. SIMD Extensions for the SMIPS core (Group 4)