KR20190129702A - 부동 소수점 데이터를 압축하기 위한 시스템 - Google Patents

부동 소수점 데이터를 압축하기 위한 시스템 Download PDF

Info

Publication number
KR20190129702A
KR20190129702A KR1020190041254A KR20190041254A KR20190129702A KR 20190129702 A KR20190129702 A KR 20190129702A KR 1020190041254 A KR1020190041254 A KR 1020190041254A KR 20190041254 A KR20190041254 A KR 20190041254A KR 20190129702 A KR20190129702 A KR 20190129702A
Authority
KR
South Korea
Prior art keywords
data
value
compressed
processor
dictionary
Prior art date
Application number
KR1020190041254A
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 KR20190129702A publication Critical patent/KR20190129702A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • G06F15/7842Architectures of general purpose stored program computers comprising a single central processing unit with memory on one IC chip (single chip microcontrollers)
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0864Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0886Variable-length word access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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/14Conversion to or from non-weighted codes
    • H03M7/24Conversion to or from floating-point codes
    • 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
    • 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/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3088Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
    • 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/60General implementation details not specific to a particular type of compression
    • H03M7/6011Encoder aspects
    • 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/70Type of the data to be coded, other than image and sound
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • 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/3053Block-companding PCM systems
    • 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)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Memory System (AREA)
  • Executing Machine-Instructions (AREA)
  • Microcomputers (AREA)

Abstract

부동 소수점 데이터를 압축하기 위한 시스템
프로세서는 부호 필드, 지수 필드 및 가수 필드를 포함하는 부동 소수점 포맷에 따라 인코딩되는 데이터 요소들을 저장하는 제1 메모리; 및 회로를 포함하는 압축 엔진을 포함하고, 압축 엔진은 데이터 요소당 태그 타입을 포함하는 압축된 데이터 블록을 생성하고, 여기서 제1 데이터 요소가 사전에서의 임의의 엔트리의 값과 매칭되지 않는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제1 태그 타입 및 데이터 요소의 압축되지 않은 값이 압축된 데이터 블록에 포함되고; 및 제2 데이터 요소가 사전에서의 제1 엔트리의 값과 매칭되는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제2 태그 타입 및 데이터 요소의 압축된 값이 압축된 데이터 블록에 포함된다.

Description

