KR19990044304A - 압축 데이터 연산용 명령 세트 - Google Patents

압축 데이터 연산용 명령 세트 Download PDF

Info

Publication number
KR19990044304A
KR19990044304A KR1019980701541A KR19980701541A KR19990044304A KR 19990044304 A KR19990044304 A KR 19990044304A KR 1019980701541 A KR1019980701541 A KR 1019980701541A KR 19980701541 A KR19980701541 A KR 19980701541A KR 19990044304 A KR19990044304 A KR 19990044304A
Authority
KR
South Korea
Prior art keywords
data
data element
compression
bit
compressed
Prior art date
Application number
KR1019980701541A
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 KR19990044304A publication Critical patent/KR19990044304A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical 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/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/147Discrete orthonormal transforms, e.g. discrete cosine transform, discrete sine transform, and variations therefrom, e.g. modified discrete cosine transform, integer transforms approximating the discrete cosine transform
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/607Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers number-of-ones counters, i.e. devices for counting the number of input lines set to ONE among a plurality of input lines, also called bit counters or parallel counters
    • 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
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • 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/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/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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3812Devices capable of handling different types of numbers
    • G06F2207/382Reconfigurable for different fixed word lengths
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3828Multigauge devices, i.e. capable of handling packed numbers without unpacking them
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49921Saturation, i.e. clipping the result to a minimum or maximum value
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49994Sign extension

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Discrete Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Containers And Plastic Fillers For Packaging (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Document Processing Apparatus (AREA)
  • Advance Control (AREA)

Abstract

일반적인 멀티미디어 응용상에 요구되는 압축 데이터에서 연산을 지원하는 명령 세트를 프로세서내에 포함하는 장치에 관한 것이다. 일 실시예에서, 본 발명은 저장 영역(150), 디코더(165), 및 다수의 회로(130)를 구비한 프로세서를 포함한다. 다수의 회로들은 다수의 명령을 수행하여 압축 데이터를 조종한다. 이러한 실시예에서, 이러한 명령은 압축, 압축 해제, 압축 승산, 압축 가산, 압축 감산, 압축 비교, 및 압축 시프트를 포함한다.

Description

압축 데이터 연산용 명령 세트
전형적인 컴퓨터 시스템에 있어서, 프로세서는 하나의 결과를 만드는 명령을 사용하는 다수의 비트(예, 64)로 표현된 값에 연산하도록 이행되어 있다. 예를들어, 가산명령의 실행부는 제1의 64비트값과 제2의 64비트값을 함께 더할 것이고 그 결과를 제3의 64비트값으로서 기억할 것이다. 그러나, 멀티미디어 응용예(예, 컴퓨터 지원협력(CSC--혼합된 미디어 데이터 조작으로 원격화상회의를 하는 집합체), 2D/3D 그래픽, 영상처리, 비디오 압축/압축해제, 인식 알고리즘과 오디오 조작에 목적을 둔 응용예)는 소수의 비트로 표현될 수 있는 다량의 데이터의 조작을 필요로 한다. 예를들어, 그래픽 데이터는 전형적으로 8 또는 16비트를 필요로 하고 사운드 데이터는 전형적으로 8 또는 16비트를 필요로 한다. 이들 멀티미디어 응용예의 각각은 하나 또는 다수의 알고리즘을 필요로 하고, 각각은 다수의 연산을 필요로 한다. 예를들어, 하나의 알고리즘은 가산, 비교 그리고 시프트 연산을 필요로 한다.
멀티미디어 응용예(동일 특성을 가진 다른 응용예까지 포함)의 효율성을 향상시키기 위해서, 종래의 프로세서는 압축 데이터 포맷을 제공한다. 압축 데이터 포맷은 단일값을 표현하는데 전형적으로 사용된 비트가 다수의 고정된 사이즈의 데이터 요소로 나누어지는 것중 하나이고, 각각은 분할값을 나타낸다. 예를들어, 64비트 레지스터는 두 개의 32비트 요소로 나뉘어지고, 각각은 분리 32비트값을 나타낸다. 추가로, 이 종래의 프로세서는 압축 데이터 유형내의 각각의 요소를 병렬로 분리하게 조작하는 명령어를 제공한다. 예를들어, 압축 가산 명령은 제1의 압축 데이터와 제2의 압축 데이터로부터 관련 데이터 요소를 함께 더한다. 그러므로, 멀티미디어 알고리즘이 다수의 데이터 요소상에서 수행되어야 하는 5개의 연산부를 포함한 루프를 필요로 한다면, 데이터를 압축하고 압축 데이터 명령을 사용하여 병렬로 이들 연산을 수행하는 것이 바람직하다. 이런 방식으로, 프로세서는 멀티미디어 응용부를 더 효율적으로 처리할 수 있다.
그러나, 연산루프가 압축 데이터상에서 프로세서에 의해 수행될 수 없는 연산을 포함하고 있다면(즉, 프로세서는 적절한 명령이 부족하다), 그 데이터는 그 연산을 수행하도록 압축해제되어야 할 것이다. 예를들어, 가산연산을 필요로 하는 멀티미디어 알고리즘과 상기된 압축 가산명령이 이용불가능하다면, 프로그램머는 양 제1의 압축 데이터와 제2의 압축 데이터를 압축해제해야 하고(즉, 양 제1의 압축데이터와 제2압축 데이터로 구성된 요소를 분리), 분리요소를 개별적으로 함께 더하고, 그러면 추가 압축진행을 위해 그 결과를 압축된 결과로 압축한다. 이러한 압축과 압축해제을 수행하는데 필요한 진행시간은 압축 데이터 포맷이 제공되는 수행 잇점을 종종 부정한다. 그러므로, 전형적인 멀티미디어 알고리즘에 모든 필요한 연산을 제공하는 한 세트의 압축 데이터 명령을 보통의 프로세서에서 구현하는 것이 바람직하다. 그러나, 오늘날의 마이크로프로세서의 제한된 다이 면적으로 인하여, 추가될 수 있는 명령의 수는 제한되어 있다.
압축 데이터 명령를 포함한 보통의 프로세서는 캘리포니아 산타클라라의 인텔 코퍼레이션에 의해 제조된 i860XPTM프로세서이다. i860XP 프로세서는 상이한 요소사이즈를 가진 일부 압축 데이터 유형을 포함하고 있다. 추가로, i860XP 프로세서는 압축 가산 명령과 압축 비교 명령을 포함하고 있다. 그러나, 압축 가산 명령은 캐리 체인부를 파괴하지 않으며, 프로그램머는 소프트웨어에 의해 수행된 연산이 넘침을 유발하지 않게 하여야 한다. 즉, 연산이 압축 데이터내의 하나의 요소로부터의 비트가 압축 데이터의 다음 요소로의 넘침을 야기하지 않게 하여야 한다. 예를들어, 1의 값이 "11111111"를 기억하는 8비트의 압축 데이터에 더해진다면, 넘침이 일어나고, 결과는 "100000000"이다. 추가로, i860XP 프로세서에 의해 지원된 압축 데이터 유형내의 소숫점의 위치는 고정된다(즉, i860XP 프로세서지원 8.8, 6.10, 8.24 숫자, 여기서 i.j 숫자는 소숫점 다음의 i 유효비트와 j 비트를 포함한다). 그러므로, 프로그램머는 표현될 수 있는 값에 대하여 제한되어 있다. i860XP 프로세서는 단지 두 개의 명령을 지원하기 때문에, 압축 데이터를 사용하여 멀티미디어 알고리즘에 필요한 다수의 연산을 수행할 수 없다.
압축 데이터를 지원하는 다른 보통의 프로세서는 모토롤라 인코퍼레이티드에 의해 제조된 MC88110TM프로세서이다. 이 MC88110 프로세서는 상이한 사이즈 요소를 가진 일부 상이한 압축 데이터 포맷을 지원한다. 추가로, MC88110 프로세서에 의해 지원된 압축 명령의 세트는 압축, 압축해제, 압축가산, 압축감산, 압축승산, 압축비교, 및 압축회전을 포함하고 있다.
MC88110 프로세서 압축 명령은 폭 r의 필드를 발생시키는 제1레지스터 페어내의 요소의 각각의 (t*r)/64(여기서, t는 압축 데이터의 요소내의 비트수이다) 유효비트를 연결시킴으로써 연산한다. 이 필드는 제2레지스터 페어에 기억된 압축 데이터의 유효비트를 대체한다. 그러면, 이 압축 데이터는 제3레지스터 페어에 기억되고, r비트에 의해 좌측으로 회전된다. 이 명령의 연산예 뿐만 아니라, t & r에 대한 지원값의 표는 아래의 표 1과 표 2에 도시되어 있다.
압축 명령의 이러한 이행은 두가지 잇점을 가지고 있다. 첫 번째는 명령의 말단에서 회전을 수행하는데 추가논리가 필요하다는 것이다. 두 번째는 압축 데이터 결과를 발생시키는데 필요한 명령의 수이다. 예를들어, 제3레지스터(위에 도시)의 결과를 발생시키기 위해 4개의 32비트값을 사용하려면, t=32와 r=32를 가진 2명령은 아래에 도시된 바와 같이 표 3에 필요하다.
MC88110 프로세서 압축해제 명령은 압축 데이터에서의 4, 8 또는 16비트 데이터 요소를 제로채움과 크기(8, 16 또는 16비트)의 2배인 데이터 요소의 하위 절반에 놓음으로써 연산한다. 즉, 결과적인 데이터 요소에서의 더 높은 순서 비트는 제로에 설정되어 있다. 이 압축해제 명령의 연산의 예는 아래의 표 4에 도시되어 있다.
MC88110 프로세서 압축 승산 명령은 아래의 표 5에 도시된 바와 같이, 단일값으로 표현된 압축 데이터인 것처럼 64비트 압축 데이터의 각각의 요소를 32비트값에 곱한다.
이 승산 명령은 두 개의 드로우 백(draw back)을 가지고 있다. 첫 번째, 이 승산 명령은 캐리어 체인부를 파괴하지 않고, 프로그램머는 압축 데이터상에서 수행된 연산은 넘침을 야기하지 않아야 한다. 결과적으로, 프로그램머는 이러한 넘침을 방지하기 위해 추가 명령을 포함시키는데 필요하다. 두 번째, 이러한 승산 명령은 압축 데이터내의 각각의 요소를 단일값(즉, 32비트값)에 곱한다. 결과적으로, 사용자는 압축 데이터내의 어떤 요소가 32비트값에 의해 곱해지는지를 선택할 수 있는 융통성을 가지고 있지 않다. 그러므로, 이 프로그램머는 데이터내의 요소 모두 보다 적은 요소에서의 승산이 필요할때마다, 동일 승산이 압축 데이터내의 모든 요소에 필요하도록 데이터를 준비하거나 데이터를 압축해제하는 처리시간을 버려야 한다. 그러므로, 프로그램머는 병렬로 배수의 승산기를 사용하여 배수의 승산을 수행할 수 없다. 예를들어, 각각이 하나의 워드길이를 가진 데이터의 8개의 상이한 부분을 함께 곱하려면, 4개의 분리 승산연산이 필요하다. 각각의 연산은 동시에 두개의 워드를 곱하고, 데이터라인을 효과적으로 소모하고 회로소자는 16비트보다 더 높은 비트에 사용된다.
MC88110 프로세서 압축 비교 명령은 제1압축 데이터와 제2압축 데이터로부터 관련 32비트 데이터 요소를 비교한다. 두가지 비교의 각각은 보다 작은(<) 또는 크거나 같은(≥)을 리턴할 수 있고, 4개의 인에이블 조합을 야기한다. 이 명령은 8비트 결과 스트링을 리턴한다; 4비트는 4개의 인에이블한 조건중 어느 것이 충족되는지를 지시하고, 4비트는 이 비트의 완성도를 지시한다. 이 명령의 결과상의 조건 브렌치(branch)는 두가지 방법: 1) 조건 브렌치의 시퀀스로; 또는 2) 점프 테이블로 이행될 수 있다. 이 명령이 가진 문제는 Y > A라면, X=X+B 그밖에 X=X인 것과 같은 함수를 수행하는 데이터를 근거로 한 조건 브렌치를 필요로 한다는 것이다. 이 함수의 유사부호 번역 표현식은:
이 될 것이다. 새로운 마이크로프로세서는 브렌치가 진행하는 곳을 불확실하게 예측함으로써 실행속도를 높이려고 한다. 예측이 옳다면, 성능은 없어지지 않고 성능에 포텐셜을 얻는다. 그러나, 예측이 틀리다면, 성능은 없어진다. 그러므로, 잘 예측하는 인센티브가 중요하다. 그러나, 데이터(상기된 데이터와 같은)를 근거로 한 브렌치는 예측 알고리즘을 파괴하는 비예측 방식으로 작용하고 더 잘못된 예측을 야기한다. 결과적으로 데이터를 근거로 한 조건 브렌치를 설정하는 비교 명령의 사용은 고비용의 성능을 가져온다.
MC88110 프로세서 회전 명령은 0비트와 60비트 사이의 임의의 4계수 경계부에서 64비트값을 회전시킨다(표 6을 참조).
회전명령은 레지스터로부터 이동되는 상위 비트가 레지스터의 하위 비트로 시프트되게 하므로, MC88110 프로세서 압축 데이터내의 각각의 요소를 개별적으로 시프트되게 지원하지 않는다. 결과적으로, 압축 데이터 유형내의 각각의 요소를 개별적으로 시프트시키는 것을 필요로 하는 프로그래밍 알고리즘은: 1) 데이터를 압축해제하는 것, 2) 개별적으로 각각의 요소에 시프트를 수행하는 것, 및 3) 추가 압축 데이터 처리를 위해 결과 압축 데이터로 그 결과를 압축하는 것을 필요로 한다.
특히, 본 발명은 컴퓨터 시스템 분야에 관한 것이다. 더 상세하게는 압축 데이터 연산 영역에 관한 것이다.
본 발명은 도면에서 제한되기 보다는 예시적으로 설명되어 있다. 동일 부호는 유사요소를 지시한다.
도 1은 본 발명의 일실시예에 따른 예시적인 컴퓨터 시스템.
도 2는 본 발명의 일실시예에 따른 프로세서의 레지스터 파일.
도 3은 본 발명의 일실시예에 따른 데이터를 조작하는 프로세서에 사용되는 일반적인 단계를 설명하는 흐름도.
도 4는 본 발명의 일실시예에 따른 압축 데이터 유형.
도 5a는 본 발명의 일실시예에 따른 레지스터내의 압축 데이터 표현.
도 5b는 본 발명의 일실시예에 따른 레지스터내의 압축 데이터 표현.
도 5c는 본 발명의 일실시예에 따른 레지스터내의 압축 데이터 표현.
도 6a는 본 발명의 일실시예에 따라 압축 데이터의 사용을 지시하는 제어 신호 포맷.
도 6b는 본 발명의 일실시예에 따라 압축 데이터의 사용을 지시하는 제2제어 신호 포맷.
압축 가산/감산
도 7a는 본 발명의 일실시예에 따라 압축 가산을 수행하는 방법.
도 7b는 본 발명의 일실시예에 따라 압축 감산을 수행하는 방법.
도 8은 본 발명의 일실시예에 따라 압축 데이터의 개별 비트상에서 압축 가산과 압축 감산을 수행하는 회로.
도 9는 본 발명의 일실시예에 따라 압축 바이트 데이터상에서 압축 가산과 압축 감산을 수행하는 회로.
도 10은 본 발명의 일실시예에 따라 압축 워드 데이터 상에서 압축 가산과 압축 감산을 수행하는 회로의 논리도.
도 11은 본 발명의 일실시예에 따라 압축 2배 워드 데이터상에서 압축 가산과 압축 감산을 수행하는 회로의 논리도.
압축 승산
도 12는 본 발명의 일실시예에 따라 압축 데이터 상에서 압축 승산 연산을 수행하는 방법을 설명하는 흐름도.
도 13은 본 발명의 일실시예에 따라 압축 승산을 수행하는 회로.
승산-가산/감산
도 14는 본 발명의 일실시예에 따라 승산-가산과 승산-감산 연산을 수행하는 방법을 설명하는 흐름도.
도 15는 본 발명의 일실시예에 따라 압축 데이터 상에서 승산-가산 및/또는 승산-감산 연산을 수행하는 회로.
압축 시프트
도 16은 본 발명의 일실시예에 따라 압축 데이터 상에서 압축 시프트 연산을 수행하는 방법을 설명하는 흐름도.
도 17은 본 발명의 일실시예에 따라 압축 데이터의 개별 바이트상에서 압축 시프트를 수행하는 회로.
압축
도 18은 본 발명의 일실시예에 따라 압축 데이터 상에서 압축 연산을 수행하는 방법을 설명하는 흐름도.
도 19a는 본 발명의 일실시예에 따라 압축 바이트 데이터 상에서 압축 연산을 수행하는 회로.
도 19b는 본 발명의 일실시예에 따라 압축 워드 데이터 상에서 압축 연산을 수행하는 회로.
압축해제
도 20은 본 발명의 일실시예에 따라 압축 데이터 상에서 압축 해제 연산을 수행하는 방법을 설명하는 흐름도.
도 21은 본 발명의 일실시예에 따라 압축 데이터 상에서 압축 해제 연산을 수행하는 회로.
개체 카운트
도 22는 본 발명의 일실시예에 따라 압축 데이터 상에서 개체 카운트를 수행하는 방법을 설명하는 흐름도.
도 23은 본 발명의 일실시예에 따라 압축 데이터 요소상에서 개체 카운트를 수행하고 결과적인 압축 데이터에 대하여 단일 결과적인 데이터 요소를 산출시키는 방법을 설명하는 흐름도.
도 24는 본 발명의 일실시예에 따라 4개의 워드 데이터 요소를 가진 압축 데이터 상에서 개체 카운트 연산을 수행하는 회로.
도 25는 본 발명의 제1실시에에 따라 압축 데이터의 하나의 워드 데이터 요소상에서 개체 카운트 연산을 수행하는 상세회로.
압축 논리 연산
도 26은 본 발명의 일실시예에 따라 압축 데이터 상에서 다수의 논리 연산을 수행하는 방법을 설명하는 흐름도.
도 27은 본 발명의 일실시예에 따라 압축 데이터 상에서 논리 연산을 수행하는 회로.
압축 비교
도 28은 본 발명의 일실시예에 따라 압축 데이터 상에서 압축 비교 연산을 수행하는 방법을 설명하는 흐름도.
도 29는 본 발명의 일실시예에 따라 압축 데이터의 개별 바이트상에서 압축 비교 연산을 수행하는 회로.
전형적인 멀티미디어 응용예에 필요한 연산을 지원하는 한 세트의 압축 데이터 명령을 프로세서에 포함시키는 장치와 방법이 설명되어 있다. 기억영역은 압축 데이터를 조작하는 프로세서에 의한 실행을 위해 다수의 명령을 포함하고 있다. 이 실시예에서, 이 명령은 압축, 압축해제, 압축 가산, 압축 감산, 압축 승산, 압축 시프트, 및 압축 비교를 포함하고 있다.
프로세서는 압축 명령 수신에 응답하여 제3압축 데이터를 형성하기 위해 적어도 두 개의 압축 데이터로 데이터 요소에서의 비트부분을 압축한다. 대조적으로, 프로세서는 압축해제 명령 수신에 응답하여 제1압축 데이터 피연산자로부터의 적어도 하나의 데이터 요소와 제2압축 데이터 피연산자로부터의 적어도 하나의 관련 데이터 요소를 포함하고 있는 제4압축 데이터를 산출한다.
프로세서는 관련 데이터 요소를 압축 가산 명령 수신에 응답하여 적어도 두 개의 압축 데이터로부터 병렬로 함께 분리하여 더한다. 대조적으로, 관련 데이터 요소를 압축 감산 명령 수신에 응답하여 적어도 두 개의 압축 데이터로부터 병렬로 감산한다.
프로세서는 관련 데이터 요소를 압축 승산 명령 수신에 응답하여 적어도 두 개의 압축 데이터로부터 병렬로 함께 분리 승산한다.
프로세서는 압축 데이터 피연산자내의 데이터 요소의 각각을 압축 시프트 명령 수신에 응답하여 지시 카운트에 의해 병렬로 시프트한다.
프로세서는 지시된 관계에 따라서 관련 데이터 요소를 적어도 두 개의 압축 데이터로부터 병렬로 분리 비교하고 압축 비교 명령 수신에 응답하여 제1레지스터내의 압축 마스크를 결과로서 기억한다. 제1마스크 요소내의 각각의 비트는 제1세트의 관련 데이터 요소를 비교하는 것의 결과를 지시하는 반면에, 제2마스크 요소내의 각각의 비트는 제2세트의 데이터 요소를 비교하는 것의 결과를 지시한다.
이 출원서는 전형적인 멀티미디어 응용예에 필요한 압축 데이터 상에서 연산을 지원하는 한세트의 명령을 프로세서내에서 포함시키는 장치와 방법을 설명하고 있다. 다음 명세서에서, 본 발명의 충분한 이해를 위해 특정 세목이 설명되어 있다. 그러나, 본 발명은 이 특정 세목없이도 실행될 수 있다는 것을 알 수 있다. 다른 예에서, 공지된 회로, 구조와 기술은 본 발명이 불필요하게 애매하지 않도록 상세히 도시되어 있지 않다.
정의
본 발명의 실시예의 명세서를 이해할 수 있는 기초를 제공하기 위해서, 다음 정의가 제공된다.
비트 X에서 비트 Y까지:
이진수의 서브필드를 정의. 예를들어, 바이트(001110102)의 비트 6에서 비트 0까지 (2를 기준으로 도시)는 서브필드(1110102)를 나타낸다. '2'다음 이진수는 기준 2를 지시한다. 그러므로, 10002는 810과 같고, F16은 1510과 같다.
Rx: 레지스터. 레지스터 데이터를 기억하고 제공할 수 있는 임의의 장치이다. 레지스터의 추가 기능은 아래에 설명되어 있다. 레지스터는 프로세서 패키지의 부분은 결코 아니다.
SRC1, SRC2, 및 DEST:
기억영역(예, 메모리 어드레스, 레지스터, 등)을 확인.
소스1-i 및 결과1-i:
데이터를 표현.
컴퓨터 시스템
도 1은 본 발명의 일실시예에 따라서 예시적인 컴퓨터 시스템(100)을 설명하고 있다. 컴퓨터 시스템(100)은 정보를 처리하는 버스(101)로 연결된 프로세서(109), 및 정보통신을 위한 버스(101), 또는 다른 통신 하드웨어와 소프트웨어를 포함하고 있다. 프로세서(109)는 CISC 또는 RISC 유형 구조를 포함하여, 임의 유형 구조의 중앙처리장치를 나타낸다. 컴퓨터 시스템(100)은 정보와 명령이 프로세서(109)에 의해 실행되게 기억하는 버스(101)에 연결되어, 임의 액세스 메모리(RAM) 또는 다른 동적 기억 장치(메인 메모리(104)로 명칭)를 추가로 포함하고 있다. 또한, 메인 메모리(104)는 프로세서(109)에 의한 명령 실행시 일시적인 가변 또는 다른 매개 정보를 기억하는데 사용될 수 있다. 또한, 컴퓨터 시스템(100)은 판독 전용 메모리(ROM)(106), 및/또는 다른 정적 기억 장치를 포함하고 있고, 프로세서(109)에 대하여 정적 정보와 명령을 기억하기 위해 버스(101)에 연결되어 있다. 데이터 기억 장치(107)는 정보와 명령을 기억하기 위해 버스(101)에 연결되어 있다.
도 1은 또한 프로세서(109)가 실행유니트(130), 레지스터파일(150), 캐시(160), 디코더(165), 및 내부 버스(170)를 포함하고 있다. 물론, 프로세서(109)는 본 발명을 애매하지 않게 하기 위해서 도시 생략된 추가 회로소자를 포함하고 있다.
실행 유니트(130)는 프로세서(109)에 의해 수신된 명령을 실행하는데 사용된다. 보통의 프로세서로 전형적으로 이행된 명령을 추가로 인식하려면, 실행유니트(130)는 압축 데이터 포맷상에서 연산을 수행하는 압축 명령 세트(140)내의 명령을 인식한다. 일실시예에서, 압축 명령 세트(140)는 아래에 설명된 방식으로 압축 연산, 압축 해제 연산, 압축 가산 연산, 압축 감산 연산, 압축 승산 연산, 압축 시프트 연산, 압축 비교 연산, 승산-가산 연산, 승산-감산 연산, 개체 카운트 연산 및 한 세트의 압축 논리 연산(압축 AND, 압축 ANDNOT, 압축 OR, 및 압축 XOR를 포함)을 지원하는 명령을 포함하고 있다. 압축명령세트(140)가 이 명령을 포함하고 있는 일실시예가 설명되어 있고, 대체 실시예가 부세트 또는 초과 세트의 명령을 포함할 수 있다.
이 명령을 포함함으로써, 멀티미디어 응용예에 사용된 알고리즘의 대다수에 필요한 연산을 압축 데이터를 사용하여 수행할 수 있다. 그러므로, 이 알고리즘은 데이터 요소상에서 하나 또는 다수의 연산을 동시에 수행하도록 압축 해제된 압축 데이터가 필요없이, 필요한 데이터를 압축하고 압축 데이터상에서 필요한 연산을 수행하도록 기록될 수 있다. 앞서 설명된 바와 같이, 이것은 특정 멀티미디어 알고리즘에 필요한 압축 데이터 연산을 지원하지 않는 종래의 보통 프로세서를 능가하는 성능의 잇점을 제공하고-- 즉, 멀티미디어 알고리즘이 압축 데이터 상에서 수행될 수 없는 연산을 필요로 한다면, 이 프로그램은 데이터를 압축해제해야 하고, 분할 요소상에서 연산을 개별적으로 수행하고, 추가 압축 처리를 위해 그 결과를 압축 결과로 압축한다. 더욱이, 이 명령의 일부가 수행되는 발표된 방식은 다수의 멀티미디어 응용예의 성능을 향상시킨다.
실행 유니트(130)는 내부 버스(170)에 의해 레지스터 파일(150)에 연결되어 있다. 레지스터 파일(150)은 데이터를 포함하여, 정보를 기억하는 프로세서(109)상의 기억 영역을 나타낸다. 본 발명의 일측면은 압축 데이터 상에서 연산하는 상기된 명령세트이다. 본 발명의 일측면에 따라서, 압축 데이터를 기억하는 데 사용된 기억 영역은 절대적이지 않다. 그러나, 레지스터 파일(150)의 일실시예는 도 2를 기준으로 나중에 설명된다. 실행 유니트(130)는 캐시(160)와 디코더(165)에 연결되어 있다. 캐시(160)는 예를들어, 메인 메모리(104)로부터 데이터 및/또는 제어 신호를 캐시하는데 사용된다. 디코더(165)는 프로세서(109)에 의해 수신된 명령을 제어신호 및/또는 마이크로코드 엔트리 포인트로 디코드하는데 사용된다. 이 제어신호 및/또는 마이크로코드 엔트리 포인트에 응답하여, 실행 유니트(130)는 적절한 연산을 수행한다. 예를들어, 가산 명령이 수신된다면, 디코더(165)는 실행 유니트(130)가 필요한 가산을 수행하게 된다; 감산 명령이 수신된다면, 디코더(165)는 실행유니트(130)가 필요한 감산을 수행하게 한다; 등등. 디코더(165)는 임의 수의 상이한 기계(예, 룩-업 테이블, 하드웨어 구현체, PLA등)를 사용하여 이행될 수 있다. 그러므로, 디코더와 실행 유니트에 의한 여러 명령의 실행은 일련의 if/then 명령문으로 나타나고, 명령의 실행은 if/then 명령문의 일괄 처리를 요구하지 않는 다는 것을 알 수 있다. 오히려, 이 if/then 처리를 논리적으로 수행하는 임의의 기계가 본 발명의 범위내에서 고려된다.
도 1은 자기 디스크 또는 광학 디스크와 같은 데이터 기억 장치(107) 및 관련 디스크 드라이브를 도시하고 있다. 컴퓨터 시스템(100)은 또한 사용자에게 정보를 디스플레이하는 디스플레이 장치(121)에 버스(101)를 매체로 하여 연결되어 있다. 디스플레이 장치(121)는 프레임 버퍼, 특정 그래픽 묘사 장치, 음극선관(CRT), 및/또는 평면 디스플레이를 포함할 수 있다. 문자 숫자와 다른 키를 포함한 문자 숫자식 입력 장치(122)는 정보와 명령 선택부를 프로세서(109)에서 통신하기 위해 버스(101)에 전형적으로 연결되어 있다. 다른 유형의 사용자 입력 장치는 마우스, 트랙볼, 펜, 터치 스크린, 또는 방향 정보와 명령 선택부를 프로세서(109)에서 통신하고 디스플레이 장치(121)상에서 커서 방향을 제어하는 커서 방향키와 같은 커서 제어기(123)이다. 이 입력 장치는 전형적으로 2개의 축, 제1축(예, x)과 제2축(예, y)에 2도의 자유도를 가지고 있고, 이것은 장치가 평면에서 위치를 확인하게 한다. 그러나, 본 발명은 단지 2도의 자유도를 가진 입력 장치로 제한되지 않을 수 있다.
버스(101)에 연결될 수 있는 다른 장치는 페이퍼, 필름 또는 유사 유형의 매체와 같은 매체상에서 명령, 데이터 또는 다른 정보를 프린트하는데 사용될 수 있는 하드 카피 장치(124)이다. 추가로, 컴퓨터 시스템(100)은 정보를 기록하는 마이크로폰에 연결된 오디오 디지털기와 같이, 사운드 기록을 위한 장치, 및/또는 플레이백(125)에 연결될 수 있다. 더욱이, 이 장치는 디지털 사운드를 연산시키는 디지털-아날로그(D/A)변환기에 연결되어 있는 스피커를 포함할 수 있다.
또한, 컴퓨터 시스템(100)은 컴퓨터 네트워크(예, LAN)에서 단말기가 될 수 있다. 그러면, 컴퓨터 시스템(100)은 컴퓨터 네트워크의 컴퓨터 서브시스템이 될 수 있다. 선택사양으로, 컴퓨터 시스템(100)은 비디오 디지털화 장치(126)를 포함하고 있다. 비디오 디지털화 장치(126)는 컴퓨터 네트워크를 타고 다른 것에 전송될 수 있는 비디오 이미지를 캡처하는데 사용될 수 있다.
일실시예에서, 추가로 프로세서(109)는 X86명령세트(캘리포니아, 산타클라라의 인텔 코퍼레이션에 의해 제조된 펜티엄R프로세서의 같은 현존 마이크로프로세서에 사용되는 명령세트)와 호환성이 있는 명령세트를 지원한다. 그러므로, 일실시예에서, 프로세서(109)는 캘리포니아, 산타클라라의 인텔코퍼레이션에 의해 정의된 바와 같이, IATM-인텔 구조에 지원되는 모든 연산을 지원한다(캘리포니아, 산타클라라의 인텔에서 이용가능한 마이크로프로세서, 인텔 데이터북 권1 및 권2, 1992, 1993를 참조). 결과적으로, 프로세서(109)는 본 발명의 연산에 추가로 현존 X86 연산을 지원할 수 있다. 본 발명은 X86 계열 명령 세트로 적용된 바와 같이 설명되어 있는 반면, 대체 실시예는 다른 명령세트로 본 발명을 적용시킬수 있다. 예를들어, 본 발명은 새로운 명령 세트를 사용하여 64비트 프로세서에 적용될 수 있다.
도 2는 본 발명의 일실시예에 따른 프로세서의 레지스터 파일을 설명하고 있다. 레지스터 파일(150)은 제어/상태 정보, 정수 데이터, 부동 소숫점 데이터 및 압축 데이터를 포함하는 정보를 기억하는데 사용될 수 있다. 도 2에 도시된 실시예에서, 레지스터 파일(150)은 정수 레지스터(201), 레지스터(209), 상태 레지스터(208), 및 명령 포인터 레지스터(211)를 포함하고 있다. 상태 레지스터(208)는 프로세서의 상태를 지시한다. 명령 포인터 레지스터(211)는 실행될 다음 명령의 어드레스를 기억한다. 정수 레지스터(201), 레지스터(209), 상태 레지스터(208), 및 명령 포인터 레지스터(211)는 모두 내부 버스(170)에 연결되어 있다. 임의의 추가 레지스터는 또한 내부 버스(170)에 연결될 수 있다.
일실시예에서, 레지스터(209)는 양 압축 데이터와 부동 소숫점 데이터에 사용된다. 이러한 실시예에서, 임의의 주어진 시간에, 프로세서(109)는 트랙 기준 부동 소숫점 레지스터나 비트랙 기준 압축 데이터 레지스터중 하나가 되게 레지스터(209)를 취급하여야 한다. 이 실시예에서, 기계는 프로세서(109)를 트랙기준 부동 소숫점 레지스터와 비트랙 기준 압축 데이터 레지스터로서 연산 온(on) 레지스터(209) 사이에서 스위치하는 것을 포함한다. 다른 이러한 실시예에서, 프로세서(109)는 비트랙 기준 부동 소숫점과 압축 데이터 레지스터로서 레지스터(209)를 동시에 온(on) 연산시킬 수 있다. 다른 예로서, 다른 실시예에서, 이 동일 레지스터는 정수 데이터를 기억하는데 사용될 수 있다.
물론, 대체 실시예는 많거나 적은 세트의 레지스터를 포함하도록 이행될 수 있다. 예를 들어, 대체 실시예는 부동 소숫점 데이터를 기억하는 분할 세트의 부동 소숫점 레지스터를 포함하고 있다. 다른 예로서, 대체 실시예는 각각이 제어/상태 정보를 기억한 제1세트의 레지스터, 및 각각이 정수, 부동 소숫점, 압축 데이터를 기억할 수 있는 제2세트의 레지스터를 포함할 수 있다. 투명도의 문제로서, 실시예의 레지스터는 특정 유형의 회로에서 한정하는 것에 제한되어 있을 수 없다. 오히려, 실시예의 레지스터는 데이터를 기억하고 제공할 수 있고, 여기서 설명된 기능을 수행하게 될 필요가 있다.
여러 세트의 레지스터(예, 정수 레지스터(201), 레지스터(209))는 상이한 수의 레지스터 및/또는 상이한 크기의 레지스터를 포함하도록 이행될 수 있다. 예를들어, 일실시예에서, 정수 레지스터(201)는 32비트를 기억하도록 이행되는 반면, 레지스터(209)는 8비트(모든 8비트는 부동 소숫점 데이터를 기억하는데 사용되는 반면, 64비트만이 압축 데이터에 사용된다)를 기억하도록 이행된다. 추가로, 레지스터(209)는 8개의 레지스터(R0(212a)에서 R7(212h)까지)를 포함하고 있다. R1(212a ), R2(212b), 및 R3(212c)는 레지스터(209)내의 개별 레지스터의 예이다. 레지스터(209)내의 32비트 레지스터는 정수 레지스터(201)내의 하나의 정수 레지스터로 이동될 수 있다. 유사하게, 정수 레지스터내의 값은 레지스터(209)내의 레지스터의 32비트로 이동될 수 있다. 다른 실시예에서, 정수 레지스터(201) 각각은 64비트를 포함하고 있고, 데이터의 64비트는 정수 레지스터(201)와 레지스터(209) 사이에서 이동될 수 있다.
도 3은 본 발명의 일실시예에 따라 데이터를 조작하는 프로세서에 사용된 일반적인 단계를 설명하는 흐름도이다. 예를들어, 이러한 연산은 데이터를 가진 레지스터 파일(150)내의 레지스터를 캐시(160), 메인 메모리(104), 판독 전용 메모리(ROM)(106), 또는 데이터 기억 장치(107)로부터 로드하는 로드 연산을 포함하고 있다.
단계(301)에서, 디코더(202)는 제어신호(207)를 캐시(160)나 버스(101)로부터 수신한다. 디코더(202)는 수행될 연산을 결정하기 위해 제어신호를 디코드한다.
단계(302)에서, 디코더(202)는 레지스터 파일(150) 또는 메모리내의 위치에 액세스한다. 레지스터 파일(150)내의 레지스터 또는 메모리내의 메모리 위치는 제어 신호(207)로 확인된 레지스터 어드레스에 따라 액세스된다. 예를 들어, 압축 데이터 상에서의 연산에 있어서, 제어신호(207)는 SRC1, SRC2, 및 DEST 레지스터 어드레스를 포함할 수 있다. SRC1는 제1소스 레지스터의 어드레스이다. SRC2는 제2소스 레지스터의 어드레스이다. 일부 경우에, SRC2 어드레스는 모든 연산이 두 개의 소스 어드레스를 필요로 하지 않기 때문에 선택사양이다. SRC2 어드레스가 연산에 필요하지 않다면, 단지 SRC1 어드레스만이 사용된다. DEST는 결과 데이터가 기억되어 있는 끝점 레지스터의 어드레스이다. 일실시예에서, SRC1 또는 SRC2는 또한 DEST로서 사용된다. SRC1, SRC2 및 DEST는 도 6a와 도 6b에 더 상세히 설명되어 있다. 관련 데이터에 기억된 데이터는 각각 소스 1, 소스 2, 및 결과로서 명칭된다. 이 데이터의 각각은 길이로 64비트이다.
본 발명의 다른 실시예에서, SRC1, SRC2 및 DEST중 어느 하나 또는 모두는 프로세서(109)의 어드레스가능 메모리공간에 메모리 위치를 정의할 수 있다. 예를들어, SRC1는 메인 메모리(104)에서 메모리 위치를 확인할 수 있고, SRC2는 정수 레지스터(201)에서 제1레지스터를 확인하고, DEST는 레지스터(209)에서 제2레지스터를 확인한다. 여기서 설명을 간결하게 하기 위해, 본 발명은 레지스터 파일(150)에 액세스하는 것에 관하여 설명될 것이다. 그러나, 이 액세스는 대신 메모리에서 행해질 수 있다.
단계(303)에서, 실행 유니트(130)는 액세스된 데이터상에서 연산을 수행할 수 있다. 단계(304)에서, 결과는 제어신호(207)의 필요에 따라 레지스터 파일(150)로 역기억된다.
데이터와 기억 포맷
도 4는 본 발명의 일실시예에 따라 압축 데이터 유형을 설명하고 있다. 3개의 압축 데이터 포맷이 설명되어 있다; 압축 바이트(401), 압축워드(402), 및 압축2배 워드(403). 본 발명의 일실시예에서, 압축 바이트는 8개의 데이터 요소를 포함한 64비트 길이이다. 각각의 데이터 요소는 1 바이트 길이이다. 일반적으로, 데이터 요소는 동일 길이의 다른 데이터 요소를 가진 단일 레지스터(또는 메모리 위치)에 기억되어 있는 데이터의 개별부분이다. 본 발명의 일실시예에서, 레지스터에 기억된 데이터 요소의 수는 데이터 요소의 비트내의 길이에 의해 분할된 64비트이다.
압축워드(402)는 64비트 길이이고 4개의 워드(402) 데이터 요소를 포함하고 있다. 각각의 워드(402) 데이터 요소는 16비트의 정보를 포함하고 있다.
압축 2배 워드(403)는 64비트 길이이고 2개의 2배 워드(403) 데이터 요소를 포함하고 있다. 각각의 2배 워드(403) 데이터 요소는 32비트의 정보를 포함하고 있다.
도 5a에서 도 5c는 본 발명의 일실시예에서 따라 레이스터내의 압축 데이터 기억 표현을 설명하고 있다. 부호없는 압축 바이트 레지스터내의 표현(510)은 레지스터 R0(212a)에서 R7(212h)까지중 하나의 레지스터내의 부호없는 압축 바이트(401)의 기억을 설명하고 있다. 각각의 바이트 데이터 요소에 대한 정보는 바이트 0에 대하여 비트 7에서 비트 0까지, 바이트 1에 대하여 비트 15에서 비트 8까지, 바이트 2에 대하여 비트 23에서 비트 16까지, 바이트 3에 대하여 비트 31에서 비트 24까지, 바이트 4에 대하여 비트 39에서 비트 32까지, 바이트 5에 대하여 비트 47에서 비트 40까지, 바이트 6에 대하여 비트 55에서 비트 48까지, 그리고 바이트 7에 대하여 비트 63에서 비트 56까지에 기억되어 있다. 그러므로, 모든 이용가능한 비트는 레지스터에서 사용된다. 이 기억 배열은 프로세서의 기억 효율성을 증가시킨다. 더욱이, 8개의 데이터 요소가 액세스된 상태로, 여기서 하나의 연산은 동시에 8개의 데이터 요소상에서 수행될 수 있다. 부호있는 압축 바이트 레지스터내 표현(511)은 부호있는 압축 바이트(401)의 기억을 설명하고 있다. 모든 바이트 데이터 요소의 8번째 비트는 신호 지시기에 필요하다는 것을 상기하라.
부호없는 압축 워드 레지스터내 표현(512)은 워드 3에서 워드 0이 레지스터(209)중 하나의 레지스터에 기억되는 방법을 설명하고 있다. 비트 15에서 비트 0는 워드 0에 대한 데이터 요소 정보를 포함하고 있고, 비트 31에서 비트 16는 워드 1에 대한 정보를 포함하고 있고, 비트 47에서 비트 32는 데이터 요소 워드 2에 대한 정보를 포함하고 있고, 비트 63에서 비트 48은 데이터 요소 워드 3에 대한 정보를 포함하고 있다. 부호 있는 압축 워드 레지스터내 표현(513)은 부호없는 압축 워드 레지스터내 표현(512)과 유사하다. 각각의 워드 데이터 요소의 16번째의 비트만이 신호 지시기에 필요하다는 것을 상기하라.
부호없는 압축 2배 워드 레지스터내 표현(514)은 레지스터(209)가 두 개의 2배 워드 데이터 요소를 기억하는 방법을 도시하고 있다. 2배 워드 0은 레지스터의 비트 31에서 비트 0에 기억되어 있다. 2배 워드 1은 레지스터의 비트 63에서 비트 32에 기억되어 있다. 부호 있는 압축 2배 워드 레지스터내 표현(515)은 부호없는 압축 2배 워드 레지스터내 표현(514)과 유사하다. 필요한 부호비트는 2배 워드 데이터 요소의 32번째 비트이다는 것을 상기하라.
앞서 언급된 바와 같이, 레지스터(209)는 양 압축 데이터와 부동소숫점 데이터에 사용될 수 있다. 본 발명의 이 실시예에서, 개별 프로그램밍 프로세서(109)는 어드레스된 레지스터, 예를들어 R0(212a)가 압축 데이터 또는 부동 소숫점 데이터를 기억하는지를 추적하는데 필요할 수 있다. 대체 실시예에서, 프로세서(109)는 레지스터(209)의 개별 레지스터에 기억된 데이터 유형을 추적할 수 있다. 그러면, 이 대체 실시예는 예를 들어, 압축 가산 연산이 부동 소숫점 데이터상에서 시도되었다면 에러를 발생시킬 수 있다.
제어 신호 포맷
다음은 압축 데이터를 조작하는 프로세서(109)에 사용된 제어신호의 일실시예를 설명하고 있다. 본 발명의 일실시예에서, 제어 신호는 32비트로 표현되어 있다. 디코더(202)는 버스(101)로부터 제어 신호(207)를 수신할 수 있다. 다른 실시예에서, 디코더(202)는 또한 캐시(160)로부터 이러한 제어 신호를 수신할 수 있다.
도 6a는 본 발명의 일실시예에 따라 압축 데이터의 사용을 지시하는 제어 신호 포맷을 설명하고 있다. 비트 31에서 비트 26까지의 연산 필드 OP(601)는 프로세서(109)에 의해 수행될 연산에 대한 정보를 제공한다; 예를들어, 압축 가산, 압축 감산 등. 비트 25에서 비트 20까지의 SRC1(602)은 레지스터(209)에 레지스터의 소스 레지스터 어드레스를 제공한다. 이 소스 레지스터는 제어 신호의 실행에 사용될 제1압축 데이터, 소스 1을 포함하고 있다. 유사하게, 비트 19에서 비트 14까지의 SRC2(603)은 레지스터(209)에 레지스터의 어드레스를 포함하고 있다. 이 제2소스 레지스터는 이 연산의 실행시에 사용될 압축 데이터, 소스 2를 포함하고 있다. 비트 5에서 비트 0까지의 DEST(605)는 레지스터(209)에 레지스터의 어드레스를 포함하고 있다. 이 끝점 레지스터는 압축 데이터 연산의 결과 압축 데이터, 결과를 기억할 것이다.
비트 12에서 비트 13까지의 제어비트 SZ(610)는 제1 및 제2압축 데이터 소스 레지스터내의 데이터 요소의 길이를 지시한다. SZ(610)가 012와 같다면, 압축 데이터는 압축 바이트(401)로서 포맷된다. SZ(610)가 102와 같다면, 압축 데이터는 압축 워드(402)로서 포맷된다. 002또는 112와 같은 SZ(610)는 예약되고, 그러나, 다른 실시예에서 이 값중 하나의 값은 압축 2배 워드(403)를 지시하는데 사용될 수 있다.
비트 11의 제어비트 T(611)는 그 연산이 포화 모드로 실행되는지를 지시한다. T(611)가 1과 같다면, 포화 연산은 수행된다. T(611)이 0과 같다면, 비포화 연산이 수행된다. 포화 연산은 추후 설명될 것이다.
비트 10의 제어비트 S(612)는 부호 연산의 사용을 지시한다. S(612)가 1과 같다면, 부호 연산은 수행된다. S(612)가 0과 같다면, 부호없는 연산이 수행된다.
도 6b는 본 발명의 일실시예에 따라 압축 데이터의 사용을 지시하는 제2제어 신호 포맷을 설명하고 있다. 이 포맷은 일리노이 60056-7641, 마운틴 프로스펙트, 피. 오. 박스 7641, 인텔 코포레이션, 리터네이쳐부에서 활용가능한 "펜티엄 프로세서 패밀리 사용자 매뉴얼"에 설명된 일반적인 정수 연산 코드 포맷과 연관이 있다. OP(601), SZ(610), T(611) 및 S(612)는 모두 하나의 큰 필드로 조합되어 있다. 일부 제어 신호에 있어서, 비트 3에서 비트 5는 SRC1(602)이다. 일실시예에서, SRC1(602) 어드레스가 있다면, 비트 3에서 비트 5는 또한 DEST(605)에 대응한다. 대체 실시예에서, SRC2(603) 어드레스가 있다면, 비트 0에서 비트 2까지는 또한 DEST(605)에 대응한다. 다른 제어신호에 있어서, 압축 시프트 즉시 연산과 같이, 비트 3에서 비트 5까지는 연산코드필드에서 확장을 나타낸다. 일실시예에서, 이 확장은 프로그램머가 시프트 카운트 값과 같은 제어신호를 가진 즉시값을 포함하게 한다. 일실시예에서, 즉시값을 제어신호를 뒤따른다. 이것은 "펜티엄 프로세서 패밀리 사용자 매뉴얼" 부록 F, 페이지 F-1에서 F-3까지에 상세히 설명되어 있다. 비트 0에서 비트 2는 SRC2(603)를 나타낸다. 이 일반적인 포맷은 레지스터 대 레지스터, 메모리 대 레지스터, 메모리별 레지스터, 레지스터별 레지스터, 즉시 별 레지스터, 레지스터 대 메모리 어드레싱을 허용한다. 또한 일실시예에서, 이 일반적인 포맷은 정수 레지스터 대 레지스터, 및 레지스터 대 정수 레지스터 어드레싱을 지원할 수 있다.
포화/불포화의 설명
앞서 언급된 바와 같이, T(611)는 연산이 옵션적으로 포화하는지를 지시한다. 포화가능상태로, 연산의 결과가 데이터의 범위를 넘침 또는 아래 넘침하는 곳에서, 그 결과는 고정될 것이다. 고정하는 것은 그 결과를 최대 또는 최소값에 설정하는 것이 범위의 최대 또는 최소값을 초과하는 결과일 수 있다는 것을 의미한다. 아래넘침의 경우에, 포화는 그 결과를 범위내에서 가장 낮은 값에 고장하고 넘침의 경우에 가장 높은 값에 고정한다. 각각의 데이터 포맷에 대하여 허용가능한 범위는 표 7에 도시되어 있다.
상기된 바와 같이, T(611)는 포화 연산이 수행될 수 있는지를 지시한다. 그러므로, 부호없는 바이트 데이터 포맷을 사용하여, 연산결과=258이고 포화가 인에이블하다면, 그 결과는 연산의 끝점 레지스터에 기억되기 전에 255에 고정될 것이다. 유사하게, 연산의 결과= -32999이고 포화로 부호있는 워드 데이터 포맷에 사용된 프로세서(109)가 인에이블해졌다면, 그 결과는 연산의 끝점 레지스터에 기억되기 전에 -32768에 고정될 것이다.
압축 가산
압축 가산 연산
본 발명의 일실시예는 압축 가산 연산을 실행 유니트(130)에서 수행되게 한다. 즉, 본 발명은 제1압축 데이터의 각각의 데이터 요소를 개별적으로 제2압축 데이터의 각각의 데이터 요소에 합산한다.
도 7a는 본 발명의 일실시예에 따라 압축 가산을 수행하는 방법을 설명하고 있다. 단계(701)에서, 디코더(202)는 프로세서(109)에 의해 수신된 제어 신호(207)를 디코드한다. 그러므로, 디코더(202)는 디코드한다: 압축 가산에 대한 연산코드; 레지스터(209)내의 SRC1(602), SRC2(603) 및 DEST(605)의 어드레스; 포화/불포화, 부호있는/부호없는, 및 압축 데이터내의 데이터 요소의 길이. 단계(702)에서, 내부 버스(170)를 매체로 하여, 디코더(202)는 SRC1(602)과 SRC2(603) 어드레스가 주어진 레지스터 파일(150)내의 레지스터(209)에 액세스한다. 레지스터(209)는 이 어드레스 소스 1과 소스 2 각각에서 레지스터에 기억된 압축 데이터를 실행 유니트(130)에 제공한다. 즉, 레지스터(209)는 그 압축 데이터를 내부버스(170)를 매개로 하여 실행 유니트(130)에 전달한다.
단계(703)에서, 디코더(202)는 실행유니트(130)가 압축 가산 연산을 수행하게 한다. 디코더(202)는 내부 버스(170)를 매개로 하여 압축 데이터 요소의 길이, 포화가 사용되는지 그리고 부호있는 산술이 사용되는지를 추가로 전달한다. 단계(704)에서, 데이터 요소의 길이는 어느 단계가 다음에 실행되는지를 결정한다. 압축 데이터내의 데이터 요소의 길이가 8비트(바이트 데이터)이면, 실행 유니트(130)는 단계(705a)를 수행한다. 그러나, 압축 데이터내의 데이터 요소의 길이가 16비트(워드 데이터)이면, 실행유니트(130)는 단계(705b)를 수행한다. 본 발명의 일실시예에서, 단지 8비트와 16비트 데이터 요소 길이 압축 가산이 지원된다. 그러나, 대체 실시예는 상이한 및/또는 다른 길이를 지원할 수 있다. 예를 들어, 대체 실시예는 32비트 데이터 요소 길이 압축 가산을 추가로 지원할 수 있다.
데이터 요소의 길이가 8비트라고 가정하면, 단계(705a)가 실행된다. 실행 유니트(130)는 결과 압축 데이터의 비트 7에서 비트 0까지를 만들어, 소스 1의 비트 7에서 비트 0까지를 SRC2의 비트 7에서 비트 0까지에 합산한다. 이 가산과 동시에, 실행 유니트(130)는 결과 압축 데이터의 비트 15에서 비트 8까지를 만들어, 소스 1의 비트 15에서 비트 8까지를 소스 2의 비트 15에서 비트 8까지에 합산한다. 이 가산과 동시에 실행 유니트(130)는 결과 압축 데이터의 비트 23에서 비트 16까지를 만들어, 소스 1의 비트 23에서 비트 16까지를 소스 2의 비트 23에서 비트 16까지에 합산한다. 이 가산과 동시에, 실행 유니트(130)는 결과 압축 데이터의 비트 31에서 비트 24까지를 만들어, 소스 1의 비트 31에서 비트 24까지를 소스 2의 비트 31에서 비트 24까지에 합산한다. 이 가산과 동시에, 실행유니트(130)는 결과 압축 데이터의 비트 39에서 비트 32까지를 만들어, 소스 1의 비트 39에서 비트 32까지를 소스 2의 비트 39에서 비트 32까지에 합산한다. 이 가산과 동시에 실행 유니트(130)는 결과 압축 데이터의 비트 47에서 비트 40까지를 만들어, 소스 1의 비트 47에서 비트 40까지를 소스 2의 비트 47에서 비트 40까지에 합산한다. 이 가산과 동시에, 실행유니트(130)는 결과 압축 데이터의 비트 54에서 48까지를 만들어, 소스 1의 비트 54에서 비트 48까지를 소스 2의 비트 54에서 비트 48까지에 합산한다. 이 가산과 동시에, 실행유니트(130)는 결과 압축 데이터의 비트 63에서 비트 56까지를 만들어, 소스 1의 비트 63에서 비트 56까지를 소스 2의 비트 63에서 비트 56까지에 합산한다.
데이터 요소의 길이가 16비트라고 가정하면, 단계(705b)가 실행된다. 실행유니트(130)는 결과 압축 데이터의 비트 15에서 비트 0까지를 만들어, 소스 1의 비트 15에서 비트 0까지를 SRC2의 비트 15에서 비트 0까지에 합산한다. 이 가산과 동시에 실행유니트(130)는 결과 압축 데이터의 비트 31에서 비트 16까지를 만들어, 소스 1의 비트 31에서 비트 16까지를 소스 2의 비트 31에서 비트 16까지에 합산한다. 이 가산과 동시에 실행유니트(130)는 결과 압축 데이터의 비트 47에서 비트 32까지를 만들어, 소스 1의 비트 47에서 비트 32까지를 소스 2의 비트 47에서 비트 32까지에 합산한다. 이 가산과 동시에, 실행 유니트(130)는 결과 압축 데이터의 비트 63에서 비트 48까지를 만들어, 소스 1의 비트 63에서 비트 48까지를 소스 2의 비트 63에서 비트 48까지에 합산한다.
단계(706)에서, 디코더(202)는 끝점 레지스터의 DEST(605)어드레스로 레지스터(209)내의 레지스터를 인에이블하게 한다. 그러므로, 그 결과는 DEST(605)에 의해 어드레스된 레지스터에 기억된다.
표 8a는 압축 가산 연산의 레지스터내의 표현을 설명하고 있다. 비트의 제1행은 소스 1 압축 데이터의 압축 데이터 표현이다. 비트의 제2행은 소스 2 압축 데이터의 압축 데이터 표현이다. 비트의 제3행은 결과 압축 데이터의 압축 데이터 표현이다. 각각의 데이터 요소 아래의 수는 데이터 요소의 수이다. 예를 들어, 소스 1 데이터 요소 0은 100010002이다. 그러므로, 데이터 요소가 길이로(바이트 데이터) 8비트이고 부호없는, 불포화 가산이 수행된다면, 실행 유니트(130)는 도시된 바와 같이 결과 압축 데이터를 만든다.
결과 넘침 또는 아래넘침과 연산이 불포화를 사용하고 있는 본 발명의 일실시예에서, 결과는 단순히 끊어짐이 된다는 것을 상기하라. 즉. 캐리 비트는 무시된다. 예를들어, 표 8a에서, 결과 데이터 요소 하나의 레지스터내 표현은: 100010002+100010002=000010002가 될 수 있다. 유사하게, 아래넘침에 있어서, 결과는 끊어짐이 된다. 끊어짐의 형태는 프로그램머가 쉽게 모듈 산술을 수행하게 한다. 예를 들어, 결과 데이터 요소하나의 방정식은: (소스 1 데이터 요소 1 + 소스 2 데이터 요소 1) 모드(mod) 256=결과 데이터 요소 1로서 표현될 수 있다. 더욱이, 넘침과 아래넘침은 상태 레지스터에 에러 비트를 설치함으로써 검출될 수 있다는 것을 당업자는 본 명세서로부터 알 수 있다.
표 8b는 압축 워드 데이터 가산 연산의 레지스터내 표현을 설명하고 있다. 그러므로, 데이터 요소가 길이로(워드 데이터) 16비트이고 부호없는 불포화 가산이 수행된다면, 실행 유니트(130)는 도시된 바와 같이 결과 압축 데이터를 만든다. 워드 데이터 요소 2에서, 비트 7(아래의 강조된 비트 I 참조)에서 비트 8로 진보된 캐리는 데이터 요소 2을 넘침(아래의 강조된overflow참조)을 야기한다는 것을 상기하라.
표 8c는 압축 2배 워드 데이터 가산 연산의 레지스터내 표현을 설명하고 있다. 이 연산은 본 발명의 대체 실시예에 지원된다. 그러므로, 그 데이터 요소가 길이로 (즉, 2배 워드 데이터) 32비트이고 부호없는, 불포화 가산이 수행된다면, 실행 유니트(130)는 도시된 바와 같이 결과 압축 데이터를 만든다. 2배 워드 데이터 요소 하나의 비트 7과 비트 15로 부터의 캐리는 각각 비트 8과 비트 16으로 진행된다는 것을 상기하라.
압축 가산과 보통의 가산 사이의 차이를 더 설명하기 위해서, 윗예에서의 데이터는 표 9에 되풀이 된다. 그러나, 이 경우에, 보통의 가산(64비트)은 그 데이터 상에서 수행된다. 비트 7, 비트 15, 비트 23, 비트 31, 비트 39 및 비트 47에서의 이동은 각각 비트 8, 비트 16, 비트 24, 비트 32, 비트 40 및 비트 48로 이동되었다는 것을 상기하라.
신호/불포화 압축 가산
표 10은 압축 데이터의 데이터 요소 길이가 8비트인 부호 있는 압축 가산의 예를 설명하고 있다. 포화는 사용되지 않았다. 그러므로, 결과는 넘침과 아래넘침이 될 것이다. 표 10은 표 8a-8c 및 표 9와는 다른 데이터를 사용하고 있다.
신호/포화 압축 가산
표 11은 압축 데이터의 데이터 요소 길이가 8비트인 부호 있는 압축 가산의 예를 설명하고 있다. 포화가 사용되고, 그러므로, 넘침은 최대값에 고정될 수 있고, 아래넘침은 최소값에 고정될 수 있다. 표 11은 표 10과 같은 데이터를 사용하고 있다. 여기서 데이터 요소 0과 데이터 요소 2는 최소값에 고정되어 있고, 데이터 요소 4와 데이터 요소 6은 최대값에 고정되어 있다.
압축 감산
압축 감산 연산
본 발명의 일실시예는 압축 감산 연산이 실행유니트(130)에서 수행하게 한다. 즉, 본 발명은 제2압축 데이터의 각각의 데이터 요소가 개별적으로 제1압축 데이터의 각각의 데이터 요소로부터 감산되게 한다.
도 7b는 본 발명의 일실시예에 따라 압축 감산을 수행하는 방법을 설명하고 있다. 단계(710-713)는 단계(701-704)와 유사하다는 것을 상기하라.
본 발명의 본 실시예에서, 단지 8비트와 16비트 데이터 요소 길이 압축 감산이 지원된다. 그러나, 대체 실시예는 상이한 및/또는 다른 길이를 지원할 수 있다. 예를 들어, 대체 실시예는 32비트 데이터 요소 길이 압축 감산을 추가로 지원할 수 있다.
데이터 요소 길이가 8비트라고 가정하면, 단계(714a, 715a)가 실행된다. 실행 유니트(130) 2의 채움은 소스 2의 비트 7에서 비트 0까지를 채운다. 이 2의 채움과 동시에, 실행유니트(130) 2의 채움은 소스 2의 비트 15에서 비트 8까지를 채운다. 이 2의 채움과 동시에, 실행유니트(130) 2의 채움은 소스 2의 비트 23에서 비트 16까지를 채운다. 이 2의 채움과 동시에, 실행유니트(130) 2의 채움은 소스 2의 비트 31에서 비트 24까지를 채운다. 이 2의 채움과 동시에, 실행유니트(130) 2의 채움은 소스 2의 비트 39에서 비트 32까지를 채운다. 이 2의 채움과 동시에, 실행유니트(130) 2의 채움은 소스 2의 비트 47에서 비트 40까지를 채운다. 이 2의 채움과 동시에, 실행유니트(130) 2의 채움은 소스 2의 비트 55에서 비트 48까지를 채운다. 이 2의 채움과 동시에 실행유니트(130) 2의 채움은 소스 2의 비트 63에서 비트 56까지를 채운다. 단계(715a)에서, 실행유니트(130)는 단계(705a)에 일반적으로 설명된 바와 같이, 소스 1의 비트에 소스 2의 2의 채움된 비트의 가산을 수행한다.
데이터 요소 길이가 16비트라고 가정하면, 단계(714b, 715b)가 실행된다. 실행유니트(130) 2의 채움은 소스 2의 비트 15에서 비트 0까지를 채운다. 이 2의 채움과 동시에, 실행유니트(130) 2의 채움은 소스 2의 비트 31에서 비트 16까지를 채운다. 이 2의 채움과 동시에, 실행유니트(130) 2의 채움은 소스 2의 비트 47에서 비트 32까지를 채운다. 이 2의 채움과 동시에, 실행유니트(130) 2의 채움은 소스 2의 비트 63에서 비트 48까지를 채운다. 단계(715b)에서, 실행유니트(130)는 단계(705b)에서 일반적으로 설명된 바와 같이, 소스 1의 비트에 소스 2의 2의 채움된 비트의 가산을 수행한다.
단계(714,715)는 제2의 수에서 제1의 수를 빼는 본 발명의 일실시예에 사용된 방법인 것을 상기하라. 그러나, 감산의 다른 형태는 종래기술에 공지되어 있고 본 발명은 2의 채움 산술을 이용하는 데에 제한을 두지 않을 것이다.
단계(716)에서, 디코더(202)는 끝점 레지스터의 끝점 어드레스를 가진 레지스터(209)를 인에이블하게 한다. 그러므로, 결과 압축 데이터는 레지스터(209)의 DEST 레지스터에 기억되어 있다.
표 12는 압축 감산 연산의 레지스터내 표현을 설명하고 있다. 데이터 요소가 길이(바이트 데이터)로 8비트이고 부호없는, 불포화 감산이 수행된다고 가정하면, 실행 유니트(130)는 도시된 바와 같이 결과 압축 데이터를 만든다.
압축 데이터 가산/감산 회로
도 8은 본 발명의 일실시예에 따라 압축 데이터의 개별 비트상에서 압축 가산 및 압축 감산을 수행하는 회로를 설명하고 있다. 도 8은 개조된 비트 슬라이스 가산기/감산기(800)를 도시하고 있다. 가산기/감산기(801ab)는 소스 2로부터의 2비트가 소스 1에 더해지거나 소스 1로부터 감산되게 한다. 연산과 캐리 제어(803)는 가산 또는 감산 연산을 할 수 있는 제어신호를 제어부(809a)에 전송한다. 그러므로, 가산기/감산기(801a)는 결과i(806a)상에 전송된 결과 비트를 만들어, 소스 2i(805a)상에 수신된 비트i를 소스 1i(804a)상에 수신된 비트 i에 더하거나 공제한다. Cin(807a-b) 및 Cout(808a-b)는 가산기/감산기에서 공통으로 발견되는 바와 같이 캐리 제어 회로소자를 나타낸다.
비트 제어(802)는 연산으로부터 인에이블해지고 압축 데이터를 매개로 한 캐리 제어(803)는 811이 Cini+1(807b) 및 Couti를 제어하게 한다. 예를 들어, 표 13a에서, 부호없는 압축 바이트 가산에 수행된다. 가산기/감산기(801a)가 소스 1의 비트 7을 소스 2의 비트 7에 더하면, 연산과 캐리 제어(803)는 비트 7에서 비트 8로의 이동의 전파를 멈추게 하여 비트 제어(802)를 인에이블하게 할 것이다.
그러나, 부호없는 압축 워드 가산이 수행되어, 가산기/감산기(801a)가 소스 1의 비트 7를 소스 2의 비트 7에 더하는데 유사하게 사용된다면, 비트 제어(802)는 비트 8로의 이동을 전파한다. 표 13b는 이 결과를 설명하고 있다. 이 전파는 압축 해제 가산 뿐만아니라 압축 2배 워드 가산에 있어서 허용될 것이다.
가산기/감산기(801a)는 소스 2i(805a)를 변환하고 하나를 추가함으로써 소스 2i(805a)의 2의 채움을 먼저 형성함으로써 소스 1i(804a)로부터 비트 소스 2i(805a)를 공제한다. 그러면, 가산기/감산기(801a)는 이 결과를 소스 1i(804a)에 더한다. 비트 슬라이스 2의 채움 기술은 종래기술에 공지되어 있고, 당업자는 이러한 비트 슬라이스 2의 채움 회로를 설계하는 방법을 이해할 수 있을 것이다. 캐리어의 전파는 비트 제어부(802)와 연산과 이동 제어부(803)에 의해 제어된다는 것을 상기하라.
도 9는 본 발명의 일실시예에 따라서 압축 바이트 데이터 상에서 압축 가산과 압축 감산을 수행하는 회로를 설명하고 있다. 소스 1 버스(901)와 소스 2 버스(902)는 정보신호를 각각 소스 1in(906a-h)와 소스 2in(905a-h)를 매개로 하여 가산기/감산기(908a-h)에 이동시킨다. 그러므로, 가산기/감산기(908a)는 소스 2 비트 7에서 비트 0까지를 소스 1 비트 7에서 비트 0까지에/로부터 더하거나/뺀다; 가산기/뺄샘기(908b)는 소스 2 비트 15에서 비트 8까지를 소스 1 비트 15에서 비트 8까지에/로부터 더하거나/뺀다, 등등. CTRL(904a-h)는 압축 제어(911)를 매개로 하여, 연산제어부(903)로부터, 캐리어의 전파를 불가능하게 하는 제어신호, 가능/불가능한 포화, 및 가능/불가능한 부호있는/부호없는 산술을 수신한다. 연산 제어부(903)는 이동 정보를 CTRL(904a-h)로부터 수신하고 다음의 가장 중요한 가산기 감산기(908a-h)에 전파하지 않음으로써 캐리어의 전파를 불가능하게 한다. 그러므로, 연산 제어부(903)는 64비트 압축 데이터에 대하여 연산과 이동 제어부(803)와 비트 제어부(802)의 연산을 수행한다. 상기 설명과 도 1-9에서의 설명에서 이러한 회로를 당업자는 만들 수 있을 것이다.
가산기/감산기(908a-h)는 결과 출력(907a-h)을 매개로 하여, 결과 레지스터(910a-h)에 여러 압축 가산의 결과 정보를 전달한다. 각각의 결과 레지스터(910a- h)는 그 결과 정보를 기억하고 결과 버스(909)를 타고 전송한다. 그 다음, 이 결과 정보는 DEST(605) 레지스터 어드레스에 의해 확인된 정수 레지스터에 기억된다.
도 10은 본 발명의 일실시예에 따라서 압축 워드 데이터 상에서 압축 가산과 압축 감산을 수행하는 회로의 논리도이다. 여기서, 압축 워드 연산이 수행된다. 비트 8과 비트 7 사이, 비트 24와 비트 23사이, 비트 40과 비트 39 사이, 및 비트 56과 비트 55사이의 캐리어의 전파는 연산 제어부(903)에 의해 인에이블해진다. 그러므로, 가상 가산기/감산기(1008a)로서 도시된 가산기/감산기(908a,908b)는 압축 워드 데이터 소스 2의 제1워드(비트 15에서 비트0까지)를 압축 워드 데이터 소스 1의 제2워드(비트15에서 비트 0까지)에/로부터 더하거나/빼도록 함께 작용할 것이다; 가상 가산기/감산기(1008b)로서 도시된 가산기/감산기(908c,908d)는 압축 워드 데이터 소스 2의 제2워드(비트 31에서 비트 16까지)를 압축 워드 데이터 소스 1의 제2워드(비트 31에서 비트 16까지)에/로부터 더하거나/빼도록 함께 작용할 것이다, 등등.
가상 가산기/감산기(1008a-d)는 결과 출력(1007a-d)(조합된 결과 출력(907a- b, 907c-d, 907e-f 및 907g-h))을 매개로 하여, 결과 정보를 가상 결과 레지스터(1010a-d)에 전달한다. 각각의 가상 결과 레지스터(1010a-d)(조합된 결과 레지스터(910a-b, 910c-d, 910e-f, 및 910g-h))는 결과 버스(909)를 타고 전달될 16비트 결과 데이터 요소를 기억한다.
도 11은 본 발명의 일실시예에 따라서 압축 2배 워드 데이터 상에서 압축 가산과 압축 감산을 수행하는 회로의 논리도이다. 비트 8과 비트 7사이, 비트 16과 비트 15사이, 비트 24와 비트 23사이, 비트 40과 비트 39사이, 비트 48과 비트 47사이, 및 비트 56과 비트 55사이의 캐리어의 전파는 연산제어부(903)에 의해 인에이블해진다. 그러므로, 가상 가산기/감산기(1108a)로서 도시된 가산기/감산기(908a-d)는 압축 2배 워드 데이터 소스 2에 제1의 2배 워드(비트 31에서 비트 0까지)를 압축 워드 데이터 소스 1의 제1의 2배 워드(비트 31에서 비트 0까지)에/로부터 더하거나/빼도록 함께 작용한다; 가상 가산기/감산기(1108b)로서 도시된 가산기/감산기(908e- h)는 압축 2배 워드 데이터 소스 2의 제2의 2배 워드(비트 63에서 비트 32까지)를 압축 2배 워드 데이터 소스 1의 제2의 2배 워드(비트 63에서 비트 32까지)에/로부터 더하거나/빼도록 함께 작용한다.
가상 가산기/감산기(1108a-b)는 결과 출력(1107a-b)(조합된 결과 출력(907a- d, 907e-h))을 매개로 하여, 결과 정보를 가상 결과 레지스터(1110a-b)에 전달한다. 각각의 가상결과 레지스터(1110a-b)(조합된 결과 레지스터(910a-d, 910e-h))는 결과 버스(909)를 타고 32비트 결과 데이터 요소를 기억시킨다.
압축 승산
압축 승산 연산
본 발명의 일실시예에서, SRC1레지스터는 피승수 데이터(소스1)를 포함하고, SRC2레지스터는 승수 데이터(소스2)를 포함하고, DEST 레지스터는 승산의 결과부분(결과)을 포함할 것이다. 즉, 소스 1은 소스 2의 각각의 데이터 요소에 의해 독립적으로 곱해진 각각의 데이터 요소를 가질 것이다. 승산의 유형에 따라, 그 결과는 곱의 상위 또는 하위 비트를 포함할 수 있다.
본 발명의 일실시예에서, 다음 승산 연산이 지원된다: 승산 하이 부호없는 압축, 승산 하이 부호 있는 압축, 및 승산 로우 압축. 하이/로우는 승산의 결과로부터의 어느 비트가 그 결과에 포함되어 있는지를 지시한다. 이것은 2N비트를 가진 결과내의 두 개의 N비트수의 결과의 승산 때문에 필요하다. 결과 데이터 요소가 피승수와 승수의 데이터요소와 동일 사이즈이기 때문에, 결과의 절반만이 그 결과에 의해 나타날 수 있다. 하이는 더 상위 비트가 그 결과로서 출력되게 한다. 로우는 더 하위 비트가 그 결과로서 출력되게 한다. 예를 들어, 소스 1[7:0]×소스 2[7:0]의 부호없는 하이 압축 승산은 결과[7:0]에 그 결과의 더 상위 비트를 기억한다.
본 발명의 일실시예에서, 하이/로우 연산 변경자의 사용은 하나의 데이터 요소에서 다음 더 높은 데이터 요소로의 넘침의 가능성을 제거한다. 즉, 이 변경자는 프로그램머가 넘침에 무관하게 결과의 어느 비트가 그 결과에 있어야 하는지를 선택할 수 있게 한다. 그 프로그램머는 압축 승산 연산의 조합을 이용하여 완전한 2N 비트결과를 발생시킬수 있다. 예를들어, 그 프로그램머는 승산 하이 부호없는 압축 연산을 사용할 수 있고, 그 다음, 동일 소스 1과 소스 2를 사용하여, 완전한(2N)결과를 얻는 승산 로우 압축 연산을 사용할 수 있다. 종종, 그 결과의 상위 비트는 그 결과의 단지 중요한 부분이기 때문에 승산 하이 연산이 제공된다. 그 프로그램머는 압축 해제 데이터 연산에 종종 필요로 되는 바와 같이, 임의의 끊임을 먼저 수행되어야 함이 없이 그 결과의 상위 비트를 얻을 수 있다.
본 발명의 일 실시예에서, 소스2내의 각각의 데이터 요소는 상이한 값을 가질 수 있다. 이것은 그 프로그램머에게 소스1내의 각각의 피승수에 대한 승수로서 상이한 값을 가지는 융통성을 제공한다.
도 12는 본 발명의 일 실시예에 따라서 압축 데이터상에서 압축 승산 연산을 수행하는 방법을 설명하는 흐름도이다.
단계(1201)에서, 디코더(202)는 프로세서(109)에 의해 수신된 제어 신호(207)를 디코드한다. 그러므로, 디코더(202)는 디코드한다: 적절한 승산 연산에 대한 연산 코드; 레지스터(209)내의 SRC1(602), SRC2(603), 및 DEST(605) 어드레스; 압축 데이터내의 데이터 요소의 길이, 부호있는/부호없는, 하이/로우.
단계(1202)에서, 내부 버스(170)를 매개로 하여, 디코더(202)는 SRC1(602)과 SRC2(603) 어드레스가 주어진 레지스터 파일(150)내의 레지스터(209)에 액세스한다. 레지스터(209)는 SRC1(602) 레지스터(소스1)에 기억된 압축 데이터와 SRC2(603) 레지스터(소스2)에 기억된 압축 데이터를 실행 유니트(130)에 제공한다. 즉, 레지스터(209)는 내부 버스(170)를 매개로 하여 실행 유니트(130)에 압축 데이터를 전달한다.
단계(1130)에서, 디코더(202)는 실행 유니트(130)가 적절한 압축 승산 연산을 수행하게 한다. 디코더(202)는 내부 버스(170)를 매개로 하여, 승산 연산을 위해 데이터 요소의 사이즈와 하이/로우를 추가로 전달한다.
단계(1210)에서, 데이터 요소의 사이즈는 어느 단계가 다음에 실행되어야 하는지를 결정하다. 데이터 요소의 사이즈가 8비트(바이트 데이터)이면, 실행 유니트(130)는 단계(1212)를 실행한다. 그러나, 압축 데이터내의 데이터 요소의 사이즈가 16비트(워드 데이터)이면, 실행 유니트(130)는 단계(1214)를 수행한다. 일 실시예에서, 16비트 데이터 요소 사이즈 압축 승산만이 지원된다. 다른 실시예에서, 8비트 및 16비트 데이터 요소 사이즈 압축 승산이 지원된다. 그러나, 다른 실시예에서, 32비트 데이터 요소 사이즈 압축 승산이 또한 지원된다.
데이터 성부의 사이즈가 8비트이면, 단계(1212)가 실행된다. 단계(1212)에서, 다음이 수행된다. 소스1 비트7에서 비트0까지는 결과 비트7에서 비트0까지를 만들어, 소스2 비트7에서 비트0까지에 의해 승산된다. 소스1 비트15에서 비트8까지는 결과 비트15에서 비트8까지를 만들어, 소스2 비트15에서 비트8까지에 의해 승산된다. 소스1 비트23에서 비트16까지는 결과 비트23에서 비트16까지를 만들어, 소스2 비트23에서 비트16까지에 의해 승산된다. 소스1 비트31에서 비트24까지는 결과 비트31에서 비트24까지를 만들어, 소스2 비트31에서 비트24까지에 의해 승산된다. 소스1 비트39에서 비트32까지는 결과 비트39에서 비트32까지를 만들어, 소스2 비트39에서 비트32까지에 의해 승산된다. 소스1 비트47에서 비트40까지는 결과 비트47에서 비트40까지를 만들어, 소스2 비트47에서 비트40까지에 의해 승산된다. 소스1 비트55에서 비트48까지는 결과 비트55에서 비트48까지를 만들어, 소스2 비트55에서 비트48까지에 의해 승산된다. 소스1 비트63에서 비트56까지는 결과 비트63에서 비트63에서 비트56까지를 만들어, 소스2 비트63에서 비트56까지에 의해 승산된다.
데이터 요소의 사이즈가 16비트라고 가정하면, 단계(1214)가 실행된다. 단계(1214)에서, 다음이 수행된다. 소스1 비트15에서 비트0까지는 결과 비트15에서 비트0까지를 만들어 소스2 비트15에 비트0까지에 의해 승산된다. 소스1 비트31에서 비트16까지는 결과 비트31에서 비트16까지를 만들어 소스2 비트31에서 비트16까지에 의해 승산된다. 소스1 비트47에서 비트32까지는 결과 비트47에서 비트32까지를 만들어 소스2 비트47에서 비트32까지에 의해 승산된다. 소스1 비트63에서 비트48까지는 결과 비트63에서 비트48까지를 만들어 소스2 비트63에서 비트48까지에 의해 승산된다.
일 실시예에서, 단계(1212)의 승산이 동시에 수행된다. 그러나, 다른 실시예에서, 이 승산은 연속적으로 수행된다. 다른 실시예에서, 이 승산의 일부는 동시에 수행되고 일부는 연속적으로 수행된다. 이 논의는 또한 단계(1214)의 승산에 적용한다.
단계(1220)에서, 그 결과는 DEST 레지스터에 기억된다.
표 14는 압축 워드 데이터상에서의 압축 승산 부호없는 하이 연산의 레지스터내 표현을 설명하고 있다. 비트의 제1행은 소스2의 데이터 표현이다. 비트의 제3행은 결과의 압축 데이터 표현이다. 각각의 데이터 요소 비트 아래의 숫자는 데이터 요소수이다. 예를 들어, 소스1 데이터 요소2는 11111111000000002이다.
표 15는 압축 워드 데이터상에서의 승산 하이 부호있는 압축 연산의 레지스터내 표현을 설명하고 있다.
표 16은 압축 워드 데이터사아에서의 압축 승산 로우 연산의 레지스터내 표현을 설명하고 있다.
압축 데이터 승산 회로
일 실시예에서, 승산 연산은 압축 해제 데이터상의 단일 승산 연산으로서 클록 사이클의 동일 수로 승산 데이터 요소상에서 일어날 수 있다. 클록 사이클의 동일 수로 실행하기 위해서, 병렬 처리가 사용된다. 즉, 레지스터는 그 데이터 요소상에서 승산연산을 수행하도록 동시에 명령된다. 이것은 아래에 더 상세히 논의된다.
도 13은 본 발명의 일 실시예에 따라 압축 승산을 수행하는 회로를 설명하고 있다. 연산 제어(1300)는 승산을 수행하는 회로를 제어한다. 연산 제어(1300)는 승산 연산에 대한 제어 신호를 처리하고 다음 출력을 가진다: 하이/로우 인에이블(1380); 바이트/워드 인에이블(1381)과 신호 인에이블(1382). 하이/로우 인에이블(1380)은 그 결과의 하이 또는 로우 순위가 그 결과에 포함되는지를 확인한다. 바이트/워드 인에이블(1381)은 바이트 압축 데이터 또는 워드 압축 데이터 승산 연산이 수행되는지를 확인한다. 신호 인에이블(1382)은 신호 승산이 사용되는지를 확인한다.
압축 워드 승산기(1301)는 4워드 데이터 요소를 동시에 승산한다. 압축 바이트 승산기(1302)는 8바이트 데이터 요소를 승산한다. 압축 워드 승산기(1301)와 압축 바이트 승산기(1302) 모두 다음 입력: 소스1[63:0](1331), 소스2[63:0] (1333), 신호인에이블(1382), 및 하이/로우 인에이블(1380)을 가지고 있다.
압축 워드 승산기(1301)는 4개의 16×16 승산기 회로를 포함하고 있다: 16×16 승산기A(1310), 16×16 승산기B(1311), 16×16 승산기C(1312), 및 16×16 승산기D(1313). 16×16 승산기A(1310)는 입력으로서 소스1[15:0]과 소스2[15:0]를 가진다. 16×16 승산기B(1311)는 입력으로서 소스1[31:16]과 소스2[31:16]를 가진다. 16×16 승산기C(1312)는 입력으로서 소스1[47:32]과 소스2[47:32)를 가진다. 16×16 승산기D[1313]는 입력으로서 소스1[63:48]과 소스2[63:48]를 가진다. 각각의 16×16 승산기는 신호 인에이블(1382)에 연결되어 있다. 각각의 16×16 승산기는 32비트 결과를 만든다. 각각의 승산기에 있어서, 다중화기(M×0(1350), M×1 (1351), M×2(1352), 및 M×3(1353) 각각)는 32비트 결과를 수신한다. 하이/로우 인에이블(1380)의 값에 따라, 각각의 승산화기는 그 결과의 16 상위 비트 또는 16 하위 비트를 출력한다. 4개의 다중화기의 출력은 하나의 64비트 결과로 조합된다. 이 결과는 결과 레지스터1(1371)에 옵션적으로 기억된다.
압축 바이트 승산기(1302)는 8개의 8×8 승산기 회로: 8×8 승산기A(1320)에서 8×8 승산기H(1327)까지를 포함하고 있다. 각각의 8×8 승산기는 소스1[63;0](1331)과 소스2[63:0](1333)의 각각으로부터 8비트 입력을 가진다. 8×8 승산기A(1320)는 입력으로서 소스1[7:0]과 소스2[7:0]를 가지고 있고 8×8 승산기H(1327)는 입력으로서 소스1[63:56]과 소스2[63:56]를 가지고 있다. 각각의 8×8 승산기는 신호 인에이블(1382)에 연결되어 있다. 각각의 8×8 승산기는 16비트 결과를 만든다. 각각의 승산기에 있어서, 다중화기(예, M×4(1360)와 M×11(1367))는 16비트 결과를 수신한다. 하이/로우 인에이블(1380)의 값에 따라, 각각의 다중화기는 결과의 8 상위비트 또는 8 하위비트를 출력한다. 8개의 다중화기의 출력은 하나의 64비트 결과로 조합된다. 이 결과는 옵션적으로 결과 레지스터2(1372)에 기억된다. 바이트/워드 인에이블(1381)은 연산이 필요한 데이터 요소의 사이즈에 따라, 특정 결과 레지스터를 인에이블하게 한다.
일 실시예에서, 승산을 실현하는데 사용된 영역은 두 개의 8×8 수 또는 하나의 16×16 수 모두를 승산할 수 있는 회로를 만듦으로써 감소된다. 즉, 두 개의 8×8 승산기와 하나의 16×16 승산기는 하나의 8×8 및 16×16 승산기로 조합된다. 연산 제어(1300)는 승산에 대한 적절한 사이즈를 인에이블할 수 있다. 이러한 실시예에서, 승산기에 의해 사용된 물리적인 영역은 감소될 수 있으나, 압축 바이트 승산과 압축 워드 승산을 실행하는 것이 어려울 수 있다. 압축 2배워드 승산을 지원하는 다른 실시예에서, 하나의 승산기는 4개의 8×8 승산, 두 개의 16×16 승산 또는 하나의 32×32승산을 수행할 수 있다.
일 실시예에서, 압축 워드 승산 연산만이 제공된다. 이 실시예에서, 압축 바이트 승산기(1302)와 결과 레지스터2(1372)는 포함되지 않을 수 있다.
명령 세트내에 상기 압축 승산 연산을 포함시키는 잇점
그러므로, 상기 압축 승산 명령은 소스2내의 각각의 데이터 요소에 의한 소스1내의 각각의 데이터 요소의 독립 승산에 대하여 제공한다. 물론, 동일수에 의해 승산될 소스1내의 각각의 요소를 필요로 하는 알고리즘은 소스2내의 각각의 요소에 동일 수를 기억함으로써 수행될 수 있다. 더욱이, 이 승산 명령은 이동 체인을 파괴함으로써 넘침에 대항한다; 그것에 의해, 이 신뢰도의 프로그램머를 릴리스하고, 넘침을 방지하는데 데이터를 준비하는 명령에 대한 필요성을 제거하고, 더 튼튼한 코드를 야기한다.
대조적으로, 이러한 명령을 지원하지 않는 종래의 보통의 프로세서는 데이터 요소를 압축 해제하고, 승산을 수행하고, 추가 압축 처리를 위해 결과를 압축함으로써, 이 연산을 수행하는데 필요하다. 그러므로, 프로세서(109)는 압축 데이터의 상이한 데이터 요소를 하나의 명령을 사용하여 병렬로 상이한 승산기에 승산할 수 있다.
전형적인 멀티미디어 알고리즘은 다수의 승산 연산을 수행한다. 그러므로, 이 승산 연산을 수행하는데 필요한 명령의 수를 줄임으로써, 이 멀티미디어 알고리즘의 성능은 증대된다. 그러므로, 프로세서(109)에 의해 지원된 명령 세트에 이 승산 명령을 제공함으로써, 프로세서(109)는 더 높은 성능 레벨에서 이 기능을 필요로 하는 알고리즘을 실행할 수 있다.
승산-가산/감산
승산-가산/감산 연산
일 실시예에서, 두 개의 승산-가산 연산은 아래의 표 17a 및 표 17b에 도시된 바와 같이 단일 승산-가산 명령을 사용하여 수행된다. 표 17a는 게재된 승산-가산 연산의 간략한 표현을 도시하고, 표 17b는 게재된 승산-가산 명령의 비트 레벨 예를 도시하고 있다.
승산-감산 연산은 가산이 감산으로 대체되는 것을 제외하고 승산-가산 연산과 동일하다. 두 개의 승산-감산 연산을 수행하는 승산-감산 명령예의 연산은 아래의 표 18에 도시되어 있다.
본 발명의 일 실시예에서, SRC1 레지스터는 압축 데이터(소스1)를 포함하고 있고, SRC2 레지스터는 압축 데이터(소스2)를 포함하고 있고, DEST 레지스터는 소스1과 소스2상에서 승산-가산 또는 승산-감산 명령을 수행하는 결과(결과)를 포함할 것이다. 승산-가산 또는 승산-감산 명령의 제1 단계에서, 소스1은 각각의 중간 결과의 세트를 발생시키기 위해 소스2의 각각의 데이터 요소에 의해 독립적으로 승산된 각각의 데이터 요소를 가질 것이다. 승산-가산 명령을 실행할 때, 이 중간 결과는 결과의 데이터 요소로서 기억되어 있는 두 개의 결과적인 데이터 요소를 만드는 페어에 의해 합산된다. 대조적으로, 승산-감산 명령을 실행할 때, 이 중간 결과는 결과의 데이터 요소로서 기억되어 있는 두 개의 결과적인 데이터 요소를 만드는 페어에 의해 공제된다.
대체 실시예는 데이터 성내의 비트의 수를, 중간 결과에서, 및/또는 결과내의 데이터 요소에서 변화시킬 수 있다. 더욱이, 대체 실시예는 소스1, 소스2 및 결과내의 데이터 요소의 수를 변화시킬 수 있다. 예를 들어, 소스1과 소스2가 각각 8 데이터 요소를 가진다면, 승산-가산/감산 명령은 4 데이터 요소(두 개의 중간 결과의 가산을 나타내는 결과내의 각각의 데이터 요소), 2 데이터 요소(4개의 중간 결과의 가산을 나타내는 결과내의 각각의 데이터 요소) 등으로 결과를 만들도록 이행될 수 있다.
도 14는 본 발명의 일 실시예에 따라 압축 데이터상에서 승산-가산과 승산 감산 연산을 수행하는 방법을 설명하는 흐름도이다.
단계(1401)에서, 디코더(202)는 프로세서(109)에 의해 수신된 제어 신호(207)를 디코드한다. 그러므로, 디코더(202)는 디코드한다: 승산-뎃셈 또는 승산-감산 연산에 대한 연산 코드.
단계(1402)에서, 내부 버스(170)를 매개로 하여, 디코더(202)는 SRC1(602)과 SRC2(603) 어드레스가 주어진 레지스터 파일(150)내의 레지스터(209)에 액세스한다. 레지스터(209)는 SRC1(602) 레지스터(소스1)에 기억된 압축 데이터와 SRC2(603) 레지스터(소스2)에 기억된 압축 데이터를 실행 유니트(130)에 제공한다. 즉, 레지스터(209)는 압축 데이터를 내부 버스(170)를 매개로 하여 실행 유니트(130)에 전달한다.
단계(1403)에서, 디코더(202)는 실행 유니트(130)가 그 명령을 수행하게 한다. 그 명령이 승산-가산 명령이다면, 단계(1414)로 진행한다. 그러나, 그 명령이 승산-감산 명령이다면, 단계(1415)로 진행한다.
단계(1414)에서, 다음이 수행된다. 소스1 비트15에서 비트0까지는 제1 32비트 중간 결과(중간 결과1)를 만들어 소스2 비트15에서 비트0까지에 의해 승산된다. 소스1 비트31에서 16까지는 제2 32비트 중간 결과(중간 결과2)를 만들어 소스2 비트31에서 16까지에 의해 승산된다. 소스1 비트47에서 32까지는 제3 32비트 중간 결과(중간 결과3)를 만들어 소스2 비트47에서 32까지에 의해 승산된다. 소스1 비트63에서 48까지는 제4 32비트 중간 결과(중간 결과4)를 만들어 소스2 비트63에서 48까지에 의해 승산된다. 중간 결과1은 그 결과의 비트31에서 0까지를 만들어 중간 결과2에 더해지고, 중간 결과3은 그 결과의 비트63에서 32까지를 만들어 중간결과4에 더해진다.
단계(1415)는 중간 결과1과 중간 결과2가 그 결과의 비트31에서 0까지를 만들도록 감산되고, 결과3과 중간 결과4는 그 결과의 비트63에서 32까지를 만들도록 감산되는 것을 제외하고 단계(1414)와 동일하다.
상이한 실시예가 직렬로, 병렬로, 또는 직렬과 병렬 연산의 일부 조합으로 승산과 가산/감산을 수행될 수 있다.
단계(1420)에서, 결과는 DEST 레지스터에 기억된다.
압축 데이터 승산-가산/감산 회로
일 실시예에서, 승산-가산과 승산-감산 연산의 각각은 압축해제 데이터상에서의 단일 승산과 동일 수의 클록 사이클로 승산 데이터 요소상에서 일어날 수 있다. 동일 수의 클록 사이클로 실행을 얻기 위해서, 병렬 처리가 사용된다. 즉, 레지스터는 승산-가산 또는 승산-감산 연산을 그 데이터 요소상에서 수행하도록 동시에 명령된다. 이것은 아래에 더 상세히 논의된다.
도 15는 본 발명의 일 실시예에 따라 승산-가산 및/또는 승산-감산 연산을 압축 데이터상에서 수행하는 회로를 설명하고 있다. 연산 제어(1500)는 승산-가산과 승산-감산 명령에 대한 제어신호를 처리한다. 연산 제어(1500)는 압축 승산-더셈기/감산기(1501)에서 인에이블(1580)상에 신호를 출력한다.
압축 승산-가산기/감산기(1501)는 다음 입력: 소스1[63:0](1531), 소스2[63:0](1533), 및 인에이블(1580)을 가지고 있다. 압축 승산-가산기/감산기(1501)는 4개의 16×16 승산기 회로: 16×16 승산기A(1510), 16×16 승산기B(1511), 16×16 승산기C(1512), 및 16×16 승산기D(1513)를 포함하고 있다. 16×16 승산기A(1510)는 입력으로서 소스[15:0]과 소스2[15:0]를 가지고 있다. 16×16 승산기B(1511)는 입력으로서 소스1[31:16]과 소스2[31:16]를 가지고 있다. 16×16 승산기C(1512)는 입력으로서 소스1[47:32]과 소스2[47:32]를 가지고 있다. 16×16 승산기D(1513)는 입력으로서 소스1[63:48]과 소스2[63:48]를 가지고 있다. 16×16 승산기A(1510)와 16×16 승산기B(1511)에 의해 발생된 32비트 중간 결과는 가상 가산기/감산기(1550)에 의해 수신되고, 16×16 승산기C(1512)와 16×16 승산기D(1513)에 의해 발생된 32비트 중간 결과는 가상 가산기/감산기(1551)에 의해 수신된다.
현 명령이 승산-가산 명령인지 가산-감산 명령인지를 근거로 하여, 가상 가산기/감산기(1550)와 가상 가산기/감산기(1551)는 그것의 각각의 32비트 입력을 더하거나 뺀다. 가상 가산기/감산기(1550)의 출력(즉, 그 결과의 비트31에서 0까지)과 가상 가산기/감산기(1551)의 출력(즉, 그 결과의 비트63에서 32까지)은 64비트 결과로 조합되어 결과 레지스터(1571)에 전달된다.
일 실시예에서, 가상 가산기/감산기(1551)와 가상 가산기/감산기(1550)는 가상 가산기/감산기(1108b)와 가상 가산기/감산기(1108a)와 유사한 방식으로 이행된다(즉, 가상 가산기/감산기(1551)와 가상 가산기/감산기(1550)의 각각은 적절한 전파 딜레이를 가진 4개의 8비트 가산기로 구성되어 있다). 그러나, 대체 실시예는 가상 가산기/감산기(1551)와 가상 가산기/감산기(1550)를 임의 수의 방식으로 이행할 수 있다.
이 승산-가산 명령 또는 승산-감산 명령의 등가를 압축 해제 데이터상에서 연산하는 종래의 프로세서상에서 수행하기 위해서, 필요한 로드 및 기억 연산뿐만 아니라, 4개의 분할 64비트 승산 연산과 2개의 64비트 가산 또는 감산 연산이 필요할 수 있다. 이것은 소스1과 소스1에 대한 비트16보다 높고, 결과에 대한 비트32보다 높은 비트에 사용되는 회로소자와 데이터 라인을 소모한다. 잘 알려진 바와 같이, 이러한 종래 프로세서에 의해 발생된 전체 64비트 결과는 프로그램머에 사용될 수 없을 것이다. 그러므로, 프로그램머는 각각의 결과를 끊어야 할 것이다.
명령 세트내에 상기 승산-가산 연산을 포함시키는 잇점
상기 승산-가산/감산 명령은 다수의 목적으로 사용될 수 있다. 예를 들어, 승산-가산 명령은 복수의 승산과 값의 누산과 승산에 사용될 수 있다. 승산-가산 명령을 이용하는 일부 알고리즘이 나중에 설명된다.
그러므로, 프로세서(109)에 의해 지원된 명령 세트에 설명된 승산-가산 및/또는 승산-감산 명령을 포함시킴으로써, 이 명령이 부족한 종래의 보통 프로세서보다 적은 명령으로 다수의 기능이 수행될 수 있다.
압축 시프트
압축 시프트 연산
본 발명의 일 실시예에서, SRC1 레지스터는 시프트될 데이터(소스1)를 포함하고, SRC2 레지스터는 시프트 카운트를 나타내는 데이터(소스2)를 포함하고, DEST 레지스터는 시프트의 결과(결과)를 포함할 것이다. 즉, 소스1은 시프트 카운트에 의해 독립적으로 시프트된 각각의 데이터 요소를 가질 것이다. 일 실시예에서, 소스2는 부호없는 64비트 스칼라로서 해석된다. 다른 실시예에서, 소스2는 압축 데이터이고 소스1내의 각각의 대응된 데이터 요소에 대한 시프트 카운트를 포함하고 있다.
본 발명의 일 실시예에서, 산술 시프트와 논리 시프트 모두 지원된다. 산술 시프트는 특정수만큼 아래로 각각의 데이터 요소의 비트를 시프트하고 각각의 데이터 요소의 상위 비트를 신호 비트의 초기값으로 채운다. 압축 바이트 데이터에 있어서 7보다 크거나, 압축 워드 데이터에 있어서 15보다 크거나, 압축 2배워드에 있어서 31보다 큰 시프트 카운트는 각각의 결과 데이터 요소가 신호 비트의 초기값으로 채워지게 한다. 논리 시프트는 비트를 위 또는 아래로 시프트함으로써 연산할 수 있다. 시프트 우측 논리에 있어서, 각각의 데이터 요소의 상위 비트는 0으로 채워진다. 시프트 좌측 논리는 각각의 데이터 요소의 최소한의 유효 비트를 0으로 채워지게 한다.
본 발명의 일 실시예에서, 시프트 우측 산술, 시프트 우측 논리 및 시프트 좌측 논리 연산은 압축 바이트와 압축 워드에 대하여 지원된다. 본 발명의 다른 실시예에서, 이 연산은 또한 압축 2배워드에 대하여 지원된다.
도 16은 본 발명의 일 실시예에 따라 압축 시프트 연산을 압축 데이터상에서 수행하는 방법을 설명하는 흐름도이다.
단계(1601)에서, 디코더(202)는 프로세서(109)에 의해 수신된 제어 신호(207)를 디코드한다. 그러므로, 디코더(202)는 디코드한다: 적절한 시프트 연산에 대한 연산; 레지스터(209)내의 SRC1(602), SRC2(603), 및 DEST(605) 어드레스; 포화/불포화(시프트 연산에 필수적으로 필요한 것은 아님), 부호있는/부호없는(필수적으로 필요한 것은 아님), 압축 데이터내의 데이터 요소의 길이.
단계(1602)에서, 내부 버스(170)를 매개로 하여, 디코더(202)는 SRC1(602)와 SRC2(603) 어드레스가 주어진 레지스터 파일(150)내의 레지스터(209)에 액세스한다. 레지스터(209)는 실행 유니트(130)에 SRC1(602) 레지스터(소스1)에 기억된 압축 데이터와 SRC2(603) 레지스터(소스2)에 기억된 스칼라 시프트 카운트를 제공한다. 레지스터(209)는 압축 데이터를 내부 버스9170)를 매개로 하여 실행 유니트(130)에 전달한다.
단계(1603)에서, 디코더(202)는 실행 유니트(130)가 적절한 압축 시프트 연산을 수행하게 한다. 추가로 디코더(202)는 내부 버스(170)를 매개로 하여, 데이터 요소의 사이즈, 시프트 연산의 유형 및 시프트의 방향(논리 시프트에 대한)을 전달한다.
단계(1610)에서, 데이터 요소의 사이즈는 어느 단계가 다음에 실행되는지를 결정한다. 데이터 요소의 사이즈가 8비트(바이트 데이터)이면, 실행 유니트(130)는 단계(1612)를 수행한다. 그러나, 압축 데이터내의 데이터 요소의 사이즈가 16비트(워드 데이터)이면, 실행 유니트(130)는 단계(1614)를 수행한다. 일 실시예에서, 8비트와 16비트 데이터 요소 사이즈 압축 시프트만이 지원된다. 그러나, 다른 실시예에서, 32비트 데이터 요소 사이즈 압축 시프트가 또한 지원된다.
데이터 요소의 사이즈가 8비트라고 가정하면, 단계(1612)가 실행된다. 단계(1612)에서, 다음이 수행된다. 소스1 비트7에서 0까지는 결과 비트7에서 0까지를 만드는 시프트 카운트(소스2 비트63에서 0까지)에 의해 시프트된다. 소스1 비트15에서 8까지는 결과 비트15에서 8까지를 만드는 시프트 카운트에 의해 시프트된다. 소스1 비트23에서 16까지는 결과 비트23에서 16까지를 만드는 시프트 카운트에 의해 시프트된다. 소스1 비트31에서 24까지는 결과 비트31에서 24까지를 만드는 시프트 카운트에 의해 시프트된다. 소스1 비트39에서 32까지는 결과 비트39에서 32까지를 만드는 시프트 카운트에 의해 시프트된다. 소스1 비트47에서 40까지는 결과 비트47에서 40까지를 만드는 시프트 카운트에 의해 시프트된다. 소스1 비트55에서 48까지는 결과 비트55에서 48까지를 만드는 시프트 카운트에 의해 시프트된다. 소스1 비트63에서 56까지는 결과 비트63에서 56까지를 만드는 시프트 카운트에 의해 시프트된다.
데이터 요소의 사이즈가 16비트라고 가정하면, 단계(1614)가 실행된다. 단계(1614)에서, 다음이 수행된다. 소스1 비트15에서 0까지는 결과 비트15에서 0까지를 만드는 시프트 카운트에 의해 시프트된다. 소스1 비트31에서 16까지는 결과 비트31에서 16까지를 만드는 시프트 카운트에 의해 시프트된다. 소스1 비트47에서 32까지는 결과 비트47에서 32까지를 만드는 시프트 카운트에 의해 시프트된다. 소스1 비트63에서 48까지는 결과 비트63에서 48까지를 만드는 시프트 카운트에 의해 시프트된다.
일 실시예에서, 단계(1612)의 시프트는 동시에 수행된다. 그러나, 다른 실시예에서, 이 시프트는 직렬로 수행된다. 또 다른 실시예에서, 이 시프트의 일부는 동시에 수행되고 일부는 직렬로 수행된다. 이 논의는 알려진 바와 같이, 단계(1614)의 시프트에 적용한다.
단계(1620)에서, 결과는 DEST 레지스터에 기억된다.
표 19는 바이트 압축 시프트 우측 산술 연산의 레지스터내 표현을 설명하고 있다. 비트의 제2행은 소스2의 데이터 표현이다. 비트의 제3행은 결과의 압축 데이터 표현이다. 각각의 데이터 요소 비트 아래의 숫자는 데이터 요소수이다. 예를 들어, 소스1 데이터 요소3은 100000002이다.
표 20은 압축 바이트 데이터상에서의 압축 시프트 우측 논리 연산의 레지스터내 표현을 설명하고 있다.
표 21은 압축 바이트 데이터상에서의 압축 시프트 좌측 논리연산의 레지스터내 표현을 설명하고 있다.
압축 데이터 시프트 회로
일 실시예에서, 시프트 연산은 압축 해제 데이터상에서의 단일 시프트 연산과 동일수의 클록 사이클로 가산 데이터 요소상에서 일어날 수 있다. 동일수의 클록 사이클로 실행을 얻기 위해서, 병렬 처리가 사용된다. 즉, 레지스터는 시프트 연산을 데이터 요소상에서 수행하도록 동시에 명령된다. 이것은 아래에 더 상세히 설명된다.
도 17은 본 발명의 일 실시예에 따라 압축 시프트를 압축 데이터의 개별 바이트상에서 수행하는 회로를 설명하고 있다. 도 17은 개정된 바이트 슬라이스 시프트 회로, 바이트 슬라이스 스테이지i(1799)의 사용을 설명하고 있다. 대다수의 유효 데이터 요소 바이트 슬라이스를 제외하고, 각각의 바이트 슬라이스는 시프트 유니트와 비트제어부를 포함하고 있다. 대다수의 유효 데이터 요소 바이트 슬라이스는 시프트 유니트만을 가질 필요가 있다.
시프트 유니트i(1711)와 시프트 유니트i+1(1771) 각각은 소스1에서의 8비트가 시프트 카운트에 의해 시프트되게 한다. 일 실시예에서, 각각의 시프트 유니트는 공지된 8비트 시프트 회로와 같이 연산한다. 각각의 시프트 유니트는 소스1 입력, 소스2 입력, 제어 입력, 다음 스테이지 신호, 최종 스테이지 신호, 및 결과 출력을 가지고 있다. 그러므로, 시프트 유니트i(1711)는 소스1i(1731) 입력, 소스2[63:0] (1733) 입력, 제어i(1701) 입력, 다음 스테이지i(1713) 신호, 최종 스테이지i(1712) 입력, 및 결과 레지스터i(1751)에 기억된 결과를 가지고 있다. 그러므로, 시프트 유니트i+1(1771)는 소스1i+1(1732) 입력, 소스2[63:0](1733) 입력, 제어i+1(1702) 입력, 다음 스테이지i+1(1773) 신호, 최종 스테이지i+1(1772) 입력, 및 결과 레지스터i=1(1752)에 기억된 결과를 가지고 있다.
소스1 입력은 전형적으로 소스1의 8비트 부분이다. 그 8비트는 가장 적은 유형의 데이터 요소, 하나의 압축 바이트 데이터 요소를 나타낸다. 소스2 입력은 시프트 카운트를 나타낸다. 일 실시예에서, 각각의 시프트 유니트는 소스2[63:0](1733)로부터 동일 시프트 카운트를 수신한다. 연산 제어(1700)는 각각의 시프트 유니트가 필요한 시프트를 수행할 수 있게 제어 신호를 전송한다. 그 제어신호는 시프트의 유형(산술/논리) 및 시프트의 방향으로 결정된다. 다음 스테이지 신호는 그 시프트 유니트에 대한 비트 제어로부터 수신된다. 그 시프트 유니트는 시프트의 방향(좌/우)에 따라, 다음 스테이지 신호상에서 대다수의 유효 비트 아웃/인을 시프트할 것이다. 유사하게, 각각의 시프트 유니트는 시프트의 방향(좌/우)에 따라, 최종 스테이지 신호상에서 최소의 유효 비트 아웃/인을 시프트할 것이다. 최종 스테이지 신호는 앞의 스테이지의 비트 제어 유니트로부터 수신된다. 결과 출력은 시프트 유니트가 연산하는 소스1의 부분에서의 시프트 연산의 결과를 나타낸다.
비트제어i(1720)는 압축 데이터 인에이블i(1706)을 매개로 하여, 연산 제어(1700)로부터 인에이블된다. 비트제어i(1720)는 다음 스테이지i(1713)와 최종 스테이지i+1(1772)를 제어한다. 예를 들어, 시프트 유니트i(1711)가 소스1의 8 최소 유효 비트에 책임이 있고, 시프트 유니트i(1711)가 소스1의 다음 8비트에 책임이 있다고 가정하다. 압축 바이트상에서의 시프트가 수행된다면, 비트제어i(1720)는 시프트 유니트i+1(1771)로부터의 최소 유효 비트가 시프트 유니트i(1711)의 최대 유효 비트로 전달되게 할 수 없을 것이다. 그러나, 압축 워드상에서의 시프트가 수행되면 비트제어i(1720)는 시프트 유니트i+1(1771)로부터의 최소 유효비트가 시프트 유니트i(1711)의 최대 유효비트로 전달되게 할 것이다.
예를 들어, 표 22에서, 압축 바이트 산출 시프트 우측이 실행된다. 시프트 유니트i+1(1771)는 데이터 요소1상에서 연산하고, 시프트 유니트i(1771)는 데이터 요소상에서 연산한다고 가정하자. 시프트 유니트i+1(1771)는 최소 유효비트를 외부로 시프트한다. 그러나, 연산제어(1700)는 비트제어i(1720)가 최종 스테이지i+1(1721)로부터 수신된 그 비트를 다음 스테이지i(1713)으로의 전파를 멈추게 할 것이다. 대신, 시프트 유니트i(1711)는 상위비트를 신호비트, 소스1[7]로 채울 것이다.
그러나, 압축워드 산술 시프트가 수행된다면, 시프트 유니트i+1(1771)의 최소 유효비트는 시프트 유니트i(1711)의 최대 유효비트로 전달될 것이다. 표 23은 이 결과를 설명하고 있다. 이 전달은 뿐만 아니라 압축 2배워드 시프트를 허용할 것이다.
각각의 시프트 유니트는 결과 레지스터에 옵션적으로 연결된다. 그 결과 레지스터는 완전한 결과, 결과[63:0](1760)가 DEST 레지스터에 전송될 때까지, 시프트 연산의 결과를 일시적으로 기억한다.
완전한 64비트 압축 시프트 회로에 있어서, 8시프트 유니트와 7비트 제어 유니트가 사용된다. 또한, 이러한 회로는 시프트를 64비트 압축해제 데이터상에서 수행하는데 사용될 수 있고, 이것에 의해 압축해제 시프트 연산과 압축 시프트 연산을 수행하는 동일 회로를 사용한다.
명령 세트내에 상기 시프트 연산을 포함시키는 잇점
상기 압축 시프트 명령은 소스1의 각각의 요소가 지시된 시프트 카운트에 의해 시프트되게 한다. 이 명령을 명령 세트에 포함시킴으로써, 압축 데이터의 각각의 요소는 단일 명령을 사용하여 시프트될 것이다. 대조적으로, 이러한 연산을 지원하지 않는 종래의 보통 프로세서는 압축해제 소스1에서 다수의 명령을 수행해야 하고, 개별적으로 각각의 압축 해제 데이터 요소를 시프트하여, 추가 압축 처리를 위해 그 결과를 압축 데이터 포맷으로 압축한다.
이동 연산
이동 연산은 데이터를 레지스터(209)에 또는 레지스터(209)로부터 이동시킨다. 일 실시예에서, SRC2(603)는 소스 데이터를 포함하는 어드레스이고, DEST (605)는 데이터가 이동될 어드레스이다. 이러한 실시예에서, SRC1(602)는 사용되지 않을 것이다. 다른 실시예에서, SRC1(602)는 DEST(605)와 같다.
이동 연산의 설명을 위해서, 레지스터와 메모리 위치 사이에 명확히 도시되어 있다. 레지스터는 레지스터 파일(150)에서 발견되고, 메모리는 예를 들어, 캐시(160), 메인 메모리(104), ROM(106), 데이터 기억 장치(107)에 있을 수 있다.
이동 연산은 메모리에서 레지스터(209)로, 레지스터(209)에서 메모리로, 그리고 레지스터(209)내의 레지스터에서 레지스터(209)내의 제2 레지스터로 데이터를 이동시킬 수 있다. 일 실시예에서, 압축 데이터는 정수 데이터를 기억하는데 사용된 레지스터와 상이한 레지스터에 기억된다. 이러한 실시예에서, 이동 연산은 데이터를 정수 레지스터(201)에서 레지스터(209)로 이동할 수 있다. 예를 들어, 프로세서(109)에서, 압축 데이터가 레지스터(209)에 기억되고 정수 데이터가 정수 레지스터(201)에 기억되어 있다면, 이동 명령은 데이터를 정수 레지스터(201)에서 레지스터(209)로, 및 역으로 이동하는데 사용될 수 있다.
일 실시예에서, 메모리 어드레스가 이동에 대하여 지시될 때, 메모리 위치(최소 유효 바이트를 포함하고 있는 메모리 위치)에서의 데이터의 8바이트는 레지스터(209)내의 레지스터에 로드되거나, 그 레지스터로부터 기억된다.
레지스터(209)내의 레지스터가 지시될 때, 그 레지스터의 내용은 레지스터(209)내의 제2 레지스터로부터 로드되거나 제2 레지스터에 이동된다. 정수 레지스터(201)가 길이로 64비트이고, 정수 레지스터가 지정된다면, 그 정수 레지스터내의 데이터의 8바이트는 레지스터(209)내의 레지스터에 로드되거나 그 레지스터로부터 기억된다.
일 실시예에서, 정수는 32비트로 표현된다. 이동연산이 레지스터(209)에서 정수 레지스터(201)로 수행될 때, 압축 데이터의 로우 32비트만이 지정 정수 레지스터로 이동된다. 일 실시예에서, 상위 32비트는 제로화된다. 유사하게, 레지스터(209)내의 레지스터의 로우 32비트만이 정수 레지스터(201)에서 레지스터(209)로 이동될 때 로드된다. 일 실시예에서, 프로세서(109)는 레지스터(209)내의 레지스터와 메모리 사이에 32비트 이동 연산을 지원한다. 다른 실시예에서, 단지 32비트의 이동이 압축 데이터의 하이 순위 32비트상에서 수행된다.
압축 연산
본 발명의 일 실시예에서, SRC1(602) 레지스터는 데이터(소스1)를 포함하고 있고, SCR2(603) 레지스터는 데이터(소스2)를 포함하고 있고, DEST(605) 레지스터는 그 연산의 결과 데이터(결과)를 포함할 것이다. 즉, 소스1의 부분과 소스2의 부분은 함께 결과를 발생시키도록 압축될 것이다.
일 실시예에서, 압축 연산은 소스 압축 워드(또는 2배워드)의 하위 바이트(또는 워드)를 그 결과의 바이트(또는 워드)로 압축함으로써, 압축 워드(또는 2배워드)를 압축 바이트(또는 워드)로 변환한다. 일 실시예에서, 압축 연산은 쿼드 압축 워드를 압축 2배워드로 변환한다. 이 연산은 신호 데이터로 옵션적으로 수행될 수 있다. 더욱이, 이 연산은 옵션적으로 포화로 수행될 수 있다. 대체 실시예에서, 각각의 데이터 요소의 상위부분에서 연산하는 추가 압축 연산이 포함되어 있다.
도 18은 본 발명의 일 실시예에 따라 압축 연산을 압축 데이터상에서 수행하는 방법을 설명하는 흐름도이다.
단계(1801)에서, 디코더(202)는 프로세서(109)에 의해 수신된 제어 신호(207)를 디코드한다. 그러므로, 디코더(202)는 디코드한다: 적절한 압축 연산에 대한 연산 코드; SRC1(602), SRC2(603), 및 레지스터(209)내 DEST(605) 어드레스; 포화/불포화, 부호있는/부호없는, 및 압축 데이터내의 데이터 요소의 길이. 앞서 언급된 바와 같이, SRC1(602)(또는 SRC2(603))은 DEST(605)로서 사용될 수 있다.
단계(1802)에서, 내부버스(170)를 매개로 하여, 디코더(202)는 SRC1(602)과 SRC2(603) 어드레스가 주어진 레지스터 파일(150)내의 레지스터(209)에 액세스한다. 레지스터(209)는 SRC1(602) 레지스터(소스2)에 기억된 압축 데이터와 SRC2(603) 레지스터(소스2)에 기억된 압축 데이터를 실행 유니트(130)에 제공한다. 즉, 레지스터(209)는 압축 데이터를 내부 버스(170)를 매개로 하여 실행 유니트(130)에 전달한다.
단계(1803)에서, 디코더(202)는 실행 유니트(130)가 적절한 압축 연산을 수행하게 한다. 디코더(202)는 내부 버스(170)를 매개로 하여, 소스1과 소스2내의 데이터 요소의 사이즈와 포화를 추가로 전달한다. 포화는 결과 데이터 요소내의 데이터 값을 최대화하는데 옵션적으로 사용된다. 소스1 또는 소스2내의 데이터 요소 값이 결과의 데이터 요소가 표현할 수 있는 값의 범위보다 적거나 크다면, 관련 결과 데이터 요소는 최대 또는 최소값에 설정된다. 예를 들어, 소스1과 소스2의 워드 데이터 요소내의 신호값이 0×80(또는 2배워드에 대한 0×8000)보다 적으면, 결과 바이트(또는 워드) 데이터 요소는 0×80(또는 2배워드에 대한 0×8000)에 고정된다. 소스1과 소스2의 워드 데이터 요소내의 신호값이 0×7F(또는 2배워드에 대한 0×7FFF)보다 크다면, 결과 바이트(또는 워드) 데이터 요소는 0×7F(또는 0×7FFF)에 고정된다.
단계(1810)에서, 데이터 요소의 사이즈는 어느 단계가 다음에 실행되어야 하는지를 결정한다. 데이터 요소의 사이즈가 16비트(압축 워드(402) 데이터)라면, 실행 유니트(130)는 단계(1812)를 수행한다. 그러나, 압축 데이터내의 데이터 요소의 사이즈가 32비트(압축 2배워드(403) 데이터)라면, 실행 유니트(130)는 단계(1814)를 수행한다.
소스 데이터 요소의 사이즈가 16비트라고 가정하면, 단계(1812)가 실행된다. 단계(1812)에서, 다음이 수행된다: 소스1 비트7에서 0는 결과 비트7에서 0이다. 소스1 비트23에서 16은 결과 비트15에서 8이다. 소스1 비트39에서 32는 결과 비트23에서 16이다. 소스1 비트63에서 56은 결과 비트31에서 24이다. 소스2 비트7에서 0은 결과 비트39에서 32이다. 소스2 비트23에서 16은 결과 비트47에서 40이다. 소스2 비트39에서 32는 결과 비트55에서 48이다. 소스2 비트63에서 56은 결과 비트31에서 24이다. 포화가 설정되면, 각각의 워드의 상위 비트는 결과 데이터 요소가 고정되었는지를 결정하기 위해 시험된다.
소스 데이터 요소의 사이즈가 32비트라고 가정하면, 단계(1814)가 실행된다. 단계(1814)에서, 다음이 수행된다: 소스1 비트15에서 0은 결과 비트15에서 0이다. 소스1 비트47에서 32은 결과 비트31에서 16이다. 소스2 비트15에서 0은 결과 비트47에서 32이다. 소스2 비트47에서 32는 결과 비트63에서 48이다. 포화가 설정되면, 각각의 2배워드의 상위 비트는 결과 데이터 요소가 고정되었는지를 결정하기 위해 시험된다.
일 실시예에서, 단계(1812)의 압축은 동시에 수행된다. 그러나, 다른 실시예에서, 이 압축은 직렬로 수행된다. 다른 실시예에서, 압축의 일부는 동시에 수행되고 일부는 직렬로 수행된다. 이 논의는 또한 단계(1814)의 압축에 적용한다.
단계(1820)에서, 결과는 DEST(605) 레지스터에 기억된다.
표 24는 압축 워드 연산의 레지스터내 표현을 설명하고 있다. 예약된 HS와 LS은 각각 소스1과 소스2내의 각각의 16비트 데이터 요소의 상위와 하위 비트를 나타낸다. 예를 들어, AL은 소스1내의 데이터 요소(A)의 하위 8비트를 나타낸다.
표 25는 예약된 HS와 LS가 각각 소스1과 소스2내의 각각의 32비트 데이터 요소의 상위 하위 비트를 나타낸다.
압축 회로
본 발명의 일 실시예에서, 압축 연산의 효율적인 실행을 얻기 위해서, 병렬처리가 사용된다. 도 19a와 도 19b는 본 발명의 일 실시예에 따라 압축 연산을 압축 데이터상에서 수행하는 회로를 설명하고 있다. 이 회로는 압축 연산을 포화로 옵션적으로 수행할 수 있다.
도 19a와 도 19b의 회로는 연산 제어(1900), 결과 레지스터(1952), 결과 레지스터(1953), 8개의 16비트에서 8비트 시험 포화 회로, 및 4개의 32비트에서 16비트 시험 포화 회로를 포함하고 있다.
연산 제어(1900)는 압축 연산을 인에이블하는 디코더(202)로부터 정보를 수신한다. 연산 제어(1900)는 시험 포화 회로 각각에 대한 포화를 인에이블하게 하는 포화값을 사용한다. 소스 압축 데이터의 사이즈가 워드 압축 데이터(503)이면, 출력 인에이블(1931)은 연산 제어(1900)에 의해 설정된다. 이것은 결과 레지스터(1952)의 출력을 인에이블한다. 소스 압축 데이터의 사이즈가 2배워드 압축 데이터(504)이면, 출력 인에이블(1932)은 연산 제어(1900)에 의해 설정된다. 이것은 출력 레지스터(1953)의 출력을 인에이블한다.
각각의 시험 포화 회로는 포화에 대하여 선택적으로 시험할 수 있다. 포화에 대한 시험이 불가능하다면, 각각의 시험 포화 회로는 거의 결과 레지스터내의 관련 위치에 하위 비트를 전달한다. 포화에 대한 시험이 인에이블하다면, 각각의 시험포화회로는 그 결과가 고정되어 있는지를 결정하기 위해 상위 비트를 시험한다.
시험 포화(1910)에서 시험 포화(1917)는 16비트 입력과 8비트 출력을 각진다. 8비트 출력은 입력의 하위 8비트이거나, 옵션적으로, 고정된 값(0×80, 0×7F, 또는 0×FF)이다. 시험 포화(1910)는 소스1 비트15에서 0을 수신하고 시험 레지스터(1952)에 대한 비트7에서 0을 출력한다. 시험 포화(1911)는 소스1 비트31에서 16을 수신하고 결과 레지스터(1952)에 대한 비트15에서 8을 출력한다. 시험 포화(1912)는 소스1 비트47에서 32를 수신하고 결과 레지스터(1952)에 대한 비트23에서 16을 출력한다. 시험 포화(1913)는 소스1 비트63에서 48을 수신하고 결과 레지스터(1952)에 대한 비트31에서 24를 출력한다. 시험 포화(1914)는 소스2 비트15에서 0을 수신하고 결과 레지스터(1952)에 대한 비트39에서 32를 출력한다. 시험 포화(1915)는 소스2 비트31에서 16을 수신하고 결과 레지스터(1952)에 대한 비트47에서 40을 출력한다. 시험 포화(1916)는 소스2 비트47에서 32을 수신하고 결과 레지스터(1952)에 대한 비트55에서 48을 출력한다. 시험 포화(1917)는 소스2 비트63에서 48을 수신하고 결과 레지스터(1952)에 대한 비트63에서 56을 출력한다.
시험 포화(1920)에서 시험 포화(1923)는 32비트 입력과 16비트 출력을 가지고 있다. 16비트 출력은 입력의 더 하위의 16비트이거나, 고정된 값(0×8000, 0×7FFF, 또는 0×FFFF)이다. 시험 포화(1920)는 소스1 비트31에서 0을 수신하고 결과 레지스터(1953)에 대한 비트15에서 0을 출력한다. 시험 포화(1921)는 소스1 비트63에서 32을 수신하고 결과 레지스터(1953)에 대한 비트31에서 16을 출력한다. 시험 포화(1922)는 소스2 비트31에서 0을 수신하고 결과 레지스터(1953)에 대한 비트47에서 32을 출력한다. 시험 포화(1923)는 소스2 비트63에서 32을 수신하고 결과 레지스터(1953)의 비트63에서 48을 출력한다.
예를 들어, 표 26에서, 포화없이 부호없는 압축 워드가 수행된다. 연산 제어(1900)는 결과 레지스터(1952)가 결과[63:0](1960)를 출력하게 할 것이다.
그러나, 포화없이 부호없는 압축 2배워드가 수행된다면, 연산 제어(1900)는 결과 레지스터(1953)가 결과[63:0](1960)를 출력하게 할 것이다. 표 27는 이 결과를 설명하고 있다.
명령 세트내에 상기 압축 연산을 포함시키는 잇점
상기 압축 명령은 소정된 수의 비트를 그 결과를 발생시키는 소스1과 소스2내의 각각의 데이터 요소로부터 압축한다. 이 방식으로, 프로세서(109)는 종래의 보통 프로세서에 필요한 명령의 절반만큼 데이터를 압축할 수 있다. 예를 들어, 4개의 16비트 데이터 요소를 포함하고 있는 결과를 4개의 32비트 데이터 요소로부터 발생시키는 것은 아래에 도시된 바와 같이, 단지 하나의 명령(2명령에 대향하는 바와 같이)을 필요로 한다.
전형적인 멀티미디어 응용예는 데이터의 다량을 압축한다. 그러므로, 절반정도 이 데이터를 압축하는데 필요한 명령의 수를 줄임으로써, 이 멀티미디어 응용예의 성는은 증대된다.
압축 해제 연산
압축 해제 연산
일 실시예에서, 압축 해제 연산은 하위 압축 바이트, 결과 압축 바이트를 발생시키는 두 개의 소스 압축 데이터의 워드 또는 2배워드, 워드, 또는 2배워드를 끼워 놓는다. 이 연산은 여기에서는 압축 로우 연산으로 명칭된다. 다른 실시예에서, 압축 해제 연산은 상위 요소(압축 해제 하이 연산으로 명칭)을 또한 끼워놓을 수 있다.
도 20은 본 발명의 일 실시예에 따라서 압축 해제 연산을 압축 데이터상에서 수행하는 방법을 설명하는 흐름도이다.
단계(2001)와 단계(2002)가 먼저 실행된다. 단계(2003)에서, 디코더(202)는 실행 유니트(130)가 압축 해제 연산을 수행하게 한다. 디코더(202)는 내부 버스(170)를 매개로 하여, 소스1과 소스2내의 데이터 요소의 사이즈를 전달한다.
단계(2010)에서, 데이터 요소의 사이즈는 어느 단계가 다음에 실행되는지를 결정한다. 데이터 요소의 사이즈가 8비트(압축 바이트(401) 데이터)이면, 실행 유니트(130)는 단계(2012)를 수행한다. 그러나, 압축 데이터내의 데이터 요소의 사이즈가 16비트(압축 워드(402) 데이터)이면, 실행 유니트(130)는 단계(2014)를 실행한다. 그러나, 압축 데이터내의 데이터 요소의 사이즈가 32비트(압축 2배워드(503) 데이터)이면, 실행 유니트(130)는 단계(2016)를 수행한다.
소스 데이터 요소의 사이즈가 8 비트라고 가정하면, 단계(2012)가 실행된다. 단계(2012)에서, 다음이 수행된다: 소스1 비트7에서 0는 결과 비트7에서 0이다. 소스2 비트7에서 0은 결과 비트15에서 8이다. 소스1 비트15에서 8은 결과 비트23에서 16이다. 소스2 비트15에서 8은 결과 비트31에서 24이다. 소스1 비트23에서 16은 결과 비트39에서 32이다. 소스2 비트23에서 16은 결과 비트47에서 40이다. 소스1 비트31에서 24는 결과 비트55에서 48이다. 소스2 비트31에서 24는 결과 비트56이다.
소스 데이터 요소의 사이즈가 16비트라고 가정하면, 단계(2014)가 실행된다. 단계(2014)에서, 다음이 수행된다: 소스1 비트15에서 0은 결과 비트15에서 0이다. 소스2 비트15에서 0은 결과 비트31에서 16이다. 소스1 비트31에서 16은 결과 비트47에서 32이다. 소스2 비트31에서 16는 결과 비트63에서 48이다.
소스 데이터 요소의 사이즈가 32비트라고 가정하면, 단계(2016)가 실행된다. 단계(2016)에서, 다음이 수행된다. 소스1 비트31에서 0은 결과 비트31에서 0이다. 소스2 비트31에서 0은 결과 비트63에서 32이다.
일 실시예에서, 단계(2012)의 압축 해제는 동시에 수행된다. 그러나, 다른 실시예에서, 이 압축 해제는 직렬로 수행된다. 또 다른 실시예에서, 압축 해제의 일부는 동시에 수행되고 일부는 직렬로 수행된다. 이 논의는 또한 단계(2014)와 단계(2016)의 압축 해제에 적용한다.
단계(2020)에서, 그 결과는 DEST(605) 레지스터에 기억된다.
표 29는 압축 해제 2배워드 연산(데이터 요소(A0-1, B0-1)의 각각은 32비트를 포함)의 레지스터내 표현을 설명하고 있다.
표 30은 압축 해제 워드 연산(데이터 요소(A0-3, B0-3)의 각각은 16비트를 포함)의 레지스터내 표현을 설명하고 있다.
표 31은 압축 해제 바이트 연산(데이터 요소(A0-7, B0-7)의 각각은 8비트를 포함)의 레지스터내 표현을 설명하고 있다.
압축 해제 회로
도 21은 본 발명의 일 실시예에 따라 압축 해제 연산을 압축 데이터상에서 수행하는 회로를 설명하고 있다. 도 21의 회로는 연산 제어 회로(2100), 결과 레지스터(2152), 결과 레지스터(2153), 및 결과 레지스터(2154)를 포함하고 있다.
연산 제어(2100)는 압축 해제 연산을 할 수 있는 디코더(202)로부터 정보를 수신한다. 소스 압축 데이터의 사이즈가 바이트 압축 데이터(502)이면, 출력 인에이블(2132)은 연산 제어(2100)에 의해 설정된다. 이것은 결과 레지스터의 출력을 인에이블하게 한다. 소스 압축 데이터의 사이즈가 워드 압축 데이터(503)이면, 출력 인에이블(2133)은 연산 제어(2100)에 의해 설정된다. 이것은 출력 레지스터(2153)의 출력을 인에이블한다. 소스 압축 데이터의 사이즈가 2배워드 압축 데이터(504)이면, 출력 인에이블(2134)은 연산 제어(2100)에 의해 설정된다. 이것은 출력 결과 레지스터(2154)의 출력을 인에이블한다.
결과 레지스터(2152)는 다음 입력을 가지고 있다. 소스1 비트7에서 0은 결과 레지스터(2152)에 대한 비트7에서 0이다. 소스7 비트7에서 0은 결과 레지스터(2152)에 대한 비트15에서 8이다. 소스1 비트15에서 8은 결과 레지스터(2152)에 대한 비트23에서 16이다. 소스2 비트15에서 8은 결과 레지스터(2152)에 대한 비트31에서 24이다. 소스1 비트23에서 16은 결과 레지스터(2152)에 대한 비트39에서 32이다. 소스2 비트23에서 16은 결과 레지스터(2152)에 대한 비트47에서 40이다. 소스1 비트31에서 24는 결과 레지스터(2152)에 대한 비트55에서 48이다. 소스2 비트31에서 24는 결과 레지스터(2152)에 대한 비트63에서 56이다.
결과 레지스터(2153)은 다음 입력을 가지고 있다. 소스1 비트15에서 0은 결과 레지스터(2153)에 대한 비트15에서 0이다. 소스2 비트15에서 0은 결과 레지스터(2153)에 대한 비트31에서 16이다. 소스1 비트31에서 16은 결과 레지스터(2153)에 대한 비트47에서 32이다. 소스2 비트31에서 16은 결과 레지스터(1953)의 비트63에서 48이다.
결과 레지스터(2154)는 다음 입력을 가지고 있다. 소스1 비트31에서 0은 결과 레지스터(2154)에 대한 비트31에서 0이다. 소스2 비트31에서 0은 결과 레지스터(2154)에 대한 비트63에서 32이다.
예를 들어, 표 32에서, 압축 해제 워드 연산이 수행된다. 연산 제어(2100)는 결과 레지스터(2153)가 결과[63:0](2160)를 출력하게 할 것이다.
그러나, 압축 해제 2배워드가 수행되면, 연산 제어(2100)는 결과 레지스터(2154)가 결과[63:0](2160)를 출력하게 할 것이다. 표 33은 이 결과를 설명하고 있다.
명령 세트내에 상기 압축 해제 명령을 포함시키는 잇점
상기 압축 해제 명령을 명령 세트에 포함시킴으로써, 압축 데이터가 끼워지거나 압축해제될 수 있다. 이 압축 해제 명령은 소스2 데이터 요소 모두를 0으로 만듦으로써 압축 데이터를 압축 해제하는데 사용될 수 있다. 바이트를 압축해제하는 예가 아래의 표 34a에 도시되어 있다.
이 동일 압축 해제 명령은 표 34b에 도시된 바와 같이 데이터를 끼우는데 사용될 수 있다. 끼우는 것은 다수의 멀티미디어 알고리즘에 유용하다. 예를 들어, 끼우는 것은 매트릭스를 옮기고 화소를 보간하는데 유용하다.
프로세서(109)에 의해 지원된 명령 세트중 이러한 압축 해제 명령을 제공하여, 프로세서(109)는 다용도로 쓰이고 이 기능을 요구하는 알고리즘을 더 높은 성능으로 실행할 수 있다.
개체 카운트
개체 카운트
본 발명의 일 실시예는 개체 카운트 연산을 압축된 데이터로 수행가능하게 한다. 즉, 본 발명은 제1 압축 데이터의 각각의 데이터 요소에 대한 결과 데이터 요소를 발생한다. 각각의 결과 데이터 요소는 제1 압축 데이터의 대응 데이터 요소 각각에 설정된 다수의 비트를 나타낸다. 일 실시예에서는, 하나로 설정된 비트의 총 수가 카운트된다.
표 35a는 압축 데이터상의 개체 카운트 연산의 내부 레지스터 표현를 설명한다. 제1 로우 비트는 소스1 압축 데이터의 압축 데이터 표현이다. 제2 로우 비트는 결과 압축 데이터의 압축 데이터 표현이다. 각 데이터 요소 밑의 번호는 데이터 요소 번호이다. 예를 들면, 소스1 데이터 요소 0 은 10001111100010002이다. 그러므로, 만약 데이터 요소들이 16비트의 길이라면(워드 데이터),그리고 개체 카운트 연산이 수행되면, 실행 유니트(130)는 도시된 바와 같이 결과 압축 데이터를 발생한다.
또 다른 실시예에서, 개체 카운터는 8 비트 데이터 요소상에서 수행된다. 표 35b는 8개의 8비트 압축 데이터 요소를 가진 압축 데이터상의 개체 카운트의 내부 레지스터 표현를 설명한다.
또 다른 실시예에서, 개체 카운터는 32비트 데이터 요소상에서 수행된다. 표 35c는 두 개의 32 비트 압축 데이터 요소를 가진 압축 데이터상에서 개체 카운트의 내부 레지스터 표현를 설명한다.
또한 개체 카운트는 64비트 정수 데이터에서 수행될 수 있다. 즉, 하나로 설정된 비트 번호는 64비트 데이터로 합쳐진다. 표 35d는 64비트 정수 데이터인 개체 카운트의 내부 레지스터 표현를 설명한다.
개체 카운트 실행 방법
도 22는 발명의 일 실시예에 따라 압축 데이터상에서 개체 카운트를 수행하는 방법을 설명하는 흐름도이다. 단계(2201)에서, 제어 신호(207)를 수신함에 따라, 디코더(202)는 그 제어 신호(207)를 디코드한다. 일 실시예에서, 제어 신호(207)는 캐쉬(160)에 의해 공급된다. 따라서, 디코더(202)는 개체 카운트용 연산 코드, 및 레지스터(209)의 SRC1(602) 및 DEST(605) 어드레스를 디코드한다. SRC2(603)은 본 발명의 이 실시예에서는 사용되지 않는다. 게다가, 포화/불포화, 표현/비표현된, 그리고 압축 데이터의 데이터 요소 길이는 이 실시예에서는 사용되지 않는다. 발명의 본 실시예에서는, 오직 16비트 데이터 요소 길이로 압축된 가산만이 지원된다. 그러나, 당업자는 8개의 압축된 바이트 데이터 요소와 두 개의 압축된 2배 워드 데이터 요소로 구성된 압축 데이터로 수행될 수 있다.
단계(2202)에서, 내부 버스(170)를 통해, 디코더(202)는 레지스터 파일(15)의 레지스터(209)를 주어진 SRC1(602) 어드레스로 액세스한다. 레지스터(209)는 이 어드레스로 레지스터에 기억된 압축 데이터, 소스1를 실행 유니트(130)로 공급한다. 즉, 레지스터(209)는 내부 버스(170)를 통해 압축 데이터를 실행 유니트(130)로 전달한다.
단계(2130)에서, 디코더(202)는 실행 유니트(130)가 개체 카운트 연산을 수행하도록 한다. 대체가능한 실시예에서는, 디코더(202)는 내부 버스(170)를 통해 압축 데이터 요소의 길이로 통신한다.
단계(2205)에서, 데이터 요소의 길이가 16비트라고 가정하면, 실행 유니트(130)는, 소스1의 비트 16 내지 비트 0로 설정된 비트 번호를 합하여, 비트 16 내지 비트 0의 결과 압축 데이터를 발생시킨다. 이 합산과 병행하여, 실행 유니트(130)는 소스1의 31 내지 비트 16을 합하여, 결과 압축 데이터의 비트 31 내지 비트 16을 발생시킨다. 이러한 합산과 함꼐, 실행 유니트(130)는, 소스1의 비트 47 내지 비트 32를 합하여, 결과 압축 데이터의 비트 47 내지 비트 32를 발생시킨다. 이러한 합산과 함께, 실행 유니트(130)는 소스1의 비트 63 내지 비트 48를 합하여, 결과 압축 데이터의 비트 63 내지 비트 48를 발생시킨다.
단계(2206)에서, 디코더(202)는, 목적 레지스터의 DEST(605) 어드레스로 레지스터(209)내의 일 레지스터를 인에이블시킨다.
하나의 데이터 요소로 개체 카운트를 수행하는 방법
도23는, 발명의 일 실시예에 따라 압축 데이터의 일 데이터 요소로 개체 카운트 연산을 수행하고 결과 압축 데이터를 위한 단일 결과 데이터 요소를 발생하는 방법을 설명하는 흐름도이다. 단계(2310a)에서, 칼럼섬, CSum1a, 및 칼럼 캐리, CCarry1a는 소스1 비트 15,14,13 및 12로부터 발생한다. 단계(2310b)에서, 칼럼섬, CSum1b, 및 칼럼 캐리, CCarry1b는 소스1 비트 11,10,9 및 8로부터 발생된다. 단계(2310c)에서, 칼럼섬, CSum1c, 및 칼럼 캐리, CCarry1c는 소스1 비트 7,6,5 및 4로부터 발생된다. 단계(2310d)에서, 칼럼섬, CSum1d, 및 칼럼 캐리, CCarry1d는 소스1 비트 3,2,1 및 0로부터 발생된다. 발명의 일 실시예에서, 단계(2310a-d)는 병렬로 실행된다. 단계(2320a)에서, 칼럼섬, CSum2a, 및 컬럼 캐리, CCarry2b는 CSum1a, CCarry1a, CSum1b, 및 CCarry1b로부터 발생된다. 단계(2320b)에서, 칼럼섬, CSum2b, 및 컬럼 캐리, CCarry2b는 CSum1c, CCarry1, CSum1d, 및 CCarry1d로부터 발생된다. 발명의 일 실시예에서, 단계(2310a-b)는 병렬로 실행된다. 단계(2330)에서, 칼럼섬, CSum3, 및 컬럼 캐리, CCarry3는 CSum2a, CCarry2a, CSum2b, 및 CCarry2b로부터 발생된다. 단계(2340)에서, 결과는 CSum3 및 CCarry3로부터 발생된다. 일 실시예에서는, 16 비트로 결과가 표현된다. 본 실시예에서, 오직 비트 4 내지 비트 0가 소스1의 최대 비트 번호를 표현하는데 필요하므로, 비트 15 내지 5는 0으로 설정된다. 소스1에 대한 최대 비트 번호는 16이다.이것은 소스1가 11111111111111112와 같을 때 발생한다. 결과는 16이 될 것이며, 00000000000100002로 표현된다.
그러므로, 64비트 압축 데이터상의 개체 카운트 연산에 대한 4개의 결과 데이터 요소를 계산하기 위하여, 도23의 단계들은 압축 데이터의 각 데이터 요소에 대하여 실행된다. 일 실시예에서는, 4개의 16비트 결과 데이터 요소는 병렬로 계산된다.
개체 카운트 실행 회로
도24는 발명의 일 실시예에 따라 4개의 워드 요소를 가진 압축 데이터에서 개체 카운트 연산을 실행하는 회로를 설명한다. 도25는 발명의 일 실시예에 따라 압축 데이터의 한 개의 워드 데이터 요소에서 개체 카운트 연산을 수행하는 상세한 회로를 설명한다.
도24는 소스1 버스(2401)가 소스1IN(2406a-d)을 통해 popcnt 회로(2408a-d)로 정보 신호를 전송하는 회로를 설명한다. 그래서, popcnt 회로(2408a)는 소스1의 비트 15 내지 비트 0으로 설정된 비트 번호를 합하여, 비트 15 내지비트 0의 결과를 만들어낸다. popcnt 회로(2408b)는 소스1의 비트 31 내지 비트 16으로 설정된 비트 번호를 합하여, 비트 31 내지 비트 16의 결과를 만들어낸다. popcnt 회로(2408c)는 소스1의 비트 47 내지 비트 32으로 설정된 비트 번호를 합하여, 비트 47 내지비트 32의 결과를 만들어낸다. popcnt 회로(2408d)는 소스1의 비트 63 내지 비트 48으로 설정된 비트 번호를 합하여, 비트 63 내지 비트 48의 결과를 만들어낸다. 인에이블(2404a-d)은 연산 제어(2410)으로부터 제어(2403)를 통하여 popcnt 회로(2408a-d)를 인에이블시키는 제어 신호를 수신하여 개체 제어 연산을 실행시키고, 결과 BUS(2409)에 결과 신호를 발생시킨다. 당업자는 도1-6b 및 도23 내지 도25와 상기 설명된 회로를 제작가능할 것이다.
popcnt 회로(2408a-d)는 결과 out(2407a-d)을 통해 결과 BUS(2409)상으로 압축 개체 카운트 연산의 결과를 통신한다. 이 결과 정보는 DEST(605) 레지스터 어드레스에 의해 지정된 정수 레지스터내에 기억된다.
하나의 데이터 요소로 개체 카운트를 실행하는 회로
도25는 압축 데이터의 하나의 워드, 데이터로 개체 카운트 연산을 수행하는 상세 회로를 설명한다. 특히, 도25는 popcnt 회로(2408a)의 일부를 설명한다. 개체 카운트 연산을 실행하는 응용 회로에 대한 최대 효율을 얻기 위하여, 일 클록 사이클내에 연산이 완료되어야 한다. 그러므로, 레지스터를 액세스하고 결과를 기억하는 것이 일정 비율의 클록 사이클을 요구한다면, 도24의 회로는 거의 일 클록 주기의 80%내에 그 연산을 완료시킨다. 이 회로는 프로세서(109)가 일 클록 사이클내에 4개의 16 비트 데이터 요소로 개체 카운트 연산을 수행토록 하는 장점이 있다.
popcnt 회로(2408a)는4->2 캐리-세이브 가산기(CAS; carry-save adder)(다른 규정이 없다면, CAS는 4->2 캐리-세이브 가산기를 지칭한다)를 사용한다. popcnt 회로(2408a-d)에 채용될 수 있는 4->2 캐리-세이브 가산기는 본 기술 분야에서 잘 알려져 있다. 4->2 캐리-세이브 가산기는 4개의 오퍼랜드를 합하는 가산기로 두 개의 합으로 결과가 나타난다. popcnt 회로(2408a)의 개체 카운트 연산은 16 비트를 포함하므로, 제1 레벨은 4개의 4->2 캐리-세이브 가산기를 포함한다. 이러한 4개의 4->2 캐리-세이브 가산기는 16개의 일비트 오퍼랜드를 8개의 2비트 합으로 바꾼다. 제2 레벨은 8개의 2비트 합을 4개의 3비트 합으로 변형시키고, 제3 레벨은 4개의 3비트 합을 2개의 4비트 합으로 변형시킨다. 다음에 4비트 전가산기는 2개의 4비트 합을 가산하여 최종 결과를 발생시킨다.
비록 4->2 캐리-세이브 가산기가 사용되더라도, 대체 실시예에서는 3->2 캐리-세이브 가산기를 사용할 수 있다. 대신에, 다수의 전가산기가 사용되지만, 이러한 구조는 도25에 도시된 실시예만큼 빠르게 결과를 제공받을 수 없다.
소스1IN15-0(2406a)는 소스1의 비트 15 내지 비트 0을 전송한다. 처음 4비트는 4->2 캐리-세이브 가산기(CSA(2510a))의 입력과 연결된다. 다음 4비트는 CSA(2510b)의 입력과 연결된다. 다음 4비트는 CSA(2510c)의 입력과 연결된다. 마지막 4비트는 CSA(2510d)의 입력과 연결된다. 각각의 CSA(2510a-d)는 두 개의 2비트 출력을 발생한다. CSA(2510a)의 두 개의 2비트 출력은 CSA(2520a)의 두 입력과 연결된다. CSA(2510b)의 두 개의 2비트 출력은 CSA(2520a)의 다른 두 입력과 연결된다. CSA(2510c)의 두 개의 2비트 출력은 CSA(2520b)의 두 입력과 연결된다. CSA(2510d)의 두 개의 2비트 출력은 CSA(2520b)의 다른 두 입력과 연결된다. 각각의 CSA(2520a-b)는 두 개의 3비트 출력을 발생한다. CSA(2520b)의 두 개의 3비트 출력은 CSA(2530)의 두 개 출력과 연결된다. CSA(2520b)의 두 개의 3비트 출력은 CSA(2530)의 다른 두 개의 입력과 연결된다. CSA(2530)은 두 개의 4비트 출력을 발생한다.
이 두 개의 4비트 출력은 전가산기(FA2550)의 두 입력에 연결된다. FA2550은 두 개의 4비트 입력을 가산하고, 두 개의 4비트 입력의 총합계처럼 결과 Out(2407a)의 비트 3 내지 비트 0을 통신한다. FA2550는 캐리 출력(CO2552)을 통해 결과 Out(2407a)의 비트 4를 발생한다. 대체인에이블한 실시예에서, 5비트 전가산기는 결과 Out(2407a)의 비트 4 내지 비트 0를 발생하는데 사용된다. 어느 경우에나, 결과 Out(2407a)의 비트 15 내지 비트 5는 0으로 고정된다. 게다가, 전가산기로 입력되는 어떤 캐리도 0으로 고정된다.
비록 도25에는 도시되어 있지 않지만, 당업자는 결과 Out(2407a)이 결과 bus(2409)상으로 다중 송신되거나 완충 작용을 할 수 있다는 것을 이해할 수 있을 것이다. 멀티플렉서는 Enable(2404a)에 의해 제어된다. 이것은 다른 실행 유니트 회로가 결과 bus(2409)상으로 데이터를 기록하도록 한다.
명령 세트내에 상기 개체 카운트 연산을 포함시키는 잇점
설명된 개체 카운트 명령은 소스1과 같이, 압축 데이터의 각 데이터 요소에 설정된 비트 번호를 계산한다. 그래서, 명령 세트에 이 명령을 포함시켜, 개체 카운트 연산은 단일 명령으로 압축 데이터상에서 실행될 수 있다. 반대로, 종래 기술의 일반 프로세서들은 압축 해제 소스1으로 많은 명령을 실행해야 하고, 각각의 압축 해제 데이터 요소에서 개별적으로 기능을 수행하며, 그리고 압축 처리를 위해 결과를 압축한다.
그래서, 프로세서(109)에 의해 지원되는 명령 세트내에 이 개체 카운트 명령을 제공하여, 이 기능성을 요구하는 알고리즘의 효율이 증가된다.
논리 연산
논리 연산
본 발명의 일 실시예에서, SRC1 레지스터는 압축 데이터(소스1)을 포함하고, SRC2 레지스터는 압축 데이터(소스2)를 포함하고, DEST 레지스터는 소스1 및 소스2상에서 선택된 논리 연산을 수행하는 결과(결과)를 포함할 것이다. 예를 들어, 만약 논리 AND 연산이 선택되면, 소스1은 소스2와 논리적으로 AND 될 것이다.
발명의 일 실시예에서, 다음과 같은 논리 연산이 지원된다; 논리 AND, 논리 ANDN, 논리 OR, 및 논리 XOR. AND,OR 및 XOR 연산은 본 기술 분야에서 잘 알려져 있다. ANDN 연산은 소스2를 소스1의 역으로 AND되게 한다. 발명이 이러한 논리 연산과 관련하여 설명되는 반면, 대체 실시예는 다른 논리 연산을 수행한다.
도26은 발명의 일 실시예에 따라 압축 데이터상에 다수의 논리 연산을 수행하는 방법을 설명하는 흐름도이다.
단계(2601)에서, 디코더(202)는 프로세서(109)에 의해 수신된 제어 신호(207)를 디코드한다. 그러므로, 디코더(202)는 적절한 논리 연산(즉, AND, ANDN, OR 또는 XOR)용 연산 코드; 즉 레지스터(209)의 SRC1(602), SRC2(603) 및 DEST(605) 어드레스를 디코드한다.
단계(2602)에서, 내부 버스(170)를 통해, 디코더(202)는 레지스터 파일(150)내의 레지스터(209)에 주어진 SRC1(602) 및 SRC2(603) 어드래스를 액세스한다. 레지스터(209)는 SRC1(602) 레지스터(소스1)내에 기억된 압축 데이터와 SRC2(603) 레지스터(소스2)에 기억된 압축 데이터를 실행 유니트(130)에 공급한다. 즉, 레지스터(209)는 내부 버스(170)를 통해 실행 유니트(130)로 압축 데이터를 통신한다.
단계(2603)에서, 디코더(202)는 실행 유니트(130)를 압축 논리 연산중 선택된 하나를 수행하도록 한다.
단계(2610)에서, 선택된 하나의 압축 논리 연산은 다음에 실행되는 단계를 결정한다. AND 연산이 선택되었다면 실행 유니트(130)는 단계(2612)를 수행한다; ANDN 연산이 선택되었다면 실행 유니트(130)는 단계(2613)를 수행한다; OR 연산이 선택되었다면 실행 유니트(130)는 단계(2614)를 수행한다; 및 XOR 연산이 선택되었다면 실행 유니트(130)는 단계(2615)를 수행한다.
AND 연산이 선택되었다면, 단계(2612)가 실행된다. 단계(2612)에서, 소스1 비트 63 내지 0가 소스2 비트 63 내지 0와 AND되어 결과 비트 63 내지 0를 발생한다.
ANDN 연산이 선택되었다면, 단계(2613)가 실행된다. 단계(2613)에서, 소스1 비트 63 내지 0가 소스2 비트 63 내지 0와 ANDN되어 결과 비트 63 내지 0를 발생한다.
OR 연산이 선택되었다면, 단계(2614)가 실행된다. 단계(2614)에서, 소스1 비트 63 내지 0가 소스2 비트 63 내지 0와 OR되어 결과 비트 63 내지 0를 발생한다.
XOR 연산이 선택되었다면, 단계(2615)가 실행된다. 단계(2615)에서, 소스1 비트 63 내지 0가 소스2 비트 63 내지 0와 XOR되어 결과 비트 63 내지 0를 발생한다.
단계(2620)에서, 결과는 DEST 레지스터에 기억된다.
표36은 압축 데이터상의 ANDN 연산에 대한 내부 레지스터 표현를 설명한다. 제1행의 비트는 소스1의 압축 데이터 표현이다. 제2행의 비트는 소스2의 압축 데이터 표현이다. 제3행의 비트는 결과의 압축 데이터 표현이다. 각각의 데이터 요소 비트밑에 있는 번호는 데이터 요소 번호이다. 에를 들어, 소스1 데이터 요소 2는 11111111 000000002이다.
본 발명이 소스1과 소스2내의 대응 데이터 요소상에서 수행되는 동일한 논리 연산에 관하여 설명되는 반면, 대체인에이블한 실시예는 대응하는 데이터 요소에서 수행되는 논리 연산이 요소를 기초로 하여 선택되도록 하는 명령을 지원한다.
압축 데이터 논리 회로
일 실시예에서, 설명된 논리 연산은 압축 해제 데이터상에서 단일 논리 연산과 같은 수의 클록 사이클로 다중 데이터 요소를 발생할 수 있다. 같은 수의 클록 사이클로 실행되도록 하기 위해 병렬 처리가 사용된다.
도27는 본 발명의 일 실시예에 따른 압축 데이터상에서 논리 연산을 수행하는 회로를 설명한다. 연산 제어기(2700)는 논리 연산을 수행하는 회로를 제어한다. 연산 제어기(2700)는 제어 라인(2780)상의 제어 신호와 출력 선택 신호를 처리한다. 이러한 선택 신호는 논리 연산 회로(2701)로 AND, ANDN, OR, 및 XOR 연산중 선택된 하나를 전달한다.
논리 연산 회로(2701)는 소스1[63:0]과 소스2[63:0]을 수신하고, 선택 신호에 의해 지시된 논리 연산을 수행하여 결과를 발생시킨다. 논리 연산 회로(2701)는 결과[63:0]을 결과 레지스터(2731)로 전달한다.
명령 세트내에 상기 논리 연산를 포함시키는 잇점
설명된 논리 명령은 AND, AND NOT, OR, 및 OR NOT을 수행한다. 이러한 명령은 데이터의 논리적 조정을 요구하는 어떠한 응용예에서도 사용된다. 프로세서(109)에 의해 지원되는 명령 세트에 이러한 명령을 포함하여, 이러한 논리 연산은 일 명령으로 압축 데이터에서 실행된다.
압축 비교
압축 비교 연산
발명의 일 실시예에서, SRC1(602) 레지스터는 비교될 데이터(소스1)를 포함하고, SRC2(603) 레지스터는 반대로 비교되는 데이터(소스2)를 포함하고, 그리고 DEST(605) 레지스터는 비교 결과(결과)를 포함하게 된다. 즉, 소스1는 지시된 관계에 따라, 소스2의 각 데이터 요소에 의해 독립적으로 비교되는 각각의 데이터 요소를 가질 것이다.
발명의 일 실시예서, 다음과 같은 비교 관계가 지원된다: 동등함; 보다 큰 부호; 보다 크거나 또는 동등한 부호; 보다 큰 무부호; 또는 보다 크거나 또는 동등한 부호. 이 관계는 각 쌍의 대응하는 데이터 요소내에서 시험된다. 예를 들어, 소스1[7:0]는 소스2[7:0]보다 크므로 결과는 결과[7:0]로 된다. 비교 결과관계를 만족한다면, 일 실시예에서, 결과의 대응하는 데이터 요소는 모두 1로 설정된다. 만약 비교 결과가 그 관계를 만족하지 않는다면, 결과의 대응 데이터 요소는 모두 0으로 설정된다.
도28은 본 발명의 일 실시예에 따라 압축 데이터상에서 압축 비교 연산을 수행하는 방법을 설명하는 흐름도이다.
단계(2801)에서, 디코더(202)는 프로세서(109)에 의해 수신된 제어 신호(207)를 디코드한다. 그러므로, 디코더(202)는: 적당한 비교 연산용 연산 코드; 레지스터(209)내의 SRC1(602), SRC2(603), 및 DEST(605) 어드레스; 포화/불포화(비교 연산에서는 필요없음), 부호/무부호, 및 압축 데이터내의 데이터 요소의 길이를 디코드한다. 앞에서 언급된 바와 같이, SRC1(602) (또는 SRC2(603))는 DEST(605)처럼 사용될 수 있다.
단계(2802)에서, 내부 버스(170)를 통해, 디코더(202)는 레지스터 파일(150)내의 레지스터(209)에 주어진 SRC1(602) 및 SRC2(603) 어드래스를 액세스한다. 레지스터(209)는 SRC1(602) 레지스터(소스1)내에 기억된 압축 데이터와 SRC2(603) 레지스터(소스2)에 기억된 압축 데이터를 실행 유니트(130)에 공급한다. 즉, 레지스터(209)는 내부 버스(170)를 통해 실행 유니트(130)로 압축 데이터를 전송한다.
단게(2083)에서, 디코더(202)는 실행 유니트(130)가 적절한 압축 비교 연산을 수핸하도록 한다. 디코더(202)는 내부 버스(170)를 통해 비교 연산에 대한 관계와 데이터 요소의 크기를 더 전송한다.
단계(2810)에서, 데이터 요소의 크기는 다음에 실행되는 단계를 결정한다. 만약 데이터 요소의 크기가 8비트(압축 바이트(401) 데이터)라면, 실행 유니트(130)는 단계(2812)를 수행한다. 그러나, 압축 데이터내의 데이터 요소 크기가 16비트(압축 워드(402) 데이터)라면, 실행 유니트(130)는 단계(2814)를 수행한다. 일 실시예에서, 오직 8비트 및 16비트 데이터 요소 크기의 압축 비교가 지원된다. 그러나, 또다른 실시예에서는, 32비트 데이터 요소 크기의 압축 비교가 지원된다(압축 2배워드(403)).
데이터 요소의 크기가 8비트라면, 단계(2812)가 수행된다. 단계(2812)에서는, 다음과 같이 수행된다. 소스1 비트 7 내지 0은 결과비트 7 내지 0을 발생하는 소스2비트 7 내지 0과 비교된다. 소스1비트 15 내지 8은 결과비트 15 내지 8를 발생하는 소스2비트 15 내지 8을 비교한다. 소스1비트 23 내지 16은 결과비트 23 내지 16를 발생하는 소스2비트 23 내지 16을 비교한다. 소스1비트 31 내지 24은 결과비트 31 내지 24를 발생하는 소스2비트 31 내지 24을 비교한다. 소스1비트 39 내지 32은 결과비트 39 내지 32를 발생하는 소스2비트 39 내지 32을 비교한다. 소스1비트 47 내지 40은 결과비트 47 내지 40를 발생하는 소스2비트 47 내지 40을 비교한다. 소스1비트 55 내지 48은 결과비트 55 내지 48를 발생하는 소스2비트 55 내지 48을 비교한다. 소스1비트 63 내지 56은 결과비트 63 내지 56를 발생하는 소스2비트를 비교한다.
데이터 요소의 크기가 16비트라면, 단계(2814)가 실생된다. 단계(2814)에서는 다음과 같이 실행된다. 소스1비트 15 내지 0은 결과비트 15 내지 0를 발생하는 소스2비트 15 내지 0을 비교한다. 소스1비트 31 내지 16은 결과비트 31 내지 16를 발생하는 소스2비트 31 내지 16을 비교한다. 소스1비트 47 내지 32은 결과비트 47 내지 32를 발생하는 소스2비트 47 내지 32을 비교한다. 소스1비트 63 내지 48은 결과비트 63 내지 48를 발생하는 소스2비트 63 내지 48을 비교한다.
일 실시예에서, 단계(2812)의 비교연산이 동시에 실행된다. 그러나, 또다른 실시예에서는, 비교연산은 연속적으로 수행된다. 또다른 실시예에서는, 이러한 비교연산중 약간은 동시에 이루어지며 어느것은 연속으로 실행된다. 게다가 이러한 논의 또한 단계(2814)의 비교연산에 적용한다.
단계(2820)에서, 결과는 DEST(605) 레지스터에 기억된다.
표(37)은 연산보다 크게 무부호화된 압축 비교의 내부 레지스터 표현를 설명한다. 제1행의 비트는 소스1의 압축 데이터 표현이다. 제2행의 비트는 소스2의 데이터 표현이다. 제3행의 비트는 결과의 압축 데이터 표현에다. 각각의 데이터 요소 비트의 밑수는 데이터 요소 번호이다. 예를 들어, 소스1 데이터 요소 3은 100000002이다.
표(38)은 압축 바이트 데이터상의 연산과 같거나 보다 큰 압축 비교 부호에 대한 내부 레지스터 표현이다.
압축 데이터 비교 회로
일 실시예에서, 비교 연산은 압축 해제 데이터의 단일 비교 연산과 같은 수의 클록 사이클로 다중 데이터 요소에 발생될 수 있다. 같은 수의 클록 사이클에서 실행되기 위하여, 병렬 처리된다. 즉, 레지스터는 데이터 요소에서 비교 연산을 수행하기 위해 동시에 명령을 받는다. 이와 관련하여 아래에 상세히 설명된다.
도29는 본 발명의 일 실시예에 따른 압축 데이터의 각 바이트상에서 압축 비교 연산을 수행하는 회로를 설명한다. 도29는 수정된 바이트 슬라이스 비교 회로, 바이트 슬라이스 스테이지i(2999)의 사용을 설명한다. 각각의 바이트 슬라이스는, 최상위 데이터 요소 바이트 슬라이스를 제외하고, 비교 유니트 및 비트 제어부를 포함한다. 최상위 데이터 요소 바이트 슬라이스가 필요로 하는 것은 비교 유니트를 가지는 것이다.
비교 유니트i(2911) 및 비교 유니트i+1(2971) 각각은 소스1로부터의 8비트를 소스2로부터의 대응하는 8비트와 비교되도록 한다. 일 실시예에서, 각각의 비교 유니트는 공지된 상기 8비트 비교 회로처럼 연산한다. 이러한 공지된 8비트 비교 회로는 소스1로부터 소스2를 감산하는 바이트 슬라이스 회로를 포함한다. 감산 결과는 비교 연산의 결과를 결정하도록 처리된다. 일 실시예에서, 감산의 결과는 과잉 정보를 포함한다. 이 과잉 정보는 비교 연산의 결과가 참인지를 결정하기위해 테스트된다.
각각의 비교 유니트는 소스1 입력, 소스2 입력, 제어 입력, 다음 스테이지 신호, 마지막 스테이지 신호, 및 결과 출력을 포함한다. 그러므로, 비교 유니트i(2911)는 소스1i(2931) 입력, 소스2i(2933) 입력, 제어i(2901) 입력, 다음 스테이지i(2913) 신호, 마지막 스테이지i(2912) 입력, 및 결과 레지스터에 기억된 결과를 포함한다. 그러므로, 비교 유니트i+1(2971)는 소스1i+1(2932) 입력, 소스2i+1(2934) 입력, 제어i+1(2902) 입력, 다음 스테이지i+1(2973) 신호, 마지막 스테이지i+1(2972) 입력, 및 결과 레지스터i+1(2952)에 기억된 결과를 포함한다.
소스1n입력은 전형적으로 소스1의 8비트부이다. 8비트는 가장 작은 형태의 데이터 요소인 하나의 압축 바이트(401) 데이터 요소가다. 소스2 입력은 소스2의 대응 8비트부이다. 연산 제어기(2900)는 각각의 비교 유니트를 필요한 비교를 수행하도록 하기 위한 제어 신호를 전송한다. 제어 신호는 비교 관계(즉, 보다 큰 부호) 및 데이터 요소의 크기(즉, 바이트 또는 워드)로부터 결정된다. 다음 스테이지 신호는 비교 유니트에 대한 비트 제어로부터 수신된다. 비교 유니트는 바이트 크기 데이터 요소보다 큰 것이 사용될 때 비트 제어 유니트에 의해 효과적으로 결합된다. 예를 들어, 워드 압축 데이터가 비교될 때, 제1 비교 유니트와 제2 비교 유니트사이의 비트 제어 유니트는 두 개의 비교 유니트를 하나의 16비트 비교 유니트로 연산하도록 할 것이다. 유사하게는, 제3 및 제4 비교 유니트간의 비교 유니트는 두 개의 비교 유니트를 하나의 비교 유니트로 연산하게 할 것이다. 이것은 4개의 압축 워드 데이터 요소에 대하여 지속된다.
소스1과 소스2의 값의 관계에 따라, 비교 유니트는 상위 비교 유니트의 결과를 하위 비교 유니트 또는 그 반대로 전파되도록 하여 비교연산을 수행한다. 즉, 각 비교 유니트는 비트 제어i(2920)에 의해 전송된 정보를 사용하여 비교 결과를 제공할 것이다. 만약 2배 워드 압축 데이터가 사용되면, 4개의 비교 유니트는 서로 작용하여 각 데이터 요소에 대한 하나의 32비트 긴 비교 유니트를 형성시킨다. 각 비교 유니트의 결과 출력은 소스1과 소스2에서의 비교 연산 결과를 나타내고 비교 유니트는 연산을 계속한다.
비트 제어i(2920)는 압축 데이터 인에이블i(2906)을 통해 연산 제어기(2900)로부터 인에이블된다. 비트 제어i(2920)는 다음 스테이지i(2913) 및 마지막 스테이지i+1(2972)를 제어한다. 예를 들어, 비교 유니트i(2911)가 소스1과 소스2의 8개 최하위 비트에 관여한다면, 비교 유니트i+1(2971)는 소스1과 소스2의 다음 8비트에 관여한다. 만약 압축 바이트 데이터상에서 비교가 이루어 지면, 비트 제어i(2920)는 비교 유니트i+1(2971)로부터의 결과 정보가 비교 유니트i(2911)에 전송되거나 그 역으로도 전송되지 않을 것이다. 그러나, 만약 압축 워드상에서 비교가 수행되면, 비트 제어i(2920)는 비교 유니트i(2911)로부터의 결과(일 실시예에서는, 오버 플로우)정보가 비교 유니트i+1로 전송되게 하고 비교 유니트i+1(2971)로부터의 결과(일 실시예에서는, 오버 플로우)정보가 비교 유니트i(2911)로 전달되도록 할 것이다.
예를 들어, 표 39에서, 비교치보다 큰 압축 바이트가 수행된다. 비교 유니트i+1(2971)가 데이터 요소 1에서 연산한다면, 비교 유니트i(2911)는 데이터 요소 0에서 연산한다. 비교 유니트i+1(2971)는 워드의 최상위 8비트를 비교하고 최종 스테이지i+1(2972)를 통해 결과 정보를 전송한다. 비교 유니트i+1(2911)는 워드의 최하위 8비트를 비교하고 다음 스테이지i+1(2913)를 통해 결과 정보를 전송한다. 그러나, 연산 제어기(2900)는, 비트 제어i(2920)가 비교 유니트간에 최종 스테이지i+1(2972) 및 다음 스테이지i(2913)로부터 수신된 그 결과 정보의 전파를 정지시킨다.
그러나, 만약 비교치보다 큰 부호의 압축 워드가 수행된다면, 비교 유니트i+1(2971)의 결과는 비교 유니트i+1(2911)로 및 그 반대로도 전달된다. 표(40)은 이러한 결과를 설명한다. 이러한 형태의 통신은 압축 2배워드 비교에도 허용될 것이다.
각각의 비교 유니트는 결과 레지스터에 선택적으로 연결된다. 결과 레지스터는, 완료 결과, 결과[63:0](2960)가 DEST(605)레지스터에 전송될 수 있을 때까지 비교 연산의 결과를 기억한다.
완전한 64 비트 압축 비교 회로에 대하여는, 8개의 비교 유니트 및 7개의 비트 제어 유니트가 사용된다. 그러한 회로는, 압축 해제 비교 연산과 압축 비교 연산을 수행하기 위해 같은 회로를 사용함으로서, 64비트 압축 해제 데이터를 비교하는데 사용될 수 있다.
명령세트내에 압축 비교 연산을 포함시키는 잇점
상기 압축 비교 명령은 압축 마스크로서 소스1과 소스2를 비교한 결과를 기억한다. 전술된 바와 같이, 데이터상의 조건 브랜치는 예측할 수 없으며, 따라서 브랜치 예측 알고리즘을 차단하기 때문에 프로세서 효율면에서 비용이 든다. 그러나, 압축 마스크를 발생시킴으로서, 비교명령은 데이터를 기초로 필요한 조건 브랜치의 수를 감소시킨다. 예를들어, 명령(if Y>A then X=X+B; else X=X)은 표(41)에 도시된 바와 같이 압축 데이터에서 수행된다(데이블(41)에 표현된 값은 16진법으로 도시된다).
상기 예에서 알 수 있는 것처럼, 조건 브랜치는 더 이상 필요치 않다. 브랜치 명령이 필요치 않기 때문에, 이론적으로 브랜치를 예측하는 프로세서는 이것 및 다른 유사한 연산을 수행하기 위해 이러한 비교 명령을 사용할 때는 효율이 감소되지 않는다. 그래서, 프로세서(109)에 의해 지원되는 명령 세트내에 이러한 비교 명령을 제공함으로써, 프로세서(109)는 높은 성능의 레벨로 이러한 기능을 필요로 하는 알고리즘을 수행할 수 있다.
멀티미디어 알고리즘 예
설명된 명령세트의 다양성을 설명하기 위해, 여러 가지 멀티미디어 알고리즘 예가 이하 기술된다. 어떤 경우에, 유사한 압축 데이터 명령은 이러한 알고리즘으로 일정한 단계를 수행하는데 사용될 수 있다. 데이터 이동, 루핑, 및 조건 브랜치를 관리하기 위해 범용 프로세서 명령의 사용이 요구되는 여러 단계들은 다음 예에서는 생략되었다.
1)복소수의 곱
설명된 승산-가산 명령은 표(42a)에 도시된 바와 같이 단일 명령으로 두 개의 복소수를 곱하는데 사용될 수 있다. 두 개의 복소수(즉, r1i1및 r2i2)의 곱은 다음과 같은 등식으로 실행된다:
실수부 = r1·r2-i1 · i2
허수부 = r1·r2+i1 · i2
만약 이 명령이 모든 클록 사이클을 완료시키면, 본 발명은 두 개의 복소수를 모든 클록 사이클과 곱할 수 있다.
또다른 예로서, 표(42b)는 세 개의 복소수를 서로 곱하도록 하는 명령을 도시한다.
2)승산 누적 연산
설명된 명령은 또한 값을 곱하고 누적하는데 사용될 수 있다. 예를 들어, 4개 데이터 요소의 두 세트(A1-4및 B1-4)는 표(43)의 아래에 도시된 바와 같이 곱하고 누적시킨다. 일 실시예에서, 표(43)에 도시된 각각의 명령은 각 클록 사이클을 완료시키는데 사용된다.
만약 각 세트에서 데이터 요소의 수가 8을 초과하고 4의 배수라면, 이러한 세트의 곱과 누적은 아래 표(44)에 도시된 것처럼 수행될 때 보다 적은 명령을 필요로 한다.
또 다른 예로서, 표(45)은 분리된 곱과 누적의 세트(A 및 B) 및 세트(C 및 D)를 표현하며, 여기서는 각각의 세트가 2 데이터 요소를 포함한다.
또 다른 예로서, 표(46)은 분리된 곱과 누적의 세트(A 및 B) 및 세트(C 및 D)를 표현하며, 여기서는 각각의 세트가 4 데이터 요소를 포함한다.
3)스칼라곱 알고리즘
스칼라곱(또는 내적)은 신호 처리 및 매트릭스 연산에 사용된다. 예를 들어, 스칼라곱은 매트릭스의 곱, (FIR 및 IIR 필터링과 같은)디지털 필터링 연산, 및 계산 상관 수열을 계산할 때 사용된다. 많은 음성 압축 알고리즘(즉, GSM, G.728, CELP 및 VSELP) 및 Hi-Fi 압축 알고리즘(즉, MPEG 및 서브밴드 코딩)은 디지털 필터링과 상관 계산에 대하여 확장 사용될 수 있기 때문에, 스칼라곱의 효율을 증가시키는 것은 이러한 알고리즘의 효율을 증가시킨다.
길이가 N인 두 개의 수열 A 및 B의 스칼라곱은 다음과 같이 정의된다:
스칼라곱의 계산을 실행하는 것은 수열 각각의 대응 요소들이 서로 곱해지는 누진 연산을 곱하는데 확대 사용되고, 그 결과들은 스칼라곱 결과를 형성하기 위해 누적된다.
이동, 압축 가산, 승산-가산, 및 압축 시프트 연산을 포함함으로써, 발명은 스칼라곱 계산이 사용중인 압축 데이터를 수행하게 한다. 예를 들어, 만약 4개의 16비트 요소를 포함하는 압축 데이터 형태가 사용되면, 스칼라곱 계산은 :
1) 이동 명령을 사용하는 소스1을 발생하기 위해 A 수열로부터 4개의 16비트 값을 액세스;
2) 이동 명령을 사용하는 소스2를 발생하기 위해 B 수열로부터 4개의 16비트값을 액세스; 및
3) 승산-가산, 압축 가산, 및 시프트 명령을 사용하는 상기 설명된 곱셈과 누적 계산
에 의해 4개의 값을 각각 포함하는 2개의 수열에서 수행될 수 있다.
몇몇 요소보다 큰 벡터에 대하여 표(46)에 도시된 방법이 사용되고 최종 결과는 마지막으로 서로 합쳐진다. 기타 지원 명령은, 누산기 레지스터를 초기화하는 압축 OR 및 XOR명령, 계산의 최종 단계에서 원하지 않은 값을 미루는 압축 시프트 명령을 포함한다. 루프 제어 연산은 프로세서(109)의 명령 세트에 이미 존재하는 명령을 사용하여 이루어진다.
4)2차원 루프 필터
2차원 루프 필터들은 일정한 멀티미디어 알고리즘에 사용된다. 예를 들어, 표(47)에 도시된 필터 계수는 영상 회의 알고리즘에 사용될 수 있어 픽셀 데이터로 저역 필터를 수행한다.
위치(x, y)에서의 새로운 픽셀값을 계산하기 위하여, 다음 등식이 사용된다: 결과 픽셀 = (x-1,y-1) + 2(x,y-1) + (x+1,y-1) + 2(x-1,y) + 4(x,y) + 2(x+1,y)
+
(x-1,y+1) + 2(x,y+1) + (x+1,y+1)
압축, 압축 해제, 이동, 압축 시프트, 및 압축 가산을 포함함으로써, 발명은 2차원 루프 필터가 압축 데이터를 사용하면서 실행되도록 한다. 기술된 루프 필터의 일 실시예에 따르면, 이 루프 필터는 두 개의 간단한 1차원 필터로서 사용되는데, 즉 상기 2차원 필터는 두 개의 121 필터로 사용될 수 있다. 제1 필터는 가로방향에 있고 제2 필터는 세로방향에 있다.
표 48은 8x8 블록의 픽셀 데이터를 표현한다.
다음 단계에서는 이 8x8 블록 픽셀 데이터의 가로 방향으로 수행된다:
1) 이동 명령을 사용하는 압축 데이터로서 8개의 8비트 픽셀값을 액세스;
2) 누적 계산동안 정확도를 유지하기 위해 4개의 8비트 픽셀(소스1)을 포함하는 16비트 압축 데이터로 8개의 8비트 픽셀을 압축 해제;
3) 소스2 및 소스3를 발생하기 위해 소스1을 두 번 복사;
4) 소스1에서 16비트만큼 우측으로 압축 해제 시프트;
5) 소스3에서 16비트만큼 좌측으로 압축 해제 시프트;
6) 다음 압축 가산을 실행하여 (소스1 + 2*소스2 + 소스3)를 발생;
a) 소스1 = 소스1 + 소스2,
b) 소스1 = 소스1 + 소스2,
c) 소스1 = 소스1 + 소스3
7) 8x8 중간 결과열로서 결과 압축 워드 데이터를 기억; 및
8) 표(49) 아래에 도시된 바와 같이 전체 8x8 중간 결과열이 발생될 때까지 이 단계를 반복.
다음 단계는 8x8 중간 결과열상에서 필터의 세로방향으로 진행된다:
1) 소스1, 소스2, 및 소스3를 발생하기 위하여 이동 명령을 사용하는 압축 데이터로서 중간 결과열로부터 4x4 블록 데이터를 액세스(즉, 예로서 표 50 참조);
2) 다음 압축 데이터를 가산하여 (소스1 + 2*소스2 + 소스3)를 발생:
a) 소스1 = 소스1 + 소스2,
b) 소스1 = 소스1 + 소스2,
c) 소스1 = 소스1 + 소스3;
3) 합의 가중치를 발생하기 위해 결과 소스1상에서 4비트만큼 우측 압축 시프트를 수행 -- 이것은 16에 의해 효과적으로 나누어진다;
4) 16비트값을 8비트 픽셀값으로 전환하기 위해 포화된 결과 소스1를 압축;
6) 8x8 결과열로서 결과 압축 바이트 데이터를 기억(표50에 도시된 예에 대하여, 이러한 4개 바이트는 B0,B1, B2, 및 B4에 대한 새로운 픽셀값을 표현한다); 및
7) 전체 8x8 결과열이 발생될 때까지 이 단계를 반복함.
8x8 결과열의 상부 및 하부행이 여기서 기술되지 않은 상이한 알고리즘을 사용하는데 결정되어 본 발명을 명확하게 한다. 그래서, 프로세서(109)에 압축, 압축 해제, 이동, 압축 시프트, 및 압축 가산 명령을 제공함으로서, 본 발명은 그러한 필터에 의해 한번에 1 데이터 요소를 요구하는 연산을 수행해야 하는 종래 일반적인 프로세서보다 상당한 효율을 제공한다.
5)모션 평가
모션 평가는 여러 가지 멀티미디어 응용에 사용된다(즉, 화상 회의 및 MPEC(고화질 재생)). 화상 회의에 관하여, 모션 평가는 단말기간에 전송되어야 하는 데이터량을 감소시키는데 사용된다. 모션 평가는 고정 크기의 비디오 블록으로 바다오 프래임을 분할하여 연산한다. 프래임1의 각 블록에 대하여는, 프래임2내에 유사한 이미지를 포함하는 블록이 있는지 결정된다. 만약 그러한 블록이 프래임2에 포함되면, 그 블록은 프레임1에 관한 동적 벡터로 설명될 수 있다. 그래서, 그 블록을 표현하는 데이터 모두를 전송하는 것보다, 오직 동적 벡터만이 수신 터미널로 전송되는 것이 필요하다. 예를 들어, 만약 프레임1의 블록이 프레임2내의 블록과 유사하고 같은 화면상에서 동일 하다면, 동적 벡터 0만이 그 블록으로 송신되는 것이 필요하다. 그러나, 만약 프레임1내의 블록이 프레임2의 블록과 유사하지만 다른 화면상에서 동일하다면, 필요한 그 블록의 새로운 위치를 가리키는 동적 벡터가 송신된다. 일 실시예에 따르면, 프레임1의 블록 A가 프레임2의 블록 B 와 유사한지를 결정하기 위해, 픽셀값 사이의 완전히 상이한 차이의 합이 결정된다. 더 작은 합이 경우, 블록 A는 블록 B와 더욱 유사하다(즉, 만약 합이 0이면, 블록 A는 블록 B와 동일하다).
이동, 압축 해제, 압축 가산, 포화된 압축 감산, 및 논리 연산을 포함하여, 본 발명은 모션 평가가 압축 데이터를 사용하도록 한다. 예를 들어, 만약 2개의 16x16 블록의 영상이 압축 데이터처럼 기억된 8비트 픽셀값의 두 개 어레이에 의해 표현된다면, 이 블록들의 픽셀값의 절대차는 다음과 같이 계산된다:
1) 이동 명령을 사용하는 소스1을 발생하기 위해 블록 A로부터 8개의 8비트값을 액세스한다;
2) 이동 명령을 사용하는 소스2을 발생하기 위해 블록 B로부터 8개의 8비트값을 액세스한다;
3) 소스3를 발생하는 소스2로부터 소스1을 빼기 위해 포화된 압축 감산을 수행한다 -- 포화된 감산에 의해, 소스3은 이 감산의 포지티브 결과만을 포함할 것이다(즉, 네가티브 결과는 제로로 될 것이다);
4) 소스4를 발생하는소스1로부터소스2을 빼기 위해 포화된 압축 감산을 수행한다 -- 포화된 감산에 의해, 소스4은 이 감산의 포지티브 결과만를 포함할 것이다(즉, 네가티브 결과는 제로로 될 것이다);
5) 소스5를 발생하기 위해 소스3와 소스4상의 포화된 OR 연산을 수행한다 -- OR연산을 수행하여, 소스5은 소스1 및 소스2의 절대값을 포함한다;
6) 16x16 블록이 처리될 때까지는 이 단계를 반복한다.
8비트 절대값의 결과는 16비트 정확도를 얻기 위해 16비트 데이터 요소로 압축 해제되고,그 다음 압축 가산을 사용하여 가산된다.
그래서, 이동, 압축 해제, 압축 가산, 포화된 압축 감산, 및 논리 연산들이 프로세서(109)에 제공됨으로서, 본 발명은, 한번에 일 데이터 요소를 계산하는 연산 평가의 절대차와 가산을 수행해야 하는 종래 범용 프로세서보다 효율이 현저히 증가된다.
6)이산 코사인 변형
이산 코사인 변형(DCT)은 많은 신호 처리 알고리즘에 사용되는 잘 알려진 기능이다. 영상 및 이미지 압축 알고리즘은 특히 이러한 변형을 광범위하게 사용한다.
이미지 및 비디오 압축 알고리즘에서, DCT는 공간 표현로부터 주파수 표현까지 픽셀 블록을 전송하는데 사용된다. 주파수 표실에서, 화상 정보는 주파수 요소로 분할되는데, 어느것은 다른 것보다 더 중요하다. 압축 알고리즘은, 재구성된 화상 내용을 반대로 영향을 주지 않는 주파수 요소를 선택적으로 양자화하거나 버린다. 이 방법으로, 압축이 이루어진다.
DCT의 실시예는 많으며, 가장 일반적인 것은 고속 프리에 변형(Fast Fourier Transform;FFT)계산 형식을 기초로 한 일종의 고속 변형 방법이다. 고속 변형에서, N차 변형은, N/2차 변형의 결합과 결합된 결과로 나누어진다. 이러한 분해는 최소 2차 변형이 이루어질 때까지 수행될 수 있다. 이러한 요소 2 변형 핵심은 자주 퍼터플라이 연산으로 언급된다. 버터플라이 연산은 다음과 같이 표현된다:
X = a*x + b*y
Y = c*x - d*y
여기서 a, b, c, 및 d는 계수이고, x 및 y는 변형 출력이다.
이동, 승산-가산, 및 압축 시프트 연산을 포함하여, 본 발명은 DCT 계산이 다음 방법으로 압축 데이터를 사용하도록 한다:
1) 이동 또는 압축 해제 명령을 사용하는 소스1(표51 참조)을 발생시키기 위하여 x 및 y를 표현하는 두 개의 16비트값을 액세스한다;
2) 표51 아래에 도시된 바와 같이 소스2를 발생한다-- 소스2는 버터플라이 연산 수 이상으로 재사용될 수 있다; 및
3)결과(표51을 참조)를 발생하기 위하여 소스1과 소스2를 사용하는 승산-가산 명령을 수행한다.
어떤 경우에, 버터플라이 연산의 계수는 1이다. 이러한 경우에, 버터플라이 연산은 압축 및 압축 해제 명령을 사용하여 수행되는 단지 가산 및 감산으로 다시 발생된다.
IEEE 문헌은 역 DCT가 화상 회의용으로 실행된다고 하는 것을 정확하게 기술하고 있다. (참조; IEEE 회로 및 시스템 연합,"8x8 역 이산 코사인 변환을 이용하는 IEEE 표준 규격," IEEE Std. 1180-1990, 미국 뉴욕주 10017,뉴욕, 이스트 47 스트리트. 345, IEEE Inc, 1991년 3월 18일). 요구되는 정밀도는, 32비트 출력을 발생하기 위하여 16비트 입력을 사용하기 때문에, 발표된 승산-가산 명령에 의해 달성된다.
그래서, 이동, 승산-가산, 및 압축 시프트 연산을 프로세서(109)에 제공함으로서, 본 발명은, 한번에 DCT 계산 일 데이터 요소를 더하고 곱해야하는 종래 범용 프로세서 이상으로 현저한 효율을 제공한다.
대체 실시예
본발명은 각각의 상이한 연산이 분할 회로을 가진다는 것을 설명하고 있지만, 대체 실시예는 일정한 회로가 상이한 연산에 의해 분리되는 것처럼 실행될 수 있다. 예를 들어, 일 실시예에서는 다음 회로가 사용된다: 1) 압축 가산, 압축 감산, 압축 비교, 및 압축 논리 연산을 수행하기 위한 단일 산술 논리 유니트(ALU); 2) 압축, 압축 해제, 및 압축 시프트 연산을 수행하는 회로 유니트; 3) 압축 승산 및 승산-가산 연산을 수행하는 회로 유니트; 및 4) 통상적인 카운트 연산을 수행하는 회로 유니트.
대응 및 별개의 항이 사용되어 2 이상의 압축 데이터에 기억된 데이터 요소간의 소정의 관계에 대하여 기술된다. 일 실시예에서, 압축 데이터내의 데이터 요소의 비트 위치를 기초로 한다. 예를 들어, 제1 압축 데이터중 (압축 바이트 포맷내의 비트 위치 0-7 에 기억된)데이터 요소 0은 제2 압축 데이터중 (압축 바이트 포맷내의 비트 위치 0-7 에 기억된)데이터 요소 0에 대응한다. 그러나, 이러한 관계는 대체 실시예와는 다르다. 예를들어, 제1 및 제2 압축 데이터의 대응데이터 요소는 상이한 크기일 수 있다. 또다른 예로서, 제1 압축 데이터의 최하위 데이터 요소가 제2 압축 데이터(등등)의 최하위 데이터 요소에 대응하는 것보다는, 제1 및 제2 압축 데이터의 데이터 요소가 다른 순서로 각각 다른 것과 대응한다. 또다른 예에서는, 제1 및 제2 압축 데이터의 데이터 요소와 1대1 대응하는 것 보다는, 데이터 요소들은 상이한 비율로 대응한다(즉, 제1 압축 데이터는 제2 압축 데이터에서 2이상의 상이한 데이터 요소에 대응하는 일 이상의 데이터 요소를 가질 수 있다).
본 발명은 여러 가지 실시예를 들어 설명되었지만, 당업자는 본 발명이 설명된 실시예에 한정되지는 않는다는 것을 알게될 것이다. 본 발명의 방법과 장치는 첨부된 청구범위의 개념과 범위내에서 수정 및 대체할 수 있다. 그러므로, 본 명세서는 발명을 제한하는 것이 아니라 일 예로서 간주된다.

Claims (24)

  1. 컴퓨터 시스템에 있어서:
    제1 레지스터를 포함하는 프로세서; 및
    상기 프로세서에 연결된 기억 영역을 포함하고, 상기 프로세서는 기억 영역내에,
    제1 압축 데이터 및 제2 압축 데이터로 연산하는 압축명령으로서, 상기 제1 압축 데이터는 최소한 제1 데이터 요소와 제2 데이터 요소를 포함하고, 상기 제2 압축 데이터는 최소한 제3 데이터 요소와 제4 데이터 요소를 포함하고, 상기 제1 데이터 요소, 상기 제2 데이터 요소, 상기 제3 데이터 요소, 및 상기 제4 데이터 요소는 각각은 비트의 세트를 포함하고, 상기 프로세서는 상기 압축 명령 수신에 응답하여 제3 압축 데이터를 형성시키기 위해, 상기 제1 데이터 요소, 상기 제2 데이터 요소, 상기 제3 데이터 요소, 및 상기 제4 데이터 요소 각각의 부분을 압축하는 상기 압축 명령 수신에 응답하여 제3 압축 데이터를 형성시키는 압축 명령;
    제4 압축 데이터와 제5 압축 데이터로 연산하는 압축해제명령으로서, 상기 제4 압축 데이터는 최소한 제5 데이터 요소와 제6 데이터 요소를 포함하고, 상기 제5 압축 데이터는 상기 제5 데이터 요소에 대응하는 제7 데이터 요소와 상기 제6 데이터 요소에 대응하는 제8 데이터 요소를 포함하고, 상기 제5 데이터 요소, 상기 제6 데이터 요소, 상기 제7 데이터 요소, 및 상기 제8 데이터 요소 각각은 비트의 세트를 포함하고, 상기 프로세서는 상기 압축 해제 명령 수신에 응답하여 최소한 상기 제4 압축 데이터로부터 상기 제5 데이터 요소와 상기 제5 압축 데이터로부터 상기 제7 데이터 요소를 포함하는 제6 압축 데이터를 발생하는 압축 해제 명령;
    상기 프로세서는 압축 가산 명령 수신에 응답하여 상기 제4 압축 데이터와 상기 제5 압축 데이터의 대응 데이터 요소를 병렬로 서로 분리하여 가산하는 압축 가산 명령;
    상기 프로세서는 압축 감산 명령 수신에 응답하여 상기 제4 압축 데이터와 상기 제5 압축 데이터의 대응 데이터 요소를 병렬로 서로 분리하여 감산하는 압축 감산 명령;
    상기 프로세서는 상기 압축 시프트 명령 수신에 응답하여 지시된 카운트에 의한 상기 제1 데이터 요소와 지시된 카운트에 의한 상기 제2 데이터 요소를 최소한 병렬로 각각 시프트하는 압축 시프트 명령; 및
    상기 프로세서는 지시된 관계에 따라 상기 제4 압축 데이터 및 상기 제5 압축 데이터로부터 대응하는 데이터 요소를 병렬로 비교하고 상기 압축 비교 명령 수신에 응답하여 상기 제1 레지스터에 압축 마스크 결과를 기억하며, 상기 압축 마스크는 상기 소정수의 비트를 포함하는 최소한 제1 마스크 요소 및 제2 마스크 요소를 각각 구비하고, 상기 제1 마스크 요소내의 각 비트는 상기 제4 압축 데이터내의 상기 제5 데이터 요소를 상기 제5 압축 데이터내의 상기 제7 데이터 요소와 비교한 결과를 나타내고, 상기 제2 마스크 요소내의 각 비트는 상기 제4 압축 데이터내의 상기 제6 데이터 요소를 상기 제5 압축 데이터내의 상기 제8 데이터 요소와 비교한 결과를 나타내는 압축 비교 명령을 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  2. 제 1 항에 있어서, 상기 기억 영역은 압축 승산 명령을 더 기억하여 포함하고, 상기 프로세서는 상기 압축 승산 명령 수신에 응답하여 상기 제4 압축 데이터와 상기 제5 압축 데이터의 대응 데이터 요소를 병렬로 각각 승산을 하는 것을 특징으로 하는 컴퓨터 시스템.
  3. 제 1 항에 있어서, 상기 기억 영역은 압축 승산-가산 명령을 더 기억하여 포함하고, 상기 프로세서는, 상기 제1 데이터 요소와 상기 제3 데이터 요소를 서로 곱하여 상기 제1 중간 결과를 발생하고, 상기 제2 데이터 요소와 상기 제4 데이터 요소를 곱하여 제2 중간 결과를 발생하고, 및 상기 제1 중간 결과와 상기 제2 중간 결과를 가산하여 상기 압축 승산-가산 명령 수신에 응답하여 제9 데이터 요소를 최종 결과로 발생시키는 것을 특징으로 하는 컴퓨터 시스템.
  4. 제 2 항에 있어서, 상기 제1 데이터 요소, 상기 제2 데이터 요소, 상기 제3 데이터 요소, 및 상기 제4 데이터 요소는 소정의 비트수를 각각 포함하고, 상기 제9 데이터 요소는 두배의 상기 소정 비트수를 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  5. 제 1 항에 있어서, 상기 기억 영역은 그안에 기억된 일반 카운트 명령을 더 포함하고, 상기 프로세서는 상기 일반 카운트 명령 수신에 응답하여 얼마나 많은 비트가 상기 제1 데이터 요소내에 소정값으로 설정되고 얼마나 많은 비트가 상기 제2 데이터 요소내에 소정값으로 설정되는지를 병렬로 결정하는 것을 특징으로 하는 컴퓨터 시스템.
  6. 제 1 항에 있어서, 상기 기억 영역은 그안에 기억된,
    상기 프로세서가 상기 제1 압축 논리 명령 수신에 응답하여 상기 제4 압축 데이터와 상기 제5 압축 데이터로부터 대응 데이터 요소와 병렬로 AND 연산을 하는 제1 압축 논리 명령;
    상기 프로세서가 상기 제2 압축 논리 명령 수신에 응답하여 상기 제4 압축 데이터로부터의 데이터 요소와 상기 제5 압축 데이터로부터의 대응 데이터 요소의 논리역을 병렬로 AND 연산을 하는 제2 압축 논리 명령;
    상기 프로세서가 상기 제3 압축 논리 명령 수신에 응답하여 상기 제4 압축 데이터와 상기 제5 압축 데이터로부터 대응 데이터 요소와 병렬로 서로 논리적 OR 연산을 하는 제3 압축 논리 명령; 및
    상기 프로세서가 상기 제4 압축 논리 명령 수신에 응답하여 상기 제4 압축 데이터와 상기 제5 압축 데이터로부터 대응하는 데이터 요소와 병렬로 배타적 OR 연산을 하는 제4 압축 논리 명령을 더 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  7. 제 1 항에 있어서, 상기 시프트는 산술적인 것을 특징으로 하는 컴퓨터 시스템.
  8. 제 1 항에 있어서, 상기 시프트는 논리적인 것을 특징으로 하는 컴퓨터 시스템.
  9. 제 1 항에 있어서, 상기 시프트는 우측 방향인 것을 특징으로 하는 컴퓨터 시스템.
  10. 제 1 항에 있어서, 상기 시프트는 좌측 방향인 것을 특징으로 하는 컴퓨터 시스템.
  11. 제 1 항에 있어서, 상기 제1 데이터 요소, 상기 제2 데이터 요소, 상기 제3 데이터 요소, 및 상기 제4 데이터 요소 각각은 소정수의 비트를 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  12. 제 11 항에 있어서, 상기 부분은 상기 소정수의 비트의 절반을 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  13. 제 1 항에 있어서, 상기 제5 데이터 요소, 상기 제6 데이터 요소, 상기 제7 데이터 요소, 및 상기 제8 데이터 요소 각각은 상기 소정수의 비트를 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  14. 제1 압축 데이터와 제2 압축 데이터를 조종하고, 상기 제1 압축 데이터는 최소한 제1 데이터 요소와 제2 데이터 요소를 포함하고, 상기 제2 압축 데이터는 최소한 상기 제1 데이터 요소에 대응하는 제3 데이터 요소와 상기 제2 데이터 요소에 대응하는 제4 데이터 요소를 포함하고,각각의 상기 제1 데이터 요소, 상기 제2 데이터 요소, 상기 제3 데이터 요소, 및 상기 제4 데이터 요소는 비트 세트를 포함하는 방법에 있어서, 상기 방법은:
    명령을 수신하는 단계;
    상기 명령이 압축 명령, 압축 해제 명령, 압축 가산 명령, 압축 감산 명령, 압축 시프트 명령, 및 압축 비교 명령중 하나인지를 결정하는 단계;
    상기 명령이 상기 압축 명령이라면, 제3 압축 데이터를 형성하기 위해 상기 제1 데이터 요소, 상기 제2 데이터 요소, 상기 제3 데이터 요소, 및 상기 제4 데이터 요소 각각의 부분을 압축하는 단계;
    상기 명령이 상기 압축 해제 명령이라면, 상기 제1 압축 데이터로부터의 상기 제1 데이터 요소와 상기 제2 압축 데이터로부터의 상기 제3 데이터 요소를 포함하는 제4 압축 데이터 요소를 발생하는 단계;
    상기 명령이 상기 압축 가산 명령이라면, 상기 제1 압축 데이터와 상기 제2 압축 데이터의 대응하는 데이터 요소를 병렬로 각각 가산하는 단계;
    상기 명령이 상기 압축 감산 명령이라면, 상기 제1 압축 데이터와 상기 제2 압축 데이터의 대응하는 데이터 요소를 병렬로 각각 감산하는 단계;
    상기 명령이 상기 압축 시프트 명령이라면, 표현된 카운트에 의해 최소한 상기 제1 데이터 요소와 상기 제2 데이터 요소를 병렬로 각각 시프트하는 단계; 및
    상기 명령이 상기 압축 비교 명령이라면, 표현된 관계에 따라 상기 제1 압축 데이터와 상기 제2 압축 데이터로부터 대응하는 데이터 요소를 각각 병렬로 비교하고 그 결과로 압축 마스크를 발생하며, 상기 압축 마스크는 각각 상기 소정수를 포함하는 최소한 제1 마스크 요소와 제2 마스크 요소를 가지며, 상기 제1 마스크 요소내의 각각의 비트는 상기 제1 압축 데이터내의 상기 제1 데이터 요소를 상기 제2 압축 데이터내의 상기 제3 데이터와 비교한 상기 결과를 표현하고, 상기 제2 마스크 요소내의 각각의 비트는 상기 제1 압축 데이터내의 상기 제2 데이터 요소를 상기 제2 압축 데이터내의 상기 제4 데이터 요소와 비교한 결과를 표현하는 단계로 수행되는 컴퓨터를 포함하는 것을 특징으로 하는 방법.
  15. 제 14 항에 있어서:
    상기 결정 단계는 상기 명령이 압축 승산 명령인지를 결정하는 단계를 더 포함하고; 및
    상기 방법은:
    상기 명령이 상기 압축 승산 명령이라면, 상기 제1 압축 데이터와 상기 제2 압축 데이터의 대응하는 데이터 요소를 병렬로 각각 곱하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  16. 제 14 항에 있어서:
    상기 결정 단계는 상기 명령이 압축 승산-가산 명령인지를 결정하는 단계를 더 포함하고; 및
    상기 방법은:
    상기 명령이 상기 압축 승산-가산 명령이라면:
    제1 중간 결과를 발생하기 위해 상기 제1 데이터 요소와 상기 제3 데이터 요소를 서로 곱하는 단계,
    제2 중간 결과를 발생하기 위해 상기 제2 데이터 요소와 상기 제4 데이터 요소를 서로 곱하는 단계, 및
    제5 데이터 요소를 최종 결과로 발생하기 위해 상기 제1 중간 결과와 상기 제2 중간 결과를 서로 가산하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  17. 제 16 항에 있어서, 상기 제1 데이터 요소, 상기 제2 데이터 요소, 상기 제3 데이터 요소, 및 상기 제4 데이터 요소는 각각 소정의 비트수를 포함하고, 상기 제4 데이터 요소와 상기 제5 데이터 요소는 각각 두배의 상기 소정의 비트수를 포함하는 것을 특징으로 하는 방법.
  18. 제 14 항에 있어서:
    상기 결정 단계는 상기 명령이 일반 카운트 명령인지를 결정하는 단계를 더 포함하고; 및
    상기 방법은:
    상기 명령이 상기 일반 카운트 명령이라면, 상기 제1 데이터 요소내에 소정값으로 설정되는 비트가 얼마인지 및 상기 제2 데이터 요소내에 상기 소정값으로 설정되는 비트가 얼마인지를 병렬로 결정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  19. 제 14 항에 있어서:
    상기 결정 단계는 상기 명령이 다수의 압축 논리 명령중 하나인지를 결정하는 단계를 더 포함하고; 및
    상기 방법은:
    상기 명령이 제1의 상기 다수의 압축 논리 명령이라면, 상기 제1 압축 데이터와 상기 제2 압축 데이터로부터 서로 병렬로 대응하는 데이터 요소를 논리적으로 AND시키는 단계;
    상기 명령이 제2의 상기 다수의 압축 논리 명령이라면, 상기 제1 압축 데이터로부터의 데이터 요소와 상기 제2 압축 데이터로부터 역의 논리로 대응하는 데이터 요소를 논리적으로 AND시키는 단계;
    상기 명령이 제3의 상기 다수의 압축 논리 명령이라면, 상기 제1 압축 데이터와 상기 제2 압축 데이터로부터 서로 병렬로 대응하는 데이터 요소를 논리적으로 OR시키는 단계; 및
    상기 명령이 제4의 상기 다수의 압축 논리 명령이라면, 상기 제1 압축 데이터와 상기 제2 압축 데이터로부터 서로 병렬로 대응하는 데이터 요소를 논리적 배타적으로 OR시키는 단계를 더 포함하는 것을 특징으로 하는 방법.
  20. 제 14 항에 있어서, 각각 시프트하는 상기 단계는 산술적인 시프트와 논리적인 시프트중 하나로 실행되는 것을 특징으로 하는 컴퓨터 시스템.
  21. 제 14 항에 있어서, 각각 시프트하는 상기 단계는 상기 제1 데이터 요소와 상기 제2 데이터 요소가 우측 방향 및 좌측 방향중 하나로 시프트되도록 실행되는 것을 특징으로 하는 컴퓨터 시스템.
  22. 제 16 항에 있어서, 상기 제1 데이터 요소, 상기 제2 데이터 요소, 상기 제3 데이터 요소, 및 상기 제4 데이터 요소는 소정의 비트수를 포함하는 것을 특징으로 하는 방법.
  23. 제 22 항에 있어서, 상기 부분은 상기 소정의 비트수중 절반을 포함하는 것을 특징으로 하는 방법.
  24. 제 14 항에 있어서, 상기 결정 단계는 디코더에 의해 실행되는 것을 특징으로 하는 방법.
