KR20220045012A - 압축 보조 명령어들 - Google Patents

압축 보조 명령어들 Download PDF

Info

Publication number
KR20220045012A
KR20220045012A KR1020227007797A KR20227007797A KR20220045012A KR 20220045012 A KR20220045012 A KR 20220045012A KR 1020227007797 A KR1020227007797 A KR 1020227007797A KR 20227007797 A KR20227007797 A KR 20227007797A KR 20220045012 A KR20220045012 A KR 20220045012A
Authority
KR
South Korea
Prior art keywords
vector
operand
register
bit
instruction
Prior art date
Application number
KR1020227007797A
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 KR20220045012A publication Critical patent/KR20220045012A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3059Digital compression and data reduction techniques where the original information is represented by a subset or similar information, e.g. lossy compression
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3082Vector coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

일 실시예에서, 프로세서는 압축/압축해제를 수행할 때 프로세서의 성능을 개선하기 위해 압축 소프트웨어에 사용될 수 있는 하나 이상의 압축 보조 명령어들을 지원한다. 즉, 압축/압축해제 태스크는 압축 보조 명령어들이 사용될 때 그것들이 사용되지 않을 때보다 더 신속하게 수행되고 전력을 덜 소비할 수 있다. 일부 경우들에서, 더 효과적이고, 더 복잡한 압축 알고리즘의 비용은 덜 효과적이고, 덜 복잡한 압축 알고리즘의 비용으로 감소될 수 있다.

Description

