KR20100029179A - 데이터 압축을 위한 회로 및 그 회로를 채택한 프로세서 - Google Patents

데이터 압축을 위한 회로 및 그 회로를 채택한 프로세서 Download PDF

Info

Publication number
KR20100029179A
KR20100029179A KR1020097021425A KR20097021425A KR20100029179A KR 20100029179 A KR20100029179 A KR 20100029179A KR 1020097021425 A KR1020097021425 A KR 1020097021425A KR 20097021425 A KR20097021425 A KR 20097021425A KR 20100029179 A KR20100029179 A KR 20100029179A
Authority
KR
South Korea
Prior art keywords
data
values
map
circuit
zero
Prior art date
Application number
KR1020097021425A
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 KR20100029179A publication Critical patent/KR20100029179A/ko

Links

Images

Classifications

    • 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/3066Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction by means of a mask or a bit-map
    • 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
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

본 출원은, 메모리 액세스의 가격 최소화라는, 컴퓨팅 시스템의 설계에서의 근본적인 문제를 중점을 두어 다룬다. 메모리 액세스의 가격 최소화는 메모리 기술이나 프로세서로의 연결의 방식에 관계없이 컴퓨터 시스템들의 설계 상에서의 근본적인 한계이며, 주어진 시간 내에 프로세서와 메모리 사이에서 얼마나 많은 데이터가 전달될 수 있는가에 관해서 최대의 한계가 존재하며, 이는 가용한 메모리 대역폭이며, 가용 메모리 대역폭에 의한 컴퓨터 파워의 한계는 메모리-월로서 종종 언급된다. 제공된 해결책은 압축될 데이터 구조의 지도를 생성하고, 그 지도는 상기 구조 내의 비자명 데이터 값들 (예를 들면, 0 아닌 값들)의 위치를 나타내며, 상기 구조로부터 자명한 데이터 값들을 삭제하여 압축된 구조를 제공한다.

Description