KR1019980701541A 1995-08-31 1996-07-17 압축 데이터 연산용 명령 세트 KR19990044304A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US52136095A 1995-08-31 1995-08-31
US8/521360 1995-08-31

Publications (1)

Publication Number Publication Date
KR19990044304A true KR19990044304A (ko) 1999-06-25

Family

ID=24076444

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980701541A KR19990044304A (ko) 1995-08-31 1996-07-17 압축 데이터 연산용 명령 세트

Country Status (9)

Country Link
EP (2) EP0847551B1 (ko)
JP (1) JP3711147B2 (ko)
KR (1) KR19990044304A (ko)
CN (23) CN1534458B (ko)
AU (1) AU6677896A (ko)
BR (2) BR9612911B1 (ko)
HK (2) HK1099095A1 (ko)
TW (1) TW310406B (ko)
WO (1) WO1997008608A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190058537A (ko) * 2016-10-20 2019-05-29 어드밴스드 마이크로 디바이시즈, 인코포레이티드 동적 가변 정밀도 계산

Families Citing this family (75)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6738793B2 (en) 1994-12-01 2004-05-18 Intel Corporation Processor capable of executing packed shift operations
WO1997008608A1 (en) * 1995-08-31 1997-03-06 Intel Corporation A set of instructions for operating on packed data
US6145068A (en) * 1997-09-16 2000-11-07 Phoenix Technologies Ltd. Data transfer to a non-volatile storage medium
US7197625B1 (en) 1997-10-09 2007-03-27 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US5864703A (en) 1997-10-09 1999-01-26 Mips Technologies, Inc. Method for providing extended precision in SIMD vector arithmetic operations
EP3073388A1 (en) 1998-03-18 2016-09-28 Koninklijke Philips N.V. Data processing device and method of computing the cosine transform of a matrix
US7395302B2 (en) 1998-03-31 2008-07-01 Intel Corporation Method and apparatus for performing horizontal addition and subtraction
US6230253B1 (en) 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
US6233671B1 (en) 1998-03-31 2001-05-15 Intel Corporation Staggering execution of an instruction by dividing a full-width macro instruction into at least two partial-width micro instructions
US6230257B1 (en) 1998-03-31 2001-05-08 Intel Corporation Method and apparatus for staggering execution of a single packed data instruction using the same circuit
US7392275B2 (en) 1998-03-31 2008-06-24 Intel Corporation Method and apparatus for performing efficient transformations with horizontal addition and subtraction
US6192467B1 (en) * 1998-03-31 2001-02-20 Intel Corporation Executing partial-width packed data instructions
US7117342B2 (en) 1998-12-03 2006-10-03 Sun Microsystems, Inc. Implicitly derived register specifiers in a processor
US7114056B2 (en) 1998-12-03 2006-09-26 Sun Microsystems, Inc. Local and global register partitioning in a VLIW processor
JP3336986B2 (ja) * 1999-02-03 2002-10-21 日本電気株式会社 信号処理プロセッサ及びそれに用いる丸め機能付き積和演算器
EP2267596B1 (en) * 1999-05-12 2018-08-15 Analog Devices, Inc. Processor core for processing instructions of different formats
US6678810B1 (en) 1999-12-30 2004-01-13 Intel Corporation MFENCE and LFENCE micro-architectural implementation method and system
US6671795B1 (en) 2000-01-21 2003-12-30 Intel Corporation Method and apparatus for pausing execution in a processor or the like
US7039906B1 (en) * 2000-09-29 2006-05-02 International Business Machines Corporation Compiler for enabling multiple signed independent data elements per register
US7711763B2 (en) 2001-02-21 2010-05-04 Mips Technologies, Inc. Microprocessor instructions for performing polynomial arithmetic operations
US7162621B2 (en) 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US7739319B2 (en) 2001-10-29 2010-06-15 Intel Corporation Method and apparatus for parallel table lookup using SIMD instructions
US7818356B2 (en) 2001-10-29 2010-10-19 Intel Corporation Bitstream buffer manipulation with a SIMD merge instruction
US20040054877A1 (en) 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US7685212B2 (en) * 2001-10-29 2010-03-23 Intel Corporation Fast full search motion estimation with SIMD merge instruction
JP3857614B2 (ja) 2002-06-03 2006-12-13 松下電器産業株式会社 プロセッサ
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
JP2005535966A (ja) 2002-08-09 2005-11-24 インテル・コーポレーション アライメントまたはブロードキャスト命令を含むマルチメディア・コプロセッサの制御メカニズム
US6986023B2 (en) 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
US7293056B2 (en) * 2002-12-18 2007-11-06 Intel Corporation Variable width, at least six-way addition/accumulation instructions
US7139900B2 (en) 2003-06-23 2006-11-21 Intel Corporation Data packet arithmetic logic devices and methods
US7424501B2 (en) 2003-06-30 2008-09-09 Intel Corporation Nonlinear filtering and deblocking applications utilizing SIMD sign and absolute value operations
US7426749B2 (en) * 2004-01-20 2008-09-16 International Business Machines Corporation Distributed computation in untrusted computing environments using distractive computational units
US20060101244A1 (en) * 2004-11-10 2006-05-11 Nvidia Corporation Multipurpose functional unit with combined integer and floating-point multiply-add pipeline
US8024551B2 (en) * 2005-10-26 2011-09-20 Analog Devices, Inc. Pipelined digital signal processor
US8127117B2 (en) * 2006-05-10 2012-02-28 Qualcomm Incorporated Method and system to combine corresponding half word units from multiple register units within a microprocessor
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US7958181B2 (en) 2006-09-21 2011-06-07 Intel Corporation Method and apparatus for performing logical compare operations
US9069547B2 (en) 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
CN100461095C (zh) * 2007-11-20 2009-02-11 浙江大学 一种支持多模式的媒体增强流水线乘法单元设计方法
CN101685388B (zh) * 2008-09-28 2013-08-07 北京大学深圳研究生院 执行比较运算的方法和装置
US9747105B2 (en) 2009-12-17 2017-08-29 Intel Corporation Method and apparatus for performing a shift and exclusive or operation in a single instruction
US8504807B2 (en) 2009-12-26 2013-08-06 Intel Corporation Rotate instructions that complete execution without reading carry flag
US8604946B2 (en) * 2011-04-08 2013-12-10 Panasonic Corporation Data processing device and data processing method
US10564966B2 (en) 2011-12-22 2020-02-18 Intel Corporation Packed data operation mask shift processors, methods, systems, and instructions
CN104011650B (zh) * 2011-12-23 2017-09-19 英特尔公司 使用输入写掩码和立即数从源写掩码寄存器在目的地写掩码寄存器中设置输出掩码的系统、装置和方法
CN114721721A (zh) * 2011-12-23 2022-07-08 英特尔公司 用于混洗浮点或整数值的装置和方法
EP2798464B8 (en) 2011-12-30 2019-12-11 Intel Corporation Packed rotate processors, methods, systems, and instructions
US9122475B2 (en) * 2012-09-28 2015-09-01 Intel Corporation Instruction for shifting bits left with pulling ones into less significant bits
US20140281418A1 (en) * 2013-03-14 2014-09-18 Shihjong J. Kuo Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions
US9990202B2 (en) * 2013-06-28 2018-06-05 Intel Corporation Packed data element predication processors, methods, systems, and instructions
US9405539B2 (en) * 2013-07-31 2016-08-02 Intel Corporation Providing vector sub-byte decompression functionality
US9495155B2 (en) * 2013-08-06 2016-11-15 Intel Corporation Methods, apparatus, instructions and logic to provide population count functionality for genome sequencing and alignment
US9513907B2 (en) * 2013-08-06 2016-12-06 Intel Corporation Methods, apparatus, instructions and logic to provide vector population count functionality
US10768930B2 (en) * 2014-02-12 2020-09-08 MIPS Tech, LLC Processor supporting arithmetic instructions with branch on overflow and methods
US10068652B2 (en) * 2014-09-03 2018-09-04 Micron Technology, Inc. Apparatuses and methods for determining population count
US9891913B2 (en) * 2014-12-23 2018-02-13 Intel Corporation Method and apparatus for performing conflict detection using vector comparison operations
CN104778147B (zh) * 2015-04-14 2017-06-06 飞天诚信科技股份有限公司 一种基于协处理器的数据处理方法
US11204764B2 (en) * 2016-03-31 2021-12-21 Intel Corporation Processors, methods, systems, and instructions to Partition a source packed data into lanes
CN107766079B (zh) * 2016-08-19 2022-03-11 北京百度网讯科技有限公司 处理器以及用于在处理器上执行指令的方法
US10409603B2 (en) * 2016-12-30 2019-09-10 Intel Corporation Processors, methods, systems, and instructions to check and store indications of whether memory addresses are in persistent memory
US10162633B2 (en) * 2017-04-24 2018-12-25 Arm Limited Shift instruction
CN107145334B (zh) * 2017-04-26 2020-10-09 龙芯中科技术有限公司 常量获取方法、装置、处理器及计算机可读存储介质
CN109388427A (zh) * 2017-08-11 2019-02-26 龙芯中科技术有限公司 向量处理方法、向量处理单元和微处理器
CN107861709B (zh) * 2017-12-01 2021-04-02 中国兵器装备集团自动化研究所 适应前端高速处理的累加器和功率谱累加器及其累加方法
CN108595149B (zh) * 2018-04-28 2021-05-04 天津芯海创科技有限公司 可重构乘加运算装置
CN110554886B (zh) * 2018-05-30 2021-12-10 赛灵思公司 数据拆分结构、方法及其片上实现
WO2020039522A1 (ja) * 2018-08-22 2020-02-27 日本電気株式会社 情報処理装置、情報処理方法及びプログラム
CN109783054B (zh) * 2018-12-20 2021-03-09 中国科学院计算技术研究所 一种rsfq fft处理器的蝶形运算处理方法及系统
CN110221807B (zh) * 2019-06-06 2021-08-03 龙芯中科(合肥)技术有限公司 数据移位方法、装置、设备及计算机可读存储介质
CN111258538B (zh) * 2020-01-13 2023-07-21 电子科技大学 一种基于fpga的大位宽高性能加法器电路
CN112230886B (zh) * 2020-09-11 2022-11-08 清华大学 免除Toom-Cook的处理装置和基于其的模乘获取方法
CN112181354B (zh) * 2020-10-12 2021-08-10 上海芯旺微电子技术有限公司 一种移位饱和同步处理的方法及其应用
CN112181355B (zh) * 2020-10-12 2021-08-06 上海芯旺微电子技术有限公司 一种移位饱和处理方法及其应用
US20230297371A1 (en) * 2022-03-15 2023-09-21 Intel Corporation Fused multiple multiplication and addition-subtraction instruction set

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE310008B (ko) * 1965-06-30 1969-04-14 Ericsson Telefon Ab L M
JPS5955546A (ja) * 1982-09-24 1984-03-30 Fujitsu Ltd フア−ムウエア処理装置
JPS60134974A (ja) * 1983-12-23 1985-07-18 Hitachi Ltd ベクトル処理装置
JPS6284335A (ja) * 1985-10-09 1987-04-17 Hitachi Ltd 乗算回路
JPS6297060A (ja) * 1985-10-23 1987-05-06 Mitsubishi Electric Corp デイジタルシグナルプロセツサ
JP2634609B2 (ja) * 1987-10-16 1997-07-30 富士通テン株式会社 データ転送装置
US4985848A (en) * 1987-09-14 1991-01-15 Visual Information Technologies, Inc. High speed image processing system using separate data processor and address generator
US4933847A (en) * 1987-11-17 1990-06-12 International Business Machines Corporation Microcode branch based upon operand length and alignment
US5126964A (en) * 1988-04-01 1992-06-30 Digital Equipment Corporation High performance bit-sliced multiplier circuit
EP0344347B1 (de) * 1988-06-02 1993-12-29 Deutsche ITT Industries GmbH Einrichtung zur digitalen Signalverarbeitung
US5073969A (en) * 1988-08-01 1991-12-17 Intel Corporation Microprocessor bus interface unit which changes scheduled data transfer indications upon sensing change in enable signals before receiving ready signal
CA1311063C (en) * 1988-12-16 1992-12-01 Tokumichi Murakami Digital signal processor
US5047973A (en) * 1989-04-26 1991-09-10 Texas Instruments Incorporated High speed numerical processor for performing a plurality of numeric functions
US5001662A (en) * 1989-04-28 1991-03-19 Apple Computer, Inc. Method and apparatus for multi-gauge computation
JP2984463B2 (ja) * 1991-06-24 1999-11-29 株式会社日立製作所 マイクロコンピュータ
CA2073516A1 (en) * 1991-11-27 1993-05-28 Peter Michael Kogge Dynamic multi-mode parallel processor array architecture computer system
US5257214A (en) * 1992-06-16 1993-10-26 Hewlett-Packard Company Qualification of register file write enables using self-timed floating point exception flags
US5263125A (en) * 1992-06-17 1993-11-16 Motorola, Inc. Circuit and method for evaluating fuzzy logic rules
US5295229A (en) * 1992-06-17 1994-03-15 Motorola, Inc. Circuit and method for determining membership in a set during a fuzzy logic operation
EP0581986A1 (de) * 1992-08-04 1994-02-09 Siemens Nixdorf Informationssysteme Aktiengesellschaft Datenverarbeitungsanlage mit Verarbeitung von Aufbereitungsbefehlen
JPH0682269A (ja) * 1992-09-03 1994-03-22 Matsushita Electric Ind Co Ltd エンコーダ信号逓倍回路
US5268855A (en) * 1992-09-14 1993-12-07 Hewlett-Packard Company Common format for encoding both single and double precision floating point numbers
US5375080A (en) * 1992-12-18 1994-12-20 Xerox Corporation Performing arithmetic on composite operands to obtain a binary outcome for each multi-bit component
US5717616A (en) * 1993-02-19 1998-02-10 Hewlett-Packard Company Computer hardware instruction and method for computing population counts
US5717947A (en) * 1993-03-31 1998-02-10 Motorola, Inc. Data processing system and method thereof
DE69428466T2 (de) * 1993-11-23 2002-05-23 Hewlett Packard Co Parallele Datenverarbeitung in einem Einzelprozessor
US5442581A (en) * 1993-11-30 1995-08-15 Texas Instruments Incorporated Iterative division apparatus, system and method forming plural quotient bits per iteration
CN1099081C (zh) * 1994-01-29 2003-01-15 世嘉企业股份有限公司 信息处理装置
GB2287333B (en) * 1994-03-11 1998-02-11 Advanced Risc Mach Ltd Data processing multiplier
US5557734A (en) * 1994-06-17 1996-09-17 Applied Intelligent Systems, Inc. Cache burst architecture for parallel processing, such as for image processing
JP3579087B2 (ja) * 1994-07-08 2004-10-20 株式会社日立製作所 演算器およびマイクロプロセッサ
WO1997008608A1 (en) * 1995-08-31 1997-03-06 Intel Corporation A set of instructions for operating on packed data

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190058537A (ko) * 2016-10-20 2019-05-29 어드밴스드 마이크로 디바이시즈, 인코포레이티드 동적 가변 정밀도 계산