압축 보조 명령어들
본 명세서에 기재된 실시예들은 프로세서 더 구체적으로는, 압축/압축해제 성능 및 전력 효율을 개선하기 위한 프로세서 내의 압축 보조 명령어들에 관한 것이다.
압축은 다양한 이유로 컴퓨팅 디바이스들에서 사용된다. 예를 들어, 소프트웨어 다운로드는 네트워크를 통한 전달을 위해 압축될 수 있고, 타겟 컴퓨팅 디바이스 상에서 설치를 위해 압축해제될 수 있다. 일부 경우들에서, 휴대용 컴퓨팅 디바이스들(예컨대 스마트폰, 휴대용 디지털 어시스턴트, 태블릿 컴퓨터 등)과 같이, 소프트웨어는 디바이스 상에서 압축해제, 설치되고, 저장을 위해 재압축될 수 있다. 다양한 소프트웨어를 압축된 형태로 저장함으로써 디바이스 상의 저장 공간을 아낄 수 있으며, 이는 랩톱, 데스크톱, 서버 등과 같은 더 큰 컴퓨팅 디바이스 내의 저장보다 더 제한적일 수 있다.
압축/압축해제는 주로 소프트웨어로 구현되며, 따라서 수행 비용(및 배터리와 같은 제한된 전력 공급장치를 갖는 휴대용 디바이스들에서의 전력 소모)이 중요할 수 있다. 압축 알고리즘의 효율성은 일반적으로 압축비로 지칭되는, 비압축 원본의 크기 대 압축 결과의 크기의 비율의 관점에서 측정된다. 불행히도, 주어진 압축 알고리즘의 효율성은 일반적으로 그것의 복잡성과 상관되므로, 따라서 효율성의 비용은 성능(예컨대 지연) 및 전력이다.
일 실시예에서, 프로세서는 압축/압축해제를 수행할 때 프로세서의 성능을 개선하기 위해 압축 소프트웨어에 사용될 수 있는 하나 이상의 압축 보조 명령어들을 지원한다. 즉, 압축/압축해제 태스크는 압축 보조 명령어들이 사용될 때 그것들이 사용되지 않을 때보다 더 신속하게 수행되고 전력을 덜 소비할 수 있다. 일부 경우들에서, 더 효과적이고, 더 복잡한 압축 알고리즘의 비용은 덜 효과적이고, 덜 복잡한 압축 알고리즘의 비용으로 감소될 수 있다.
하기의 상세한 설명은 첨부 도면들을 참조하며, 이제 도면들이 간단히 설명된다.
도 1은 유한 상태 엔트로피(FSE) 압축 알고리즘에 기초한 압축해제의 일 실시예의 블록도이다.
도 2는 다수의 인터리빙된 FSE 심볼 스트림들이 동일한 디코더 및 비트 스트림을 공유하는 FSE 알고리즘에 기초한 압축해제의 최적화의 일 실시예의 블록도이다.
도 3은 다수의 인터리빙된 FSE 심볼 및 값 스트림들이 동일한 디코더 테이블을 공유하는 FSE 알고리즘에 기초한 압축해제의 최적화의 다른 실시예의 블록도이다.
도 4는 비트 스택 판독 동작의 일 실시예를 도시하는 블록도이다.
도 5는 비트 스택 기록 동작의 일 실시예를 도시하는 블록도이다.
도 6은 top 압축해제 보조 명령어의 일 실시예에 대한 레지스터 입력들 및 출력들을 도시하는 블록도이다.
도 7은 pop 압축해제 보조 명령어의 일 실시예에 대한 레지스터 입력들 및 출력들을 도시하는 블록도이다.
도 8은 create 압축 보조 명령어의 일 실시예에 대한 레지스터 입력들 및 출력들을 도시하는 블록도이다.
도 9는 concat 압축 보조 명령어의 일 실시예에 대한 레지스터 입력들 및 출력들을 도시하는 블록도이다.
도 10은 프로세서를 포함하는 시스템의 일 실시예의 블록도이다.
도 11은 도 10에 도시된 벡터 실행 유닛의 일 실시예의 블록도이다.
도 12는 top 명령어를 실행하기 위한 프로세서의 일 실시예의 동작을 도시하는 흐름도이다.
도 13은 pop 명령어를 실행하기 위한 프로세서의 일 실시예의 동작을 도시하는 흐름도이다.
도 14는 create 명령어를 실행하기 위한 프로세서의 일 실시예의 동작을 도시하는 흐름도이다.
도 15는 concat 명령어를 실행하기 위한 프로세서의 일 실시예의 동작을 도시하는 흐름도이다.
본 발명에 설명된 실시예들은 다양한 수정들 및 대안적인 형태들을 허용할 수 있지만, 그의 특정 실시예들이 도면들에 예로서 도시되고, 본 명세서에서 상세히 설명될 것이다. 그러나, 그에 대한 도면들 및 상세한 설명은 실시예들을 개시된 특정 형태로 제한하는 것으로 의도되는 것이 아니라, 그와는 반대로, 의도는 첨부된 청구범위의 사상 및 범주 내에 속한 모든 수정들, 등가물들, 및 대안들을 커버하기 위한 것임을 이해하여야 한다. 본 명세서에서 사용되는 표제들은 오직 구성 목적들을 위한 것이며 설명의 범위를 제한하기 위해 사용되는 것으로 의도되지 않는다. 본 출원 전반에 걸쳐 사용되는 바와 같이, "일 수 있다(may)"라는 단어는 의무적인 의미(즉, "이어야만 한다(must)"를 의미)라기보다 오히려 허용의 의미(즉, "~에 대해 가능성을 갖는다"는 의미)로 사용된다. 유사하게, "포함하다(include, includes)" 및 "포함하는(including)"이라는 단어들은, "포함하지만 이로 제한되지 않는다"는 것을 의미한다. 본 명세서에 사용된 바와 같이, 구체적으로 진술되지 않는 한, "제1", "제2" 등의 용어들은 선행하고 있는 명사의 라벨로 사용될 뿐, 임의의 유형의 순번(예를 들어, 공간적, 시간적, 논리적 등)을 암시하는 것은 아니다.
본 발명 내에서, 상이한 엔티티들(이들은 "유닛들", "회로들", 다른 컴포넌트들 등으로 다양하게 지칭될 수 있음)은 하나 이상의 태스크들 또는 동작들을 수행"하도록 구성된" 것으로 설명되거나 또는 청구될 수 있다. 이러한 표현-[하나 이상의 태스크들을 수행]하도록 구성된 [엔티티]-은 본 명세서에서 구조(즉, 전자 회로와 같은 물리적인 것)를 지칭하는 데 사용된다. 더 상세하게는, 이러한 표현은 이러한 구조가 동작 동안 하나 이상의 태스크들을 수행하도록 배열됨을 나타내는 데 사용된다. 구조가 현재 동작되고 있지 않더라도, 구조는 일부 태스크를 수행"하도록 구성된다"고 말할 수 있다. "출력 클록 신호를 생성하도록 구성된 클록 회로"는, 예를 들어, 해당 회로가 현재 사용되고 있지 않더라도(예컨대, 전원 공급이 접속되어 있지 않음), 동작 동안 이러한 기능을 수행하는 회로를 커버하도록 의도된다. 따라서, 일부 태스크를 수행"하도록 구성된" 것으로 설명된 또는 언급된 엔티티는 디바이스, 회로, 태스크를 구현하도록 실행가능한 프로그램 명령어들을 저장하는 메모리 등과 같은 물리적인 것을 지칭한다. 이러한 문구는 본 명세서에서 무형인 것을 지칭하기 위해 사용되지는 않는다. 일반적으로, "~하도록 구성된"에 대응되는 구조를 형성하는 회로부는 하드웨어 회로들을 포함할 수 있다. 하드웨어 회로들은 조합 로직 회로부, 플롭(flop), 레지스터, 래치 등과 같은 클로킹된(clocked) 저장 디바이스, 유한 상태 머신, 정적 랜덤 액세스 메모리 또는 임베디드 동적 랜덤 액세스 메모리와 같은 메모리, 주문 설계된 회로부, 아날로그 회로부, 프로그래밍가능한 로직 어레이 등의 임의의 조합을 포함할 수 있다. 유사하게, 다양한 유닛들/회로들/컴포넌트들은 설명의 편의상 태스크 또는 태스크들을 수행하는 것으로 설명될 수 있다. 그러한 설명은 "~하도록 구성된"이라는 문구를 포함하는 것으로 해석되어야 한다.
"~하도록 구성된"이라는 용어는 "~하도록 구성가능한"을 의미하도록 의도되지 않는다. 예를 들어, 프로그래밍되지 않은 FPGA는, 그것이 일부 구체적인 기능을 수행"하도록 구성가능"할 수 있지만, 그 기능을 수행"하도록 구성된" 것으로 고려되지 않을 것이다. 적절한 프로그래밍 후에, 이어서 FPGA는 그 기능을 수행하도록 "구성된다"고 말할 수 있다.
일 실시예에서, 본 발명에 따른 하드웨어 회로들은 베릴로그(Verilog) 또는 VHDL과 같은 하드웨어 디스크립션 언어(hardware description language, HDL)로 회로의 디스크립션을 코딩함으로써 구현될 수 있다. HDL 디스크립션은 주어진 집적 회로 제조 기술을 위해 설계된 셀들의 라이브러리에 대해 합성될 수 있고, 타이밍, 전력 및 다른 이유들로 인해 수정되어 최종 설계 데이터베이스를 생성할 수 있으며, 이는 파운드리(foundry)로 송신되어 마스크들을 생성하고 궁극적으로 집적 회로를 생성할 수 있다. 일부 하드웨어 회로들 또는 그의 부분들은 또한 회로도 편집기(schematic editor)로 맞춤 설계될 수 있고 합성된 회로와 함께 집적 회로 설계 내로 캡처될 수 있다. 집적 회로는 트랜지스터들을 포함할 수 있고, 다른 회로 요소들(예컨대, 커패시터들, 저항기들, 인덕터들 등과 같은 수동 요소들) 및 트랜지스터들과 회로 요소들 사이의 상호접속부를 추가로 포함할 수 있다. 일부 실시예들은 하드웨어 회로들을 구현하기 위해 함께 결합된 다수의 집적 회로들을 구현할 수 있고, 그리고/또는 일부 실시예들에서는 이산 요소들이 사용될 수 있다. 대안적으로, HDL 설계는 FPGA(Field Programmable Gate Array)와 같은 프로그래밍가능 로직 어레이로 합성될 수 있으며 FPGA에서 구현될 수 있다.
본 명세서에서 사용되는 바와 같이, "~에 기초하여" 또는 "~에 따라"라는 용어는 결정에 영향을 주는 하나 이상의 인자들을 기술하기 위해 사용된다. 이러한 용어는 부가적인 인자들이 결정에 영향을 줄 수 있는 가능성을 배제하지 않는다. 즉, 결정은 단지 특정된 인자들에 기초하거나 또는 그 특정된 인자들뿐만 아니라 다른, 불특정된 인자들에 기초할 수 있다. "B에 기초하여 A를 결정한다"라는 문구를 고려하자. 이러한 문구는 B가 A를 결정하는 데 사용되거나 A의 결정에 영향을 주는 인자라는 것을 명시한다. 이러한 문구는 A의 결정이 C와 같은 일부 다른 인자에 또한 기초할 수 있음을 배제하지 않는다. 또한, 이러한 문구는 A가 B에만 기초하여 결정되는 실시예를 커버하도록 의도된다. 본 명세서에서 사용되는 바와 같이, "~에 기초하여"라는 문구는 "~에 적어도 부분적으로 기초하여"라는 문구와 동의어이다.
본 명세서는 다양한 실시예들에 대한 참조를 포함하여, 본 발명이 하나의 특정 구현을 지칭하는 것이 아니라 오히려 첨부된 청구범위를 포함하는 본 발명의 사상 내에 포함되는 실시예들의 범위를 지칭하는 것으로 의도된다. 특정 특징들, 구조들 또는 특성들이 본 개시내용과 일관성을 유지하는 임의의 적합한 방식으로 조합될 수 있다.
본 명세서는, 한 요소를 지칭하기 위해 "한(a 또는 an)"이라는 단어를, 또는 그 요소를 지칭하기 위해 "그(the)"라는 단어를 사용할 수 있다. 이들 단어들은 그 요소의 단지 하나의 인스턴스(instance)만이 있음을 의미하도록 의도된 것은 아니다. 다양한 실시예들에서 하나 초과의 것이 있을 수 있다. 따라서, "한" 및 "그"는 단지 하나로서 명백히 기술되지 않는 한, "하나 이상"을 의미하는 것으로 해석되어야 한다.
본 명세서는 다양한 컴포넌트들, 유닛들, 회로들 등을 결합된 것으로 설명할 수 있다. 일부 실시예들에서, 컴포넌트들, 유닛들, 회로들 등은, 그들이 전기적으로 결합(예컨대, 하나 이상의 다른 회로들을 통해 직접 접속되거나 간접 접속됨)되고/되거나 통신가능하게 결합되는 경우, 결합될 수 있다.
전술한 바와 같이, 압축 보조 명령어들의 다양한 실시예들을 구현하는 프로세서가 개시된다. 일반적으로, 압축 보조 명령어는 압축 및/또는 압축해제를 수행할 때 프로세서의 성능을 개선하도록 설계된 명령어일 수 있다. 따라서, 일부 경우들에서 압축 보조 명령어는 압축해제에만 사용되도록 예상되는 명령어일 수 있다. 다른 경우들에서, 압축 보조 명령어는 압축에만 사용되거나, 또는 압축 및 압축해제 둘 모두에서 사용되는 것으로 예상될 수 있다.
압축 보조 명령어들 및 그들의 응용을 도시하기 위하여, 유한 상태 엔트로피(Finite State Entropy, FSE) 압축 알고리즘의 여러 구현예들이 도시된다. FSE가 예로서 사용되지만, 하나 이상의 비트 스트림들 또는 비트 스택들을 압축의 일부로서 사용하는 메커니즘은 아래 설명된 압축 보조 명령어들로부터 이익을 얻을 수 있다.
도 1은 FSE-압축 데이터의 압축해제의 일 실시예의 블록도이다. 도 1에 도시된 바와 같이, 데이터는 테이블(10) 및 비트 스트림(12)을 포함한다. 즉, 데이터가 압축된 유닛일 때, FSE 압축 알고리즘, 테이블(10) 및 비트 스트림(12)이 생성되었다. 초기 상태는 테이블에서 초기 엔트리를 탐색하는 데 사용될 수 있다. 즉, 상태(도면 부호 16에 도시됨)는 테이블(10)으로의 인덱스일 수 있다. 각각의 엔트리는 도면 부호 14에 도시된 것과 유사한 데이터를 포함할 수 있다. 특히, 엔트리는 베이스, 심볼, 및 비트들의 수(n)를 포함할 수 있다. 심볼은 출력 데이터의 일부일 수 있고, 이전에 판독된 심볼들과 조립되어 원본 데이터인 출력 데이터 스트림을 생성하도록 제공될 수 있다. 즉, 심볼은 원본 데이터의 일부이고 데이터 스트림의 끝에 연결될 수 있다(또는 초기 상태의 경우, 데이터 스트림을 초기화할 수 있음). 비트들의 수(n)는 다음 상태를 생성하기 위하여 베이스에 가산될 델타 값을 제공하기 위하여 비트 스트림(12)으로부터 소모될 비트들의 수를 명시할 수 있다. 다음 상태는 초기 상태를 대체하고 테이블 엔트리를 탐색하는데, 이로부터 다음 심볼 및 다음 상태가 생성될 수 있다. 다음 상태 생성, 탐색, 및 심볼 출력을 연속적으로 반복함으로써 비압축 원본 데이터인 심볼 스트림을 생성할 수 있다. 일부 지점에서, 테이블 내의 엔트리는 데이터의 끝에 도달했음을 나타낼 수 있다. 대안적으로, 비압축 데이터는 고정된 크기일 수 있고, 따라서 다음 상태 생성, 탐색, 및 심볼 출력은 고정된 횟수만큼 일어날 수 있다(크기-고정 심볼을 가정함).
도 1의 실시예는 상당히 직렬인 프로세스이고, 따라서 상대적으로 느릴 수 있다. 다양한 실시예들은 더 병렬인 동작을 수행할 수 있다. 예를 들어, 도 2에서, 4개의 상태는 병렬로 탐색될 수 있다. 4개의 상태(24)는 동일한 디코더 테이블(26)을 공유하는 4개의 인터리빙된 FSE 심볼 스트림들에 대응할 수 있다. 즉, 심볼 스트림들은 서로 독립적이지만, 비트 스택(20)에서 인터리빙될 수 있다. 다른 실시예들은 원하는 대로 더 많거나 더 적은 병렬 상태/심볼 스트림들을 구현할 수 있다. 각각의 상태(24)는 테이블(26)로부터 테이블 엔트리(22)를 판독할 수 있다. 각각의 테이블 엔트리(22)는 도 1에 도시된 테이블 엔트리(14)와 유사할 수 있다. 병렬로 판독된 4개의 테이블 엔트리(22)의 각각은 심볼을 제공할 수 있고, 이는 대응하는 출력 심볼 스트림과 연결될 수 있다(또는 초기 상태들(24)에 대해 대응하는 출력 심볼 스트림들을 초기화함). 각각의 엔트리는 그것의 명시된 비트들의 수(n)를 비트 스택(20)으로부터 소모한다(도 2의 상단에 있는 엔트리는 비트 스택(20)의 상단에 있는 비트들을 판독하고, 다음 아래 엔트리는 비트 스택(20)으로부터 다음 비트들을 판독 등). 따라서, 전술한 바와 같이, 비트 스택(20)은 심볼 스트림들에 대해 인터리빙된 비트 필드들을 가질 수 있다. 결과 델타들은 각각의 엔트리(22)로부터의 베이스들에 가산되어 다음 상태들(24)을 생성한다.
도 3은 FSE 알고리즘의 병렬화된 형태의 다른 실시예를 도시한다. 도 3의 실시예에서, 심볼들을 직접 테이블(30)에 저장하는 대신에, 심볼들은 테이블(30)로부터 판독된 베이스 값(값 베이스, 또는 VBase)으로부터 생성될 수 있고, 다른 비트 스택(32)으로부터 판독된 델타(값 비트 스택, 또는 VBit 스택(32))가 심볼들을 생성하는 데 사용될 수 있다. 즉, 각각의 심볼은 VBase에서 시작하는 값들의 범위에 대응할 수 있고, 디코딩 프로세스에서의 주어진 포인트에서의 특정 값은 VBit 스택(32)으로부터 델타를 판독하고 그것을 VBase에 가산함으로써 결정된다. 따라서 테이블 엔트리들(34)은 엔트리로부터 출력 심볼을 생성하기 위하여 VBase에 가산될 델타들(VDelta들)로서 사용될 VBit 스택(32)으로부터 소모할 VBase 및 비트들의 수(nv)를 포함할 수 있다. 추가적으로, 각각의 엔트리(34)는 다음 상태들(38)을 생성하기 위하여 각각의 엔트리로부터 SBase에 가산될 델타들(SDelta들)을 형성하기 위하여 상태 비트 스택(36)(SBit 스택(36))으로부터 판독할 상태 베이스(SBase) 및 비트들의 수(ns)를 포함할 수 있다. 일 실시예에서, VBit 스택(32) 및 SBit 스택(36)은 단일 비트 스택으로서 구현될 수 있고, VBit들 및 SBit들은 스택에서 인터리빙된다. 또 다른 실시예들에서, 스택 내의 Vbit들 및 Sbit들의 인터리빙 및 다중 스택들의 구현의 조합이 사용될 수 있다. 예를 들어, 16개의 심볼 스트림들의 세트는 4개의 인터리빙된 심볼 스트림들의 4개의 세트들(예컨대 4 비트 스택들)로서 표현될 수 있다.
벡터 명령어들을 포함하는 프로세서에서 도 2 또는 도 3에 도시된 압축해제를 수행하는 한가지 방법은 벡터 동작들을 사용하는 것일 것이다. 예를 들어, 4개의 벡터 요소들의 벡터들이 프로세서에 의해 지원되는 경우, 도 2 및 도 3의 실시예들은 테이블 탐색, 다음 상태 생성, 및 심볼 값 생성에 관련되는 각각의 동작에 대해 하나의 벡터 명령어를 이용하여 테이블 탐색, 다음 상태 생성, 및 심볼 값 생성을 수행할 수 있다. 그러나, 비트 스택 판독 동작들은 표준 벡터 명령어들을 이용하여 벡터화하기 더 어려울 수 있다.
일반적으로, 벡터 동작들은 각각의 벡터 요소에 병렬로 그리고 독립적으로 하나 이상의 벡터 피연산자들 내의 복수의 벡터 요소들에 명시된 동작을 수행한다. 예를 들어, 벡터 가산 동작은 벡터 요소들을 벡터 피연산자들 내의 대응하는 위치들에 가산하여, 벡터 결과 피연산자의 벡터 요소들로서 합을 생성한다. 4개의 요소 벡터는 벡터 내에 인접한 벡터 요소 위치들에 열거된 순서로 벡터 요소들(VE0, VE1, VE2, 및 VE3)을 가질 것이다. 벡터 가산은 소스 피연산자들의 VE0 요소들을 가산하여 결과 피연산자의 VE0 요소를 생성하고; 소스 피연산자들의 VE1 요소들을 가산하여 결과 피연산자의 VE1 요소를 생성할 것이다. 예를 들어, 4개의 요소 벡터가 사용되지만, 다른 실시예들은 벡터 당 상이한 수의 벡터 요소들을 사용할 수 있고/있거나 벡터 당 다수의 벡터 요소들을 지원할 수 있다. 예를 들어, 128 비트 벡터 레지스터 세트는 2개의 64-비트 벡터 요소들, 4개의 32-비트 벡터 요소들, 8개의 16-비트 벡터 요소들, 및 16개의 8-비트 벡터 요소들을 지원할 수 있다. 다양한 벡터 명령어들은 벡터 레지스터들을 상이한 크기의 벡터 요소들로서 사용하도록 정의될 수 있다.
따라서, 벡터 동작들/명령어들은 동일한 크기인 벡터 요소들에서 잘 수행되고, 많은 동작들이 병렬로 수행되어 벡터화가능 알고리즘들의 성능을 개선할 수 있다. 그러나, 비트 스택 판독 동작들(및 압축 동안 대응하는 비트 스택 기록 동작들)은 가변 크기 동작들일 수 있다. 각각의 비트 스택 판독은 1(또는 가능하게는 심지어 0 비트) 내지 알고리즘에 의해 지원되는 최대 수의 비트인, 임의의 수의 비트들일 수 있다. 예를 들어, 도 3의 알고리즘의 일 실시예에서, 1 내지 32 비트의 비트 스택 판독이 지원될 수 있다. 비트 스택을 고정된 크기 요소들(예컨대 예에서 32 비트)로서 구현하는 것은 알고리즘에 달성가능한 압축비를 심각하게 낮출 것이고 그럼으로써 역효과를 낳을 것이다.
도 1 내지 도 3에 도시된 것와 유사한 압축 알고리즘들에 대한 압축 및 압축해제를 수행하기 위한 벡터 동작들의 사용을 향상시키기 위하여, 압축 보조 명령어들은 데이터를 비트 스택으로부터 벡터 요소들로 전달하고(비트 스택 판독) 벡터 요소들을 패킹된 비트 스택 데이터로 전달하는(비트 스택 기록), 비트 스택 판독 및 기록 동작들을 수행하도록 정의되었다.
도 4 내지 도 5는 일 실시예로서 벡터 레지스터들에 대한 비트 스택 판독 동작 및 비트 스택 기록 동작을 도시한다. 압축 보조 명령어들은 프로세서로 하여금 (압축 보조 명령어들을 실행할 때) 명령어의 피연산자들을 저장하는 하나 이상의 벡터 레지스터들 내의 데이터를 벡터 요소들이 아닌 비트 스택 데이터로서 해석하게 하도록 정의되었다. 따라서, 비트 스택의 일부분은 내부에 정의된 압축 보조 명령어들을 이용하여 벡터 레지스터 내에 로딩되고 프로세싱된다. 임의의 벡터 레지스터는 이러한 피연산자로서 명시될 수 있지만; 그것은 프로세서로 하여금 레지스터 데이터를 벡터 요소들 대신에 비트 스택 데이터로서 해석하게 하는 압축 보조 명령어의 특정 피연산자로서의 벡터 레지스터의 코딩이다.
도 4는 비트 스택 판독 동작을 도시한다. 비트 스택의 상단을 포함하는 비트 스택(40)의 일부분이 도 4에 도시되어 있다. 비트 스택의 상단은 도 4의 좌측에 있을 수 있고, 델타들 x3(스택의 상단), x2(스택의 다음 상단), x1, 및 x0 뿐만 아니라 그 아래 추가적인 값들을 포함할 수 있다. 도 4의 x3, x2, x1, 및 x0의 폭은 각각의 값이 하나 이상의 비트들이고 달라질 수 있음을 도시하도록 달라진다. 제1 벡터 레지스터(42)는 상단 4개의 델타들의 크기를 스택에 저장하는 4개의 벡터 요소(x3에 대응하는 b3, x2에 대응하는 b2 등)를 갖는다. 레지스터(42)는 다음 상태들의 세트에 기초하여 주어진 테이블 판독을 위하여 도 2의 필드들 "n"으로부터 로딩되거나, 주어진 테이블 판독을 위하여 도 3의 파일링된 "nv" 또는 "ns"로부터 로딩될 수 있다. 도 3의 실시예에 대하여, 하나는 "nv"이고 하나는 "ns"인 2개의 벡터 레지스터가 사용될 수 있다. 일반적으로, 벡터 로드 명령어 또는 명령어들은 테이블 판독을 수행할 수 있고, 비트 스택 판독을 수행하기 위하여 레지스터(42)의 크기 값들을 분리하기 위한 추가적인 벡터 명령어들이 있을 수 있다.
레지스터(42)의 크기에 기초하여, 비트 필드들(x3, x2, x1, 및 x0)은 비트 스택의 상단으로부터 결과 벡터 레지스터(44)로 추출될 수 있고, 비트 스택은 추출된 비트 필드들을 제거하도록 업데이트될 수 있다. 따라서, 도 4의 업데이트된 스택(46)은 나머지 추가적인 값들을 스택의 상단에 포함한다. 스택들(40, 46)은 메모리 내의 값들을 도시하여, 스택의 상단이 메모리로 이동하도록 할 수 있다. 스택의 상단이 레지스터에 로딩될 때, 아래 설명될 바와 같이, 비트 스택 판독은 스택의 새로운 상단을 레지스터에서 좌측으로 시프트하는 것을 포함할 수 있다(예컨대 레지스터의 최상위 비트, 또는 MSB가 스택의 상단에 비트를 갖도록 함).
비트 스택 판독 동작들은 압축해제 프로세스의 일부일 수 있다. 비트 스택의 생성은 비트 스택 기록 동작들을 포함할 수 있는데, 그 이유는 압축 알고리즘이 심볼들을 결정하고 테이블 엔트리들 및 비트 스택을 생성하기 때문이다. 도 5는 비트 스택 기록 동작을 도시한다.
도 5의 초기 비트 스택(48)은, 도 4의 업데이트된 비트 스택(46)과 유사하게, 스택의 상단에 추가적인 값들을 포함한다. 공간은 도 4의 비트 스택(48)의 상단의 좌측에 도시되어 더 많은 비트 필드들을 비트 스택 안으로 비트 스택 기록의 일부로서 집어 넣는 것을 도시한다. 벡터 레지스터(50)는 각각의 비트 필드의 크기에 대응하는 벡터 요소들(x3에 대응하는 b3, x2에 대응하는 b2 등)로 코팅될 수 있다. 다른 벡터 레지스터(52)는 비트 필드들을 벡터 요소들(x3, x2 등)로서 가질 수 있다. 벡터 레지스터들(50, 52)은 다른 벡터 명령어들을 이용하여, 압축 알고리즘에 따라 연산될 수 있다. 비트 스택 기록 동작은 비트 필드들(x3, x2, x1, 및 x0)을 연결시켜, 그것들을 비트 스택 내에서 인접하게 만들고, 비트 필드들을 비트 스택의 상단에 기록하여, 도 5에 도시된 업데이트된 비트 스택(54)을 생성한다.
도 4에 도시된 비트 스택 판독 동작을 구현하기 위하여, 프로세서는 본 명세서에 기재된 바와 같이 한 쌍의 압축 보조 명령어를 포함할 수 있다. 이러한 명령어들은 본 명세서에서 "top" 및 "pop"으로 지칭된다. top 명령어는, 실행되면, 프로세서로 하여금 복수의 비트 필드들을 비트 스택의 상단(이는 아래 논의되는 바와 같이, 벡터 레지스터에 저장될 수 있음)으로부터 결과 벡터 레지스터의 벡터 요소들로 추출하게 할 수 있다. pop 명령어는, 실행되면, 프로세서로 하여금 비트 필드들을 스택의 상단으로부터 제거하게 하여, 스택의 상단을 top 명령어를 이용하여 추출되지 않았던 비트 필드들의 다음 세트로 내릴 수 있다.
도 6은 일 실시예로 top 명령어의 소스 피연산자들 및 결과 피연산자의 블록도이다. 도 6의 상단에서, top 명령어에 대한 연상기호는 결과 벡터 레지스터(RV), 소스 스택 레지스터(SSR), 및 소스 크기 벡터 레지스터(SSV)와 함께 도시된다. 소스 스택 레지스터 내용들이 도면 부호 60에 도시되어 있고, 소스 크기 벡터 레지스터 내용들이 도면 부호 62에 도시되어 있고, top 명령어의 실행 후의 결과 벡터 레지스터 내용들이 도면 부호 64에 도시되어 있다.
이전에 언급된 바와 같이, 스택 레지스터는 벡터 레지스터일 수 있지만, 프로세서는 레지스터가 압축 보조 명령어들 중 하나의 스택 피연산자로서 명시되는 것에 의해 상이하게 내용들을 해석할 수 있다. 벡터 레지스터가 비트 스택 데이터를 저장할 때, 레지스터는 비트 스택 필드(66) 및 비트 카운트 필드(68)를 포함할 수 있다. 이 실시예에서 비트 스택 필드는 복수의 비트들일 수 있고, 복수의 비트들 중 MSB는 레지스터의 MSB에 있다. 복수의 비트들 중 MSB는 비트 스택의 상단 비트일 수 있다. 비트 카운트 필드(68)는 스택 레지스터 내의 현재 비트들의 수(예컨대 비트 스택 필드(66) 내의 복수의 비트들의 수)일 수 있다. 일 실시예에서, 벡터 레지스터는 128 비트일 수 있고, 비트 카운트 필드는 8 비트일 수 있다. 따라서, 비트 스택 필드(66)는 이 실시예에서 최대 120 비트일 수 있다. 다른 실시예들은 상이한 크기 벡터 레지스터들을 구현하며, 더 크거나 더 작은 비트 스택 필드들 및 비트 카운트 필드들을 지원할 수 있다.
비트 스택 필드(66) 내에, 비트 필드들(x3, x2, x1, 및 x0)이 도 6에서 식별된다. 비트 필드들은 소스 크기 벡터 레지스터(62) 내의 크기에 의해 정의된다. 더 구체적으로는, 소스 크기 벡터 레지스터(62)는 크기의 벡터일 수 있다. 즉, 크기는 대응하는 비트 필드들 내의 비트들의 수의 카운트일 수 있다. 크기는, 예를 들어, 정수일 수 있다. 도시된 실시예에서, 소스 크기 벡터(62)에는 4개의 벡터 요소가 있다: 벡터 요소 3 (VE3), VE2, VE1, 및 VE0. 각각의 벡터 요소는 대응하는 비트 필드의 크기를 명시한다. 따라서, 비트 필드 x3은 비트 스택 필드(66)의 최상위 b3 비트들일 수 있다. 비트 필드 x2는 비트 필드 x3에 인접하고(예컨대 비트 필드 x2의 MSB는 비트 필드 x3의 최하위 비트, 또는 LSB에 인접할 수 있음) 크기가 b2 비트일 수 있다. 비트 필드 x1는 비트 필드 x2에 인접할 수 있고, 크기가 b1 비트일 수 있고, 비트 필드 x0은 비트 필드 x1에 인접할 수 있고 크기가 b0 비트일 수 있다. 비트 스택 필드(66)의 나머지 비트들은 도 6에서 "p"로 라벨링된다. p의 MSB는 비트 스택 내의 다음 비트 필드의 MSB일 수 있으며, 이는 다음 테이블 판독에 의해 테이블(26 또는 30)로부터 정의될 수 있다. 레지스터(62)의 크기 필드들은 도 6의 벡터 요소들의 일부분을 점유하는 것으로 도시되지만, 필드들은 전체 벡터 요소들까지 점유할 수 있다. 또한, 결과 벡터 레지스터(64) 내의 추출된 비트 필드들은 최대 벡터 요소들의 전체 크기일 수 있지만, 각각의 개별 필드의 크기는 크기 벡터로부터의 대응하는 벡터 요소에 의해 제어된다.
소스 크기 벡터 레지스터(62) 내의 크기 필드들에 기초하여, top 명령어를 실행하는 프로세서는 비트 필드들을 결과 벡터 레지스터(64)의 대응하는 벡터 요소들로 추출하도록 구성될 수 있다. 따라서, x3은 결과 벡터 레지스터(64)의 요소 VE3이고, 소스 크기 벡터 레지스터(62)의 VE3 내의 크기 b3에 기초하여 추출되고; x2는 결과 벡터 레지스터(64)의 요소 VE2이고, 소스 크기 벡터 레지스터(62)의 VE2의 크기 b2에 기초하여 추출되고, 또한 b3에 의해 영향을 받는데, 그 이유는 x3이 비트 스택 필드(66)의 MSB들로부터 병렬로 추출되기 때문이고; x1은 결과 벡터 레지스터(64)의 요소 VE1이고, 소스 크기 벡터 레지스터(62)의 VE1 내의 크기 b1에 기초하여 추출되고, 또한 b3 및 b2에 의해 영향을 받고; x0은 결과 벡터 레지스터(64)의 요소 VE0이고, 소스 크기 벡터 레지스터(62)의 VE0 내의 크기 b0에 기초하여 추출되고, 또한 b3, b2, 및 b1에 의해 영향받을 수 있다.
도 7은 일 실시예로 pop 명령어의 소스 피연산자들 및 결과 피연산자의 블록도이다. 도 7의 상단에서, pop 명령어에 대한 연상기호는 결과 스택 레지스터(RSR), 소스 스택 레지스터(SSR), 및 소스 크기 벡터 레지스터(SSV)와 함께 도시된다. 소스 스택 레지스터 내용들이 도면 부호 60에 도시되어 있고, 소스 크기 벡터 레지스터 내용들이 도면 부호 62에 도시되어 있고, pop 명령어의 실행 후의 결과 스택 레지스터 내용들이 도면 부호 70에 도시되어 있다. pop 명령어는 top 명령어와 쌍을 이루어, 비트 스택의 내용들을 조정하여 비트 필드들(x3, x2, x1, 및 x0)의 추출 및 소모를 반영하도록 의도될 수 있다. 따라서, 동일한 소스 레지스터들(60, 62)이 도시된다. 그러나, pop 명령어는 일반적으로 임의의 소스 레지스터들로 코딩될 수 있다.
언급된 바와 같이, pop 명령어를 실행하는 프로세서는 top 명령어에 의해 소진된 비트 필드들에 대응하는 비트들을 제거한다. 따라서, pop 명령어는 소스 크기 벡터 레지스터(62)로부터의 크기 벡터 요소들(b3, b2, b1, 및 b0)의 합을 이용하여, 레지스터의 MSB로 시작하는, 제거할 비트들의 수를 식별할 수 있다. 나머지 비트들(p)은 시프트되어 p의 MSB는 결과 스택 레지스터(70)의 MSB가 되도록 할 수 있다. 추가적으로, 비트 카운트 필드(n')는 소스 스택 레지스터(60) 내의 비트 카운트 필드(n)로부터 크기 벡터 요소들의 합을 차감함으로써, 도면 부호 72에서 도시된 바와 같이 연산될 수 있다.
결과 스택 레지스터(70)는 pop 명령어 내의 소스 스택 레지스터(60)와 동일한 레지스터로 코딩될 수 있고, 그럼으로써 비트 필드들의 다음 세트를 추출하기 위한 top 명령어를 이용하여 다음 스택 판독 동작을 위하여 소스 스택 레지스터(60)를 업데이트하는 것에 주의한다. 스택 레지스터 내의 비트 스택 필드가 고갈됨에 따라, 메모리 내의 나머지 비트 스택으로부터 로드 명령어를 통해 재충전될 수 있다. 벡터 로드 명령어가 사용될 수 있는데, 그 이유는 벡터 로드 명령어는 단지 데이터를 레지스터에 로딩할 수 있다. 그것은 프로세서로 하여금 내용들을 벡터 요소들 대신에 비트 스택으로서 해석하게 하는 스택 레지스터 피연산자로서 레지스터의 사용이다.
top 및 pop 명령어들은 압축해제에 유용할 수 있는 압축 보조 명령어들일 수 있다. 일부 실시예들에서, 하나 이상의 압축 보조 명령어들은 압축에 대해서도 정의될 수 있다. 특히, 압축 보조 명령어들은 도 5에 도시된 비트 스택 기록 동작에 대해 정의될 수 있다. 일 실시예에서, 2개의 압축 보조 명령어가 정의된다: "create" 및 "concat".
도 8은 일 실시예로 create 명령어의 소스 피연산자들 및 결과 피연산자의 블록도이다. 도 8의 상단에서, create 명령어에 대한 연상기호는 결과 스택 레지스터(RSR), 소스 벡터 레지스터(SV), 및 소스 크기 벡터 레지스터(SSV)와 함께 도시된다. 다양한 벡터 명령어들은 비트 필드들의 벡터 및 대응하는 크기들을 생성하도록 실행될 수 있고, 이는 비트 스택 기록 동작이 수행될 준비가 되면 소스 벡터 레지스터(80) 및 소스 크기 벡터 레지스터(82) 내에 있을 수 있다. 레지스터들(80, 82)이 도 8에 도시되어 있으며, 비트 필드들을 저장하는 벡터 요소들(레지스터(80)) 및 크기들을 저장하는 대응하는 벡터 요소들(레지스터(82))을 포함한다. 따라서, 레지스터(80)의 VE3은 크기 b3의 비트 필드 x3이고(레지스터(82)의 VE3), 레지스터(80)의 VE2는 크기 b2의 비트 필드 x2(레지스터(82)의 VE2 필드) 등 이다. 프로세서가 create 명령어를 실행할 때, 프로세서는 소스 벡터 레지스터(80)로부터의 비트 필드들을 결과 스택 레지스터(84)의 MSB들로 패킹하여, 복수의 비트들 내의 인접한 비트 위치들에 비트 필드들(x3, x2, x1, 및 x0)을 포함하는 결과 스택 레지스터(84)의 MSB들 내의 복수의 비트들을 형성할 수 있다(예컨대 x3의 LSB는 x2의 MSB에 인접하고, x2의 LSB는 x1의 MSB에 인접함 등). 비트 카운트 필드 "n"은 레지스터(82)로부터의 크기 벡터 요소들의 합으로 연산될 수 있으며, 이는 도면 부호 86에 도시된 바와 같다.
create 명령어는 비트 필드들의 벡터로부터 복수의 비트들을 생성한다. concat 명령어는 create 명령어의 결과를 비트 스택의 이전 버전에 삽입하는 데 사용될 수 있다(예컨대 복수의 비트들을 비트 스택 상으로 푸싱). concat 명령어는 또한 비트 스택 판독 동작들에서 사용되어, 고갈된 비트 스택 레지스터를 메모리로부터 충전할 수 있다. 예를 들어, 비트 스택의 다음 부분은 메모리로부터 벡터 레지스터로 로딩될 수 있고, 비트 스택 판독에 사용되는 비트 스택 레지스터로 연결될 수 있다.
도 9은 일 실시예로 concat 명령어의 소스 피연산자들 및 결과 피연산자의 블록도이다. 도 9의 상단에서, concat 명령어에 대한 연상기호는 결과 스택 레지스터(RSR), 소스 스택 레지스터1(SSR1), 및 소스 스택 레지스터 2(SSR2)와 함께 도시된다. 소스 스택 레지스터들(1, 2)은 각각 도면 부호 88 및 90에 도시되어 있다. 각각의 소스 스택 레지스터는 복수의 비트들(레지스터(88) 내의 p1, 레지스터(90) 내의 p2)를 포함할 수 있고, 비트 카운트 필드는 복수의 비트들의 수(레지스터(88) 내의 n1, 레지스터(90) 내의 n2)를 나타낸다. concat 명령어를 실행하는 프로세서는 p2 비트들을 p1 비트들에 연결하여, 결과 스택 레지스터(92)에 도시된 바와 같이 더 큰 복수의 비트들을 만들 수 있다. 결과 스택 레지스터 내에 파일링된 비트 카운트는 도면 부호 94에 도시된 바와 같이, 비트 카운트 필드들 n1 및 n2의 합으로서 연산될 수 있다.
도 6 내지 도 9의 실시예들이 4개의 벡터 요소를 갖는 벡터들을 도시하지만, 다른 실시예들은 더 많거나 더 적은 벡터 요소들(예컨대 2, 8, 16 등)을 갖는 벡터들을 지원할 수 있다. 추가적으로, 이전에 언급된 바와 같이, 일부 실시예들은 압축 보조 명령어들을 포함하는 다수의 버전들의 벡터 명령어들을 지원하여, 상이한 수의 벡터 요소들을 갖는 벡터들을 사용할 수 있다(또는 인근의 필드와 같은 피연산자는 얼마나 많은 벡터 요소들이 그 명령어에 대한 벡터 내에 있는지 선택할 수 있다).
도 10은 컴퓨터 시스템(100)의 일 실시예의 블록도이다. 컴퓨터 시스템(100)은 프로세서(102), 레벨 2(L2) 캐시(106), 메모리(108), 및 대용량 저장 디바이스(110)를 포함한다. 도시된 바와 같이, 프로세서(102)는 레벨 1(L1) 캐시(104) 및 L1 캐시(104) 및 레지스터 파일(112)에 결합된 실행 코어(120)를 포함한다. 실행 코어(120)는 도시된 바와 같이 정수 실행 유닛(114), 부동 소수점(FP) 실행 유닛(116), 및 벡터 실행 유닛(118)과 같은 하나 이상의 실행 유닛들을 포함할 수 있다. 다양한 실시예들에서, 실행 유닛들(114, 116, 118)은 레지스터 파일(112)에 결합될 수 있고/있거나 상이한 피연산자 유형들에 대한 다수의 레지스터 파일들(112)이 있을 수 있다. 특정 컴포넌트들이 컴퓨터 시스템(100)에서 도시 및 기술되지만, 대안적인 실시예들에서 상이한 컴포넌트들 및 상이한 수의 컴포넌트들이 컴퓨터 시스템(100)에 존재할 수 있음을 주의한다. 예를 들어, 컴퓨터 시스템(100)은 메모리 계층구조의 일부(예컨대, L2 캐시(104), 메모리(108) 및/또는 대용량 저장 디바이스(110))를 포함하지 않을 수 있다. 프로세서(102)와 유사한 다수의 프로세서들이 포함될 수 있다. 주어진 유형의 다수의 실행 유닛들(예컨대 정수, 부동 소수점, 벡터, 로딩/저장 등)이 포함될 수 있고, 주어진 유형의 실행 유닛들의 수는 다른 유형의 실행 유닛들의 수와 상이할 수 있다. 추가적으로, L2 캐시(106)가 프로세서(102)의 외부에 도시되어 있지만, 다른 실시예들에서, L2 캐시(106)는 프로세서(102)의 내부에 있을 수 있음이 고려된다. 이러한 실시예들에서, 레벨 3(L3) 캐시(미도시)가 사용될 수 있음을 추가로 주의한다. 또한, 컴퓨터 시스템(100)은 그래픽 프로세서, 비디오 카드, 비디오-캡처 디바이스, 사용자-인터페이스 디바이스, 네트워크 카드, 광학 드라이브, 및/또는 버스, 네트워크, 또는 다른 적합한 통신 채널(간략함을 위해 모두 도시되지는 않음)을 이용하여 프로세서(102)에 결합되는 기타 주변 디바이스들을 포함할 수 있다.
다양한 실시예들에서, 프로세서(102)는 연산 동작들을 수행하는 범용 프로세서를 대표할 수 있다. 예를 들어, 프로세서(102)는 마이크로프로세서와 같은 중앙 프로세싱 유닛(CPU), 마이크로콘트롤러, 주문형 집적 회로(ASIC), 또는 필드 프로그래머블 게이트 어레이(FPGA)일 수 있다. 프로세서(102)는 독립형 컴포넌트일 수 있거나, 또는 집적 회로 상에 다른 컴포넌트들(예컨대 다른 프로세서들, 또는 시스템 온 칩(SOC) 내의 다른 컴포넌트들 등)과 함께 통합될 수 있다. 프로세서(102)는 다른 컴포넌트들을 갖는 멀티칩 모듈(MCM) 내의 컴포넌트일 수 있다.
더 구체적으로는, 도 1에 도시된 바와 같이, 프로세서(102)는 실행 코어(120)를 포함할 수 있다. 실행 코어(120)는 프로세서(102)에 의해 구현되는 명령어 세트 아키텍처에 정의되는 명령어들을 실행하도록 구성될 수 있다. 실행 코어(120)는 원하는 대로 임의의 마이크로아키텍처 특징부들 및 구현 특징부들을 가질 수 있다. 예를 들어, 실행 코어(120)는 슈퍼스칼라 또는 스칼라 구현예들을 포함할 수 있다. 실행 코어(120)는 순차 및 비-순차 구현예들, 및 추론적 또는 비-추론적 구현예들을 포함할 수 있다. 실행 코어(120)는 위 특징부들의 임의의 조합을 포함할 수 있다. 일부 실시예들에서 구현예들은 마이크로코드를 포함할 수 있다. 실행 코어(120)는 다양한 실행 유닛들을 포함할 수 있고, 각각의 실행 유닛은 다양한 유형들의 동작들을 실행하도록 구성된다(예컨대 정수 실행 유닛(114), 부동 소수점 실행 유닛(116), 벡터 실행 유닛(118), 로딩/저장 실행 유닛(미도시) 등). 실행 코어(120)는 상이한 수의 파이프라인 스테이지들 및 분기 예측과 같은 다양한 기타 성능-향상 특징부들을 포함할 수 있다. 실행 코어(120)는 하나 이상의 명령어 디코딩 유닛들, 스케줄러들 또는 예약 스테이션들, 재주문 버퍼들, 메모리 관리 유닛들, I/O 인터페이스들 등을 포함할 수 있다.
레지스터 파일(112)은 다양한 명령어들에 대한 피연산자들을 저장하는 데 사용될 수 있는 레지스터들의 세트를 포함할 수 있다. 레지스터 파일(112)은 실행 코어(120)가 레지스터들 내에 저장하도록 구성된 피연산자의 유형(예컨대 정수, 부동 소수점, 벡터 등)에 기초하여 다양한 데이터 유형들의 레지스터들을 포함할 수 있다. 레지스터 파일(112)은 아키텍처화된 레지스터들(즉 프로세서(102)에 의해 구현되는 명령어 세트 아키텍처에 명시된 이러한 레지스터들)을 포함할 수 있다. 대안적으로 또는 또한, 레지스터 파일(112)은 (예컨대 레지스터 재명명이 실행 코어(120)에서 구현되는 경우) 물리적 레지스터들를 포함할 수 있다.
L1 캐시(104)는 임의의 캐싱 구조를 예시할 수 있다. 예를 들어, L1 캐시(104)는 하바드 아키텍처(Harvard architecture)(명령어 페칭을 위한 별개의 명령어 캐시 및 메모리-참조 op들을 위한 실행 유닛들에 의한 데이터 판독/기록을 위한 데이터 캐시), 공유 명령어 및 데이터 캐시 등으로서 구현될 수 있다. 일부 실시예들에서, 로딩/저장 실행 유닛들은 메모리-참조 op들을 실행하도록 제공될 수 있다.
명령어는 프로세서(102)에 의해 구현된 명령어 세트 아키텍처에서 정의된 실행가능한 엔티티일 수 있다. 다양한 명령어 세트 아키텍처들이 존재하고 있다(예를 들어, 인텔(Intel)에 의해 최초로 개발된 x86 아키텍처, ARM 홀딩스(ARM Holdings)의 ARM, IBM/모토로라의 파워 및 파워 PC(Power and PowerPC) 등). 각각의 명령어는 명령어 세트 아키텍처에서 정의되며, 이는 메모리 내의 그것의 코딩, 그것의 동작, 및 레지스터들에 대한 그것의 영향, 메모리 위치들, 및/또는 다른 프로세서 상태를 포함한다. 명령어 세트 아키텍처의 소정의 구현예는 각각의 명령어를 직접적으로 실행할 수 있지만, 그것의 형태는 디코딩 및 프로세서 하드웨어에서의 다른 조작을 통해 변경될 수 있다. 다른 구현예는 프로세서(102) 내의 실행 유닛들에 의한 실행을 위해 적어도 일부 명령어들을 다수의 명령어 연산들로 디코딩할 수 있다. 일부 실시예들에서, 일부 명령어들은 마이크로코딩될 수 있다. 따라서, 용어 "명령어 연산"은 본 명세서에서, 프로세서(102)/실행 코어(120) 내의 실행 유닛이 단일 엔티티로서 실행하도록 구성되는 연산을 지칭하기 위해 사용될 수 있다. 명령어들은 명령어 연산들과 일대일 대응을 가질 수 있으며, 일부 경우들에서 명령어 연산은 명령어(가능하게는 프로세서(102)/실행 코어(120) 내부의 형태에서 수정됨)일 수 있다. 명령어들은 또한 명령어 연산들과 일대일 초과의(일대다) 대응을 가질 수 있다. 명령어 연산은 보다 간략하게 본 명세서에서 "op"로 지칭될 수 있다.
대용량 저장 디바이스(110), 메모리(108), L2 캐시(10), 및 L1 캐시(104)는 프로세서(102)를 위한 데이터 및 명령어들을 저장하는 메모리 계층구조를 집합적으로 형성하는 저장 디바이스들이다. 더 구체적으로는, 대용량 저장 디바이스(110)는 디스크 드라이브와 같은 대용량, 비휘발성 메모리 또는 긴 액세스 시간을 갖는 대형 플래시 메모리 유닛일 수 있지만, L1 캐시(104), L2 캐시(106), 및 메모리(108)는 더 작고, 액세스 시간이 짧을 수 있다. 이러한 더 빠른 반도체 메모리들은 빈번하게 사용되는 데이터의 사본들을 저장한다. 메모리(108)는 동적 랜덤 액세스 메모리(DRAM) 계열의 메모리 디바이스들의 메모리 디바이스를 나타낼 수 있다. 메모리(108)의 크기는 통상적으로 L1 캐시(104) 및 L2 캐시(106)보다 크지만, L1 캐시(104) 및 L2 캐시(106)는 통상적으로 정적 랜덤 액세스 메모리들(SRAM) 계열의 디바이스들의 더 작은 디바이스들을 이용하여 구현된다. 일부 실시예들에서, L2 캐시(106), 메모리(108), 및 대용량 저장 디바이스(110)는 컴퓨터 시스템(100) 내의 하나 이상의 프로세서들 사이에서 공유된다.
일부 실시예들에서, 메모리 계층구조의 디바이스들(즉, L1 캐시(104) 등)은 사이클마다 다수의 캐시 라인들에 액세스(즉, 판독 및/또는 기록)할 수 있다. 이러한 실시예들은 비-연속적인 메모리 어드레스들에 대한 포인터들의 벡터 또는 어레이 인덱스들에 기초하여 일어나는 메모리 액세스의 더 효과적인 프로세싱을 가능하게 할 수 있다.
아래 설명되는 데이터 구조들 및 프로그램 명령어들(즉, 코드)은 비일시적 컴퓨터-판독가능 저장 디바이스 상에 저장될 수 있고, 이들은 컴퓨터 시스템(예컨대, 컴퓨터 시스템(100))에 의해 사용하기 위한 코드 및/또는 데이터를 저장할 수 있는 임의의 디바이스 또는 저장 매체일 수 있다는 것에 주의한다. 일반적으로 말해서, 비일시적 컴퓨터-판독가능 저장 디바이스는 휘발성 메모리, 비휘발성 메모리, 디스크 드라이브와 같은 자기 및 광학 저장 디바이스, 자기 테이프, 콤팩트 디스크(CD), 디지털 다기능 디스크 또는 디지털 비디오 디스크(DVD), 또는 현재 공지되었거나 또는 향후 개발될 컴퓨터-판독가능 매체를 저장할 수 있는 기타 매체를 포함하지만, 이에 한정되지 않는다. 이와 같이, 대용량 저장 디바이스(110), 메모리(108), L2 캐시(10), 및 L1 캐시(104)는 모두 비일시적 컴퓨터 판독가능 저장 매체의 예들이다.
전술한 바와 같이, 실행 코어(120)는 벡터 명령어들(예컨대 벡터 실행 유닛(118)에서)을 실행하도록 구성될 수 있다. 벡터 명령어들은 그것들이 다수의 데이터 요소들 상에서 병렬로 수행될 동일한 동작을 정의할 수 있다는 점에서, 고전적인 의미에서 단일 명령어-다중-데이터(single instruction-multiple-data, SIMD) 명령어들로서 정의될 수 있다. 명령어의 인스턴스에 의해 동작되는 데이터 요소들은 벡터로 지칭될 수 있다. 벡터를 형성하는 데이터 요소들은 벡터 요소들로 지칭될 수 있다. 벡터 요소들 자체는 임의의 데이터 유형(예컨대 정수, 부동 소수점 등)을 가질 수 있고 하나 초과의 데이터 유형은 벡터 요소들에 대해 지원될 수 있다.
일 실시예에서, 레지스터 파일(112)은 피연산자 벡터들 및 결과 벡터들을 보유할 수 있는 벡터 레지스터들을 포함할 수 있다. 일부 실시예들에서, 벡터 레지스터 파일에는 32개의 벡터 레지스터들이 있을 수 있다. 그러나, 대안적인 실시예들에서, 상이한 수의 벡터 레지스터들 및/또는 상이한 수의 레지스트당 비트가 있을 수 있다. 또한, 레지스터 재명명을 구현하는 실시예들은 아키텍처화된 벡터 레지스터들에 할당될 수 있는 임의의 수의 물리적 레지스터들을 포함할 수 있다. 아키텍처화된 레지스터들은 벡터 명령어들 내의 피연산자들로서 명시가능한 레지스터들일 수 있다.
더 구체적으로는, 벡터 실행 유닛(118)은 산술 동작, 로직, 동작, 시프트 등과 같은 다양한 벡터 동작들에 더하여, 본 명세서에 기재된 압축 보조 명령어들(또는 압축 보조 명령어들로부터 디코딩된 op들)을 실행하도록 구성될 수 있다.
도 11은 다양한 압축 보조 명령어들을 실행하도록 구성된 회로부를 포함하는 벡터 실행 유닛(118)의 적어도 일부분의 일 실시예의 블록도이다. 도 11에 도시된 회로부는 다른 유형들의 벡터 동작들과 공유되는 회로부 및/또는 압축 보조 명령어들에 전용되는 회로부, 또는 이들의 임의의 조합을 포함할 수 있다. 벡터 실행 유닛(118)은 op를 위해 실행될 입력들 뿐만 아니라 소스 피연산자들 V1 및 V2에 결합된다. 결과 동작은 op의 일부로서 명시될 수 있고 결과와 함께 레지스터 파일(112)로 전달될 수 있다.
제어 회로(130)는 op를 수신할 수 있고 벡터 실행 유닛(118) 내의 다른 회로부를 그에 따라 제어할 수 있다. 따라서, 제어 회로(130)는 도 11에 도시된 다른 회로부에 결합될 수 있지만, 도면을 복잡하게 만드는 것을 피하기 위해 연결은 도 11에 명시적으로 도시되지 않는다. 가산기 회로(132)가 제공될 수 있고, 이는 제2 소스 피연산자 V2에 결합될 수 있다. 가산기 회로(132)는 벡터(V2)의 다양한 요소들을 추가하도록 구성될 수 있다. 예를 들어, 소스 피연산자 V2가 크기 벡터일 때, 크기들의 합이 op의 실행 동안 사용될 수 있다. 결과 피연산자가 스택 레지스터일 때, 모든 벡터 요소들의 합은 비트 카운트 필드(n)의 업데이트에 사용될 수 있다. 추가적으로, 벡터 요소들의 부분 합이 또한 사용될 수 있다.
예를 들어, top 명령어는 벡터 요소들의 부분 합 및 크기에 기초하여 스택의 MSB들을 우측으로 시프트함으로써 구현될 수 있다. 4개의 벡터 요소 경우에, 벡터 요소들의 크기가 32 비트인 경우, 32-b3만큼 32개의 MSB들을 우측으로 시프트하는 것은 x3을 결과 벡터 내의 VE3 요소에 정렬시킬 수 있다(예컨대 벡터 요소 크기(Vs)-b3만큼 우측으로 시프트). 유사하게, 64개의 MSB들의 64-(b3+b2)만큼 우측으로 시프트하는 것은 x2를 결과 벡터 내의 VE2 요소에 정렬시킬 수 있고(예컨대 2Vs-(b3+b2)); 96개의 MSB들의 96-(b3+b2+b1)만큼 우측으로 시프트하는 것은 x2를 결과 벡터 내의 VE1 요소에 정렬시킬 수 있고(예컨대 3Vs-(b3+b2+b1)); 128개의 MSB들의 128-(b3+b2+b1+b0)만큼 우측으로 시프트하는 것은 x0를 결과 벡터 내의 VE0 요소에 정렬시킬 수 있다(예컨대 4Vs-(b3+b2+b1+b0)). 다른 요소 크기들 및 요소들의 수가 유사하게 구현될 수 있다. 따라서, 시프트 회로들(134A 내지 134N)은 V1 피연산자 및 top 명령어를 실행하기 위한 가산기 회로(132)로부터의 각각의 합에 결합될 수 있다. 대응하는 마스크 회로들(136A 내지 136N)은 시프트 회로들(134A 내지 134N)의 출력들에 결합되어 벡터 요소들의 일부가 아닌 비트들을 마스킹할 수 있다(예컨대 x3 및 x2은 소스 스택 레지스터들 내에서 인접하기 때문에, x3의 비트들 중 일부는 시프트 후에 VE2 요소의 MSB들에 있을 수 있고 마스킹될 수 있음). 개별 시프트 회로들(134A 내지 134N) 및 마스크 회로들(136A 내지 136N)이 도 11에 도시되어 있지만, 다른 실시예들은 주어진 벡터의 크기에 기초하여, 각각의 벡터 요소 위치에 대한 시프트를 제어하기 위하여 제어 회로(130)로부터의 제어 입력들을 갖는 공유 시프트 회로를 구현할 수 있다. 즉, 공유 시프트 회로는 주어진 피연산자의 벡터 요소들의 크기에 기초하여 2번의 64-비트 시프트, 4번의 32-비트 시프트, 8번의 16-비트 시프트, 또는 16번의 8-비트 시프트를 수행하도록 정의될 수 있다. 제어 입력들은 주어진 op에 대해 선택된 크기에 기초하여 수행될 정확한 시프트를 선택할 수 있다. 따라서 시프트 회로들(134A 내지 134N) 및 마스크 회로들(136A 내지 136N)은 소스 스택 레지스터 내의 복수의 비트들로부터 결과 벡터 레지스터의 벡터 요소들로의 비트 필드들의 추출의 일 구현일 수 있다.
시프트 회로(140)는 pop 명령어/op를 위해 제공될 수 있다. 시프트 회로(140)는 스택 레지스터 피연산자를 크기 벡터 레지스터의 크기의 합(가산기 회로(132)에 의해 제공됨)만큼 좌측으로 시프트할 수 있다. 따라서, 시프트 회로(140)는 가산기(132) 및 V1 소스 피연산자에 결합될 수 있다. 대안적으로, 시프터 회로들(134A 내지 134N)은 pop op에 대한 시프트도 또한 수행하도록 구성될 수 있고, 시프트 회로(136)는 필요하지 않을 수 있다. 연산 n 회로(138)는 pop 명령어/op뿐만 아니라 create 및 concat 명령어들/op들에 대한 업데이트된 n을 연산하도록 제공될 수 있다. 연산 n 회로(138)는 가산기 회로(132)에 결합될 수 있고, 벡터 요소들의 크기들의 합(예컨대 b3+b2+b1+b0)을 수신하여 pop 및 create 명령어들/op들에 대한 n을 연산할 수 있다.
일 실시예에서, create 명령어/op는 또한 소스 벡터 요소들을 결과의 MSB들로 좌측으로 시프트하기 위하여 시프트 회로들(134A 내지 134N)을 이용하여 수행될 수 있다. 예를 들어, x3 요소는 벡터 요소 크기(Vs) - x3 요소의 크기(b3)(예컨대 Vs-b3)만큼 좌측으로 시프트될 수 있다. x2 요소는 벡터 요소 크기의 2배 - x3 및 x2 요소들의 크기(예컨대 2Vs-(b3+b2))만큼 좌측으로 시프트될 수 있다. 유사하게, x1 요소는 3Vs-(b3+b2+b1)만큼 좌측으로 시프트될 수 있고, x0 요소는 4Vs-(b3+b2+b1+b0)만큼 좌측으로 시프트될 수 있다. 결과적인 시프트된 값들은 마스킹되고 함께 로직적으로 OR되어 결과 스택 레지스터에 대한 출력 복수의 비트들을 생성할 수 있다. 따라서, 가산기 회로(132)에 의해 생성된 합들은 시프트 회로들(134A 내지 134N)에 의해 사용될 수 있다. 가산기 회로(132)는 벡터 요소 크기들을 포함하는 풀 시프트 양을 생성하도록 구성될 수 있거나, 또는 시프트 회로들(134A 내지 134N)은 명시적으로 또는 암시적으로 벡터 요소 크기들을 처리할 수 있다.
concat 명령어/op는 시프트 회로(136)(p2 비트들을 n1만큼 우측으로 시프트함) 및 n1과 n2을 가산하여 출력 n을 생성하는 연산 n 회로(138)를 이용하여 수행될 수 있다. 예를 들어, 시프트된 p2는 p1 비트들과 로직적으로 OR되어 결과 스택 레지스터를 위한 출력 비트들을 생성할 수 있다.
도 11에 도시된 출력 선택 회로(142)는 마스크 회로들(136A 내지 136N), 연산 n 회로(138), 및 시프트 회로(140)에 결합될 수 있고, op가 레지스터 파일(112)에 출력을 제공하도록 수행되는 것에 기초하여 출력들 중에서 선택하도록 구성될 수 있다. 예를 들어, 마스크 회로들(136A 내지 136N)의 출력들은, 서로 연결되어, top 명령어에 대해 선택될 수 있는 반면, 시프트 회로(140) 및 연산 n 회로(138)의 출력은 pop, create, 및 concat 명령어들에 대해 선택될 수 있다.
도 11의 회로부는 벡터 실행 유닛(118)의 일부분의 구현의 일례일 뿐임을 주의한다. 임의의 다른 원하는 회로부가 사용될 수 있다. 예를 들어, 시프트 회로들은 회전 회로들일 수 있다. 부울 등가물을 포함하는, 도시된 회로부의 임의의 등가물이 사용될 수 있다.
도 12 내지 도 15는 본 명세서에 기재된 다양한 압축 보조 명령어들을 실행하기 위한 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)의 일 실시예의 동작을 도시하는 흐름도들이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118) 내의 조합 로직 회로부에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도들 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다.
도 12는 일 실시예에 대해, top 명령어를 실행하기 위한 동작을 도시하는 흐름도이다. 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 소스 크기 벡터에 기초하여 소스 스택 레지스터의 MSB들로부터 비트 필드들을 추출할 수 있다(블록(150)). 예를 들어, MSB들 중 b3은 x3으로서 추출될 수 있고, 다음 연속하는(인접한) b2 MSB들이 x2 등으로서 추출될 수 있다. 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 비트 필드들을 결과 벡터 레지스터의 벡터 요소들에 정렬할 수 있다(블록(152)). 추출 및 정렬은 위에 설명된 바와 같이 시프팅을 통해 수행될 수 있다. 다른 실시예들은 비트 필드들을 다른 방식으로 추출할 수 있다. 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 결과 벡터를 결과 벡터 레지스터(결과 피연산자에 의해 식별된 벡터 레지스터)에 기록할 수 있다(블록(154)).
도 13은 일 실시예에 대해, pop 명령어를 실행하기 위한 동작을 도시하는 흐름도이다. 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 소스 크기 벡터에 기초하여 스택의 잔여량을 결정할 수 있다(블록(156)). 예를 들어, 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 소스 크기 벡터의 벡터 요소들을 가산하고, 나머지 스택이 소스 크기 벡터의 벡터 요소들의 합과 동일한 MSB들의 수가 제거된 후의 스택이라고 결정할 수 있다. 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 소스 스택 피연산자의 비트 스택 부분을 시프트하여 나머지 스택을 결과 스택 레지스터의 MSB들에 넣을 수 있다(블록(158)). 예를 들어, 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 소스 스택을 소스 크기 벡터의 벡터 요소들의 합만큼 좌측으로 시프트할 수 있다. 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 n'을 소스 스택 레지스터로부터의 n - 크기 벡터의 벡터 요소들의 합으로서 연산할 수 있고(블록(160)) 시프트된 스택 및 n'을 결과 스택 레지스터에 기록할 수 있다(블록(162)).
도 14는 일 실시예에 대해, create 명령어를 실행하기 위한 동작을 도시하는 흐름도이다. 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 소스 크기 벡터 요소들에 기초하여 소스 벡터 요소들로부터 비트 필드들을 추출할 수 있다(블록(170)). 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 비트 필드들을 결과 레지스터의 MSB들에 정렬시킬 수 있다(블록(172)). 추출 및 정렬은 이전에 논의된 바와 같이 시프팅에 의해 수행될 수 있다. 다른 실시예들은 추출 및 정렬을 다른 방식으로 수행할 수 있다. 비트 필드들이 정렬되면, 그것들은 결과 레지스터 내에서 인접할 수 있다(예컨대 x3의 LSB는 x2의 MSB에 인접할 수 있고, x2의 LSB는 x1의 MSB에 인접할 수 있음 등). 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 n을 크기 벡터 요소들의 합으로서 연산할 수 있고(블록(174)) 결과 스택(MSB들) 및 n(LSB들)을 결과 스택 레지스터에 기록할 수 있다(블록(176)).
도 15는 일 실시예에 대해, concat 명령어를 실행하기 위한 동작을 도시하는 흐름도이다. 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 스택 소스 피연산자 2의 스택 부분을 n1(스탯 소스 피연산자 1의 스택 부분 내의 비트들의 수)만큼 좌측으로 시프트할 수 있다(블록(178)). 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 소스 스택 1의 스택 부분을 시프트된 소스 스택 2 필드와 병합할 수 있다(블록(180)). 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 각각 소스 스택 레지스터 1 및 소스 스택 레지스터 2로부터 n = n1 + n2을 연산할 수 있다(블록(182)). 프로세서(102)/실행 코어(120)/벡터 실행 유닛(118)은 병합된 스택 및 n을 결과 스택 레지스터에 기록할 수 있다(블록(184)).
위 개시내용이 완전히 이해되면 다수의 변형 및 수정이 통상의 기술자에게 명백할 것이다. 다음의 청구범위는 모든 그러한 변형들 및 수정들을 망라하는 것으로 해석되도록 의도된다.

Claims (15)

  1. 프로세서로서,
    복수의 벡터 레지스터들을 포함하는 레지스터 파일; 및
    상기 레지스터 파일에 결합된 실행 코어를 포함하고, 상기 실행 코어는 제1 벡터 피연산자, 제2 피연산자, 및 결과 벡터 피연산자를 명시하는 제1 명령어를 실행하도록 구성되고, 상기 제1 벡터 피연산자는 상기 복수의 벡터 레지스터들 중 제1 벡터 레지스터 내에 있고, 상기 제2 피연산자는 제2 레지스터 내에 있고, 상기 결과 벡터 피연산자는 상기 복수의 벡터 레지스터들 중 제3 벡터 레지스터에 기록될 것이고, 상기 실행 코어는 상기 제1 벡터 피연산자 내의 복수의 벡터 요소들에 응답하여 상기 제2 피연산자로부터 복수의 비트 필드들을 추출하고, 상기 제1 명령어를 실행하는 것에 응답하여 상기 복수의 추출된 비트 필드들을 상기 결과 벡터 피연산자 내의 대응하는 벡터 요소들로서 기록하도록 구성된, 프로세서.
  2. 제1항에 있어서, 상기 제2 레지스터는 상기 복수의 벡터 레지스터들 중 하나이고, 상기 실행 코어는 상기 제1 명령어를 실행하는 것에 응답하여 상기 제2 레지스터 내의 값의 일부분을 상기 복수의 벡터 요소들 대신에 복수의 연속적인 비트들로서 해석하도록 구성된, 프로세서.
  3. 제2항에 있어서, 상기 값의 제2 부분은 상기 복수의 연속적인 비트들의 수를 나타내는 비트 카운트인, 프로세서.
  4. 제3항에 있어서, 상기 실행 코어는 상기 제1 벡터 피연산자, 상기 제2 피연산자, 및 제2 결과 피연산자를 명시하는 제2 명령어를 실행하도록 구성되고, 상기 제2 결과 피연산자는 제4 레지스터에 기록될 것이고, 상기 실행 코어는 상기 제1 벡터 피연산자의 상기 벡터 요소들에 의해 명시된 비트들의 수의 합과 동일한 비트들의 수를 상기 제2 피연산자의 일부분으로부터 제거하고, 상기 제2 명령어를 실행하는 것에 응답하여 상기 제2 피연산자의 상기 일부분의 나머지를 상기 제4 레지스터 내의 상기 제2 결과 피연산자로서 기록하도록 구성된, 프로세서.
  5. 제4항에 있어서, 상기 제거된 비트들은 상기 제2 피연산자의 최상위 비트들이고, 상기 실행 코어는 상기 제2 명령어를 실행하는 것에 응답하여 상기 제2 피연산자의 상기 일부분의 나머지를 상기 제4 레지스터의 상기 최상위 비트들에 기록하도록 구성된, 프로세서
  6. 제5항에 있어서, 상기 실행 코어는 상기 제2 명령어를 실행하는 것에 응답하여 상기 제1 벡터 피연산자의 상기 벡터 요소들에 의해 명시된 비트들의 수의 합을 상기 비트 카운트로부터 감산하여 제2 비트 카운트를 생성하고, 상기 제2 비트 카운트를 상기 제4 레지스터의 제3 부분에 기록하도록 구성된, 프로세서.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서, 상기 복수의 비트 필드들 중 제1 비트 필드는 상기 제2 피연산자의 복수의 최상위 비트들을 포함하고, 상기 복수의 최상위 비트들의 수는 상기 제1 벡터 피연산자 내의 상기 복수의 벡터 요소들 중 제1 벡터 요소에 의해 명시되는, 프로세서.
  8. 제7항에 있어서, 상기 복수의 비트 필드들 중 제2 비트 필드는 상기 제2 피연산자 내의 상기 제1 비트 필드에 인접하고, 상기 제2 비트 필드 내의 비트들의 수는 상기 제1 벡터 피연산자 내의 상기 복수의 벡터 요소들 중 제2 벡터 요소에 의해 명시되고, 상기 제2 벡터 요소는 상기 제1 벡터 피연산자 내의 상기 제1 벡터 요소에 인접한, 프로세서.
  9. 제1항 내지 제8항 중 어느 한 항에 있어서, 상기 실행 코어는 상기 복수의 벡터 레지스터들 중 제2 벡터 레지스터 내의 제2 벡터 피연산자, 상기 복수의 벡터 레지스터들 중 제3 벡터 레지스터 내의 제3 벡터 피연산자, 및 제3 결과 피연산자를 명시하는 제3 명령어를 실행하도록 구성되고, 상기 실행 코어는 상기 제3 벡터 피연산자의 각각의 벡터 요소들 내의 값들에 응답하여 상기 제2 벡터 피연산자의 각각의 벡터 요소들로부터 복수의 비트 필드들을 추출하고, 상기 제3 명령어를 실행하는 것에 응답하여 상기 복수의 비트 필드들을 상기 제3 결과 피연산자에 기록하도록 구성된, 프로세서.
  10. 제9항에 있어서, 상기 실행 코어는 상기 제3 명령어를 실행하는 것에 응답하여 상기 복수의 비트 필드들을 상기 제3 결과 피연산자의 제1 부분 내의 인접한 비트들에 기록하도록 구성된, 프로세서.
  11. 제10항에 있어서, 상기 실행 코어는 상기 제3 명령어를 실행하는 것에 응답하여 상기 제3 벡터 피연산자의 상기 각각의 벡터 요소들의 상기 값들을 합산하고, 상기 합을 상기 제3 결과 피연산자의 제2 부분에 기록하도록 구성된, 프로세서.
  12. 제1항 내지 제11항 중 어느 한 항에 있어서, 상기 실행 코어는 제5 레지스터 내의 제5 피연산자, 제6 레지스터 내의 제6 피연산자, 및 제4 결과 피연산자를 갖는 제4 명령어를 실행하도록 구성되고, 상기 제5 피연산자는 제1 복수의 비트들을 갖는 제1 부분 및 상기 제1 복수의 비트들의 수를 나타내는 제2 비트 카운트를 갖는 제2 부분을 포함하고, 상기 제6 피연산자는 제2 복수의 비트들을 갖는 제1 부분 및 상기 제2 복수의 비트들의 수를 나타내는 제3 비트 카운트를 갖는 제2 부분을 포함하고, 상기 실행 코어는 상기 제4 명령어를 실행하는 것에 응답하여 상기 제4 결과 피연산자의 제1 부분 내의 상기 제1 복수의 비트들 및 상기 제2 복수를 연결하도록 구성된, 프로세서.
  13. 제12항에 있어서, 상기 실행 코어는 상기 제4 명령어를 실행하는 것에 응답하여 상기 제2 비트 카운트 및 상기 제3 비트 카운트를 합산하고, 상기 합을 상기 제4 결과 피연산자의 제2 부분에 기록하도록 구성된, 프로세서.
  14. 제12항에 있어서, 상기 제5 레지스터, 상기 제6 레지스터, 및 상기 제4 결과 피연산자를 저장하는 제4 결과 레지스터는 상기 복수의 벡터 레지스터들에 포함되고, 상기 실행 코어는 상기 제4 명령어를 실행하는 것에 응답하여 상기 제5 레지스터, 상기 제6 레지스터, 및 상기 제4 결과 레지스터 내의 값들을 벡터 요소들 대신에 상기 제1 부분들 및 제2 부분들로서 해석하도록 구성된, 프로세서.
  15. 방법으로서,
    복수의 벡터 레지스터들을 포함하는 레지스터 파일을 갖는 프로세서에서 제1 명령어를 실행하는 단계 - 상기 제1 명령어는 제1 벡터 피연산자, 제2 피연산자, 및 결과 벡터 피연산자를 명시하고, 상기 제1 벡터 피연산자는 상기 복수의 벡터 레지스터들 중 제1 벡터 레지스터 내에 있고, 상기 제2 피연산자는 제2 레지스터 내에 있고, 상기 결과 벡터 피연산자는 상기 복수의 벡터 레지스터들 중 제3 벡터 레지스터에 기록됨 -;
    상기 실행 동안, 상기 제1 벡터 피연산자 내의 복수의 벡터 요소들에 응답하여 복수의 비트 필드들을 상기 제2 피연산자로부터 추출하는 단계; 및
    상기 실행 동안, 상기 복수의 추출된 비트 필드들을 상기 결과 벡터 피연산자 내의 대응하는 벡터 요소들로서 기록하는 단계를 포함하는, 방법.
