KR20230129559A - 가변길이 명령어들을 사용하는 병렬 디코드 명령어 세트 컴퓨터 아키텍처 - Google Patents

가변길이 명령어들을 사용하는 병렬 디코드 명령어 세트 컴퓨터 아키텍처 Download PDF

Info

Publication number
KR20230129559A
KR20230129559A KR1020237028294A KR20237028294A KR20230129559A KR 20230129559 A KR20230129559 A KR 20230129559A KR 1020237028294 A KR1020237028294 A KR 1020237028294A KR 20237028294 A KR20237028294 A KR 20237028294A KR 20230129559 A KR20230129559 A KR 20230129559A
Authority
KR
South Korea
Prior art keywords
length
variable length
prefixes
instruction
suffixes
Prior art date
Application number
KR1020237028294A
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 KR20230129559A publication Critical patent/KR20230129559A/ko

Links

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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

본 명세서는 가변 길이 명령어들로 병렬 디코드 명령어 세트 컴퓨터 아키텍처를 지원하기 위한 장치, 방법 및 기법을 설명한다. 다양한 양태에서, 프로세서는 실행을 위한 명령어를 수신한다. 디코더는 명령어에서 복수의 고정 길이 프리픽스들을 식별하고 명령어에서 복수의 가변 길이 서픽스들을 식별한다. 복수의 고정 길이 프리픽스들 각각은 가변 길이 서픽스들 중 하나와 연관된다. 명령어는 복수의 가변 길이 서픽스들에 기초하여 실행된다. 그렇게 함으로써, 설명된 시스템 및 방법은 프로그램 크기를 줄이고 실리콘 칩에서 필요한 영역을 줄이는 방식으로 구현될 수 있다.

Description