Also Published As

Publication number Publication date
CN1225688C (zh) 2005-11-02
CN1515994A (zh) 2004-07-28
CN101794213B (zh) 2014-09-17
CN103092563A (zh) 2013-05-08
CN1534458A (zh) 2004-10-06
CN1264085C (zh) 2006-07-12
CN101930352A (zh) 2010-12-29
JP3711147B2 (ja) 2005-10-26
CN103092564B (zh) 2016-04-06
CN103064651A (zh) 2013-04-24
CN103064651B (zh) 2016-01-27
CN103064653A (zh) 2013-04-24
JPH11511575A (ja) 1999-10-05
BR9612911B1 (pt) 2010-12-14
CN103064653B (zh) 2016-05-18
CN103345380B (zh) 2016-05-18
BR9610095A (pt) 1999-02-17
CN100380312C (zh) 2008-04-09
HK1144974A1 (en) 2011-03-18
EP0847551B1 (en) 2012-12-05
EP0847551A1 (en) 1998-06-17
CN1149469C (zh) 2004-05-12
CN103092562A (zh) 2013-05-08
CN102707922B (zh) 2015-10-07
CN102073475B (zh) 2015-05-13
CN103383639B (zh) 2016-05-18
CN102073475A (zh) 2011-05-25
CN103064649B (zh) 2016-03-02
CN1431580A (zh) 2003-07-23
CN101930352B (zh) 2016-05-18
CN103383639A (zh) 2013-11-06
CN103064649A (zh) 2013-04-24
CN103092562B (zh) 2016-05-18
CN1534453A (zh) 2004-10-06
EP1693742A3 (en) 2010-01-06
CN103345380A (zh) 2013-10-09
CN101794212A (zh) 2010-08-04
CN1523492A (zh) 2004-08-25
CN103455304B (zh) 2016-04-27
EP0847551A4 (en) 2001-11-21
CN103064650A (zh) 2013-04-24
CN103455304A (zh) 2013-12-18
CN1200822A (zh) 1998-12-02
CN103092564A (zh) 2013-05-08
CN1892589A (zh) 2007-01-10
CN101794213A (zh) 2010-08-04
CN103092563B (zh) 2016-05-18
HK1099095A1 (en) 2007-08-03
WO1997008608A1 (en) 1997-03-06
CN103064652A (zh) 2013-04-24
CN103064650B (zh) 2016-02-24
AU6677896A (en) 1997-03-19
CN1534458B (zh) 2010-05-26
TW310406B (ko) 1997-07-11
CN1252587C (zh) 2006-04-19
CN101794212B (zh) 2015-01-07
CN102707922A (zh) 2012-10-03
CN1892589B (zh) 2011-02-23
CN103064652B (zh) 2016-07-20
EP1693742A2 (en) 2006-08-23

Similar Documents

Publication Publication Date Title
KR19990044304A (ko) 압축 데이터 연산용 명령 세트
KR100329339B1 (ko) 압축데이터에의한승산-가산연산수행장치
US5859997A (en) Method for performing multiply-substrate operations on packed data
JP4064989B2 (ja) パック・データの乗加算演算を実行する装置

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application