KR1020227007797A 2019-09-10 2020-09-08 압축 보조 명령어들 KR20220045012A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/566,344 2019-09-10
US16/566,344 US11086625B2 (en) 2019-09-10 2019-09-10 Compression assist instructions
PCT/US2020/049707 WO2021050423A1 (en) 2019-09-10 2020-09-08 Compression assist instructions

Publications (1)

Publication Number Publication Date
KR20220045012A true KR20220045012A (ko) 2022-04-12

Family

ID=72644897

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227007797A KR20220045012A (ko) 2019-09-10 2020-09-08 압축 보조 명령어들

Country Status (7)

Country Link
US (3) US11086625B2 (ko)
JP (1) JP7385009B2 (ko)
KR (1) KR20220045012A (ko)
CN (1) CN114365083A (ko)
DE (1) DE112020004266T5 (ko)
GB (1) GB2601668B (ko)
WO (1) WO2021050423A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11086625B2 (en) 2019-09-10 2021-08-10 Apple Inc. Compression assist instructions
US20220197643A1 (en) * 2020-12-23 2022-06-23 Intel Corporation Speculative decompression within processor core caches

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57209570A (en) * 1981-06-19 1982-12-22 Fujitsu Ltd Vector processing device
DE69429061T2 (de) * 1993-10-29 2002-07-18 Advanced Micro Devices Inc Superskalarmikroprozessoren
EP1046100A1 (en) 1998-08-06 2000-10-25 Trimedia Technologies, Inc. Data processor and method of processing data
US6781529B1 (en) 2002-10-24 2004-08-24 Apple Computer, Inc. Methods and apparatuses for variable length encoding
GB2409061B (en) 2003-12-09 2006-09-13 Advanced Risc Mach Ltd Table lookup operation within a data processing system
JP2012033032A (ja) 2010-07-30 2012-02-16 Sony Corp 情報処理装置および情報処理方法
US9280342B2 (en) * 2011-07-20 2016-03-08 Oracle International Corporation Vector operations for compressing selected vector elements
US8972697B2 (en) 2012-06-02 2015-03-03 Intel Corporation Gather using index array and finite state machine
US9904548B2 (en) 2014-12-22 2018-02-27 Intel Corporation Instruction and logic to perform a centrifuge operation
GB2540939B (en) * 2015-07-31 2019-01-23 Advanced Risc Mach Ltd An apparatus and method for performing a splice operation
US10338920B2 (en) 2015-12-18 2019-07-02 Intel Corporation Instructions and logic for get-multiple-vector-elements operations
WO2018150218A1 (en) * 2017-02-17 2018-08-23 Intel Corporation Vector instruction for accumulating and compressing values based on input mask
US20190065201A1 (en) 2017-08-31 2019-02-28 MIPS Tech, LLC Implicit global pointer relative addressing for global memory access
US11086625B2 (en) 2019-09-10 2021-08-10 Apple Inc. Compression assist instructions