가변길이 명령어들을 사용하는 병렬 디코드 명령어 세트 컴퓨터 아키텍처
명령어 세트 인코딩은 병렬로 수행될 수 있는 작업량을 최대화하는 것과 프로그램 크기를 최소화하는 것 사이의 트레이드 오프(trade-off)로 중앙 프로세싱 유닛(CPU)의 성능에 영향을 미칠 수 있으며, 이는 프로그램을 실행하는 데 필요한 리소스를 감소시킨다. 일부 기존 시스템은 32비트 길이 명령어들과 같은 고정 너비 명령어들을 사용한다. 이러한 시스템은 다수의 명령어들을 동시에 가져와서 디코딩하는 수퍼 스칼라 컴퓨터 아키텍처를 지원한다. 명령어들은 병렬로 실행될 수 있다. 그러나 이러한 유형의 시스템에서는 단순 명령어를 포함하여 모든 명령어들의 길이가 동일해야 한다. 예를 들어 모든 명령어들이 32비트라면 몇 비트만 필요한 간단한 명령어라도 32비트라는 고정 길이로 늘어나게 되어 단순 명령어가 필요 이상으로 길어져 프로그램 크기가 커진다.
기존의 다른 시스템은 병렬로 디코딩하기 어려울 수 있는 가변 길이 명령어를 사용한다. 이 어려움은 시스템이 제2 명령어가 시작되는 위치를 결정하기 전에 명령어 길이를 찾기 위해 제1 명령어를 디코딩해야 하기 때문에 발생한다. 이러한 제한을 줄이기 위한 기법들이 있지만, 이러한 기법들은 상당한 추가적인 프로세싱이 필요하거나 다양한 길이의 다양한 명령어들을 프로세싱하기 위한 캐시들을 구현하기 위해 실리콘 칩에 더 큰 영역이 필요할 수 있다.
본 명세서는 가변 길이 명령어들을 갖는 병렬 디코드 명령어 세트 컴퓨터 아키텍처와 관련된 시스템 및 방법을 개시한다. 일부 양태에서, 가변 길이 명령어들로 병렬 디코딩을 수행할 때 리소스 낭비를 피하고 고정 길이 명령어들의 비효율적인 인코딩을 피하기 위해 하이브리드 인코딩 접근 방법이 사용된다. 예를 들어, 하이브리드 인코딩 접근 방법은 각 명령어에 대해 고정 길이 프리픽스(prefix)와 가변 길이 서픽스(suffix)를 포함하는 명령어 형식을 사용할 수 있다.
다양한 양태에서, 프로세서는 실행을 위한 명령어 블록을 수신한다. 디코더는 명령어 블록에서 다수의 고정 길이 프리픽스들을 식별하고 명령어에서 다수의 가변 길이 서픽스들을 식별한다. 다수의 고정 길이 프리픽스들 각각은 가변 길이 서픽스들 중 하나와 연결될 수 있다. 명령어 블록은 그 후 복수의 가변 길이 서픽스들에 기초하여 실행된다. 그렇게 함으로써, 설명된 시스템 및 방법은 프로그램 크기를 줄이고 실리콘 칩에서 필요한 영역을 줄이는 방식으로 구현될 수 있다.
이 요약은 가변 길이 명령어들로 병렬 디코드 명령어 세트 컴퓨터 아키텍처를 구현하기 위한 단순화된 개념을 소개하기 위해 제공된다. 단순화된 개념은 하기 상세한 설명에서 추가로 설명된다. 이 요약은 청구된 주제의 필수 기능을 식별하기 위한 것이 아니며 청구된 주제의 범위를 결정하는 데 사용하기 위한 것도 아니다.
기술된 시스템 및 방법의 하나 이상의 양태에 대한 세부사항이 아래에 기술된다. 설명과 도면에서 서로 다른 경우에 동일한 참조 번호를 사용하면 유사한 요소를 나타낸다.
도 1은 다양한 명령어들을 실행할 수 있는 예시적인 CPU(중앙 프로세싱 유닛)를 도시한다;
도 2는 고정 길이 프리픽스들 및 가변 길이 서픽스들을 포함하는 예시적인 명령어 블록을 도시한다;
도 3은 서픽스 오프셋들을 결정할 수 있는 예시적인 병렬 가산기를 도시한다;
도 4는 고정 길이 프리픽스들 및 가변 길이 서픽스들을 갖는 명령어 블록을 디코딩하기 위한 예시적인 프로세스를 도시한다;
도 5는 즉치(immediate)/레지스터 값 X(DEXV)에 대한 예시적인 디코딩 및 실행 접근 방법을 도시한다; 그리고
도 6은 오프셋(JDEXO)에 기초한 예시적인 점프, 디코딩 및 실행 X를 도시한다.
기술된 시스템 및 방법은 가변 길이 명령어들을 사용하는 병렬 디코드 명령어 세트 컴퓨터를 제공한다. 이러한 명령어들은 프리픽스 및 서픽스를 포함하는 하이브리드 명령어들이라고 할 수 있다. 일부 양태에서, 시스템 및 방법은 각각의 하이브리드 명령어를 프리픽스 및 서픽스의 두 파트로 분리할 수 있다. 프리픽스는 연관되거나 대응하는 서픽스의 길이를 나타내는 데이터를 포함할 수 있다. 본 명세서에 기술된 바와 같이, 각각의 프리픽스는 명령어의 프리픽스 부분 내의 고정된 위치에서 고정된 길이(예를 들어, 고정된 수의 비트)를 가질 수 있다. 각 서픽스는 가변 길이를 가질 수 있다. 따라서 각 프리픽스는 연관된 서픽스의 길이(예를 들어, 비트 단위)를 나타낸다. 프리픽스의 다른 섹션은 선택 사항이며 특정 명령어 세트가 정의된 방식에 따라 달라질 수 있다. 예를 들어, 프리픽스에는 명령어 식별자 및 명령어와 연관된 데이터가 포함될 수 있다.
기술된 시스템 및 방법의 일부 양태에서, 명령어들의 일부는 가변 길이 명령어들을 제공하면서 병렬로 디코딩될 수 있다. 이러한 시스템 및 방법은 프로그램 크기를 줄이고 실리콘 칩에서 필요한 영역을 줄이는 방식으로 구현될 수 있다.
도 1은 다양한 명령어들을 실행할 수 있는 예시적인 중앙 프로세싱 유닛(CPU)(100)를 도시한다. CPU(100)는 디코더(102), 산술 논리 유닛(ALU)(104), 부동 소수점 유닛(FPU)(106) 및 캐시(108)와 같은 특정 태스크를 수행하는 다양한 하위 구성요소들을 포함하며, 이는 랜덤 액세스 메모리(RAM)(110) 및 다른 메모리 디바이스에 결합될 수 있다. 특정 하위 구성요소들이 CPU(100)에 도시되어 있지만, 다른 실시예는 CPU(100) 내에 추가적인 하위 구성요소들을 포함하거나 CPU(100) 내에 더 적은 수의 하위 구성요소들을 포함할 수 있다.
일부 양태에서, 프로그램 코드는 디코더(102)에 의해 수신되고, 이는 수신된 프로그램 코드 내 명령어들을 디코딩한다. ALU(104)는 특정 명령어들에 필요한 정수(integer) 계산을 수행한다. 정수 계산에는 정수(즉, 전체 수)를 사용한 수학적 계산이 포함된다. FPU(106)는 특정 명령어들에 필요한 부동 소수점 계산을 수행한다. 부동 소수점은 소수 자릿수가 있는 숫자를 이진 형식으로 나타내는 기법이다. 부동 소수점 계산은 정수 계산과 다르게 처리된다.
일부 양태에서, ALU(104)는 레지스터들의 값들에 액세스하고 이들 값들에 대해 다양한 동작들을 수행한다. 특정 구현예에서, CPU(100)는 서로 독립적으로 동작할 수 있는 다수의 ALU들(104)을 포함할 수 있다. 마찬가지로, FPU(106)는 레지스터들의 값들에 액세스하고 해당 값들에 대해 다양한 동작들을 수행할 수 있다. 일부 양태에서, CPU(100)는 서로 독립적으로 동작할 수 있는 다수의 FPU들(106)을 포함할 수 있다. 캐시(108)는 RAM(110)에 기록되거나 RAM(110)으로부터 판독되는 다양한 데이터를 저장할 수 있다.
도 2는 고정 길이 프리픽스(prefix)들(예를 들어, 고정 수의 비트) 및 가변 길이 서픽스(suffix)들(예를 들어, 가변 수의 비트)을 포함하는 예시적인 명령어 블록(200)을 도시한다. 도 2에 도시된 바와 같이, 명령어 블록(200)은 메모리에 저장되고 시작점(202)과 종료점(204)을 갖는다. 일부 양태에서, 명령어 블록은 메모리의 연속적인 블록에 저장된다. 설명된 예에서 명령어 블록(200)은 프리픽스들(206, 208, 210, 212, 214, 216, 218 및 220)의 8개 블록을 갖는다. 일부 양태에서, 프리픽스들(206-220)은 메모리에 순차적으로 위치한다. 또한, 명령어 블록(200)은 서픽스들(222, 224, 226, 228, 230, 232, 234 및 236)의 8개 블록을 갖는다. 일부 양태에서, 서픽스들(222-236)은 프리픽스들(206-220) 다음의 메모리에 순차적으로 위치한다.
본 명세서에서 논의되는 바와 같이, 프리픽스들(206-220)은 고정 길이(도 2에 도시된 바와 같음)를 갖고 서픽스들(222-236)은 가변 길이를 갖는다. 일부 양태에서, 프리픽스들(206-220)은 16비트의 길이를 가질 수 있다. 다른 예에서, 프리픽스들(206-220)은 임의의 길이를 가질 수 있다. 다양한 길이의 서픽스들(222-236)이 도 2에 도시되어 있다. 예를 들어 서픽스(222)는 서픽스(224 및 230)보다 길이가 짧다. 8개의 프리픽스들(206-220) 및 8개의 서픽스들(222-236)이 도 2에 도시되어 있지만, 다른 구현예에는 임의의 수의 프리픽스들 및 임의의 수의 서픽스들이 포함될 수 있다.
일부 양태에서, 각각의 프리픽스는 특정 서픽스와 연관된다. 예를 들어, 도 2에 도시된 바와 같이, 프리픽스(206)는 서픽스(222)와 연관되고, 프리픽스(208)는 서픽스(224)와 연관되며, 프리픽스(210)는 서픽스(226)와 연관되는 식이다. 명령어의 두 파트(프리픽스 및 서픽스) 사이의 분할을 통해 디코더는 제1 파트(프리픽스)의 데이터만 로드할 수 있고 반면 제2 파트(서픽스)의 데이터는 디코더에 의해 저장되거나 파싱되지 않고 실행 유닛에 로드될 수 있다. 이 접근 방법은 작고 고정된 수의 비트를 저장하는 단순화된 디코더의 사용을 지원하여, 디코더의 크기를 줄이고 디코더의 전력 소비를 줄이며 디코더 성능을 향상시킨다.
8개의 고정 길이 프리픽스들(206-220)을 갖는 명령어 블록(200)의 구성은 병렬로 디코딩될 수 있다. 각각의 프리픽스(206-220)의 길이가 같기 때문에 메모리에서 각각의 프리픽스의 시작 위치를 식별하는 것은 간단한 프로세스이다. 예를 들어 프리픽(206)에 대한 메모리의 시작 위치는 시작점(202)에 기초하여 알려져 있다. 다음 프리픽스(208)에 대한 메모리의 시작 위치는 프리픽스(206)에 고정 길이(비트 단위)를 추가하여 쉽게 결정된다. 이 프로세스는 각각의 프리픽스(206-220)에 대한 메모리의 시작 위치뿐만 아니라 제1 서픽스(222)에 대한 메모리의 시작 위치를 계속 찾는다.
일부 구현예에서, 각각의 프리픽스(206-220)는 명령어 식별자, 연관된 서픽스의 길이 및 명령어에 의해 사용되는 데이터(예를 들어, 실행될 때 가변 길이 서픽스에 의해 사용되는 데이터)와 같은 데이터를 포함한다. 다른 구현예에서, 명령어에 의해 사용되는 데이터는 프리픽스 대신에(또는 추가로) 서픽스에 저장될 수 있다.
도 3은 서픽스 오프셋들을 결정할 수 있는 예시적인 병렬 가산기(300)를 도시한다. 일부 양태에서, 각각의 서픽스의 길이는 연관된 프리픽스에 저장된 정보에 기초하여 알려져 있다. 따라서, 기술된 시스템 및 방법은 병렬 가산기(300)의 출력에 기초하여 메모리에서 각각의 서픽스의 시작 위치를 빠르게 결정할 수 있다. 각각의 프리픽스 및 각각의 서픽스에 대한 메모리의 시작 위치가 결정된 후, CPU(100)는 명령어를 실행하는 데 필요한 모든 정보를 갖게 된다. 도 3의 예에서, 병렬 가산기(300)는 예를 단순화하기 위해 4개의 프리픽스들 및 4개의 서픽스들을 갖는 명령어를 관리한다.
일부 양태에서, 도 3의 예는 누적된 서픽스 길이들을 사용하여 메모리 내의 각 서픽스의 시작 위치를 결정한다. 병렬 가산기(300)에서, 각 서픽스의 시작 위치를 빠르게 결정하기 위해 다중 덧셈(multiple addition)들이 병렬로 수행된다. 일부 양태에서, 병렬 가산기(300)는 블록(304, 306, 308 및 310)으로 표현되는, 디코딩된 서픽스 크기들(예를 들어, 프리픽스들로부터 디코딩됨)(330)을 수신한다. 도 3에 도시된 바와 같이, 4개의 디코딩된 서픽스 크기들은 각각 2바이트, 0바이트, 4바이트 및 8바이트이다.
일부 양태에서, 점선(302)으로 식별되는 다중 가산기 회로들은 가산기들(312, 314, 316 및 318)을 포함할 수 있다. 예를 들어, 가산기(312)는 블록(304)(2바이트) 및 블록(306)(0바이트)의 값을 더하여 블록(324)으로 통신되는 2바이트의 출력을 생성한다. 가산기(312)의 출력은 또한 가산기들(316, 318)로 통신된다. 블록들(320, 322, 324, 326, 328)은 명령어의 서픽스 블록 내의 각 서픽스에 대한 오프셋을 나타낸다. 특히, 블록(320)은 0(서픽스 블록의 시작점)이다. 블록(322)은 블록(304)과 동일하며, 제1 오프셋이다. 블록들(324 및 326)은 서픽스 블록의 다음 두 오프셋들을 나타낸다. 일부 양태에서, 블록(328)은 다음 명령어 블록에 대한 오프셋을 나타낸다. 도 3의 예에서, 332는 서픽스 블록의 각 서픽스에 대한 오프셋들을 나타낸다.
가산기(314)는 블록(308)(4바이트) 및 블록(310)(8바이트)의 값을 더하여 가산기(318)로 통신되는 12바이트의 출력을 생성한다. 가산기(316)는 블록(308)의 출력(4바이트)을 가산기(312)의 출력(2바이트)에 더하여 6바이트의 출력을 생성하고, 이는 블록(326)으로 통신된다. 가산기(318)는 가산기(312)의 출력(2바이트)을 가산기(314)의 출력(12바이트)에 더하여 14바이트의 출력을 생성하고, 이는 블록(328)으로 통신된다. 도 3의 예는 임의의 수의 프리픽스들 및 임의의 수의 서픽스들을 갖는 명령어들에 적용될 수 있다. 일부 양태에서, 추가적인 가산기들은 메모리 내 모든 서픽스들의 시작 위치들을 결정하는 데 사용될 수 있다.
도 4는 고정 길이 프리픽스들 및 가변 길이 서픽스들을 갖는 명령어 블록을 디코딩하기 위한 예시적인 프로세스(400)를 도시한다. 프로세스(400)는 수행되는 동작들을 지정하는 블록들의 세트로서 예시되지만 각 블록들에 의해 동작들을 수행하기 위해 표시된 순서 또는 조합으로 반드시 제한되는 것은 아니다. 또한, 하나 이상의 동작들 중 임의의 동작을 반복, 결합, 재구성 또는 연결하여 다양한 추가 및/또는 대체 방법을 제공할 수 있다. 기법들은 하나의 디바이스에서 동작하는 하나의 엔티티 또는 다수의 엔티티들의 성능으로 제한되지 않는다.
블록(402)에서, 디바이스 또는 시스템은 CPU와 같은 프로세서에 의한 실행을 위한 명령어 블록을 수신한다. 일부 양태에서, 명령어 블록은 시작 메모리 위치 및 일부 상황에서는 종료 메모리 위치로 식별되는 메모리의 연속적인 블록에 저장된다. 블록(404)에서, 프로세스(400)는 수신된 명령어 블록에서 다수의 고정 길이 프리픽스들을 식별한다. 본 명세서에서 논의된 바와 같이, 모든 프리픽스들의 고정 길이가 동일하기 때문에 프리픽스들 사이의 알려진 오프셋들에 기초하여 다수의 고정 길이 프리픽스들 각각의 오프셋 값이 결정될 수 있다.
블록(406)에서, 프로세스(400)는 명령어 블록에서 다수의 가변 길이 서픽스들을 식별한다. 본 명세서에서 논의된 바와 같이, 각각의 고정 길이 프리픽스는 가변 길이 서픽스들 중 하나와 연관된다. 블록(408)에서, 각각의 가변 길이 서픽스의 길이는 연관된 고정 길이 프리픽스에 포함된 데이터에 기초하여 결정된다. 가변 길이 서픽스들의 길이들은 다음 서픽스의 시작에 대한 오프셋 값들을 결정하는 데 사용된다. 블록(410)에서, 프로세스(400)는 다중 가산기 회로들을 사용하여 각각의 가변 길이 서픽스에 대한 오프셋 값을 결정한다. 본 명세서에서 논의된 바와 같이, 다중 가산기 회로들은 프리픽스들에서 서픽스 길이 데이터를 프로세싱하고 다음 서픽스의 시작에 대한 오프셋 값을 결정하기 위해 병렬 추가적인 동작들을 수행한다. 블록(412)에서, 프로세스(400)는 다수의 가변 길이 서픽스들에 기초하여 명령어들을 실행한다.
일부 양태에서, 본 명세서에 기술된 시스템 및 방법은 라우팅을 용이하게 하기 위해 분할 레지스터 세트들을 생성할 수 있다. 예를 들어 다수의 레지스터 세트들이 생성되고 상이한 ALU들과 연관될 수 있다. 간단한 예에서 두 개의 레지스터 세트들이 생성되고 레지스터 세트 A와 레지스터 세트 B라는 레이블이 지정된다. ALU들의 제1 그룹은 레지스터 세트 A에 액세스할 수 있고, ALU들의 제2 그룹은 레지스터 세트 B에 액세스할 수 있으며, ALU들의 제3 그룹은 레지스터 세트 A 및 레지스터 세트 B에 액세스할 수 있다. 특정 구현예에서, 레지스터 세트들은 얼마든지 생성될 수 있다. 일부 양태에서, 레지스터 세트들은 마이크로아키텍처와 연관된 물리적 레지스터들에 대한 레지스터 명명과 함께 구현될 수 있다. 이는 ISA(Instruction Set Architecture)에 추가된 복잡성을 노출시키지 않고 감소된 라우팅의 모든 이점들을 제공할 수 있다.
CPU가 더 큰 크기(예를 들어, 더 많은 수의 코어)로 확장됨에 따라, 그들은 증가된 라우팅에 대한 요구를 충족시키기 위해 증가된 수의 물리적 레지스터들을 필요로 할 수 있다. 위에서 설명한 다수의 레지스터 세트들을 사용하면 더 큰 CPU로 인해 발생할 수 있는 라우팅 문제를 완화할 수 있다.
도 5는 즉치(immediate)/레지스터 값 X(DEXV)에 대한 예시적인 디코딩 및 실행 접근 방법을 도시한다. 일부 양태에서, 특정 명령어들은 디코딩이 필요하지 않다. 예를 들어, 8개 명령어들의 블록에는 분기 또는 기타 상황으로 인해 실제로 디코딩되어야 하는 명령어들이 8개 미만일 수 있다. 빈 공간을 채우기 위해 No-Op 명령어들이 블록에 추가될 수 있지만 이러한 접근 방식은 불필요하게 추가 공간을 차지한다. 본 명세서에 기술된 바와 같이, 일부 양태에서, 사용되지 않는 블록의 낭비를 피하기 위해 더 작은 블록 크기가 구성된다. 특정 구현예에서, 명령어는 다음 명령어 블록의 페치 및 디코딩 활동들을 수정할 수 있다.
일부 양태에서, 명령어의 두 파트 사이의 분할은 디코더가 프리픽스를 로드하기만 하면 되도록 만들어질 수 있다. 따라서 서픽스 내 데이터는 디코더에 의해 저장되거나 파싱되지 않고 실행 유닛에 대해 로딩될 수 있다. 이 접근 방식은 낮고 고정된 비트 수를 저장하는 단순화된 디코더를 지원하여 디코더의 성능을 향상시키면서 디코더의 크기와 전력 소비를 줄인다.
도 5의 예는 일부 명령어들이 디코딩을 필요로 하지 않는 상황을 처리하기 위해 디코딩 및 실행(Decode and Execute) X 명령어들의 추가를 예시한다. 디코딩 및 실행 X 명령어들은 이전 명령어 블록의 독립 실행형 명령어들로 실행되거나 분기 또는 점프 명령어의 일부로 실행된다. 각각의 독립 실행형 명령어는 명령어들의 수를 지정하는 즉치 값(예를 들어, 값이 명령어의 일부임)을 가질 수 있다. 점프 및 분기 명령어들의 경우, 즉치 값을 사용할 수 있지만 점프 위치가 예를 들어 가상 기능인 경우에는 유용하지 않다. 이 상황에서는 두 가지 옵션이 있다: X(디코딩 및 실행 X)는 레지스터 값 인수(argument)가 될 수 있거나 X(디코딩 및 실행 X)는 프리픽스 블록 크기의 오프셋에 기초할 수 있다.
특정 예에서, 각각의 프리픽스가 16비트(2바이트)이고 블록에 8개의 프리픽스들이 있다고 가정한다. 점프 어드레스가 정렬된 16바이트에 8바이트를 더한 경우, 이는 여기에 설명된 시스템 및 방법이 다음 블록에서 4개의 명령어들을 디코딩하고 실행할 수 있음을 의미한다. 따라서 점프 대상들은 해당 블록의 명령어들의 수에 따라 메모리가 정렬되어야 한다.
도 5의 예에서는, 블록 크기가 8이고 프리픽스 크기가 2바이트(16비트)인 X=4이다. 도 5에 도시된 바와 같이, 즉치 값(500)은 프리픽스 및 서픽스 사이에서 분할될 수 있는 명령어 식별자를 나타낸다. 블록(504)은 서픽스 길이를 식별하고 블록(506)은 다음 블록 길이(이 예에서는 4)를 식별한다. 레지스터 값(502)은 서픽스 길이를 식별하는 블록(508) 및 레지스터 어드레스를 식별하는 블록(510)을 포함하는 명령어 식별자를 나타낸다. 도 5의 예에서, 블록(510)에서 어드레싱된 레지스터는 블록(512)으로 도시된다.
도 5에 도시된 명령어를 X=4로 실행하면, 블록 크기 8과 프리픽스 크기 2바이트(16비트)는 도 5의 하단에 도시된 명령어 블록의 실행을 야기할 것이다. 이 명령어 블록에는 4개의 프리픽스들(514, 516, 518 및 520)이 포함된다. 4개의 명령어 프리픽스들이 명령어 블록에서 드롭된다(530으로 표시됨). 명령어 블록은 또한 4개의 서픽스들(522, 524, 526 및 528)을 포함한다. 4개의 서픽스들은 프리픽스(520) 바로 뒤에 온다. 어떤 양태에서, 점프(JDEXV)를 포함하는 상황에 대해, 어드레스는 도 6에 도시된 실시예와 같은 메모리 어드레싱 방식을 사용하여 명령어의 끝에 추가된다(아래에서 설명).
도 6은 오프셋(JDEXO)에 기초한 예시적인 점프, 디코딩 및 실행 X를 도시한다. 도 6에 도시된 바와 같이, 명령어 식별자(600)는 프리픽스 및 서픽스 사이에서 분할될 수 있다. 명령어 식별자(600)는 0일 수 있는 서픽스 길이를 식별하는 블록(602)을 포함한다. 블록(604)은 레지스터 값 또는 즉치 값을 식별하는 메모리 어드레싱 방식을 사용하여 정의된 메모리 어드레스일 수 있는 점프 타겟을 식별한다. 일부 양태에서, 메모리 어드레스는 명령어 식별자(600)에서 정의된 값 또는 글로벌하게 정의된 값일 수 있다.
도 6에 도시된 바와 같이, 점프 타겟 어드레스는 614에서 식별된다. 이 예에서는, 블록 크기가 8이고 프리픽스 크기가 2바이트(16비트)인 X=4이다. 614에서 식별된 점프 타겟 어드레스는 프리픽스 4개 크기인 8로 식별된다. 따라서, 도 6의 예는 4개의 프리픽스들( 606, 608, 610 및 612)을 건너뛴다. 프로세싱은 프리픽스( 616)에서 시작하여 프리픽스(618, 620 및 622) 다음에 서픽스 블록(624)으로 계속된다.
전술한 시스템 및 방법은 가변 길이 명령어들을 갖는 병렬 디코드 명령어 세트 컴퓨터의 다양한 예와 관련하여 설명되지만, 설명된 시스템, 디바이스, 장치 및 방법은 비제한적이며 다른 상황, 전자 디바이스, 컴퓨팅 구성, 프로세서 구성, 컴퓨팅 환경 등에 적용될 수 있다.
일반적으로, 여기에 설명된 구성요소, 모듈, 방법 및 동작은 소프트웨어, 펌웨어, 하드웨어(예: 고정 논리 회로), 수동 프로세싱 또는 이들의 임의의 조합을 사용하여 구현될 수 있다. 예시적인 방법의 일부 동작들은 컴퓨터 프로세싱 시스템에 대해 로컬 및/또는 원격인 컴퓨터 판독가능 스토리지 메모리에 저장된 실행가능한 명령어들의 일반적인 맥락에서 설명될 수 있으며, 구현예는 소프트웨어 애플리케이션, 프로그램, 기능 등이 포함될 수 있다. 대안적으로, 또는 추가적으로, 여기에 설명된 임의의 기능은 FPGAs, ASICs, ASSPs, SoCs, CPLDs, 코-프로세서, 컨텍스트 허브, 모션 코-프로세서, 센서 코-프로세서 등과 같은 그러나 이에 제한되지 않는, 하나 이상의 하드웨어 로직 구성요소들에 의해 적어도 부분적으로 수행될 수 있다.
다음에서, 가변 길이 명령어들을 갖는 병렬 디코드 명령어 세트 컴퓨터 아키텍처의 하나 이상의 양태에 따라 추가적인 예가 설명된다.
프로세서와 연관되어 구현되는 방법은 프로세서에 의한 실행을 위한 명령어을 수신하는 단계, 디코더에 의해 명령어에서 복수의 고정 길이 프리픽스들을 식별하는 단계, 디코더에 의해 명령어에서 복수의 가변 길이 서픽스들을 식별하는 단계, 상기 복수의 고정 길이 프리픽스들 각각은 상기 가변 길이 서픽스들 중 하나와 연관되고, 복수의 가변 길이 서픽스들에 기초하여 명령어를 실행하는 단계를 포함한다.
본 명세서에 기술된 임의의 방법에 더하여, 복수의 고정 길이 프리픽스들 각각은 연관된 가변 길이 서픽스의 길이를 식별하는 데이터를 포함할 수 있다.
본 명세서에 기술된 임의의 방법에 더하여, 복수의 고정 길이 프리픽스들 각각은 연관된 가변 길이 서픽스의 명령어 식별자를 식별하는 데이터를 포함할 수 있다.
본 명세서에 기술된 임의의 방법에 더하여, 복수의 고정 길이 프리픽스들 각각은 실행될 때 가변 길이 서픽스에 의해 사용되는 데이터를 포함할 수 있다.
본 명세서에 기술된 임의의 방법은 각각의 프리픽스의 고정 길이에 기초하여 복수의 고정 길이 프리픽스들 각각과 연관된 오프셋 값을 결정하는 단계를 더 포함할 수 있다.
본 명세서에 기술된 임의의 방법은 복수의 가산기 회로들에 의해 생성된 결과에 기초하여 복수의 가변 길이 서픽스들 각각과 연관된 오프셋 값을 결정하는 단계를 더 포함할 수 있다.
본 명세서에 기술된 임의의 방법에 더하여, 복수의 가산기 회로들은 복수의 가변 길이 서픽스들과 연관된 오프셋 값들을 계산하기 위해 복수의 고정 길이 프리픽스들로부터 서픽스 길이 데이터를 프로세싱할 수 있다.
본 명세서에 기술된 임의의 방법은 복수의 고정 길이 프리픽스들의 일부 및 가변 길이 서픽스들의 일부를 포함하는 블록을 생성하는 단계를 더 포함할 수 있다.
본 명세서에 기술된 임의의 방법은 복수의 고정 길이 프리픽스들의 일부 및 가변 길이 서픽스들의 일부를 포함하는 블록에 기초하여 명령어를 실행하는 단계를 더 포함할 수 있다.
본 명세서에 기술된 임의의 방법은 실행이 필요하지 않은 적어도 하나의 고정 길이 프리픽스를 식별하는 단계 및 고정 길이 프리픽스와 연관된 적어도 하나의 가변 길이 서픽스를 식별하는 단계를 더 포함할 수 있고, 상기 명령어를 실행하는 단계는 적어도 하나의 고정 길이 프리픽스 및 적어도 하나의 가변 길이 서픽스를 건너뛰는 단계를 포함한다.
전술한 방법에 더하여, 장치는 프로세서, 및 프로세서에 의한 실행을 위한 명령어를 수신하도록 구성된 디코더를 포함하고, 디코더는 명령어에서 복수의 고정 길이 프리픽스들을 식별하고 명령어에서 복수의 가변 길이 서픽스들을 식별하는 것을 포함하는 동작들을 수행하고, 복수의 고정 길이 프리픽스들 각각은 가변 길이 서픽스들 중 하나와 연관되고, 프로세서는 복수의 가변 길이 서픽스들에 기초하여 명령어를 실행한다.
본 명세서에 기술된 임의의 장치에 더하여, 복수의 고정 길이 프리픽스들 각각은 연관된 가변 길이 서픽스의 길이를 식별하는 데이터를 포함할 수 있다.
본 명세서에 기술된 임의의 장치에 더하여, 복수의 고정 길이 프리픽스들 각각은 연관된 가변 길이 서픽스의 명령어 식별자를 식별하는 데이터를 포함할 수 있다.
본 명세서에 기술된 임의의 장치에 더하여, 복수의 고정 길이 프리픽스들 각각은 실행될 때 가변 길이 서픽스에 의해 사용되는 데이터를 포함할 수 있다.
본 명세서에 기술된 임의의 장치에 더하여, 디코더는 각각의 프리픽스의 고정 길이에 기초하여 복수의 고정 길이 프리픽스들 각각과 연관된 오프셋 값을 결정하는 동작을 수행하도록 더 구성될 수 있다.
본 명세서에 기술된 임의의 장치에 더하여, 장치는 복수의 가산기 회로들을 더 포함할 수 있고, 디코더는 복수의 가산기 회로들에 의해 생성된 결과들에 기초하여 복수의 가변 길이 서픽스들 각각과 연관된 오프셋 값을 결정하는 동작을 수행하도록 더 구성될 수 있다.
본 명세서에 기술된 임의의 장치에 더하여, 복수의 가산기 회로들은 복수의 가변 길이 서픽스들과 연관된 오프셋 값들을 계산하기 위해 복수의 고정 길이 프리픽스들로부터 서픽스 길이 데이터를 프로세싱하도록 구성될 수 있다.
본 명세서에 기술된 임의의 장치에 더하여, 디코더는 복수의 고정 길이 프리픽스들의 일부 및 가변 길이 서픽스들의 일부를 포함하는 블록을 생성하기 위한 동작을 더 수행하도록 구성될 수 있다.
본 명세서에 기술된 임의의 방법 또는 장치에 더하여, 디코더는 복수의 고정 길이 프리픽스들의 일부 및 가변 길이 서픽스들의 일부를 포함하는 블록에 기초하여 명령어를 실행하는 동작을 더 수행하도록 구성될 수 있다.
본 명세서에 기술된 임의의 장치에 더하여, 디코더는 실행이 필요하지 않은 적어도 하나의 고정 길이 프리픽스를 식별하고 고정 길이 프리픽스와 연관된 적어도 하나의 가변 길이 서픽스를 식별하는 동작을 수행하도록 더 구성될 수 있고, 상기 명령어를 실행하는 동작은 적어도 하나의 고정 길이 프리픽스 및 적어도 하나의 가변 길이 서픽스를 건너뛰는 동작을 포함한다.
결론
설명된 시스템 및 방법의 양태가 특징 및/또는 방법에 특정한 언어로 설명되었지만, 첨부된 청구범위의 주제는 반드시 설명된 특정 특징 또는 방법으로 제한되지 않는다. 오히려, 특정 특징 및 방법은 설명된 기술의 예시적인 구현으로서 개시되며, 다른 동등한 특징 및 방법은 첨부된 청구 범위 내에 있는 것으로 의도된다. 또한, 다양한 상이한 양태가 설명되고, 각각의 설명된 양태는 독립적으로 또는 하나 이상의 다른 설명된 양태와 관련하여 구현될 수 있음을 인식해야 한다.

Claims (20)

  1. 방법으로서,
    프로세서에 의한 실행을 위한 명령어를 수신하는 단계;
    디코더에 의해, 명령어에서 복수의 고정 길이 프리픽스(prefix)들을 식별하는 단계;
    디코더에 의해, 명령어에서 복수의 가변 길이 서픽스(suffix)들을 식별하는 단계, 상기 복수의 고정 길이 프리픽스들 각각은 상기 가변 길이 서픽스들 중 하나와 연관되며, 및
    상기 복수의 가변 길이 서픽스들에 기초하여 명령어를 실행하는 단계를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 복수의 고정 길이 프리픽스들 각각은 상기 연관된 가변 길이 서픽스의 길이를 식별하는 데이터를 포함하는, 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 복수의 고정 길이 프리픽스들 각각은 상기 연관된 가변 길이 서픽스의 명령어 식별자를 식별하는 데이터를 포함하는, 방법.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 복수의 고정 길이 프리픽스들 각각은 실행될 때 상기 가변 길이 서픽스에 의해 사용되는 데이터를 포함하는, 방법.
  5. 선행하는 어느 한 항에 있어서,
    각각의 프리픽스의 고정 길이에 기초하여 상기 복수의 고정 길이 프리픽스들 각각과 연관된 오프셋 값을 결정하는 단계를 더 포함하는, 방법.
  6. 선행하는 어느 한 항에 있어서,
    복수의 가산기(adder) 회로들에 의해 생성된 결과들에 기초하여 상기 복수의 가변 길이 서픽스들 각각과 연관된 오프셋 값을 결정하는 단계를 더 포함하는, 방법.
  7. 제6항에 있어서,
    상기 복수의 가산기 회로들은 상기 복수의 가변 길이 서픽스들과 연관된 오프셋 값들을 계산하기 위해 상기 복수의 고정 길이 프리픽스들로부터 서픽스 길이 데이터를 프로세싱하는, 방법.
  8. 선행하는 어느 한 항에 있어서,
    상기 복수의 고정 길이 프리픽스들의 일부 및 상기 가변 길이 서픽스들의 일부를 포함하는 블록을 생성하는 단계를 더 포함하는, 방법.
  9. 제8항에 있어서,
    상기 복수의 고정 길이 프리픽스들의 일부 및 상기 가변 길이 서픽스들의 일부를 포함하는 상기 블록에 기초하여 명령어를 실행하는 단계를 더 포함하는, 방법.
  10. 선행하는 어느 한 항에 있어서,
    실행이 필요하지 않은 적어도 하나의 고정 길이 프리픽스를 식별하는 단계; 및
    상기 고정 길이 프리픽스와 연관된 적어도 하나의 가변 길이 서픽스를 식별하는 단계를 더 포함하고, 상기 명령어를 실행하는 단계는 상기 적어도 하나의 고정 길이 프리픽스 및 상기 적어도 하나의 가변 길이 서픽스를 건너뛰는 단계를 포함하는, 방법.
  11. 장치로서,
    프로세서; 및
    상기 프로세서에 의한 실행을 위한 명령어를 수신하도록 구성된 디코더를 포함하고, 상기 디코더는 동작들을 수행하도록 구성되고, 상기 동작들은:
    명령어에서 복수의 고정 길이 프리픽스(prefix)들을 식별하는 동작; 및
    명령어에서 복수의 가변 길이 서픽스(suffix)들을 식별하는 동작을 포함하고, 상기 복수의 고정 길이 프리픽스들 각각은 상기 가변 길이 서픽스들 중 하나와 연관되며, 상기 프로세서는 상기 복수의 가변 길이 서픽스들에 기초하여 명령어를 실행하는, 장치.
  12. 제11항에 있어서,
    상기 복수의 고정 길이 프리픽스들 각각은 상기 연관된 가변 길이 서픽스의 길이를 식별하는 데이터를 포함하는, 장치.
  13. 제11항 또는 제12항에 있어서,
    상기 복수의 고정 길이 프리픽스들 각각은 상기 연관된 가변 길이 서픽스의 명령어 식별자를 식별하는 데이터를 포함하는, 장치.
  14. 제11항 내지 제13항 중 어느 한 항에 있어서,
    상기 복수의 고정 길이 프리픽스들 각각은 실행될 때 상기 가변 길이 서픽스에 의해 사용되는 데이터를 포함하는, 장치.
  15. 제11항 내지 제14항 중 어느 한 항에 있어서,
    상기 디코더는 각각의 프리픽스의 고정 길이에 기초하여 상기 복수의 고정 길이 프리픽스들 각각과 연관된 오프셋 값을 결정하는 동작을 수행하도록 더 구성되는, 장치.
  16. 제11항 내지 제15항 중 어느 한 항에 있어서,
    복수의 가산기(adder) 회로들을 더 포함하고, 상기 디코더는 복수의 가산기 회로들에 의해 생성된 결과들에 기초하여 상기 복수의 가변 길이 서픽스들 각각과 연관된 오프셋 값을 결정하는 동작을 수행하도록 더 구성되는, 장치.
  17. 제16항에 있어서,
    상기 복수의 가산기 회로들은 상기 복수의 가변 길이 서픽스들과 연관된 오프셋 값들을 계산하기 위해 상기 복수의 고정 길이 프리픽스들로부터 서픽스 길이 데이터를 프로세싱하도록 구성되는, 장치.
  18. 제11항 내지 제17항 중 어느 한 항에 있어서,
    상기 디코더는 상기 복수의 고정 길이 프리픽스들의 일부 및 상기 가변 길이 서픽스들의 일부를 포함하는 블록을 생성하기 위한 동작을 수행하도록 더 구성되는, 장치.
  19. 제18항에 있어서,
    상기 디코더는 상기 복수의 고정 길이 프리픽스들의 일부 및 상기 가변 길이 서픽스들의 일부를 포함하는 상기 블록에 기초하여 명령어를 실행하는 동작을 수행하도록 더 구성되는, 장치.
  20. 제11항 내지 제19항 중 어느 한 항에 있어서,
    상기 디코더는:
    실행이 필요하지 않은 적어도 하나의 고정 길이 프리픽스를 식별하는 동작; 및
    상기 고정 길이 프리픽스와 연관된 적어도 하나의 가변 길이 서픽스를 식별하는 동작을 수행하도록 더 구성되고, 상기 명령어를 실행하는 동작은 상기 적어도 하나의 고정 길이 프리픽스 및 상기 적어도 하나의 가변 길이 서픽스를 건너뛰는 동작을 포함하는, 장치.