데이터 압축을 위한 회로 및 그 회로를 채택한 프로세서{A circuit for compressing data and a processor employing same}
본 발명은 데이터 압축 그리고 더 상세하게는 구조들을 압축하는 방법에 관한 것이다.
압축 방법 및 알고리즘은 메모리 내에 저장될 데이터의 양을 줄이기 위해 당 업계에 잘 알려져 있다. 특히 다른 유형의 데이터, 예를 들면 이미지들을 위한 JPEG를 위한 다른 알고리즘들이 잘 알려져 있다.
본 출원은 행렬 구조들을 압축하는 것에 관한 것이다.
이전에 시도되었던 하나의 접근 방식 (Moloney와 Geraghty의 WO2006120664 출원)은 구조화되지 않은 행렬을 구조화된 행렬로 변환함으로써 행렬 구조를 압축하는 것을 포함한다. 그 압축 방법은 상기 행렬의 1차 대각 (primary diagonal) 위에 그리고 밑에 있는 데이터 중복을 효과적으로 제거한다.
행렬 구조를 다루는 다른 방법은 US 6,591,019에서 제안되었으며, 그 출원에서 데이터 값들의 행렬이 비트맵 (bitMap) 테이블, 사인맵 (signMap) 테이블 및 데이터맵 (dataMap) 테이블을 포함하는 구조로 압축된다. 상기 비트맵 테이블은 2-비트 엔트리들의 시리즈를 포함하며, 2-비트 엔트리 각각은 압축되지 않은 행렬 구조 내의 하나의 엔트리에 대응한다. 상기 bitMap 내의 2 비트 각각은 상기 비-압축된 행렬 내의 상기 대응 값은 0 이거나 또는 1 이거나 또는 dataMap 내의 크기 조절된 모습으로 저장되거나 또는 dataMap 내의 압축되지 않은 모습으로 저장되는가의 여부를 식별한다. 상기 signMap 테이블은 비-압축된 구조 내의 값들의 부호들을 식별한다. 이 방법의 불리한 점은 정보가 값들을 크기 조절할 때에 분실되기 때문에 상기 방법은 무손실은 아니라는 것이다. 상기 방법은 소프트웨어로 구현하기 위해서만 실제적이다.
메모리 내에 상기 구조들을 저장하기 위해 더 작은 메모리가 필요하다는 한에서는 비록 상기의 방법들 각각이 종래 기술을 넘어서는 개선을 제공하지만, 프로세서 내에서 상기 구조들을 압축 해제할 때에 상기 방법들은 막대한 컴퓨팅 비용을 여전히 초래한다. 추가로, 상기 방법들 둘 다는 압축 및 압축 해제의 모두의 면에서 상기 방법들의 상대적인 복잡성에 기인한 프로세싱 속도라는 관점을 또한 겪으며, 이는 프로세서 상에서 동작할 때에 성능의 면에서 비교적 큰 규모이면서 늦은 장치라는 결과로 귀결된다.
본 출원은 구현 비용을 최소화하고 구현의 압축/압축해제 속도를 최대화하면서도 메모리 액세스의 비용을 최소화하는 컴퓨팅 시스템들을 설계하는데 있어서의 문제에 중점을 두어 다룬다. 메모리 액세스 (메모리 대역)의 비용은 메모리 기술 또는 프로세서로의 연결 방식에 관계없는 컴퓨터 시스템들 설계 상에서의 근본적인 한계이며, 주어진 시간 내에 프로세서와 메모리 사이에서 얼마나 많은 데이터가 어떻게 전달될 수 있는가에 관한 최대의 한계가 존재하며, 이는 이용 가능한 메모리 대역이며, 이용 가능한 메모리 대역에 의한 컴퓨터 파워의 상기 한계는 "메모리 월 (memory-wall)"로서 종종 언급된다.
본 출원은, 데이터를 압축된 포맷으로 저장함으로써, 그리고, 메모리 내에 저장되어야 하는 큰 데이터 세트들 상에서 동작하는 컴퓨터 그래픽, 강체 역학, 유한 요소 분석 그리고 다른 과학적 애플리케이션 및 엔지니어링 애플리케이션과 같은 많은 애플리케이션들에서 사용되는 블록-구조의 데이터에 적합한 압축과 압축 해제의 수단을 제공함으로써, 유효 메모리 대역을 증가시키고 계산상에서의 메모리 월의 한계를 최소화하려고 한다.
본 발명은 압축/압축해제 회로를 프로세서의 하드웨어에 병합함으로써 상기 메모리 월의 문제를 중점을 두어 다루며, 그래서 데이터 전송 및 압축 해제는 프로세서 자원들을 차지하지 않도록 하며 그리고 구현 비용의 면에서는 낮고 프로세싱 속도의 면에서는 빠르면서도 큰 지연은 없도록 한다. 유리한 압축 방법이 제공되어, 비교적 단순한 압축/압축해제 하드웨어를 허용한다.
첫 번째 실시예는 개별 데이터 값들의 구조를 저장하기 위한 메모리, 상기 구조 내의 비자명 (0 아닌) 값들과 데이터 출력부를 포함하는 회로를 제공하며, 상기 회로는 상기 지도를 이용하여 상기 메모리로부터 비자명 (0 아닌) 데이터를 검색하도록 구성되며 그리고 그 검색된 데이터를 상기 데이터 출력부 상에서의 압축된 구조로서 제공하도록 구성된다. 상기 메모리는 레지스터, 복수의 레지스터들 및/또는 레지스터 파일을 적합하게 포함한다. 상기 위치들은 하나의 비트 지도 (bit map)로서 저장될 수 있을 것이며, 그 비트 지도 내의 각 비트는 상기 저장된 구조의 하나의 개별 데이터 값에 대응할 수 있을 것이다. 복수의 비교기들이 제공될 수 있을 것이며, 각 비교기는 데이터 값이 비자명한 것인가의 여부를 식별하며, 각 비교기의 출력은 상기 지도의 하나의 입력으로서 제공된다. 상기 비교기 입력들은 상기 메모리의 읽기 포트들, 상기 메모리의 쓰기 포트들 및/또는 프로세서 로드/저장 포트들에 의해서 제공될 수 있을 것이다.
상기 데이터 출력부는 데이터 버스를 포함할 수 있을 것이며, 상기 회로는 상기 압축된 구조를 상기 메모리로부터 상기 데이터 버스 상으로 순차적으로 출력하도록 구성된다. 상기 회로는, 상기 지도로부터 0 아닌 값들의 개수를 계산하기 위한 적어도 하나의 덧셈기를 더 포함할 수 있을 것이다. 상기 회로는, 0 아닌 데이터를 상기 메모리로부터 상기 데이터 출력부로 쓰는 것을 순차적으로 가능하게 하기 위한 로직을 더 포함할 수 있을 것이다. 상기 로직은 덧셈기들의 배열을 포함할 수 있을 것이며, 상기 배열 내의 연속하는 덧셈기 각각은 상기 배열 내의 선행 덧셈기의 출력인 입력을 구비한다. 각 덧셈기는 상기 구조 내의 연관된 하나의 데이터 값에 대응할 수 있을 것이며, 그리고 각 덧셈기는 상기 연관된 데이터 값에 대응하는 입력을 상기 지도로부터 받아들일 수 있을 것이다. 상기 회로는 정수 비교기들의 트리 (tree)를 더 포함할 수 있을 것이며, 각 정수 비교기는 두 정수 입력들을 비교하기 위한 것이며, 각 비교기의 첫 번째 입력은 상기 덧셈기 트리 내의 하나의 대응 덧셈기로부터의 출력이다. 각 비교기로의 두 번째 입력은 시퀀싱 (sequencing) 신호이다. 상기 회로는, 상기 데이터 출력부로 비자명 (non-trivial) 데이터를 정확하게 연속으로 쓰는 것을 보증하기 위해서 상기 지도로부터의 값들을 개별 비교기 출력들과 결합하기 위한 결합기를 더 포함할 수 있을 것이다. 상기 회로는, 상기 회로의 동작을 제어하기 위한 제어기를 더 포함할 수 있을 것이다. 상기 제어기는 상기 지도의 콘텐트들을 하나의 출력으로서 제공하도록 또한 적응될 수 있을 것이다. 프로세서에는 하나 또는 그 이상의 상기 회로들이 포함되어 제공될 수 있을 것이다.
추가의 실시예에서, 압축된 구조로부터 압축 해제된 구조를 추출하기 위한 회로가 제공된다. 상기 회로는, 개별의 비자명 (non-trivial) 데이터 값들의 압축된 구조를 받아들이는 입력부, 상기 압축 해제된 구조 내의 상기 비자명 데이터 값들의 위치들을 식별하는 지도를 수신하기 위한 지도 레지스터, 상기 압축 해제된 구조를 저장하기 위한 메모리를 포함하며, 상기 회로는 개별 입력된 비자명 데이터 값들을 상기 지도 레지스터의 내용들에 따라서 상기 메모리에 채우도록 구성된다. 상기 메모리는 복수의 레지스터들을 포함할 수 있을 것이다. 상기 위치들은 하나의 비트 지도 (bit map)로서 저장될 수 있을 것이며, 상기 비트 맵 내의 각 비트는 상기 압축 해제된 구조 내의 하나의 개별 데이터 값에 대응한다.
상기 데이터 입력부는 데이터 버스를 포함하며, 그 경우에 상기 회로는 상기 압축된 구조를 상기 데이터 버스로부터 상기 메모리로 순차적으로 입력하도록 구성된다. 상기 회로는,상기 지도로부터 비자명 값들의 개수를 계산하기 위한 적어도 하나의 덧셈기를 더 포함할 수 있을 것이다. 상기 회로는, 비자명 데이터를 상기 데이터 입력부로부터 메모리로 쓰는 것을 순차적으로 가능하게 하기 위한 로직을 더 포함할 수 있을 것이며, 적합하게는 상기 로직은 덧셈기들의 배열을 포함한다. 상기 배열 내의 연속하는 덧셈기 각각은 상기 배열 내의 선행 덧셈기의 출력인 입력을 구비할 수 있을 것이다. 각 덧셈기는 상기 압축 해제된 구조 내의 연관된 데이터 값에 대응할 수 있을 것이며, 그리고 각 덧셈기는 상기 연관된 데이터 값에 대응하는 입력을 상기 지도로부터 받아들인다. 상기 회로는 정수 비교기들의 배열을 더 포함할 수 있을 것이며, 상기 정수 비교기 각각은 두 정수 입력들을 비교하기 위한 것이며, 각 비교기의 첫 번째 입력은 상기 덧셈기 배열 내의 대응 비교기로부터의 출력이다. 각 비교기로의 두 번째 입력은 시퀀싱 신호일 수 있다. 상기 회로는, 상기 데이터 출력부로 비자명 (non-trivial) 데이터를 정확하게 연속으로 쓰는 것을 보증하기 위해서 상기 지도로부터의 값들을 개별 비교기 출력들과 결합하는 결합기를 더 포함할 수 있을 것이다. 상기 회로는, 상기 회로의 동작을 제어하기 위한 제어기를 더 포함할 수 있을 것이다. 상기 회로는 지도 입력부를 더 포함할 수 있을 것이며, 상기 회로는 상기 지도로부터 상기 지도 레지스터로 하나의 지도를 로드 (load)하도록 적응된다. 적합하게는, 상기 회로는 집적 회로 상에서 제공될 수 있을 것이다. 적합하게는, 상기 자명한 (trivial) 데이터 값은 0의 데이터 값이며, 상기 비자명 (non-trivial) 데이터 값들은 0 아닌 데이터 값들이다. 상기 애플리케이션은 적어도 하나의 이런 회로들을 병합하는 프로세서로 확대된다.
추가의 실시예는, 데이터 구조를 저장하라는 명령어에 응답하는 압축 회로를 포함하는 프로세서 칩을 제공하며, 상기 압축 회로는 저장을 위한 압축된 포맷을 제공하기 위해 상기 구조로부터 자명한 값들 (trivial-values)을 제거하도록 구성된다. 상기 압축 회로는 상기 구조 내의 자명한 값들의 위치들을 식별하는 지도를 제공하도록 구성될 수 있을 것이다. 상기 프로세서는 상기 프로세서 칩은 압축된 포맷 데이터를 로드 (load)하기 위한 명령어에 응답하는 압축 해제 회로를 더 포함할 수 있을 것이며, 상기 압축 해제 회로는 자명한 값들을 로드되었던 그대로의 상기 압축된 데이터 내부에 다시 채우도록 구성된다. 상기 압축 해제 회로는 자명한 값들을 다시 채우기 위해 지도를 채택할 수 있을 것이다. 적합하게는, 자명한 (trivial) 데이터 값은 0의 데이터 값이며, 상기 비자명 (non-trivial) 데이터 값들은 0 아닌 데이터 값들이다.
따라서, 다른 실시예는 데이터 값들의 구조를 압축하는 무손실 방법을 제공하며, 이 방법은, 상기 구조 내에 있는 자명한-엔트리 값들의 위치들을 식별하는 단일 지도를 생성하는 단계 및 상기 단일 지도 내의 정보로부터 단독으로 압축 해제될 수 있는 압축된 구조를 제공하기 위해 상기 구조로부터 상기 식별된 자명한-엔트리 값들을 제거하는 단계를 포함한다. 상기 데이터 값들은 부동 소수점 수들 (단일 또는 2배 정밀도), 확장된 정밀도의 부동 소수점 숫자들, 128-비트 정밀도의 부동 소수점 숫자들 또는 정수들일 수 있다.
적합하게는, 상기 지도는 개별 데이터 값을 나타내는 비트 지도의 각 비트를 구비한 비트맵을 포함할 수 있을 것이다. 상기 위치들을 식별하는 단계는 각 데이터 값이 자명한-엔트리 값인가를 판별하기 위해 그 각 데이터 값을 비교하는 것을 포함할 수 있을 것이다. 각각의 비교의 출력들은 0 아닌 값들의 개수를 위한 카운트를 제공하기 위해 합해질 수 있을 것이다. 상기 카운트는 상기 압축된 구조의 크기 및/또는 상기 압축된 구조에 제공될 엔트리들의 개수를 판별하기 위해 사용될 수 있을 것이다. 각각의 비교의 출력들은, 상기 압축된 구조로 데이터 값들을 쓰는 것을 가능하게 하기 위해 사용될 수 있을 것이다. 상기 구조는 행렬일 수 있을 것이며, 상기 지도는 행들과 열들의 개수를 식별할 수 있을 것이다. 이익을 주는 배치에서, 상기의 자명한-엔트리 값들은 0의 값들이며 상기 비자명 값들은 0이 아니다.
추가의 실시예는 복수의 비자명 데이터 값들과 상기 복수의 비자명 데이터 값들에 대해 자명한 데이터 값들의 위치들을 나타내는 지도를 제공하며, 상기 자명한-엔트리 값들은 0의 값들이며 비자명 값들은 0이 아니다. 상기 지도는 하나의 비트 지도를 포함하며, 개별 데이터 값 각각은 개별 비트에 의해 표시된다.
다른 실시예는 압축된 데이터 구조를 압축 해제하는 방법을 제공하며, 상기 압축된 구조는 복수의 비자명 데이터 값들 및 압축되지 않은 구조 내에서 비자명 값들의 위치들을 나타내는 지도를 포함한다. 상기 방법은, 채워지지 않은 압축되지 않은 구조를 제공하는 단계, 상기 비자명 값들을 검색하는 단계 및 채워진 압축 해제된 데이터 구조를 제공하기 위해, 상기 지도 내에 표시된 자신의 위치들에 따라서 상기 비자명 값들을 상기 채워지지 않은 구조 내에 채우는 단계를 포함한다. 이익이 되는 배치에서, 상기 자명한-엔트리 값들은 0의 값들이며 상기 비자명 값들은 0이 아니다. 이런 경우에, 0 아닌 값들에 의해 채워지기 이전에, 상기 채워지지 않은 행렬 내의 값들이 0으로 초기화된다. 대안으로, 상기 지도 내에서 0의 값들로서 식별된 상기 채워진 구조 내의 위치들은 0으로 설정될 수 있을 것이다. 상기 지도는 개별 데이터 값을 나타내는 비트 지도의 각 비트를 구비한 비트맵을 포함할 수 있을 것이다. 상기 비트맵의 개별 비트들은 상기 압축된 구조 내의 0 아닌 값들의 개수를 위한 카운트를 제공하기 위해 합해질 수 있을 것이다. 상기 카운트는 상기 채워지지 않은 구조 내로 읽혀질 데이터 값들의 양을 판별하기 위해 채택될 수 있을 것이다. 적합하게는, 상기 압축되지 않은 구조로 데이터 값들을 쓰는 것을 가능하게 하기 위해 상기 지도가 채택될 수 있을 것이다. 상기 구조는 행-열 구성을 구비한 행렬을 포함할 수 있을 것이다.
이와 같은 그리고 다른 실시예들, 특징들 및 이점들이 이어지는 예시적인 설명으로부터 명백하게 될 것이다.
본 발명은 첨부된 도면들을 참조하여 설명될 것이다.
도 1은 본 발명에 따른 압축 방법의 예시적인 흐름도이다.
도 2는 도 1의 방법의 결과인 압축되지 않은 구조와 그 구조의 결과적인 압축된 구조의 예이다.
도 3은 본 발명에 따른 압축 해제 방법의 예시적인 흐름도이다.
도 4는 본 발명에 따른 예시적인 프로세서이다.
도 5는 도 4의 프로세서 내에 포함되기에 적합한 예시적인 압축 해제 회로이다.
도 6은 도 5의 동작을 설명하는 예시적인 타이밍도이다.
도 7은 도 4의 프로세서 내에 포함되기에 적합한 예시적인 압축 해제 회로이 다.
도 8은 도 7의 동작을 설명하는 예시적인 타이밍도이다.
도 9는 도 5 및 도 7의 회로들이 어떻게 결합될 수 있는가를 보여주는 예시적인 구조이다.
본원은 3D 컴퓨터 그래픽, 게임 물리학 (강체 역학 (rigid-body dynamics)), 유한 요소 분석 (Finite-Element Analysis (FEA)) 및 검색 엔진들에서 사용되는 것과 같은 대규모의 부동 소수점 행렬 데이터-세트들에 포함된 0의 데이터 값들을 이용하는 새로운 접근 방법을 채택한다. 그러나, 본원은 다른 데이터 구조들에도 적합하며 행렬 기반의 구조들만으로 한정되는 것은 아니다.
여러 행렬들에 대해서, 상기 엔트리들의 많은 개수는 32비트 또는 64 비트의 부동 소수점 표현을 유지하면서 0으로 채워지며, 이는 온 칩 (on chip) 또는 오프-칩 (off-chip) 메모리로부터 페치 (fetch)되어야 하며, 프로세서가 메모리나 레지스터들로부터 페치된 0의 값들에 대한 자명한 동작들 (trivial operations)을 실행하느라 분주하도록 유지시킬 수 있다.
본원은 0의 데이터 값들이 제거된 압축된 구조 내에서 행들 및 열들의 데이터 값들이 채워진 행렬 구조를 저장하는 것을 제공한다. 상기 행렬 구조 내의 0의 값 및 0이 아닌 값들의 위치들을 식별하는 압축된 구조를 위해서 연관된 지도가 제공되며, 상기 행렬 구조의 손실없는 재구축을 허용한다. 하나의 값이 자명한 (trivial) 값으로서 식별되지 않는다면 그것은 비자명 값이며 그 반대도 그러하다 는 것은 명확한 것이기 때문에, 그런 지도는 자명한 값들의 위치를 식별하는 것으로서 또는 비자명 값들의 위치들을 식별하는 것으로서 간주될 수 있을 것이라는 것이 인정될 것이다. 본 발명에 따른 이 방법은 종래 기술에 비해 수많은 막대한 이익들을 제공한다. 첫째로, 상기 방법은 무손실 (lossless)이며, 두 번째로, 상기 방법은 하드웨어로 쉽게 구현될 수 있을 것이며, 그래서 메모리로 로드될 때에 압축된 구조를 압축 해제하는 것과 보통은 연관되는 계산상의 부하를 줄이도록 한다. 유사하게, 추가적인 프로세싱 자원들을 초래하지 않으면서 데이터가 압축된 형상으로 저장될 수 있다.
이 지도는 상기 압축된 구조와 함께 또는 복잡한 데이터-구조들로의 랜덤 액세스가 필요한 경우인 인덱싱 (indexing) 구조의 일부로서 메모리 내에 저장될 수 있을 것이다.
본원의 기술의 이점은, 32개 데이터-구조 엔트리들까지를 나타내기 위해 32비트 비트맵이 사용된다는 것을 가정하면, 그 기술은, 단일 정밀도 값들에 대해서 32 비트부터 1 비트까지 또는 2배 정밀도 값들에 대해서는 64 비트부터 1 비트까지의 0의 값 숫자들에 대한 메모리로부터의 전송 요구들을 줄여준다는 것이다. 명백하게 상기 비트맵 크기는, 일반성을 잃지 않으면서도, 약 32개 엔트리들을 구비한 데이터-구조들을 위해 제공되도록 조절될 수 있다.
도 1의 예시적인 순차 흐름도 그리고 도 2의 16개의 32비트 단일 정밀도 엔트리들을 포함하는 예시적인 4x4 행렬을 참조하여 동작 모드가 이제 설명될 것이다.
압축될 첫 번째 엔트리를 행렬 구조로부터 검색함으로써 프로세스가 시작한다. 첫 번째 엔트리는 그것이 0의 값 (zero value) 또는 0 아닌 값 (non-zero value) 인가의 여부를 판별하기 위해 비교된다. 그 비교의 결과에 따라서, 그 첫 번째 값을 0으로서 또는 0 아닌 값으로서 식별하기 위해서 한 엔트리가 지도의 첫 번째 위치에서 위치된다. 적합하게는, 상기 지도는 비트맵이며, 상기 행렬 구조 내의 각 값이 상기 비트맵 내의 하나의 비트와 연관된다. 상기 첫 번째 엔트리가 0의 값인 경우, (예를 들면 상기 행렬 데이터를 압축된 저장소로 전송하는 동안에) 그 엔트리는 버려지거나, 삭제되거나 또는 나중의 처리 또는 삭제에 대비하여 태그되며 그리고 상기 행렬에 대해 하나의 영의 값이 존재한다는 것을 나타내기 위해, 예를 들면, 첫 번째 비트를 0으로 설정함으로써 하나의 엔트리가 상기 지도의 상기 첫 번째 위치에 위치된다. 상기 행렬의 상기 첫 번째 값이 0 아닌 값인 경우에, 예를 들면, 도 2의 첫 번째 엔트리가 1.0 이면, 상기 지도의 첫 번째 엔트리는 1로 설정되어 0 아닌 값이라는 것을 나타낸다. 동시에 상기 첫 번째 엔트리는 상기 압축된 구조 내의 첫 번째 엔트리로서 저장된다.
그러면 상기 프로세스는 상기 행렬 내의 남아있는 각 엔트리에 대해 반복된다. 도시된 예시적인 행렬에서, 엔트리들은 행마다 스캔되지만, 열 (column) 단위의 스캐닝 역시 채택될 수 있을 것이며 또는 단일 비교기를 이용하여 순차적으로 동작하기보다는 단일 동작으로 상기 비트맵의 전체 행/열을 생성하기 위해 복수의 비교기들이 채택될 수 있을 것이라는 것이 인정될 것이다.
그러므로 1.0, 2.0, 3.0 및 4.0의 값을 가지는 첫 번째 행에 대해서, 어떤 엔트리들도 0의 값이 아니기 때문에, 대응하는 지도는 1111이며, 반면에, 두 번째 행에서 두 번째 값만이 0 아닌 값 (6.0)이기 때문에 상기 지도는 0100이다. 유사하게, 세 번째 행에 대해서, 상기 행의 첫 번째 3개의 값들이 0이가 때문에 상기 지도의 마지막 엔트리만이 1이다.
상기 압축 프로세스의 결과는, 16개 엔트리들 (각각이 단일 소수점 정밀도의 32비트)로서 메모리 내에 이전에 저장된 행렬이 9개의 엔트리들 (역시 각각이 32비트)의 압축된 행렬 그리고 이런 0 아닌 값들과 압축되지 않은 행렬 내의 대응하는 0의 값들의 위치들을 나타내는 16 비트 지도에 의해 교체될 수 있을 것이라는 것이다. 각 메모리 위치가 32 비트이기 때문에, 상기 행렬과 더불어서 저장되는 상기 지도를 저장하기 위해 16 이 아닌 32 비트가 필요하다. 그렇지만, 16x32 비트의 압축되지 않은 행렬 포맷 (전체 512 비트)은 9x32 비트의 압축된 행렬과 1x32 비트 지도 (전체 320 비트)로 교체되어 (512-320)/512 = 37.5%의 압축을 나타낸다.
(제로-필 (zero-fill)을 포함하는) 밀집 행렬 (dense-matrix)마다 1개 또는 그 이상의 엔트리들이 0 인 동안에는 압축이 이루어진다; 그러나 0 아닌 엔트리들에 대해서 엔트리 당 1 비트의 패널티가 존재하며, 이는 제로-필이 없는 밀집 데이터-세트들 (dense data-sets)을 저장하기 위해 더 많은 메모리가 사용된다는 결과로 귀결될 수 있을 것이다. 실제로, 3D 컴퓨터 그래픽, 게임 물리학 (강체 역학), 유한 요소 분석 (Finite-Element Analysis (FEA)) 및 검색 엔진 (예, Google)을 포함하는 관심 대상의 데이터-세트들은 드물며 많은 양의 제로-필 (zero-fill)을 포함한다.
본 출원이 복수의 행들 및 열들의 관점에서 설명되지만, 단일의 행이나 열을 포함하는 구조들을 압축하는 것에도 마찬가지로 적용 가능하다.
일부 환경에서는 행렬을 재구축하기 위해서 그 행렬의 열-행 (column-row) 구조, 즉, 행렬의 행과 열의 개수를 알 필요가 있을 수 있다고 알 수 있을 것이다. 그러나, 많은 수의 애플리케이션들에서 이것은 대부분 별 의미가 없으며, 이는 콘텐트들이 메모리에 검색되어, 즉, 도 2의 단일 열 내에서 보여지는 것과 같이 스칼라 모습으로 레지스터 내에 저장되기 때문이며, 소프트웨어/프로세서가 그 데이터를 하나의 행렬로서 다룬다. 추가로, 압축과 압축 해제의 방식 사이에서 일관성이 있으면, 행-열 구조는 묵시적으로 존재할 수 있을 것이다. 열-행 구조에 대해서 알 필요가 있는 그런 환경에서, 이는 상기 지도 내에/지도에 추가하여 포함될 수 있을 것이다.
도 3에 도시된 것과 같은, 압축된 구조를 압축되지 않은 구조로 확장하는 프로세스는 압축 방법의 역 과정이다. 비어있는 압축되지 않은 구조를 제공하고 지도를 로딩함으로써 상기 방법이 시작된다. 그러면 상기 지도의 첫 번째 비트는 자신이 0의 값인가 또는 0 아닌 값인가를 판별하기 위해 비교된다. 그 첫 번째 비트가 1이면, 상기 첫 번째 데이터 값이 메모리로부터 상기 압축되지 않은 구조의 첫 번째 엔트리로 로드된다. 유사하게, 상기 첫 번째 비트가 0이면, 0의 값이 상기 압축되지 않은 구조의 첫 번째 엔트리 내로 삽입된다. 상기 압축되지 않은 구조 내의 모든 값들이 0으로 초기화된 경우, 0의 값을 삽입하는 어떤 특정한 단계도 필요하지 않을 것이다. 이 프로세스는 상기 지도의 마지막에 도달할 때까지 또는 모든 데 이터 값들이 로드될 때까지 반복된다. 로드될 데이터 값들의 개수는 상기 지도 내의 0 아닌 개별 비트들 (압축된 0 아닌 행렬/벡터 엔트리들에 대응함)을 카운팅하여 간단하게 계산될 수 있을 것이다.
도 2의 압축된 구조를 압축 해제하는 경우에, 상기 지도의 첫 번째 4개의 값들이 1이기 때문에, 그 첫 번째 4개의 값들은 상기 압축된 구조로부터 상기 압축되지 않은 구조의 첫 번째 4개의 엔트리들 내부로 로드될 것이다. 상기 지도의 다섯 번째 비트가 0이기 때문에, 상기 압축되지 않은 구조의 다섯 번째 엔트리는 0의 값으로 채워질 것이다.
압축된 구조가 압축되지 않은 구조로 확장될 때조차, 압축된 구조를 위한 지도는 존속될 수 있을 것이며 커다란 이득을 위해서 그 후에 채택될 수 있을 것이다. 특히, 상기 지도는 본 출원인의 공동의 계속되는 출원에서 설명되는 것과 같이 곱셈, 덧셈 또는 다른 계산 연산의 결과로서 프로세서 내에서의 기능적인 유닛들의 제어에서 이익을 가져오게 하기 위해 사용될 수 있을 것이다.
효율을 위해서, 행렬 구조가 크기의 면에서 상대적으로 클 경우, 그 행렬 구조는 복수의 서브-행렬들로 분할될 수 있을 것이며, 분할-행렬들의 각각은 상기 행렬 구조의 일부를 나타낸다. 이런 배열에서, 상기 서브-행렬들의 각각은 상기에서 설명된 방식으로 개별적으로 압축될 수 있을 것이다.
비록, 상기의 방법이 소프트웨어로 구현될 수 있을 것이지만, 데이터가 도 4에 도시된 것과 같이 프로세서로 그리고 프로세서로부터 이동될 때에 상기 데이터가 하드웨어 내에서 압축 해제되고 압축되는 경우에, 속도를 프로세싱하는 데 있어 서의 막대한 이익이 얻어질 수 있을 것이다. 상기 선택된 압축 구조는 크기 조절 및 다른 조작들을 포함하는 종래 기술의 방법에 대비하여 하드웨어로 구현하기에 특히 적합하다는 것이 인식될 것이다. 상기 하드웨어 배치에서, 상기 프로세서는, 예를 들면, 행렬을 저장하고/검색하는 블록 형상으로 데이터를 저장하고 그리고/또는 검색하기 위한 특정한 명령어들을 구비하도록 적응될 수 있을 것이다. 비록 상기에서 설명된 것과 같이 프로세서 그 자체 내에 상기 지도를 채택하는데 막대한 이익이 있을 수 있을 것이며 그리고 유사하게 설명될 것과 같이 프로세서 하드웨어 내에서/ 프로세서 하드웨어와 결합하여 상기 지도를 생성하는 이익이 존재할 수 있을 것이지만, 그런 배치에서, 압축 및 압축 해제 프로세스들/하드웨어는 중앙 프로세서 코어에 투명 (transparent)할 수 있을 것이다.
어떤 경우에도, 압축/압축 해제 동작이 프로그래머/운영 소프트웨어에게 실질적으로 투명한 방식으로 유리하게 실행될 수 있을 것이라는 것이 인정될 것이다.
비록 온-칩 또는 오프-칩 메모리로부터 프로세서로 데이터를 로딩하고 저장하는 것을 참조하여 본 출원이 설명되었지만, 예를 들면, 공동 프로세서들 사이에서 데이터를 공유하는 것을 포함하는 다른 다양한 애플리케이션들이 가능하다는 것이 인식될 것이라는 것이 추가로 인정될 것이다.
메모로부터 프로세서로 로드되는 압축된 데이터 구조의 압축 해제/확장을 위해서 제공되는 예시적인 하드웨어 구현이 설명될 것이다. 예시의 목적으로, 아래의 표 1에서 도시된, 상대적으로 작은 3x3 (9개 엔트리)의 압축된 행렬이 사용되며, 그 경우에 A, B, C, D 및 E는 0 아닌 데이터 값들을 나타내며 101010101은 상기 3x3 행렬 내의 0 아닌 값들에 대한 지도이다. 실제로, 제안된 기술은 어떤 임의의 크기의 N x M 행렬 그리고 압축된 데이터에 대한 목적지 (destination)로서 서비스하는 N x M 개 엔트리들 이상이거나 그 엔트리들과 같은 엔트리들을 구비한 레지스터 파일로 확대될 수 있다.
A
B
C
D
E
101010101
도 5에 도시된 것과 같은, 예시적인 압축 해제 로직은 압축 비트맵 레지스터, 쓰기 주소 계산기, 쓰기 주소 비교기들, 결합기 및 목적지 온-칩 메모리를 포함한다. 상기 예시적인 장치에서, 이런 엘리먼트들은 제어기, 예를 들면, 주소 생성 유닛 (Address Generation Unit (AGU)) 또는 직접 메모리 액세스 (Direct Memory Access (DMA)) 제어기의 제어를 받는다. 이런 엘리먼트들의 구축 및 동작은 도 6의 예시적인 타이밍도를 참조하여 더 상세하게 설명될 것이다.
압축 비트맵 레지스터는 압축된 행렬 구조를 위해서 상기 지도를 저장하기에 충분한 크기를 가진 레지스터이며, 실제로, 이것은 지원될 N x M 압축 행렬 내의 각 엔트리에 대한 1-비트 엔트리에 대응한다. 예시적인 장치에서, 압축 비트맵 레지스터는 9 비트 (MCB0-MCB8)를 포함하며, 각 비트는 압축되지 않은 구조 내의 하나의 위치에 대응한다. 확장 프로세스의 시작에서, 제어기는 상기 지도를 온-칩 또는 오프-칩 메모리로부터 압축 비트맵 레지스터 내로 로드한다. 도 5의 비트맵 레지스터에서 도시된 값들은 순전히 예시적인 값들이라는 것이 인정될 것이다. 유사하게, 값 데이터는, 상기 압축된 행렬 데이터를 위한 읽기 주소를 생성하는 제어기의 제어에 따라서 data_in 버스를 통해서 메모리로부터 직렬로 전송된다. 대안으로, 데이터는 0 아닌 엔트리들의 그룹이 메모리로부터 전송될 수 있으며, 예를 들면, 비록 배선이 증가되는 문제점은 있지만, 2 x 32 비트 값들이 일반성을 잃지 않으면서 64비트 버스를 통해서 전송될 수 있다. 상기 제어기의 행동은 압축 해제 로직과 압축된 비트맵 레지스터에 의해 제어되며, 클락 사이클은 기준-주소 (base-address)에서 시작하는 페치될 바이트들의 개수 (byte_fetch)를 상기 쓰기 주소 계산기를 이용하여 생성하도록 허용된다.
상기 쓰기 주소 계산기는 온-칩 메모리 (레지스터 파일) 내의 각 엔트리에 대해 쓰기 주소들 (Write Addresses (WA))을 계산하기 위해서 2의 보수 정수 덧셈기들의 트리를 포함한다.
상기 트리 내의 각 덧셈기는 두 개의 입력들을 구비한다. 첫 번째 입력은 상기 비트맵 레지스터로부터의 대응 값이며, 즉, 상기 비트맵 레지스터 내의 첫 번째 엔트리 (MCB0)는 상기 첫 번째 덧셈기의 한 입력이다. 유사하게, 상기 비트맵 레지스터의 마지막 엔트리 (MCB8)는 상기 트리 내의 마지막 덧셈기의 한 입력이다. 각 덧셈기로의 두 번째 입력은 상기 트리 내의 이전 덧셈기로부터의 출력을 포함하며, 그래서, 상기 첫 번째 덧셈기 (WA0)의 출력은 상기 두 번째 덧셈기로의 한 입력이며, 유사하게 여덟 번째 덧셈기 (WA7)의 출력은 상기 마지막 덧셈기로의 한 입력이다.
상기 트리 내에서 상기 첫 번째 덧셈기보다 더 하위의 덧셈기는 없으므로, -1의 기준 입력이 제공되며, 이는 상기 레지스터 파일 내의 확대된 구조에 데이터를 저장할 때에 올바른 주소 지정 (addressing)을 보장하기 위한 것이다. 작은 정수 덧셈기들의 트리는 MAP 레지스터 내의 엔트리들을 기반으로 하여 레지스터 파일 목적지 (쓰기) 주소들을 생성한다. 도시된 이 특별한 예는 9-엔트리 레지스터 파일이며 상기 덧셈기 트리의 기준 주소는 -1로 설정된다. 더 큰 크기의 레지스터 파일의 경우에 (9개가 넘는 엔트리들), 상기 덧셈기-트리의 기준 주소를 base_adr - 1 로 설정하여, 3 x 3 행렬이 기준 주소로부터 시작하여 압축 해제될 수 있다. 후자의 경우에, 상기 3 x 3 행렬은 레지스터-파일 내에서 위치 0이 아니라 특정된 기준-주소에서 시작하여 위치가 정해질 것이다.
추가로, 덧셈기들의 트리 내에서 상기 마지막 덧셈기로부터의 출력이 byte_fetch 값으로서 제공되며, 이 값은 얼마나 많은 0 아닌 값들이 메모리로부터 검색될 필요가 있는가를 (AGU/DMA) 제어기에게 알린다. 이 바이트들은 데이터 버스 상에 순차적인 방식으로 로드될 것이다. 더 넓은 버스를 통해서 데이터가 쌍으로 또는 4의 그룹으로 전송되는 경우에, 전송될 64 또는 128 비트 데이터 워드들의 개수를 표시하기 위해 상기 byte_fetch 값으로부터 1개 또는 2개의 최하위 비트들 (least-significant-bits (Isbs)) 중의 어느 하나가 삭제 (그리고 반올림)될 것이다.
상기 쓰기 주소 비교기는 쓰기 주소들 (Write Addresses (WA))을 워드 포인터 (wrd_ptr) 값에 대비하여 비교하기 위해서 2의 보수 정수 비교기들의 트리를 포함하며, 상기 워드 포인터 값은 상기 제어기에 의해 제공되는 카운터 출력이며 그 워드 포인터 값은 0으로부터 덧셈기 트리의 마지막으로부터의 byte_fetch 출력의 값까지 증가한다.
상기 결합기는 AND 로의 AND 게이트들의 트리를 포함하며, 쓰기 주소 비교기 출력 각각은 자신의 대응 비트맵 레지스터 값을 구비하여, 데이터가 상기 데이터 버스로부터 상기 레지스터 파일 내로 적절한 위치에 로드되는 것을 허용하기 위한 쓰기 가능 (Write Enable (WEN)) 신호들을 생성하는 것을 허용한다. 특히, 언제 그리고 어디에서 데이터가 상기 레지스터 파일 내로 래치되어야 하는가를 결정하기 위해 상기 wrd_ptr 값은 상기 덧셈기 트리에 의해 생성된 WA 주소들 (출력들)에 대비하여 비교된다.
상기 비트맵 레지스터 내의 엔트리 (예를 들면, MCB1 , MCB3, MCB5, MCB7)가 0인 환경에서, 연관된 AND 게이트 (WEN1 , WEN3, WEN5, WEN7)의 출력은 인에이블 (enable)되지 않을 것이며, 그래서 어떤 데이터도 상기 레지스터 파일 내의 대응하는 위치들 (r1 , r3, r5, r7)로 로드되지 않을 것이라는 것이 명백하다. 이런 이유로 그것들은 타이밍도 내에 도시되지 않는다. 상기 레지스터 파일은 상기 프로세스 내에서의 초기화 단계로서 클리어될 수 있을 것이다 (모두 0의 값들로 설정된다). 상기 비교기 값이 AND에 부합하고 대응 MCB-비트가 1로 설정되면, reg-file WEN (write-enable) 비트는 하이 (high)로 설정된다. WEN 비트가 설정되면 data_in 버스의 콘텐트들이 올바른 레지스터-파일 레지스터에 써지도록 한다. 도시된 예에서, 첫 번째 쓰기 인에이블 신호 (WENO)는 wed_pr이 0이면 인에이블 될 것이며, 첫 번째의 0 아닌 엘리먼트 (A)를 상기 레지스터 파일의 위치 r0 으로 로드하도록 한다. 유사하게, 세 번째 쓰기 인에이블 신호 (WEN2)는, WA2 = MCB2{7} + WA1{= MCBI(O) + WAO(O)] = 1 이기 때문에, wrd_ptr 값이 1일 때에 인에이블될 것이며, 그래서 두 번째의 0 아닌 데이터 값 (B)이 상기 데이터 버스로부터 세 번째 레지스터 위치 r2로 로드될 것이다.
그 결과, 압축 해제/확장 프로세스의 끝에서, 상기 레지스터 파일은 그 내부에 포함된 압축되지 않은 구조를 구비할 것이며, 그 구조는 도시된 예에서 A,0,B,0,C,0,D,0,E,0 을 나타낼 것이다.
여기에서 3 x 3 압축 행렬에 대한 개략적인 동일한 일반 원칙이 어떤 임의의 N x M 압축된 행렬 그리고 압축 해제된 행렬 엔트리들을 위한 어떤 임의 크기의 레지스터 파일 목적지를 지원하기 위해 사용될 수 있다는 것이 인정될 것이다.
유사한 장치가 상기 압축 경로 (압축 회로)에 채택될 수 있을 것이다. 도 7에 도시된 압축 경로의 경우에, 상기 압축되지 않은 데이터 구조 내의 각 데이터 값 (즉, 각 레지스터 파일 엔트리)을 0.0과 비교하고 그리고 레지스터 파일 엔트리들이 0이 아닌 곳에서는 비트맵 엔트리 비트를 1로 설정하기 위해서 부동 소수점 비교기들의 트리가 요청된다. 9-엔트리 레지스터 파일에 대한 IEEE 단일 정밀도 레지스터 엔트리들의 예에서 그와 같은 9개의 부동 소수점 비교기들이 필요하다.
도 7에 도시된 것과 같은, 예시적인 압축 회로는 32비트 비교기들의 뱅크, 압축 비트맵 레지스터, 읽기 주소 계산기, 읽기 주소 비교기 및 결합기를 포함한다. 상기에서 설명된 확장 회로와 같이, 이런 엘리먼트들은 제어기, 예를 들면, 주소 생성 유닛 (Address Generation Unit (AGU)) 또는 직접 메모리 액세스 (Direct Memory Access (DMA)) 제어기의 제어를 받는다. 이런 엘리먼트들의 구성과 동작은 도 8의 예시적인 타이밍도를 참조하여 더 상세하게 설명될 것이다.
예시적인 장치에서, 압축되지 않은 구조 (r0-r8)가 레지스터 파일 내에 저장되며, 상기 레지스터 내의 값들 각각은 상기 비교기 뱅크 내의 대응하는 비교기로 제공되며, 상기 개별 값이 0 아닌 값인가 또는 0의 값인가의 여부를 판별하기 위해 상기 비교기 뱅크에서 비교가 이루어진다.
비록, 상기 비교기들이 상기 레지스터 파일로부터 읽어내는 값들로서 도시되지만, 상기 레지스터 파일 내의 어느 엔트리들이 0의 값/0 아닌 값들 인가를 나타내는 제로-비트 (zero-bit) 레지스터를 구비하는 것이 더 이득일 수 있을 것이다. 이 레지스터는 상기 레지스터 파일의 쓰기 포트들로 데이터가 래치되면 채워질 수 있을 것이다. 이 제로-비트 레지스터는 다른 목적들을 위해서 (예를 들면 계산들을 가속시키기 위해서) 채택되는 것이 이득일 것이며, 본 출원인이 공동으로 계속 중인 출원에서 아주 상세하게 설명된다. 압축 사이클의 시작 부분에서 비교할 필요가 없기 때문에, 이런 접근 방식은 클록-사이클을 절약하게 한다. 추가로, 상기 레지스터 파일 상에서의 병렬 비교들을 수행하기 위해 9개 읽기-포트들을 구비하는 것은 배선 및 전력의 관점 모두에서 구현하기에 매우 비싼데, 이와 같은 것에 대한 필요성이 제거된다. 이런 접근 방법의 추가의 이점들은 필요한 부동 소수점 비교기들의 개수가 줄어드는 것을 포함한다 (상기 레지스터 파일로 3개의 쓰기 포트들이 존재하는 곳인 예시적인 장치에서 3x).
다중의 로드/저장 포트들을 구비한 프로세서들 내에서, 단일의 로드/저장 포트를 구비한 프로세서의 경우에 공유될 수 있는 상기 압축/압축 해제 로직은 일단 각 독립적인 로드/저장 포트에 대해서 복제되어야 하며, 단일의 공유 레지스터-파일 또는 다중의 독립적인 레지스터-파일들이 채택되는가의 여부에 유의하여야 한다.
그럼에도 불구하고, 설명을 쉽게 하기 위해서, 동작의 모드는 도 7의 장치를 참조하여 설명될 것이며, 그 장치에서 비교기 뱅크로부터의 개별 출력들은 압축 비트맵 레지스터로의 입력들로서 제공되며, 이는 상기에서 설명된 것과 같이 압축된/압축되지 않은 행렬 구조를 위한 지도를 저장하기에 충분한 크기의 레지스터이다. 그러나, 일단 상기 비트맵 레지스터가 로드되면 서로 다른 두 장치들 사이에서 동작의 방식은 동일할 것이라는 것이 인정될 것이다. 상기 비교기 출력들은 압축 프로세스의 첫 번째 단계로서 상기 압축 비트맵 레지스터로 로드된다. 도 7의 비트맵 레지스터에서 도시된 값들은 순전히 예시적인 값들이라고 인정될 것이다.
상기 제어기의 행동은 압축 로직과 압축된 비트맵 레지스터에 의해 제어되며, 읽기 주소 계산기를 이용하여 기준-주소에서 시작하여 저장될 바이트들의 개수 (byte_store - 이하에서 설명됨)를 생성하기 위한 클락-사이클이 허용된다
상기 읽기 주소 계산기는 온-칩 메모리의 각 엔트리 (레지스터-파일)에 대한 읽기 주소들 (Read Addresses (RA))을 계산하기 위해 2의 보수 (도시된 예에서 5 비트) 정수 덧셈기들의 트리를 포함한다. 그 트리의 각 덧셈기는 두 개의 입력들을 구비한다. 첫 번째 입력은 상기 비트맵 레지스터로부터의 대응 값이며, 즉, 상기 비트맵 레지스터의 첫 번째 엔트리는 첫 번째 덧셈기로의 한 개의 입력이다. 유사하게, 상기 비트맵 레지스터의 마지막 엔트리는 상기 트리 내의 마지막 덧셈기로의 한 개의 입력이다. 각 덧셈기의 두 번째 입력은 상기 트리 내의 이전 덧셈기로부터의 출력을 포함하며, 그래서 첫 번째 덧셈기 (RA0)의 출력은 두 번째 덧셈기로의 입력이며, 유사하게 여덟 번째 덧셈기 (RA7)의 출력은 마지막 덧셈기로의 입력이다.
상기 첫 번째 덧셈기는 상기 트리 내에서 더 하위의 덧셈기를 가지지 않기 때문에, 0의 기준 입력 (즉, 입력 없음)이 제공되며, 이는 상기 레지스터 파일로부터 데이터를 읽을 때에 올바른 주소 지정을 보장한다. 정수 덧셈기들의 트리는 MAP 레지스터 내의 엔트리들을 기반으로 하여 레지스터 파일 목적지 (읽기) 주소들을 생성한다.
덧셈기들의 상기 트리 내의 마지막 덧셈기로부터의 출력은 byte_store 값으로서 제공되며, 이 값은 얼마나 많은 0 아닌 값들이 상기 압축된 구조 내에 또는 오프-칩 메모리 상에 저장될 필요가 있는가를 (AGC/DMA) 제어기에게 알린다. 이 바이트들은 데이터 버스를 경유하여 순차적인 방식으로 저장될 것이다 (data_out).
상기 읽기 주소 비교기는 읽기 주소 (Read Addresses (RA))를 워드 포인터 (rd_ptr) 값에 대해서 비교하기 위한 2의 보수 정수 비교기들의 트리를 포함하며, 상기 워드 포인터 값은 상기 제어기에 의해 제공되는 카운터 출력이며, 0에서부터 덧셈기 트리의 최종단으로부터의 byte_store 출력의 값까지 증가한다.
상기 결합기는 AND 게이트들의 트리를 포함한다. 각 AND 게이트는 상기 읽기 주소 비교기 출력을 자신의 대응 비트맵 레지스터 값과 결합하여 읽기 인에이블 (Read Enable (REN)) 신호들을 생성하여 상기 레지스터 파일로부터 데이터가 적절한 위치에서 추출되도록 한다. 특히, rd_ptr 값은 상기 덧셈기 트리에 의해 생성되는 RA 주소들 (출력들)에 대해서 비교되어 데이터가 상기 레지스터 파일로부터 언제 그리고 어디에서 읽혀져만 하는가를 판별하도록 한다.
상기 비트맵 레지스터 내의 엔트리 (예를 들면. MCB1 , MCB3, MCB5, MCB7)가 0인 환경에서는, 연관된 AND 게이트의 출력 (REN1 , REN3, REN5, REN7)이 인에이블 되지 않을 것이며, 그래서 상기 레지스터 파일 내의 대응 위치들 (r1 , r3, r5, r7)로부터 어떤 데이터도 읽혀지지 않을 것이라는 것이 명백하다. 이런 이유로, 그것들은 타이밍도에는 도시되지 않는다.
상기 비교기 값이 AND에 부합하면 대응 MCB-비트는 1로 설정되고 reg-file REN (read-enable) 비트는 하이 (high)로 설정된다. REN 비트는 설정되면 상기 레지스터 파일 내의 선택된 엔트리의 콘텐트들이 상기 data_out 버스 상에 놓이도록 한다. 도시된 예에서, 첫 번째 읽기 인에이블 신호 (REN0)는 rd_ptr이 0일 때에 인에이블 될 것이며, 첫 번째의 0 아닌 엘리먼트 (A)를 상기 레지스터 파일의 위치 r0 으로부터 data_out 상으로 읽어내는 것을 가능하게 한다. 유사하게, 세 번째 읽기 인에이블 신호 (REN2)는, RA2 = MCB2{7} + RA1 {7} = 2이기 때문에, rd_ptr 값이 2일 때에 인에이블 될 것이며, 그래서 두 번째의 0 아닌 데이터 값 (C)이 세 번째 레지스터 위치 r2로부터 data_out 상으로 래치될 것이다.
그 결과, 상기 압축 프로세스의 끝에서, 상기 레지스터 파일은, 상기 제어기에 의해 상기 지도 레지스터로부터의 지도와 함께 온-칩 또는 오프-칩 메모리에 저장된, A, C, E, G 그리고 I 의 값들을 data_out 상으로 위치시킬 것이다.
3 x 3 압축되지 않은 행렬들에 대해서 여기에서 개요가 설명된 동일한 일반적인 원칙이 어떤 임의의 N x M 압축되지 않은 행렬을 지원하기 위해서 사용될 수 있다는 것이 인정될 것이다.
제어기의 일반적인 제어 하에서의 압축과 압축 해제를 위해서 동일한 하드웨어가 사용될 수 있을 것이라는 것이 상기의 설명들로부터 인정될 것이다.
그런 결합된 장치가 도 9에서 도시되며, 이는 상기에서 설명된 레지스터-파일 쓰기-포트들에 부착된 비교기들을 구비한 장치를 또한 병합한다. 이 예에서, 레지스터-파일로 연결된 프로세서 데이터-경로는 3개의 쓰기 포트들을 필요로 한다. 실제로, 상기 제안된 설계는 임의 개수의 레지스터-파일 쓰기-포트들로 그리고 임의 개수의 엔트리들을 구비한 레지스터-파일들로 쉽게 확대될 수 있다. 온-칩 또는 오프-칩 저장을 위해서 데이터를 압축하거나 또는 온-칩 또는 오프-칩 저장부로부터 상기 레지스터 파일로 데이터가 로드될 때에 그 데이터를 확대하기 위해 필요하면 상기 wr_ptr, rd_ptr 및 다른 신호들이 상기 제어기에 의해 동작되고/수신된다는 것이 인정될 것이다.
-1의 base_addr은 설명을 용이하게 하기 위해 도시되지 않았다.
라이트 백 (write-back) 부동 소수점 비교기들의 지연이 프로세서의 실행 경로와 연달아서 발생하지 않는다는 것을 보장하기 위해서 추가의 실행 파이프라인 스테이지가 필요할 수 있을 것이며, 보장되지 않는다면, 이는 최대 클럭-속도를 제한할 수 있을 것이며 그래서 프로세서의 FLOPS 속도를 제한할 수 있을 것이다.
본원에서 설명된 새로운 접근 방식은, 예를 들면, 자명한 값들을 저장하기 위해 필요한 메모리를 줄임으로써 프로세서에 의해 요청되는 메모리 대역폭에서의 감소, 압축되거나 또는 압축되지 않은 경우의 스칼라, 벡터 및 행렬 데이터를, 메모리로의 그리고 메모리로부터의 온-칩 또는 오프-칩 버스들을 통한 대역폭에서의 관점에서, 효율적으로 이동시키기 위해 필요한 버스들의 크기에서의 감소, 전력 낭비의 감소, 메모리 또는 프로세서 레지스터들로부터 읽혀질 때의 압축된 스칼라, 벡터 및 행렬 데이터 상에서 동작하는 프로세서의 유효 프로세싱 파워 (FLOPS) 향상 및 프로세서의 지연 감소를 포함하는 수많은 막대한 이득을 제공한다.
첨부된 도면들에서, 선들은 복수의 라인들에 대응할 수 있을 것이며, 이는 옆에 숫자가 붙은 사선에 의해 표시되는 것으로 인정될 것이며, 그래서 예를 들면 도 9에서 store_data 버스는 32 비트 버스인 것을 나타내며, 반면에 상기 Adder Tree로부터의 출력 각각은 5 비트이다.
본 명세서에서 사용되는 포함/포함하고 있는의 단어들은 선언된 특징들, 정수들, 단계들 또는 컴포넌트들의 존재를 특정하기 위한 것이지만, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 컴포넌트들 또는 그것들의 그룹의 존재나 추가를 제외하는 것은 아니다.
본 발명은, 데이터 압축 그리고 더 상세하게는 데이터를 포함하는 구조들을 압축하는 분야에 관한 것으로, 컴퓨터와 같은 장치에서 구현 비용을 최소화하고 구현의 압축/압축해제 속도를 최대화하면서도 메모리 액세스의 비용을 최소화하는 컴퓨팅 시스템들을 설계할 수 있도록 한다.

Claims (88)

  1. a) 개별 데이터 값들의 구조를 저장하는 데이터 메모리;
    b) 상기 구조 내의 0 아닌 (nonzero) 값들의 위치들을 나타내는 지도를 저장하기 위한 지도 메모리;
    c) 데이터 출력부;를 포함하는 압축 회로로서,
    상기 회로는 상기 지도를 이용하여 상기 데이터 메모리로부터 0 아닌 데이터를 검색하고 상기 데이터 출력부 상에서 상기 지도를 나타내는 데이터와 결합한 압축된 구조로서 상기 검색된 데이터를 제공하도록 구성된, 압축 회로.
  2. 제1항에 있어서,
    상기 데이터 메모리는 복수의 레지스터들을 포함하는, 압축 회로.
  3. 제1항에 있어서,
    상기 데이터 메모리는 하나의 레지스터 파일을 포함하는, 압축 회로.
  4. 제1항에 있어서,
    상기 지도 메모리는 하나의 레지스터를 포함하는, 압축 회로.
  5. 제4항에 있어서,
    상기 위치들은 하나의 비트 지도 (bit map)로서 저장되는, 압축 회로.
  6. 제5항에 있어서,
    상기 비트 지도 내의 각 비트는 상기 저장된 구조 내의 개별 데이터 값에 대응하는, 압축 회로.
  7. 제1항에 있어서, 상기 회로는,
    복수의 비교기들을 더 포함하며,
    각 비교기는 데이터 값이 0 아닌가 (non-zero)의 여부를 식별하며,
    각 비교기의 출력은 상기 지도 메모리로의 입력으로서 제공되는, 압축 회로.
  8. 제7항에 있어서,
    상기 비교기 입력들은 상기 데이터 메모리의 읽기 포트들에 의해 제공되는, 압축 회로.
  9. 제7항에 있어서,
    상기 비교기 입력들은 상기 데이터 메모리의 쓰기 포트들에 의해 제공되는, 압축 회로.
  10. 제7항에 있어서,
    상기 비교기 입력들은 프로세서 로드/저장 (load/store) 포트들에 의해 제공되는, 압축 회로.
  11. 제2항에 있어서,
    상기 데이터 출력부는 데이터 버스를 포함하며,
    상기 회로는 상기 압축된 구조를 상기 메모리로부터 상기 데이터 버스 상으로 순차적으로 출력하도록 구성된, 압축 회로.
  12. 제2항에 있어서, 상기 회로는,
    상기 지도로부터 0 아닌 값들의 개수를 계산하기 위한 적어도 하나의 덧셈기를 더 포함하는, 압축 회로.
  13. 제2항에 있어서, 상기 회로는,
    0 아닌 데이터를 상기 메모리로부터 상기 데이터 출력부로 쓰는 것을 순차적으로 가능하게 하기 위한 로직을 더 포함하는, 압축 회로.
  14. 제13항에 있어서,
    상기 로직은 덧셈기들의 배열을 포함하는, 압축 회로.
  15. 제14항에 있어서,
    상기 배열 내의 연속하는 덧셈기 각각은 상기 배열 내의 선행 덧셈기의 출력인 입력을 구비하는, 압축 회로.
  16. 제2항에 있어서,
    각 덧셈기는 상기 구조 내의 연관된 하나의 데이터 값에 대응하며, 그리고
    각 덧셈기는 상기 연관된 데이터 값에 대응하는 입력을 상기 지도로부터 받아들이는, 압축 회로.
  17. 제14항에 있어서,
    상기 회로는 정수 비교기들의 트리 (tree)를 더 포함하며,
    각 정수 비교기는 두 정수 입력들을 비교하기 위한 것이며,
    각 비교기의 첫 번째 입력은 상기 덧셈기 트리 내의 하나의 대응 덧셈기로부터의 출력인, 압축 회로.
  18. 제17항에 있어서,
    각 비교기로의 두 번째 입력은 시퀀싱 (sequencing) 신호인, 압축 회로.
  19. 제17항에 있어서, 상기 회로는,
    상기 데이터 출력부로 비자명 (non-trivial) 데이터를 정확하게 연속으로 쓰는 것을 보증하기 위해서 상기 지도로부터의 값들을 개별 비교기 출력들과 결합하 기 위한 결합기를 더 포함하는, 압축 회로.
  20. 제1항에 있어서, 상기 회로는,
    상기 회로의 동작을 제어하기 위한 제어기를 더 포함하는, 압축 회로.
  21. 제1항에 있어서,
    상기 데이터 값들은 단일 정밀도의 부동 소수점 숫자들인, 압축 회로.
  22. 제1항에 있어서,
    상기 데이터 값들은 2배 정밀도의 부동 소수점 숫자들인, 압축 회로.
  23. 제1항에 있어서,
    상기 데이터 값들은 확장된 (extended) 정밀도의 부동 소수점 숫자들인, 압축 회로.
  24. 제1항에 있어서,
    상기 데이터 값들은 128-비트 정밀도의 부동 소수점 숫자들인, 압축 회로.
  25. 제1항에 있어서,
    상기 데이터 값들은 정수들인, 압축 회로.
  26. 제1항에 있어서,
    상기 회로는 상기 지도의 내용들 (contents)을 하나의 출력으로서 또한 제공하도록 구성된, 압축 회로.
  27. 제1항에 있어서,
    상기 회로는 집적 회로 상에서 제공되는, 압축 회로.
  28. 제1항 내지 제27항 중의 한 항에 따른 적어도 하나의 회로를 포함하는 프로세서.
  29. 제28항에 있어서,
    상기 회로가 다중으로 존재하는, 프로세서.
  30. 압축된 구조로부터 압축 해제된 구조를 제공하는 압축 해제 회로로서, 상기 회로는,
    a) 개별의 비자명 (non-trivial) 데이터 값들의 압축된 구조를 받아들이는 입력부;
    b) 상기 압축 해제된 구조 내의 상기 비자명 데이터 값들의 위치들을 식별하는 지도를 수신하기 위한 지도 레지스터; 및
    c) 상기 압축 해제된 구조를 저장하기 위한 메모리;를 포함하는 압축 해제 회로로서,
    상기 회로는 개별 입력된 비자명 데이터 값들을 상기 지도 레지스터의 내용들에 따라서 상기 메모리에 채우도록 구성된, 압축 해제 회로.
  31. 제30항에 있어서,
    상기 메모리는 복수의 레지스터들을 포함하는, 압축 해제 회로.
  32. 제30항에 있어서,
    상기 메모리는 하나의 레지스터 파일을 포함하는, 압축 해제 회로.
  33. 제30항에 있어서,
    상기 위치들은 하나의 비트 지도 (bit map)로서 저장되는, 압축 해제 회로.
  34. 제33항에 있어서,
    상기 비트 지도 내의 각 비트는 상기 압축 해제된 구조 내의 하나의 개별 데이터 값에 대응하는, 압축 해제 회로.
  35. 제30항에 있어서,
    상기 데이터 입력부는 데이터 버스를 포함하며,
    상기 회로는 상기 압축된 구조를 상기 데이터 버스로부터 상기 메모리로 순차적으로 입력하도록 구성된, 압축 해제 회로.
  36. 제30항에 있어서, 상기 회로는,
    상기 지도로부터 비자명 값들의 개수를 계산하기 위한 적어도 하나의 덧셈기를 더 포함하는, 압축 해제 회로.
  37. 제30항에 있어서, 상기 회로는,
    비자명 데이터를 상기 데이터 입력부로부터 메모리로 쓰는 것을 순차적으로 가능하게 하기 위한 로직을 더 포함하는, 압축 해제 회로.
  38. 제37항에 있어서,
    상기 로직은 덧셈기들의 배열을 포함하는, 압축 해제 회로.
  39. 제38항에 있어서,
    상기 배열 내의 연속하는 덧셈기 각각은 상기 배열 내의 선행 덧셈기의 출력인 입력을 구비하는, 압축 해제 회로.
  40. 제39항에 있어서,
    각 덧셈기는 상기 압축 해제된 구조 내의 연관된 데이터 값에 대응하며, 그 리고
    각 덧셈기는 상기 연관된 데이터 값에 대응하는 입력을 상기 지도로부터 받아들이는, 압축 해제 회로.
  41. 제40항에 있어서,
    상기 회로는 정수 비교기들의 배열을 더 포함하며,
    상기 정수 비교기 각각은 두 정수 입력들을 비교하기 위한 것이며,
    각 비교기의 첫 번째 입력은 상기 덧셈기 배열 내의 대응 비교기로부터의 출력인, 압축 해제 회로.
  42. 제41항에 있어서,
    각 비교기의 두 번째 입력은 시퀀싱 신호인, 압축 해제 회로.
  43. 제41항에 있어서, 상기 회로는,
    상기 데이터 출력부로 비자명 (non-trivial) 데이터를 정확하게 연속으로 쓰는 것을 보증하기 위해서 상기 지도로부터의 값들을 개별 비교기 출력들과 결합하는 결합기를 더 포함하는, 압축 해제 회로.
  44. 제41항에 있어서, 상기 회로는,
    상기 회로의 동작을 제어하기 위한 제어기를 더 포함하는, 압축 해제 회로.
  45. 제30항에 있어서,
    상기 데이터 값들은 단일 정밀도의 부동 소수점 숫자들인, 압축 해제 회로.
  46. 제30항에 있어서,
    상기 데이터 값들은 2배 정밀도의 부동 소수점 숫자들인, 압축 해제 회로.
  47. 제30항에 있어서,
    상기 데이터 값들은 정수들인, 압축 해제 회로.
  48. 제30항에 있어서,
    상기 회로는 지도 입력부를 더 포함하며,
    상기 회로는 상기 지도로부터 상기 지도 레지스터로 하나의 지도를 로드 (load)하도록 구성된, 압축 해제 회로.
  49. 제30항에 있어서,
    상기 회로는 집적 회로 상에서 제공되는, 압축 해제 회로.
  50. 제30항 내지 제49항 중의 어느 한 항에 있어서,
    자명한 (trivial) 데이터 값은 0의 데이터 값이며, 상기 비자명 (non- trivial) 데이터 값들은 0 아닌 데이터 값들인, 압축 해제 회로.
  51. 제30항 내지 제50항 중의 어느 한 항에 따른 적어도 하나의 회로를 포함하는 프로세서.
  52. 제51항에 있어서,
    상기 회로가 다중으로 존재하는, 프로세서.
  53. 데이터 구조를 저장하라는 명령어에 응답하는 압축 회로를 포함하는 프로세서 칩으로서,
    상기 압축 회로는 저장을 위한 압축된 포맷을 제공하기 위해 상기 구조로부터 자명한 값들 (trivial-values)을 제거하도록 구성된 프로세서 칩.
  54. 제53항에 있어서,
    상기 압축 회로는 상기 구조 내의 자명한 값들의 위치들을 식별하는 지도를 제공하도록 구성된 프로세서 칩.
  55. 제53항에 있어서,
    상기 프로세서 칩은 압축된 포맷 데이터를 로드 (load)하기 위한 명령어에 응답하는 압축 해제 회로를 더 포함하며,
    상기 압축 해제 회로는 자명한 값들을 로드되었던 그대로의 상기 압축된 데이터 내부에 다시 채우도록 구성된, 프로세서 칩.
  56. 제55항에 있어서,
    상기 압축 해제 회로는 자명한 값들을 다시 채우기 위해 지도를 사용하는, 프로세서 칩.
  57. 제53항 내지 제56항 중의 어느 한 항에 있어서,
    상기 자명한 (trivial) 데이터 값은 0의 데이터 값이며, 상기 비자명 (non-trivial) 데이터 값들은 0 아닌 데이터 값들인, 프로세서 칩.
  58. 제1항에 있어서,
    상기 회로는 상기 검색된 개별 데이터를 상기 데이터 출력부 상에 동시에 다중으로 제공하도록 구성된, 압축 회로.
  59. 제58항에 있어서,
    상기 개별 데이터 값들은 x 비트의 길이이며 상기 데이터 출력부는 nx 비트 데이터 버스를 포함하고, 이 경우 n은 1 보다 큰 정수이며, n개 데이터 값들이 상기 데이터 버스 상에 동시에 위치하는, 압축 회로.
  60. 제30항에 있어서,
    상기 회로는 다중의 비자명 개별 데이터 값들의 상기 압축된 구조를 수신하도록 구성된, 압축 해제 회로.
  61. 제60항에 있어서,
    상기 개별 데이터 값들은 x 비트의 길이이고 상기 데이터 입력부는 nx 비트 데이터 버스를 포함하며, 이 경우 n은 1 보다 큰 정수이며, n개 데이터 값들이 상기 데이터 버스로부터 동시에 검색되는, 압축 회로.
  62. 데이터 값들의 구조를 압축하는 방법으로서,
    상기 방법은,
    상기 구조 내에 있는 0의 값들의 위치들을 식별하는 지도를 생성하는 단계; 및
    0 아닌 값들만으로 구성된 압축된 구조와 상기 지도를 제공하기 위해 상기 구조로부터 상기 식별된 자명한-엔트리 값들을 제거하는 단계;를 포함하는, 압축 방법.
  63. 제62항에 있어서,
    상기 데이터 값들은 부동 소수점 수들인, 압축 방법.
  64. 제62항에 있어서,
    상기 데이터 값들은 단일 정밀도의 부동 소수점 숫자들 또는 2배 정밀도의 부동 소수점 숫자들인, 압축 방법.
  65. 제62항에 있어서,
    상기 데이터 값들은 확장된 정밀도의 부동 소수점 숫자들 또는 128-비트 정밀도의 부동 소수점 숫자들인, 압축 방법.
  66. 제62항에 있어서,
    상기 데이터 값들은 정수들인, 압축 방법.
  67. 제62항 내지 제66항 중의 어느 한 항에 있어서,
    상기 지도는 개별 데이터 값을 나타내는 비트 지도의 각 비트를 구비한 비트맵을 포함하는, 압축 방법.
  68. 제62항 내지 제67항 중의 어느 한 항에 있어서,
    상기 위치들을 식별하는 단계는 각 데이터 값이 0 아닌 값인가를 판별하기 위해 그 각 데이터 값을 비교하는 것을 포함하는, 압축 방법.
  69. 제68항에 있어서,
    비교 각각의 출력들은 0 아닌 값들의 개수를 위한 카운트를 제공하기 위해 합해지는, 압축 방법.
  70. 제68항에 있어서,
    상기 카운트는 상기 압축된 구조의 크기를 판별하기 위해 사용되는, 압축 방법.
  71. 제68항에 있어서,
    상기 카운트는 상기 압축된 구조에 제공될 엔트리들의 개수를 판별하기 위해 사용되는, 압축 방법.
  72. 제68항에 있어서,
    비교 각각의 출력들은, 상기 압축된 구조로 데이터 값들을 쓰는 것을 가능하게 하기 위해 사용되는, 압축 방법.
  73. 제62항 내지 제72항 중의 어느 한 항에 있어서,
    상기 구조는 행렬이며,
    상기 지도는 행들과 열들의 개수를 식별하는, 압축 방법.
  74. 제62항에 있어서,
    상기 구조는 행-열 (row-column) 배열로 배치된 행렬을 포함하는, 압축 방법.
  75. 압축된 데이터 구조로서,
    복수의 0 아닌 데이터 값들; 및
    상기 구조의 비-압축된 형상 내에서, 복수의 비자명 데이터 값들에 대한 0인 데이터 값들의 위치들을 나타내는 지도를 포함하는, 압축된 데이터 구조.
  76. 제75항에 있어서,
    상기 지도는, 개별 비트에 의해 표시되는 각 개별 데이터 값을 구비한 비트 지도를 포함하는, 압축된 데이터 구조.
  77. 압축된 데이터 구조를 압축 해제하는 방법으로서,
    상기 압축된 구조는 복수의 0 아닌 데이터 값들 및 압축되지 않은 구조 내에서 0 아닌 값들의 위치들을 나타내는 지도를 포함하며,
    상기 방법은,
    채워지지 않은 압축되지 않은 구조를 제공하는 단계;
    상기 0 아닌 값들을 검색하는 단계; 및
    채워진 압축 해제된 데이터 구조를 제공하기 위해, 상기 지도 내에 표시된 자신의 위치들에 따라서 상기 0 아닌 값들을 상기 채워지지 않은 구조 내에 채우 는 단계;를 포함하는, 압축 해제 방법.
  78. 제77항에 있어서,
    0 아닌 값들에 의해 채워지기 이전에, 상기 채워지지 않은 행렬 내의 값들이 0으로 초기화되는, 압축 해제 방법.
  79. 제77항에 있어서,
    상기 지도 내에서 0의 값들로서 식별된 상기 채워진 구조 내의 위치들은 0으로 설정되는, 압축 해제 방법.
  80. 제77항에 있어서,
    상기 데이터 값들은 단일 정밀도의 부동 소수점 숫자들인, 압축 해제 방법.
  81. 제77항에 있어서,
    상기 데이터 값들은 단일 정밀도의 부동 소수점 숫자들인, 압축 해제 방법.
  82. 제77항에 있어서,
    상기 데이터 값들은 2배 정밀도의 부동 소수점 숫자들인, 압축 해제 방법.
  83. 제77항에 있어서,
    상기 데이터 값들은 정수들인, 압축 해제 방법.
  84. 제77항 내지 제83항 중의 어느 한 항에 있어서,
    상기 지도는 개별 데이터 값을 나타내는 비트 지도의 각 비트를 구비한 비트맵을 포함하는, 압축 해제 방법.
  85. 제84항에 있어서,
    상기 비트맵의 개별 비트들은 상기 압축된 구조 내의 0 아닌 값들의 개수를 위한 카운트를 제공하기 위해 합해지는, 압축 해제 방법.
  86. 제85항에 있어서,
    상기 카운트는 상기 채워지지 않은 구조 내로 읽혀질 데이터 값들의 양을 판별하기 위해 채택되는, 압축 해제 방법.
  87. 제77항 내지 제86항 중의 어느 한 항에 있어서,
    상기 압축되지 않은 구조로 데이터 값들을 쓰는 것을 가능하게 하기 위해 상기 지도가 사용되는, 압축 해제 방법.
  88. 제77항 내지 제87항 중의 어느 한 항에 있어서,
    상기 구조는 행-열 구성을 구비한 행렬을 포함하는, 압축 해제 방법.
KR1020097021425A 2007-03-15 2008-03-14 데이터 압축을 위한 회로 및 그 회로를 채택한 프로세서 KR20100029179A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
GB0704976.0 2007-03-15
GB0704976A GB2447494A (en) 2007-03-15 2007-03-15 A method and circuit for compressing data using a bitmap to identify the location of data values
US91127307P 2007-04-11 2007-04-11
US60/911,273 2007-04-11

Publications (1)

Publication Number Publication Date
KR20100029179A true KR20100029179A (ko) 2010-03-16

Family

ID=38008470

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097021425A KR20100029179A (ko) 2007-03-15 2008-03-14 데이터 압축을 위한 회로 및 그 회로를 채택한 프로세서

Country Status (8)

Country Link
US (1) US8713080B2 (ko)
EP (1) EP2137821A1 (ko)
JP (1) JP2010521728A (ko)
KR (1) KR20100029179A (ko)
CN (1) CN101689863A (ko)
GB (1) GB2447494A (ko)
IE (1) IES20080201A2 (ko)
WO (1) WO2008110633A1 (ko)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2457303A (en) * 2008-02-11 2009-08-12 Linear Algebra Technologies Randomly accessing elements of compressed matrix data by calculating offsets from non-zero values of a bitmap
US8751687B2 (en) * 2010-04-30 2014-06-10 Microsoft Corporation Efficient encoding of structured data
CN102739444A (zh) * 2012-06-12 2012-10-17 中兴通讯股份有限公司 一种性能数据传输方法、系统和网管
US9256502B2 (en) * 2012-06-19 2016-02-09 Oracle International Corporation Method and system for inter-processor communication
GB2551291B (en) 2013-05-23 2018-02-14 Linear Algebra Tech Limited Corner detection
US11768689B2 (en) 2013-08-08 2023-09-26 Movidius Limited Apparatus, systems, and methods for low power computational imaging
US9727113B2 (en) 2013-08-08 2017-08-08 Linear Algebra Technologies Limited Low power computational imaging
US9934043B2 (en) 2013-08-08 2018-04-03 Linear Algebra Technologies Limited Apparatus, systems, and methods for providing computational imaging pipeline
US10001993B2 (en) 2013-08-08 2018-06-19 Linear Algebra Technologies Limited Variable-length instruction buffer management
US9910675B2 (en) 2013-08-08 2018-03-06 Linear Algebra Technologies Limited Apparatus, systems, and methods for low power computational imaging
US9196017B2 (en) 2013-11-15 2015-11-24 Linear Algebra Technologies Limited Apparatus, systems, and methods for removing noise from an image
US9270872B2 (en) 2013-11-26 2016-02-23 Linear Algebra Technologies Limited Apparatus, systems, and methods for removing shading effect from image
JP2016095600A (ja) * 2014-11-13 2016-05-26 カシオ計算機株式会社 電子機器およびプログラム
US20170068458A1 (en) * 2015-09-03 2017-03-09 Qualcomm Incorporated Hardware-accelerated storage compression
US10613756B2 (en) * 2015-09-03 2020-04-07 Qualcomm Incorporated Hardware-accelerated storage compression
US10460704B2 (en) 2016-04-01 2019-10-29 Movidius Limited Systems and methods for head-mounted display adapted to human visual mechanism
US11469772B2 (en) * 2017-04-11 2022-10-11 Joshua Huang Method, system and program product for mask-based compression of a sparse matrix
US10565207B2 (en) * 2016-04-12 2020-02-18 Hsilin Huang Method, system and program product for mask-based compression of a sparse matrix
US10748326B2 (en) 2016-08-19 2020-08-18 Movidius Ltd. Rendering operations using sparse volumetric data
CN117130661A (zh) 2017-03-20 2023-11-28 英特尔公司 用于点积操作的系统、方法和装置
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
JP6986678B2 (ja) * 2017-07-10 2021-12-22 パナソニックIpマネジメント株式会社 映像信号処理装置及び映像信号伝送システム
DE112018004584T5 (de) 2017-10-16 2020-06-04 Movidius Ltd. Dichtekoordinaten-hashing für volumetrische daten
US10949947B2 (en) 2017-12-29 2021-03-16 Intel Corporation Foveated image rendering for head-mounted display devices
US20190362235A1 (en) 2018-05-23 2019-11-28 Xiaofan Xu Hybrid neural network pruning
JP7074989B2 (ja) * 2018-08-31 2022-05-25 国立大学法人 筑波大学 データ圧縮器、データ圧縮方法、データ圧縮プログラム、データ解凍器、データ解凍方法、データ解凍プログラムおよびデータ圧縮解凍システム
WO2020125973A1 (en) * 2018-12-19 2020-06-25 Telefonaktiebolaget Lm Ericsson (Publ) Compressing and decompressing information about data objects hosted at a device
US11379420B2 (en) 2019-03-08 2022-07-05 Nvidia Corporation Decompression techniques for processing compressed data suitable for artificial neural networks
WO2020211000A1 (zh) * 2019-04-17 2020-10-22 深圳市大疆创新科技有限公司 数据解压缩的装置与方法
US11468447B2 (en) * 2019-09-06 2022-10-11 U.S. Bancorp, National Association System for identifying points of compromise
US11941633B2 (en) 2019-09-06 2024-03-26 U.S. Bancorp, National Association System for identifying points of compromise
JP7256811B2 (ja) * 2019-10-12 2023-04-12 バイドゥドットコム タイムズ テクノロジー (ベイジン) カンパニー リミテッド アドバンストインタコネクト技術を利用してaiトレーニングを加速するための方法及びシステム
US11586601B2 (en) * 2020-02-05 2023-02-21 Alibaba Group Holding Limited Apparatus and method for representation of a sparse matrix in a neural network
US10911267B1 (en) * 2020-04-10 2021-02-02 Apple Inc. Data-enable mask compression on a communication bus
US11362672B2 (en) * 2020-05-08 2022-06-14 Qualcomm Incorporated Inline decompression

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3553651A (en) * 1967-12-06 1971-01-05 Singer General Precision Memory storage system
DE2615790A1 (de) * 1976-04-10 1977-10-20 Bbc Brown Boveri & Cie Verfahren zur datenreduktion auf bit-seriellen uebertragungswegen
US5057837A (en) * 1987-04-20 1991-10-15 Digital Equipment Corporation Instruction storage method with a compressed format using a mask word
US5586300A (en) * 1994-07-20 1996-12-17 Emc Corporation Flexible addressing memory controller wherein multiple memory modules may be accessed according to comparison of configuration addresses
US5963642A (en) * 1996-12-30 1999-10-05 Goldstein; Benjamin D. Method and apparatus for secure storage of data
US6591019B1 (en) * 1999-12-07 2003-07-08 Nintendo Co., Ltd. 3D transformation matrix compression and decompression

Also Published As

Publication number Publication date
US8713080B2 (en) 2014-04-29
JP2010521728A (ja) 2010-06-24
WO2008110633A1 (en) 2008-09-18
US20100106692A1 (en) 2010-04-29
CN101689863A (zh) 2010-03-31
IES20080201A2 (en) 2008-09-17
GB2447494A (en) 2008-09-17
EP2137821A1 (en) 2009-12-30
GB0704976D0 (en) 2007-04-25

Similar Documents

Publication Publication Date Title
KR20100029179A (ko) 데이터 압축을 위한 회로 및 그 회로를 채택한 프로세서
US10719318B2 (en) Processor
JP7498831B2 (ja) ベクトル計算ユニット
US11797304B2 (en) Instruction set architecture for a vector computational unit
US8984043B2 (en) Multiplying and adding matrices
US7836116B1 (en) Fast fourier transforms and related transforms using cooperative thread arrays
US7640284B1 (en) Bit reversal methods for a parallel processor
US20220012598A1 (en) Methods and apparatus for matrix and vector storage and operations
KR101202445B1 (ko) 프로세서
JPH11154114A (ja) 複数データ・フェッチのアーキテクチャを使ってテーブル・ルックアップを実行するためのシステムおよび方法
EP3485385B1 (en) Shuffler circuit for lane shuffle in simd architecture
WO2011083152A1 (en) Hardware for performing arithmetic operations
JP5191532B2 (ja) 内部ビットfifo回路を有する演算ユニット
KR20220051006A (ko) Pim(processing-in-memory) 연산 수행 방법, 및 관련 메모리 디바이스 및 시스템
CN111859277A (zh) 一种稀疏矩阵向量乘法向量化实现方法
JP4955149B2 (ja) ビットfifoを有するディジタル信号プロセッサ
CN117539546A (zh) 基于非空列存储的稀疏矩阵向量乘加速方法及装置
CN114945984A (zh) 扩展存储器通信
JP7136343B2 (ja) データ処理システム、方法、およびプログラム
IES85108Y1 (en) A circuit for compressing data and a processor employing same
IE20080201U1 (en) A circuit for compressing data and a processor employing same
JP5025521B2 (ja) 半導体装置
Park et al. Rare Computing: Removing Redundant Multiplications From Sparse and Repetitive Data in Deep Neural Networks
WO2023160930A1 (en) Looping instruction
JPH09153030A (ja) 二次元離散コサイン変換回路

Legal Events

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