부동 소수점 데이터를 압축하기 위한 시스템{SYSTEM FOR COMPRESSING FLOATING POINT DATA}
본 개시내용은 일반적으로 컴퓨터 개발 분야에 관한 것이며, 더 구체적으로는, 데이터 압축에 관한 것이다.
컴퓨팅 시스템은, 다른 컴포넌트들 중에서도, 하나 이상의 프로세서, 하나 이상의 메모리, 및/또는 하나 이상의 메모리 제어기를 포함할 수 있다. 컴퓨팅 시스템의 로직은 데이터 요소들을 압축하도록 동작할 수 있다.
도 1은 특정 실시예들에 따라 부동 소수점 데이터를 압축하는 프로세서의 블록도를 도시한다.
도 2a는 특정 실시예들에 따라 반정도 부동 소수점 포맷(FP16)에 따라 포맷팅된 복수의 데이터 요소를 포함하는 데이터 블록의 압축을 도시한다.
도 2b는 특정 실시예들에 따른 예시적인 압축된 데이터 블록을 도시한다.
도 3은 특정 실시예들에 따른 도 1의 프로세서의 압축 엔진을 도시한다.
도 4는 특정 실시예들에 따른 2개의 채널상으로의 기입 데이터의 압축 및 배치를 도시한다.
도 5는 특정 실시예들에 따라 데이터를 압축하기 위한 흐름을 도시한다.
도 6은 특정 실시예들에 따라 압축된 데이터를 판독하기 위한 흐름을 도시한다.
도 7은 특정 실시예들에 따른 예시적인 FPGA(field-programmable gate array)를 예시한다.
도 8a는 특정 실시예들에 따른, 예시적인 순차적 파이프라인 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 파이프라인 모두를 도시하는 블록도이다.
도 8b는 특정 실시예들에 따른, 프로세서에 포함될 순차 아키텍처 코어의 예시적인 실시예 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 아키텍처 코어 모두를 도시하는 블록도이다.
도 9a 및 도 9b는 특정 실시예들에 따른, 코어가 칩에서의 몇 개의 로직 블록(잠재적으로는 동일한 타입 및/또는 상이한 타입의 다른 코어들을 포함함) 중 하나인, 보다 구체적인 예시적인 순차적 코어 아키텍처의 블록도를 도시한다.
도 10은 특정 실시예들에 따른, 하나보다 많은 코어를 가질 수 있고, 통합 메모리 제어기를 가질 수 있고, 통합된 그래픽을 가질 수 있는 프로세서의 블록도이다.
도 11, 도 12, 도 13, 및 도 14는 특정 실시예들에 따른 예시적인 컴퓨터 아키텍처들의 블록도들이다.
도 15는 특정 실시예들에 따른, 소스 명령어 세트에서의 바이너리 명령어들을 타겟 명령어 세트에서의 바이너리 명령어들로 변환하기 위해 소프트웨어 명령어 변환기를 사용하는 것을 대비하는 블록도이다.
다양한 도면들에서 유사한 참조 번호들 및 명칭들은 유사한 요소들을 나타낸다.
다양한 컴퓨터 아키텍처들에서, 메모리 대역폭 소비는 성능 이득들에 대한 도전적 과제가 되었다. 메모리 대역폭에 대한 제약들은 데이터를 메모리에 저장하기 전에 데이터를 압축함으로써 부분적으로 완화될 수 있다. 종래의 압축 스킴들(예를 들어, WKdm)은 데이터 요소들의 단지 소수의 최하위 비트들(LSB들)만이 상이한(그리고 데이터 요소들의 상당한 부분이 작은 국소적 영역에 걸쳐서 정적인) 정수 데이터 타입들, 인덱스들 또는 포인터들인 데이터 성분들을 압축하기 위해 잘 동작할 수 있지만, 가수(significand)(또한, 가수(mantissa) 또는 계수라고 함)에 대한 비트들이 데이터 요소들에 걸쳐 상당히 달라질 수 있는 부동 소수점 데이터에 대한 압축성을 거의 또는 전혀 제공하지 못한다. 따라서, 범용 데이터 압축 스킴들은 반정도 부동 소수점 포맷(FP16)과 같은 부동 소수점 포맷으로 저장된 데이터를 포함할 수 있는 머신 러닝에 사용되는 데이터 세트들(예를 들어, 명령어들, 활성화들, 또는 가중치들을 포함함)과 같은 특정 타입들의 데이터 세트들을 압축하는 데 효과적이지 않을 수 있다. 특수화된 압축 스킴이 없는 경우, 시스템의 성능은 고대역폭 메모리(HBM)를 활용하는 아키텍처에서조차도, 메모리 대역폭에 의해 제한될 수 있다.
본 개시내용의 다양한 실시예들은 머신 러닝 또는 다른 응용들에서 사용되는 부동 소수점 데이터 타입들의 압축을 위한 시스템들 및 방법들뿐만 아니라 메모리 대역폭의 활용을 개선하고 성능 및 전력 소비를 개선하는 효율적인 하드웨어 설계를 제공한다. 특정 실시예는 FP16 포맷팅된 데이터를 압축하기 위한 하드웨어를 포함하지만, 여기에 설명된 개시내용은 (단정도 부동 소수점(FP32), 배정도 부동 소수점(FP64) 등과 같은) 가수 및 지수 비트들을 갖는 다른 부동 소수점 포맷들을 준수하는 데이터를 압축하도록 적응될 수 있다. 본 개시내용의 다양한 실시예들은 제로들, 작은 상수들(예를 들어,+/-1), 작은 클러스터링된 지수들의 범위, 및/또는 특정 데이터 세트들에 대한 부호 비트를 압축함으로써 부동 소수점 데이터의 압축성을 개선할 수 있다. 특정 실시예들은 가수들의 높은 가변성으로 인해 가수 비트들의 압축을 생략한다. 예시적인 압축 스킴이 도 2a에 도시되어 있다.
다양한 실시예들의 기술적 장점들은 압축 및 압축 해제에 대한 매우 높은 처리량(예를 들어, 주기당 32 바이트), 작은 데이터 블록 크기들(예를 들어, 64 바이트)에 대한 연산, 낮은 설계 복잡도, 합리적인 판독 레이턴시 영향(예를 들어, 4 사이클 미만), 합리적인 영역 영향(예를 들어, 200,000개 미만의 논리 게이트), 및 합리적인 전력 풋프린트 중 하나 이상을 포함할 수 있다. 다양한 실시예들에서, 최소 레이턴시가 판독/기입 경로들에 추가되는 한편, FP16 포맷에서의 전형적인 머신 러닝 데이터 세트들에 대해 약 10-50%의 유효 대역폭의 증가가 제공된다. 다양한 실시예들은 페이지(예를 들어, 1 KB, 2 KB, 4 KB 등)와 같은 더 큰 블록들과는 대조적으로 메모리에 대한 데이터 경로에 기초하여 크기가 정해지는 작은 블록들(예를 들어, 16 바이트, 32 바이트, 64 바이트 등)에서 동작하는 압축 엔진(108)을 제공할 수 있다. 본 명세서에서 설명되는 방법들 및 시스템들은 광범위한 블록 크기들에 걸쳐 개선된 성능을 제공할 수 있다.
도 1은 특정 실시예들에 따라 부동 소수점 데이터를 압축하는 프로세서(100)의 블록도를 도시한다. 프로세서(100)는 복수의 코어(104), 메모리 인터페이스(106), 압축 엔진(108), 및 메모리 제어기(110)를 포함하는 프로세서 클러스터(102)를 포함한다. 프로세서(100)는 메모리(112)에 결합된다.
프로세서(100)는, 마이크로프로세서, 임베디드 프로세서, DSP(digital signal processor), 네트워크 프로세서, 핸드헬드 프로세서, 애플리케이션 프로세서, 코프로세서, SOC(system on a chip), 또는 코드(예컨대, 소프트웨어 명령어들)를 실행하는 다른 디바이스를 포함한다. 묘사된 실시예에서, 프로세서(100)는 프로세서 클러스터(102)로 배열된 4개의 처리 요소(코어들(102A-102D))를 포함한다. 프로세서(100)는 비대칭 처리 요소들 또는 대칭 처리 요소들을 포함할 수 있다. 그렇지만, 프로세서는 대칭 또는 비대칭일 수 있는 임의의 수의 처리 요소들을 포함할 수 있다.
일 실시예에서, 처리 요소는 소프트웨어 스레드를 지원하는 회로를 지칭한다. 하드웨어 처리 요소들의 예들은: 스레드 유닛, 스레드 슬롯, 스레드, 프로세스 유닛, 컨텍스트, 컨텍스트 유닛, 논리 프로세서(logical processor), 하드웨어 스레드, 코어, 및/또는 실행 상태 또는 아키텍처 상태(architectural state)와 같은 프로세서에 대한 상태를 보유할 수 있는 임의의 다른 요소를 포함한다. 환언하면, 일 실시예에서, 처리 요소는, 소프트웨어 스레드, 운영 체제, 애플리케이션, 또는 기타 코드와 같은 코드와 독립적으로 연관될 수 있는 임의의 하드웨어를 지칭한다. 물리 프로세서(또는 프로세서 소켓)는 전형적으로, 잠재적으로 코어들 또는 하드웨어 스레드들과 같은 임의의 수의 다른 처리 요소들을 포함하는 집적 회로를 지칭한다.
코어(104)(예를 들어, 104A-104D)는 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로상에 위치된 로직을 지칭할 수 있으며, 여기서 각각의 독립적으로 유지되는 아키텍처 상태는 적어도 일부 전용 실행 리소스들과 연관되어 있다. 하드웨어 스레드는 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로상에 위치된 임의의 로직을 지칭할 수 있으며, 여기서 독립적으로 유지되는 아키텍처 상태들은 실행 리소스들에의 액세스를 공유한다. 알 수 있는 바와 같이, 특정 리소스들이 공유되고 기타 리소스들은 아키텍처 상태에 전용일 때, 코어와 하드웨어 스레드의 명명법 사이의 라인이 중첩된다. 하지만 종종, 운영 체제는 코어 및 하드웨어 스레드를 개별적인 논리 프로세서들로 보며, 이 경우 운영 체제는 각각의 논리 프로세서상에서의 동작들을 개별적으로 스케줄링할 수 있다.
다양한 실시예들에서, 처리 요소들은 또한 하나 이상의 ALU(arithmetic logic unit)들, FPU(floating point unit)들, 캐시들, 명령어 파이프라인들, 인터럽트 핸들링 하드웨어, 레지스터들, 또는 처리 요소들의 동작들을 용이하게 하기 위한 다른 하드웨어를 포함할 수 있다.
코어들(104) 또는 다른 처리 요소들은 메모리 요청들(예를 들어, 판독, 기입, 판독-수정-기입들(바이트 기입 인에이블), 복사, 바이트 인에이블을 갖는 복사, 분산 기입/복사, 또는 다른 요청들)을 메모리 인터페이스(106)에 전송할 수 있다. 일부 경우에, 요청들은 임의의 적절한 크기의 데이터를 참조할 수 있다. 예를 들어, 요청은 데이터의 하나 이상의 캐시 라인을 요청할 수 있다. 일부 실시예들에서, 요청은 많은 수의 캐시 라인을 포함하는 페이지(예를 들어, 데이터의 1 KB, 2 KB, 4 KB 등)를 요청할 수 있다. 메모리 인터페이스(106)는 요청을 언롤링(unroll)하고 메모리 제어기(110)에 전송될 다수의 더 작은 요청을 생성할 수 있다. 예를 들어, 메모리 인터페이스(106)는 각각이 단일 캐시 라인(예를 들어, 64 바이트)을 참조하는 일련의 판독 또는 기입 요청들로 더 큰 요청을 분할할 수 있다.
압축 엔진(108)은 메모리(112)에 기입될 데이터를 압축하도록 동작가능한 회로를 포함한다. 예를 들어, 프로세서(100)의 처리 요소는 기입 요청을 발행할 수 있고, 메모리 인터페이스(106)는 하나 이상의 데이터 블록(예를 들어, 캐시 라인들 또는 다른 데이터 그룹화)으로 압축 엔진(108)에 기입될 데이터를 제공할 수 있다. 압축 엔진(108)은 본 명세서에 설명된 실시예들 중 임의의 것에 따라 기입될 데이터의 각각의 블록을 압축할 수 있다. 압축된 데이터 블록(들)은 이후 메모리(112)로의 통신을 위해 메모리 제어기(110)에 제공될 수 있다.
압축 엔진(108)은 또한 메모리(112)로부터 판독되는 데이터를 압축 해제하도록 동작가능할 수 있다. 메모리 제어기(110)는 메모리(112)로부터 데이터를 판독하고 판독된 데이터를 압축 엔진(108)에 제공할 수 있다. 압축 엔진(108)은 데이터를 압축 해제하고, 압축 해제된 데이터를 (예를 들어, 메모리 인터페이스(106)를 통해) 판독을 요청한 처리 요소에 제공할 수 있다.
다양한 실시예들에서, 압축 엔진(108)은 하나 이상의 코어(104), 메모리 제어기(110), 및/또는 메모리(112)(이것은 코어들(104)과 동일한 칩 상에 또는 상이한 칩상에 위치될 수 있음)와 동일한 칩상에 위치될 수 있거나, 또는 코어들(104), 메모리 제어기(110), 및/또는 메모리(112) 중 임의의 하나 이상과 상이한 칩상에 위치될 수 있다. 특정 실시예에서, 압축 엔진(108)은 메모리 제어기(110), 메모리 인터페이스(106), 코어(104)와 함께 같은 장소에 배치될 수 있다(또는 이들 중 어느 하나의 컴포넌트일 수 있다).
메모리 제어기(110)는 하나 이상의 메모리(112)로 및 그로부터 가고오는 데이터의 흐름을 제어하는 회로를 포함한다. 메모리 제어기(110)는 메모리(112)로부터 판독하거나, 메모리(112)에 기입하거나, 메모리(112)로부터 다른 동작들을 요청하도록 동작가능한 로직을 포함할 수 있다. 동작 동안, 메모리 제어기(110)는 메모리(112)로부터 데이터를 판독하거나 메모리(112)에 데이터를 기입하기 위해(또는 다른 동작들을 수행하기 위해) 하나 이상의 어드레스를 포함하는 커맨드들을 발행할 수 있다.
묘사된 실시예에서, 메모리 제어기(110)는 압축 플래그들(114)을 저장한다. 압축 플래그들은 메모리(112)에 저장하기 전에 압축 엔진(108)에 의해 어느 데이터가 압축되었는지를 나타낸다. 예를 들어, 압축 플래그는 캐시 라인의 특정 어드레스에 대응할 수 있고, 캐시 라인 데이터가 압축되었는지 여부의 이진 표시를 제공할 수 있다. 압축 플래그들은 메모리 제어기(110)로 하여금 메모리(112)에 기입되기 전에 특정 어드레스와 연관된 데이터가 압축되었는지를 결정할 수 있게 하는 임의의 다른 적절한 형태를 취할 수 있다. 특정 어드레스에서의 데이터가 판독될 때, 메모리 제어기는 압축된 데이터가 판독되어야 하는 방법을 결정하기 위해 대응하는 압축 플래그에 액세스할 수 있다(즉, 압축되지 않은 데이터 블록은 압축된 데이터 블록과 상이하게 판독될 수 있다). 특정 실시예에서, 압축 플래그는, 메모리 제어기(110)가 압축되지 않은 데이터 블록을 검색할 때 정상적으로 판독되었을 데이터의 절반을 판독할 수 있게 하기 위해 특정 데이터 블록에 대해 적어도 50% 압축비가 달성되었는지를 나타낼 수 있다. 대안적인 실시예에서, 압축 플래그들(114)은 압축 엔진(108)에 의해 저장될 수 있고, 판독 요청들이 수신될 때, 압축 엔진(108)은 압축 플래그들에 기초하여 요청된 데이터가 압축되었는지를 결정할 수 있고, 압축 플래그들에 기초하여 적절한 요청들을 메모리 제어기에 전송할 수 있다. 예를 들어, 압축 엔진(108)은 (캐시 라인이 압축되지 않았다면) 정상적으로는 2개의 채널을 통해 판독을 요구했을 특정 캐시 라인에 대한 판독 요청을 수신할 수 있고, 메모리 제어기에게 단일 채널을 통해 압축된 캐시 라인을 판독하라는 요청을 제출할 수 있다.
다양한 실시예들에서, 메모리(112)는 데이터를 저장하기 위한 임의 수의 메모리 어레이들을 포함할 수 있다. 메모리(112)는 임의의 비휘발성 메모리 및/또는 휘발성 메모리를 포함할 수 있다. 메모리(112)는 임의의 적절한 유형의 메모리를 포함할 수 있고, 다양한 실시예들에서 특정의 속도, 기술, 또는 폼 팩터의 메모리로 제한되지 않는다. 일 예로서, 메모리(112)는 소켓에 삽입될 수 있는 메모리 모듈(예를 들어, 듀얼 인-라인 메모리 모듈(DIMM), 단일 인-라인 메모리 모듈(SIMM) 등)일 수 있다. 특정 실시예에서, 메모리(112)는 DIMM 폼 팩터를 갖는다. DIMM은 회로 보드상에 탑재된 다중 메모리 칩을 포함할 수 있고, 여기서 회로 보드는 회로 보드의 각각의 측상에 전기 콘택들(즉, 핀들)을 포함한다. 다양한 예들에서, 메모리(112)는 288, 260, 244, 240, 204, 200, 또는 다른 적절한 수의 핀들과 같은 임의의 적절한 수의 핀들을 가질 수 있다. 다양한 실시예들에서, 메모리(112)는 프로세서(100)를 위한 소켓을 또한 포함하는 회로 보드(예를 들면, 마더보드)상의 DIMM 슬롯에 삽입될 수 있다. 특정 실시예에서, 메모리(112)는 비휘발성 메모리를 포함하는 메모리 칩들을 포함하는 비휘발성 DIMM(NV-DIMM)이다. 또 다른 실시예에서, 메모리(112)는 휘발성 메모리(예를 들어, DRAM(dynamic random access memory))를 포함하는 메모리 칩들을 포함하는 DIMM이다. 또 다른 실시예에서, 메모리(112)는 프로세서(100)와 동일한 칩상에 위치될 수 있다. 예를 들어, 메모리(112)는 최종 레벨 또는 다른 캐시일 수 있다.
특정 실시예에서, 메모리(112)는 서로 독립적으로 데이터를 기입하는 데 사용될 수 있는 복수의 뱅크를 포함한다(각각의 뱅크는 메모리(112)와 메모리 제어기(110) 사이의 제각기 채널에 결합된다). 일 실시예에서, 압축되지 않은 블록을 기입하는데 사용되는 뱅크들의 수는 압축된 블록을 기입하는데 사용되는 뱅크들의 수보다 크다. 예를 들어, 메모리(112)는 압축되지 않은 블록을 메모리(112)에 기입하는 데 모두 사용되는 2개의 뱅크를 포함할 수 있지만, (블록에 대해 50% 압축비가 달성되었다고 가정하면) 메모리(112)에 압축된 블록을 기입하는데 단일 뱅크가 사용될 수 있다.
도 2a는 특정 실시예들에 따라 반정도 부동 소수점 포맷(FP16)에 따라 포맷팅된 복수의 데이터 요소를 포함하는 데이터 블록의 압축을 도시한다. 각각의 압축되지 않은 데이터 요소(202)는 FP16 포맷을 지정하는 IEEE(Institute of Electrical and Electronics Engineers) 754 표준을 준수한다. 그에 따라서, 데이터 요소(202)는 (묘사된 실시예의 좌측상의 MSB로부터 묘사된 실시예의 우측상의 LSB로 이동하는) 부호 비트, 5 비트 지수, 및 10 비트 가수(이것은 값 1을 갖는 묵시적 리드 비트를 갖는 11 비트 가수를 지정할 수 있음)를 포함한다. 지수는 15의 바이어스를 갖고, 정규 숫자들은 (-1)signbit × 2exponent -15 ×1.significandbits2으로서 정의된다. 지수 00000 및 11111은 특별하게 해석된다. 지수가 00000이고 가수가 0000000000일 때, 표현되는 숫자는 0이다(만일 지수가 00000일 때 가수가 임의의 다른 값이라면, 표현되는 숫자는 서브노멀(subnormal)로 간주되고, (-1)signbit ×2-14 ×0.significandbits2로서 결정된다). 지수가 11111이고 가수가 0000000000일 때, 표현되는 숫자는 ±무한대이다(만일 가수가 임의의 다른 값이라면, 표현되는 숫자는 NaN(not-a-number)으로서 간주된다).
데이터 블록(200)의 데이터 요소들(202)(즉, 202A-202N)은 함께 처리되어 압축된 블록(204)을 생성한다. 특정 실시예에서, 데이터 블록(200)의 크기(데이터 블록(200)에서 데이터 요소들 "N"의 수에 의해 정의됨)는 메모리(112)에 대한 (하나 이상의 채널을 포함할 수 있는) 버스의 크기와 일치할 수 있거나, 메모리 버스 레이트에 대응하거나, 또는 다른 경우에는 하드웨어 구현에 기초할 수 있다. 예를 들어, (FP16에 따라) 16 비트 데이터 요소 크기를 사용하여 주기당 16 바이트를 달성하기 위해(예를 들어, 압축 엔진(108)은 판독을 위해 주기당 압축되지 않은 16 바이트를 수신하고 기입을 위해 주기당 압축해제된 16 바이트를 출력함), N은 8에 설정된다. 또 다른 예로서, 16 비트 데이터 요소 크기를 이용하여 주기당 32바이트를 달성하기 위해, N은 16에 설정된다. 다양한 실시예들에서, 데이터 블록(200)의 크기는 메모리(112)의 캐시 라인의 크기(예를 들어, 64 바이트)와 매칭되거나 캐시 라인의 크기의 절반(예를 들어, 32 바이트)이다.
각각의 데이터 블록(200)은 다른 블록들과 독립적으로 인코딩된다(그렇지만, 이하에서 더 상세히 설명되는 바와 같이, 사전(dictionary)은 블록들에 걸쳐 유지될 수 있고, 따라서 데이터 블록의 압축은 하나 이상의 이전 블록을 이용하여 생성되는 사전에 의존할 수 있다). 묘사된 실시예에서, 압축된 블록(204)은 태그들(206), 압축되지 않은 데이터 요소들(208), 사전 매칭들의 압축되지 않은 부분들(예를 들어, 사전 엔트리들과 매칭되는 지수들을 갖는 데이터 요소들의 부분들)(210), 및 패드 비트들(212)을 포함한다. 각각의 압축된 블록(204)이 태그들(206)을 포함하는 반면, 압축되지 않은 데이터 블록(200)의 내용들에 의존하여, 압축되지 않은 데이터 요소들(208), 사전 매칭들의 압축되지 않은 부분들(210), 또는 패드 비트들(212) 중 하나 이상이 압축된 블록(204)으로부터 생략될 수 있다.
특정 작업 부하들에서, 지수 값들의 범위는 비교적 작을 수 있고(예를 들어, -1, 0, 또는 +1), 따라서 압축은 태그들을 이용하여 공통적으로 사용된 지수들을 인코딩함으로써 달성될 수 있다. 압축 엔진(108)은 블록(200)의 각각의 데이터 요소(202)를 처리하고, 각각의 데이터 요소에 대한 태그를 결정한다. 제1 태그 값은 데이터 요소에 대한 0의 값을 나타낸다(즉, 지수 비트들 및 가수 비트들은 모두 0임). 제2 태그 값은 데이터 요소의 지수 비트들이 지수 값들의 사전에서의 엔트리와 매칭되지 않는다는 것을 나타낸다. 특정 실시예에서 (예를 들어, FP16 데이터가 압축되고 있을 때), 압축 엔진(108)은 5 비트 지수 값들을 포함하는 사전을 활용할 수 있다(그렇지만, 다른 실시예들에서, 8 비트 또는 11 비트와 같은 임의의 적절한 지수들의 길이가 사전에 저장될 수 있다). 압축 엔진은 처리되고 있는 데이터 요소(202)의 지수 비트들이 사전에서의 엔트리와 매칭되는지를 결정할 수 있다. 지수 비트들이 사전에서의 어느 엔트리와도 매칭되지 않는다면, 전술한 제2 태그 값이 데이터 요소가 압축될 수 없었음을 나타내기 위해 데이터 요소에 대해 사용된다. 지수 비트들이 사전의 엔트리와 매칭되는 경우, 매칭된 사전의 특정 엔트리에 대응하는 태그 값이 데이터 요소에 대한 태그들(206)에 포함된다. 예를 들어, 사전이 2개의 5 비트 지수 엔트리를 저장할 때, 제3 태그 값 및 제4 태그 값이 제각기 사용될 수 있어서, 사전의 제1 엔트리 또는 제2 엔트리가 처리되고 있는 데이터 요소의 지수 비트들과 매칭되도록 한다. 따라서, 일부 실시예들에서, 각각의 태그 값은 전술한 4개의 태그 값을 제공하기 위해 길이가 2 비트일 수 있다. 또 다른 예로서, 사전은 6개의 5 비트 지수 엔트리를 포함할 수 있고, 각각의 태그 값은 (즉, 0 값에 대응하거나 어떤 매칭도 없는) 위에서 설명된 처음 2개의 태그 값을 제공하기 위해 길이가 3 비트일 수 있고, 각각에 대한 6개의 추가적인 태그 값은 처리되고 있는 데이터 요소(202)의 지수 값에 의해 매칭되는 사전의 제각기 엔트리에 대응한다.
특정 실시예에서, 태그들은 압축된 블록(204) 내에 시리즈(series)로 함께 저장될 수 있다. 묘사된 실시예에서, 태그들(206)에는 블록(200)의 압축되지 않은 데이터 요소들(208)(즉, 0 값이 아니었고 또한 사전 값과 매칭되는 지수 비트들을 갖지 않았던 데이터 요소들)이 뒤따라온다. 압축되지 않은 데이터 요소들(208)에 후속하여, 압축된 블록(204)은 사전 값들과 매칭되는 지수 비트들(이러한 데이터 요소의 지수 비트들은 데이터 요소에 대한 태그 값으로 압축됨)을 포함했던 데이터 요소들의 압축되지 않은 부분들(즉, 부호 비트 및 가수 비트들)을 포함한다. 또 다른 실시예에서, 압축되지 않은 부분들(210) 및 압축되지 않은 데이터 요소들(208)의 순서는 교환될 수 있다. 다양한 실시예들에서, 압축된 블록(204)은, 압축 해제를 단순화하기 위해 (예를 들어, 압축 엔진(108)이 압축 해제 동안 압축된 블록들 간에서 구별하는 것을 더 쉽게 하고, 따라서 압축 엔진이 더 높은 주파수에서 동작하도록 허용하기 위해) 압축된 블록(204)의 전체 비트 수가 8 또는 16의 배수가 되도록 비트들(212)로 패딩될 수 있다.
도 2b는 특정 실시예들에 따른 예시적인 압축된 데이터 블록(250)을 도시한다. 데이터 블록(250)은 압축된 데이터 블록(204)의 임의의 적절한 특성을 가질 수 있다. 묘사된 실시예에서, 압축된 데이터 블록(250)은 각각의 데이터 요소에 대한 태그 값을 포함한다. 데이터 요소 0에 대한 태그 값은 00이고, 데이터 요소 1에 대한 태그 값은 01이고, 데이터 요소 2에 대한 태그 값은 10이고, 데이터 요소 3에 대한 태그 값은 11이고, 데이터 요소 4 내지 6에 대한 태그 값들은 도시되지 않았고, 데이터 요소 7에 대한 태그 값은 00이다. 묘사된 실시예에서, 태그 값 00은 0 값에 대응하고, 따라서 데이터 요소 0에 대한 태그만이 압축된 블록(250)에 저장된다. 유사하게, 데이터 요소 7에 대한 태그만이 압축된 블록(250)에 저장된다. 묘사된 실시예에서, 태그 값 01은 사전에서 매칭을 갖지 않는 데이터 요소에 대응하고, 따라서 압축된 데이터 블록(250)은 데이터 요소 1의 전체(데이터 요소 1의 부호, 가수 및 지수를 포함함)를 포함한다. 묘사된 실시예에서, 태그 값 10은 사전에서의 제1 엔트리와 매칭되는 지수를 갖는 데이터 요소에 대응하고, 태그 값 11은 사전에서의 제2 엔트리와 매칭되는 지수를 갖는 데이터 요소에 대응한다. 그에 따라서, 데이터 요소들 2 및 3에 대해, 데이터 요소 2 및 데이터 요소 3의 부호 및 가수 비트들이 압축된 블록(250)에 저장된다. 데이터 요소들 4 내지 6의 대응하는 압축된 또는 압축되지 않은 부분들은 묘사되지 않는다. 압축된 데이터 블록(250)은 또한 (예를 들어, 바이트 경계를 따른) 압축된 데이터 블록(250)의 원하는 길이를 달성하기 위한 패딩을 포함한다.
일부 실시예들에서, 사전은 각각이 부호 비트 및 지수의 조합을 포함하는 복수의 엔트리를 포함할 수 있다. 이러한 실시예에서, 데이터 요소의 부호 비트 및 지수가 사전의 엔트리와 매칭될 때, 태그가 데이터 요소에 할당될 수 있고, 태그 값 및 가수(지수도 아니고 부호 비트도 아님)가 압축된 데이터 블록에 기입될 수 있다(그 이유는 사전과 조합되는 태그 값이 부호 비트뿐만 아니라 지수를 인코딩할 수 있기 때문이다).
16 비트의 길이를 갖는 데이터 요소들에 대해 동작하는 2 비트 태그 구현에서, 0의 값을 갖는 각각의 데이터 요소는 2 비트 태그로 압축되고, 사전 엔트리에 대해 매칭되지 않는 각각의 데이터 요소는 압축되지 않고, 전체 16 비트는 블록(204)에 기입되고, 사전 엔트리에 대해 매칭되는 각각의 데이터 요소는 부분적으로 압축된다(즉, 5 비트 지수는 2비트 태그로 압축되고, 부호 비트 및 10 비트 가수는 압축되지 않는다). 따라서, 매칭들의 수가 M이고 0이 아닌 값이고 매칭되지 않은 데이터 요소들의 수가 F인 경우, 압축된 블록에 대한 총 비트 카운트는 32+F*16+M*11이다.
16 비트의 길이를 갖는 데이터 요소들에 대해 동작하는 3 비트 태그 구현에서, 0의 값을 갖는 각각의 데이터 요소는 3 비트 태그로 압축되고, 사전 엔트리에 대해 매칭되지 않는 각각의 데이터 요소는 압축되지 않고, 전체 16 비트가 블록(204)에 기입되고, 사전 엔트리에 대해 매칭되는 각각의 데이터 요소는 부분적으로 압축된다(즉, 5 비트 지수는 3 비트 태그로 압축되고, 부호 비트 및 10 비트 가수는 압축되지 않는다). 따라서, 매칭들의 수가 M이고 0이 아닌 값이고 매칭되지 않은 데이터 요소들이 F인 경우, 압축된 블록에 대한 총 비트 카운트는 48+F*16+M*11이다.
이 스킴의 한 가지 장점은 매칭 비트들의 오프셋 또는 위치들에 대해 어떤 별개의 필드도 필요하지 않다는 것인데, 그 이유는 해당 정보가 태그 정보에 직접 인코딩되기 때문이다(즉, 각각의 매칭되는 태그 값이 사전의 별개의 위치에 대응하기 때문이다).
도 3은 특정 실시예들에 따른 도 1의 프로세서의 압축 엔진(108)을 도시한다. 압축 엔진(108)은 압축기(302), 압축 해제기(304), 및 버퍼 메모리(314)를 포함한다. 압축기(302)는 인코더(306) 및 사전(308A)을 포함한다. 인코더(306)는 제로 값들 및 사전(308A)의 엔트리들과의 매칭에 대해 체크함으로써 블록(200)의 각각의 데이터 요소(202)에 대한 태그를 결정하고 이후 태그들(206), 압축되지 않은 데이터 요소들(208), 사전 매칭들의 압축되지 않은 부분들(210), 및 적용 가능한 경우 패드 비트들(212)을 갖는 압축된 블록(204)을 생성함으로써 압축된 블록(204)을 형성하도록 동작가능하다. 버퍼 메모리(314)는 압축되지 않은 데이터 블록(200) 및/또는 압축된 데이터 블록(204)과 같은 데이터를 저장하는 임의의 적절한 메모리를 포함할 수 있고, 압축 및/또는 압축 해제 동안 사용될 수 있다.
묘사된 실시예에서, 사전(308A)은 2개의 엔트리: entry0 및 entry1을 포함하지만, 다른 실시예들에서, 사전(308A)은 임의의 적절한 수의 엔트리들(예를 들어, 태그들이 3 비트 길이일 때 6개의 엔트리)을 포함할 수 있다. 압축되고 있는 데이터의 포맷이 FP16일 때, 사전(308A)의 엔트리들은 각각 5 비트 지수 값을 저장할 수 있다(다른 부동 소수점 포맷들에 대해, 사전은 데이터 요소들에서의 지수들의 길이와 매칭되는 지수들을 갖는 엔트리들을 저장할 수 있다). 압축되지 않은 블록(200)의 각각의 데이터 요소(202)에 대해, 데이터 요소의 지수 비트들(즉, 비트들 14:10)이 검사되어, 이들이 사전의 엔트리의 대응하는 비트들과 매칭되는지를 결정할 수 있다. 특정 실시예에서, 압축될 데이터 요소의 지수의 하나 이상의 비트가, 데이터 요소의 지수 비트들에 대해 비교하기 위해 사전의 엔트리를 선택하도록 사전에 인덱스하는 데 사용된다. 예를 들어, 2개의 엔트리 사전을 이용하여, 데이터 요소의 지수의 단일 비트가 사전에 인덱스하는데 사용될 수 있다(즉, 비트 값이 0이면, entry0은 데이터 요소의 지수 비트들에 대해 비교되고, 비트 값이 1이면, entry1은 데이터 요소의 지수 비트들에 대해 비교된다). 일 실시예에서, 데이터 요소의 지수의 LSB는 비교를 위해 사전 엔트리를 선택하기 위해 사전에 인덱싱하는 데 사용된다.
또 다른 실시예에서, 사전의 인덱스를 계산하기 위해 데이터 요소의 지수의 다중 비트에 대해 해시 연산이 수행될 수 있다. 임의의 적절한 해시 연산이 사용될 수 있다. 일 예로서, 6개의 엔트리를 갖는 사전(308A)에 인덱싱하기 위해, 데이터 요소의 지수와 비교하기 위해 사전의 엔트리를 결정하도록 데이터 요소의 지수의 3개의 LSB에 대해 모듈로 6 연산이 수행될 수 있다. 특정 실시예에서, 사전(308A 및/또는 308B)은 병렬 검색들을 허용하는 CAM(content addressable memory)에 저장될 수 있다.
사전 엔트리들은 새로운 데이터 시리즈(여기서 데이터 시리즈는 복수의 압축되지 않은 블록(200)을 포함할 수 있음)의 압축의 시작 이전에 임의의 적절한 값들로 엔트리 업데이터(310A)에 의해 초기화될 수 있다. 일부 실시예들에서, 사전 엔트리들은 프로세서(100)의 동작 동안 변하지 않는 정적 값들에 기초하여 초기화된다. 예로서, 2개의 엔트리 사전을 활용하는 실시예에서, 엔트리들은 새로운 데이터 시리즈가 압축을 시작할 때마다 +1 및 -1로 초기화될 수 있다. 일부 실시예들에서, 초기화는 애플리케이션 특정적일 수 있다. 예를 들어, 제1 타입의 작업부하에 대해(예를 들어, 머신 러닝 작업부하에서의 활성화 데이터의 저장에 대해), 사전(308A)의 엔트리들은 제1 세트의 값들로 초기화될 수 있고, 제2 타입의 작업부하에 대해(예를 들어, 머신 러닝 작업부하에서의 시냅스 가중(synapse weight)들의 저장에 대해), 사전(308A)의 엔트리들은 제2 세트의 값들로 초기화될 수 있다(여기서, 제2 세트의 적어도 하나의 값은 제1 세트의 대응하는 값과 상이하다). 따라서, 엔트리들은 특정 타입의 작업부하에 대해 처리되는 데이터 요소들의 지수들과 매칭될 가능성이 가장 큰 값들에 초기화될 수 있다. 애플리케이션 특정적 값들에 의한 사전 엔트리들의 초기화는, 특히 비교적 소수의 압축되지 않은 데이터 블록들(예를 들어, 2, 4, 8, 등)을 갖는 데이터 시리즈에 대해 압축비를 개선할 수 있는데, 그 이유는 그러한 경우에 사전(308A)은 데이터 시리즈의 공통적으로 발생하는 지수들에 의해 준비(primed)되기에 충분한 시간을 갖지 못하기 때문이다(사전(308A)의 업데이트는 더 상세하게 후술된다). 더 큰 사전들을 이용하는 압축 스킴들은 더 작은 사전들보다 최적의 초기화로부터 더 이익을 얻을 수 있다.
또 다른 실시예에서, 사전(308A)의 초기화에 사용되는 값들은 지수들의 발생률(incidence rate)에 기초하여 프로세서(100)의 동작 동안 업데이트된다. 예를 들어, 압축 엔진(108)은 다중 데이터 시리즈에 걸쳐 다양한 지수들에 대한 카운트들의 히스토그램을 업데이트하는 성능 모니터를 포함할 수 있다. 초기화가 수행될 때, 가장 빈번하게 발생하는 지수들이 사전의 엔트리들을 초기화하는 데 사용될 수 있다. 다양한 실시예들에서, 히스토그램은 가장 최근의 시간 간격에 걸쳐 가장 빈번하게 발생하는 지수들이 초기화를 위해 사용되는 것을 보장하기 위해 주기적으로 리셋될 수 있다. 일부 실시예들에서, 복수의 상이한 타입의 작업부하 각각에 대해 별개의 히스토그램이 유지될 수 있고, 사전(308A)의 엔트리들은 압축될 데이터 시리즈와 연관되는 작업부하에 대응하는 히스토그램에 기초하여 초기화될 수 있다.
사전(308A)은 데이터 시리즈의 데이터 블록들(200)이 압축 엔진(108)에 의해 처리됨에 따라 엔트리 업데이터(310A)에 의해 업데이트될 수 있다. 각각의 데이터 요소 후에 사전 업데이트가 일어나도록 다양한 종래의 압축 스킴들이 정의되지만, 이것은 데이터 요소들 모두가 병렬로 압축되어야 하는 경우에 설계를 복잡하게 하는데, 그 이유는 업데이트 로직이 사전 엔트리들에 대한 가장 최신의 현재 값들을 찾기 위해 실행 중인 모든 레인마다에서 모든 데이터 요소들마다 체크해야만 하기 때문이다. 본 개시내용의 특정 실시예에서, 사전(308A)의 엔트리들은 데이터 시리즈의 다음 블록(200)에 대해 현재 블록(200)에 기초하여 업데이트된다(따라서, 특정 블록에 대해 사용되는 사전은 이전 블록의 내용들에 기초할 수 있다). 이러한 실시예는 블록의 데이터 요소들 중의 시리얼 의존성을 회피하고, 임의 수의 데이터 요소들(예를 들어, 모든 데이터 요소들)이 압축기(302)에 의해 병렬로 압축되도록 허용한다(예를 들어, 각각의 데이터 요소에 대한 태그 결정들은 인코더(306)에 의해 동시에 수행될 수 있다).
2개-엔트리 사전을 포함하는 특정 실시예에서, 사전의 2개의 엔트리 각각은 대응하는 LSB를 갖는 마지막 가능한 지수(즉, 데이터 블록(200) 내의 최고 인덱스를 갖는 데이터 요소(202)의 지수)의 값을 취할 수 있다. 예를 들어, 압축될 16개의 데이터 요소(202) 및 데이터 요소 12(DE12)에 대해 10101, DE13에 대해 10001, DE14에 대해 10100; 및 DE15에 대해 10000의 지수 비트들을 갖는 데이터 블록(200)에 있어서, 사전의 (0의 LSB에 대응하는) 제1 엔트리는 10000으로 업데이트될 것이고, 사전의 (1의 LSB에 대응하는) 제2 엔트리는 10001로 업데이트될 것이다. 따라서, 매칭 LSB를 갖는 가장 최근의 지수는 사전(308A)의 대응하는 엔트리를 업데이트하는데 사용된다. 다른 실시예들에서, 대응하는 LSB들과 매칭되는 지수들을 갖는 데이터 요소들을 갖는 데이터 블록(200)에서의 최저 인덱스들이 최고 인덱스들 대신에 업데이트를 위해 사용될 수 있다.
다양한 실시예들에서, 사전 업데이트 동작은 제로 값 데이터 요소들(즉, 지수 및 가수 비트들이 모두 0인 데이터 요소들)을 무시하고, 따라서 entry0은 하나 이상의 제로 값 데이터 요소에 기초하여 "00000"으로 업데이트되지 않는다(그러나 모두 0인 지수 비트들 및 0이 아닌 적어도 하나의 가수 비트를 갖는 하나 이상의 데이터 요소에 기초하여 "00000"으로 업데이트될 수 있다). 특정 엔트리에 대한 업데이트 기준들에 들어맞는 지수들을 갖는 데이터 요소들이 없다면, 엔트리는 변경되지 않은 채로 남는다. 예를 들어, 데이터 요소들 중 어느 것도 1의 LSB를 갖는 지수를 갖지 않으면, entry1은 변경되지 않은 채로 남는다. 또 다른 예로서, 0이 아닌 값의 데이터 요소들 중 어느 것도 0의 LSB를 갖는 지수를 갖지 않으면, entry0은 변경되지 않은 채로 남는다. 따라서, 일부 데이터 블록들(200)에 대해, 사전(308A)의 단일 엔트리만이 업데이트될 수 있거나, 어떤 엔트리도 업데이트되지 않는다.
다른 실시예들에서, 사전 엔트리들은 임의의 적절한 방식으로 업데이트될 수 있다. 예를 들어, 블록(200)의 데이터 요소들(202)에서 각각의 지수가 발생하는 횟수가 카운트될 수 있고, 각각의 사전 엔트리에 대해, 적절한 LSB를 갖는 가장 빈번한 지수가 엔트리를 업데이트하는데 사용될 수 있다(즉, entry0은 0의 LSB를 갖는 가장 빈번한 지수로 업데이트될 수 있고, entry1은 1의 LSB를 갖는 가장 빈번한 지수로 업데이트될 수 있다).
다양한 실시예들에서, 사전(308A)은 M개의 블록마다 한번 업데이트되고, 여기서 M은 임의의 적절한 정수이다. 이것은 압축 하드웨어의 더 추가적인 병렬화를 허용한다. 이러한 실시예들에서, 사전(308A)은, 전술한 업데이트 스킴들 중 임의의 것 또는 다른 적절한 업데이트 스킴들에 따라, M개의 블록의 최종 블록(200), M개의 블록 중 하나 이상, 또는 모든 M개의 블록에 추가적인 이전 블록들을 더한 것의 내용들에 기초하여 업데이트될 수 있다.
압축해제기(304)는 메모리(112)로부터 판독된 압축된 블록(204)을 수신하고, 그 내용에 기초하여 대응하는 압축되지 않은 블록(200)을 생성하도록 동작가능하다. 디코더(312)는 압축된 블록(204)의 각각의 태그를 판독하고, 태그가 매칭 또는 압축되지 않은 데이터 요소를 나타내는 경우에 태그 및 연관된 정보(예를 들어, 사전 매칭 또는 압축되지 않은 데이터 요소의 압축되지 않은 부분)에 기초하여 대응하는 압축되지 않은 데이터 요소(202)를 생성할 수 있다. 사전 매칭들을 나타내는 태그들에 대해, 디코더(312)는 데이터 요소에 대한 지수 값을 획득하기 위해 사전(308B)의 엔트리에 액세스할 수 있다. 엔트리 업데이터(310B)는 엔트리 업데이터(310A)와 동일한 방식으로 사전(308B)의 엔트리들을 초기화 및 업데이트할 수 있다. 특정 실시예에서, 데이터는, 디코딩 동안 정확한 사전 엔트리들이 사용되는 것을 보장하기 위해서 데이터가 기입된 순서와 동일한 순서로 판독될 수 있다. 압축된 블록을 위해 사용하기 위해 사전 엔트리들을 업데이트하기 위한 임의의 다른 적절한 방법들이 사용될 수 있다.
도 4는 특정 실시예들에 따라 2개의 채널(402)(예를 들어, 402A 및 402B)상으로의 기입 데이터의 압축 및 배치를 도시한다. 채널들(402)은 메모리 제어기(110)를 메모리(112)에 결합할 수 있다. 특정 실시예에서, 각각의 채널은 메모리(112)의 상이한 뱅크에 결합될 수 있다. 다양한 실시예들에서, 캐시 라인 아키텍처는 프로세서(100)에 의해 사용될 수 있으며, 여기서 각각의 데이터 블록(200)은 캐시 라인(예를 들어, 32 바이트 또는 64 바이트)을 포함한다.
기입 데이터의 각각의 데이터 블록(200)은 그 어드레스와 함께 메모리(212)를 향해(예를 들어, 메모리 인터페이스(106)에 의해) 전송될 수 있다. 메모리(212)에 기입되기 전에, 각각의 데이터 블록(200)은 압축 엔진(108)에 의해 처리될 수 있다. 묘사된 실시예에서, 기입 데이터는 어드레스 A와 연관된 데이터 블록(200A), 어드레스 B와 연관된 데이터 블록(200B), 어드레스 C와 연관된 데이터 블록(200C), 어드레스 D와 연관된 데이터 블록(200D)을 포함한다. 데이터 블록들(200)은 2개의 똑같은 크기의 부분을 갖는 것으로 도시되어 있다. 예를 들어, 데이터 블록(200A)은 제1 부분 DATAA0 및 제2 부분 DATAA1을 포함한다. 예로서, 제1 부분은 블록(200A)의 데이터 요소들(202)의 절반을 포함할 수 있는 한편, 제2 부분은 블록의 데이터 요소들(202)의 다른 절반을 포함할 수 있다. 블록(200A)이 압축 엔진(108)에 의해 압축되지 않는 경우(또는 충분한 압축비가 실현되지 않는 경우), 블록(200A)의 데이터는 양 채널(402A 및 402B)을 이용하여 전송되는데, DATAA1은 제1 채널(402A)을 통해 전송되고, DATAA0은 제2 채널(402B)을 통해 전송된다(데이터 블록(200D)은 유사하게 처리된다). 그러나, 충분한 압축비(예를 들어, 50%)가 달성되면, 압축된 데이터 블록을 그 내에 저장하도록 메모리(112)에 전송하기 위해 단일 채널이 사용될 수 있다. 묘사된 예에서, 데이터 블록(200B) 및 데이터 블록(200C) 둘 다는 충분히 압축되어, 각각의 결과적 압축된 데이터 블록(즉, DATA'B 및 DATA'C이 단일 채널을 통해(예를 들어, 동시에) 전송되도록 한다. 일부 실시예들에서, 압축된 블록은 하나 이상의 주기 동안 유지될 수 있어서, 또 다른 압축된 블록이 또 다른 채널을 통해 전송되는 때와 동시에 한 채널을 통해 전송될 수 있도록 한다(따라서 압축되지 않은 블록들은 개재 주기들에서 채널 둘 다를 이용하여 전송될 수 있다).
다양한 실시예들에서, 해시 연산이, 블록이 어느 채널(402)상에서 전송될지를 결정하기 위해 압축된 블록(204)의 어드레스에 대해 메모리 제어기(110)에 의해 수행될 수 있다. 이러한 실시예들은 더 높은 처리량을 촉진하기 위해 채널들(402) 중에 압축된 블록들(204)을 균일하게 분포시킬 수 있다. 해시 연산은, 압축된 블록이 정확한 채널을 통해 및 정확한 메모리(112) 뱅크로부터 판독되는 것을 보장하기 위해 압축된 블록의 판독시에 메모리 제어기(110)에 의해 반복될 수 있다.
도 5는 특정 실시예들에 따라 데이터를 압축하기 위한 흐름을 도시한다. 다양한 실시예들에서, 흐름은 압축 엔진(108) 및/또는 회로를 포함하는 다른 적절한 로직에 의해 수행될 수 있다.
502에서, 압축되지 않은 데이터 블록(200)의 데이터 요소(202)가 액세스된다. 504에서, 데이터 요소가 제로 값인지에 관한 결정이 이루어진다. 데이터 요소가 제로 값인 경우, 제로 값 데이터 요소에 대응하는 태그 값이 506에서 설정되고, 태그가 508에서 출력에 더해진다. 데이터 요소가 제로가 아닌 경우, 510에서 데이터 요소의 지수 값에 기초하여 사전 인덱스가 결정된다. 512에서, 인덱스에 대응하는 사전의 엔트리가 데이터 요소(202)의 지수와 매칭되는지에 대한 결정이 이루어진다. 매칭되는 경우, 514에서 사전 인덱스에 대응하는 태그 값이 설정된다. 516에서, 데이터 요소의 부호 비트 및 가수 비트들과 함께 이 태그 값이 출력에 더해진다. 인덱스에 대응하는 사전의 엔트리가 데이터 요소(202)의 지수와 매칭되지 않는 경우, 518에서 매칭되지 않음을 나타내는 태그 값이 설정된다. 520에서, 태그 및 데이터 요소(202)가 출력에 더해진다.
도 6은 특정 실시예들에 따라 압축된 데이터를 판독하기 위한 흐름을 도시한다. 다양한 실시예들에서, 흐름은 압축 엔진(108), 메모리 제어기(110), 압축 엔진(108)과 메모리 제어기(110)의 조합, 및/또는 회로를 포함하는 다른 적절한 로직에 의해 수행될 수 있다.
602에서, 캐시 라인 어드레스를 갖는 판독 요청이 수신된다(예를 들어, L1 캐시 또는 L2 캐시 등의 하위 레벨 캐시에서의 미스 후에). 604에서, 캐시 라인이 (예를 들어, 압축 플래그(114)에 기초하여) 메모리(112)에 압축된 방식으로 저장되는지에 대한 결정이 이루어진다. 캐시 라인이 압축되지 않은 경우, 캐시 라인은 정상 방식으로 메모리(606)로부터 판독된다. 604에서 캐시 라인이 압축된 경우, 캐시 라인 어드레스는 608에서 해싱되어 어느 채널로부터 압축된 캐시 라인을 판독할지를 결정할 수 있다. 610에서, 압축된 캐시 라인이 선택된 채널을 통해 메모리로부터 판독된다. 612에서, 캐시 라인이 압축해제된다.
도 4 내지 도 6에 설명된 흐름들은 특정 실시예들에서 일어날 수 있는 동작들을 나타낸 것에 불과하다. 다른 실시예들에서, 추가적인 동작들이 수행될 수 있다. 본 개시내용의 다양한 실시예들은 본 명세서에 설명되는 기능들을 달성하기 위한 임의의 적절한 시그널링 메커니즘들을 상정하고 있다. 도 4 내지 도 6에 도시된 동작들 중 일부는 적절한 경우에 반복되거나, 조합되거나, 수정되거나, 생략될 수 있다. 덧붙여서, 동작들은, 특정 실시예들의 범위를 벗어나지 않으면서 임의의 적절한 순서로 수행될 수 있다. 일 예로서, 동작들(504, 510, 512) 중 2개 이상이 일부 실시예들에서 동시에 수행될 수 있다.
이하의 도면들은 위의 실시예들을 구현하기 위한 예시적인 아키텍처들 및 시스템들을 상세히 설명한다. 예를 들어, 압축 엔진(108)은 아래에 도시된 프로세서들 또는 시스템들 중 임의의 것 내에 포함되거나 그에 결합될 수 있다. 일부 실시예들에서, 위에서 설명된 하나 이상의 하드웨어 컴포넌트 및/또는 명령어는 후술하는 바와 같이 에뮬레이트되거나, 소프트웨어 모듈들로서 구현된다.
도 7은 특정 실시예들에 따른 FGPA(field programmable gate array)(700)를 도시한다. 특정 실시예에서, 압축 엔진(108)은 FPGA(700)에 의해 구현될 수 있다(예를 들어, 압축 엔진(108)의 기능성은 동작 로직(704)의 회로에 의해 구현될 수 있다). FPGA는 구성가능 로직을 포함하는 반도체 디바이스일 수 있다. FPGA는 FPGA의 로직이 어떻게 구성되는지를 정의하는 임의의 적절한 포맷을 갖는 데이터 구조(예를 들어, 비트스트림)를 통해 프로그래밍될 수 있다. FPGA는 FPGA가 제조된 후에 임의의 횟수만큼 재프로그래밍될 수 있다.
묘사된 실시예에서, FPGA(700)는 구성가능 로직(702), 동작 로직(704), 통신 제어기(706), 및 메모리 제어기(710)를 포함한다. 구성가능 로직(702)은 하나 이상의 커널을 구현하도록 프로그래밍될 수 있다. 커널은 하나 이상의 입력의 세트를 수신하고, 구성된 로직을 이용하여 입력들의 세트를 처리하고, 하나 이상의 출력의 세트를 제공할 수 있는 구성된 FPGA 로직을 포함할 수 있다. 커널은 임의의 적절한 타입의 처리를 수행할 수 있다. 다양한 실시예들에서, 커널은 프리픽스 디코더 엔진을 포함할 수 있다. 일부 FPGA(700)는 한 번에 단일 커널을 실행하는 것으로 제한될 수 있는 반면, 다른 FPGA들은 동시에 다중 커널을 실행할 수 있다. 구성가능 로직(702)은 임의의 적절한 타입의 로직 게이트들(예를 들어, AND 게이트들, XOR 게이트들) 또는 로직 게이트들의 조합들(예를 들어, 플립 플롭들, 룩업 테이블들, 가산기들, 승산기들, 멀티플렉서들, 디멀티플렉서들 등)과 같은 임의의 적절한 로직을 포함할 수 있다. 일부 실시예들에서, 로직은 FPGA의 로직 컴포넌트들 사이의 프로그래머블 인터커넥트들을 통해 (적어도 부분적으로) 구성된다.
동작 로직(704)은 커널을 정의하는 데이터 구조에 액세스하고, 데이터 구조에 기초하여 구성가능 로직(702)을 구성하고, FPGA의 다른 동작들을 수행할 수 있다. 일부 실시예들에서, 동작 로직(704)은 데이터 구조에 기초하여 FPGA(700)의 메모리(예를 들어, 비휘발성 플래시 메모리 또는 SRAM 기반 메모리)에 제어 비트들을 기입할 수 있고, 여기서 제어 비트들은 (예를 들어, 구성가능 로직의 부분들 사이의 특정 인터커넥트들을 활성화 또는 비활성화함으로써) 로직을 구성하도록 동작한다. 동작 로직(704)은 임의의 적절한 타입의 메모리(예를 들어, 랜덤 액세스 메모리(RAM)), 하나 이상의 송수신기, 클로킹 회로, FPGA에 위치한 하나 이상의 프로세서, 하나 이상의 제어기 또는 다른 적절한 로직을 포함하는 하나 이상의 메모리 디바이스와 같은, (구성가능 로직 또는 고정 로직으로 구현될 수 있는) 임의의 적절한 로직을 포함할 수 있다.
통신 제어기(706)는 FPGA(700)가 (예를 들어, 데이터 세트들을 압축하라는 커맨드들을 수신하기 위해) 컴퓨터 시스템의 다른 컴포넌트들(예를 들어, 압축 엔진)과 통신하는 것을 가능하게 할 수 있다. 메모리 제어기(710)는 FPGA가 컴퓨터 시스템의 메모리로부터 데이터를 판독하거나(예를 들어, 피연산자들 또는 결과들) 거기에 데이터를 기입하는 것을 가능하게 할 수 있다. 다양한 실시예들에서, 메모리 제어기(710)는 DMA(direct memory access) 제어기를 포함할 수 있다.
프로세서 코어들은 상이한 방식으로, 상이한 목적을 위해, 그리고 상이한 프로세서들에서 구현될 수 있다. 예를 들어, 이러한 코어들의 구현들은: 1) 범용 컴퓨팅을 위해 의도된 범용 순차적 코어; 2) 범용 컴퓨팅을 위해 의도된 고성능 범용 비순차적 코어; 3) 주로 그래픽 및/또는 과학(스루풋) 컴퓨팅을 위해 의도된 특수 목적 코어를 포함할 수 있다. 상이한 프로세서들의 구현들은: 1) 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 순차적 코어들 및/또는 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 비순차적 코어들을 포함하는 CPU; 및 2) 주로 그래픽 및/또는 과학(스루풋)을 위해 의도된 하나 이상의 특수 목적 코어를 포함하는 코프로세서를 포함할 수 있다. 이러한 상이한 프로세서들은 상이한 컴퓨터 시스템 아키텍처들로 이끌 수 있는데, 이는: 1) CPU와 별개의 칩상의 코프로세서; 2) CPU와 동일한 패키지 내의 별개의 다이상의 코프로세서; 3) CPU와 동일한 다이상의 코프로세서(이 경우에, 이러한 코프로세서는 때때로 통합 그래픽 및/또는 과학(스루풋) 로직과 같은 특수 목적 로직으로서, 또는 특수 목적 코어들로서 지칭됨); 및 4) 설명된 CPU(때때로 애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)라고 지칭됨), 상술된 코프로세서, 및 추가적인 기능성을 동일한 다이상에 포함할 수 있는 SoC(system on a chip)을 포함할 수 있다. 예시적인 코어 아키텍처들이 다음에 설명되고, 이어서 예시적인 프로세서들 및 컴퓨터 아키텍처들에 대한 설명이 따라온다.
도 8a는 본 개시내용의 실시예들에 따른 예시적인 순차적 파이프라인 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 파이프라인의 양쪽 모두를 예시하는 블록도이다. 도 8b는 본 개시내용의 실시예들에 따른 프로세서에 포함되는 순차적 아키텍처 코어와 예시적인 레지스터 리네이밍, 비순차적 발행/실행 아키텍처 코어의 예시적인 실시예 양쪽 모두를 예시하는 블록도이다. 도 8a 및 도 8b의 실선 박스들은 순차적 파이프라인 및 순차적 코어를 예시하는 한편, 점선 박스들의 선택적 추가는 레지스터 리네이밍, 비순차적 발행/실행 파이프라인 및 코어를 예시한다. 순차적 양태가 비순차적 양태의 서브세트라는 점을 고려하여, 비순차적 양태가 설명될 것이다.
도 8a에서, 프로세서 파이프라인(800)은 페치 스테이지(802), 길이 디코드 스테이지(804), 디코드 스테이지(806), 할당 스테이지(808), 리네이밍 스테이지(810), 스케줄링(디스패치 또는 발행으로도 알려짐) 스테이지(812), 레지스터 판독/메모리 판독 스테이지(814), 실행 스테이지(816), 라이트백/메모리 기입 스테이지(818), 예외 핸들링 스테이지(822), 및 커밋 스테이지(824)를 포함한다.
도 8b는 실행 엔진 유닛(850)에 결합된 프론트 엔드 유닛(830)을 포함하는 프로세서 코어(890)를 도시하고, 이들 양자는 메모리 유닛(870)에 결합된다. 코어(890)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 또는 대안의 코어 타입일 수 있다. 또 다른 옵션으로서, 코어(890)는 예를 들어, 네트워크 또는 통신 코어, 압축 및/또는 압축해제 엔진, 코프로세서 코어, GPGPU(general purpose computing graphics processing unit) 코어, 그래픽 코어, 또는 그와 유사한 것과 같은 특수 목적 코어일 수 있다.
프론트 엔드 유닛(830)은 명령어 캐시 유닛(834)에 결합된 분기 예측 유닛(832)을 포함하고, 이 명령어 캐시 유닛은 명령어 TLB(translation lookaside buffer)(836)에 결합되고, 이 명령어 TLB는 명령어 페치 유닛(838)에 결합되고, 이 명령어 페치 유닛은 디코딩 유닛(840)에 결합된다. 디코드 유닛(840)(또는 디코더)은 명령어들을 디코딩할 수 있으며, 원래의 명령어들로부터 디코딩되거나, 또는 그렇지 않으면 이들을 반영하거나, 또는 이들로부터 유도되는, 하나 이상의 마이크로-연산들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들 또는 다른 제어 신호들을 출력으로서 생성할 수 있다. 디코드 유닛(840)은 다양한 상이한 메커니즘들을 이용하여 구현될 수 있다. 적절한 메커니즘들의 예들은, 룩업 테이블들, 하드웨어 구현들, PLA들(programmable logic arrays), 마이크로코드 ROM들(read only memories) 등을 포함하지만, 이것들에만 제한되는 것은 아니다. 일 실시예에서, 코어(890)는 마이크로코드 ROM 또는(예를 들어, 디코드 유닛(840)에서 또는 다르게는 프론트 엔드 유닛(830) 내에서) 특정 매크로 명령어들을 위한 마이크로코드를 저장하는 다른 매체를 포함한다. 디코드 유닛(840)은 실행 엔진 유닛(850)에서의 리네임/할당기 유닛(852)에 결합된다.
실행 엔진 유닛(850)은 리타이어먼트 유닛(854) 및 하나 이상의 스케줄러 유닛(들)(856)의 세트에 결합되는 리네임/할당기 유닛(852)을 포함한다. 스케줄러 유닛(들)(856)은 예약 스테이션들, 중앙 명령어 윈도, 기타 등등을 포함하는 임의 개수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(856)은 물리적 레지스터 파일(들) 유닛(들)(858)에 결합된다. 물리적 레지스터 파일(들) 유닛들(858)의 각각은 하나 이상의 물리적 레지스터 파일을 나타내고, 이들 중 상이한 것들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점, 상태(예를 들어, 실행될 다음 차례의 명령어의 어드레스인 명령어 포인터), 기타 등등과 같은 하나 이상의 상이한 데이터 타입들을 저장한다. 일 실시예에서, 물리적 레지스터 파일(들)(858)은 벡터 레지스터 유닛, 기입 마스크 레지스터 유닛, 및 스칼라 레지스터 유닛을 포함한다. 이들 레지스터 유닛들은 아키텍처 벡터 레지스터들, 벡터 마스크 레지스터들, 및 범용 레지스터들을 제공할 수 있다. 물리적 레지스터 파일(들) 유닛(들)(858)은 레지스터 리네이밍 및 비순차적 실행이(예를 들어, 리오더 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 이용하여; 장래 파일(들), 이력 버퍼(들), 및 리타이어먼트 레지스터 파일(들)을 이용하여; 레지스터 맵들 및 레지스터들의 풀을 이용하는 등으로) 구현될 수 있는 다양한 방식을 예시하기 위해 리타이어먼트 유닛(854)에 의해 오버랩된다. 리타이어먼트 유닛(854) 및 물리적 레지스터 파일(들) 유닛(들)(858)은 실행 클러스터(들)(860)에 결합된다. 실행 클러스터(들)(860)는 하나 이상의 실행 유닛(862)의 세트 및 하나 이상의 메모리 액세스 유닛(864)의 세트를 포함한다. 실행 유닛들(862)은 다양한 타입의 데이터(예를 들어, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예를 들어, 시프트, 가산, 제산, 승산)을 수행할 수 있다. 일부 실시예들은 특정 기능들이나 기능들의 세트들에 전용되는 다수의 실행 유닛을 포함할 수 있지만, 다른 실시예들은 하나의 실행 유닛, 또는 모두가 모든 기능들을 수행하는 다중 실행 유닛을 포함할 수 있다. 스케줄러 유닛(들)(856), 물리적 레지스터 파일(들) 유닛(들)(858), 및 실행 클러스터(들)(860)는 가능하게는 복수인 것으로 도시되는데, 그 이유는 특정 실시예들은 특정 타입들의 데이터/연산들에 대해 개별 파이프라인들(예를 들어, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 각각이 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는 메모리 액세스 파이프라인-개별 메모리 액세스 파이프라인의 경우에, 이러한 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(864)을 갖는 특정 실시예들이 구현됨)을 생성할 수 있기 때문이다. 별개의 파이프라인들이 사용되는 경우, 이 파이프라인들 중 하나 이상은 비순차적 발행/실행일 수 있고 나머지는 순차적일 수 있다는 점도 이해해야 한다.
메모리 액세스 유닛들(864)의 세트는 메모리 유닛(870)에 결합되고, 이 메모리 유닛은 레벨 2(L2) 캐시 유닛(876)에 결합되는 데이터 캐시 유닛(874)에 결합되는 데이터 TLB 유닛(872)을 포함한다. 하나의 예시적인 실시예에서, 메모리 액세스 유닛들(864)은 로드 유닛(load unit), 스토어 어드레스 유닛(store address unit) 및 스토어 데이터 유닛(store data unit)을 포함할 수 있으며, 이들 각각은 메모리 유닛(870)에서의 데이터 TLB 유닛(872)에 결합된다. 명령어 캐시 유닛(834)은 메모리 유닛(870)에서의 레벨 2(L2) 캐시 유닛(876)에 또한 결합된다. L2 캐시 유닛(876)은 하나 이상의 다른 레벨의 캐시 및 최종적으로 메인 메모리에 결합된다.
예를 들어, 예시적인 레지스터 리네이밍, 비순차적 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(800)을 구현할 수 있다: 1) 명령어 페치(838)가 페치 및 길이 디코딩 스테이지들(802 및 804)을 수행한다; 2) 디코딩 유닛(840)이 디코딩 스테이지(806)를 수행한다; 3) 리네임/할당기 유닛(852)이 할당 스테이지(808) 및 리네이밍 스테이지(810)를 수행한다; 4) 스케줄러 유닛(들)(856)이 스케줄링 스테이지(812)를 수행한다; 5) 물리적 레지스터 파일(들) 유닛(들)(858) 및 메모리 유닛(870)이 레지스터 판독/메모리 판독 스테이지(814)를 수행한다; 실행 클러스터(860)가 실행 스테이지(816)를 수행한다; 6) 메모리 유닛(870) 및 물리적 레지스터 파일(들) 유닛(들)(858)이 라이트백/메모리 기입 스테이지(818)를 수행한다; 7) 다양한 유닛들이 예외 핸들링 스테이지(822)에 관련될 수 있다; 및 8) 리타이어먼트 유닛(854) 및 물리적 레지스터 파일(들) 유닛(들)(858)이 커밋 스테이지(824)를 수행한다.
코어(890)는 본 명세서에 설명된 명령어(들)를 포함하여, 하나 이상의 명령어 세트(예를 들어, 새로운 버전이 추가된 일부 확장을 갖는 x86 명령어 세트); 캘리포니아, 서니베일의 MIPS Technologies사의 MIPS 명령어 세트; 캘리포니아, 서니베일의 ARM Holdings의(NEON과 같은 선택적 추가적 확장을 갖는) ARM 명령어 세트를 지원할 수 있다. 일 실시예에서, 코어(890)는 패킹된 데이터 명령어 세트 확장(예를 들어, AVX1, AVX2)을 지원하는 로직을 포함하며, 그에 의해 많은 멀티미디어 애플리케이션들에 의해 사용되는 연산들이 패킹된 데이터를 사용하여 수행되는 것을 허용한다.
코어가 (연산들 또는 스레드들의 2개 이상의 병렬 세트들을 실행하는) 멀티스레딩을 지원할 수 있고, 시간 슬라이스된 멀티스레딩, 동시 멀티스레딩을 포함하는 다양한 방식들로 (이러한 경우 단일 물리 코어는 물리 코어가 동시에 멀티스레딩하는 스레드들 각각에 대해 논리적 코어를 제공함), 또는 이들의 조합(예를 들어, Intel®Hyperthreading technology에서와 같은 시간 슬라이스된 페칭 및 그 후의 디코딩 및 동시 멀티스레딩)을 지원할 수 있다는 점을 이해해야 한다.
레지스터 리네이밍이 비순차적 실행의 맥락에서 설명되었지만, 레지스터 리네이밍은 순차적 아키텍처에서 사용될 수도 있다는 점을 이해해야 한다. 프로세서의 예시된 실시예가 또한 개별적인 명령어 및 데이터 캐시 유닛들(834/874) 및 공유 L2 캐시 유닛(876)을 포함하고 있지만, 대안적 실시예들은, 예를 들어 레벨 1(L1) 내부 캐시, 또는 다중 레벨의 내부 캐시와 같은, 명령어들 및 데이터 둘 다에 대한 단일의 내부 캐시를 가질 수 있다. 일부 실시예들에서, 시스템은 내부 캐시와, 코어 및/또는 프로세서에 대해 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 대안적으로, 모든 캐시는 코어 및/또는 프로세서에 대해 외부에 있을 수 있다.
도 9a 및 도 9b는 더 특정적이고 예시적인 순차적 코어 아키텍처의 블록도를 예시하는데, 이 코어는 칩 내의(동일 유형 및/또는 상이한 유형들의 다른 코어들을 포함하는) 여러 개의 로직 블록들 중 하나일 것이다. 로직 블록들은 애플리케이션에 의존하여, 일부 고정된 기능 로직, 메모리 I/O 인터페이스들, 및 다른 필요한 I/O 로직을 갖는 고 대역폭 인터커넥트 네트워크(예를 들어, 링 네트워크)를 통해 통신한다.
도 9a는 다양한 실시예들에 따른, 단일 프로세서 코어를, 온-다이 인터커넥트 네트워크(902)로의 그의 연결 및 레벨 2(L2) 캐시의 그의 로컬 서브세트(904)와 함께 나타낸 블록도이다. 일 실시예에서, 명령어 디코더(900)는 패킹된 데이터 명령어 세트 확장을 갖는 x86 명령어 세트를 지원한다. L1 캐시(906)는 캐시 메모리의 스칼라 및 벡터 유닛들로의 저 레이턴시 액세스들을 허용한다. (설계를 단순화하기 위해) 일 실시예에서 스칼라 유닛(908) 및 벡터 유닛(910)이 별개의 레지스터 세트들(제각기, 스칼라 레지스터들(912) 및 벡터 레지스터들(914))을 이용하고, 이들 사이에서 전달되는 데이터는 메모리에 기입된 다음, 레벨 1(L1) 캐시(906)로부터 되돌려 판독되지만, 대안적인 실시예들은 상이한 접근법을 이용할 수 있다(예를 들어, 단일의 레지스터 세트를 이용하거나, 또는 기입 및 되돌려 판독되지 않고 2개의 레지스터 파일 사이에서 데이터가 전달되는 것을 허용하는 통신 경로를 포함함).
L2 캐시의 로컬 서브세트(904)는 프로세서 코어당 하나씩 별개의 로컬 서브세트들로 분할되는 글로벌 L2 캐시의 일부이다. 각각의 프로세서 코어는 L2 캐시의 그 자신의 로컬 서브세트(904)에 대한 직접 액세스 경로를 갖는다. 프로세서 코어에 의해 판독되는 데이터는 그 L2 캐시 서브세트(904)에 저장되며, 다른 프로세서 코어들이 그들 자신의 로컬 L2 캐시 서브세트들에 액세스하는 것과 병렬로 빠르게 액세스될 수 있다. 프로세서 코어에 의해 기입된 데이터는 그 자신의 L2 캐시 서브세트(904)에 저장되고, 필요한 경우 다른 서브세트들로부터 플러싱된다. 링 네트워크는 공유 데이터에 대한 일관성(coherency)을 보장한다. 링 네트워크는 양방향성이어서, 프로세서 코어들, L2 캐시들 및 다른 로직 블록들과 같은 에이전트들이 칩 내에서 서로 통신하는 것을 허용한다. 특정 실시예에서, 각각의 링 데이터 경로는 방향당 1012 비트 폭이다.
도 9b는 실시예들에 따른 도 9a의 프로세서 코어의 일부의 확대도이다. 도 9b는 (L1 캐시(906)의 일부인) L1 데이터 캐시(906A) 뿐만 아니라, 벡터 유닛(910) 및 벡터 레지스터들(914)에 관한 더 상세한 사항을 포함한다. 구체적으로, 벡터 유닛(910)은 정수, 단정도 부동 소수점, 및 배정도 부동 소수점 명령어들 중 하나 이상을 실행하는 16 폭(16-wide) 벡터 처리 유닛(VPU)(16 폭 ALU(928)를 참조)이다. VPU는 스위즐 유닛(swizzle unit)(920)을 이용하는 레지스터 입력들의 스위즐링, 수치 변환 유닛들(922A-B)을 이용하는 수치 변환, 및 메모리 입력에 대한 복제 유닛(924)을 이용하는 복제를 지원한다. 기입 마스크 레지스터들(926)은 결과적인 벡터 기입들을 서술(predicating)하는 것을 허용한다.
도 10은 다양한 실시예들에 따라, 둘 이상의 코어를 가질 수 있고, 통합 메모리 제어기를 가질 수 있고, 통합 그래픽을 가질 수 있는 프로세서(1000)의 블록도이다. 도 10에서의 실선 박스들은 싱글 코어(1002A), 시스템 에이전트(1010), 및 하나 이상의 버스 제어기 유닛(1016)의 세트를 갖는 프로세서(1000)를 도시하는 한편; 파선 박스들의 선택적인 추가는 다중 코어(1002A-N), 시스템 에이전트 유닛(1010)에서의 하나 이상의 통합 메모리 제어기 유닛(들)(1014)의 세트, 및 특수 목적 로직(1008)을 갖는 대안 프로세서(1000)를 도시하고 있다.
따라서, 프로세서(1000)의 상이한 구현은 다음을 포함할 수 있다: 1) 통합된 그래픽 및/또는 과학(스루풋) 로직(이것은 하나 이상의 코어를 포함할 수 있음)인 특수 목적 로직(1008)을 구비한 CPU, 및 하나 이상의 범용 코어들(예를 들어, 범용 순차적 코어들, 범용 비순차적 코어들, 이 둘의 조합)인 코어들(1002A-N); 2) 그래픽 및/또는 과학(스루풋)을 위해 주로 의도된 수많은 수의 특수 목적 코어들인 코어들(1002A-N)을 갖는 코프로세서; 및 3) 수많은 범용 순차적 코어들인 코어들(1002A-N)을 갖는 코프로세서. 따라서, 프로세서(1000)는 범용 프로세서, 코프로세서 또는 특수 목적 프로세서, 예를 들어 네트워크 또는 통신 프로세서, 압축 및/또는 압축해제 엔진, 그래픽 프로세서, GPGPU(General Purpose Graphics Processing Unit), 고 스루풋 MIC(Many Integrated Core) 코프로세서(예를 들어, 30개 이상의 코어를 포함함), 임베디드 프로세서, 또는 논리 연산들을 수행하는 다른 고정 또는 구성가능 로직일 수 있다. 프로세서는 하나 이상의 칩상에 구현될 수 있다. 프로세서(1000)는, 예를 들어 BiCMOS, CMOS, 또는 NMOS와 같은 다수의 프로세스 기술 중 임의의 것을 사용하여 하나 이상의 기판상에 구현될 수 있고/있거나 그 일부일 수 있다.
다양한 실시예들에서, 프로세서는 대칭 또는 비대칭일 수 있는 임의의 수의 처리 요소들을 포함할 수 있다. 일 실시예에서, 처리 요소는 소프트웨어 스레드를 지원하는 하드웨어 또는 로직을 지칭한다. 하드웨어 처리 요소들의 예들은: 스레드 유닛, 스레드 슬롯, 스레드, 프로세스 유닛, 컨텍스트, 컨텍스트 유닛, 논리 프로세서(logical processor), 하드웨어 스레드, 코어, 및/또는 실행 상태 또는 아키텍처 상태(architectural state)와 같은 프로세서에 대한 상태를 보유할 수 있는 임의의 다른 요소를 포함한다. 환언하면, 일 실시예에서, 처리 요소는, 소프트웨어 스레드, 운영 체제, 애플리케이션, 또는 기타 코드와 같은 코드와 독립적으로 연관될 수 있는 임의의 하드웨어를 지칭한다. 물리 프로세서(또는 프로세서 소켓)는 전형적으로, 잠재적으로 코어들 또는 하드웨어 스레드들과 같은 임의의 수의 다른 처리 요소들을 포함하는 집적 회로를 지칭한다.
코어는 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로상에 위치된 로직을 지칭할 수 있으며, 여기서 각각의 독립적으로 유지되는 아키텍처 상태는 적어도 일부 전용 실행 리소스들과 연관되어 있다. 하드웨어 스레드는 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로상에 위치된 임의의 로직을 지칭할 수 있으며, 여기서 독립적으로 유지되는 아키텍처 상태들은 실행 리소스들에의 액세스를 공유한다. 알 수 있는 바와 같이, 특정 리소스들이 공유되고 기타 리소스들은 아키텍처 상태에 전용일 때, 하드웨어 스레드의 명명법과 코어 사이의 경계가 중첩된다. 하지만 종종, 운영 체제는 코어 및 하드웨어 스레드를 개별적인 논리 프로세서들로 보며, 이 경우 운영 체제는 각각의 논리 프로세서상에서의 동작들을 개별적으로 스케줄링할 수 있다.
메모리 계층구조는, 코어들 내의 하나 이상의 레벨의 캐시, 하나 이상의 공유 캐시 유닛(1006)의 세트, 및 통합 메모리 제어기 유닛(1014)의 세트에 결합된 외부 메모리(도시되지 않음)를 포함한다. 공유 캐시 유닛들(1006)의 세트는 레벨 2(L2), 레벨 3(L3), 레벨 4(L4) 또는 다른 레벨 캐시와 같은 하나 이상의 중간 레벨 캐시, 최종 레벨 캐시(LLC)(last level cache), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서, 링 기반 인터커넥트 유닛(ring based interconnect unit)(1012)이 특수 목적 로직(예를 들어, 통합 그래픽 로직)(1008), 공유된 캐시 유닛들(1006)의 세트, 및 시스템 에이전트 유닛(1010)/통합 메모리 제어기 유닛(들)(1014)을 상호 접속시키는 반면, 대안적 실시예들은 이러한 유닛들을 상호 접속시키기 위해 임의의 수의 공지된 기술들을 사용할 수 있다. 일 실시예에서, 하나 이상의 캐시 유닛들(1006)과 코어들(1002A-N) 사이에 일관성이 유지된다.
일부 실시예들에서, 코어들(1002A-N) 중 하나 이상은 멀티스레딩이 가능하다. 시스템 에이전트(1010)는 코어(1002A-N)를 조정 및 동작시키는 그런 컴포넌트들을 포함한다. 시스템 에이전트 유닛(1010)은, 예를 들어 전력 제어 유닛(PCU)(power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(1002A-N) 및 특수 목적 로직(1008)의 전력 상태를 조절하는 데 필요한 로직 및 컴포넌트들이거나 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속된 디스플레이를 구동하기 위한 것이다.
코어들(1002A-N)은 아키텍처 명령어 세트의 관점에서 동종 또는 이종일 수 있는데; 즉 코어들(1002A-N) 중 둘 이상이 동일 명령어 세트를 실행할 수 있는 반면, 다른 코어들은 해당 명령어 세트의 서브세트만을 또는 상이한 명령어 세트를 실행할 수 있다.
도 11 내지 도 14는 예시적인 컴퓨터 아키텍처들의 블록도들이다. 랩톱들, 데스크톱들, 핸드헬드 PC들, 퍼스널 디지털 어시스턴트들, 엔지니어링 워크스테이션들, 서버들, 네트워크 디바이스들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, DSP들(digital signal processors), 그래픽 디바이스들, 비디오 게임 디바이스들, 셋톱박스들, 마이크로 제어기들, 이동 전화들, 휴대용 미디어 플레이어들, 핸드헬드 디바이스들, 및 다양한 다른 전자 디바이스들에 대해 본 기술분야에 알려진 다른 시스템 설계들 및 구성들도 본 개시내용에 설명된 방법들을 수행하는 데에 적합하다. 일반적으로, 본 명세서에 개시되는 바와 같은 프로세서 및/또는 다른 실행 로직을 통합할 수 있는 매우 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적합하다.
도 11은 본 개시내용의 일 실시예에 따른 시스템(1100)의 블록도를 묘사한다. 시스템(1100)은 제어기 허브(1120)에 결합되는 하나 이상의 프로세서(1110, 1115)를 포함할 수 있다. 일 실시예에서, 제어기 허브(1120)는 그래픽 메모리 제어기 허브(GMCH)(1190) 및 입력/출력 허브(IOH)(1150)(이는 별개의 칩들상에 또는 동일 칩상에 있을 수 있음)를 포함하고; GMCH(1190)는 메모리 및 메모리(1140)와 코프로세서(1145)에 결합된 그래픽 제어기들을 포함하고; IOH(1150)는 GMCH(1190)에 입력/출력(I/O) 디바이스들(1160)을 결합한다. 대안적으로, 메모리 및 그래픽 제어기들 중 하나 또는 양자 모두는 (본 명세서에 설명된 바와 같이) 프로세서 내에 통합되고, 메모리(1140) 및 코프로세서(1145)는 프로세서(1110)에 직접 결합되고, 제어기 허브(1120)는 IOH(1150)를 포함하는 단일 칩이다.
추가적인 프로세서들(1115)의 선택적 속성은 도 11에서 파선들로 표시되어 있다. 각각의 프로세서(1110, 1115)는 본 명세서에 설명된 처리 코어들 중 하나 이상을 포함할 수 있고, 프로세서(1000)의 몇몇 버전일 수 있다.
메모리(1140)는, 예를 들어, DRAM(dynamic random access memory), PCM(phase change memory), 다른 적절한 메모리, 또는 이들의 임의의 조합일 수 있다. 메모리(1140)는 컴퓨터 시스템(1100)의 기능성을 제공하기 위해 프로세서들(1110, 1115)에 의해 사용되는 데이터와 같은 임의의 적절한 데이터를 저장할 수 있다. 예를 들어, 실행되는 프로그램들 또는 프로세서들(1110, 1115)에 의해 액세스되는 파일들과 연관된 데이터가 메모리(1140)에 저장될 수 있다. 다양한 실시예들에서, 메모리(1140)는 프로세서들(1110, 1115)에 의해 사용되거나 실행되는 명령어들의 시퀀스 및/또는 데이터를 저장할 수 있다.
적어도 일 실시예에서, 제어기 허브(1120)는 프론트사이드 버스(FSB)와 같은 멀티 드롭 버스, QPI(QuickPath Interconnect)와 같은 포인트-투-포인트 인터페이스, 또는 유사한 연결(1195)을 통해 프로세서(들)(1110, 1115)와 통신한다.
일 실시예에서, 코프로세서(1145)는, 예를 들어 고 스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 및/또는 압축해제 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다. 일 실시예에서, 제어기 허브(1120)는 통합 그래픽 가속기를 포함할 수 있다.
아키텍처, 마이크로아키텍처, 열, 전력 소비 특성, 및 그와 유사한 것을 포함하여 이점에 대한 여러 기준들의 관점에서 물리적인 리소스들(1110, 1115) 간에 다양한 차이가 있을 수 있다.
일 실시예에서, 프로세서(1110)는 일반 타입의 데이터 처리 동작들을 제어하는 명령어들을 실행한다. 명령어들 내에는 코프로세서 명령어들이 임베디드될 수 있다. 프로세서(1110)는 이러한 코프로세서 명령어들을 부속된 코프로세서(1145)에 의해 실행되어야 하는 유형의 것으로 인식한다. 그에 따라서, 프로세서(1110)는 이러한 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서 버스 또는 다른 인터커넥트상에서 코프로세서(1145)에 발행한다. 코프로세서(들)(1145)는 수신된 코프로세서 명령어들을 접수하고 실행한다.
도 12는 본 개시내용의 실시예에 따른 제1의 더 특정한 예시적인 시스템(1200)의 블록도를 묘사한다. 도 12에 도시된 바와 같이, 멀티프로세서 시스템(1200)은 포인트-투-포인트 인터커넥트 시스템이고, 포인트-투-포인트 인터커넥트(1250)를 통해 결합된 제1 프로세서(1270) 및 제2 프로세서(1280)를 포함한다. 프로세서들(1270 및 1280) 각각은 프로세서(1000)의 몇몇 버전일 수 있다. 본 개시내용의 일 실시예에서, 프로세서들(1270 및 1280)은 제각기 프로세서들(1110 및 1115)인 한편, 코프로세서(1238)는 코프로세서(1145)이다. 또 다른 실시예에서, 프로세서(1270 및 1280)는 제각기 프로세서(1110), 코프로세서(1145)이다.
프로세서들(1270 및 1280)은 제각기 IMC(integrated memory controller) 유닛들(1272 및 1282)을 포함하는 것으로 도시되어 있다. 프로세서(1270)는 또한 그의 버스 제어기 유닛들의 일부로서 포인트-투-포인트(P-P) 인터페이스들(1276, 1278)을 포함하며; 유사하게 제2 프로세서(1280)는 P-P 인터페이스들(1286, 1288)을 포함한다. 프로세서들(1270, 1280)은 P-P 인터페이스 회로들(1278, 1288)을 이용하여 포인트-투-포인트(P-P) 인터페이스(1250)를 통해 정보를 교환할 수 있다. 도 12에 도시된 바와 같이, IMC들(1272 및 1282)은 프로세서들을, 제각기 프로세서들에 국지적으로 부속된 메인 메모리의 일부일 수 있는, 제각기 메모리들, 즉, 메모리(1232) 및 메모리(1234)에 결합한다.
프로세서들(1270, 1280) 각각은 포인트-투-포인트 인터페이스 회로들(1276, 1294, 1286, 1298)을 이용하여 개별 P-P 인터페이스들(1252, 1254)을 통해 칩셋(1290)과 정보를 교환할 수 있다. 칩셋(1290)은 선택적으로 고성능 인터페이스(1239)를 통해 코프로세서(1238)와 정보를 교환할 수 있다. 일 실시예에서, 코프로세서(1238)는, 예를 들어 고 스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 및/또는 압축해제 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다.
공유 캐시(도시되지 않음)는 어느 한 프로세서에 포함되거나, 양자 모두의 프로세서의 외부이지만 여전히 P-P 인터커넥트를 통해 프로세서들과 연결될 수 있어서, 프로세서가 저 전력 모드에 놓이는 경우 어느 한쪽 또는 양자 모두의 프로세서의 로컬 캐시 정보가 공유 캐시에 저장될 수 있도록 한다.
칩셋(1290)은 인터페이스(1296)를 통해 제1 버스(1216)에 결합될 수 있다. 일 실시예에서, 제1 버스(1216)는 PCI(Peripheral Component Interconnect) 버스이거나, 또는 PCI Express 버스 또는 또 다른 제3 세대 I/O 인터커넥트 버스와 같은 버스일 수 있지만, 본 개시내용의 범위는 이에 제한되지는 않는다.
도 12에 도시된 바와 같이, 다양한 I/O 디바이스들(1214)이, 제1 버스(1216)를 제2 버스(1220)에 결합하는 버스 브리지(1218)와 함께 제1 버스(1216)에 결합될 수 있다. 일 실시예에서, 코프로세서, 고 스루풋 MIC 프로세서, GPGPU, (예를 들어, 그래픽 가속기 또는 DSP(digital signal processing) 유닛과 같은) 가속기, 필드 프로그래머블 게이트 어레이, 또는 임의의 다른 프로세서와 같은 하나 이상의 추가적인 프로세서(들)(1215)가 제1 버스(1216)에 결합된다. 일 실시예에서, 제2 버스(1220)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 예를 들어 키보드 및/또는 마우스(1222), 통신 디바이스들(1227), 및 명령어들/코드 및 데이터(1230)를 포함할 수 있는 디스크 드라이브나 다른 대용량 저장 디바이스와 같은 저장 유닛(1228)을 포함하는 다양한 디바이스들이 제2 버스(1220)에 결합될 수 있다. 또한, 오디오 I/O(1224)가 제2 버스(1220)에 결합될 수 있다. 다른 아키텍처들이 본 개시내용에 의해 상정된다는 점에 유의한다. 예를 들어, 도 12의 포인트-투-포인트 아키텍처 대신에, 시스템은 멀티드롭 버스 또는 다른 그러한 아키텍처를 구현할 수 있다.
도 13은 본 개시내용의 실시예에 따른 제2의 보다 구체적인 예시적 시스템(1300)의 블록도를 묘사한다. 도 12 및 도 13에서의 유사한 요소들은 유사한 참조 번호들을 지니고, 도 12의 특정 양태들은 도 13의 다른 양태들을 모호하게 하는 것을 회피하기 위해 도 13으로부터 생략되었다.
도 13은 프로세서들(1270, 1280)이 통합 메모리 및 I/O 제어 로직("CL")(1272 및 1282)을 제각기 포함할 수 있다는 것을 도시한다. 따라서, CL(1272, 1282)은 통합 메모리 제어기 유닛들을 포함하고, I/O 제어 로직을 포함한다. 도 13은 메모리들(1232, 1234)이 CL(1272, 1282)에 결합될 뿐만아니라 I/O 디바이스들(1314)도 제어 로직(1272, 1282)에 결합되는 것을 도시한다. 레거시 I/O 디바이스들(1315)이 칩셋(1290)에 결합된다.
도 14는 본 개시내용의 실시예에 따른 SoC(1400)의 블록도를 묘사한다. 도 10에 있는 유사한 요소들은 동일한 참조 부호들을 지닌다. 또한, 파선 박스들은 더 진보된 SoC들에 대한 선택적인 특징들이다. 도 14에서, 인터커넥트 유닛(들)(1402)은 다음에 결합된다: 하나 이상의 코어들(1002A-N)의 세트 및 공유 캐시 유닛(들)(1006)을 포함하는 애플리케이션 프로세서(1410); 시스템 에이전트 유닛(1010); 버스 제어기 유닛(들)(1016); 통합 메모리 제어기 유닛(들)(1014); 통합 그래픽 로직, 이미지 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 하나 이상의 코프로세서(1420)의 세트; SRAM(static random access memory) 유닛(1430); DMA(direct memory access) 유닛(1432); 및 하나 이상의 외부 디스플레이에 결합하기 위한 디스플레이 유닛(1440). 일 실시예에서, 코프로세서(들)(1420)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 및/또는 압축해제 엔진, GPGPU, 고 스루풋 MIC 프로세서, 임베디드 프로세서, 또는 그와 유사한 것과 같은 특수 목적 프로세서를 포함한다.
일부 경우에, 명령어 변환기가 소스 명령어 세트로부터 타겟 명령어 세트로 명령어를 변환하는 데 사용될 수 있다. 예를 들어, 명령어 변환기는 명령어를 코어에 의해 처리될 하나 이상의 다른 명령어로(예를 들어, 정적 바이너리 변환, 동적 컴필레이션(dynamic compilation)을 포함하는 동적 바이너리 변환을 이용하여) 번역하거나, 모핑하거나, 에뮬레이트하거나, 또는 달리 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 온 프로세서(on processor)에, 오프 프로세서(off processor)에, 또는 일부는 온 프로세서에 일부는 오프 프로세서에 있을 수 있다.
도 15는 본 개시내용의 실시예들에 따른, 소스 명령어 세트에서의 바이너리 명령어들을 타겟 명령어 세트에서의 바이너리 명령어들로 변환하기 위해 소프트웨어 명령어 변환기를 사용하는 것을 대비하는 블록도이다. 도시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합으로 구현될 수 있다. 도 15는 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1516)에 의해 네이티브로(natively) 실행될 수 있는 x86 바이너리 코드(1506)를 생성하기 위해 고급 언어(1502)로 된 프로그램이 x86 컴파일러(1504)를 이용하여 컴파일링될 수 있다는 것을 도시한다. 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1516)는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 달성하기 위해서, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 상당부 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서상에서 실행되도록 되어 있는 오브젝트 코드 버전의 애플리케이션들 또는 다른 소프트웨어를 호환 가능하게 실행하거나 또는 다른 방식으로 처리함으로써, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1504)는, 추가 연계 처리(linkage processing)를 수반하거나 수반하지 않고서 적어도 하나의 x86 명령어 세트 코어를 구비한 프로세서(1516)상에서 실행될 수 있는 x86 바이너리 코드(1506)(예를 들어, 오브젝트 코드)를 발생하도록 동작할 수 있는 컴파일러를 나타낸다. 유사하게, 도 15는 적어도 하나의 x86 명령어 세트 코어를 구비하지 않은 프로세서(1514)(예컨대, 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 및/또는 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 네이티브로 실행될 수 있는 대안의 명령어 세트 바이너리 코드(1510)를 생성하기 위해 고급 언어(1502)로 된 프로그램이 대안의 명령어 세트 컴파일러(1508)를 사용하여 컴파일링될 수 있다는 것을 도시한다. 명령어 변환기(1512)는 x86 바이너리 코드(1506)를 x86 명령어 세트 코어를 구비하지 않은 프로세서(1514)에 의해 네이티브로 실행될 수 있는 코드로 변환하는 데 사용된다. 이 변환된 코드는 대안적 명령어 세트 바이너리 코드(1510)와 동일할 가능성이 별로 없지만 - 그 이유는 이것을 할 수 있는 명령어 변환기를 만들기가 어렵기 때문임 -; 변환된 코드는 일반 연산을 달성할 것이고 대안적 명령어 세트로부터의 명령어들로 구성될 것이다. 따라서, 명령어 변환기(1512)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 구비하지 않은 프로세서 또는 기타 전자 디바이스가 x86 바이너리 코드(1506)를 실행할 수 있게 해 주는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
설계는, 생성으로부터 시뮬레이션으로부터 제조까지 다양한 스테이지들을 거칠 수 있다. 설계를 나타내는 데이터는 다수의 방식들로 설계를 나타낼 수 있다. 먼저, 시뮬레이션들에서 유용한 것으로, 하드웨어는 하드웨어 기술 언어(HDL) 또는 또 다른 기능적 기술 언어를 이용하여 표현될 수 있다. 추가적으로, 로직 및/또는 트랜지스터 게이트들을 갖는 회로 레벨 모델이 설계 프로세스의 몇몇 스테이지에서 산출될 수 있다. 더욱이, 몇몇 스테이지에서 대부분의 설계들은 하드웨어 모델에서의 다양한 디바이스들의 물리적 배치를 나타내는 데이터 레벨에 도달한다. 종래의 반도체 제조 기술이 사용되는 경우에, 하드웨어 모델을 나타내는 데이터는 집적 회로를 생산하는데 사용되는 마스크들에 대한 상이한 마스크 층들상에서 다양한 특징들의 존재 또는 부재를 특정하는 데이터일 수 있다. 몇몇 구현들에서, 그런 데이터는 GDS II(Graphic Data System II), OASIS(Open Artwork System Interchange Standard), 또는 유사한 포맷과 같은 데이터 베이스 파일 포맷으로 저장될 수 있다.    
일부 구현들에서, 소프트웨어 기반 하드웨어 모델들, HDL 및 다른 기능적 기술 언어 오브젝트들은, 예들 중에서도 특히, RTL(register transfer language) 파일들을 포함할 수 있다. 이러한 오브젝트들은, 설계 도구가 HDL 오브젝트(또는 모델)를 받고, 설명된 하드웨어의 속성들에 대해 HDL 오브젝트를 파싱하며, 오브젝트로부터 물리적 회로 및/또는 온 칩 레이아웃을 결정할 수 있도록, 머신 파싱가능할 수 있다. 설계 도구의 출력은 물리적 디바이스를 제조하기 위해 사용될 수 있다. 예를 들어, 설계 도구는 HDL 오브젝트에서 모델링된 시스템을 실현하기 위해 구현될 수 있는 다른 속성들 중에서도 특히, HDL 오브젝트로부터 다양한 하드웨어 및/또는 펌웨어 요소들의 구성들, 예를 들어, 버스 폭들,(크기들 및 유형들을 포함하는) 레지스터들, 메모리 블록들, 물리적 링크 경로들, 패브릭 토폴로지들을 결정할 수 있다. 설계 도구들은 SoC(system on chip) 및 다른 하드웨어 디바이스의 토폴로지 및 패브릭 구성들을 결정하기 위한 도구들을 포함할 수 있다. 일부 경우들에서, HDL 오브젝트는 설명된 하드웨어를 제조하기 위해 제조 장비에 의해 사용될 수 있는 모델들 및 설계 파일들을 개발하기 위한 기반으로서 사용될 수 있다. 사실, HDL 오브젝트 자체는 설명된 하드웨어를 제조하게 하기 위해 제조 시스템 소프트웨어에의 입력으로서 제공될 수 있다.  
설계의 임의의 표현에서, 설계를 나타내는 데이터는 임의의 형태의 머신 판독가능 매체에 저장될 수 있다. 메모리 또는 디스크와 같은 자기 또는 광 저장 디바이스는 이러한 정보를 전송하기 위해 변조되거나 또는 다른 방식으로 생성되는 광 또는 전기 파를 통해 전송되는 전기 반송파를 저장할 수 있는 머신 판독가능 매체일 수 있다. 코드 또는 설계를 나타내거나 반송하는 전기적 반송파가 전송될 때, 전기적 신호의 복사, 버퍼링 또는 재전송이 수행되는 정도까지, 새로운 복사가 이뤄진다. 따라서, 통신 제공자 또는 네트워크 제공자는 반송파에 인코딩되는 정보와 같은 아티클을 적어도 일시적으로, 유형의 머신 판독가능 매체상에 저장할 수 있어서, 본 개시내용의 실시예들의 기술을 구현한다.
다양한 실시예들에서, 설계의 표현을 저장하는 매체는 제조 시스템(예컨대, 집적 회로 및/또는 관련 컴포넌트들을 제조할 수 있는 반도체 제조 시스템)에 제공될 수 있다. 설계 표현은 앞서 설명된 기능들의 임의의 조합을 수행할 수 있는 디바이스를 제조하도록 시스템에 지시할 수 있다. 예를 들어, 설계 표현은 어느 컴포넌트들을 제조할지, 컴포넌트들이 어떻게 서로 결합되어야만 하는지, 컴포넌트들이 디바이스상에서 어디에 위치되어야 하는지에 관해, 및/또는 제조될 디바이스에 관한 다른 적절한 규격들에 관해 시스템에 지시할 수 있다.
따라서, 적어도 일 실시예의 하나 이상의 양태는, 머신에 의해 판독될 때에 이 머신으로 하여금 본 명세서에 설명된 기술들을 수행하기 위한 로직을 제작하게 하는, 프로세서 내의 다양한 로직을 나타내는 머신 판독가능 매체상에 저장된 대표 명령어들에 의해 구현될 수 있다. "IP 코어들"이라고 종종 지칭되는 이러한 표현들은 비일시적이고 유형의 머신 판독가능 매체상에 저장되고, 로직 또는 프로세서를 제조하는 제조 머신들에 로딩하기 위해, 다양한 고객들 또는 제조 설비에 공급될 수 있다.
본 명세서에 개시된 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 이러한 구현 접근법들의 조합으로 구현될 수 있다. 본 개시내용의 실시예들은 적어도 하나의 프로세서, 저장 시스템(휘발성 및 비휘발성 메모리 및/또는 저장 요소들을 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그래머블 시스템들상에서 실행되는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
도 12에 도시된 코드(1230)와 같은 프로그램 코드는 본 명세서에 설명된 기능들을 수행하고 출력 정보를 생성하기 위해 입력 명령어들에 적용될 수 있다. 출력 정보는 공지된 방식으로 하나 이상의 출력 디바이스에 적용될 수 있다. 본 출원의 목적을 위해, 처리 시스템은 예를 들어 다음의 것과 같은 프로세서를 갖는 임의의 시스템을 포함한다; 디지털 신호 프로세서(DSP), 마이크로제어기, ASIC(application specific integrated circuit), 또는 마이크로프로세서.
프로그램 코드는 처리 시스템과 통신하기 위해 고급 절차 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는 또한 원할 경우 어셈블리어 또는 기계어로 구현될 수 있다. 사실상, 본 명세서에 설명된 메커니즘들은 임의의 특정 프로그래밍 언어로 그 범위가 한정되지는 않는다. 다양한 실시예들에서, 언어는 컴파일링된 또는 인터프리팅된 언어일 수 있다.
앞서 제시된 방법들, 하드웨어, 소프트웨어, 펌웨어 또는 코드의 실시예들은 처리 요소에 의해 실행가능한(또는 다른 방식으로 액세스가능한) 머신 액세스가능, 머신 판독가능, 컴퓨터 액세스가능, 또는 컴퓨터 판독가능 매체상에 저장된 명령어들 또는 코드를 통해 구현될 수 있다. 머신 액세스가능/판독가능 매체는 컴퓨터 또는 전자 시스템과 같은 머신에 의해 판독가능한 형태로 정보를 제공하는(즉, 저장 및/또는 전송하는) 임의의 메커니즘을 포함한다. 예를 들어, 머신 액세스가능 매체는 정적 RAM(SRAM) 또는 동적 RAM(DRAM)과 같은 랜덤 액세스 메모리(RAM); ROM; 자기 또는 광 저장 매체; 플래시 메모리 디바이스; 전기적 저장 디바이스; 광 저장 디바이스; 음향 저장 디바이스; 일시적(전파된) 신호들(예를 들어, 반송파들, 적외선 신호들, 디지털 신호들)로부터 수신된 정보를 보유하기 위한 저장 디바이스들의 다른 형태; 그로부터 정보를 수신할 수 있는 비일시적 매체들과 구별되어야 하는 것 등등을 포함한다.
본 개시내용의 실시예들을 수행하도록 로직을 프로그래밍하는 데 사용되는 명령어들은 DRAM, 캐시, 플래시 메모리, 또는 다른 저장 디바이스와 같은 시스템에서의 메모리 내에 저장될 수 있다. 더욱이, 명령어들은 네트워크를 통해 또는 다른 컴퓨터 판독가능 매체들에 의해 배포될 수 있다. 따라서, 머신 판독가능 매체는 머신(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 정보를 저장하거나 전송하기 위한 임의의 메커니즘을 포함할 수 있고, 플로피 디스켓, 광학 디스크, CD-ROM(Compact Disc, Read-Only Memory), 광자기 디스크, 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), EPROM(Erasable Programmable Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), 자기 또는 광 카드, 플래시 메모리, 또는 전기, 광학, 음향 또는 다른 형태의 전파 신호들(예를 들어, 반송파들, 적외선 신호들, 디지털 신호들 등)을 통해 인터넷을 경유하여 정보를 전송하는데 이용되는 유형의 머신 판독가능 저장 디바이스를 포함하지만, 이것들에만 제한되지는 않는다. 그에 따라서, 컴퓨터 판독가능 매체는, 머신(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 전자 명령어들 또는 정보를 저장하거나 전송하기에 적절한 임의 타입의 유형의 머신 판독가능 매체를 포함한다.
로직은 프로세서(100), 코어들(104), 메모리 인터페이스(106), 압축 엔진(108), 메모리 제어기(110), 메모리(112), 압축기(302), 압축 해제기(304), 버퍼 메모리(314), 및 FPGA(700), 본 명세서에 설명된 다른 컴포넌트, 또는 이들 컴포넌트들 중 임의의 컴포넌트의 임의의 서브컴포넌트와 같은 다양한 컴포넌트들의 임의의 기능성을 구현하기 위해 사용될 수 있다. "로직"은 하나 이상의 기능을 수행하기 위한 하드웨어, 펌웨어, 소프트웨어 및/또는 각각의 조합들을 지칭할 수 있다. 예로서, 로직은 마이크로제어기 또는 프로세서에 의해 실행되도록 적합화된 코드를 저장하기 위한 비일시적 매체와 연관된, 마이크로제어기 또는 프로세서와 같은 하드웨어를 포함할 수 있다. 따라서, 로직에 대한 언급은, 일 실시예에서, 비일시적 매체상에 보유될 코드를 인식 및/또는 실행하도록 구체적으로 구성된 하드웨어를 지칭한다. 게다가, 또 다른 실시예에서, 로직의 사용은 미리 결정된 동작들을 수행하기 위해 마이크로제어기에 의해 실행되도록 구체적으로 적응된 코드를 포함하는 비일시적 매체를 지칭한다. 그리고 추론될 수 있는 바와 같이, 또 다른 실시예에서, (이 예에서의) 로직이라는 용어는 하드웨어와 비일시적 매체의 조합을 지칭할 수 있다. 다양한 실시예들에서, 로직은 소프트웨어 명령어들을 실행하도록 동작가능한 마이크로프로세서 또는 다른 처리 요소, ASIC(application specific integrated circuit)와 같은 개별 로직(discrete logic), FPGA(field programmable gate array)와 같은 프로그래밍된 로직 디바이스, 명령어들을 포함하는 메모리 디바이스, (예컨대, 인쇄 회로 기판상에서 발견되는 것과 같은) 로직 디바이스들의 조합들, 또는 다른 적절한 하드웨어 및/또는 소프트웨어를 포함할 수 있다. 로직은, 예컨대, 트랜지스터들에 의해 구현될 수 있는, 하나 이상의 게이트 또는 다른 회로 컴포넌트를 포함할 수 있다. 일부 실시예들에서, 로직은 또한 전적으로 소프트웨어로서 구현될 수 있다. 소프트웨어는 비일시적 컴퓨터 판독가능 저장 매체상에 기록되는 소프트웨어 패키지, 코드, 명령어들, 명령어 세트들 및/또는 데이터로서 구현될 수 있다. 펌웨어는 메모리 디바이스들에서 하드 코딩되는(예를 들어, 비휘발성인) 코드, 명령어들 또는 명령어 세트들 및/또는 데이터로서 구현될 수 있다. 종종, 분리되어 예시되어 있는 로직 경계들이 보통은 변하며 잠재적으로는 중첩된다. 예를 들어, 제1 로직과 제2 로직은, 잠재적으로는 일부 독립적인 하드웨어, 소프트웨어 또는 펌웨어를 보유하면서, 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합을 공유할 수 있다.
'하는' 또는 '하도록 구성된'이라는 문구의 사용은, 일 실시예에서, 지정된 또는 결정된 태스크를 수행하도록 장치, 하드웨어, 로직, 또는 요소를 배열, 조립, 제조, 판매 제안, 수입 및/또는 설계하는 것을 지칭한다. 이 예에서, 동작하고 있지 않은 장치 또는 그의 요소는, 지정된 태스크를 수행하도록 설계, 결합, 및/또는 인터커넥트되는 경우, 여전히 상기 지정된 태스크를 수행'하도록 구성'된다. 순전히 예시적 예로서, 로직 게이트는 동작 동안 0 또는 1을 제공할 수 있다. 그러나, 클록에 인에이블 신호(enable signal)를 제공'하도록 구성된' 로직 게이트가 1 또는 0을 제공할 수 있는 모든 잠재적 로직 게이트를 포함하지는 않는다. 대신에, 로직 게이트는 동작 동안 1 또는 0 출력이 클록을 인에이블하게 되어 있는 일부 방식으로 결합된 것이다. 다시 한번 유의할 점은, '하도록 구성된'이라는 용어의 사용이 동작을 필요로 하지 않고, 그 대신에 장치, 하드웨어, 및/또는 요소의 잠재적 상태(latent state)에 중점을 두고 있다는 것이며, 여기서 잠재적 상태에서 장치, 하드웨어, 및/또는 요소는 장치, 하드웨어, 및/또는 요소가 동작하고 있을 때 특정 태스크를 수행하도록 설계되어 있다.
게다가, '할 수 있는/하는', 및/또는 '하도록 동작가능한'이라는 문구들의 사용은, 일 실시예에서, 장치, 로직, 하드웨어, 및/또는 요소의 사용을 지정된 방식으로 가능하게 하는 방식으로 설계된 어떤 장치, 로직, 하드웨어, 및/또는 요소를 지칭한다. 위에서와 같이, 일 실시예에서, "~하도록", "~하도록 할 수 있는" 또는 "~하도록 동작할 수 있는"이라는 표현들의 사용은 장치, 로직, 하드웨어, 및/또는 요소의 잠재적인 상태를 지칭하며, 여기서 장치, 로직, 하드웨어, 및/또는 요소는 동작하고 있지 않지만, 지정된 방식으로 장치의 사용을 가능하게 하는 방식으로 설계된다는 점에 유의한다.
본 명세서에서 사용되는 바와 같이, 값은 숫자, 상태, 논리 상태, 또는 바이너리 논리 상태의 임의의 공지된 표현을 포함한다. 종종, 논리 레벨(logic level), 논리 값(logic value), 또는 논리적 값(logical value)의 사용은 단순히 바이너리 논리 상태를 나타내는 1들 및 0들인 것으로서 또한 지칭된다. 예를 들어, 1은 하이 논리 레벨을 말하고, 0은 로우 논리 레벨을 말한다. 일 실시예에서, 트랜지스터 또는 플래시 셀과 같은 저장 셀은 단일 논리 값 또는 다중 논리 값을 보유할 수 있다. 그렇지만, 컴퓨터 시스템에서의 값의 다른 표현들이 사용되어 왔다. 예를 들어, 십진수 10은 또한 이진수 1010과 16진수 문자 A로서 표현될 수 있다. 따라서, 값은 컴퓨터 시스템 내에 보유될 수 있는 정보의 임의 표현을 포함한다.
더욱이, 상태들은 값들 또는 값들의 부분들에 의해 표현될 수 있다. 예로서, 논리 1과 같은 제1 값은 디폴트 또는 초기 상태를 표현할 수 있는 반면, 논리 0과 같은 제2 값은 비디폴트 상태(non-default state)를 표현할 수 있다. 게다가, 일 실시예에서, 재설정 및 설정이라는 용어는 제각기 디폴트 및 업데이트된 값 또는 상태를 지칭한다. 예를 들어, 디폴트 값은 잠재적으로는 하이 논리 값, 즉 재설정을 포함하는 반면, 업데이트된 값은 잠재적으로는 로우 논리 값, 즉 설정을 포함한다. 값들의 임의 조합이 임의 수의 상태들을 표현하는 데 사용될 수 있다는 점에 유의한다.
하나 이상의 실시예는 장치, 프로세서, 시스템, 머신 판독가능 저장 디바이스, 머신 판독가능 매체, 하드웨어 및/또는 소프트웨어 기반 로직, 또는 방법을 제공할 수 있는데, 이것들은 부호 필드, 지수 필드, 및 가수 필드를 포함하는 부동 소수점 포맷에 따라 인코딩되는 복수의 데이터 요소를 (예를 들어, 제1 메모리에 의해) 저장하고; 및 복수의 데이터 요소의 데이터 요소당 태그 타입을 포함하게 될 압축된 데이터 블록을 (예를 들어, 압축 엔진에 의해) 생성하는데, 여기서 제1 데이터 요소가 사전에서의 임의의 엔트리의 값과 매칭되지 않는 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제1 태그 타입 및 제1 데이터 요소의 압축되지 않은 값이 압축된 데이터 블록에 포함되고; 및 제2 데이터 요소가 사전에서의 제1 엔트리의 값과 매칭되는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제2 태그 타입 및 제2 데이터 요소의 압축된 값이 압축된 데이터 블록에 포함된다.
적어도 일 실시예에서, 제3 데이터 요소가 사전에서의 제2 엔트리의 값과 매칭되는 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제3 태그 타입 및 데이터 요소의 압축된 값이 압축된 데이터 블록에 포함된다. 적어도 일 실시예에서, 제4 데이터 요소가 사전에서의 제3 엔트리의 값과 매칭되는 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제4 태그 타입 및 제4 데이터 요소의 압축된 값이 압축된 데이터 블록에 포함된다. 적어도 일 실시예에서, 제3 데이터 요소가 그의 지수 필드에서 모두 제로인 비트들 및 그의 가수 필드에서 모두 제로인 비트들을 포함한다는 결정에 응답하여, 제3 태그 타입이 압축된 데이터 블록에 포함되고, 제3 데이터 요소로부터의 어떤 데이터도 압축된 데이터 블록에 포함되지 않는다. 적어도 일 실시예에서, 사전은 복수의 엔트리를 포함하고, 사전의 각각의 엔트리는 제각기 지수 값을 저장한다. 적어도 일 실시예에서, 제2 태그 타입은 사전의 복수의 엔트리 내에서의 제1 엔트리의 위치를 나타낸다. 적어도 일 실시예에서, 사전은 2개의 엔트리를 포함하고, 사전은 제1 데이터 요소의 지수 필드의 최하위 비트에 의해 인덱싱된다. 적어도 일 실시예에서, 복수의 데이터 요소는 제1 데이터 블록을 형성하고, 사전은 제1 데이터 블록 전에 압축되는 제2 데이터 블록의 데이터 요소들에 기초하여 제1 데이터 블록의 압축 전에 업데이트되고, 사전은 제1 데이터 블록의 압축 동안 업데이트되지 않는다. 적어도 일 실시예에서, 제2 데이터 블록은 제1 데이터 블록의 압축 직전에 (예를 들어, 압축 엔진에 의해) 압축된다. 적어도 일 실시예에서, 제2 데이터 요소의 압축된 값은 제2 데이터 요소의 부호 값 및 가수 값이다. 적어도 일 실시예에서, 압축 엔진 또는 다른 컴포넌트는 추가로, 압축된 데이터 블록이 바이트 경계에서 종료되도록 야기하기 위해 압축된 데이터 블록의 끝에 하나 이상의 비트를 패딩(pad)한다. 적어도 일 실시예에서, 프로세서는 압축된 데이터 블록을 그 안의 저장을 위해 제2 메모리에 전송하는 메모리 제어기를 추가로 포함한다. 적어도 일 실시예에서, 압축 엔진 또는 다른 컴포넌트는 복수의 데이터 요소와 연관된 작업부하 유형에 기초하여 사전의 복수의 엔트리를 초기화한다. 적어도 일 실시예에서, 압축 엔진 또는 다른 컴포넌트는 복수의 데이터 요소의 압축 전에 압축된 하나 이상의 데이터 세트에서 직면하는 지수들의 빈도의 히스토그램에 기초하여 사전의 복수의 엔트리를 초기화한다.
적어도 일 실시예에서, 적어도 하나의 머신 판독가능 저장 매체는 명령어들이 저장되어 있고, 명령어들은 머신에 의해 실행될 때, 머신으로 하여금 부호 필드, 지수 필드 및 가수 필드를 포함하는 부동 소수점 포맷에 따라 인코딩되는 복수의 데이터 요소를 저장하고; 및 복수의 데이터 요소에 기초하여 압축된 데이터 블록을 생성하도록 야기하고, 여기서 압축된 데이터 블록은 복수의 데이터 요소의 데이터 요소당 태그 타입을 포함하고, 제1 데이터 요소가 사전에서의 임의의 엔트리의 값과 매칭되지 않는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제1 태그 타입 및 제1 데이터 요소의 압축되지 않은 값이 압축된 데이터 블록에 포함되고; 및 제2 데이터 요소가 사전에서의 제1 엔트리의 값과 매칭되는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제2 태그 타입 및 제2 데이터 요소의 압축된 값이 압축된 데이터 블록에 포함된다.
적어도 일 실시예에서, 제3 데이터 요소가 사전에서의 제2 엔트리의 값과 매칭되는 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제3 태그 타입 및 제3 데이터 요소의 압축된 값이 압축된 데이터 블록에 포함된다.
적어도 일 실시예에서, 시스템은, 부호 필드, 지수 필드 및 가수 필드를 포함하는 부동 소수점 포맷에 따라 인코딩되는 복수의 데이터 요소의 데이터 요소당 태그 타입을 포함하는 압축된 데이터 요소를 생성하는 프로세서 - 제1 데이터 요소가 사전에서의 임의의 엔트리의 값과 매칭되지 않는 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제1 태그 타입 및 제1 데이터 요소의 압축되지 않은 값은 압축된 데이터 블록에 포함되고, 제2 데이터 요소가 사전에서의 제1 엔트리의 값과 매칭되는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제2 태그 타입 및 제2 데이터 요소의 압축된 값이 압축된 데이터 블록에 포함됨 -; 압축된 데이터 블록을 저장하는 메모리; 및 프로세서를 메모리에 결합하기 위한 복수의 채널을 포함한다.
적어도 일 실시예에서, 제1 캐시 라인이 복수의 데이터 요소를 포함하고, 프로세서는 복수의 채널 중 단일 채널을 통해 메모리에 압축된 데이터 블록을 전송하고; 및 복수의 채널 중 2개의 채널을 통해 충분한 압축비를 달성하지 못했던 제2 캐시 라인을 전송하기 위한 메모리 제어기를 추가로 포함한다. 적어도 일 실시예에서, 메모리 제어기는 제1 캐시 라인의 어드레스에 대해 수행되는 해시 연산에 기초하여 압축된 데이터 블록을 전송할 채널을 선택한다. 적어도 일 실시예에서, 시스템은 프로세서에 통신가능하게 결합된 배터리, 프로세서에 통신가능하게 결합된 디스플레이, 또는 프로세서에 통신가능하게 결합된 네트워크 인터페이스를 더 포함한다.
본 명세서 전체에 걸쳐서 "일 실시예" 또는 "실시예"를 참조하는 것은, 실시예와 결합되어 설명된 특정의 특징, 구조, 또는 특성이 본 개시내용의 적어도 일 실시예에 포함된다는 것을 의미한다. 따라서, 본 명세서 전체에 걸쳐서 다양한 위치에서 문구 "일 실시예에서" 또는 "실시예에서"의 출현은 모두가 동일한 실시예를 반드시 지칭하는 것은 아니다. 더욱이, 특정한 특징, 구조, 또는 특성은 하나 이상의 실시예에서 임의의 적절한 방식으로 조합될 수 있다.
전술한 명세서에서, 상세한 설명이 특정의 예시적인 실시예들을 참조하여 주어졌다. 그렇지만, 첨부된 청구항들에 기재된 본 개시내용의 보다 광의의 사상 및 범위를 벗어나지 않고 그에 대한 다양한 수정들 및 변경들이 행해질 수 있다는 것이 명백할 것이다. 본 명세서 및 도면들은, 그에 따라, 제한적인 의미가 아니라 예시적인 의미로 간주되어야 한다. 더욱이, 실시예 및 다른 예시적인 언어의 전술한 사용이 반드시 동일한 실시예 또는 동일한 예를 지칭하지는 않지만, 상이한 그리고 별개의 실시예들은 물론이고 잠재적으로는 동일한 실시예를 지칭할 수도 있다.

Claims (20)

  1. 프로세서로서:
    부호 필드, 지수 필드, 및 가수 필드를 포함하는 부동 소수점 포맷에 따라 인코딩되는 복수의 데이터 요소를 저장하는 제1 메모리; 및
    회로를 포함하는 압축 엔진 - 상기 압축 엔진은 상기 복수의 데이터 요소의 데이터 요소당 태그 타입을 포함하는 압축된 데이터 블록을 생성하고,
    제1 데이터 요소가 사전에서의 임의의 엔트리의 값과 매칭되지 않는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제1 태그 타입 및 상기 제1 데이터 요소의 압축되지 않은 값이 상기 압축된 데이터 블록에 포함되고; 및
    제2 데이터 요소가 상기 사전에서의 제1 엔트리의 값과 매칭되는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제2 태그 타입 및 상기 제2 데이터 요소의 압축된 값이 상기 압축된 데이터 블록에 포함됨 - 을 포함하는 프로세서.
  2. 제1항에 있어서, 제3 데이터 요소가 상기 사전에서의 제2 엔트리의 값과 매칭되는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제3 태그 타입 및 상기 데이터 요소의 압축된 값이 상기 압축된 데이터 블록에 포함되는 프로세서.
  3. 제2항에 있어서, 제4 데이터 요소가 상기 사전에서의 제3 엔트리의 값과 매칭되는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제4 태그 타입 및 상기 제4 데이터 요소의 압축된 값이 상기 압축된 데이터 블록에 포함되는 프로세서.
  4. 제1항에 있어서, 제3 데이터 요소가 그의 지수 필드에서 모두 제로인 비트들 및 그의 가수 필드에서 모두 제로인 비트들을 포함한다는 결정에 응답하여, 제3 태그 타입이 상기 압축된 데이터 블록에 포함되고, 상기 제3 데이터 요소로부터의 어떤 데이터도 상기 압축된 데이터 블록에 포함되지 않는 프로세서.
  5. 제1항에 있어서, 상기 사전은 복수의 엔트리를 포함하고, 상기 사전의 각각의 엔트리는 제각기 지수 값을 저장하는 프로세서.
  6. 제1항에 있어서, 상기 제2 태그 타입은 상기 사전의 복수의 엔트리 내에서의 상기 제1 엔트리의 위치를 나타내는 프로세서.
  7. 제1항에 있어서, 상기 사전은 2개의 엔트리를 포함하고, 상기 사전은 상기 제1 데이터 요소의 지수 필드의 최하위 비트에 의해 인덱싱되는 프로세서.
  8. 제1항에 있어서, 상기 복수의 데이터 요소는 제1 데이터 블록을 형성하고, 상기 사전은 상기 제1 데이터 블록 전에 압축되는 제2 데이터 블록의 데이터 요소들에 기초하여 상기 제1 데이터 블록의 압축 전에 업데이트되고, 상기 사전은 상기 제1 데이터 블록의 압축 동안 업데이트되지 않는 프로세서.
  9. 제8항에 있어서, 상기 제2 데이터 블록은 상기 제1 데이터 블록의 압축 직전에 상기 압축 엔진에 의해 압축되는 프로세서.
  10. 제1항에 있어서, 상기 제2 데이터 요소의 압축된 값은 상기 제2 데이터 요소의 부호 값 및 가수 값인 프로세서.
  11. 제1항에 있어서, 상기 압축 엔진은 추가로, 상기 압축된 데이터 블록이 바이트 경계에서 종료하도록 야기하기 위해 상기 압축된 데이터 블록의 끝에 하나 이상의 비트를 패딩하는 프로세서.
  12. 제1항에 있어서, 상기 프로세서는 상기 압축된 데이터 블록을 그 안의 저장을 위해 제2 메모리에 전송하는 메모리 제어기를 추가로 포함하는 프로세서.
  13. 제1항에 있어서, 상기 압축 엔진은 상기 복수의 데이터 요소와 연관된 작업부하 유형에 기초하여 상기 사전의 복수의 엔트리를 초기화하는 프로세서.
  14. 제1항에 있어서, 상기 압축 엔진은 상기 복수의 데이터 요소의 압축 전에 압축된 하나 이상의 데이터 세트에서 직면하는 지수들의 빈도의 히스토그램에 기초하여 상기 사전의 복수의 엔트리를 초기화하는 프로세서.
  15. 명령어들이 저장된 적어도 하나의 머신 판독가능 저장 매체로서, 상기 명령어들은 머신에 의해 실행될 때, 상기 머신으로 하여금:
    부호 필드, 지수 필드, 및 가수 필드를 포함하는 부동 소수점 포맷에 따라 인코딩되는 복수의 데이터 요소를 저장하고; 및
    상기 복수의 데이터 요소에 기초하여 압축된 데이터 블록을 생성하도록 야기하고, 상기 압축된 데이터 블록은 상기 복수의 데이터 요소의 데이터 요소당 태그 타입을 포함하고,
    제1 데이터 요소가 사전에서의 임의의 엔트리의 값과 매칭되지 않는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제1 태그 타입 및 상기 제1 데이터 요소의 압축되지 않은 값이 상기 압축된 데이터 블록에 포함되고, 및
    제2 데이터 요소가 상기 사전에서의 제1 엔트리의 값과 매칭되는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제2 태그 타입 및 상기 제2 데이터 요소의 압축된 값이 상기 압축된 데이터 블록에 포함되는 적어도 하나의 매체.
  16. 제15항에 있어서, 제3 데이터 요소가 상기 사전에서의 제2 엔트리의 값과 매칭되는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제3 태그 타입 및 상기 제3 데이터 요소의 압축된 값이 상기 압축된 데이터 블록에 포함되는 적어도 하나의 매체.
  17. 시스템으로서:
    부호 필드, 지수 필드, 및 가수 필드를 포함하는 부동 소수점 포맷에 따라 인코딩되는 복수의 데이터 요소들의 데이터 요소당 태그 타입을 포함하는 압축된 데이터 블록을 생성하는 프로세서 - 제1 데이터 요소가 사전에서의 임의의 엔트리의 값과 매칭되지 않는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제1 태그 타입 및 상기 제1 데이터 요소의 압축되지 않은 값은 상기 압축된 데이터 블록에 포함되고, 제2 데이터 요소가 상기 사전에서의 제1 엔트리의 값과 매칭되는 그의 지수 필드에서의 값을 포함한다는 결정에 응답하여, 제2 태그 타입 및 상기 제2 데이터 요소의 압축된 값은 상기 압축된 데이터 블록에 포함됨 -;
    상기 압축된 데이터 블록을 저장하는 메모리; 및
    상기 프로세서를 상기 메모리에 결합하는 복수의 채널을 포함하는 시스템.
  18. 제17항에 있어서, 제1 캐시 라인은 상기 복수의 데이터 요소를 포함하고, 상기 프로세서는:
    상기 복수의 채널 중 단일 채널을 통해 상기 압축된 데이터 블록을 상기 메모리에 전송하고; 및
    상기 복수의 채널 중 2개의 채널을 통해 충분한 압축비를 달성하지 못한 제2 캐시 라인을 전송하기 위한 메모리 제어기를 포함하는 시스템.
  19. 제18항에 있어서, 상기 메모리 제어기는 상기 제1 캐시 라인의 어드레스에 대해 수행되는 해시 연산에 기초하여 상기 압축된 데이터 블록을 전송할 상기 채널을 선택하는 시스템.
  20. 제17항에 있어서, 상기 프로세서에 통신가능하게 결합된 배터리, 상기 프로세서에 통신가능하게 결합된 디스플레이, 또는 상기 프로세서에 통신가능하게 결합된 네트워크 인터페이스를 추가로 포함하는 시스템.
KR1020190041254A 2018-05-11 2019-04-09 부동 소수점 데이터를 압축하기 위한 시스템 KR20190129702A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/977,720 2018-05-11
US15/977,720 US10305508B2 (en) 2018-05-11 2018-05-11 System for compressing floating point data

Publications (1)

Publication Number Publication Date
KR20190129702A true KR20190129702A (ko) 2019-11-20

Family

ID=65230032

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190041254A KR20190129702A (ko) 2018-05-11 2019-04-09 부동 소수점 데이터를 압축하기 위한 시스템

Country Status (5)

Country Link
US (1) US10305508B2 (ko)
EP (1) EP3567729A1 (ko)
JP (1) JP7351060B2 (ko)
KR (1) KR20190129702A (ko)
CN (1) CN110474645A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11934668B2 (en) 2020-09-02 2024-03-19 Samsung Electronics Co., Ltd. Electronic device with storage device data conversion

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10833701B2 (en) * 2018-05-02 2020-11-10 EMC IP Holding Company LLC Process aware data compression
CN111142676B (zh) * 2019-12-30 2023-08-08 歌尔科技有限公司 数据传输方法、装置、头戴显示设备和可读存储介质
US11394396B2 (en) * 2020-09-25 2022-07-19 Advanced Micro Devices, Inc. Lossless machine learning activation value compression
CN114040028B (zh) * 2021-10-29 2023-11-24 深圳智慧林网络科技有限公司 一种基于三种模式的数据压缩方法和数据解压方法
CN114040027B (zh) * 2021-10-29 2023-11-24 深圳智慧林网络科技有限公司 一种基于双模式的数据压缩方法、装置和数据解压方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040022312A1 (en) * 2002-07-31 2004-02-05 Jones Simon R. Lossless data compression
US20050071151A1 (en) * 2003-09-30 2005-03-31 Ali-Reza Adl-Tabatabai Compression-decompression mechanism
US8208532B2 (en) * 2008-03-31 2012-06-26 Oracle America, Inc. Method and apparatus for data compression and decompression
WO2013003479A2 (en) * 2011-06-30 2013-01-03 Samplify Systems, Inc. Compression of floating-point data
JP2014521273A (ja) * 2011-07-20 2014-08-25 フリースケール セミコンダクター インコーポレイテッド 画像を符号化する方法および装置
JP5928201B2 (ja) * 2012-07-06 2016-06-01 富士通株式会社 復元プログラム、圧縮プログラム、復元装置、圧縮装置、復元方法、および圧縮方法
US9851945B2 (en) * 2015-02-16 2017-12-26 Advanced Micro Devices, Inc. Bit remapping mechanism to enhance lossy compression in floating-point applications
EP3304746B1 (en) * 2015-05-21 2021-04-07 Zeropoint Technologies AB Methods, devices and systems for hybrid data compression and decompression
EP4012928B1 (en) * 2015-05-21 2023-06-14 Zeropoint Technologies AB Methods, devices and systems for semantic-value data compression and decompression
US10509580B2 (en) 2016-04-01 2019-12-17 Intel Corporation Memory controller and methods for memory compression utilizing a hardware compression engine and a dictionary to indicate a zero value, full match, partial match, or no match

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11934668B2 (en) 2020-09-02 2024-03-19 Samsung Electronics Co., Ltd. Electronic device with storage device data conversion

Also Published As

Publication number Publication date
JP7351060B2 (ja) 2023-09-27
EP3567729A1 (en) 2019-11-13
US20190044531A1 (en) 2019-02-07
JP2019208203A (ja) 2019-12-05
CN110474645A (zh) 2019-11-19
US10305508B2 (en) 2019-05-28

Similar Documents

Publication Publication Date Title
US11645135B2 (en) Hardware apparatuses and methods for memory corruption detection
JP7351060B2 (ja) 浮動小数点データを圧縮するためのシステム
CN108292215B (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
CN108369511B (zh) 用于基于通道的跨步存储操作的指令和逻辑
US10224956B2 (en) Method and apparatus for hybrid compression processing for high levels of compression
CN110879724A (zh) 用于深度学习和其它算法的fp16-s7e8混合精度
US9473168B1 (en) Systems, methods, and apparatuses for compression using hardware and software
JP2017016637A (ja) 密結合ヘテロジニアスコンピューティングのためのハードウェアプロセッサ及び方法
US10135463B1 (en) Method and apparatus for accelerating canonical huffman encoding
TWI733760B (zh) 記憶體複製指令、處理器、方法及系統
TWI588740B (zh) 包括用於移位和(shift-sum)乘法器之指令及邏輯的處理器及系統,以及用於移位和乘法的方法
CN108228234B (zh) 用于聚集-更新-分散操作的加速器
CN110620585A (zh) 支持压缩数据的随机访问
US20170177361A1 (en) Apparatus and method for accelerating graph analytics
EP3786780B1 (en) System to perform unary functions using range-specific coefficient sets
JP2014182796A (ja) 書き込みマスク・レジスタの末尾の最下位マスキング・ビットを判定するためのシステム、装置、および方法
TWI729029B (zh) 用於向量位元欄壓縮及擴展的指令及邏輯
US11126663B2 (en) Method and apparatus for energy efficient decompression using ordered tokens
US10069512B2 (en) Systems, methods, and apparatuses for decompression using hardware and software
US20160378480A1 (en) Systems, Methods, and Apparatuses for Improving Performance of Status Dependent Computations
CN117501256A (zh) 用于大数据集的复杂过滤器硬件加速器