KR1020237028294A 2022-01-26 2022-01-26 가변길이 명령어들을 사용하는 병렬 디코드 명령어 세트 컴퓨터 아키텍처 KR20230129559A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2022/013934 WO2023146519A1 (en) 2022-01-26 2022-01-26 Parallel decode instruction set computer architecture with variable-length instructions

Publications (1)

Publication Number Publication Date
KR20230129559A true KR20230129559A (ko) 2023-09-08

Family

ID=80448859

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237028294A KR20230129559A (ko) 2022-01-26 2022-01-26 가변길이 명령어들을 사용하는 병렬 디코드 명령어 세트 컴퓨터 아키텍처

Country Status (5)

Country Link
EP (1) EP4278256A1 (ko)
JP (1) JP2024516926A (ko)
KR (1) KR20230129559A (ko)
CN (1) CN116917859A (ko)
WO (1) WO2023146519A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11593110B2 (en) * 2021-01-07 2023-02-28 Texas Instruments Incorporated Instruction packing scheme for VLIW CPU architecture

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6418527B1 (en) * 1998-10-13 2002-07-09 Motorola, Inc. Data processor instruction system for grouping instructions with or without a common prefix and data processing system that uses two or more instruction grouping methods
JP3627725B2 (ja) * 2002-06-24 2005-03-09 セイコーエプソン株式会社 情報処理装置及び電子機器
US8898433B2 (en) * 2012-04-26 2014-11-25 Avago Technologies General Ip (Singapore) Pte. Ltd. Efficient extraction of execution sets from fetch sets

Also Published As

Publication number Publication date
EP4278256A1 (en) 2023-11-22
JP2024516926A (ja) 2024-04-18
WO2023146519A1 (en) 2023-08-03
CN116917859A (zh) 2023-10-20

Similar Documents

Publication Publication Date Title
US10776114B2 (en) Variable register and immediate field encoding in an instruction set architecture
US7617388B2 (en) Virtual instruction expansion using parameter selector defining logic operation on parameters for template opcode substitution
US9235414B2 (en) SIMD integer multiply-accumulate instruction for multi-precision arithmetic
KR101515311B1 (ko) 승산-승산-누산 명령 수행
JP5263702B2 (ja) プログラム・コードを変換するためのコンピュータ・システム、方法、及びコンピュータ可読記録媒体
TWI479412B (zh) 操作具有可重新組構之浮點單元的處理器之方法及系統
JP5456167B2 (ja) マイクロプロセッサおよびマイクロプロセッサ上での精度が改善された積の和計算のための方法
US20190347099A1 (en) Arithmetic operation with shift
JP2006502464A (ja) プロセッサに関するロード/移動及び複製命令
JPH1091443A (ja) 情報処理回路、マイクロコンピュータ及び電子機器
US20120233444A1 (en) Mixed size data processing operation
CN111782270B (zh) 一种数据处理方法及装置、存储介质
US9582281B2 (en) Data processing with variable operand size
CN111124495B (zh) 一种数据处理方法、解码电路及处理器
KR20230129559A (ko) 가변길이 명령어들을 사용하는 병렬 디코드 명령어 세트 컴퓨터 아키텍처
US20200326940A1 (en) Data loading and storage instruction processing method and device
US20020108029A1 (en) Program counter (PC) relative addressing mode with fast displacement
JPH04213135A (ja) 外部メモリアクセスシステム
US6609191B1 (en) Method and apparatus for speculative microinstruction pairing
CN111814093A (zh) 一种乘累加指令的处理方法和处理装置
CN112559037A (zh) 一种指令执行方法、单元、装置及系统
US20190102199A1 (en) Methods and systems for executing vectorized pythagorean tuple instructions
CN114020332B (zh) 指令处理方法及其装置
US20220100514A1 (en) Loop support extensions
Fryza et al. Instruction-level programming approach for very long instruction word digital signal processors