Also Published As

Publication number Publication date
GB2601668B (en) 2023-04-26
JP2022546615A (ja) 2022-11-04
WO2021050423A1 (en) 2021-03-18
DE112020004266T5 (de) 2022-06-23
JP7385009B2 (ja) 2023-11-21
US11822921B2 (en) 2023-11-21
GB2601668A (en) 2022-06-08
US20230121984A1 (en) 2023-04-20
CN114365083A (zh) 2022-04-15
US11086625B2 (en) 2021-08-10
GB202202417D0 (en) 2022-04-06
US20210072994A1 (en) 2021-03-11
US11537399B2 (en) 2022-12-27
US20210342154A1 (en) 2021-11-04

Similar Documents

Publication Publication Date Title
US10719318B2 (en) Processor
US20210026634A1 (en) Apparatus with reduced hardware register set using register-emulating memory location to emulate architectural register
US6334176B1 (en) Method and apparatus for generating an alignment control vector
US5996057A (en) Data processing system and method of permutation with replication within a vector register file
US8555037B2 (en) Processing vectors using wrapping minima and maxima instructions in the macroscalar architecture
US6052766A (en) Pointer register indirectly addressing a second register in the processor core of a digital processor
TWI423127B (zh) 指令處理方法以及其所適用之超純量管線微處理器
TWI567751B (zh) 多暫存器記憶體存取指令、處理器、方法及系統
US20110004644A1 (en) Dynamic floating point register precision control
US11822921B2 (en) Compression assist instructions
TW201812571A (zh) 向量乘加指令
US9471324B2 (en) Concurrent execution of heterogeneous vector instructions
TW201419141A (zh) 用於執行推測式述詞指令之機制
CN107851013B (zh) 数据处理装置和方法
US20140289502A1 (en) Enhanced vector true/false predicate-generating instructions
WO2018138469A1 (en) An apparatus and method for processing input operand values
US9348589B2 (en) Enhanced predicate registers having predicates corresponding to element widths
US9817663B2 (en) Enhanced Macroscalar predicate operations
US20140289498A1 (en) Enhanced macroscalar vector operations
US20150089189A1 (en) Predicate Vector Pack and Unpack Instructions
WO2024003526A1 (en) Vector extract and merge instruction
US8549265B2 (en) Processing vectors using wrapping shift instructions in the macroscalar architecture
EP3405863B1 (en) Encoding instructions identifying first and second architectural register numbers
US20180121199A1 (en) Fused Multiply-Add that Accepts Sources at a First Precision and Generates Results at a Second Precision
US20120144174A1 (en) Multiflow method and apparatus for operation fusion

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal