KR20100122493A - 프로세서 - Google Patents

프로세서 Download PDF

Info

Publication number
KR20100122493A
KR20100122493A KR1020107020168A KR20107020168A KR20100122493A KR 20100122493 A KR20100122493 A KR 20100122493A KR 1020107020168 A KR1020107020168 A KR 1020107020168A KR 20107020168 A KR20107020168 A KR 20107020168A KR 20100122493 A KR20100122493 A KR 20100122493A
Authority
KR
South Korea
Prior art keywords
data
processor
value
data values
values
Prior art date
Application number
KR1020107020168A
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 KR20100122493A publication Critical patent/KR20100122493A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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, look ahead
    • G06F9/3824Operand accessing
    • 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
    • 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

Abstract

본 출원은 전체 압축 구조를 검색 및 압축해제할 필요 없이 메모리 내 압축 구조를 랜덤하게 액세스하는 방법을 제안한다.

Description

프로세서{A processor}
본 출원은 프로세서 및 메모리와 프로세서 사이에서 데이터를 교환하는 방법의 분야에 관한 것이다. 더 상세히 말해, 본 출원은 전체 압축 구조를 검색하여 압축해제할 필요 없이 메모리 내 압축 데이터 구조 안의 한 개별 값이나 연속 또는 비연속적 값들의 그룹을 액세스하는 방법에 관한 것이다.
컴퓨팅 시스템들의 설계, 즉 메모리 액세스의 시간 비용을 최소화하는 설계시 근본적 문제가 존재한다.
어떤 메모리 기술이 계산을 지원하는데 사용되든, 어떤 기술이 그 메모리를 프로세서에 연결하는데 사용되든, 주어진 시간 내에 얼마나 많은 정보가 프로세서와 메모리 사이에서 전달될 수 있는가와 관련한 최대 한도가 있기 때문에, 가용 메모리 대역폭 및 흔히 "메모리-월 (memory-wall)"이라 불리는 가용 메모리 대역폭 당 컴퓨터 전력의 한계가 되는, 컴퓨터 시스템들의 설계상의 근본적인 한계를 말한다.
본 출원은 유효 메모리 대역폭의 증가 및 그에 따른 데이터 압축 사용을 통한 "메모리-월"의 한계를 최소화하기 위한 것이다.
"메모리 월"의 영향을 줄이기 위해 데이터 압축을 이용한다는 것이 알려져 있다. 그러나, 압축된 메모리 서브-시스템을 이용하는 프로그래머들에 있어서의 문제는 도 1의 시스템에서 보인 바와 같이 데이터가 연산 되기 전에 압축해제되어야 한다는 데 있다. 이것은 보통, 메모리(10)의 한 부분으로부터 압축된 데이터를 프로세서(16)의 레지스터 파일들로 읽어오는 동작, 프로그램 메모리(18)로부터 검색된 프로그램 코드를 사용해 그것을 압축해제하는 동작, 및 메모리(12)의 다른 미압축 부분에 그 압축해제된 데이터를 저장하는 동작을 수반한다.
그러나, 이러한 해법은 압축된 데이터를 읽고 그것을 미압축 형태로 저장하고, 연산을 위해 다시 그것을 프로세서로 읽어오는데 추가 메모리 대역폭이 필요로 된다는 단점을 가진다. 미압축 데이터를 보유하기 위한 추가 메모리 용량이 또한 필요로 되며, 압축해제 프로세스가 프로세서의 레지스터 파일들에 대한 부담을 높일 것이다. 이것은, 왜 그러한 압축 메모리 서브-시스템들이 주류 마이크로프로세서 산업에 흡수되기보다 학문적인 호기심에 머물고 있는가를 말해주는 차선의 해법임이 당연하다.
EP-0240032-A2는 벡터 데이터를 저장 및 검색하기 위한 메모리를 포함하는 벡터 프로세서를 개시하고 있다. 벡터 프로세서는 각각이 복수 (m) 개의 벡터 요소들을 나란히 읽거나 쓸 수 있는 복수의 벡터 레지스터들, 나란한 m 개의 마스크 비트들을 가능하게 하는 적어도 한 마스크 벡터 레지스터, 및 메모리와 복수의 벡터 레지스터들과 마스크 벡터 레지스터에 연결되어, 메모리 내 일정 간격의 어드레스 위치들로부터 유효한 마스크 비트들에 해당하는 선택된 벡터 레지스터의 선택된 저장 위치들로 벡터 요소들을 전달하라는 명령에 응답하는 전달 부분을 포함한다. 이러한 접근 방식은 유용하지만, 벡터 데이터의 저장/검색이 전체 레지스터로 한정된다는 점에서 한계가 있다.
레지스터-블로킹 (register-blocking)은 행렬 대수 (특히 유한 요소, Finite-Element)를 가속화하기 위한 유용한 기술이지만, 많은 행렬들에 있어서 (가령, GOOGLETM 같은 서치 엔진에 사용되는 것) 제로 삽입 (zero fill)이 추가되어야 하므로, 모두 현재의 컴퓨팅 시스템들에서 공급이 달리는 유효 FLOPS (Floating Point Operations Per Second; 초당 유동 소수점 연산) 감소와 메모리 대역폭 요건 증가를 낳게 된다는 단점을 가진다.
사실상, 해마다 각기 50%와 7%라는 상당한 괴리율로 증가하고 있는 프로세싱 능력과 메모리 대역폭 사이의 증대되는 갭을, 상술한 바와 같이 "메모리 월 (Memory Wall)"이라 부른다. 그러한 메모리 월을 "깨뜨리기 위한" 많은 클레임이 있어왔고, 그것들은 보통 오프-칩 (off-chip)으로 가야 할 가능성을 줄이기 위해 캐시(cache)를 이용하는 것과, 오프-칩으로 가는 것과 관련해 레이턴시 (latency) 및 페널티들 (penalties)이 완화될 수 있도록 멀티-스레딩 (multi-threading)을 이용하는 것으로 이뤄진다.
그러한 접근방식들은 제한된 외부 메모리 대역폭 문제를 해결하기보다는 그것을 단지 감추는 것이고, 일반적으로 이왕이면 효과적이도록 충분한 데이터 지역성 (data locality)을 보이는 데이터 집합 및/또는 충분한 TLP (Thread-Level Parallelism)을 보이는 프로그램에 의존하지만, 모든 문제들에 해당하지는 않을 것이며, 항상 선험적인 것으로 알려지는 것이 아님이 분명하다. 실제로, 보다 크고 많은 흥미로운 문제들 중 다수는 충분한 데이터 지역성을 보이지도, 충분한 TLP를 보이지도 않으며, 전체 시스템의 처리율은 외부 메모리 대역폭에 의해 제한되는 수준까지 저하되므로, 칩 상에 추가된 여분의 하드웨어는 소용이 없다. 이런 이유로, 프로세서 성능을 제조자 인용 최고 성능 사양의 1% 이하로 떨어뜨리는 많은 엔지니어링 애플리케이션들을 보는 것이 드문 일이 아니다.
본 발명은, 데이터를 압축 포맷으로 저장함으로써 유효 메모리 대역폭을 증가시키고 계산시 "메모리-월"의 한계를 최소화하는 것을 추구한다.
그러한 과제는, 메모리에 저장되어야 할 대량의 데이터 세트를 다루는 컴퓨터 그래픽, 강체 (rigid-body) 동역학, 유한-요소 (finite-element) 분석 및 기타 과학과 공학 애플리케이션들 등을 포함하는 여러 애플리케이션들에 사용되는 블록 구조의 데이터에 대해 적합한 압축 및 압축해제 수단을 제공함으로써 달성된다. "메모리-월"의 영향을 추가로 줄이기 위해, 프로세서 파이프라인 역시, 압축의 장점을 이용하여, 압축된 데이터만 단독으로 처리함으로써 얻어질 수 있는 것 이상으로 프로세싱 속도를 증가시킬 수 있도록 변형된다.
더 특정하면, 본 출원은 한 명령의 일부로서 특정되는 밸루 맵 (value map) 및 관련 필드 비트들의 사용을 통해 메모리에 저장된 압축 구조 내 개별 값들로의 랜덤 액세스를 가능하게 한다.
그에 따라 본 출원의 제1실시예는 청구항 1 및 38에 개시된 것 같은 프로세서를 제안한다. 본 출원은 또한 청구항 21 및 56에 개시된 것 같은 방법을 제안한다. 본 출원은 더 나아가 청구항 35 및 69에 개시된 것 같은 데이터 프로세싱 머신을 제안한다. 그 종속 청구항들에서 바람직한 실시예들이 제안된다.
이제부터 첨부된 도면을 참조해 본 출원을 상세히 설명할 것이다.
도 1은 종래 기술로서 알려진 프로세서 구성이다.
도 2는 본 출원의 프로세서가 프로세싱하는데 적합한 일련의 변환식들이다.
도 3은 본 출원의 일 실시예에 따른 프로세서이다.
도 4는 도 3의 프로세서에 의해 사용될 수 있는 전형적 압축 방법을 예시한 것이다.
도 5는 한 메모리 구조가 어떻게 도 3의 프로세서에 의해 32 비트 RAM에 맞게 압축될 수 있는지를 예시한 것이다.
도 6은 도 3의 프로세서에 의해 사용될 수 있는 전형적 명령 코드들의 포맷을 예시한 것이다.
도 7은 도 5에서와 같은 메모리 구조가 어떻게 도 3의 프로세서에 의해 64 비트 RAM에 맞게 압축될 수 있는지를 예시한 것이다.
도 8은 도 3의 프로세서에 의해 사용될 수 있을 어드레스들을 생성하기 위한 회로의 예이다.
도 9는 예로 든 값들을 통해 도 8의 동작을 실례로 보인 것이다.
도 10은 도 8의 프로세서에 의해 사용될 수 있을 전형적 로드/저장 회로를 보인다.
도 11은 도 10에 사용될 어드레스 시퀀스 생성의 예이다.
도 12는 도 10의 회로 동작 모드를 예시한 전형적 타이밍도이다.
도 13은 도 3의 프로세서에 대한 보다 상세한 블록도이다.
도 14는 한 명령 포맷이다.
도 15는 압축 데이터를 로드/저장하기 위한 명령들을 포함하는, 전형적 프로세서에서 이용가능한 다양한 옵코드 (opcode) 명령들을 보인 테이블이다.
도 16은 비압축 기반 명령에 대한 어드레스 생성 회로이다.
도 17은 프로세서의 압축 방법에 의해 사용되는 비트를 생성하는 회로이다.
도 18은 각종 행렬 구조에 대해 도 3의 전형적 프로세서가 제공할 수 있는 계산상의 절약에 대해 도시한 것이다.
도 19는 압축 데이터를 로드/저장하기 위해 도 2의 프로세서에 적합한 회로이다.
도 20은 메모리 구조상의 포트 폭의 영향들에 대해 예시한 것이다.
도 21은 도 20에 도시된 어드레스들에 대한 어드세스 생성에 미치는 결과적 영향을 예시한 것이다.
도 22는 도 20의 영향들을 도시한 전형적 타이밍도들이다.
압축의 바람직한 상황에 대한 일반적인 예는, 2차원 스크린에서 컴퓨터 그래픽과 관련 애플리케이션들을 통해 실제상황을 시뮬레이션하기 위해 행렬 표현들 및 선형 대수 연산자들을 사용하는 것이다. 소스 데이터 행렬에 대한 연산은 보통 회전들 (rotations) 및 기타 변환들 (transformations)로 이뤄지며, 보통 도 2에 도시된 종류의 그러한 식들의 시퀀스들로 되어 있다. 알 수 있는 바와 같이, 이 행렬들은 많은 수의 제로 (0)를 포함하는데, 이들은 전체적인 매트릭스를 이용해 수행되는 계산 결과에 영향을 미치지 않으면서, 즉 이들은 대수적인 관점에서 중요하지 않은 값들이면서 로드/저장을 위해 상당량의 메모리 대역폭을 필요로 한다.
본 출원은 도 3에 도시된 것과 같이 압축해제 처리의 필요성 없이 메모리 내 압축 데이터에 대해 바로 연산을 행함으로써, 추가적 미압축 데이터 버퍼 및, 추후 처리를 위해 버퍼 영역으로 압축 데이터의 압축해제를 처리하기 위해 필요한 추가 프로세서 및 메모리 대역폭에 대한 수요를 없앨 수 있는 변형 프로세서를 제안한다. 여기서는 압축 및 압축해제 프로세스들이 프로세서의 메모리 액세스 구조 안에 통합된다.
본 출원은, 비한정적 예로서, 유동 소수점 행렬들 (floating-point matrices), 유동 소수점 벡터들, 유동 소수점 스칼라들, 유부호 (signed) 정수들, 무부호 (unsigned) 정수들, 채움 (packed) 문자들 및 어드레스 포인터들의 임의 조합으로 이뤄지는 임의 크기와 복잡도를 가진 압축 구조를 가능하게 한다.
압축 및 압축해제 로직이 프로세서 로드/저장 포트들 안에 내장되어, 데이터가 트랜잭션 단위로 압축 메모리 서브시스템으로부터/으로 어떻게 읽혀지고/기록되는지에 대한 세부 사항들을 염려할 필요가 없다는 점에서 프로그래머들의 일을 손쉽게 만들 수 있다.
여기 기술되는 해법은, 도 4에 도시된 방식으로 조밀 부행렬 (dense sub-matrix) 안의 제로 및 비제로 (nonzero) 엔트리들에 대해 코딩할 밸루 맵 (value map)을 활용한다. 그러한 밸루 맵의 사용은 앞서 관련 출원들 (2007년 4월 11일 출원된 US60/911,273, 2007년 4월 11일 출원된 US60/911,274 및 UK 0704999.2 및 UK0704976.0, 그리고 그것을 우선권 주장한 PCT 대응 출원들)에 개시되어 있으며, 그 전체적 내용이 이 명세서에 참조의 형식으로 포함된다. 도시된 예에서, 37.5%의 압축이 달성된다. 제안된 해법은 저장될 행렬 내 각각의 제로 엔트리가 32 비트 15 단정도 (single 15 precision), 64 비트 배정도 (double precision) 등등의 넘버가 아닌 1 비트로 표현된다는 이점을 가진다. 32 비트 단정도 엔트리들을 가진 희소 (sparse) 행렬을 저장하는 32 비트 메모리 시스템에서 조밀 행렬당 1 개 이상의 엔트리들이 제로이기만 하면 전체적 압축이 수행된다.
위에서 개괄된 기본 압축 방법은 흥미로우면서 장점들을 제공하지만, 대부분의 실제 애플리케이션들에서 프로그래머는 희소 행렬들 이상의 것을 저장하고 싶어 하며, 보통 복잡한 데이터 구조로 데이터를 저장하고 그렇게 저장된 데이터를 검색해야 한다. 문제는 압축/미압축 혼합 데이터 구조를 다룰 때 프로그래머에게 지나친 부담을 주지 않으면서 앞서 개괄된 것들과 유사한 성능 및 메모리 압축 혜택을 제공할 수 있도록 하기 위해 압축 스킴을 어떻게 통합하는가에 있다.
본 출원은 앞서 기술된 방식으로 압축될 수 있지만 미압축 유동 소수점 또는 정수 데이터 역시 포함할 수 있는 대형 구조 안에서 데이터를 랜덤 액세스하는 수단을 제안한다. 그 스킴은 최대 서른 두 개의 32-비트 엔트리들을 포함하는 기본 구조가 32 비트 정수로 표현될 수 있게 한다 (밸루 맵). 원리상으로, 이 스킴은 32에 한정되지 않으며, 32 엔트리들을 가진 값들이나 구조들에 대한 것으로, 밸루 맵의 사이즈 및 엔트리들의 개수는 프로세서 설계 요건을 만족시킬 수 있게 선택될 수 있다. 밸루 맵에서 1 비트의 존재는 이전과 같이 메모리 내 해당 위치에 사소하지 않은 (non-trivial) 유동 소수점 또는 정수 값이 존재함을 나타낸다. 각각의 값이 단일 비트로 표현되므로, 밸루 맵을 비트 맵이라고도 칭할 수 있다. 혼합 (압축/미압축) 구조가 메모리 내에서 어떻게 저장되는지에 대한 예가 도 5에 도시된다.
제안된 압축 구조 압축해제 로직의 동작에 대한 기본 원리는, 밸루 맵이 사소한 (trivial) 값들의 존재를 나타내는데 사용된다는 것이다. 이 출원의 목적상 사소한 값은 0.0 단정도 (32-비트) 유동 소수점 값 (16 진수 00000000)이지만, 그와 같은 스킴은 손쉽게 배정도 유동 소수점 혹은 그 이상으로 확장될 수 있다. 그와 달리, 특정 데이터 집합 안에 0.0이 아닌 어떤 다른 값이 다수 존재한다면, 여기 개괄된 스킴은 밸루 맵 0이 0.0이 아닌 그 값을 표현할 수 있게 간단히 확장될 수 있을 것이다 (예를 들어, 어떤 데이터 집합들은 다수의 1.0 값들을 포함할 수 있다).
RAM 어드레스들로부터 알 수 있는 바와 같이, 도 5의 전형적 데이터 구성에 있어, 32 비트 밸루 맵 내 각각의 비제로 엔트리 (sx, sy, sz, x0-x3, y0-y3, z0-z3)에 대해 베이스 (base) 어드레스에 1의 오프셋이 더해진다. 실제로, 메모리 내에 밸루 맵과 다음 구조의 베이스 어드레스 둘 모두는 현재의 구조 안에 내장되어 프로그래머에 의해 검색된다.
압축 구조들을 활용하기 위해, 압축 형태로 저장된 데이터를 저장 및 검색하는 프로그래머의 오버헤드를 줄이는 것이 유익하다. 본 출원에서, 프로그래밍 오버헤드는, 가령 RISC 프로세서일 수 있는 프로세서의 LSU (Load-Store (로드-저장) Unit) 안에서 압축 데이터를 저장 및 검색한다는 복잡함을 감춤으로써 최소화된다. 어드레스 생성기들이 프로그래머가 데이터의 어느 요소들이 압축 구조로부터 검색되어야 할지를 구체화할 수 있게 한다. 그러면, LSU가 전체 압축 구조를 압축해제하지 않고도 메모리 내 압축 구조로부터 요청된 요소들을 검색할 수 있다.
따라서 여기 개시된 구성의 예에서, 어드레스 생성기들은 프로그래머로 하여금 32-엔트리 압축 구조로부터 8 개의 가능한 4-엔트리 필드들 (벡터들) 중 어느 것이 도 6에 도시된 것 같은 로드/저장 옵코드에 포함되는 단순한 8 비트 필드 마스크를 이용해 로드/저장되어야 하는지를 특정할 수 있게 한다. 여기 개시된 구성의 예에서, 압축 벡터를 로드하기 위한 명령은 LDCV이고, 압축 벡터를 저장하기 위한 명령은 STCV이다.
이러한 구성 예는 프로그래머로 하여금 데이터가 로드/저장될 4-엔트리 벡터 레지스터 파일 (VRF, vector register file) 레지스터를 특정할 수 있게 한다. 정수 레지스터 파일 (IRF, integer register file)에는 어드레스 생성기가 압축 구조 오프셋을 더할 베이스 레지스터 및 밸루 맵 레지스터가 있다. 여기서 옵코드는, 여덟 개의 4-엔트리 압축 벡터들 중 어느 것이 실제로 VRF에 로드/저장되는지를 선택하는데 사용되는 직접적 8 비트 값 f[7:0]을 포함한다.
LSU 포트-너비가 일반적으로 이 출원의 구성 예의 경우 64 비트로 제한됨에 따라, LDCV 및 STCV 명령들은 반드시 다수의 클록 사이클을 소모할 것임을 알 수 있을 것이다. 그 결과 밸루 맵은 반복적인 방법을 통해 대략 f-비트로 디코딩되어, LSU 포트로부터 알 수 있다시피 64 비트 압축 엔트리가 정확한 VRF로/로부터 기록 및 읽혀지고 정확한 메모리 (RAM) 어드레스로/로부터 저장될 수 있게 한다. 64 비트 메모리 서브시스템에서의 일반적인 압축 구조의 RAM 레이아웃은 도 7에 도시된 것과 같다.
이 방법 및 구성은 32 비트 워드나 64 비트 폭의 메모리들에 국한되는 것이 아니며, 96 및 128 비트 폭의 메모리 등을 포함하는 다른 메모리 폭에 대해서도 그와 비슷한 레이아웃들이 가능하다는 것을 알 수 있을 것이나, 설명의 단순성을 위해 그와 같은 구성 체계들에 대해서는 여기서 자세히 논하지 않을 것이다.
LSU의 로직 예를 지금부터 도 8을 참조해 설명할 것인데, 도 8은 압축 구조 안에서 소정 베이스 어드레스 (base_addr)에 있는 값들을 로드하기 위한 LSU 압축 구조 어드레스 생성기의 로직을 보인다. 첫 번째 줄의 가산기들(50) (압축기들)이 주어져서 여덟 개의 4 비트 밸루 맵 필드들 (bm7-bm0)에 배치된 32 비트들의 밸루 맵 구조를 여덟 개의 3 비트 넘버들로 압축하며, 그 넘버들 각각은 주어진 4 비트 밸루 맵 내 1들의 개수를 나타낸다. 두 번째 줄의 가산기들(52)이 주어져서 압축기들의 줄의 결과들을 더함으로써, 압축된 로드 또는 저장 옵코드의 적절한 f 비트들을 인가해 필요할 때 각각의 밸루 맵 필드가 독립적으로 어드레스 될 수 있도록 각 밸루 맵의 시작 어드레스를 생성하도록 한다. AND 게이트들(54)의 줄은 압축 로드/저장 옵코드에 세팅된 f (filed) 비트들의 상태에 따라 불필요한 필드들을 마스킹하도록 주어진다. 이 AND 게이트들의 출력들은 이제 추가 가산기들(56)의 집합에 의해 합산되어, 옵코드 f-비트들에 기초해 메모리로부터 로드하거나 메모리로 저장되어야 하는 32 비트 워드들의 총수 (word_cnt)를 생성한다. 마지막 8:1 멀티플렉서 단계(58)가, 요청된 선택 밸루 맵 어드레스들이 순차적으로 최종 가산기(60)로 인가되게 하는 8 필드-인에이블 (8 filed-enable)에 의해 제어됨으로서, 필요한 RAM 어드레스들을 생성하도록 한다.
압축 데이터 구조의 예를 위한 다양한 신호들의 값들이 도 9에서 보인다. 선택된 IRF (integer Regiater File) 레지스터 내 밸루 맵으로부터 도시된 어드레스들이 정적으로 계산된 뒤, 압축된 로드 또는 저장 명령들에 특정된 f 비트들의 단계에 따라 순차적으로 제공된다.
압축된 로드/저장 동작들을 위한 완전한 어드레스-생성 로직은 카운터와 유한-스테이트 머신 (finite-state machine)을 포함해 필요한 제어 신호들을 생성하도록 하는 것으로서, 도 10에 도시되어 있다.
어드레스 선택 멀티플렉서로 제공될 어드레스들의 시퀀스를 선택하는 fen[2:0] 신호가 도 11에 도시된 진리표에 따라 작동된다.
도 12에서 알 수 있는 바와 같이, LSU 어드레스 생성기에 의해 생성되는 압축된 로드/저장 동작들에 필요한 것은 소스/목적지 어드레스들뿐만이 아니고, 압축된 로드/저장 동작에 특정된 것과 관련된 소스/목적지 VRF 행들 (rows)을 위한 소스/목적지 어드레스들 역시 생성된다. 64-비트 LSU 버스의 경우, 압축된 로드/저장 명령에서 2 개의 VRF 행들 까지가 어드레스 될 수 있다. 현재의 구성 예에서는 VRF가 압축된 로드/저장 동작시 로드되거나 저장되는 데이터의 소스/목적지로서 선택되었지만, 원론적으로 IRF (Integer Register File)나 스칼라 레지스터 파일 (SRF, scalar register file)도 마찬가지로 선택될 수 있을 것이다.
도 12의 타이밍 도의 예는, 압축 로드/저장 동작이 실행되는데 여러 사이클이 걸리고, 필요한 제어 신호들 전부가 압축 로드/저장 제어 워드에 특정된 f-비트들과 결합되는 압축 구조의 IRF 밸루 맵 서술자 (descriptor)에 대한 지식으로부터 생성됨을 명확하게 보이고 있다. 제어 신호들의 시퀀스는 어드레스 생성기로 입력되는 클록에 의해 구동되는 카운터와 함께 f-비트들 및 밸루 맵을 사용해 도출된다.
이 도면은 로드 및 저장 동작 둘 모두의 양태를 보이는 것으로, 그 두 동작들 간의 유일한 차이는 다음과 같을 것이다:
1. 압축 로드의 경우, LSU 포트와 연결된 RAM으로부터 읽어오기 위해 읽기 신호가 생성되고, 쓰기 신호는 RAM 콘텐츠의 목적지로서 작용하는 적절한 VRF 행에 대해 생성된다. 사실, 일련의 RAM 읽기 및 VRF 쓰기들은 IRF 내 밸루 맵의 상태 및 압축된 로드 옵코드 내 f-비트들의 세트에 좌우되어 생성될 수 있다.
2. 마찬가지로, 압축 저장의 경우, 일련의 VRF 읽기와 RAM 쓰기가 IRF 밸루 맵의 상태 및 압축 저장 옵코드 내 f-비트 세트에 좌우되어 생성될 수 있다.
압축 로드/저장 동작들을 가진 로드 저장 유닛 (LSU, Load Store Unit)이 일일부를 형성하는 SVU 구조의 블록도가 도 13에 도시된다. 도시된 것과 같이 주요한 외부 인터페이스들은 SVU 명령 메모리, 데이터 메모리 뱅크들로 연결하는 LSU 포트들, 및 SVU 레지스터들과 진단 정보가 프로세서 버스를 통해 읽고/써지도록 할 수 있는 디버그 제어 유닛 (DCU, debug control unit)에 대한 것이다.
명령 워드는 7 개의 슬롯들을 포함하여, 도 14에 도시된 것 같이 사이클마다 9 개의 기능 유닛들 중 7 개까지 제어할 수 있게 한다.
현재의 실시예에서, 128 비트 명령들 중 맨 왼쪽 비트는 미래의 사양들에 대비하도록 예비되며, 나머지 127 비트들은 필드들로 나눠지며 그 각각의 필드는 프로세서 구조의 바람직한 실시예에 포함된 9 개까지의 기능 유닛들 중 하나를 제어한다:
● 1x 단정 실행 유닛 (PEU, Predicated Execution Unit)
● 1x 브랜치/반복 유닛 (BRU, Branch/Repeat Unit)
● 2x 로드-저장 유닛들 (LSU, Load-Store Unit)
● 1x 벡터 산술 유닛 (VAU, Vector Arithmetic Unit)
● 1x 스칼라 산술 유닛 (SAU, Scalar Arithmetic Unit)
● 2x 정수 산술 유닛들 (IAU, Integer Arithmetic Units)
● 1x 비교/이동 유닛 (CMU, Compare/Move Unit)
이 명령 워드의 직접적인 제어하에 놓이지 않는 마지막 기능 유닛이 디버그 제어 유닛 (DCU, Debug Control-Unit)인데, 그것은 프로세서로 하여금 특히 예외적인 상황들 및/또는 인터럽트가 발생된 경우에 프로그램 실행을 감시하고 제어할 수 있게 하는 것이다.
전형적인 LSU는 프로그래머에 의해 벡터 데이터가 메모리로부터 VRF 레지스터들로 로드되게 한다. LSU는 24 비트 옵코드에 의해 제어되며, 8 개의 동작들 중 하나를 수행할 수 있다:
● NOP, 즉 메모리로부터 아무 데이터도 로드하지 않음 (전력 절감을 위해 클록들이 게이트 오프됨)
● LDVX 4-요소 미압축 벡터를 메모리로부터 로드
● STVX 4-요소 미압축 벡터를 메모리에 저장
● LDCV 4-요소 압축 벡터를 메모리로부터 로드
● STCV 4-요소 압축 벡터를 메모리에 저장
● LDLI 해당 16-비트를 특정된 IRF 레지스터의 하위 16 비트들 안에 로드
● LDHI 해당 16-비트를 특정된 IRF 레지스터의 상위 16 비트들 안에 로드
● CPXI IRF 밸루 맵 내 필드 1-8의 사이즈/어드레스를 IRF 베이스 레지스터에 복사
LSU의 전형적 옵코드 테이블이 도 15에 도시된다.
미압축 로드/저장 모드 하의 LSU의 블록도가 도 16에 도시된다. 이 모드에서, bru_hold 신호는 BRU 내의 프로그램-카운터 (PC)가 로드/저장 동작이 완료될 때까지 진행하는 것을 막는다. 이것은, 4 벡터 요소들이 단일 사이클 (128-비트들)이 아닌 1초나 2초 안에 전달되어야 하기 때문에, 로드 및 저장이 단일 사이클 완료되지 않는 경우에 중요하다.
밸루 맵 생성 로직 및 VRF로의 로드/저장 경로의 블록도가 비제로 밸루 맵 생성에 대해 도 17에 도시된다. 미압축 4-요소 벡터가 메모리에서 VRF로 로드될 때마다, 4 비교기들의 행 (4x32 입력 NOR 게이트들)을 이용해 추가적 4-엔트리 비제로 밸루 맵이 생성된다. 이 4-비트 밸루 맵 엔트리는 나중에 데이터를 다시 압축 포맷으로 메모리에 저장하고, 제로 값들에 대한 사소한 동작들을 제거함으로써 전력 손실을 최소화하기 위해 사용될 수 있다.
여기 개시된 프로세서 구조의 독특한 기능은, 전체 압축 구조가 검색될 필요 없이 랜덤 액세스 방식으로 압축 데이터 로드 및 저장을 지원한다는 것이다. 이렇게 지원하는 이유는, 많은 흥미로운 애플리케이션들이 희소 데이터의 큰 덩어리에 대해 적용되기 때문이다, 즉 데이터가 메모리로부터 가져와야 하고 적용시 제로 결과를 생성하는 많은 수의 제로들을 포함하기 때문이다.
이 구조에서의 주요 전제는, 프로세서에 의해 다뤄져야 할 모든 데이터가, 압축되든 압축되지 않든, 행렬들로 이뤄지든, 벡터들로 이뤄지든, 패킹 된 스칼라들이나 정수들로 이뤄지든, 4-요소 벡터들로 패킹되어 메모리에 저장된다는 것이다. 이러한 전제에 기초해, 프로그래머는 행렬/벡터/스칼라/정수 데이터를 32-엔트리 압축 블록들로 조직하고, 그 안에서는 오직 비제로에 해당하는 엔트리들만이 명시적으로 저장된다. 모든 제로 값들과 비제로 값들은 비제로 밸루 맵 안에서 1 비트 엔트리에 의해 표현되며, 그것은 다음에 32-엔트리들을 32나 그보다 적은 32-비트 워드들로 RAM 안에 압축/비압축하는데 사용될 수 있다.
도면에 도시된, 3D 그래픽 및 게임 역학 (강체 동역학) 애플리케이션들에 사용되는 변환 행렬이 좋은 예이다. 8 개의 행렬들에 대응하는 32-비트 밸루 맵들이 도 2에 상세히 보인다.
도 18에서 알 수 있는 바와 같이, 그래픽 변환 행렬들은 50%를 넘는 데이터 압축이 이뤄지게 하는 많은 비율의 사소한 것들 (제로 값들)을 포함한다.
압축 밸루 맵들이 사용되어 도 19에 도시된 하드웨어를 이용해 프로그래머 지정 종합 데이터 구조들로의 랜덤 액세스를 가능하게 한다. 압축 로드 동작은 프로그래머로 하여금 IRF에 특정된 베이스 어드레스에서 시작하는 어드레스들부터 옵코드의 8-비트 필드에 특정된 8 x 4-요소 값들까지의 시리즈들을 집합할 수 있게 한다. 하드웨어는 자동으로 필요한 어드레스들을 생성하고 신호를 읽으며, 가령 4 개를 넘는 비제로들이 메모리로부터 로드되어야 할 경우와 같이 여러 사이클의 로드들이 요구되는 경우 BRU를 정지시키는 홀드 신호를 생성한다. 이와 달리, 종래 기술에서는 이런 유형의 복잡한 분산 집합 기능 (scatter gather functionality)은, 보통, 복잡한 데이터 구조의 인덱싱을 가능하게 하는 베이스 어드레스들 및 오프셋들을 가지고 설정될 여러 레지스터들을 필요로 하는 전통적 프로세서 구조들을 가지고 수행하기에는 복잡하다. 게다가 그런 전통적 프로세서 구조들은 사소한 데이터 값들의 압축에 대한 아무 규정도 마련하고 있지 않다.
LSU 포트 폭들은, 섹션 6에 상세히 기술된 SVU_LCR 레지스터를 통해 독립적으로 설정되는 것이 적절하다. 포트 폭 파라미터는, 4-요소 벡터들이 도 20에 도시된 것과 같이 SVU LSU 포트들과 연결된 1/2/4 요소 폭의 데이터 버스를 통한 여러 개의 트랜잭션들에서 로드/저장될 수 있게 함으로써, 탑 레벨 SoC 상호 연결이 SVU의 처리량과 절충될 수 있게 한다.
포트 폭 파라미터화를 지원할 추가 어드레스들 lsbs의 생성은, 도 21에 도시된 것 같이 LSU에 의해 생성된 어드레스에 0, 1 또는 2 어드레스 lsbs를 첨부하는 카운터를 이용해 수행된다.
SVU RAM으로의 4-요소 저장에 대한 포트-폭 파라미터의 영향이 도 22에 보인다. 도 18에서 알 수 있는 바와 같이, 그래픽 변환 행렬들은 50%를 넘는 데이터 압축이 이뤄지게 하는 많은 비율의 사소한 것들 (제로 값들)을 포함한다.
압축 밸루 맵들이 사용되어 도 19에 도시된 하드웨어를 이용해 프로그래머 지정 종합 데이터 구조들로의 랜덤 액세스를 가능하게 한다. 압축 로드 동작은 프로그래머로 하여금 IRF에 특정된 베이스 어드레스에서 시작하는 어드레스들부터 옵코드의 8-비트 필드에 특정된 8 x 4-요소 값들까지의 시리즈들을 집합할 수 있게 한다. 하드웨어는 자동으로 필요한 어드레스들을 생성하고 신호를 읽으며, 가령 4 개를 넘는 비제로들이 메모리로부터 로드되어야 할 경우와 같이 여러 사이클의 로드들이 요구되는 경우 BRU를 정지시키는 홀드 신호를 생성한다. 이와 달리, 종래 기술에서는 이런 유형의 복잡한 분산 집합 기능 (scatter gather functionality)은, 보통, 복잡한 데이터 구조의 인덱싱을 가능하게 하는 베이스 어드레스들 및 오프셋들을 가지고 설정될 여러 레지스터들을 필요로 하는 전통적 프로세서 구조들을 가지고 수행하기에는 복잡하다. 게다가 그런 전통적 프로세서 구조들은 사소한 데이터 값들의 압축에 대한 아무 규정도 마련하고 있지 않다.
LSU 포트 폭들은, 가령 레지스터 내 한 엔트리로서 제공되는 한 파라미터를 사용해 독립적으로 설정되는 것이 적절하다. 포트 폭 파라미터는, 4-요소 벡터들이 도 20에 도시된 것과 같이 SVU LSU 포트들과 연결된 1/2/4 요소 폭의 데이터 버스를 통한 여러 개의 트랜잭션들에서 로드/저장될 수 있게 함으로써, 탑 레벨 SoC 상호 연결이 SVU의 처리량과 절충될 수 있게 한다.
포트 폭 파라미터화를 지원할 추가 어드레스들 lsbs의 생성은, 도 21에 도시된 것 같이 LSU에 의해 생성된 어드레스에 0, 1 또는 2 어드레스 lsbs를 첨부하는 카운터를 이용해 수행된다.
SVU RAM으로의 4-요소 저장에 대한 포트-폭 파라미터의 영향이 도 22에 보인다. 도시된 바와 같이, 128-비트 벡터를 로드하거나 저장하는데 걸리는 사이클 수는, 포트 폭이 1 (32-비트들)일 때 네 사이클이 소요되고, 포트 폭이 2 (64-비트들)일 때 두 사이클이 소요되며, 포트 폭이 4 (128 비트들)일 때 한 사이클이 소요된다.
본 출원은 메모리와 프로세서 간 데이터 전송을 수행하기 위해 식별된 옵코드를 포함하는 명령 집합을 가진 프로세서와 관련해 기술되었지만, 그러한 기능은 프로그램 저장부에 아무런 명시적 명령 집합이 없이 오히려 로드와 저장이 스테이트-머신 (state-machine)이나 다른 수단의 제어 하에 수행되는 경우에도 수행될 수 있다. 중요한 이점은, 전체 압축 구조를 검색하거나 압축해제할 필요 없이 메모리 내 압축 구조로부터 하나 이상의 데이터 아이템들이 검색될 수 있다는 것이다. 마찬가지로, 전체 압축 구조를 검색하거나 압축해제할 필요 없이 한 개의 데이터 아이템을 메모리에 저장된 압축 구조 안에서 업데이트 할 수 있다.
이 명세서에 사용된 포함한다/구비한다 라는 용어들은 언급된 특징들, 정수들, 단계들 또는 구성요소들의 존재를 명시하고자 한 것으로, 하나 이상의 다른 특징들, 정수들, 단계들, 구성요소들이나 그 그룹들의 존재나 추가를 배제하는 것이 아니다.

Claims (69)

  1. 명령 집합 구조를 가진 프로세서에 있어서,
    상기 명령 집합 구조는, 랜덤 액세스 메모리에 저장된 압축 구조 (compressed structure)로부터 한 데이터 값을 검색하도록 하는 적어도 한 로드 (load) 명령을 포함하고,
    상기 적어도 한 로드 명령은, 미압축 형식의 구조 안에서 상기 데이터 값의 위치를 식별하는 옵코드 (opcode) 및 적어도 한 오퍼랜드 (operand)를 포함하고,
    상기 프로세서는, 미압축 형식의 상기 데이터 값의 위치를 상기 압축 구조 내의 상기 데이터 값을 위한 메모리 위치로 변환하도록 구성되고, 상기 메모리 위치로부터 상기 데이터 값을 검색하도록 추가 구성됨을 특징으로 하는 프로세서.
  2. 제1항에 있어서, 상기 미압축 형식의 구조는 사소한 값 (trivial value)과 사소하지 않은 값 (non-trivial value)을 포함하고, 상기 압축 구조는 사소하지 않은 데이터 값들만을 포함함을 특징으로 하는 프로세서.
  3. 제1항 또는 제2항에 있어서, 상기 압축 데이터 구조는, 상기 미압축 형식의 구조 내 사소하지 않은 데이터 값들의 위치를 나타내는 맵을 포함함을 특징으로 하는 프로세서.
  4. 제3항에 있어서, 상기 프로세서는, 요청된 값을 전송하기에 앞서 상기 압축 데이터 구조의 상기 맵을 획득하도록 구성됨을 특징으로 하는 프로세서.
  5. 제3항 또는 제4항에 있어서, 상기 사소하지 않은 데이터 값들은 비제로 (non-zero) 값들임을 특징으로 하는 프로세서.
  6. 제3항 내지 제5항 중 어느 한 항에 있어서, 상기 프로세서는 상기 요청된 값이 사소한 값인지 사소하지 않은 값인지 여부를 상기 맵으로부터 판단함을 특징으로 하는 프로세서.
  7. 제6항에 있어서, 상기 적어도 한 오퍼랜드는 메모리 내 상기 압축 구조에 대한 베이스 어드레스를 포함함을 특징으로 하는 프로세서.
  8. 제7항에 있어서, 상기 요청된 값이 사소하지 않은 값인 경우, 상기 프로세서는 상기 맵으로부터 사소하지 않은 값들의 개수를 카운트하고, 그것을 오프셋 (offset)으로서 미리 상기 요청 값의 베이스 어드레스에 더하고, 그에 따라 상기 랜덤 액세스 메모리를 설정하도록 구성됨을 특징으로 하는 프로세서.
  9. 제8항에 있어서, 상기 카운트는 복수 개의 가산기들을 이용해 이행됨을 특징으로 하는 프로세서.
  10. 제8항에 있어서, 상기 요청된 값이 사소한 값인 경우, 상기 프로세서는 상기 메모리를 액세스하지 않고 상기 사소한 값을 리턴하도록 구성됨을 특징으로 하는 프로세서.
  11. 제1항 내지 제10항 중 어느 한 항에 있어서, 상기 프로세서는 상기 명령에 응하여 복수의 데이터 값들을 로드하도록 구성됨을 특징으로 하는 프로세서.
  12. 제1항에 있어서, 상기 데이터 값들은 유동 소수점 (floating point) 넘버들임을 특징으로 하는 프로세서.
  13. 제12항에 있어서, 상기 데이터 값들은 단정도 (single precision) 유동 소수점 넘버들임을 특징으로 하는 프로세서.
  14. 제12항에 있어서, 상기 데이터 값들은 배정도 (double precision) 유동 소수점 넘버들임을 특징으로 하는 프로세서.
  15. 제12항에 있어서, 상기 데이터 값들은 확장된 정밀도의 유동 소수점 넘버들임을 특징으로 하는 프로세서.
  16. 제12항에 있어서, 상기 데이터 값들은 128-비트 정밀도의 유동 소수점 넘버들임을 특징으로 하는 프로세서.
  17. 제1항에 있어서, 상기 데이터 값들은 정수들임을 특징으로 하는 프로세서.
  18. 제1항에 있어서, 상기 데이터 값들은 유동 소수점, 유동 소수점 행렬들, 유동 소수점 벡터들 및 고정 소수점 정수들임의 조합임을 특징으로 하는 프로세서.
  19. 한 데이터 구조 안에 있는 적어도 한 데이터 값을 프로세서로 로드하는 방법에 있어서,
    상기 데이터 구조는 사소하지 않은 (non-trivial) 데이터 값들만 존재하는 압축 형식의 메모리에 저장되고, 상기 압축 형식은 상기 사소하지 않은 데이터 값들의 미압축 구조 내 위치들을 명시한 맵을 더 포함함에 있어서, 상기 방법은,
    상기 미압축 구조로 로드될 적어도 한 데이터 값의 위치 적어도 한 위치를 수신하는 단계,
    상기 맵을 이용해 상기 압축 구조 내 상기 적어도 한 데이터 값의 적어도 한 저장 위치를 식별하는 단계, 및
    상기 적어도 한 저장 위치를 이용해, 상기 적어도 한 데이터 값을 상기 메모리로부터 상기 프로세서로 로드하는 단계를 포함함을 특징으로 하는 방법.
  20. 제19항에 있어서, 상기 방법은 식별된 적어도 한 위치에 대한 데이터 값들만을 로드함을 특징으로 하는 방법.
  21. 제20항에 있어서, 상기 방법은, 상기 적어도 한 데이터 값을 검색하기에 앞서 상기 압축 데이터 구조의 상기 맵을 획득하는 단계를 포함함을 특징으로 하는 방법.
  22. 제21항에 있어서, 상기 맵을 획득하는 단계는, 상기 메모리로부터 상기 맵을 검색하는 단계를 포함함을 특징으로 하는 방법.
  23. 제20항 내지 제22항 중 어느 한 항에 있어서, 상기 사소하지 않은 데이터 값들은 비제로 (non-zero) 값들임을 특징으로 하는 방법.
  24. 제20항 내지 제23항 중 어느 한 항에 있어서, 상기 요청된 데이터 값이 사소하지 않은 값인 경우, 상기 방법은, 상기 맵으로부터 상기 요청된 데이터 값의 사소하지 않은 값들의 개수를 미리 카운트하고, 그에 따라 상기 랜덤 액세스 메모리를 설정하도록 구성됨을 특징으로 하는 방법.
  25. 제20항 내지 제24항 중 어느 한 항에 있어서, 상기 방법은 한 번에 여러 데이터 값들을 상기 프로세서와 메모리 사이에서 전송함을 특징으로 하는 방법.
  26. 제20항 내지 제23항 중 어느 한 항에 있어서, 수신된 적어도 한 위치가 상기 미압축 구조 내 한 사소한 값의 위치에 해당하는 경우, 상기 방법은 상기 사소한 값을 바로 프로세서로 제공하도록 구성됨을 특징으로 하는 방법.
  27. 제20항 내지 제26항 중 어느 한 항에 있어서, 상기 데이터 값들은 유동 소수점 (floating point) 넘버들임을 특징으로 하는 방법.
  28. 제27항에 있어서, 상기 데이터 값들은 단정도 (single precision) 유동 소수점 넘버들임을 특징으로 하는 방법.
  29. 제27항에 있어서, 상기 데이터 값들은 배정도 (double precision) 유동 소수점 넘버들임을 특징으로 하는 방법.
  30. 제27항에 있어서, 상기 데이터 값들은 확장된 정밀도의 유동 소수점 넘버들임을 특징으로 하는 방법.
  31. 제27항에 있어서, 상기 데이터 값들은 128-비트 정밀도의 유동 소수점 넘버들임을 특징으로 하는 방법.
  32. 제20항 내지 제26항 중 어느 한 항에 있어서, 상기 데이터 값들은 정수들임을 특징으로 하는 방법.
  33. 제20항에 있어서, 상기 데이터 값들은 유동 소수점, 유동 소수점 행렬들, 유동 소수점 벡터들 및 고정 소수점 정수들임의 조합임을 특징으로 하는 방법.
  34. 적어도 한 데이터 값을 메모리 내 압축 구조로부터 로드하기 위한 데이터 전송 특성을 가진 데이터 프로세싱 장치에 있어서,
    상기 압축 구조는, 사소하지 않은 (non-trivial) 데이터 값들만 존재하는 복수의 데이터 값들 및, 상응하는 미압축 구조 내 상기 사소하지 않은 데이터 값들의 위치들을 식별시키는 맵을 포함하고,
    상기 데이터 전송 특성은, 상기 데이터 값을 로드하라는 명령에 응하는 것이며,
    상기 명령은 상기 상응하는 미압축 구조 내 상기 데이터 값의 위치를 식별하고,
    상기 데이터 전송 동작은, 상기 식별된 위치로부터 메모리 오프셋을 생성하고 상기 오프셋을 사용해 메모리로부터 상기 데이터 값을 전송하도록 하는 것임을 특징으로 하는 데이터 프로세싱 장치.
  35. 제34항에 있어서, 상기 데이터 프로세싱 장치는 프로세서임을 특징으로 하는 데이터 프로세싱 장치.
  36. 제34항에 있어서, 상기 데이터 장치는 스테이트 엔진 (state engine)임을 특징으로 하는 데이터 프로세싱 장치.
  37. 명령 집합 구조를 구비한 프로세서에 있어서,
    상기 명령 집합 구조는, 미압축 데이터 구조로부터 적어도 한 데이터 값을, 랜덤 액세스 메모리 내 대응하는 압축 데이터 구조 안에 저장하도록 하는 적어도 한 저장 명령을 포함하고,
    상기 적어도 한 저장 명령은, 미압축 데이터 구조 내 적어도 한 데이터 값의 위치를 식별하는 옵코드 (opcode) 및 적어도 한 오퍼랜드 (operand)를 포함하고,
    상기 프로세서는, 상기 압축 구조 내 데이터 값들의 위치들을 보이는 맵을 사용해, 미압축 형식의 상기 데이터 값의 위치를 상기 압축 구조 내 상기 데이터 값을 위한 메모리 위치로 변환하도록 구성되고, 그 메모리 위치에 상기 적어도 한 데이터 값을 저장하도록 추가 구성됨을 특징으로 하는 프로세서.
  38. 제37항에 있어서, 상기 미압축 구조는 사소한 값들과 사소하지 않은 값들을 포함하고, 상기 압축 구조는 사소하지 않은 데이터 값들만을 포함함을 특징으로 하는 프로세서.
  39. 제37항 또는 제38항에 있어서, 상기 맵은 상기 압축 데이터 구조의 일부이고, 상기 미압축 데이터 구조 내 사소하지 않은 데이터 값들의 위치들을 나타냄을 특징으로 하는 프로세서.
  40. 제39항에 있어서, 상기 프로세서는, 요청된 값을 저장하기에 앞서 메모리에서 상기 압축 데이터 구조의 상기 맵을 획득하도록 구성됨을 특징으로 하는 프로세서.
  41. 제39항 또는 제40항에 있어서, 상기 사소하지 않은 데이터 값들은 비제로 (non-zero) 값들임을 특징으로 하는 프로세서.
  42. 제37항 내지 제41항 중 어느 한 항에 있어서, 상기 프로세서는, 상기 맵으로부터 상기 데이터 값 중 사소하지 않은 값들의 개수를 미리 카운트하고, 그에 따라 상기 랜덤 액세스 메모리를 설정하도록 구성됨을 특징으로 하는 프로세서.
  43. 제42항에 있어서, 상기 카운트는 일련이 가산기들을 이용해 이행됨을 특징으로 하는 프로세서.
  44. 제37항 내지 제43항 중 어느 한 항에 있어서, 상기 프로세서는 상기 옵코드에 응하여 복수의 데이터 값들을 한 번에 저장하도록 구성됨을 특징으로 하는 프로세서.
  45. 제37항 내지 제44항 중 어느 한 항에 있어서, 상기 적어도 한 오퍼랜드는 RAM 안의 상기 압축 데이터 구조의 베이스 어드레스를 포함함을 특징으로 하는 프로세서.
  46. 제37항 내지 제46항 중 어느 한 항에 있어서, 상기 압축 데이터 구조 내 복수의 데이터 값들은 한 명령을 통해 저장될 수 있음을 특징으로 하는 프로세서.
  47. 제37항에 있어서, 상기 데이터 값들은 유동 소수점 (floating point) 넘버들임을 특징으로 하는 프로세서.
  48. 제47항에 있어서, 상기 데이터 값들은 단정도 (single precision) 유동 소수점 넘버들임을 특징으로 하는 프로세서.
  49. 제47항에 있어서, 상기 데이터 값들은 배정도 (double precision) 유동 소수점 넘버들임을 특징으로 하는 프로세서.
  50. 제47항에 있어서, 상기 데이터 값들은 확장된 정밀도의 유동 소수점 넘버들임을 특징으로 하는 프로세서.
  51. 제47항에 있어서, 상기 데이터 값들은 128-비트 정밀도의 유동 소수점 넘버들임을 특징으로 하는 프로세서.
  52. 제37항에 있어서, 상기 데이터 값들은 정수들임을 특징으로 하는 프로세서.
  53. 제37항에 있어서, 상기 데이터 값들은 유동 소수점, 유동 소수점 행렬들, 유동 소수점 벡터들 및 고정 소수점 정수들임의 조합임을 특징으로 하는 프로세서.
  54. 프로세서로부터, 오직 사소하지 않은 (non-trivial) 데이터 값들만 존재하는 메모리 내 한 압축 구조 안으로 데이터 값을 삽입하는 방법에 있어서, 상기 압축 구조가, 상기 사소하지 않은 데이터 값들의 상응하는 미압축 구조 내 위치들을 식별하게 하는 맵을 포함할 때, 상기 방법은,
    삽입될 상기 데이터 값의 상기 미압축 구조 내 위치를 수신하는 단계,
    상기 맵을 이용해 상기 수신된 위치로부터 상기 압축 구조 내 상기 데이터 값의 상응하는 위치를 식별하는 단계, 및
    상기 상응하는 위치를 이용해 상기 데이터 값을 상기 메모리에 저장하는 단계를 포함함을 특징으로 하는 방법.
  55. 제54항에 있어서, 상기 방법은 상기 데이터 값을 저장하기에 앞서 상기 압축 데이터 구조의 상기 맵을 획득하는 단계를 포함함을 특징으로 하는 방법.
  56. 제55항에 있어서, 상기 맵을 획득하는 단계는, 상기 메모리로부터 상기 맵을 검색하는 단계를 포함함을 특징으로 하는 방법.
  57. 제54항 내지 제56항 중 어느 한 항에 있어서, 상기 사소하지 않은 데이터 값들은 비제로 (non-zero) 값들임을 특징으로 하는 방법.
  58. 제54항 내지 제57항 중 어느 한 항에 있어서, 상기 요청된 데이터 값이 사소하지 않은 값인 경우, 상기 방법은, 상기 맵으로부터 상기 요청된 데이터 값의 사소하지 않은 값들의 개수를 미리 카운트하고, 그에 따라 상기 랜덤 액세스 메모리를 설정하도록 구성됨을 특징으로 하는 방법.
  59. 제54항 내지 제58항 중 어느 한 항에 있어서, 상기 방법은 한 번에 복수의 두 데이터 값들을 상기 프로세서와 메모리 사이에서 전송함을 특징으로 하는 방법.
  60. 제54항 내지 제59항 중 어느 한 항에 있어서, 상기 데이터 값들은 유동 소수점 (floating point) 넘버들임을 특징으로 하는 방법.
  61. 제60항에 있어서, 상기 데이터 값들은 단정도 (single precision) 유동 소수점 넘버들임을 특징으로 하는 방법.
  62. 제60항에 있어서, 상기 데이터 값들은 배정도 (double precision) 유동 소수점 넘버들임을 특징으로 하는 방법.
  63. 제60항에 있어서, 상기 데이터 값들은 확장된 정밀도의 유동 소수점 넘버들임을 특징으로 하는 방법.
  64. 제60항에 있어서, 상기 데이터 값들은 128-비트 정밀도의 유동 소수점 넘버들임을 특징으로 하는 방법.
  65. 제54항 내지 제59항 중 어느 한 항에 있어서, 상기 데이터 값들은 정수들임을 특징으로 하는 방법.
  66. 제54항에 있어서, 상기 데이터 값들은 유동 소수점, 유동 소수점 행렬들, 유동 소수점 벡터들 및 고정 소수점 정수들임의 조합임을 특징으로 하는 방법.
  67. 적어도 한 데이터 값을 메모리 내 한 압축 구조에 저장하기 위한 데이터 전송 특성을 가진 데이터 프로세싱 장치에 있어서,
    상기 압축 구조는, 사소하지 않은 (non-trivial) 데이터 값들만 존재하는 복수의 데이터 값들 및, 상응하는 미압축 구조 내 상기 사소하지 않은 데이터 값들의 위치들을 식별시키는 맵을 포함하고,
    상기 데이터 전송 특성은, 상기 데이터 값을 저장하라는 명령에 응하는 것이며,
    상기 명령은 상기 상응하는 미압축 구조 내 상기 데이터 값의 위치를 식별하고,
    상기 데이터 전송 동작은, 상기 식별된 위치로부터 메모리 오프셋을 생성하고 상기 오프셋을 사용해 메모리를 액세스하여 상기 데이터 값을 메모리 안에 저장함을 특징으로 하는 데이터 프로세싱 장치.
  68. 제67항에 있어서, 상기 데이터 프로세싱 장치는 프로세서임을 특징으로 하는 데이터 프로세싱 장치.
  69. 제67항에 있어서, 상기 데이터 장치는 스테이트 엔진 (state engine)임을 특징으로 하는 데이터 프로세싱 장치.
KR1020107020168A 2008-02-11 2009-02-11 프로세서 KR20100122493A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB0802484A GB2457303A (en) 2008-02-11 2008-02-11 Randomly accessing elements of compressed matrix data by calculating offsets from non-zero values of a bitmap
GB0802484.6 2009-02-11

Publications (1)

Publication Number Publication Date
KR20100122493A true KR20100122493A (ko) 2010-11-22

Family

ID=39247444

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107020168A KR20100122493A (ko) 2008-02-11 2009-02-11 프로세서

Country Status (7)

Country Link
US (2) US9858073B2 (ko)
EP (1) EP2260380A1 (ko)
JP (1) JP2011511986A (ko)
KR (1) KR20100122493A (ko)
CN (1) CN101971139A (ko)
GB (1) GB2457303A (ko)
WO (1) WO2009101119A1 (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
GB2476800A (en) * 2010-01-07 2011-07-13 Linear Algebra Technologies Ltd Sparse matrix vector multiplier using a bit map of non-zero elements to control scheduling of arithmetic operations
US20120254592A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
WO2014116712A1 (en) * 2013-01-22 2014-07-31 Samplify Systems, Inc. Data compression and decompression using simd instructions
WO2015061022A1 (en) * 2013-10-22 2015-04-30 Purde Research Foundation Debugging non-deterministic embedded systems
US10133580B2 (en) 2014-12-14 2018-11-20 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor
WO2016097804A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Programmable load replay precluding mechanism
JP6286068B2 (ja) 2014-12-14 2018-02-28 ヴィア アライアンス セミコンダクター カンパニー リミテッド アウトオブオーダープロセッサでのキャッシュ不可に依存するロードリプレイを除外するメカニズム
WO2016097800A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Power saving mechanism to reduce load replays in out-of-order processor
US10114646B2 (en) 2014-12-14 2018-10-30 Via Alliance Semiconductor Co., Ltd Programmable load replay precluding mechanism
WO2016097796A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude i/o-dependent load replays in out-of-order processor
US10228944B2 (en) 2014-12-14 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus and method for programmable load replay preclusion
US10108420B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor
WO2016097802A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on long load cycles in an out-order processor
US10146540B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor
US10146547B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor
US10108421B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude shared ram-dependent load replays in an out-of-order processor
US10089112B2 (en) * 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor
US10083038B2 (en) 2014-12-14 2018-09-25 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on page walks in an out-of-order processor
US9804845B2 (en) 2014-12-14 2017-10-31 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor
US10146539B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd. Load replay precluding mechanism
US10127046B2 (en) 2014-12-14 2018-11-13 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude uncacheable-dependent load replays in out-of-order processor
JP6286065B2 (ja) 2014-12-14 2018-02-28 ヴィア アライアンス セミコンダクター カンパニー リミテッド アウトオブオーダープロセッサの書き込み結合メモリ領域アクセスに依存するロードリプレイを除外する装置及び方法
US10120689B2 (en) 2014-12-14 2018-11-06 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
US10175984B2 (en) 2014-12-14 2019-01-08 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor
US10108427B2 (en) * 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor
US10108430B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
WO2016097797A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Load replay precluding mechanism
US10108429B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude shared RAM-dependent load replays in an out-of-order processor
US10019262B2 (en) * 2015-12-22 2018-07-10 Intel Corporation Vector store/load instructions for array of structures
US10460704B2 (en) 2016-04-01 2019-10-29 Movidius Limited Systems and methods for head-mounted display adapted to human visual mechanism
US10503507B2 (en) * 2017-08-31 2019-12-10 Nvidia Corporation Inline data inspection for workload simplification
US10949947B2 (en) 2017-12-29 2021-03-16 Intel Corporation Foveated image rendering for head-mounted display devices
US10541708B1 (en) * 2018-09-24 2020-01-21 Redpine Signals, Inc. Decompression engine for executable microcontroller code
EP3830764A4 (en) * 2019-10-12 2021-06-09 Baidu.com Times Technology (Beijing) Co., Ltd. METHOD AND SYSTEM TO ACCELERATE AI TRAINING WITH ADVANCED CONNECTION TECHNOLOGIES

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB1488538A (en) * 1975-11-28 1977-10-12 Ibm Compressed refresh buffer
US4125873A (en) 1977-06-29 1978-11-14 International Business Machines Corporation Display compressed image refresh system
US4439828A (en) * 1981-07-27 1984-03-27 International Business Machines Corp. Instruction substitution mechanism in an instruction handling unit of a data processing system
US4606002A (en) 1983-05-02 1986-08-12 Wang Laboratories, Inc. B-tree structured data base using sparse array bit maps to store inverted lists
JPS6015771A (ja) * 1983-07-08 1985-01-26 Hitachi Ltd ベクトルプロセッサ
JPS62226275A (ja) * 1986-03-28 1987-10-05 Hitachi Ltd ベクトル処理装置
JPH0731669B2 (ja) * 1986-04-04 1995-04-10 株式会社日立製作所 ベクトル・プロセツサ
GB8815978D0 (en) 1988-07-05 1988-08-10 British Telecomm Method & apparatus for encoding decoding & transmitting data in compressed form
US5247638A (en) 1990-06-18 1993-09-21 Storage Technology Corporation Apparatus for compressing data in a dynamically mapped virtual data storage subsystem
US5394534A (en) 1992-09-11 1995-02-28 International Business Machines Corporation Data compression/decompression and storage of compressed and uncompressed data on a same removable data storage medium
US5805735A (en) 1995-03-02 1998-09-08 Apple Computer, Inc. Method and apparatus for compression of digitized image data using variable color fidelity
US5960465A (en) 1997-02-27 1999-09-28 Novell, Inc. Apparatus and method for directly accessing compressed data utilizing a compressed memory address translation unit and compression descriptor table
US6243081B1 (en) 1998-07-31 2001-06-05 Hewlett-Packard Company Data structure for efficient retrieval of compressed texture data from a memory system
US6145069A (en) 1999-01-29 2000-11-07 Interactive Silicon, Inc. Parallel decompression and compression system and method for improving storage density and access speed for non-volatile memory and embedded memory devices
US6591019B1 (en) * 1999-12-07 2003-07-08 Nintendo Co., Ltd. 3D transformation matrix compression and decompression
US6564305B1 (en) * 2000-09-20 2003-05-13 Hewlett-Packard Development Company Lp Compressing memory management in a device
US6442085B1 (en) * 2000-10-02 2002-08-27 International Business Machines Corporation Self-Test pattern to detect stuck open faults
JP3749507B2 (ja) * 2002-07-01 2006-03-01 株式会社ルネサステクノロジ 圧縮コードを処理するマイクロコントローラ
EP1745394B1 (en) 2004-04-26 2009-07-15 Storewiz, Inc. Method and system for compression of files for storage and operation on compressed files
US7505960B2 (en) * 2005-11-15 2009-03-17 Microsoft Corporation Scalable retrieval of data entries using an array index or a secondary key
GB2447428A (en) * 2007-03-15 2008-09-17 Linear Algebra Technologies Lt Processor having a trivial operand register
GB2447494A (en) * 2007-03-15 2008-09-17 Linear Algebra Technologies Lt A method and circuit for compressing data using a bitmap to identify the location of data values
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
US7904464B2 (en) * 2008-08-27 2011-03-08 International Business Machines Corporation Virtual list view support in a distributed directory

Also Published As

Publication number Publication date
US9858073B2 (en) 2018-01-02
JP2011511986A (ja) 2011-04-14
US20110047360A1 (en) 2011-02-24
CN101971139A (zh) 2011-02-09
WO2009101119A1 (en) 2009-08-20
GB0802484D0 (en) 2008-03-19
US20180189066A1 (en) 2018-07-05
GB2457303A (en) 2009-08-12
EP2260380A1 (en) 2010-12-15
US10719318B2 (en) 2020-07-21

Similar Documents

Publication Publication Date Title
US10719318B2 (en) Processor
ES2927546T3 (es) Procesador informático para cálculos de precisión superior que utiliza una descomposición de operaciones de precisión mixta
EP3602278B1 (en) Systems, methods, and apparatuses for tile matrix multiplication and accumulation
US8060724B2 (en) Provision of extended addressing modes in a single instruction multiple data (SIMD) data processor
EP3629158B1 (en) Systems and methods for performing instructions to transform matrices into row-interleaved format
US6334176B1 (en) Method and apparatus for generating an alignment control vector
US8713080B2 (en) Circuit for compressing data and a processor employing same
KR100500890B1 (ko) 디지탈 신호처리용 집적회로구조
EP3623941B1 (en) Systems and methods for performing instructions specifying ternary tile logic operations
US20130151822A1 (en) Efficient Enqueuing of Values in SIMD Engines with Permute Unit
EP3716054A2 (en) Interleaved pipeline of floating-point adders
EP3623940A2 (en) Systems and methods for performing horizontal tile operations
KR20190028426A (ko) Simd 아키텍처에서 레인 셔플을 위한 셔플러 회로
WO2017021675A1 (en) Element size increasing instruction
CN113885942A (zh) 用于将片寄存器对归零的系统和方法
CN114327362A (zh) 大规模矩阵重构和矩阵-标量操作
KR101715456B1 (ko) 스레드 오프셋 카운터
JP2001501001A (ja) データ処理システムにおける入力オペランド制御
EP3929732A1 (en) Matrix data scatter and gather by row
CN114721624A (zh) 用于处理矩阵的处理器、方法和系统
KR20000048529A (ko) 데이터 처리장치의 레지스터 제어
CN112149050A (zh) 用于增强的矩阵乘法器架构的装置、方法和系统
JP5025521B2 (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

Legal Events

Date Code Title Description
WITN Withdrawal due to no request for examination