KR20150053825A - 메모리 계층 내에 임베딩된 엔트로피 인코딩된 소프트웨어의 저장 및 전환을 위한 방법들 및 장치들 - Google Patents
메모리 계층 내에 임베딩된 엔트로피 인코딩된 소프트웨어의 저장 및 전환을 위한 방법들 및 장치들 Download PDFInfo
- Publication number
- KR20150053825A KR20150053825A KR1020157011179A KR20157011179A KR20150053825A KR 20150053825 A KR20150053825 A KR 20150053825A KR 1020157011179 A KR1020157011179 A KR 1020157011179A KR 20157011179 A KR20157011179 A KR 20157011179A KR 20150053825 A KR20150053825 A KR 20150053825A
- Authority
- KR
- South Korea
- Prior art keywords
- mix
- mask
- mix mask
- compressed
- index
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/1014—Compression, i.e. RAID systems with parity using compression techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/40—Specific encoding of data in memory or cache
- G06F2212/401—Compressed data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Executing Machine-Instructions (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
X―인덱스 및 Y―인덱스 포맷 내 커스텀 엔트로피 바운딩된 인코딩은, X 패턴 메모리 및 Y 패턴 메모리로 이루어진 커스텀 디코딩 딕셔너리와 함께 프로그램 코드의 세그먼트에 대해 발생된다. 런타임 디코딩에서, 실행 가능한 명령을 판정하도록, X―인덱스를 따라 X 패턴 메모리로부터 선택된 X 패턴, 및 Y―인덱스를 따라 Y 패턴 메모리로부터 선택된 Y 패턴에 믹스 마스크가 사용된다. 믹스 마스크는, X 패턴과 Y 패턴으로부터 결합하도록 비트들의 순서를 식별한다. 디코딩 메커니즘 및 어드레스 전환의 적절한 하드웨어 구현 및 배치는 인코딩된 코드 세그먼트의 실행 중에 설명된다. 유전적 프로세스를 포함하는 방법들은 또한, X―인덱스, Y―인덱스, X 패턴들, Y 패턴들 및 하나 또는 2개 이상의 믹스 마스크들을 판정하도록 설명된다.
Description
본 발명은 일반적으로 임베딩된 소프트웨어에서의 코드 밀도를 개선하기 위해 압축된 명령 세트들을 갖는 프로세서들에 관한 것이며, 보다 상세하게는 압축된 명령들을 발생시키고, 압축된 명령들을 저장하며, 압축된 명령들을 전환하기 위한 기술들에 관한 것이다.
휴대 전화들, 랩톱 컴퓨터들, 개인 휴대 정보 단말기들(PDA들) 등과 같은 많은 휴대용 제품들은, 통신 및 멀티미디어 애플리케이션들을 지원하는 프로그램을 실행하는 프로세서의 사용을 필요로 한다. 이러한 제품들을 위한 프로세싱 시스템은, 명령들, 입력 오퍼랜드(operand)들 및 실행의 결과들을 위한 스토리지를 각각 갖는 하나 또는 2개 이상의 프로세서들을 포함한다. 예컨대, 프로세서에 대한 명령들, 입력 오퍼랜드들 및 실행의 결과들은, 범용 레지스터 파일, 멀티―레벨 명령 캐시들, 데이터 캐시들 및 시스템 메모리로 이루어진 계층 메모리 서브시스템에 저장될 수도 있다.
높은 코드 밀도를 제공하기 위해, 32―비트 명령 포맷의 서브세트인 16―비트 명령 포맷과 같은 2개의 명령 포맷들을 갖는 네이티브 명령 세트 아키텍쳐(ISA)가 사용될 수도 있다. 많은 경우들에 있어서, 인출된 16―비트 명령은, 디코딩 프로세스에 앞서 또는 디코딩 프로세스에서 프로세서에 의해 32―비트 명령으로 변환되며(transformed), 이는 실행 하드웨어가 오직 32―비트 명령 포맷을 지원하도록 설계되는 것을 허용한다. 32―비트 명령들의 서브세트인 16―비트 명령들의 사용은, 16―비트 포맷으로 인코딩될 수 있는 정보의 양을 한정하는 제약(restriction)이다. 예컨대, 16―비트 명령 포맷은 어드레스 가능한(addressable) 소스 오퍼랜드 레지스터들과, 특정될 수도 있는 목적지(destination) 레지스터들의 수를 한정할 수도 있다. 16―비트 명령 포맷은, 예컨대, 3―비트 또는 4―비트 레지스터 파일 어드레스 필드들을 사용할 수도 있는 데 반해, 32―비트 명령은 5―비트 필드들을 사용할 수도 있다. 프로세서 파이프라인 복잡도(complexity)는 또한, 2개의 포맷들이, 16―비트 및 32―비트 명령들로의 분기(branching)와 같은 어느 정도의 명령 어드레싱 제약들로 인해 프로그램에 섞여 있는 경우에 증가할 수도 있다. 또한, 코드 압축에 대한 요구 사항들은, 프로그램마다 변화하여 하나의 프로그램을 위해 선택된 고정된 16―비트 명령 포맷이 다른 프로그램에 의한 사용에 덜 유리하게 된다. 이 점에서, 존재하는 프로세서들에 대한 레거시(legacy) 코드는, 코드 밀도를 상당히 개선시키고 많은 경우들에 있어서 실시간 요구 사항들을 충족시키기 위해, 2개의 명령 포맷들을 효과적으로 활용할 수 없을 수도 있다. 이러한 그리고 다른 제약들은, 표준 크기 명령들에 사용된 필드들의 서브세트들인 필드들을 갖는 감소된 크기의 명령들의 유효성(effectiveness)을 한정한다.
본 발명의 몇개의 양상들 중, 본 발명은 압축된 명령 세트를 사용하는 압축된 프로그램으로부터 네이티브 명령 세트를 사용하는 프로그램을 디커플링(decouple)할 필요성을 다룬다(address). 여기에 다루어진 기술들은, 소프트웨어의 실행 시간 및 효율성에 영향을 미치지 않고, 임베딩된 소프트웨어용 스토리지 및 전송 도관의 매우 효율적인 활용을 허용한다.
이러한 목적들을 위해, 본 발명의 일 실시형태는 압축된 가변(variable) 길이 명령들을 압축 해제하기 위한 방법을 제공한다. 컴팩트한 고정된 길이 명령들은, 압축된 가변 길이 명령들을 저장하도록 구성된 시스템 메모리로부터 인출(fetch)되며, 여기서 각 컴팩트한 고정된 길이 명령은 X―인덱스 및 Y―인덱스를 포함한다. 각 컴팩트한 고정된 길이 명령에 대해, X―비트 패턴이 X―인덱스를 사용하여 X 메모리로부터 인출되고, Y―비트 패턴이 Y―인덱스를 사용하여 Y 메모리로부터 인출된다. 각 컴팩트한 고정된 길이 명령에 관련된 믹스 마스크에 기초하여, X―비트 패턴이 Y―비트 패턴과 압축 해제된 가변 길이 명령으로 결합되며, 여기서 압축 해제된 가변 길이 명령의 포맷 길이는 관련된 믹스 마스크에 의해 판정된다.
본 발명의 또 다른 실시형태는 가상 메모리 시스템에 저장된 압축된 명령들을 전환하기 위한 장치를 다룬다. 페이징된(paged) 명령 캐시는 압축되지 않은 명령들의 페이지들과 섞인 압축된 명령들의 페이지들을 저장하도록 구성된다. 명령 전환 색인 버퍼(TLB; translation look aside buffer)는 압축된 명령들을 저장하는 것으로서, 페이징된 캐시 내 페이지를 식별하는 어드레스 전환 엔트리를 저장하도록 구성된다.
본 발명의 또 다른 실시형태는 압축된 명령들을 실행 가능한 포맷으로 전환시키기 위한 시스템을 다룬다. 레벨 2 캐시는 각 압축된 명령에 대한 X―인덱스 및 Y―인덱스를 저장하도록 구성된다. 전환 유닛은 레벨 2 캐시로부터 압축된 명령들을 수신하고, 각 수신된 압축된 명령들에 대해, X―인덱스 및 Y―인덱스를 사용하여 전환 메모리로부터 X―비트 패턴 및 Y―비트 패턴을 선택(select)하고, 그리고 선택된 X―비트 패턴 및 Y―비트 패턴을 네이티브 명령 포맷으로 결합하기 위해 프로그램 특정된 믹스 마스크를 사용하도록 구성된다. 레벨 1 캐시는 각 압축된 명령에 대한 네이티브 명령 포맷을 저장하도록 구성된다.
본 발명의 또 다른 실시형태는 압축된 명령들을 효율적으로 전환하기 위해 믹스 마스크를 판정하는 방법을 다룬다. 오프스프링(offspring) 믹스 마스크들의 쌍들을 생성(produce)하기 위해, 믹스 마스크들의 시드 개체군(population)으로부터 유전자(gene)들로서 나타낸 믹스 마스크들의 쌍들이 브리딩(breed)된다. 시드 개체군을 업데이트하는 변이된(mutated) 오프스프링 믹스 마스크들을 생성하도록, 오프스프링 믹스 마스크들이 변이된다. 믹스 마스크는 높은 레벨의 압축을 제공하는 업데이트된 시드 개체군으로부터 판정되며, 여기서 비트들의 패턴들은, 프로그램의 압축된 명령들을 실행 가능한 형태로 전환하도록 판정된 믹스 마스크에 따라 결합된다.
본 발명의 추가의 특징들 및 이점들뿐만 아니라 본 발명의 더 완전한 이해는, 이하의 상세한 설명 및 첨부 도면들로부터 명백해질 것이다.
도 1은 본 발명의 일 실시형태가 유리하게 이용될 수도 있는 예시적인 무선 통신 시스템의 블록도이다.
도 2는 본 발명에 따른, 런타임 압축 해제를 위해 설계된 코드 압축용 시스템이다.
도 3은 본 발명에 따른, 믹스 마스크에 기초하여 바이트 오버랩 패드 비트들을 갖는 X 패턴 및 Y 패턴으로 명령을 나누는 명령 분할 프로세스의 예시적인 엘리먼트들을 도시한다.
도 4는 본 발명에 따른, 메인 메모리 및 레벨 2 캐시에 압축된 형태로 저장되며, 레벨 1 캐시에 저장되도록 압축 해제되는 프로그램들을 갖는 압축 해제 시스템이다.
도 5a는 본 발명에 따른, 제 2 믹스 마스크에 기초하여 바이트 오버랩 패드 비트들을 갖는 제 2 X 패턴 및 제 2 Y 패턴으로 제 2 명령을 나누는 제 2 명령 분할 프로세스의 예시적인 엘리먼트들을 도시한다.
도 5b는 본 발명에 따른, 3개의 상이한 마스크들 Amm≠Bmm≠Cmm을 갖는 X 메모리 및 Y 메모리에서 도 3의 Ax, Ay 패턴들 및 도 5a의 Bx, By 패턴들에 대한 예시적인 저장 어레인지먼트(arrangement)를 도시한다.
도 5c는 본 발명에 따른, 메인 메모리 및 레벨 2 캐시에 압축된 형태로 저장되며, 레벨 1 캐시에 압축되지 않은 형태로 저장되도록 다수의 믹스 마스크들 및 인덱스 압축을 사용하여 압축 해제되는 프로그램들을 갖는 압축 해제 시스템이다.
도 6은 본 발명에 따른 VLIW 패킷 압축 포맷을 도시한다.
도 7은 본 발명에 따른, 압축된 페이지들과 압축되지 않은 페이지들을 갖는, 메모리 조직(organization) 및 페이징된 명령 전환 색인 버퍼(ITLB)를 도시한다.
도 8a는 본 발명에 따른, 압축된 명령 페이지들을 압축 해제하고, 압축되지 않은 명령 페이지들을 액세스하기 위한 페이징된 압축 해제 시스템을 도시한다.
도 8b는 프로세서 파이프라인 상의 실행에 대한 L2 캐시 압축된 페이지 명령들 및 L1 I캐시 압축 해제된 명령들의 상태를 도시하는, 예시적인 압축 해제 상태도를 도시한다.
도 9a―9c는 본 발명에 따른, 다양한 유전적 알고리즘에 기초한 유전적 믹스 마스크 판정 프로세스를 도시한다.
도 9d는 본 발명에 따른, 크로스오버 알고리즘의 구현(implementation)을 도시한다.
도 9e는 본 발명에 따른, 변이(mutation) 알고리즘의 구현을 도시한다.
도 10은 본 발명에 따른, 예시적인 현재 값(current cost) 프로세스를 도시한다.
도 11은 본 발명에 따른, 가중된 해밍 휴리스틱(Hamming heuristic)을 도시한다.
도 12는 본 발명에 따른, 패드―분류를 갖는 완결(exhaustive) 검색 X/Y 테이블 컴팩트화(compaction) 프로세스를 도시한다.
도 13은 본 발명에 따른, 압축된 저장 프로세스로의 심볼의 삽입을 도시한다. 그리고,
도 14는 본 발명에 따른, 패드―분류 프로세스를 갖는 삼각형의 X/Y 테이블 컴팩트화를 도시한다.
도 2는 본 발명에 따른, 런타임 압축 해제를 위해 설계된 코드 압축용 시스템이다.
도 3은 본 발명에 따른, 믹스 마스크에 기초하여 바이트 오버랩 패드 비트들을 갖는 X 패턴 및 Y 패턴으로 명령을 나누는 명령 분할 프로세스의 예시적인 엘리먼트들을 도시한다.
도 4는 본 발명에 따른, 메인 메모리 및 레벨 2 캐시에 압축된 형태로 저장되며, 레벨 1 캐시에 저장되도록 압축 해제되는 프로그램들을 갖는 압축 해제 시스템이다.
도 5a는 본 발명에 따른, 제 2 믹스 마스크에 기초하여 바이트 오버랩 패드 비트들을 갖는 제 2 X 패턴 및 제 2 Y 패턴으로 제 2 명령을 나누는 제 2 명령 분할 프로세스의 예시적인 엘리먼트들을 도시한다.
도 5b는 본 발명에 따른, 3개의 상이한 마스크들 Amm≠Bmm≠Cmm을 갖는 X 메모리 및 Y 메모리에서 도 3의 Ax, Ay 패턴들 및 도 5a의 Bx, By 패턴들에 대한 예시적인 저장 어레인지먼트(arrangement)를 도시한다.
도 5c는 본 발명에 따른, 메인 메모리 및 레벨 2 캐시에 압축된 형태로 저장되며, 레벨 1 캐시에 압축되지 않은 형태로 저장되도록 다수의 믹스 마스크들 및 인덱스 압축을 사용하여 압축 해제되는 프로그램들을 갖는 압축 해제 시스템이다.
도 6은 본 발명에 따른 VLIW 패킷 압축 포맷을 도시한다.
도 7은 본 발명에 따른, 압축된 페이지들과 압축되지 않은 페이지들을 갖는, 메모리 조직(organization) 및 페이징된 명령 전환 색인 버퍼(ITLB)를 도시한다.
도 8a는 본 발명에 따른, 압축된 명령 페이지들을 압축 해제하고, 압축되지 않은 명령 페이지들을 액세스하기 위한 페이징된 압축 해제 시스템을 도시한다.
도 8b는 프로세서 파이프라인 상의 실행에 대한 L2 캐시 압축된 페이지 명령들 및 L1 I캐시 압축 해제된 명령들의 상태를 도시하는, 예시적인 압축 해제 상태도를 도시한다.
도 9a―9c는 본 발명에 따른, 다양한 유전적 알고리즘에 기초한 유전적 믹스 마스크 판정 프로세스를 도시한다.
도 9d는 본 발명에 따른, 크로스오버 알고리즘의 구현(implementation)을 도시한다.
도 9e는 본 발명에 따른, 변이(mutation) 알고리즘의 구현을 도시한다.
도 10은 본 발명에 따른, 예시적인 현재 값(current cost) 프로세스를 도시한다.
도 11은 본 발명에 따른, 가중된 해밍 휴리스틱(Hamming heuristic)을 도시한다.
도 12는 본 발명에 따른, 패드―분류를 갖는 완결(exhaustive) 검색 X/Y 테이블 컴팩트화(compaction) 프로세스를 도시한다.
도 13은 본 발명에 따른, 압축된 저장 프로세스로의 심볼의 삽입을 도시한다. 그리고,
도 14는 본 발명에 따른, 패드―분류 프로세스를 갖는 삼각형의 X/Y 테이블 컴팩트화를 도시한다.
본 발명은 이제 첨부 도면들을 참조하여 더 완전하게 설명될 것이며, 여기에 본 발명의 몇개의 실시형태들을 나타낸다. 그러나, 본 발명은 다양한 형태들로 구현될 수도 있으며, 여기에 제시된 실시형태들에 한정되는 것으로 해석되어서는 안된다. 오히려, 이들 실시형태들은, 본 개시물이 빈틈없이 완전해지며, 당업자들에게 본 발명의 범위를 완전히 전달하도록 제공된다.
본 발명의 교시들에 따라 동작되거나 동작(operation)들을 수행(carry out)하기 위한 컴퓨터 프로그램 코드 또는 "프로그램 코드"는, C, C++, JAVA®, Smalltalk, JavaScript®, Visual Basic®, TSQL, 펄(Perl) 또는 다양한 다른 프로그래밍 언어들과 같은 높은 레벨의 프로그래밍 언어로 초기에 기입될 수도 있다. 이들 언어들 중 하나로 기입된 소스 프로그램 또는 소스 코드는, 네이티브 명령 포맷으로 인코딩된 명령들을 사용하여 높은 레벨의 프로그램 코드를 네이티브 어셈블러 프로그램으로 변환(convert)함으로써 타겟 프로세서 아키텍쳐로 컴파일링(compile)된다. 타겟 프로세서 아키텍쳐용 프로그램들은 또한 네이티브 어셈블러 언어로 직접 기입될 수도 있다. 네이티브 어셈블러 프로그램은 기계 레벨 2진 명령들의 명령 연상기호 표현들(mnemonic representations)을 사용한다. 여기에 사용된 바와 같은 컴파일러 또는 프로그래머(human programmer)에 의해 생성된 컴퓨터 판독 가능한 매체 또는 프로그램 코드는, 그 포맷이 프로세서에 의해 이해 가능한 목적 코드와 같은 기계 언어 코드를 언급한다.
도 1은 본 발명의 일 실시형태가 유리하게 이용될 수도 있는 예시적인 무선 통신 시스템(100)을 도시한다. 설명을 위해, 도 1은 3개의 원격 유닛들(120, 130 및 150)과, 2개의 기지국들(140)을 나타낸다. 일반적인(common) 무선 통신 시스템들은 더 많은 원격 유닛들과 기지국들을 가질 수도 있음이 인식될 것이다. 컴포넌트들(125A, 125C, 125B 및 125D)로 각각 나타낸 바와 같은 하드웨어 컴포넌트들, 소프트웨어 컴포넌트들 또는 둘 모두(both)를 포함하는 원격 유닛들(120, 130, 150)과, 기지국들(140)은 이하에 더 논의된 바와 같이 본 발명을 구현하도록 적응되었다. 도 1은 기지국들(140)로부터 원격 유닛들(120, 130 및 150)로의 포워드 링크 신호들(180) 및 원격 유닛들(120, 130 및 150)로부터 기지국들(140)로의 리버스 링크 신호들(190)을 나타낸다.
도 1에서, 원격 유닛(120)은 이동 전화로서 도시되고, 원격 유닛(130)은 휴대용 컴퓨터로서 도시되며, 원격 유닛(150)은 무선 가입자 회선 시스템(wireless local loop system)에서의 고정된 위치 원격 유닛으로서 도시된다. 예로서, 원격 유닛들은 대안적으로는, 휴대 전화들, 호출기들, 무전기들, 휴대용 개인 휴대 통신(PCS) 유닛들, 개인 휴대 정보 단말기(PDA)들과 같은 휴대용 데이터 유닛들, 또는 미터 판독 장비와 같은 고정된 위치 데이터 유닛들일 수도 있다. 도 1은 개시물의 교시들에 따른 원격 유닛들을 도시하고 있음에도 불구하고, 개시물은 이들 예시적으로 도시된 유닛들에 한정되지 않는다. 본 발명의 실시형태들은 임의의 프로세서 시스템에 적절하게 이용될 수도 있다.
도 2는 본 발명에 따른, 런타임 압축 해제를 위해 설계된 코드 압축용 압축 시스템(200)이다. 압축 시스템(200)은 컴파일링되는 현행 프로그램 애플리케이션을 포함하는 소스 코드 및 라이브러리 파일들(204)에 압축 해제된 형태로 2진 라이브러리 파일들과, 상술한 바와 같은 소스 코드를 포함한다. 압축 시스템(200)은 또한 컴파일러 및 링커(206), 네이티브 명령 세트 아키텍쳐(ISA) 포맷들에 기초하여, 링크된 실행 가능한 코드(210)를 생성하는데 사용되는 선택적인 프로파일 피드백 정보(208)를 포함하며, 지원 데이터 섹션들(212)을 포함한다. 네이티브 ISA는 고정되고, 압축되지 않은 포맷에 의해 나타내며, 예컨대 고정된 64 또는 32 또는 16―비트 인코딩들 및 이러한 인코딩들의 믹스쳐(mixture)를 포함하는 다양한 방식들을 나타낼 수 있다. 네이티브 ISA는 일반적인(general) 유틸리티용으로 개발되며, 바로 사용 가능한 현행 애플리케이션용으로 특정하게 맞춤화되는 것은 아니다. 16―비트 및 32―비트 명령들이 코드 내에서 함께 혼합될 수도 있음에도 불구하고, 32―비트 명령 워드 경계들과 같은 고정된 워드 경계들을 유지함으로써, 브랜치들, 호출들, 리턴들 등을 위해 오직 고정된 워드 어드레스들을 지원하는 어드레싱 모델이 사용될 수도 있다.
이러한 ISA로부터 선택된 명령들은, 코드의 어드레스 가능도(addressability)를 유지하고 빠르고, 고정된 지연 압축 해제 시간을 보장하면서, 압축될 수도 있으며, 현행 애플리케이션에 맞춤화될 수도 있다. 이러한 압축은 선형(linear) 시간에서 압축된 코드를 생성하도록 자동화될 수도 있다. 자신의 매우 일반화된 특성으로 오리지널(original) ISA는 낮은 정보제공 엔트로피(informational entropy)를 가지며, 이는 주어진 소스 코드 및 라이브러리 파일들(204)에 대한 커스텀 엔트로피 바운딩된(bounded) 인코딩을 생성함으로써 본 발명에 따라 증가된다. 링크된 실행 가능한 코드(210)는, 압축된 코드(218) 및 디코딩 테이블들(220)을 발생시키는 전환 툴(216)에 대한 입력으로서 제공된다. 압축된 코드(218) 및 지원 데이터 섹션들(212)은, 하드 디스크, 광학 디스크, 임베딩된 디바이스의 플래시 메모리 또는 다른 이러한 저장 매체와 같은 정적 저장 디바이스(214)에 저장되며, 이로부터 선택된 코드는 실행을 위해 프로세서 컴플렉스(complex)(203)로 다운로딩될 수도 있다. 프로세서 컴플렉스(203)는 메인 메모리(222), 레벨 2 캐시(L2 캐시) 및 프로세서 코어(226)를 포함한다. 프로세서 코어(226)는, 본 발명에 따른 전환 메모리(TM)(230)를 갖는 디코더(228), 레벨 1 명령 캐시(L1 I캐시)(232) 및 실행 파이프라인(234)을 포함한다. 압축된 코드는 정적 저장 디바이스(214), 메인 메모리(222) 및 L2 캐시(224)에 저장된다. 압축 해제된 코드는 L1 캐시에 저장되며, 실행 파이프라인(234)에 의해 실행된다. 압축된 코드(218)를 발생시키며 압축된 명령들을 디코더(228)에서 디코딩하기 위한 전환 툴(216)의 다양한 실시형태들은 이하에 더 상세하게 설명된다.
프로세서 컴플렉스(203)는, 압축되지 않은 형태로 L1 I캐시(232)에 저장되며 압축된 형태로 L2 캐시(224) 및 메인 메모리(222)에 저장되어 있는 프로그램 코드를 실행시키기 위해 도 1의 하드웨어 컴포넌트들(125A―125D)에서 적절하게 이용될 수도 있다. 프로세서 컴플렉스에 접속할 수도 있는 주변 디바이스들은 논의의 명료성을 위해 나타내지 않는다. 프로세서 코어(226)는 범용 프로세서, 디지털 신호 프로세서(DSP), 애플리케이션 특정 프로세서(ASP) 등일 수도 있다. 프로세싱 컴플렉스(203)의 다양한 컴포넌트들은 주문형 반도체(ASIC) 기술, 필드 프로그램 가능한 게이트 어레이(FPGA) 기술, 또는 다른 프로그램 가능한 로직, 이산 게이트 또는 트랜지스터 로직, 또는 의도된 애플리케이션에 적합한 임의의 다른 사용 가능한 기술을 사용하여 구현될 수도 있다. 단일 프로세서 코어(226)를 나타내었지만, 본 발명의 압축된 명령들의 프로세싱은 수퍼스칼라(superscalar) 설계들과, 멀티스레드(multi―threaded), 멀티―코어 및 VLIW(very long instruction word) 설계들과 같은 병렬 파이프라인들을 구현하는 다른 아키텍쳐들에 적용 가능하다.
도 3은 본 발명에 따라, 2진 믹스 마스크(MM)(304)에 기초하여 오리지널 ISA 고정된 크기 명령 A(302)를, 오버랩 패드 비트들(310 및 312)을 갖는 Ax 패턴(306) 및 Ay 패턴(308)으로 나누는 명령 분할 프로세스의 예시적인 엘리먼트들(300)을 도시한다. 패드 비트들은 최신 메모리 시스템들에 의해 부과된 요구 사항들로 인해 적어도 바이트 입도(granularity) 세그먼트들로 데이터 및 명령들을 나타내도록 생성된다. 바이트 입도 세그먼트들을 갖는 포맷들의 사용은, 저장 시스템의 바이트 입도 요구 사항들을 만족하는 동안 비트 입도에 대한 저장 오버랩을 허용하는, 신규하며 컴팩트한 표현을 제공하도록 활용된다.
오리지널 ISA 코드 세그먼트를 압축하기 위해, 코드 세그먼트는 명령들의 그룹들로 분할되는데, 각 그룹은 단일 공유된 X 패턴 및 일 세트의 고유의 Y 패턴들에 기여한다. Ax 패턴(306)은 명령 A가 속하는 명령들의 그룹에 공통(common)인 비트 패턴을 나타낸다. Ay 패턴(308)은 명령들의 동일한 그룹 내 일 세트의 고유의 비트 패턴들 중 하나를 나타낸다. 코드 세그먼트는 하나 내지 N개의 임의의 수의 그룹들로 분할될 수 있음에 주의하며, 여기서 N은 코드 세그먼트 내 오리지널 명령들의 수이다. 최적 또는 준최적 그룹들의 수 및 최적 또는 준최적 믹스 마스크를 판정하기 위한 프로세스는 이하에 더 설명되는 중대한 프로세스이다. 코드 세그먼트용 X 패턴들은 X 메모리로 이루어진 X 딕셔너리에 저장되며, 코드 세그먼트용 Ay 패턴들은 Y 메모리로 이루어진 Y 딕셔너리에 저장된다. X 인덱스는 X 메모리 내 위치의 어드레스이며, Y 인덱스는 Y 메모리 내 위치의 어드레스이다. 이들 2개의 인덱스들, X 및 Y 딕셔너리들로부터의 패턴들 및 2진 믹스 마스크의 결합은 오리지널 명령을 판정론적으로 나타낸다. 바이트 어드레스 가능한 X/Y 딕셔너리 패턴들은 X/Y 메모리에 컴팩트한 형태로 저장되지만, 가변 길이 압축 해제 없이도 액세스 가능하다. 가변 길이 압축 해제는 가변 길이 압축된 심볼들을 네이티브 고정된 크기의 알파벳으로 역방향으로 매핑(mapping)하는 프로세스에 기초한다. 고정된 크기 인덱스 압축은 이 표현을 위해 사용되며, 나중에 논의된다. 압축 동작(314)은, 명령(302)으로부터 선택할 코드 세그먼트에 대한 적어도 하나의 믹스 마스크, Ax 패턴(306) 및 Ay 패턴(308)을 사용한다. 하기 예들에서, 16진법의 수 또는 헥스(Hex) 수는 'Ox' 프리픽스로 나타낸다. 예컨대, 명령(302)[0x9F6D0121]은, Ax 패턴(306)[0x9F00(8,9,A,B)]과 Ay 패턴(308)[0xDA8(4,5,6,7)]을 생성하도록, 믹스 마스크(304)[0xFF80FF80]와 결합된다. 디코더(228) 압축 해제 동작(316)은, 압축된 명령을 압축 해제하도록, 코드 세그먼트에 대한 적어도 하나의 믹스 마스크, X 인덱스 인출된 X 메모리 패턴 및 Y 인덱스 인출된 Y 메모리 패턴을 사용한다. 예컨대, 믹스 마스크(304)[0xFF80FF80]는, 오리지널 명령(302)[0x9F6D0121]을 생성하도록, X 메모리로부터 인출된 Ax 패턴(306)[0x9F00(8,9,A,B)], 및 Y 메모리로부터 인출된 Ay 패턴(308)[0xDA8(4,5,6,7)]과 결합된다.
상술한 바와 같이, X 패턴들 및 Y 패턴들은 바이트 어드레스 가능한 X 메모리 및 바이트 어드레스 가능한 Y 메모리에 저장된다. X 패턴들, Y 패턴들, 또는 둘 모두(both)의 인덱스 압축은, 중복(duplicate)들을 제거하고, 물리적 저장의 이중 활용을 감소시키며, 오버랩 패드 비트들(310 및 312) 및 바이트 어드레스 가능한 위치와 같이 패드 비트들을 오버랩하는 프로세스를 이용한다. 제 1 X 패턴은 제 1 X 패턴의 엔딩(ending) 비트들을 제 2 X 패턴의 비기닝(beginning) 비트들과 공유함으로써 제 2 X 패턴과 오버랩될 수도 있다. 이 비교에서, 오버랩된 패드 비트들을 갖는 바이트는 도 3에 지시된 바와 같은 옵션들의 추가의 범위를 허용한다. 예컨대, Ax 패턴(306)은, 제 1 바이트(0x9F)와, 제 2 바이트(0x00)와, 오버랩 패드 비트들(310)로 인해 세트 {8, 9, A, B} 중 하나인 값을 갖는 제 1 니블(nibble) 및 0x00 내지 OxFF(0x00 및 OxFF 포함)의 임의의 수일 수도 있는 제 2 니블(nibble)로 이루어진 제 3 바이트를 포함하는 3개의 바이트들로 이루어진다. 제 1 Ax 패턴(306)과 오버랩될 제 2 X 패턴은, 비기닝 비트들의 제 1 니블에서 세트 {8, 9, A, B} 중 하나 및 비기닝 비트들의 제 2 니블에서 0x00 내지 OxFF(0x00 및 OxFF 포함)의 임의의 수를 가질 것이다. 제 1 Ax 패턴(306)과 오버랩될 제 3 X 패턴에 대한 또 다른 가능한 오버랩 패턴은, 비기닝 비트들의 제 1 바이트에서 0x00, 비기닝 비트들의 다음(next) 니블에서 세트 {8, 9, A, B} 중 하나, 및 비기닝 비트들의 다음에 이어지는 니블에서 0x00 내지 OxFF(0x00 및 OxFF 포함)의 임의의 수를 갖는다. Y 패턴들에 있어서, Ay 패턴(308)은, 제 1 바이트(OxDA) 및 제 1 니블(0x8)과 오버랩 패드 비트들(312)로 인해, 세트 {4, 5, 6, 7} 중 하나일 수도 있는 제 2 니블로 이루어진 제 2 바이트를 포함하는 2개의 바이트들로 이루어진다. 이러한 역량(capability)들로, 128―비트 라인에 4개의 압축되지 않은 명령들을 저장하는 것이 가능하며, 32―비트 내지 16―비트 압축에 대해서는 패딩 및 오버랩으로 동일한 공간에 8개보다 더 많은 압축된 명령들을 저장하는 것이 가능하다. 예컨대, 압축된 명령들 중 4개가 바이트 오버랩으로 저장될 수 있다면, 10개의 16―비트 압축된 명령들은 128―비트 라인에 저장될 수 있다. 따라서, 패딩 없는 방식에 비해 어드레싱 공간이 압축되며, 인덱스 어드레싱이 또한 압축될 것이다. 제 1 Ay 패턴(308)과 오버랩될 제 2 Y 패턴은, 비기닝 비트들의 제 1 니블에 '0x8'과 세트 {4, 5, 6, 7} 중 하나인 제 2 니블을 가질 것이다. 단일 믹스 마스크에 있어서, 모든 X 패턴들은 동일한 수의 비트들이며, 모든 Y 패턴들은 동일한 수의 비트들이다. 다수의 X 및 Y 패턴들에 있어서는, 최소한의 스토리지를 취하는 오직 소수의 매핑들을 갖는 다양한 매핑들을 갖는 것이 가능하며, 이는 준최적 또는 허용 가능한 매핑들로 간주된다. 최적 또는 준최적 매핑의 선택은 NP 완전(complete) 문제이며, 임의의 상당한 수들의 X 및 Y 패턴들에 대해 실용적으로 해결되지 않을 수 있다. 그럼에도 불구하고, 현행 발명은 선형 시간에서 허용 가능한 매핑을 생성하는 휴리스틱을 사용한다.
도 4는 본 발명에 따른, L1 I캐시(232)에 저장되도록 압축 해제되는, 메인 메모리(222) 및 L2 캐시(224)에 압축된 형태로 저장된 프로그램들을 갖는 압축 해제 시스템(400)이다. L2 캐시(224)는, X 인덱스 및 Y 인덱스 쌍을, 0x54의 7―비트 X 인덱스 값과 0x734의 9―비트 Y 인덱스 값을 갖는 XY 엔트리(404)와 같은 어드레스 가능한 위치들에 저장하는 XY 인덱스 메모리(402)를 포함한다. 멀티플렉서(405)는 L2 캐시 히트(406)에 대해 XY 엔트리, 또는 L2 캐시 내 미스에 대해 메인 메모리(222)로부터 XY 값(407)을 선택하는데 사용된다. 압축 해제 동작은, 인덱스 X 레지스터(408), 인덱스 Y 레지스터(410), X 메모리(412), Y 메모리(414), 단일 MM 레지스터(416) 및 결합기(418)를 갖는 디코더(228)에서 수행(accomplish)된다. L1 I캐시(232)는 압축되지 않은 명령들을 보유하는 캐시 라인(420)과 같은 복수의 캐시 라인들을 포함한다.
프로그램 로딩에서 또는 임베딩된 시스템 부트 프로세스에서, 메인 메모리(222)는 압축된 코드로 로딩되고, X 메모리(412) 및 Y 메모리(414)는 관련된 X 및 Y 딕셔너리 콘텍스트로 로딩되며, 단일 2진 믹스 마스크는 MM 레지스터(416)에 설정된다. 믹스 마스크뿐만 아니라 X 및 Y 메모리 콘텍스트는 필요한 경우 실행 중에 재로딩될 수 있음에 주의한다. 이러한 재로딩은 자신의 커스텀 인코딩을 각각 갖는 더 작은 섹션들에서 오리지널 코드 세그먼트의 추가의 입도를 구성할 수 있다. 예컨대, 스마트 폰들과 같은 일부 컴플렉스 임베딩된 시스템들은 메인 애플리케이션으로부터 다중 독립 자식(children) 애플리케이션들을 호출(invoke)할 수 있으며, 이는 코드 공간을 공유하지 않고 자립적이다. 이러한 각 애플리케이션은 X/Y 딕셔너리 및 MM으로 이루어진 자기 자신의 커스텀 인코딩을 가질 수 있으며, 이는 자식 프로세스 스타트업시 로딩된다.
이러한 시나리오의 양호한 예는 이메일 핸들링 애플리케이션을 시작(start)하는 스마트 폰 운영 시스템(OS)일 것이며, 이는 자신의 실행 기간에 있어서 다수의 시스템 리소스들을 점유하고 상당한 시간에 걸쳐 오직 이메일 핸들링 애플리케이션에 속하는 코드를 실행한다. 이메일 애플리케이션에 대한 커스텀 인코딩은 스타트업시 로딩되며, 이메일 애플리케이션이 운영(operation)을 종료해야만, 상이한 OS 커스텀 인코딩으로 대체된다. 게다가, 가능한 시나리오는 단일 딕셔너리가 OS 및 이메일 핸들링 애플리케이션에 사용된 경우이지만, X/Y 딕셔너리의 적절한 섹션으로 오프셋하도록 상이한 섹션들이 인덱스 X(408) 및/또는 인덱스 Y(410) 레지스터 컨텐츠들의 조정을 통해 활용된다. 인덱스 X(408) 및/또는 인덱스 Y(410) 레지스터 컨텐츠들의 로딩은 OS 간섭에 의한 시스템 레벨 리퀘스트를 통해, 예컨대, 또는 애플리케이션 코드를 따라 인코딩된 특별 명령을 통해 달성될 수도 있으며, 이는 인덱스 X(408) 및/또는 인덱스 Y(410) 레지스터 컨텐츠들의 재로딩에 대한 리퀘스트로서 프로세서에 의해 이해된다. 이 경우, 디코딩 테이블들(220)의 수는, L2 내에 동시 상주가 가능한 상이한 인코딩을 갖는 프로그램 세그먼트들의 수와 동일하다. 상기 스마트 폰 예를 사용하여, OS 특정 인코딩들을 항상 보유하는 전환 메모리(TM)(230)를 갖는 자기 자신의 디코더(228)로 OS가 전용된 경우, 시스템은 활용된 시스템 애플리케이션들에 대해 커스텀화된 상이한 인코딩을 보유하는 또 다른, 애플리케이션 특정 TM(230)을 통합할 수 있다. 어떤 전환 메모리(230)가 적절한지를 판정하는 것은 코드 페이지별로 TLB 엔트리들을 통해 이루어질 수도 있다. 반대로, 오직 하나의 TM(230)이 시스템에 설계된 경우, 하기 절차는 설치된 TM(230)의 용량에 따라 적절해질 수도 있다. 상기 예에서와 같이, OS TM(230)의 용량을 초과하는 다수의 독립 인코딩들이 여전히 요구되는 경우, 일단 OS가 이메일 핸들링 애플리케이션을 시작하면, 새로운 X/Y 딕셔너리가 X/Y 메모리(412, 414)로 배치된다. MM 레지스터(416)는 업데이트될 수도 있으며, L2/TLB 플러시(flush) 리퀘스트가 발행된다. L2/TLB 플러시 리퀘스트는 L2/TLB 내 OS에 대응하는 압축된 코드를 무효화한다. 설명의 나머지에 대해, 압축 해제 시스템(400)은, 임의의 애플리케이션 코드를 포함하는 전체 시스템에 사용될 단일 인코딩과, 단일 TM(230)을 갖는 디코더(228)를 사용하여 설명된다.
다음으로, 실행 파이프라인(234)은 L1 I캐시(232)로부터 명령들의 인출을 개시(begin)한다. 초기에, L1 I캐시로의 각 액세스는, L2 캐시(224)로의 액세스를 유발하는 미스 지시(422)를 발생시킨다. 초기에, L2 캐시(224)로의 액세스는 또한, 미스를 발생시켜, L2 캐시(224)에 로딩되고 멀티플렉서(405)를 통해 디코더(228)로 포워딩되는 압축된 명령으로 응답하는 메인 메모리(222)로의 액세스를 유발한다. 디코더(228)는, 도 3의 압축 해제 동작(316)에 관해 설명한 바와 같이, XY 인덱스 압축된 명령을 L1 I캐시(232)에서의 저장을 위해 그리고 실행 파이프라인(234)에서의 실행을 위해 압축되지 않은 포맷으로 압축 해제한다. 단기간의 동작 후에, L1 I캐시(232) 및 L2 캐시(224)는 정상 상태(steady state)에 도달하게 될 것이다.
프로세서의 관점에서, 실행 파이프라인(234)은, L1 I캐시(232)에서 검색될 명령의 인출 어드레스 및 제어 신호들(421)과 함께 인출 동작을 시도한다. 초기에, L1 I캐시(232)는 명령이 존재하지 않는 것으로 판정하며, 미스 지시(422)를 L2 캐시(224)에 발행한다. L2 캐시 인출 동작은, 예컨대, XY 엔트리(404)가 멀티플렉서(405)를 통해 디코더(228)로 전달되도록 유발하는 L2 캐시(224)에서의 히트인 XY 엔트리(404)에 대한 것이다. XY 엔트리(404)는, 인덱스 X 레지스터(408)에 수신된 X 인덱스 값(0x54)과, 인덱스 Y 레지스터(410)에 수신된 Y 인덱스 값(0x734)으로 나뉜다. 어드레스(0x54)에서 X 메모리(412)로부터 인출된 X 패턴(306)은 결합기(418)에 제공된다. 어드레스(0x734)에서 Y 메모리(414)로부터 인출된 Y 패턴(308)은 또한 결합기(418)에 제공된다. MM 레지스터(416)에 저장된 단일 믹스 마스크(MM)(304)[0xFF80FF80]는 결합기(418)에 더 제공된다. 결합기(418)는 캐시 라인(420)에 저장되고 실행 파이프라인(234)으로 전달되는 오리지널 명령(302)을 생성하도록, MM(304)에 따라 X 패턴(306)으로부터의 적절한 비트들과 Y 패턴(308)으로부터의 적절한 비트들을 결합한다.
이러한 시스템의 또 다른 추가의 특징들은 암시적 암호화 포맷으로 저장된 프로그램 컨텐츠이다. 데이터 스크램블링(scrambling)의 특정 암호화 타입이 명령 스트림 상에서 수행되지 않음에도 불구하고, 프로그램 코드는 애플리케이션 특정 및 압축된 형태로 정적 저장 디바이스(214), 메인 메모리(222) 및 L2 캐시(224)에 저장된다. 프로그램 코드의 인코딩된 상태의 부분이, 최종 제품에 용이하게 액세스 가능하지 않은 TM(230) 내 프로세서 코어(226) 내부에 상주하기 때문에, 정적 스토리지(214) 및 상부(upper) 메모리 계층(222 및 224) 컨텐츠는 오리지널 프로그램을 회복시키기에 불충분하여, 분석 또는 복사(copy)를 곤란하게 한다.
프로세서 코어(226)는 다수의 어드레스 공간들을 처리한다. 실행 파이프라인(234)은, 메모리 계층 전반에서 사용된 물리적 어드레스 공간과는 상이한 가상 어드레스 공간에서 동작하고 있다. 하나의 어드레스 공간의 또 다른 어드레스 공간으로의 전환 작업은 전환 색인 버퍼(TLB)에 의해 일반적으로 수행되며, 물리적 어드레스 공간이 동일한 크기의 명령들을 포함하는 경우 복잡도가 감소된다. 따라서, 본 발명에 따라, 실행 코드 세그먼트는, 요컨대 고정된 바이트 정렬된(aligned) 공간을 점유하는 X 및 Y 인덱스들의 고정된 크기 쌍들로 나타낸다. 이하에 더 상세하게 설명하는 바와 같이, 이러한 방식은 물리적 어드레싱 공간 페이징 프로세스에 기초하여 압축 및 압축되지 않은 명령들을 혼합하는 것을 허용하며, 여기서 코드 페이지는 TLB의 단일 엔트리에 의해 핸들링된 코드의 원자 단위(unit)를 나타낸다.
도 5a는 X 및 Y 메모리로의 X 및 Y 인덱스들의 배치(placement)에서 패드 비트들의 활용을 도시한다. 본 발명에 따른 또 다른 명령 B의 분할 프로세스의 예시적인 엘리먼트들(500)은 제 2 믹스 마스크(504)에 기초하여, 바이트 오버랩 패드 비트들을 갖는 제 2 X 패턴 및 제 2 Y 패턴으로 명령 B(502)를 나눈다. 제 2 코드 세그먼트를 압축하기 위해, 제 2 코드 세그먼트는 명령들의 그룹들로 분할되는데, 각 그룹은 Bx 패턴 및 1세트의 고유의 By 패턴들에 기여한다. Bx 패턴(506)은 제 2 코드 세그먼트로부터 명령들의 그룹에 공통인 비트 패턴을 나타낸다. By 패턴(508)은 명령들의 동일한 그룹에서 1세트의 고유의 비트 패턴들 중 하나를 나타낸다. 코드 세그먼트에 대한 Bx 패턴들은 X 메모리로 이루어진 X 딕셔너리에 저장되며, 코드 세그먼트에 대한 By 패턴들은 Y 메모리로 이루어진 Y 딕셔너리에 저장된다. X 인덱스는 X 메모리 내 위치의 어드레스이며, Y 인덱스는 Y 메모리 내 위치의 어드레스이다. 압축 프로세스에서, 명령(502)[OxBAFFOFEB]은, 예컨대 Bx 패턴(506)[0xBAC3(E,F)] 및 By 패턴(508)[0xFF5(8,9,A,B,C,D,E,F)]을 생성하도록, 믹스 마스크(504)[0xFFC0FF80]와 결합된다. 압축 해제 프로세스에서, 믹스 마스크(504)[0xFFC0FF80]는, 예컨대 오리지널 명령(502)[OxBAFFOFEB]을 생성하도록, X 메모리로부터 인출된 Bx 패턴(506)[0xBAC3(E,F)] 및 Y 메모리로부터 인출된 By 패턴(508)[0xFF5(8,9,A,B,C,D,E,F)]과 결합된다.
도 5b는 X 메모리(522) 및 Y 메모리(528)에 있어서, 도 3의 Ax, Ay 패턴들, 도 5a의 Bx, By 패턴들 및 여기서 Cx 및 Cy로 나타내는 또 다른 명령 C에 대한 예시적인 저장 어레인지먼트(520)를 도시한다. 본 발명에 따라, 3개의 명령들 A, B 및 C는 상이한 마스크들 Amm≠Bmm≠Cmm을 갖는다. 예컨대, X 메모리(522) 및 Y 메모리(528)는 바이트 어드레스 가능하며 64―비트들의 긴 액세스 라인들을 활용한다. Ax 패턴(306)[0x9F00(8,9,A,B)]은 Ax(523)[1001 1111 0000 0000 10]로서 2진으로 인코딩되고, By 패턴(506)[0xBAC3(E,F)]은 Bx(524)[1011 1010 1100 0011 111]로서 이진으로 인코딩되며, 예시적인 Cx(525)는 Cx(525)[1110 0000 0000 0000 1]로서 이진으로 인코딩된다. 예시적인 저장 어레인지먼트(520)에서, 믹스 마스크들 Amm(304)[OxFF80FF80], Bmm(504)[0xFFC0FF80] 및 예시적인 Cmm[FF80FF00]은 동일하지 않다. 따라서, 각 믹스 마스크에 관련된 X 패턴들은 상이한 수의 비트들이며, 또한 각 믹스 마스크에 관련된 Y 패턴들은 상이한 수의 비트들이다.
X 패턴들, Y 패턴들 또는 둘 모두(both)의 인덱스 압축은, 오버랩 패드 비트들(310, 312, 510 및 512)과 같은 오버랩 패드 비트들 및 바이트 어드레스 가능한 위치를 이용한다. 제 1 X 패턴은, 제 1 X 패턴의 엔딩 비트들을 제 2 X 패턴의 비기닝 비트들과 비교함으로써 제 2 X 패턴과 오버랩될 수도 있다. 이 비교에서, 오버랩된 패드 비트들을 갖는 바이트는 도 5b에 지시된 바와 같은 옵션들의 추가의 범위를 허용한다. 예컨대, Ax 패턴(523)은, 제 1 바이트(0x9F)와, 제 2 바이트(0x00)와, 오버랩 패드 비트들(310)로 인해 세트 {8, 9, A, B} 중 하나인 값을 갖는 제 1 니블 및 0x00 내지 OxFF(0x00 및 OxFF 포함)의 임의의 수일 수도 있는 제 2 니블로 이루어진 제 3 바이트를 포함하는 3개의 바이트들로 이루어진다. Bx 패턴(524)은 제 1 Ax 패턴(523)과 오버랩되며, Bx 패턴(524)의 제 1 니블에서, 세트 {8, 9, A, B} 중 하나인 OxB의 값을 갖는다. Bx 패턴(524)의 제 2 니블은 0x00 내지 OxFF의 수인 값(OxA)을 갖는다. Cx 패턴(525)의 비기닝 비트들은 Bx(524) 패턴의 엔딩 비트들과 오버랩된다. Y 패턴들에 대해, Y 메모리(528) 내에서 오버랩은 보이지 않는다. 비트들(534 및 535)과 같은 패턴들 사이의 비트들은, 압축 또는 압축 해제 프로세스에서 사용되지 않기 때문에, 임의의 2진 값을 취할 수도 있다. 코드 변경들 또는 추가들로 인해, 0x58의 제 1 바이트를 갖는 새로운 Dy 패턴이 발생된 경우, 새로운 Dy 패턴은 도 5b에 나타낸 바와 같이 By 패턴(532)과 오버랩될 수도 있다. 또한, 0x5의 제 1 바이트 및 세트 {8, 9, A, B, C, D, E, F} 중 하나로서 제 2 바이트를 갖는 다른 패턴들은 By 패턴(532)의 엔딩 비트들과 오버랩될 수도 있다.
도 5c는 본 발명에 따라, 레벨 1 명령 캐시(L1 I캐시)(548)에 압축되지 않은 형태로 저장될 다수의 믹스 마스크들 및 인덱스 압축을 사용하여 디코더(546)에서 압축 해제되는, 메인 메모리(542) 및 레벨 2 캐시(544)에 압축된 형태로 저장된 프로그램들을 갖는 압축 해제 시스템(540)을 도시한다. L2 캐시(544)는 0x102의 9―비트 X 인덱스 값, 0xA9의 8―비트 Y 인덱스 값 및 0x2의 2―비트 M 인덱스 값을 갖는 XYM 엔트리(554)와 같이, 어드레스 가능한 위치들에, X 인덱스, Y 인덱스 및 믹스 마스크 인덱스를 저장하는 XYM 인덱스 메모리(552)를 포함한다. 멀티플렉서(555)는, 메인 메모리(542)로부터 L2 캐시 히트(556) 또는 XYM 값(557)에 대해 XYM 엔트리를 선택하도록 사용된다. 압축 해제 동작은, 인덱스 X 레지스터(558), 인덱스 Y 레지스터(560), MM 인덱스 레지스터(561), X 메모리(562), Y 메모리(564), 다수의 MM 메모리(566), 2중 라인 X 레지스터(568), 2중 라인 Y 레지스터(570) 및 결합기(572)를 갖는 디코더(546)에서 수행된다. L1 I캐시(548)는 캐시 라인(580)과 같은 복수의 캐시 라인들을 포함한다. 초기 동작들의 기간 후에, L2 캐시(544) 및 메인 메모리(542)는 압축된 코드로 로딩되며, L1 I캐시(548)는 압축 해제된 코드로 로딩된다.
실행 파이프라인(550)이 L1 I캐시(548)로부터 명령의 인출(581)을 시도하여, 명령이 존재하지 않는 것으로 판정하는 경우, 미스 지시(582)가 발행되며, 인출이 L2 캐시(544)로 다시 보내진다(redirect). 예컨대, 인출은, XY 엔트리(554)가 멀티플렉서(555)를 통해 디코더(546)로 전달되도록 유발하는 L2 캐시(544)에서 히트인 XYM 엔트리(554)에 대한 것이다. XYM 엔트리(554)는 인덱스 X 레지스터(558)에 수신된 X 인덱스 값(0x102)과, 인덱스 Y 레지스터(560)에 수신된 Y 인덱스 값(0xA9) 및 인덱스 MM 레지스터(561)에 수신된 M 인덱스 값(0x2)으로 나뉜다. X 패턴(506)[0xBAC3E]을 포함하는 라인은, 어드레스(0x0x100)에서 X 메모리(562)로부터 인출되어, 2중 라인 X 레지스터(568)에 로딩된다. Y 패턴(508)[OxFF58]을 포함하는 라인은, 어드레스(0xA8)에서 Y 메모리(564)로부터 인출되어, 2중 라인 Y 레지스터(570)에 로딩된다. 믹스 마스크(504)[0xFFC0FF80]는 어드레스(0x2)에서 다수의 MM 메모리(566)로부터 인출되어, MM 레지스터(571)에 로딩된다. X 패턴(506)[0xBAC3E]은 0x102의 X 인덱스 값에 기초하여, 2중 라인 X 레지스터(568)로부터 선택되며, 결합기(572)에 제공된다. Y 패턴(508)[0xFF58]은 Y 인덱스 값(0xA9)에 기초하여, 2중 라인 Y 레지스터(570)로부터 선택되며, 결합기(572)에 제공된다. MM 레지스터(571)에 저장된 단일 믹스 마스크(MM)(504)[0xFFC0FF80]는 결합기(572)에 더 제공된다. 결합기(572)는, 캐시 라인(580)에 저장되어 실행 파이프라인(550)에 전달된 오리지널 명령(502)을 생성하도록, MM(504)에 따라 X 패턴(506)으로부터의 적절한 비트들과 Y 패턴(508)으로부터의 적절한 비트들을 결합한다. 2중 라인 X 레지스터 및 2중 라인 Y 레지스터에 XYM 엔트리(554)를 따라 저장된 다른 압축된 명령들은, 특히 동일한 믹스 마스크(504)를 사용하는 경우에, 명령 시퀀스에 따라, XYM 엔트리(554)의 압축 해제와 병행하여 또는 연속하는 방식으로 압축 해제될 수도 있다. 압축 해제된 가변 길이 명령의 포맷 길이는, 압축된 명령에 관련된 믹스 마스크에 의해 판정된다.
도 5b 및 도 5c에 나타낸 X 및 Y 메모리들 내에서의 개별 패턴들의 배치의 특징은, 배치가 비제한적이며 가장 좌측의 바이트 정렬에 의해 지배된다는 것이다. 패드 비트들의 높은 활용과 함께, 허용 가능하며, 최적의 또는 준최적의 배치는, 바이트 정렬 단편화(fragmentation)를 잠재적으로 최소화 또는 제거할 수 있다. 좌측 조절된 정렬 요구 사항과 같은 심볼 배치에 대한 임의의 제약은, 잠재적으로 단편화를 생성한다. 예컨대, 랜덤으로 크기가 정해진 객체(object)들의 바이트 정렬된 스토리지에서, 최악의 경우의 시나리오는, 저장된 심볼당 7―비트들이 낭비되며, 특정 심볼 배치 보증 이외에는 유용한 목적을 수행하지 않는다는 것이다. 일반적으로 인덱스 압축의 도움으로, 그리고 특히 패드 비트들의 사용으로, 이러한 7―비트들은 유용한 데이터를 저장하기 위해 사용될 수 있다. 낭비된 비트 활용으로부터의 스토리지 절약의 상한(upper bound)은, 7―비트 곱하기 스토리지 내 심볼들의 수이다. 일반적으로 인덱스 압축으로부터의 총 절약은 더 많으며, 컨텐츠들의 정보 엔트로피에 의해서만 자연적으로 바운딩된다. 또한, 동일한 물리적 비트들을 점유하며, 심볼의 길이를 암시적으로 판정하는 적절한 MM이 존재하는 경우에 오직 정확하게 추출되는 상이한 크기의 심볼들이 있을 수 있다. 단일 MM이 사용되는 경우, X/Y 딕셔너리 심볼 엔트리들은 동일한 크기를 갖는다. 다수의 믹스 마스크들이 활용된 경우, MM들이 있는 만큼 많은, 심볼 크기들 내 변경들이 있을 수 있다. 예컨대, 가변 길이 명령 포맷은 32―비트 포맷된 명령들 및 64―비트 포맷된 명령들을 포함할 수도 있다. 그럼에도 불구하고, 심볼들의 최적의 배치의 과제는 NP 완전 문제이며, 실행시 타당한 선형 시간에 완전하게 해결될 것으로 기대되지 않을 수 있다. 이러한 한정을 극복하기 위해, 휴리스틱 알고리즘들이, 도 12―14에 관해 이하 더 상세하게 설명한 바와 같이, 선형 시간에서 준최적의 배치를 생성하도록 사용된다.
압축된 명령들 및 압축되지 않은 명령들은, 동작시, 모드 스위칭을 필요로 하지 않고, 동일한 실행 가능한 코드 세그먼트에 혼합될 수도 있다. 페이징된 가상 메모리 시스템에서, 메모리의 페이지는 압축된 명령들 또는 압축되지 않은 명령들 중 어느 하나를 포함할 수도 있다. 도 6은 본 발명에 따라, 압축된 페이지들 및 압축되지 않은 페이지들을 갖는, 페이징된 가상 캐시 구성(600)을 도시한다. 가상 어드레스는 2개의 부분들로 일반적으로 인코딩된다. 어드레스 비트들의 상부 필드는, 4K 바이트 페이지들과 같이 선택된 페이지 크기에 기초하여 인코딩되는 가상 페이지 번호를 일반적으로 나타낸다. 어드레스 비트들의 하부(lower) 필드는 어드레싱된 페이지 내에서 어드레스를 식별하는 페이지 오프셋이다. 가상에서 물리적 어드레스로의 전환에서, 가상 페이지 번호는 물리적 페이지 번호로 전환된다. 페이지 오프셋은 가상 어드레스 및 물리적 어드레스 모두에 대해 동일하며, 전환되지 않는다.
가상에서 물리적 어드레스로의 전환 시스템은, 전환 프로세스의 성능을 개선하도록, 명령 및 데이터 TLB들과 같은 하나 또는 2개 이상의 전환 색인 버퍼들(TLB들)을 포함할 수도 있다. 명령 TLB(ITLB)는, 엔트리 유효화(validation) 및 액세스 허용(permission)들과 같은 저장된 페이지들의 속성(attribute)들과 함께 최근의 가상에서 물리적 어드레스로의 전환들을 저장하는 작은 캐시이다. ITLB는, 랜덤 액세스 메모리(RAM) 회로와 커플링된(coupled) 컨텐츠 어드레스 가능한 메모리(CAM) 회로를 일반적으로 포함하며, 32 또는 64개의 엔트리들을 갖는 것과 같이 상대적으로 작다. 각 ITLB 엔트리는, RAM 회로에서 전환된 물리적 페이지 번호에 관련된 최근에 사용된 가상 페이지 번호들을 갖는 CAM 회로에 태그를 포함한다. 예컨대, 페이징된 가상 캐시 구성(600)은 ITLB(602) 및 압축된 페이지들(608)과 섞인 압축되지 않은 페이지들(606)을 갖는 물리적 메모리(604)를 사용한다. ITLB(602)의 각 엔트리는 가상 어드레스 태그(610)와, 유효(V) 플래그, 판독(R) 플래그, 기입(W) 플래그와 같은 엔트리 플래그들(612)과, 물리적 페이지(P―페이지) 어드레스(614) 및 압축된(C) 필드(616)를 갖는다. C 필드(616)는, 예컨대, 모든 압축된 페이지들에 대한 단일 믹스 마스크를 갖는 시스템에 대해 압축 또는 압축되지 않은 바와 같이 페이지를 식별하는데 적절한 단일 비트일 수도 있다. 대안적으로는, C 필드(616)는 2개 또는 3개 이상의 비트들일 수도 있으며, 이는 2개의 비트 필드의 경우 압축되지 않은 "00", 제 1 믹스 마스크로 압축된 "01", 제 2 믹스 마스크로 압축된 "10" 및 제 3 믹스 마스크로 압축된 "11"을 지시할 수도 있다. 명령 또는 코드의 블록을 압축 또는 압축하지 않을 것에 대한 판정은 컴파일화 및 코드 압축 시간에서 정적으로 행해지며, 다양한 인자들에 의존할 수도 있다. 예를 들면, 시스템의 실제 구현이 디코딩 지연에 대한 임의의 방식에 민감한 경우, 애플리케이션의 성능 임계 부분들은 본래(original) 압축되지 않은 형태로 유지될 수도 있는 데 반해, 덜 빈번하게 실행된 코드는 압축될 수도 있다. 빈번하게 대 빈번하지 않게 실행된 코드 부분들의 판정은 코드의 제어 구조에 기초하여 컴파일 시간 휴리스틱들 또는 선택적인 프로파일 규제된(directed) 피드백 정보(208) 중 어느 하나를 이용하여 컴파일러 및 링커(206)에 의해 행해진다. 그러나, L2 캐시(224) 및 L1 캐시(232) 사이에서의 디코더(228)의 배치는, 시스템의 성능 임계 경로들로부터 디코더를 효과적으로 제거한다. 디코더의 이러한 배치로부터의 추가적인 이점(benefit)들은 실행 파이프라인(234)을 변경할 필요가 없다는 것과, 증가된 L2 용량 및 그에 따른 메인 메모리에 대한 액세스의 최소화로 인한 잠재 전력 절약을 포함한다. 이러한 압축 판정들은 전환 툴(216)과 컴파일러 및 링커(206)와의 밀접한 상호 작용에 기초하며, 예컨대 압축되지 않을 레거시 코드와 압축될 새로운 기능 코드를 식별할 수도 있는 프로파일 피드백 정보(208)를 이용할 수 있다.
도 7은 도 6의 페이징된 가상 캐시 구성(600)과 유사한 시스템 내 물리적 메모리 페이지별로 압축 및 압축되지 않은 코드를 혼합하는 시스템(700)을 도시한다. 압축된 페이지(701) 및 압축되지 않은 페이지(702)의 구성 요소는, 4바이트(4B) 엔트리들을 갖는 4킬로―바이트(4KB) 페이지들을 가진 예시적인 메인 메모리 물리적 어드레스 공간을 나타낸다. 압축된 명령들의 각 페이지 및 압축되지 않은 명령들의 각 페이지는, 바이트들의 동일한 고정된 수를 갖는 동일한 용량이다. 그러나, 예컨대 압축되지 않은 명령 포맷에 사용된 비트들의 수의 절반인 압축된 명령 포맷을 사용하여 압축된 페이지(701)에 저장된 명령들의 수는 압축되지 않은 페이지(702)에 저장된 명령들의 수의 2배이다. 예컨대, 압축된 페이지(701)는 16비트들 또는 2바이트들로 압축된 명령(d, e, f, g 등)을 1쌍의 X/Y 인덱스들로서 저장한다. 따라서, 4K 페이지인 압축된 페이지(701)는 2048 명령들을 포함하는 데 반해, 압축되지 않은 페이지(702)는 오직 1024 명령들을 포함한다. 페이지 경계들은 페이지가 압축된 명령들을 보유하는지 아니면 압축되지 않은 명령들을 보유하는지의 여부에 영향을 받지 않기 때문에, 페이지의 물리적 위치에 대한 어드레스 전환은 변경되지 않지만, 압축된 페이지는 더 많은 개별 명령들을 보유한다.
도 8a는 본 발명에 따른, 압축된 명령 페이지들을 압축 해제하고, 압축되지 않은 명령 페이지들을 액세스하기 위한 페이징된 압축 해제 시스템(800)을 도시한다. 페이징된 압축 해제 시스템(800)은 프로세서 파이프라인(802), ITLB(804), 물리적 어드레스 버퍼(806), L1 I캐시(808), L2 캐시 회로(810) 및 압축된 명령 디코더 회로(812)로 이루어진다. 전환 프로세스는, 가상 어드레스(803)로부터 선택된 가상 페이지 번호(805)를, 제공된 가상 페이지 번호를 일반적으로, CAM 태그들(819) 내 엔트리 태그들과 저장된, 최근에 사용된 저장된 가상 페이지 번호들 모두(all)와 병렬 비교하는 CAM 회로에 적용함으로써 개시한다. 매칭(match)이 있는 경우, CAM 회로는 RAM 회로에서 대응하는 엔트리(820)에 액세스하며, 이는 물리적 어드레스 버퍼(806)에 저장된 전환된 물리적 페이지 어드레스(815)로서 출력된다. 전환된 물리적 어드레스(809)는, 가상 어드레스(803)로부터의 페이지 오프셋(817)과 연관된, 전환된 물리적 페이지 어드레스(815)를 포함한다.
예컨대, 4기가바이트들(4GB) 및 4K 바이트 페이지들의 가상 어드레스 공간을 갖는 임베딩된 시스템에서, 가상 어드레스(803)는 비트들 [31:12]을 갖는 가상 페이지 번호(805)와 비트들 [11:0]을 갖는 페이지 오프셋(807)으로 이루어진다. 동일한 임베딩된 시스템에서, 캐시들의 메모리 계층 및 메인 메모리는 512K 바이트들 및 4K 바이트 페이지들의 물리적 메모리 공간을 포함(encompass)할 수도 있다. ITLB(804) 내 히트에 대해, 가상 어드레스(803)는 물리적 어드레스(809)로 전환된다. 물리적 어드레스(809)는, 비트들 [28:12]을 갖는 물리적 페이지 번호(815)와 비트들 [11:0]을 갖는 페이지 오프셋(817)으로 이루어진다. 이러한 시스템에서, 가상에서 물리적으로의 전환 시스템은, 비트들 [31:12]로 인코딩된 가상 페이지 번호(805)를 비트들 [28:12]로 인코딩된 물리적 페이지 번호(815)로 전환할 것이다. 또한, 히트에 대해, 압축된 비트 필드(821)는 또한 C 비트 필드(822)로서 물리적 어드레스 버퍼(806)에 저장되도록 출력된다. 압축된 비트 필드(821) 및 C 비트 필드(822)의 배치는 예시적이다.
물리적 어드레스(809)는 매칭 엔트리에 대해 L1 I캐시(808)를 검색하도록 사용된다. 매칭 엔트리가 발견된 경우, 그것은 매칭 엔트리와 관련되며 L1/L2 멀티플렉서(824)를 통해 프로세서 파이프라인(802)으로 전달되도록 선택된 압축 해제된 명령이다. L1 I캐시(808) 내 미스에 대해, 물리적 어드레스는 매칭 엔트리를 검색하도록 L2 캐시(810)로 보내진다. L2 캐시(810) 내 히트에 대해, 압축된 페이지로부터 압축된 명령들을 지시하는 C 비트 필드(822)로, 관련된 매칭 엔트리를 갖는 압축된 명령들의 라인이 인출되어, L2 판독 버퍼(826)에 저장된다. L2 캐시(810) 내 히트에 대해, 압축되지 않은 페이지로부터 압축되지 않은 명령들을 지시하는 C 비트 필드(822)로, 관련된 매칭 엔트리를 갖는 압축되지 않은 명령들의 라인이 인출되어, L2 판독 버퍼(826)에 저장된다. 압축되지 않은 명령들은 압축된 명령 디코더(812)를 바이패스하며, L1 I캐시(808)에 저장하기 위한 L2 판독 멀티플렉서(828)에서 사용할 수 있게, 그리고 L1/L2 멀티플렉서(824)를 통해 프로세서 파이프라인(802)으로 전달되도록 선택될 수 있게 한다.
L2 캐시(810) 내 히트에 대해, L2 판독 버퍼(826) 내 인출된 압축된 명령들은, 제어 회로(830)에 대해 압축된 명령들을 지시하는 C 비트 필드(822)에 기초하여 압축된 명령 디코더(812)에서 압축 해제된다. 압축 해제 프로세스는 도 8b와 관련하여 이하 더 상세하게 설명된다. 압축 해제된 명령들은, L1 I캐시(808)에 저장하기 위한 L2 판독 멀티플렉서(828)에 의해 선택될 수도 있으며, 그리고 L1/L2 멀티플렉서(824)를 통해 프로세서 파이프라인(802)으로 전달되도록 선택될 수도 있는 압축 해제 버퍼(832)에 저장된다.
도 5c에서 이전에 설명한 바와 같이, 네이티브 애플리케이션의 압축은 다수의 믹스 마스크들의 이용을 특정할 수도 있다. 원하는 입도가 단일 명령으로 축소되는 경우, 도 5c에 제안된 바와 같이, 각 X/Y 인덱스 쌍은 적절한 마스크를 선택하는 방법을 가져야만 한다. 믹스 마스크가 명령별로 선택 가능한 경우, 믹스 마스크의 식별은, XYN 엔트리(554)에서 예로서 나타낸 2―비트 믹스 마스크 인덱스와 같은 추가적인 저장 비트들을 필요로 한다. 또 다른 방식은 믹스 마스크가 코드 페이지당 선택되는 것을 허용하며, 이는 X/Y 인덱스 쌍(554)으로부터 믹스 마스크 마커의 필요성을 제거하며, 믹스 마스크 마커를, 예컨대 C 필드의 일부로서 TLB 페이지 디스크립터(page descriptor)에 배치시킨다.
도 8b는 프로세서 파이프라인 상의 실행에 대한 L2 캐시 압축된 페이지 명령들 및 L1 I캐시 압축 해제된 명령들의 상태를 도시하는, 예시적인 압축 해제 상태도(850)를 도시한다. 도 8b는 L2 캐시(852), L2 판독 버퍼(854), 압축된 명령 디코더(CID)(856), 압축 해제 버퍼(858), L1 I캐시(860), 물리적 어드레스 버퍼(862) 및 프로세서 파이프라인(864)을 나타낸다. L2 캐시(852)는 압축되지 않은 라인(866) 및 압축된 라인(868)을 초기 상태로서 갖는다. 압축되지 않은 명령들은, 예컨대 도 4에 관하여 상술한 바와 같이, 32―비트 네이티브 명령들이고, 압축된 명령들 각각은 X―인덱스 및 Y―인덱스 쌍으로 이루어진 16―비트들이다. 압축된 라인(868)은 압축되지 않은 라인(866)보다 2배 많은 명령들을 보유한다. 도 8a의 ITLB(804)와 같은 ITLB에 의해 가상 어드레스로부터 물리적 어드레스로 전환되고 물리적 어드레스 버퍼(862)에 저장된, 명령(M)에 대한 인출은, 프로세서 파이프라인(864)에 의해 이루어진다. 초기에, L1 I캐시(860)는 명령(M)을 포함하지 않으며, 메모리 계층의 상부 레벨들에 대해 인출을 유발하는 미스가 발생된다. 압축 해제 버퍼(858)는 먼저, 본 예시적인 시나리오에서는, 명령(M)이 발견되지 않은 것이 확인된다. L2 캐시(852)는 다음으로 확인되며, 압축된 라인(868)이 압축된 형태 "m"(870)로 명령(M)을 포함하는 것이 발견된다. 압축된 라인(868)은 인출되어, L2 판독 버퍼(854)에 저장된다. CID(856)는 C 비트 필드(872)를 수신하며, 인출 어드레스는 L2 판독 버퍼(854)로부터 압축된 명령들이 압축된 명령 "m"(870)으로부터 시작해서 순차적으로 인출되는 것을 허용한다. 인출 시퀀스에서의 제 1 명령은 먼저(first) 액세스되고 압축 해제될 수도 있으며, 시간 요건들(timing requirements)을 최소화하도록 프로세서 실행 파이프라인에 신속하게 포워딩될 수도 있음에 주의한다. 여기서 설명한 바와 같이 압축된 명령들은 압축 해제에 앞서 고정된 길이 및 공지된 저장 어드레스 위치들을 갖기 때문에, 인출된 시퀀스에서 제 1 압축된 명령은 압축된 명령들의 라인에서 식별될 수도 있다. L1 I캐시는 8개의 압축되지 않은 명령들의 라인 길이를 갖기 때문에, 압축된 명령들은 "m, n, o, p, 이후 i, j, k 및 1"로부터 시작하는 L1 I캐시 라인 길이에서, L2 판독 버퍼(854)로부터 액세스된다. L2 판독 버퍼(854)의 나머지 절반은 다음에 "q, r, s, t, u, v, w 및 x"로부터 시작하여 액세스된다. 따라서, 압축된 명령들은 L2 판독 버퍼(854)에서, 임의의(arbitrary) 시작 지점으로부터 액세스된다.
명령(M)이 먼저 인출되기 때문에, 이는 CID(856)에서 먼저 압축 해제되며, 이후 프로세서 파이프라인(864)으로 포워딩될 수도 있다. 다른 명령들 "n, o, p, 이후 i, j, k, 및 1"이 압축 해제됨에 따라, 이들은 압축 해제된 명령(M)과 결합되어 압축 해제 버퍼(858)에 로딩된다. 일단 명령들의 전체 라인이 압축 해제되면, 이들은 L1 I캐시(860)에 로딩된다. 대안적으로는, 개별 압축 해제된 명령들 또는 압축 해제된 명령들의 쌍들은, 예컨대 L1 I캐시(860)에서 개별적으로 업데이트될 수도 있으며, 필요에 따라 프로세서 파이프라인(864)으로 포워딩될 수도 있다. 압축 해제 버퍼(858)에 저장된 압축 해제된 명령 라인이 L1 I캐시(860)에 복사된(duplicated) 경우, 압축 해제된 명령 라인을 보유하는 압축 해제 버퍼는 L1으로부터 축출된(evicted) 최종 명령 블록을 일시적으로 저장하는 희생 캐시로서 사용될 수도 있다는 점이 주의된다.
X―인덱스, Y―인덱스, X 패턴, Y 패턴 및 하나 또는 2개 이상의 믹스 마스크들의 판정은 네이티브 명령 아키텍쳐 및 특정 코드 세그먼트 내 명령들의 사용에 의존한다. 스마트 폰에서의 코드 세그먼트들과 같은 코드 세그먼트를 분석하는 경우, 단일 믹스 마스크는 다수의 믹스 마스크들의 사용을 통해 획득된 것에 필적하는 압축을 제공할 수도 있다. 단일 믹스 마스크의 사용은 단일 명령 그룹을 사용하고 코드 세그먼트에 사용된 네이티브 명령들을 X 패턴들과 Y 패턴들의 2개의 부분들로 효과적으로 분리하는 것으로 보여질 수 있다. 그룹 내 고정된 (X) 및 변이 가능한 (Y) 부분들의 본래의 차이(distinction)는 덜 중요해지며 교환 가능하게 여겨질 수 있다. 또한, 단일 믹스 마스크의 사용은, 도 4의 결합기(418)와 같은 결합기 회로의 설계를 간략화한다. 예컨대, 16542개의 네이티브 32―비트 명령들을 갖는 시험 코드(experimental code) 세그먼트에는, 오직 6464개의 고유의 명령들 및 0.76의 전체 엔트로피가 있었다. 단일 믹스 마스크를 사용하여, 이들 6464개의 명령들이 1351개의 X 패턴들 및 1345개의 Y 패턴들로 나뉘어졌다. 본 발명의 기술들을 사용하여, 16542개의 네이티브 32―비트 명령들 각각은 23―비트 X/Y―인덱스 쌍으로 교체되어, 도 2에 도시된 바와 같은 시스템 내 L2 캐시 및 메인 메모리의 저장 용량에 28.1%의 압축을 제공한다. 인코딩된 데이터의 결과 엔트로피는 0.76에서 0.89로 증가하였다. 그러나, 이론상 가능한 1.0의 정보제공(informational) 엔트로피 측정으로부터의 0.89의 엔트로피 측정은, 상이한 믹스 마스크가 상당히 더 우수한 결과들을 제공할 수도 있음을 나타낸다. 복수의 코드 세그먼트들에 대한 가장(best) 가능한 압축을 제공하기 위한 최적의 또는 준최적의 단일 믹스 마스크의 판정은 복잡한(complex) 문제이다.
도 9a―9c는 본 발명에 따른, 다양한 유전적 알고리즘에 기초한 자동화된 믹스 마스크 판정 프로세스(900)를 도시한다. 도 2a의 전환 툴(216)과 같은 전환 툴은 프로세스(900)를 구현한다. 블록 902에서, 프로세스(900)가 시작된다. 블록 904에서, 컴팩트화될 코드 세그먼트(P)가 획득된다. 예컨대, 코드 세그먼트(P)는 부트 코드, 운영 시스템 코드 및 특정 제품에 활용되는 바와 같은 다수의 기능 프로그램들을 포함할 수도 있다. 블록 906에서, 코드 세그먼트(P) 내 고유의 명령들은 P 해시 테이블(P_unique)에 수집된다. 블록 908에서, P_unique 명령들은 명령 포맷들에 기초하여, 비트 패턴 오름차순과 같은 시맨틱 오더(semantic order)로 분류된다. 예컨대, P 해시 테이블 내 각 명령은 32―비트들을 사용하는 정수로서 해석(interpret)되며 리스트 내 오름차순으로 분류된다. 이는 이웃하는 명령들 사이의 가장 작은 해밍 거리를 보증하며, 이후 단계들에서 명령의 그룹화를 가능하게 한다. 블록 910에서, 비트 스위치 주파수는 고유의 명령들의 분류된 오더로 수집된다. 예컨대, 위치(position) P 내 비트가 "1"로부터 "0" 또는 "0"으로부터 "1"로 변경되면, bit_toggle[p] 값이 1만큼 증가된다. bit_toggle 어레이 크기는, 32―비트 명령들의 경우 32와 같은 비트들 내에 나타낸 오리지널 ISA 내의 가장 큰 명령의 폭과 동일하다. 블록 912에서, 시드 MM 개체군(population)인, 일 세트의 시드 믹스 마스크들, 몇개의 공지된 우수한 MM들, 몇개의 랜덤으로 발생된 MM들 및 수집된 비트 토글 카운트들로부터 발생된 몇개의 MM들을 사용하여 선택된다. 공지된 우수한 마스크들은, 유사한 애플리케이션들로부터 이전에 획득된 MM들로부터 사전에 파퓰레이팅되어(pre―populated), 임의의 주어진 아키텍쳐에 특정된다. 수집된 비트 토글 카운트는 실제 코드 내 주어진 위치에서 자신의 값을 변경하는 비트의 가능성을 추정하는데 있어서 우수한 휴리스틱으로서 기능한다. 경험적으로, 주어진 위치에 대한 임계값의 함수로서 믹스 마스크를 선택하는 것은 우수한 시드 마스크를 생성한다. 블록 912에서, 시드 MM 개체군은 10 내지 30 개체(individual)들의 크기의 개별 MM들의 어레이이며, 짝수의 개별 MM들로서 선택될 수도 있다. 더 큰 개체군은 더 우수한 결과들을 생성할 수 있지만, 선택된 MM들의 수의 선형 증가는 계산(computation) 시간의 대응하는 증가를 필요로 한다. 특정 시드 MM 개체군은 특정 계산 플랫폼을 피팅(fit)하도록 선택될 수 있다. 20개의 MM들의 시드 개체군 값은 실험적 셋업에서 우수한 트레이드오프가 되는 것으로 나타났다. 블록 914에서, 시드 MM 개체군에서 선택된 각 MM에 대한 피트니스 값(fitness value)은, 예컨대 낮지만 비―제로(non―zero) 값으로 설정된다. 예컨대, 피트니스 값은, MM이 제공하는 이점의 레벨을 나타내는 2배 정밀 플로팅 포인트 수이다. 프로세스(900)는 도 9b에서의 연결자(A)(916)에 대한 링크인, 도 9a의 연결자(A)(916)로 진행한다.
도 9b에, 프로세스(900)의 반복 부분이 포함되어 있다. 20개의 MM들의 시드 개체군은 프로세스(900)에 대한 입력으로서 제공된다. 판정 블록 920에서, 또 다른 반복이 수행될 것인지의 여부에 대한 판정이 이루어진다. 임계값(threshold value)은 수치 출구 조건과 비교되며, 임계값(threshold)이 출구 조건보다 더 작거나 또는 동일한 경우일 수 있는 바와 같이 출구 조건에 도달되지 않은 경우, 또 다른 반복이 시작(commence)된다.
블록 918에서, 최상의(best) 피트니스 값을 갖는 개체가 최상의 개체로 판정되며, 그 피트니스 값(비용 함수)이 기록된다. 또한, 이하에 더 상세하게 설명되는 바와 같이, 도 10의 프로세스(1000)로부터 획득된, 개체군 내 개체들의 비용 함수들의 총계로서 판정된 total_fitness의 값이 기록된다. total_fitness 값은, 더 빠른 변경률이 바람직하다는 가정에 기초하여, 전체 압축 유효성이 낮은 경우에 더 높은 변이율을 유발하는 변이 알고리즘에 대한 파라미터로서 이후에 사용된다. 판정 블록 924에서, 프로세스(900)를 완료하는 진행에 대해 판정이 이루어진다. 최후의 반복의 최상의 피트니스 값이 이전 반복으로부터 변경되지 않은 경우, 프로세스(900)는 블록 926으로 진행한다. 블록 926에서 임계값이 증가된다. 최후의 반복의 최상의 피트니스 값이 이전의 반복의 최상의 피트니스 값과 상이한 경우, 프로세스(900)는 블록 928로 진행한다. 블록 928에서, 개체군이 피트니스 값들에 의해 분류된다. 판정 블록 930에서, 판정 블록(920)에서 시작하는 프로세스(900)가 제 1 반복인지의 여부에 대한 판정이 이루어진다. 제 1 반복으로 판정되는 경우, 프로세스(900)는 블록 932로 진행한다. 그렇지 않으면, MM들의 현행 개체군을 갖는 프로세스(900)는 새로운 개체군을 생성(create)하는 블록들 934―952로 진행한다.
판정 블록 934에서, 엘리티즘 지시자(elitism indicator)가 설정되어 있는지의 여부에 대한 판정이 이루어진다. 엘리티즘 지시자는 클래스 MM 내 복수의 최적값(best)이 보존될 것인지의 여부를 지시한다. 엘리티즘 지시자가 설정된 경우, 프로세스(900)는 블록 936으로 진행한다. 블록 936에서, 이전의 반복으로부터의 2개의 최상의 수행자(performer) MM들은 새로운 개체군으로 직접 복사된다. 블록 938에서, 2개의 오프스프링 MM들은, 도 9c에 관해 이하 더 상세하게 설명되는 바와 같이, 2개의 최상의 수행자들로부터 생성된다. 블록 940에서, 2개의 오프스프링 MM들은, 도 9d에 관해 이하 더 상세하게 설명되는 바와 같이, 2개의 변이된 오프스프링 MM들을 생성하도록 랜덤으로 변이된다. 블록 942에서, 현행 개체군의 처음 4개의 멤버들은 2개의 최상의 수행자 MM들 및 2개의 변이된 오프스프링 MM들로 교체된다. 프로세스(900)는 이후 블록 946으로 진행한다.
판정 블록 934로 되돌아가서, 엘리티즘 지시자가 엘리티즘이 선택(elect)되지 않은 것을 지시하는 것으로 설정되지 않은 경우, 프로세스(900)는 블록 946으로 진행한다. 블록들 946 및 948에서, 블록 938에서 설명한 바와 같은 인터브리딩(interbreeding)의 유사한 절차 및 블록 940에서 설명한 바와 같은 변이가, 이전의 반복 개체군으로부터 남아있는 개별 MM들의 프로세싱되지 않은 쌍들에 대해 반복된다. 블록 946에서, 개체의 피트니스에 비례하는 선택의 기회로, 파트너 선택 알고리즘이 랜덤 개체들을 선택하도록 사용된다. 더 우수하게 수행하는 개체들은 더 용이하게 오프스프링들을 생성하지만, 보증되지는 않는다. 블록 948의 마지막에서, 새로운 반복 개체군이 판정된다. 블록 950에서, 새로운 반복 개체군 내 임의의 중복들이, 새로운 반복 개체군 내 중복들이 없다는 것을 보장하도록 변이된다. 블록 952에서, 새로운 반복 개체군 내 개별 MM들에 대한 피트니스 값들은 리셋된다. 이 지점에서, 새로운 반복 개체군이 비용 계산에 대해 준비되어 있다. 계산 시간을 절약하기 위해, 이전에 프로세스된 MM(개체들)에 대한 이전에 계산된 비용들의 리스트는 유지되고, 이미 판정된 비용은 단순히 사전에 파퓰레이팅되며, 블록 932에서 계산되지 않는다. 프로세스(900)는 이후 도 9c의 연결자(B)(922)로 진행한다.
블록 938에서 브리딩 동작으로 되돌아가, 도 9b를 참조하여, 2개의 최상의 수행자 MM들이 도 9d의 페어런트(A)(960) 및 페어런트(B)(962)로서 선택되고, 여기서, 믹스 마스크(MM)가 32―비트 수로 나타내며, 이 단계를 위해 MM이 유전자로서 표시된다. 블록 946에서 구현된 도 9d의 브리딩 프로세스(959)에 대해, 2개의 개별 MM들이 입력 MM 개체군으로부터 선택되며, 또한 페어런트(A)(960) 및 페어런트(B)(962)로서 나타낼 수도 있다. 블록들 938 및 946에서, 2개의 페어런트들은, 2개의 오프스프링들(A)(966) 및 (B)(968)을 생성하는 랜덤 주파수에서 유전자 내 랜덤 지점에서 유전자들을 교환하는 프로세스(964)를 통해 도 9d에 나타낸 바와 같이 브리딩된다. 랜덤 선택은 의사 난수 발생기에 의해 가이드될 수도 있으며, 반―랜덤 선택으로 일컬어질 수도 있다. 하나의 페어런트인, 페어런트(A)(960)는 하나의 오프스프링인, 오프스프링(A)(966)의, 새로운 유전자의 비기닝 부분(970)을 제공하며, 다른 페어런트인, 페어런트(B)(962)는 그 오프스프링 유전자의 테일(tail) 부분(971)을 제공한다. 다른 오프스프링(B)(968)은 제 1 하나의 보수(complement)이다. 오프스프링(A)(966)에 대한 테일 부분(971)을 생성하는 페어런트(B)(962)는 오프스프링(B)(968)에 대한 비기닝 부분을 생성한다. 오프스프링(A)(966)에 대한 비기닝 부분(970)을 생성하는 페어런트(A)(960)는 오프스프링(B)(968)에 대한 테일 부분을 생성한다. 교차점(972)은 0―32의 범위 내에서 랜덤으로 선택된다. 빠른 알고리즘 수렴에 대한 근본적인(underlying) 이유는, 페어런트들 중 하나로부터 오프스프링들 중 하나로의 성공적인 적응 특성(trait)들의 보존으로 인한 것과 같이 보여질 수 있으며, 이는 이후 피트니스 비율 계산에 의해 확인된다. 도 9d에 도시된 브리딩 프로세스(959)는 의사 난수 이벤트 자체이며, CROSSOVER_RATE 임계값으로서 식별된 임계값에 제약을 받는다. 예컨대, 2개의 페어런트들 사이에서 유전자들을 교환하는 100개의 시도들 중, 오직 CROSSOVER_RATE 곱하기 교환 시도들의 수가 실제로 일어날 것이다.
도 9b의 블록들 940 및 948로 되돌아가면, 새롭게 발생된 오프스프링 MM 개체군은, 개별 비트들을 반―랜덤으로 플리핑(flipping)함으로써 변이되어 각 오프스프링 유전자 내에서, "0"에서 "1"로, 또는 "1"에서 "0"으로 변경한다. 이 변이 프로세스(974)는 도 9e에 도시되어 있으며, 여기서 개별 MM(A)(975)이 비트들(976, 977 및 978)과 관련된 비트 플립들에 의해 변이된다. 변이된 개별 MM(A)(979)는 비트 플립들의 결과들과 함께 보여진다. 변이 프로세스(974)에서, 의사 난수 변이는 이전에 사용 불가능한 특성들을 MM 개체군에 도입하도록 작용한다. 예컨대, 이전에 시도되지 않은 새로운 MM들이 제어 가능한 비율로 생성되어, 원치않는 변이들이 빨리 제거(prune)될 수도 있다. 블록 942에서, MM 개체군의 4개의 멤버들은 블록 936으로부터 보존된 2개의 최상의 수행자들 및 블록 940으로부터 2개의 새로운 변이된 오프스프링으로 설정된다. 블록 946에서, 남아 있는 MM 개체군은 도 9c의 프로세스(955)에 관해 설명한 바와 같이, 새로운 오프스프링들의 쌍들을 획득하기 위해, 쌍들로 브리딩된다. 블록 948에서, 도 9d의 변이 프로세스(974)는 2개의 새로운 오프스프링을 생성하도록 후속된다. 블록 950에서, 임의의 중복 MM들이 변이된다. 블록 952에서, 각 MM 개체들에 대한 피트니스 값이 리셋된다. 블록 932에서, MM들을 반복하기 위해 이전에 계산된(calculated) 비용들이 재사용된다. 프로세스(900)는 이후, 도 9c의 연결자(B)(922)에 대한 링크인 연결자(B)(922)로 진행한다.
도 9c의 블록 955에서, 선택된 MM과 분류된 P_unique 리스트의 동적 압축 함수로서, 현행 개별 MM의 비용 함수가 계산된다. 비용 함수는 2개의 메인 컴포넌트들: 외부 스토리지의 크기 및 전환 딕셔너리의 크기로 이루어진다. 결합된 이들 2개의 컴포넌트들은 획득된 압축도 또는 달성된 엔트로피의 레벨을 반영한다. 내부 X/Y 메모리 압축 해제 테이블 크기에 대한 외부 스토리지 크기의 정확한 관계는 2개의 컴포넌트들의 상대적 중요성을 지시하는 파라미터에 의해 판정된다. 예컨대, 비용 함수는, 킬로바이트들 단위의, x 및 y 인덱스 크기의 합 곱하기 X/Y 딕셔너리 크기의 결과(product)와 동일하다. 따라서 비용은 X/Y_dictionary_size*(x_index_size+y_index_size)와 동일하다. 이 식은 내부 딕셔너리 크기 대 외부 스토리지 크기의 상대적인 중요성을 평가하기 위한 안정된 방식을 반영한다. 상대적인 중요성 가중 상수들의 도입에 의해, 비용 함수에 선호도가 도입될 수도 있다. 예컨대, 비용은 (weight_constant*X/Y_dictionary_size)*(x_index_size+y_index_size)와 동일하다. 현행 구현에서, weight_constant는 1.00으로 설정되지만, 0.01 내지 1.00으로 변화할 수도 있다.
판정 블록 956에서, 프로세스(900)에 대한 런타임이 할당된 시간을 초과했는지의 여부에 대한 판정이 이루어진다. 런타임이 할당된 시간을 초과한 경우, 프로세스(900)는 블록 958로 진행하여 정지한다. 런타임이 할당된 시간을 초과하지 않은 경우, 프로세스(900)는 판정 블록 957로 진행한다. 판정 블록 957에서, 가장 낮은 현재 값 MM이 발견되었는지의 여부에 대한 판정이 이루어진다. 예컨대, 임계값보다 더 적은 현재 값을 발생시키는 오직 단일 MM을 발견하는 것은 프로세스(900)를 종료하기에 불충분한 이유들이 될 수도 있다. 한편, 이론적으로 가장 낮은 엔트로피 바운드(bound) 표현은 이미 도달하였으며 임의의 추가의 검색이 불필요함을 검지하는 것이 가능하다. 또 다른 예에서, 임계값보다 더 적은 대략 동일한 현재 값을 각각 발생시키는 다수의 MM들이 발견될 수도 있으며, 이는 동일하며 허용 가능한 가장 낮은 현재 값을 각각 갖는 복수의 MM들 중 하나를 선택하거나 가장 낮은 현재 값을 갖는 MM을 선택하여 블록 958에서 프로세스(900)를 종료하기에 충분한 이유가 될 수도 있다. 그렇지 않으면, 프로세스(900)는 도 9b의 연결자(A)(916)로 진행한다.
도 10은 본 발명에 따른, 프로세스(1000)로서의 예시적인 동적 압축 및 현재 값 계산(980)을 도시한다. 블록 1002에서, 현재 값(current cost) 값들은, 도 9b의 블록 952로부터 사용 가능한 MM과 같은 입력이며, 이는 판정 블록 932에서 이전에 평가되지 않았으며, 분류된 P_unique 명령들이 입력임이 판정된 후에 선택된다. 블록 1004에서, 분류된 P_unique 명령들은 코드 세그먼트에 대해 단일 MM 또는 다수의 MM들을 갖는 것에 기초하여 선택된 MM에 대한 현행 그룹화 휴리스틱에 따라 그룹화된다. 예컨대, 단일 MM에 대한 그룹화는 도 5a의 예시적인 엘리먼트들(500)과 같이 고유의 명령들을 X 및 Y 부분들로 분리하며, 초기의 압축되지 않은 X 및 Y 테이블들을 구성하는 프로세스이다. 하나의 예에서, 네이티브 명령 프로그램 전체는 단일 그룹으로 여겨질 수 있다. 한편, 다수의 MM들에 대한 그룹화는 고유의 명령들을 각 그룹에 대한 고유의 MM을 갖는 몇개의 그룹들로 분할하는 것을 포함한다. 이 경우, X 패턴은 그룹에 대한 고정된 패턴을 나타내며, 여기서 그룹 전체는 단일의 고정된 X 패턴을 공유하며, 그룹당 다수의 Y 패턴들은 그룹의 변이 가능한 부분을 나타낸다. 몇개의 휴리스틱들은 그룹들로의 준최적 분할이 가능한 데 반해, 하나의 특정 휴리스틱의 선택은, 고유의 명령들의 입력 리스트의 크기 및 자신의 초기 엔트로피에 기초할 수도 있는 또 다른 휴리스틱에 의해 구동될 수 있다. 후속하는 휴리스틱들은 실험을 통해, 해밍, 가중된 해밍, 일들의 수, 가중된 일들의 수를 포함하여 실용적인 것으로 입증되었다.
도 11은 해밍 간격 내 특정된 임계값이, 분류된 고유의 명령 리스트에서, 이웃하는 엔트리들 사이를 초과하는 경우에 새로운 그룹을 생성하도록 사용된 해밍 휴리스틱(1100)을 도시한다. 가중된 해밍 휴리스틱(1100)은, 도 11에 도시한 바와 같이, 임계값과 비교되는 변경 스코어를 계산하는데 있어서, 특정 비트 필드들 위치들에 다른 것들보다 더 많은 가중을 할당한다. 블록 1102에서의 프로세스(1100)에서, 분류된 입력 로우 명령 패턴들의 전체 리스트가 획득된다(분류된 P_unique). 이는 이후, 2개의 이웃하는 엔트리들을, 이들 사이의 해밍 간격을 분석함으로써, 한번에 프로세싱한다. 블록 1104에서, 가변 해밍 간격 값(hamm_dist)이 2개의 이웃하는 엔트리들의 XOR로서 계산된다. 예컨대, 로우 명령들의 리스트가 오직 3개의 엔트리들(0, 1 및 2)을 포함하는 경우, hamm_dist는 2회 ―우선 0번째와 1번째 엔트리 사이의 XOR로서, 이후 1번째와 2번째 엔트리들 사이의 XOR로서― 계산된다. 블록 1106에서, hamm_dist는 한번에 하나의 비트씩 분석(parse)되며, sum_weight 값은 각 비―제로 비트에 대해 증가된다. 블록 1106은 각 hamm_dist에서 비―제로 비트들을 카운팅하는 것으로서 보여질 수 있다. 증가량은 비트 위치에 의해 변경될 수도 있다. 정확한 증가량은, 도 9a의 블록 910에서 계산되거나 정적으로 사전에 계산된 Bit_toggle 어레이로부터 차례로 계산되는 weight_array로부터 판독된다. 판정 블록 1108에서, sum_weight 값이 weight_threshold를 초과하는지의 여부에 대한 판정이 이루어진다. 양의 결과는 새로운 명령 그룹이 형성될 것임을 지시한다. 블록 1110에서, 새로운 그룹이 형성되며, 프로세스(1100)는 판정 블록 1112로 진행한다. 판정 블록 1108의 음의 출력은 프로세스(1100)가 판정 블록 1112로 진행하도록 유발한다. 판정 블록 1112에서, 분류된 P_unique 리스트의 끝에 도달했는지의 여부에 대한 판정이 이루어진다. 리스트의 끝에 도달하지 않은 경우, 프로세스(1100)는 루프 변수(variable) "i"를 증가시키는 블록 1114로 진행하며, 블록 1104로 진행한다. 리스트의 끝에 도달한 경우, 프로세스(1100)는 블록 1116으로 진행하여, 정지한다.
둘 모두 명령 내 비트 필드의 변이성의 측정에 기초하는 일들의 수 휴리스틱 및 가중된 일들의 수 휴리스틱들과 같은 다른 휴리스틱들이 사용될 수도 있다. 예컨대, MM 내 일들의 더 낮은 수는 그룹당 더 큰 X 패턴 및 더 적은 Y 패턴들을 지시한다. MM 내 일들의 더 많은 수는 그룹당 더 작은 X 패턴 및 더 많은 Y 패턴들을 지시한다. 가장 높은 압축을 생성하는 이들의 수의 선택에 대한 단일 지점과의 비선형 의존성이 존재한다. 현행 방식에서, 단일 MM 분할 전략은 블록 1004에서 선택된다. 계속하여 블록 1006에서, 도 4의 X 메모리(412)에 저장된 X 패턴들 및 Y 메모리(414)에 저장된 Y 패턴들 각각과 같은 X 메모리 및 Y 메모리 테이블들은, 도 4에 관해 상술한 바와 같이 판정된다. 판정 블록 1008에서, 피팅되지 않은(unfit) 개체들을 나타내는 서브스탠더드(substandard) MM들을 필터링하는데 필터링 휴리스틱이 사용되며, 이는 프로세스(900)에서 가능하다. 이 필터링은 계산 시간을 아끼기 위해 행해지며, 프로세스(1000)의 유효성에 영향을 미치지 않는다. 마스크는, 그로부터 발생된 패킹되지 않은 X/Y 테이블이 바이트 크기로 입력 로우 명령 리스트 크기를 초과하는 경우, 명확하게 피팅되지 않는 것으로 판정된다. 판정 블록 1008에서, X 메모리 크기+Y 메모리 크기가, 이 예시적인 경우 32―비트들인, P_unique 명령들의 수 곱하기 네이티브 명령 폭보다 더 큰지의 여부에 대한 판정이 이루어진다. 판정 블록 1008에서, 판정이 양인 경우, 프로세스(1000)는 믹스 마스크를 거절하기 위해 블록 1010으로 진행한다. 블록 1010에서, 1008에서 거절된 MM들에 대한 피트니스 값은 0으로 설정되며, 프로세스(1000)는 도 9c의 연결자(B)(922)로 진행한다. 판정이 음인 경우, 프로세스(1000)는 블록 1012로 진행한다.
블록 1012에서, X 메모리 및 Y 메모리 테이블들이 컴팩트화된다. 블록 1012는 X 및 Y 테이블들의 크기에 직접 영향을 주며, 이는 이들 테이블들을 어드레싱하는데 필요한 인덱스들의 크기를 차례로 판정하여, 외부의 압축된 코드 세그먼트의 크기를 결국 판정한다. X 및 Y 테이블들은 도 5b 및 도 12―14에 관해 설명한 바와 같이, 인덱싱 압축을 사용하여 컴팩트화된다. 블록 1014에서, 현재 값이 X 메모리 크기 더하기 Y 메모리 크기의 합 곱하기 상수 C1과 동일하게 발생되며, 이는 이후 X 인덱스 크기 더하기 Y 인덱스 크기의 합에 의해 곱해진다. 이 프로세스(1000)는, 압축된 코드의 실제 엔트로피에 가까운 현재 값에 의해 나타내는 엔트로피 값을 계산하는데 유리한 휴리스틱을 제공하며, 이는 이제 X/Y 인덱스들 및 X/Y 컴팩트화된 테이블들의 외부 수집으로 분리된다. 선택적으로 블록 1014에서, 이론적인 최소 엔트로피 측정은 추가의 검색이 필요한지의 여부로 판정될 수도 있다. 블록 1016에서, 발생된 현재 값은 도 9c에서의 판정 블록 956에 대한 출력이다.
상기 주의된 바와 같이, 인덱스 압축과 결합된 X/Y 테이블에서의 엔트리들의 준최적의 선택은 X/Y 테이블들의 크기를 상당히 감소시킬 수 있다. 2개의 예시적인 배치 알고리즘들이 압축도 및 실행 시간 사이의 트레이드오프에 기초하여 사용될 수도 있다. 제 1 휴리스틱은 본 발명에 따라 도 12에서 나타낸 패드 분류를 갖는 거의―완전한 검색 X/Y 테이블 컴팩트화 알고리즘이다. 프로세싱은, 압축될 심볼들의 리스트를 획득함으로써 블록 1202에서 개시한다. 이는 압축될 X/Y 테이블 심볼들의 존재하는(present) 세트의 리스트이다. 테이블에 "table_size" 심볼들이 있다. 블록 1204에서, 이 리스트는 패드 오버랩핑의 가능성을 최대화하는 순서로 분류된다. 또한, 블록 1204에서, 반복 인덱스 "i"가 0으로 리셋된다.
블록 1204에서 패드―분류 동작은, 실제 컴팩트화 프로세스 반복에 앞서 패드 오버랩핑의 가능성을 증가시키도록 X/Y 테이블들에 심볼들을 분류하는 특정된 방법이다. 패드 분류 동작은 빠른 분류 알고리즘에 의해 구현되는데, 비교 기능은 하나의 심볼의 하나 또는 2개 이상의 좌측의 최대 유효(significant) 바이트들과 다른 심볼의 하나 또는 2개 이상의 우측의 최대 유효 바이트들 사이에 매칭이 있는 경우, 2개의 심볼들의 교환(swap)을 요구한다. 여기서, 심볼의 길이는 전체 바이트들로 측정되며, 좌측 조절된다. 우측의 최대 유효 바이트는 몇개의 유효 비트들만 가질 수 있지만, 분류를 위해 이는 중요하지 않다.
판정 블록 1206에서, 반복 인덱스 "i"가 "table_size"보다 더 작은지의 여부에 대한 판정이 이루어진다. 반복 인덱스 "i"가 "table_size"보다 더 크거나 동일한 경우, 프로세스(1200)는 블록 1232로 진행하여 정지한다. 그렇지 않으면, 프로세스 1200는, X/Y 테이블의 i번째 심볼이 아직 프로세싱되지 않았기 때문에 판정 블록 1208로 진행한다. 판정 블록 1208에서, 파라미터 seen[i]가 i번째 심볼이 이미 프로세싱되었음을 지시하는 "1"과 동일한지의 여부에 대한 판정이 이루어진다. seen[i]=1인 경우, 프로세스(1200)는 반복 인덱스 "i"가 1만큼 증가되는 블록 1210으로 진행한다. 심볼이 아직 프로세싱되지 않아, seen[i]≠l인 경우, 프로세스(1200)는 블록 1212로 진행한다. 블록 1212에서, i번째 심볼은 압축된 테이블에 삽입된다. 삽입 프로세스의 상세들은 도 13에 관해 이하에 설명된다. 또한, 블록 1212에서, 삽입한다는 사실은, 파라미터 seen[i]를 1로 설정하는 것, best_score 변수를 0으로 설정하는 것, 및 새로운 반복 인덱스 "k"를 i+1의 값으로 초기화하는 것에 의해 주의된다.
판정 블록 1214에서, 새로운 반복 인덱스 "k"가 압축될 심볼들의 수보다 더 적은지의 여부에 대한 판정이 이루어진다. 새로운 반복 인덱스 "k"가 "table_size"보다 더 적은 경우, 프로세스(1200)는 k번째 심볼이 아직 프로세싱되지 않았기 때문에, 판정 블록 1216으로 진행한다. 판정 블록 1216에서, 파라미터 seen[k]가 k번째 심볼이 아직 프로세싱되지 않았음을 지시하는 "1"과 동일한지의 여부에 대한 판정이 이루어진다. seen[k]=1인 경우, 프로세스(1200)는 새로운 반복 인덱스 "k"가 1만큼 증가되는 블록 1218로 진행한다. 심볼이 아직 프로세싱되지 않아, seen[k]≠l인 경우, 프로세스(1200)는 블록 1220으로 진행한다. 블록 1220에서, 매칭 스코어는 k번째 심볼에 대해 계산된다.
블록 1220에서, score_match 계산은 심볼 삽입 프로세스를 모방(mimic)하지만, 어떠한 심볼들도 삽입하지는 않는다. 오히려, score_match 계산은 현행 심볼을 테이블의 현행 형태로 압축된 테이블로 배치하는 것으로부터 기대되는 절약들의 양에 비례하는 스코어를 리턴한다. 이 계산 프로세스는, 잠재적으로 최상 매칭 후보들인 X/Y 압축되지 않은 리스트 내 남아 있는 압축되지 않은 심볼들 중에 위치한다. score_match는, 심볼이 존재하는 컨텐츠들 내에서 완전히 매칭될 수 있는 경우, 매칭 지시 또는 예컨대 무한대와 같은 매우 높은 스코어를 리턴하거나, 심볼이 압축된 메모리의 끝에서 매칭된 경우 오버랩핑 바이트들의 수를 제공한다. 오버랩이 발견되지 않는 경우, 0 스코어가 리턴된다.
계산된 스코어는, k번째 심볼을 자신의 현행 상태에서 압축된 테이블에 삽입하는 것으로부터 기대되는 절약들의 정도를 반영한다. 판정 블록 1224에서, 스코어가 무한대와 동등한지의 여부에 대한 판정이 이루어진다. 상기 주의된 바와 같이, 무한대의 스코어와 같은 매칭 지시는, k번째 심볼이 압축된 테이블의 현행 상태에 완전히 매칭되는 것을 의미하고, 그것을 삽입하는 것이 압축된 테이블의 크기를 증가시키는 것은 아니며, 프로세스(1200)는 블록 1228의 삽입 단계로 직접 진행한다. 이 경우 삽입의 프로세스는, 이후에 외부 메모리에서 자신의 표현이 되는 압축된 X/Y 테이블의 비기닝으로부터 오프셋된 현행 심볼의 기록임에 주의한다. 또한, 일반적으로, 다수의 믹스 마스크들이 사용된 경우, 공통 프리픽스를 공유하는 다수의 심볼들이 동일한 오프셋, 그러나 상이한 길이를 가질 수 있음에 주의한다. 그렇지 않으면, 블록 1226에서, 계산된 스코어와 지금까지 관찰된 최상 스코어 사이에서 비교가 이루어진다. 새롭게 계산된 스코어가 지금까지의 최상 스코어를 초과하는 경우, 프로세스(1200)는 블록 1230으로 진행한다. 블록 1230에서, 존재하는 best_score는 새롭게 계산된 스코어와 동일하게 설정되며, 최상―인덱스는 "k"로 설정된다. 블록 1218에서, 새로운 반복 인덱스 "k"가 1만큼 증가되며, 프로세스(1200)는 블록 1214로 진행한다. 일단 "k"가 블록 1214에서 판정된 바와 같이 리스트(table_size)의 끝에 도달하면, 프로세스(1200)는 블록 1222로 진행한다. 블록 1222에서, best_score가 판정되었는지의 여부에 대한 판정이 이루어진다. 최상 스코어가 아직 판정되지 않았을 경우, 반복 인덱스 "i"는 블록 1210에서 증가되며, 프로세스(1200)는 블록 1206으로부터 계속된다. 블록 1222에서, 비―제로 best_score는, 최상 피팅(fitting) 심볼이 발견되었음을 지시하며, 프로세스(1200)는 블록 1228로 진행한다. 블록 1228에서, 최상 피팅 심볼은 압축된 테이블에 삽입되며, 삽입한다는 사실은 파라미터 seen[best_index] 어레이를 "1"과 동일하게 설정하는 것으로 주의된다. 일단, 반복 인덱스 "i"가 블록 1206에서 판정된 바와 같이 table_size에 도달하면, 프로세스는 블록 1232에서 종료된다. 이 지점에서, 평가된 심볼들은 압축된 테이블에 삽입되어 있다.
도 13은 본 발명에 따른 심볼 삽입 프로세스(1300)를 도시한다. 블록 1302에서, 압축된 메모리 및 삽입될 새로운 심볼의 현행 상태가 획득된다. 판정 블록 1304에서, 새로운 심볼이 0인지의 여부에 대한 판정이 이루어진다. 새로운 심볼이 0인 경우, 블록 1320에서 심볼은 압축된 메모리 내 특정된 위치로 매핑되며, 오직 하나의 바이트가 심볼 크기에 상관없이 저장된다. 판정 블록 1304에서, 새로운 심볼이 비―제로로 판정된 경우, 프로세스(1300)는 블록 1306으로 진행한다. 블록 1306에서, 현행 pad_mask가 계산된다. pad_mask는, 심볼 내 마지막 유효 바이트의 유효하지 않은 부분을 마스킹하는데 사용된 2진 변수이다. 예를 들면, 삽입되어 있는 심볼이 15비트들의 크기를 갖는 경우, 마지막 바이트의 마지막 비트는 유효하지 않으며, 배치를 위한 비교 중에 무시될 필요가 있다. 이 경우의 pad_mask는 Oxfe이다(pad_mask는 오직 마지막 유효 바이트에 항상 제공됨). 판정 블록 1308에서, 반복 인덱스 "i"가 존재하는 압축된 테이블 크기 빼기 새로운 심볼 크기 더하기 1보다 더 적은지의 여부에 대한 판정이 이루어진다. 판정이 양인 경우, 프로세스(1300)는 블록 1310으로 진행한다. 블록 1310에서, 새로운 심볼은, 오직 유효 비트들을 바이트 단계를 갖는 현행 컨텐츠들에 매칭시키기 위해 각 심볼 위치를 확인하는 압축된 메모리에 배치되도록 반복적으로 시도된다. 이러한 동작은, 새로운 심볼의 제 1 유효 바이트를 이미 메모리 내에 있는 각 바이트와 반복적으로 비교함으로써 달성되며, 제 1 유효 바이트에 대한 매칭이 발견된 경우, 새로운 심볼에 남아 있는 다른 비트들이 매칭된다. 매칭은 오직, 상술한 바와 같이, pad_mask의 애플리케이션을 통해 심볼 내 유효 비트들을 고려한다. 이러한 위치가 판정 블록 1312에서 발견된 경우, 프로세스(1300)는 블록 1318로 진행한다. 블록 1318에서, 심볼은 판정된 위치에 배치되며, 반복 인덱스 "i"는 압축된 테이블의 비기닝으로부터 심볼의 오프셋이 된다. 이 인덱스는 결국 외부 메모리에 저장되며, 오리지널 X/Y 패턴을 X/Y 압축된 테이블에 위치시키는데 활용될 것이다. 블록 1316에 도달한 경우, 이는 현행 심볼이 압축된 메모리의 존재하는 컨텐츠에 완전히 매칭되지 않았음을 의미하며, 리스트의 끝에 배치될 필요가 있다. 그 경우, 최대 오버랩 확인은 심볼의 각 바이트 상에서 수행된다. 오버랩이 발견되지 않았을 경우, 새로운 심볼은 압축된 테이블의 끝에 단순히 배치된다.
도 14는 본 발명에 따른 패드-분류 프로세스(1400)를 갖는 삼각형의 X/Y 테이블 컴팩트화를 도시한다. 프로세스(1400)는 완전한 검색 X/Y 테이블 컴팩트화 프로세스(1200)의 대안이다. 휴리스틱 프로세스(1400)는 프로세스(1200)보다 0(n) 더 빠르지만, 그처럼 우수한 압축을 생성하지 않을 수도 있다. 그러나, 프로세스(1400)의 압축 결과들은 다수의 실용적 애플리케이션들에 대해 허용 가능할 수도 있다. 게다가, 2개의 프로세스들의 결합은 실제 구현에서 실행 가능할(viable) 수도 있다 ― 도 14에 나타낸 더 빠른 프로세스가 최상 마스크 후보들을 판정하는데 사용되며, 도 12에 나타낸 더 느린 프로세스가 최종 인코딩을 발생시키는데 사용된다. 프로세스(1400)는 단계들 1402, 1404, 1406, 1408 및 1412로 개시하며, 이는 도 12의 단계들 1202, 1204, 1206, 1208 및 1212와 동일하다. 블록 1412에서, i번째 엘리먼트의 유사한 삽입이 블록 1212에서 행해진 바와 같이 수행되지만, 블록 1414로 개시하여, 도 12의 블록들 1214 및 1222로 행해진 바와 같이 사용된 best_score는 없다. 최상 스코어 평가를 사용하는 대신에, 도 14의 남아 있는 블록들에서, i+1과 table_size 사이의 심볼들은 일단 트래버스(traverse)되며, 판정 블록 1424에서 판정된 바와 같이 비―제로 스코어로 발견된 모든 엘리먼트는 블록 1426에서 압축된 테이블에 삽입된다.
여기에 개시된 실시형태들과 관련하여 설명한 방법들은, 하드웨어의 결합으로, 그리고 프로세서에 의해 실행된 비―일시적인 신호들을 저장하는 소프트웨어 모듈에서 구현될 수도 있다. 소프트웨어 모듈은 랜덤 액세스 메모리(RAM), 플래시 메모리, 리드 온리 메모리(ROM), 전기적으로 프로그램 가능한 리드 온리 메모리(EPROM), 하드 디스크, 제거 가능한 디스크, 테이프, 컴팩트 디스크 리드 온리 메모리(CD―ROM), 또는 본 기술 분야에 공지되거나 장차 알려질 임의의 다른 형태의 저장 매체에 상주할 수도 있다. 저장 매체는, 프로세서가 저장 매체로부터 정보를 판독할 수 있도록, 그리고 일부 경우들에서 저장 매체에 정보를 기입할 수 있도록 프로세서에 커플링될 수도 있다. 프로세서에 커플링되는 저장 매체는 회로 구현에 통합된 직접 커플링일 수도 있거나 직접 액세스들 또는 다운로딩 기술들을 사용하는 데이터 스트리밍을 지원하는 하나 또는 2개 이상의 인터페이스들을 활용할 수도 있다.
본 발명은 프로세서들에서의 사용에 대한 예시적인 실시형태들의 맥락에서 개시되어 있는 데 반해, 광범위하게 다양한 구현들이 상기 논의 및 이하의 청구항들과 일치되는 기술 분야에서 통상의 지식을 가진 자에 의해 이용될 수도 있음이 인식될 것이다.
Claims (8)
- 압축된 명령들을 효율적으로 전환하기 위한 믹스 마스크를 판정하는 방법으로서,
제 1 오프스프링(offspring) 믹스 마스크를 생성(produce)하기 위해 제 1 페어런트 믹스 마스크의 비기닝(beginning) 부분과 제 2 페어런트 믹스 마스크의 테일(tail) 부분을 결합하고, 제 2 오프스프링 믹스 마스크를 생성하기 위해 상기 제 2 페어런트 믹스 마스크의 비기닝 부분과 상기 제 1 페어런트 믹스 마스크의 테일 부분을 결합하는 브리딩(breeding)하는 단계;
믹스 마스크들의 시드 개체군(population)을 업데이트하는 변이된(mutated) 오프스프링 믹스 마스크들을 생성하기 위해 개별 비트들을 반(semi)―랜덤으로 플립핑(flipping)함으로써 상기 제 1 오프스프링 믹스 마스크 및 상기 제 2 오프스프링 믹스 마스크를 변이시키는 단계; 및
전환 비용에 따라, 업데이트된 시드 개체군으로부터 믹스 마스크를 판정하는 단계를 포함하고,
압축된 명령들의 비트들의 패턴들은, 프로그램의 압축된 명령들을 실행 가능한 형태로 전환하기 위해, 판정된 믹스 마스크에 따라 결합되는,
믹스 마스크를 판정하는 방법. - 제 1 항에 있어서,
상기 브리딩하는 단계는,
반―랜덤 선택 프로세스에 의해 크로스오버 포인트를 랜덤으로 선택하는 단계; 및
선택된 크로스오버 포인트가 각각의 페어런트 믹스 마스크의 엔드 포인트인 경우, 상기 제 1 페어런트 믹스 마스크를 계승(inherit)하는 상기 제 1 오프스프링 믹스 마스크와, 상기 제 2 페어런트 믹스 마스크를 계승하는 상기 제 2 오프스프링 믹스 마스크를 생성하는 단계를 더 포함하는,
믹스 마스크를 판정하는 방법. - 제 1 항에 있어서,
선택의 반―랜덤 주파수에 따라 믹스 마스크들의 쌍들에서 반―랜덤으로 선택된 크로스오버 포인트에 기초하여 브리딩을 랜덤으로 선택하는 단계를 더 포함하고,
각각의 페어런트 믹스 마스크의 상기 비기닝 부분 및 상기 테일 부분은 각각의 페어런트 믹스 마스크 내의 선택된 상기 크로스오버 포인트에 따라 판정되는,
믹스 마스크를 판정하는 방법. - 제 1 항에 있어서,
상기 변이시키는 단계는,
변이된 오프스프링 믹스 마스크를 판정하기 위해 상기 오프스프링 믹스 마스크들의 쌍들 중 하나의 쌍에서 개별 비트를 반―랜덤으로 플립핑하는 단계; 및
상기 믹스 마스크들의 시드 개체군 내 믹스 마스크를 상기 변이된 오프스프링 믹스 마스크로 교체(replace)하는 단계를 더 포함하는,
믹스 마스크를 판정하는 방법. - 제 1 항에 있어서,
상기 프로그램은 부트 코드, 운영 시스템 코드 및 다수의 애플리케이션 프로그램들을 포함하는,
믹스 마스크를 판정하는 방법. - 제 1 항에 있어서,
각각의 믹스 마스크와 연관된 전환 하드웨어의 현재 비용(current cost)을 사용하여, 상기 업데이트된 시드 개체군 내의 각각의 믹스 마스크에 대한 피트니스 레벨(fitness level)을 판정하는 단계를 더 포함하고,
믹스 마스크의 피트니스 레벨은 높은 레벨의 압축을 제공하는 이점의 레벨을 나타내는,
믹스 마스크를 판정하는 방법. - 제 1 항에 있어서,
상기 전환 비용은, X―인덱스 메모리, Y―인덱스 메모리, X 패턴 메모리, 및 Y 패턴 메모리에 기초하는,
믹스 마스크를 판정하는 방법. - 제 1 항에 있어서,
프로그램에서 사용된 명령들과 유사한 명령들을 갖는 이전의 프로그램에 대해 높은 피트니스 레벨을 갖는 이전에 사용된 믹스 마스크들 및 반―랜덤으로 선택된 믹스 마스크들을 포함하도록 시드 믹스 마스크들의 초기 시드 개체군을 선택하는 단계를 더 포함하는,
믹스 마스크를 판정하는 방법.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/099,463 US9201652B2 (en) | 2011-05-03 | 2011-05-03 | Methods and apparatus for storage and translation of entropy encoded software embedded within a memory hierarchy |
US13/099,463 | 2011-05-03 | ||
PCT/US2012/036199 WO2012151334A1 (en) | 2011-05-03 | 2012-05-02 | Methods and apparatus for storage and translation of entropy encoded software embedded within a memory hierarchy |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137031851A Division KR101559450B1 (ko) | 2011-05-03 | 2012-05-02 | 메모리 계층 내에 임베딩된 엔트로피 인코딩된 소프트웨어의 저장 및 전환을 위한 방법들 및 장치들 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20150053825A true KR20150053825A (ko) | 2015-05-18 |
Family
ID=46201792
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157011179A KR20150053825A (ko) | 2011-05-03 | 2012-05-02 | 메모리 계층 내에 임베딩된 엔트로피 인코딩된 소프트웨어의 저장 및 전환을 위한 방법들 및 장치들 |
KR1020137031851A KR101559450B1 (ko) | 2011-05-03 | 2012-05-02 | 메모리 계층 내에 임베딩된 엔트로피 인코딩된 소프트웨어의 저장 및 전환을 위한 방법들 및 장치들 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137031851A KR101559450B1 (ko) | 2011-05-03 | 2012-05-02 | 메모리 계층 내에 임베딩된 엔트로피 인코딩된 소프트웨어의 저장 및 전환을 위한 방법들 및 장치들 |
Country Status (7)
Country | Link |
---|---|
US (2) | US9201652B2 (ko) |
EP (1) | EP2705423B1 (ko) |
JP (4) | JP5911952B2 (ko) |
KR (2) | KR20150053825A (ko) |
CN (3) | CN107168679A (ko) |
CY (1) | CY1116891T1 (ko) |
WO (1) | WO2012151334A1 (ko) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8793469B2 (en) * | 2010-12-17 | 2014-07-29 | Intel Corporation | Programmable logic array and read-only memory area reduction using context-sensitive logic for data space manipulation |
US9201652B2 (en) | 2011-05-03 | 2015-12-01 | Qualcomm Incorporated | Methods and apparatus for storage and translation of entropy encoded software embedded within a memory hierarchy |
US10120692B2 (en) | 2011-07-28 | 2018-11-06 | Qualcomm Incorporated | Methods and apparatus for storage and translation of an entropy encoded instruction sequence to executable form |
US10063665B2 (en) * | 2015-02-18 | 2018-08-28 | Actmobile Networks, Inc. | System and method to eliminate duplicate byte patterns in network streams |
US9792098B2 (en) * | 2015-03-25 | 2017-10-17 | International Business Machines Corporation | Unaligned instruction relocation |
US12080384B2 (en) * | 2015-06-16 | 2024-09-03 | Gottfried Wilhelm Leibniz Universitaet Hannover | Method for compressing genomic data |
US10204053B2 (en) * | 2016-09-30 | 2019-02-12 | Oracle International Corporation | Modeling processor shared memory using a cacheability status |
GB2556886B (en) | 2016-11-23 | 2019-05-15 | Imagination Tech Ltd | Encoding and decoding variable length instructions |
US11073828B2 (en) * | 2017-12-08 | 2021-07-27 | Samsung Electronics Co., Ltd. | Compression of semantic information for task and motion planning |
CN109947460B (zh) * | 2017-12-21 | 2022-03-22 | 鼎捷软件股份有限公司 | 程序连结方法及程序连结系统 |
US11068269B1 (en) * | 2019-05-20 | 2021-07-20 | Parallels International Gmbh | Instruction decoding using hash tables |
US11514027B2 (en) * | 2019-06-07 | 2022-11-29 | Sap Se | Paged hybrid LOBs |
FR3097345B1 (fr) * | 2019-06-13 | 2021-06-25 | Stmicroelectronics Grand Ouest Sas | Procede de gestion du fonctionnement d’une unite de calcul capable de fonctionner avec des instructions de tailles differentes et circuit integre correspondant |
US11250165B2 (en) | 2019-12-20 | 2022-02-15 | Intel Corporation | Binding of cryptographic operations to context or speculative execution restrictions |
US11580234B2 (en) | 2019-06-29 | 2023-02-14 | Intel Corporation | Implicit integrity for cryptographic computing |
US11403234B2 (en) | 2019-06-29 | 2022-08-02 | Intel Corporation | Cryptographic computing using encrypted base addresses and used in multi-tenant environments |
US11575504B2 (en) | 2019-06-29 | 2023-02-07 | Intel Corporation | Cryptographic computing engine for memory load and store units of a microarchitecture pipeline |
CN110572160A (zh) * | 2019-08-01 | 2019-12-13 | 浙江大学 | 一种指令集模拟器译码模块代码的压缩方法 |
US11580035B2 (en) | 2020-12-26 | 2023-02-14 | Intel Corporation | Fine-grained stack protection using cryptographic computing |
US11669625B2 (en) | 2020-12-26 | 2023-06-06 | Intel Corporation | Data type based cryptographic computing |
CN113138800B (zh) * | 2021-03-25 | 2023-05-09 | 沐曦集成电路(上海)有限公司 | 定长指令集的编解码方法及计算系统 |
Family Cites Families (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0440525A (ja) | 1990-06-06 | 1992-02-10 | Seiko Epson Corp | 並列処理型マイクロプロセッサ |
US5463750A (en) * | 1993-11-02 | 1995-10-31 | Intergraph Corporation | Method and apparatus for translating virtual addresses in a data processing system having multiple instruction pipelines and separate TLB's |
JPH07168694A (ja) * | 1993-12-14 | 1995-07-04 | Hitachi Ltd | プロセッサおよびそれを用いたデータ処理システム |
JPH08161169A (ja) | 1994-12-09 | 1996-06-21 | Toshiba Corp | Vliw方式の計算機システム及びvliwの解釈・実行方法 |
JP3598589B2 (ja) | 1995-06-28 | 2004-12-08 | 株式会社日立製作所 | プロセッサ |
US5924125A (en) * | 1995-08-01 | 1999-07-13 | Arya; Siamak | Method and apparatus for parallel access to consecutive TLB entries |
JP3412462B2 (ja) | 1997-07-30 | 2003-06-03 | 松下電器産業株式会社 | プロセッサ |
DE19735948C1 (de) * | 1997-08-19 | 1998-10-01 | Siemens Nixdorf Inf Syst | Verfahren zur Verbesserung der Steuerungsmöglichkeit in Datenverarbeitungsanlagen mit Adreßübersetzung |
JPH1185512A (ja) | 1997-09-03 | 1999-03-30 | Fujitsu Ltd | 命令圧縮格納および命令復元機能を有するデータ処理装置 |
US6199126B1 (en) * | 1997-09-23 | 2001-03-06 | International Business Machines Corporation | Processor transparent on-the-fly instruction stream decompression |
US20020112029A1 (en) | 1998-03-06 | 2002-08-15 | Craig S. Gravina | System and method for accepting and integrating entertainment information from entertainment information producers |
RU2236752C2 (ru) * | 1999-07-06 | 2004-09-20 | Самсунг Электроникс Ко., Лтд | Устройство и способ кодирования/декодирования индикатора комбинации транспортного формата в системе мобильной связи мдкрк |
JP3556556B2 (ja) | 2000-02-08 | 2004-08-18 | 株式会社東芝 | 命令コード変換装置及び情報処理システム |
US6859870B1 (en) | 2000-03-07 | 2005-02-22 | University Of Washington | Method and apparatus for compressing VLIW instruction and sharing subinstructions |
US6779101B1 (en) | 2000-03-07 | 2004-08-17 | University Of Washington | Method and apparatus for processing compressed VLIW subinstruction opcodes |
GB2366643B (en) | 2000-05-25 | 2002-05-01 | Siroyan Ltd | Methods of compressing instructions for processors |
ATE521032T1 (de) | 2001-01-30 | 2011-09-15 | Silicon Hive Bv | Computerbefehl mit befehlsabruf-steuerbit |
GB0106459D0 (en) | 2001-03-15 | 2001-05-02 | Marconi Comm Ltd | Hardware design using evolutionary algorithms |
US7028286B2 (en) | 2001-04-13 | 2006-04-11 | Pts Corporation | Methods and apparatus for automated generation of abbreviated instruction set and configurable processor architecture |
CN1299198C (zh) * | 2001-06-27 | 2007-02-07 | 凌阳科技股份有限公司 | 由可改变的指令格式而提高程序码密集度的微控制器结构 |
JP3806341B2 (ja) | 2001-11-22 | 2006-08-09 | ユニバーシティ・オブ・ワシントン | サブ命令の共用、命令のストアならびに圧縮のための方法、およびコンピュータシステム |
US8639849B2 (en) * | 2001-12-17 | 2014-01-28 | Sutech Data Solutions Co., Llc | Integrated circuits for high speed adaptive compression and methods therefor |
US6795897B2 (en) * | 2002-05-15 | 2004-09-21 | International Business Machines Corporation | Selective memory controller access path for directory caching |
JP4026753B2 (ja) | 2002-07-25 | 2007-12-26 | 株式会社日立製作所 | 半導体集積回路 |
US6975773B1 (en) | 2002-07-30 | 2005-12-13 | Qualcomm, Incorporated | Parameter selection in data compression and decompression |
EP1530755B1 (en) | 2002-08-16 | 2019-11-06 | Intel Corporation | Apparatus, method, and compiler enabling processing of variable length isntructions in a very long instruction word processor |
GB2393274B (en) | 2002-09-20 | 2006-03-15 | Advanced Risc Mach Ltd | Data processing system having an external instruction set and an internal instruction set |
US7574583B2 (en) | 2002-09-24 | 2009-08-11 | Silicon Hive B.V. | Processing apparatus including dedicated issue slot for loading immediate value, and processing method therefor |
US7249248B2 (en) | 2002-11-25 | 2007-07-24 | Intel Corporation | Method, apparatus, and system for variable increment multi-index looping operations |
US7290122B2 (en) | 2003-08-29 | 2007-10-30 | Motorola, Inc. | Dataflow graph compression for power reduction in a vector processor |
CN100485606C (zh) | 2003-12-16 | 2009-05-06 | Nxp股份有限公司 | 存储器高效率的指令处理电路 |
JP2008535528A (ja) | 2005-01-18 | 2008-09-04 | トレストル コーポレーション | スライドの可変品質画像を形成するためのシステムおよび方法 |
US7404042B2 (en) * | 2005-05-18 | 2008-07-22 | Qualcomm Incorporated | Handling cache miss in an instruction crossing a cache line boundary |
US7616137B2 (en) | 2005-07-01 | 2009-11-10 | Stmicroelectronics, Sa | Method and apparatus for compression and decompression of an executable code with a RISC processor |
US8099587B2 (en) | 2005-07-20 | 2012-01-17 | Intel Corporation | Compressing and accessing a microcode ROM |
CN101075903B (zh) * | 2006-05-17 | 2012-07-04 | 中兴通讯股份有限公司 | 网络资源配置方法和装置 |
CN100492279C (zh) * | 2006-07-27 | 2009-05-27 | 中国科学院计算技术研究所 | 对复杂指令译码生成微码的译码装置和方法 |
KR100875836B1 (ko) | 2007-03-23 | 2008-12-24 | 삼성전자주식회사 | 병렬 처리 vliw 컴퓨터를 위한 인스트럭션 명령어 압축장치 및 그 방법 |
US7970215B2 (en) * | 2007-03-30 | 2011-06-28 | Intel Corporation | Automatic generation of compact code tables |
US20100223237A1 (en) * | 2007-11-05 | 2010-09-02 | University Of Florida Research Foundation, Inc. | Lossless data compression and real-time decompression |
US9529592B2 (en) * | 2007-12-27 | 2016-12-27 | Intel Corporation | Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation |
US8281151B2 (en) * | 2008-04-09 | 2012-10-02 | Hewlett-Packard Development Company L. P. | Auditor assisted extraction and verification of client data returned from a storage provided while hiding client data from the auditor |
CN101969362B (zh) * | 2010-09-30 | 2014-09-10 | 中兴通讯股份有限公司 | 掩码生成方法、列表压缩编码方式的选择方法及相应装置 |
US9201652B2 (en) | 2011-05-03 | 2015-12-01 | Qualcomm Incorporated | Methods and apparatus for storage and translation of entropy encoded software embedded within a memory hierarchy |
US10120692B2 (en) | 2011-07-28 | 2018-11-06 | Qualcomm Incorporated | Methods and apparatus for storage and translation of an entropy encoded instruction sequence to executable form |
-
2011
- 2011-05-03 US US13/099,463 patent/US9201652B2/en active Active
-
2012
- 2012-05-02 KR KR1020157011179A patent/KR20150053825A/ko not_active Application Discontinuation
- 2012-05-02 JP JP2014509420A patent/JP5911952B2/ja not_active Expired - Fee Related
- 2012-05-02 WO PCT/US2012/036199 patent/WO2012151334A1/en active Application Filing
- 2012-05-02 KR KR1020137031851A patent/KR101559450B1/ko active IP Right Grant
- 2012-05-02 EP EP12725178.3A patent/EP2705423B1/en not_active Not-in-force
- 2012-05-02 CN CN201710191151.3A patent/CN107168679A/zh active Pending
- 2012-05-02 CN CN201280026722.3A patent/CN103582871B/zh not_active Expired - Fee Related
- 2012-05-02 CN CN201610127442.1A patent/CN105808209B/zh not_active Expired - Fee Related
-
2015
- 2015-07-30 JP JP2015150646A patent/JP6120920B2/ja active Active
- 2015-11-05 CY CY20151100986T patent/CY1116891T1/el unknown
- 2015-11-24 US US14/950,612 patent/US10754653B2/en not_active Expired - Fee Related
-
2016
- 2016-03-30 JP JP2016067689A patent/JP6073515B2/ja not_active Expired - Fee Related
-
2017
- 2017-01-04 JP JP2017000098A patent/JP6363739B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN103582871A (zh) | 2014-02-12 |
WO2012151334A1 (en) | 2012-11-08 |
US10754653B2 (en) | 2020-08-25 |
JP6363739B2 (ja) | 2018-07-25 |
US9201652B2 (en) | 2015-12-01 |
CN105808209B (zh) | 2018-10-23 |
EP2705423A1 (en) | 2014-03-12 |
CN103582871B (zh) | 2017-04-05 |
CN105808209A (zh) | 2016-07-27 |
JP6073515B2 (ja) | 2017-02-01 |
JP2014513366A (ja) | 2014-05-29 |
CY1116891T1 (el) | 2017-04-05 |
JP2017097900A (ja) | 2017-06-01 |
EP2705423B1 (en) | 2015-08-05 |
JP6120920B2 (ja) | 2017-04-26 |
JP2016149148A (ja) | 2016-08-18 |
KR101559450B1 (ko) | 2015-10-12 |
CN107168679A (zh) | 2017-09-15 |
KR20140016364A (ko) | 2014-02-07 |
US20120284461A1 (en) | 2012-11-08 |
JP5911952B2 (ja) | 2016-04-27 |
US20160077835A1 (en) | 2016-03-17 |
JP2015228241A (ja) | 2015-12-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101559450B1 (ko) | 메모리 계층 내에 임베딩된 엔트로피 인코딩된 소프트웨어의 저장 및 전환을 위한 방법들 및 장치들 | |
US9965501B2 (en) | Techniques for maintaining column vectors of relational data within volatile memory | |
JP5869125B2 (ja) | エントロピ符号化命令シーケンスの記憶および実行可能な形式への変換のための方法および装置 | |
US10007605B2 (en) | Hardware-based array compression | |
CN117632257A (zh) | 将有效位通道作为矢量断言暴露于cpu | |
Lefurgy et al. | Evaluation of a high performance code compression method | |
CN108205448A (zh) | 具有在每个维度上可选择的多维循环寻址的流引擎 | |
US9047069B2 (en) | Computer implemented method of electing K extreme entries from a list using separate section comparisons | |
TWI522910B (zh) | 微處理器、選擇性解壓縮微程式碼方法、產生選擇性壓縮微程式碼方法、產生描述方法以及電腦程式產品 | |
CN113924550A (zh) | 直方图运算 | |
US7840784B2 (en) | Test and skip processor instruction having at least one register operand | |
WO1997043710A2 (en) | Vliw processor which processes compressed instruction format | |
Silfa et al. | Exploiting Kernel Compression on BNNs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A107 | Divisional application of patent | ||
WITN | Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid |