KR20180021165A - 프로세서 명령어 창에 대한 명령어 블록의 대량 할당 - Google Patents
프로세서 명령어 창에 대한 명령어 블록의 대량 할당 Download PDFInfo
- Publication number
- KR20180021165A KR20180021165A KR1020187002589A KR20187002589A KR20180021165A KR 20180021165 A KR20180021165 A KR 20180021165A KR 1020187002589 A KR1020187002589 A KR 1020187002589A KR 20187002589 A KR20187002589 A KR 20187002589A KR 20180021165 A KR20180021165 A KR 20180021165A
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- block
- instructions
- window
- command
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 48
- 239000000872 buffer Substances 0.000 claims description 32
- 238000013507 mapping Methods 0.000 claims description 20
- 238000000638 solvent extraction Methods 0.000 claims description 5
- 238000007726 management method Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 abstract description 14
- 238000010586 diagram Methods 0.000 description 15
- 238000012545 processing Methods 0.000 description 6
- 230000003139 buffering effect Effects 0.000 description 5
- 238000012856 packing Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000003860 storage Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000007620 mathematical function Methods 0.000 description 2
- 230000032683 aging Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000011065 in-situ storage Methods 0.000 description 1
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004886 process control Methods 0.000 description 1
- 238000004513 sizing Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
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
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- 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/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
명령어 블록 기반 마이크로아키텍처의 프로세서 코어는 명령어들의 블록, 및 제어 비트와 피연산자를 포함한 관련 자원들을 즉시 인출함으로써 명령어를 명령어 창에 대량으로 할당하는 제어 유닛을 포함한다. 이러한 대량 할당은 실행 중에 블록 내의 모든 명령어에 걸쳐 일정한 관리 및 정책 구현을 가능하게 함으로써 프로세서 코어 동작의 증가된 효율을 지원한다. 예를 들면, 명령어 블록이 자체적으로 다시 분기할 때, 명령어 블록은 명령어 캐시로부터 재인출되지 않고 리프레시 처리에서 재사용될 수 있다. 그 명령어 블록에 대한 모든 자원들이 하나의 장소에 있기 때문에, 명령어는 적소에 유지될 수 있고, 유효 비트만이 클리어될 필요가 있다. 대량 할당은 또한 블록 내 명령어들에 의한 피연산자 공유 및 명령어들 간의 명시적인 메시징을 촉진한다.
Description
명령어 집합 아키텍처(instruction set architecture, ISA) 및 프로세서의 설계자는 전력과 성능의 교환 조건을 만든다. 예를 들어서 만일 설계자가 더 높은 성능을 발휘하는 명령어를 가진 ISA를 선택하면, 프로세서의 전력 소모가 또한 더 높아질 수 있다. 대안적으로, 만일 설계자가 낮은 전력을 소모하는 명령어를 가진 ISA를 선택하면, 성능이 낮아질 수 있다. 전력 소모는 실행 중에 명령어에 의해 사용되는 산술 논리 유닛(ALU), 캐시 라인 또는 레지스터와 같은 하드웨어 자원의 양과 관련될 수 있다. 이러한 하드웨어 자원을 다량 사용하면 더 높은 전력 소모의 대가로 고성능을 발휘할 수 있다. 대안적으로, 이러한 하드웨어 자원을 소량 사용하면 더 낮은 성능의 대가로 더 낮은 전력 소모를 야기할 수 있다. 컴파일러는 하이 레벨 코드를 ISA 및 프로세서 아키텍처와 호환하는 명령어로 컴파일하기 위해 사용할 수 있다.
명령어 블록 기반 마이크로아키텍처의 프로세서 코어는 명령어들의 블록, 및 제어 비트 및 피연산자(operand)를 포함한 관련 자원들을 즉시 인출(fetch)함으로써 명령어를 명령어 창에 대량으로 할당하는 제어 유닛을 포함한다. 이러한 대량 할당은 실행 중에 블록 내의 모든 명령어에 걸쳐 일정한 관리 및 정책 구현을 가능하게 함으로써 프로세서 코어 동작의 증가된 효율을 지원한다. 예를 들면, 명령어 블록이 자체적으로 다시 분기할 때, 명령어 블록은 명령어 캐시로부터 재인출되지 않고 리프레시 처리에서 재사용될 수 있다. 그 명령어 블록에 대한 모든 자원들이 하나의 장소에 있기 때문에, 명령어는 적소에 유지될 수 있고, 유효 비트만이 클리어될 필요가 있다. 대량 할당은 또한 블록 내 명령어들에 의한 피연산자 공유 및 명령어들 간의 명시적인 메시징을 촉진한다.
이 요약은 뒤의 상세한 설명 부분에서 더 구체적으로 설명하는 개념들의 선택을 간단한 형태로 소개하기 위해 제공된다. 이 요약은 청구된 주제의 핵심적인 특징 또는 본질적인 특징을 식별하기 위한 것으로 의도되지 않고, 또한 청구된 주제의 범위를 결정함에 있어서의 보조자로서 사용되는 것으로 의도되지 않는다. 또한, 청구된 주제는 본 명세서의 임의 부분에서 설명하는 일부 또는 모든 단점을 해결하는 구현예로 제한되지 않는다.
도 1은 컴파일러가 복수의 프로세서 코어를 포함한 아키텍처에서 동작하는 인코딩된 명령어를 제공하는 예시적인 컴퓨팅 환경을 보인 도이다.
도 2는 예시적인 프로세서 코어의 예시적인 마이크로아키텍처의 블록도이다.
도 3은 블록 헤더의 예시적인 구성을 보인 도이다.
도 4 내지 도 15는 예시적인 방법의 흐름도이다.
도면에서 동일한 참조 번호는 동일한 요소를 표시한다. 요소들은 달리 표시하지 않는 한 정확한 축척으로 작도한 것이 아니다.
도 2는 예시적인 프로세서 코어의 예시적인 마이크로아키텍처의 블록도이다.
도 3은 블록 헤더의 예시적인 구성을 보인 도이다.
도 4 내지 도 15는 예시적인 방법의 흐름도이다.
도면에서 동일한 참조 번호는 동일한 요소를 표시한다. 요소들은 달리 표시하지 않는 한 정확한 축척으로 작도한 것이 아니다.
도 1은 명령어 블록의 대량 할당을 이용하는 예시적인 컴퓨팅 환경(100)을 보인 것이다. 이 환경은 프로그램(115)으로부터 인코딩된 기계 실행(machine-executable) 명령어(110)를 발생하기 위해 사용하는 컴파일러(105)를 포함한다. 명령어(110)는 예를 들면 4~128 명령어를 포함한 가변 크기의 명령어 블록들을 처리하도록 구성된 프로세서 아키텍처(120)에 의해 취급될 수 있다.
프로세서 아키텍처(120)는 전형적으로 온칩 네트워크(도시 생략됨)에 의해 상호접속되고 하나 이상의 레벨 2(L2) 캐시(대표적으로 참조 번호 130으로 표시함)와 연동하는 타일 구성의 복수의 프로세서 코어(대표적으로 참조 번호 125로 표시함)를 포함한다. 비록 코어와 캐시의 수 및 구성이 구현예마다 다를 수 있지만, 물리적 코어들은, 프로그램(115)의 런타임 중에 "구성"(composing)이라고 부르는 처리에서, 더 많은 처리 전력이 프로그램 실행에 충당될 수 있게 하는 하나 이상의 더 큰 논리 프로세서로 함께 합병될 수 있다는 점에 주목한다. 대안적으로, 프로그램 실행이 적당한 스레드(thread) 레벨 병행성을 지원할 때, 코어(125)는 독립적으로 작업하면서 독립 스레드로부터의 명령어들을 실행하기 위해 "분해"(decomposing)라고 부르는 처리에서 분할될 수 있다.
도 2는 예시적인 프로세서 코어(125)의 일부의 단순화한 블록도이다. 도시된 것처럼, 프로세서 코어(125)는 전단(front-end) 제어 유닛(202), 명령어 캐시(204), 분기 예측자(206), 명령어 디코더(208), 명령어 창(210), 좌측 피연산자 버퍼(212), 우측 피연산자 버퍼(214), 산술 논리 유닛(ALU)(216), 다른 하나의 ALU(218), 레지스터(220) 및 로드/저장 큐(222)를 포함할 수 있다. 일부 경우에, 버스(화살표로 표시됨)는 데이터와 명령어를 운반할 수 있고, 다른 경우에 버스는 데이터(예를 들면, 피연산자) 또는 제어 신호를 운반할 수 있다. 예를 들면, 전단 제어 유닛(202)은 제어 신호만을 운반하는 버스를 통해 다른 제어 네트워크와 통신할 수 있다. 비록 도 2에는 프로세서 코어(125)에 대하여 특정 배열로 배치된 소정 수의 예시적인 컴포넌트를 나타내고 있지만, 더 많거나 더 적은 수의 컴포넌트가 특정 구현예의 필요에 따라 다르게 배열될 수 있다.
전단 제어 유닛(202)은 내부의 활동을 조정하기 위해 프로세서 코어 및 회로를 통한 정보 흐름을 제어하도록 구성된 회로를 포함할 수 있다. 전단 제어 유닛(202)은 또한 유한 상태 기계(finite state machine, FSM)를 구현하는 회로를 포함할 수 있고, 이때 상태들은 프로세서 코어가 취할 수 있는 각각의 동작 구성을 열거한다. 전단 제어 유닛(202)의 FSM 회로는 연산부호(opcode)(뒤에서 설명함) 및/또는 다른 입력(예를 들면, 하드웨어 레벨 신호)을 이용해서 다음 상태를 결정하고 출력을 제어할 수 있다.
따라서, 전단 제어 유닛(202)은 명령어 디코더(208)에 의한 처리를 위해 명령어 캐시(204)로부터 명령어를 인출할 수 있다. 전단 제어 유닛(202)은 제어 정보를 제어 네트워크 또는 버스를 통해 프로세서 코어(125)의 다른 부분과 교환할 수 있다. 예를 들면, 전단 제어 유닛은 제어 정보를 후단(back-end) 제어 유닛(224)과 교환할 수 있다. 전단 및 후단 제어 유닛은 일부 구현예에서 단일 제어 유닛으로 통합될 수 있다.
전단 제어 유닛(202)은 또한 프로세서 아키텍처(120)(도 1)의 각종 코어 및 다른 부품들의 제어를 조정 및 관리할 수 있다. 따라서, 예를 들면, 명령어의 블록들이 복수의 코어에서 동시에 실행할 수 있고, 전단 제어 유닛(202)은 각종 명령어 블록들의 실행을 위해 필요에 따라 동기화를 보장하도록 제어 정보를 제어 네트워크를 통해 다른 코어와 교환할 수 있다.
전단 제어 유닛(202)은 또한 원자식으로(atomically) 실행되는 명령어들의 블록에 관한 제어 정보 및 메타 정보를 처리할 수 있다. 예를 들면, 전단 제어 유닛(202)은 명령어들의 블록과 연관된 블록 헤더를 처리할 수 있다. 뒤에서 자세히 설명하는 바와 같이, 블록 헤더는 명령어들의 블록에 관한 제어 정보 및/또는 메타 정보를 포함할 수 있다. 따라서, 전단 제어 유닛(202)은 블록 헤더 내의 각종 필드를 처리하는 플립플롭과 같은, 복합 로직, 상태 기계 및 임시 기억 유닛을 포함할 수 있다.
전단 제어 유닛(202)은 클럭 사이클당 단일 명령어 또는 복수의 명령어를 인출 및 디코딩할 수 있다. 디코딩된 명령어는 버퍼로서 프로세서 코어 하드웨어로 구현되는 명령어 창(210)에 저장될 수 있다. 명령어 창(210)은 일부 구현예에서 술어(predication) 및 피연산자와 같은 각각의 디코딩된 명령어 입력의 준비 상태를 유지할 수 있는 명령어 스케줄러(230)를 지원할 수 있다. 예를 들면, 그 모든 입력(만일 있으면)이 준비된 때, 주어진 명령어는 명령어 스케줄러(230)에 의해 깨워지고 발행할 준비를 한다.
명령어가 발행되기 전에, 명령어가 요구하는 임의의 피연산자는 필요에 따라 좌측 피연산자 버퍼(212) 및/또는 우측 피연산자 버퍼(214)에 저장될 수 있다. 명령어의 연산부호에 따라서, ALU(216) 및/또는 ALU(218) 또는 다른 기능 유닛을 이용하여 피연산자에 대하여 동작이 수행될 수 있다. ALU의 출력은 피연산자 버퍼에 저장되거나 하나 이상의 레지스터(220)에 저장될 수 있다. 데이터 흐름순으로 발행하는 저장 동작은 명령어 블록이 커미트(commit)할 때까지 로드/저장 큐(222)에서 대기할 수 있다. 명령어 블록이 커미트한 때, 로드/저장 큐(222)는 커미트된 블록의 저장물을 메모리에 기록할 수 있다. 분기 예측자(206)는 정보가 분기 예측을 행하는 분기 엑시트(exit) 유형 및 요소에 관한 블록 헤더 정보를 처리할 수 있다.
전술한 바와 같이, 프로세서 아키텍처(120)는 전형적으로 원자식으로 인출, 실행 및 커미트되는 블록 내에서 조직된 명령어를 이용한다. 따라서, 프로세서 코어는 단일 블록에 속하는 명령어를 집단으로 인출하고, 명령어들을 프로세서 코어 내측의 실행 자원에 맵핑하고, 명령어를 실행하고, 그 결과를 원자 방식으로 커미트할 수 있다. 프로세서는 모든 명령어들의 결과를 커미트하거나, 전체 블록의 실행을 무효로 할 수 있다. 블록 내측의 명령어들은 데이터 흐름순으로 실행할 수 있다. 또한, 프로세서는 블록 내측의 명령어가 메시지 또는 다른 적당한 형태의 통신을 이용하여 서로 직접 통신하게 할 수 있다. 따라서 결과를 생성하는 명령어는 결과를 레지스터 파일에 기록하는 대신에, 상기 결과를 소비하는 블록 내의 다른 명령어에 상기 결과를 전달할 수 있다. 일 예로서, 레지스터(R1, R2)에 저장된 값들을 가산하는 명령어는 아래의 표 1에 나타낸 것처럼 표현될 수 있다.
I[0] READ R1 T[2R]; |
I[1] READ R2 T[2L]; |
I[2] ADD T[3L]. |
이 방법으로, 소스 피연산자는 명령어에 의해 특정되지 않고, 그 대신에 ADD 명령어를 목표로 하는 명령어에 의해 특정된다. 컴파일러(105)(도 1)는 명령어(110)의 컴파일 중에 제어 및 데이터 의존성을 명시적으로 인코딩하여 프로세서 코어가 런타임에서 이러한 의존성을 재발견하는 것으로부터 자유롭게 한다. 이것은 유리하게도 이러한 명령어의 실행 중에 프로세서 부하를 감소시키고 에너지를 절약할 수 있다. 일 예로서, 컴파일러는 술어를 이용하여 모든 제어 의존성을 데이터 흐름 명령어로 변환할 수 있다. 이러한 기술을 이용하면, 파워 헝그리(power-hungry) 레지스터 파일에 대한 접근(access)의 수를 감소시킬 수 있다. 아래의 표 2는 그러한 명령에 대한 일반 명령어 형식의 예를 보인 것이다.
OPCODE | PR | BID | XOP | TARGET1 | TARGET2 |
각 명령어는 32비트, 64비트와 같은 적당한 크기 또는 다른 크기를 가질 수 있다. 표 2에 나타낸 예에서, 각 명령어는 OPCODE 필드, PR(predication, 술어) 필드, BID(broadcast ID, 방송 ID) 필드, XOP(extended OPCODE, 확장 연산부호) 필드, TARGET1 필드 및 TARGET2 필드를 포함할 수 있다. OPCODE 필드는 가산, 판독, 기록 또는 승산과 같이 명령어 또는 명령어 블록에 대한 독특한 연산 부호를 특정할 수 있다. PR(술어) 필드는 명령어와 관련된 임의의 술어를 특정할 수 있다. 예를 들면, 2 비트 PR 필드는 다음과 같이 사용될 수 있다: 00 - 단정되지 않음(not predicted), 01 - 예약됨, 10 - 거짓(false)으로 단정됨, 11 - 참(true)으로 단정됨. 따라서, 예컨대 비교의 결과가 참인 경우에만 명령어가 실행하면, 그 명령어는 비교를 수행하는 다른 명령어의 결과에 대하여 단정될 수 있다. BID(방송 ID) 필드는 블록 내의 임의 수의 소비자 명령어에 대한 피연산자의 전송을 지원할 수 있다. 2-비트 BID 필드를 이용하여 명령어가 그 피연산자 중의 하나를 수신하는 방송 채널을 인코딩할 수 있다. XOP(확장형 연산부호) 필드는 연산부호 유형의 확장을 지원할 수 있다. TARGET1 및 TARGET2 필드는 최대 2개의 타겟 명령어가 인코딩되게 할 수 있다. 타겟 필드는 생산자 명령어의 결과의 소비자 명령어를 특정할 수 있고, 그에 따라서 명령어들 간의 직접 통신을 허용한다.
각각의 명령어 블록은 그 블록과 관련된 제어 정보 및/또는 메타 정보와 같은, 명령어 블록과 연관된 소정의 정보를 가질 수 있다. 이 정보는 프로그램을 프로세서 아키텍처(120)에서의 실행을 위한 명령어(110)로 컴파일하는 동안 컴파일러(105)에 의해 발생될 수 있다. 이 정보 중의 일부는 명령어 블록의 컴파일 중에 컴파일러에 의해 추출될 수 있고, 그 다음에 런타임 중에 명령어의 성질을 시험할 수 있다.
또한, 명령어 블록과 연관된 정보는 메타 정보일 수 있다. 예를 들면, 그러한 정보는 특수 명령어, 또는 명령어들의 블록과 연관된 관련 정보를 가진 레지스터 또는 다른 메모리에 관한 타겟 인코딩을 제공하는 명령어들을 이용하여 프로세서 코어에 제공될 수 있다. 특수 명령어의 경우에, 그러한 명령어들의 연산부호 필드는 명령어들의 블록에 관한 정보를 통신하기 위해 사용할 수 있다. 다른 예로서, 그러한 정보는 프로세서 상태어(PSW)의 일부로서 유지될 수 있다. 예를 들면, 이 정보는 유리하게도 프로세서가 명령어들의 블록을 더 효율적으로 실행하는 것을 도울 수 있다.
각종 유형의 정보가 블록 헤더, 특수 명령어, 메모리 참조 위치, 프로세서 상태어(PSW) 또는 이들이 각종 조합을 이용하여 프로세서 코어에 제공될 수 있다. 예시적인 명령어 블록 헤더(300)는 도 3에 나타내었다. 이 예시적인 예에서, 블록 헤더(300)는 128비트이고 블록의 프로그램 카운터로부터 오프셋 0에서 시작한다. 각 필드의 각각의 시작 및 끝이 또한 도시되어 있다. 필드들은 아래의 표 3에 설명되어 있다.
필드 | 설명 |
ID | 이 필드는 유효 명령어 블록의 시작을 표시하기 위해 1로 설정될 수 있다. 이 필드는 기계 버전 및 아키텍처 버전에 관한 정보를 또한 포함할 수 있다. 또한, 이 필드는 블록 헤더가 예를 들면 준비 상태(READY STATE) 필드의 일부로서 임의의 준비 비트 또는 유효 비트를 갖는지 프로세서에게 표시하기 위해 사용될 수 있다. |
크기 | 이 필드는 명령어 블록에 포함된 4개의 명령어 뭉치(chunk)의 수를 포함할 수 있다. 따라서, 예를 들면 0의 값은 블록 내 명령어들의 최소 블록, 예를 들면 4개의 명령어가 뒤따르는 블록 헤더를 표시할 수 있다. 대안적으로 또는 선택적으로, 크기(SIZE) 필드는 크기 표의 엔트리에 대응하는 인코딩된 값을 포함할 수 있고, 또는 이 필드는 크기 표에 대한 포인터를 포함할 수 있다. |
XFLAGS | 이 필드는 특수 실행 요건을 표시하는 실행 플래그를 포함할 수 있다: XFLAGS[0] 벡터 모드 이 플래그는 명령어가 독립 벡터 레인에 복사되는 것을 표시할 수 있고, 각각의 독립 벡터 레인은 명령어 창, 피연산자 버퍼, ALU 및 레지스터를 포함할 수 있다. XFLAGS[1] 분기 예측자 금지 이 플래그는 설정된 때 분기 예측자가 금지되게 할 수 있다. 이것은 분기가 확실하게 알려지기 전에 분기(예를 들면, 예측된 명령어)가 어느 방향으로 갈지 분기 예측자가 예측하지 못하게 할 수 있다. XFLAGS[2] 메모리 의존성 예측자 금지 이 플래그는 설정된 때 메모리 의존성이 금지되게 할 수 있다. 이것은 메모리 의존성 예측자가 로드/저장 동작과 같은 메모리 동작들 간의 의존성을 예측하지 못하게 할 수 있다. XFLAGS[3] 블록 동기화 요구 이 플래그는 설정된 때 명령어들의 또 다른 블록이 명령어들의 현재 블록과 병렬로 또 다른 프로세서 코어에서 실행될 수 없는 요건을 부과할 수 있다. 또한, 이 플래그는 설정된 때 명령어들의 블록이 추론적으로(speculatively) 실행될 수 없는 요건을 또한 부과할 수 있다. XFLAGS[4] 블록 후의 브레이크(break) 이 플래그는 설정된 때 명령어 블록 뒤의 브레이크가 있음을 표시할 수 있다. XFLAGS[5] 블록 전의 브레이크 이 플래그는 설정된 때 명령어 블록 전의 브레이크가 있음을 표시할 수 있다. XFLAGS[6] 예약 이 플래그는 나중에 사용하기 위해 예약될 수 있다. XFLAGS[7] 예약 이 플래그는 나중에 사용하기 위해 예약될 수 있다. |
엑시트 유형 | 이 필드는 분기 예측자가 사용하기 위해 최대 6개의 3-비트 블록 엑시트 유형을 인코딩할 수 있다. 000 - 무효(Null): 이 필드에서 분기 예측자를 위한 정보가 없음을 분기 예측자에게 표시할 수 있다. 001 - 순차적: 다음 분기가 코드 내 명령어들의 다음 블록에 대한 것임을 분기 예측자에게 표시할 수 있다. 순차적 분기 엑시트 유형은 명령어 블록의 현재 어드레스 및 명령어 블록의 크기, 예를 들면 현재 블록 어드레스와 블록 크기를 계산에 넣음으로써 계산될 수 있다. 010 - 오프셋: 다음 분기가 오프셋 어드레스에 대한 것임을 분기 예측자에게 표시할 수 있고, 이때 오프셋은 블록 오프셋으로서 취급된다. 011 - 간접: 다음 분기가 간접 유형임을 분기 예측자에게 표시할 수 있다. 따라서, 예를 들면, 명령어들의 후계자 블록의 제1 명령어의 어드레스를 포함한 메모리 위치의 레지스터에 의존할 수 있다. 100 - 콜: 명령어들의 후계자 블록이 서브루틴 콜을 포함하는지 분기 예측자에게 표시할 수 있고, 예측된 분기는 명령어들의 그 후계자 블록으로 간다. 101 - 복귀: 명령어들의 후계자 블록이 서브루틴 콜로부터의 복귀를 포함하는지 분기 예측자에게 표시할 수 있고, 예측된 분기는 명령어들의 그 후계자 블록으로 간다. 다른 비트 패턴은 나중에 사용하기 위해 예약될 수 있다. |
저장 마스크 | 이 필드는 기억부에 지정된 로드-저장 식별자(LSID)를 식별할 수 있다. 예를 들면, LSQ 블록은 명령어들의 블록이 완성하도록 허용되기 전에 명령어 블록을 위해 기억부에 지정된 각각의 LSID를 수신해야 할 수 있다. |
기록 마스크 | 이 필드는 명령어들의 블록이 기록할 수 있는 글로벌 레지스터를 식별할 수 있다. 예를 들면, 레지스터 파일은 명령어들의 블록이 완성하도록 허용되기 전에 각각이 기록 엔트리를 수신해야 할 수 있다. |
비록 도 3에 도시되고 표 3에서 설명된 블록 헤더가 복수의 필드를 포함하고 있지만, 이것은 예시하는 것으로 의도되고 다른 필드 배열이 특정 구현예를 위해 사용될 수 있다.
예시적인 실시예에서, 컴파일러(105)(도 1)는 블록 헤더에 포함할 정보 또는 그러한 정보를 명령어의 성질에 기초해서 및/또는 고성능 또는 저전력과 같은 처리 필요조건의 성질에 기초해서 프로세서 코어에 제공할 수 있는 특수 명령어용의 정보를 선택할 수 있다. 이것은 유리하게도 성능과 전력 소모 사이의 교환 조건의 더 최적인 균형화를 가능하게 한다. 다수의 코어로 계산하는 고성능과 같은 소정 유형의 처리 응용에 있어서, 다량의 정보가 바람직한 옵션으로 될 수 있다. 대안적으로, 사물 인터넷, 모바일 장치, 웨어러블 장치, 머리 장착형 디스플레이(HMD) 장치 또는 다른 매립형 컴퓨팅 유형의 응용에서 사용되는 매립형 프로세서와 같은 다른 유형의 처리 응용에 있어서, 더 적은 정보가 바람직한 옵션으로 될 수 있다.
블록 헤더 또는 특수 명령어를 이용하여 통신되는 정보의 범위는 블록 내의 명령어의 성질에 따라서 맞추어질 수 있다. 예를 들어서 만일 명령어들의 블록이 회귀(recurring) 방식으로 실행되는 루프를 포함하면, 그 블록과 연관된 제어 정보를 캡슐화하기 위해 더 광범위한 정보가 필요할 수 있다. 추가의 제어 정보는 프로세서 코어가 루프를 더 효율적으로 실행하여 성능을 개선하게 할 수 있다.
대안적으로, 만일 실행되기 어려운 명령어들의 블록이 있으면, 비교적 적은 정보로서 충분할 수 있다. 예를 들어서 만일 명령어들의 블록이 몇 개의 단정된 제어 루프를 포함하면, 더 많은 정보가 필요할 수 있다. 유사하게, 만일 명령어들의 블록이 광범위한 양의 명령어 레벨 병행성을 갖고 있으면, 블록 헤더의 일부 또는 특수 명령어로서 더 많은 정보가 필요할 수 있다.
블록 헤더 내의 추가 제어 정보 또는 특수 명령어는 예를 들면 명령어들의 블록 내에서 명령어 레벨 병행성을 효과적으로 이용하기 위해 사용될 수 있다. 만일 명령어들의 블록이 몇 개의 분기 예측을 포함하면, 더 많은 정보가 필요할 수 있다. 분기 예측에 관한 추가의 제어 정보는 전형적으로 더 적은 수의 파이프라인 플러시(flush)를 야기할 수 있기 때문에 더 효율적으로 코드 실행을 향상시킬 것이다.
블록 헤더 내의 필드에 대응하는 기능은 결합되거나 더욱 분할될 수 있는 것으로 주목된다. 유사하게 특수 명령어는 도 3 및 표 3에 나타낸 필드들 중의 임의의 하나에 관한 정보를 제공할 수 있고, 또는 특수 명령어는 그러한 필드로부터의 정보를 결합할 수 있다. 예를 들면, 도 3 및 표 3의 예시적인 블록 헤더가 별도의 ID 필드 및 SIZE 필드를 포함하지만, 이들 2개의 필드는 단일 필드로 결합될 수 있다.
마찬가지로, 단일의 특수 명령어는, 디코딩된 때, 명령어들의 블록의 크기에 관한 정보 및 ID 필드 내 정보를 제공할 수 있다. 다른 식으로 표시되지 않는 한, 특수 명령어는 명령어 블록 내의 임의 위치에 포함될 수 있다. 예를 들면, BLOCK_SIZE #size 명령어는 명령어 블록의 크기의 값을 포함한 인접 필드를 포함할 수 있다. 상기 인접 필드는 크기 정보를 제공하는 정수 값을 포함할 수 있다. 대안적으로, 상기 인접 필드는 인코딩된 값을 디코딩함으로써, 예를 들면 로직, 레지스터, 메모리 또는 코드 스트림 중의 하나를 이용하여 표현될 수 있는 크기 표 내의 값을 검색함으로써 크기 정보를 획득할 수 있도록 크기 정보에 관한 인코딩된 값을 포함할 수 있다. 다른 예로서, BLOCK_ID #id 특수 명령어는 블록 ID 번호를 운반할 수 있다.
별도의 수학적 함수 또는 메모리 기반 표는 블록 ID를 블록 헤더의 메모리 어드레스에 맵핑할 수 있다. 그러한 명령어의 일부로서 운반된 블록 ID는 각각의 명령어 블록에 대하여 유일할 수 있다. 다른 예로서, BLOCK_HDR_ID #id 명령어는 블록 헤더 ID 번호를 운반할 수 있다. 별도의 수학적 함수 또는 메모리 기반 표는 블록 ID를 블록 헤더의 메모리 어드레스에 맵핑할 수 있다. 그러한 명령어의 일부로서 운반된 블록 ID는 동일한 헤더 구조 또는 필드를 가진 수 개의 명령어 블록에 의해 공유될 수 있다.
다른 예로서, BLOCK_INFO #size, #exit types, #store mask, #write mask 명령어는 명령어의 열거된 필드에 관한 정보를 제공할 수 있다. 이 필드들은 표 3과 관련하여 위에서 설명한 필드들 중의 임의의 하나에 대응할 수 있다. 주어진 구현예의 필요조건에 따라 블록 헤더 구조 및 형식과 특수 명령어에 대하여 다른 변화가 이루어질 수 있다. 예를 들면, 명령어 블록의 특성에 관한 정보를 포함한 추가의 필드가 제공될 수 있다. 명령어 블록의 실행 빈도에 기초하여 특정 필드가 포함될 수 있다.
블록 헤더 구조에 포함된 필드, 또는 앞에서 설명한 특수 명령어 또는 다른 메카니즘을 통해 제공된 정보는 특정 프로세서 또는 프로세서 제품군의 공개적으로 이용 가능한 표준 명령어 집합 아키텍처(Instruction Set Architecture, ISA)의 일부일 수 있다. 필드들의 부분집합은 ISA에 대한 사적 확장(proprietary extension)일 수 있다. 필드 내의 소정 비트 값은 프로세서에 대한 표준 ISA의 일부일 수 있지만, 필드 내의 다른 소정 비트 값은 사적 기능을 제공할 수 있다. 이 예시적인 필드는 ISA 설계자가 사적 확장에 연관된 성질 및 기능을 완전하게 기술하지 않고 ISA에 사적 확장을 추가할 수 있게 한다. 따라서, 이 예에서, ISA 설계자에 의해 분배된 컴파일러 툴은 필드 내의 사적 비트 값, 완전히 분리된 사적 필드 또는 특수 명령어를 지원할 것이다. 그러한 필드의 사용은 소정 프로세서 설계에 사적인 하드웨어 가속기와 특히 관련될 수 있다. 따라서, 프로그램은 인식할 수 없는 블록 헤더 필드 또는 특수 명령어를 포함할 수 있지만, 프로그램은 필드를 해독하거나 명령어를 디코딩하기 위한 레시피를 또한 포함할 수 있다.
컴파일러(105)(도 1)는 메타 정보 및 제어 정보를 포함한, 명령어들의 블록에 대한 정보를 발생하기 위해 전형적으로 하나 이상의 프로세서 코어에 의해 원자식으로 실행하도록 구성된 명령어들의 블록을 처리할 수 있다. 일부 프로그램은 단지 하나의 ISA, 예를 들면, 사물 인터넷, 모바일 장치, HMD 장치, 웨어러블 장치 또는 다른 매립 컴퓨팅 환경을 위한 프로세서와 함께 사용되는 ISA에 대하여 컴파일될 수 있다. 컴파일러는 정적 코드 분석 또는 코드 프로파일링과 같은 기술을 이용하여 명령어들의 블록과 관련된 정보를 발생할 수 있다. 일부 경우에, 컴파일러는 명령어 블록의 특성 및 그 실행 빈도와 같은 요소들을 고려할 수 있다. 명령어 블록의 관련 특성은, 비제한적인 예를 들자면, (1) 명령어 레벨 병행성, (2) 루프의 수, (3) 단정된 제어 명령어의 수, 및 (4) 분기 예측의 수를 포함할 수 있다.
도 4는 프로세서 코어에 배치된 명령어 창에서 명령어 블록을 관리하는 예시적인 방법(400)의 흐름도이다. 특별하게 설명하지 않는 한, 도 4의 흐름도의 방법 또는 단계, 및 그 뒤의 도면들에 도시되고 뒤에서 설명하는 다른 흐름도의 방법 또는 단계들은 특정의 순서 또는 시퀀스로 제약되지 않는다. 또한, 방법 또는 단계들 중의 일부는 동시에 발생하거나 동시에 수행될 수 있고, 어떤 구현예에서는 그 구현예의 필요조건에 따라서 방법 또는 단계들의 전부가 수행되지 않을 수 있으며 일부 방법 또는 단계는 선택적으로 이용될 수 있다. 마찬가지로, 일부 구현예에서는 오버헤드를 줄이기 위해 일부 단계들이 제거될 수 있지만, 이것은 예를 들면 취성(brittleness)을 증가시킬 수 있다. 임의의 주어진 응용에서 구현될 수 있는 각종 특징, 비용, 오버헤드, 성능 및 강성 교환조건(tradeoff)은 전형적으로 설계 선택의 문제로 볼 수 있다.
단계 405에서, 인출된 명령어 블록의 연령(age)이 예를 들면 연령 벡터(age vector)를 이용하여 명시적으로 추적된다. 따라서, 전형적으로 연령을 암묵적으로 추적하기 위해 사용되는 명령어 창 내의 명령어 블록 순서(즉, 위치)를 사용하기보다 제어 유닛은 명백한 상태를 유지한다. 명령어 블록의 연령순 리스트는 단계 410에서 유지된다. 명령어 블록 우선순위(여기에서 우선순위는 일부 경우에 컴파일러에 의해 결정될 수 있음)가 또한 추적되고, 명령어 블록의 우선순위순 리스트가 또한 일부 구현예에서 유지될 수 있다.
단계 415에서, 명령어 블록이 취급하기 위해 식별된 때, 연령순 리스트는 정합 명령어 블록을 찾기 위해 검색된다. 우선순위순 리스트가 또한 일부 구현예에서 정합을 위해 검색될 수 있다. 만일 정합 명령어 블록이 발견되면, 정합 명령어 블록은 프로세서 코어 효율을 개선할 수 있는 명령어 캐시로부터 재인출할 필요 없이 단계 420에서 리프레시될 수 있다. 이러한 리프레싱은 예를 들면 프로그램이 엄격한 루프에서 실행하고 명령어가 그들 자신에게 다시 분기할 때의 상황에서 명령어 블록을 재사용할 수 있게 한다. 그러한 효율 증가는 복수의 프로세서 코어가 대규모 어레이로 구성될 때 또한 배가(compound)될 수 있다. 명령어 블록을 리프레시할 때, 명령어는 적소에 남아있고 피연산자 버퍼 및 로드/저장 큐의 유효 비트만이 클리어된다.
만일 명령어 블록에 대한 정합이 발견되지 않으면, 연령순 리스트(또는 우선순위순 리스트)는 새로운 명령어 블록을 위해 명령어 창 내의 슬롯을 개방하도록 커미트될 수 있는 명령어 블록을 찾기 위해 다시 활용될 수 있다. 예를 들면, 가장 오래된 명령어 블록 또는 최저 우선순위 명령어 블록이 커미트될 수 있다(이때 높은 우선순위 블록은 미래에 재사용할 가능성이 있기 때문에 저장되어 있는 것이 바람직할 수 있다). 단계 425에서, 새로운 명령어 블록이 가용 슬롯에 맵핑된다. 명령어 블록은 블록 내의 명령어 및 명령어와 연관된 모든 자원이 즉시(즉, 집단으로) 인출되는 대량 할당 공정을 이용하여 할당될 수 있다.
단계 430에서, 새로운 명령어 블록은 그 명령어가 원자식으로 커미트되도록 실행된다. 다른 명령어 블록들은 그들 각각의 명령어를 원자 방식으로 커미트하기 위해 단계 435에서 종래의 재정리 버퍼(reorder buffer)와 유사한 방식으로 연령순으로 실행될 수 있다.
도 5는 명령어 블록 기반 마이크로아키텍처에 의해 수행될 수 있는 예시적인 방법(500)의 흐름도이다. 단계 505에서, 프로세서 코어 내의 제어 유닛은 인출된 명령어 블록이 연속적인 교체로 또는 비연속적인 교체로 버퍼링되게 한다. 단계 510에서, 연속적인 명령어 블록 교체에 의해, 버퍼는 원형 버퍼와 같이 동작할 수 있다. 단계 515에서, 비연속적인 명령어 블록 교체에 의해, 명령어 블록은 비순차적으로(out of order) 교체될 수 있다. 예를 들면, 단계 520에서, 명시적인 연령 기반 추적은 명령어 블록이 전술한 것과 유사한 방식으로 추적된 연령에 기초하여 커미트 및 교체되도록 수행될 수 있다. 우선순위가 또한 추적될 수 있고, 추적된 우선순위는 단계 525에서 명령어 블록을 커미트 및 교체하기 위해 사용될 수 있다.
도 6은 프로세서 코어에 배치된 제어 유닛에 의해 수행될 수 있는 예시적인 방법(600)의 흐름도이다. 단계 605에서, 버퍼링된 명령어 블록들의 상태가 추적되고 명령어 블록들의 리스트가 상기 추적된 상태를 이용하여 유지된다(단계 610). 예를 들면, 상태는 특정의 구현예 필요조건에 따라서 연령, 우선순위, 또는 기타 정보 또는 콘텍스트를 포함할 수 있다. 단계 615에서, 명령어 블록이 맵핑을 위해 식별된 때, 단계 620에 나타낸 것처럼 리스트가 정합에 대하여 체크된다. 리스트로부터의 정합 명령어 블록은 단계 625에서 재인출 없이 리프레시된다. 정합 명령어 블록이 리스트에서 발견되지 않은 때, 명령어 블록은 명령어 캐시로부터 인출되고, 전술한 것과 유사한 방식으로 단계 630에서 명령어 창 내의 가용 슬롯에 맵핑된다.
도 7은 프로세서 코어에 배치된 명령어 창 내의 명령어 블록들을 관리하는 예시적인 방법(700)의 흐름도이다. 단계 705에서, 명령어 블록 크기의 크기 표가 프로세서 코어 내에 유지된다. 크기 표는 예를 들면 로직, 레지스터, 메모리, 코드 스트림 또는 다른 적당한 구성 중의 하나를 이용하여 각종 방법으로 표현될 수 있다. 단계 710에서, 명령어 블록의 헤더에서 인코딩된 인덱스가 판독된다. 명령어 블록은 하나 이상의 디코딩된 명령어를 포함한다. 따라서, 명령어 블록 크기를 하드 코딩하기 위해 도 3 및 표 3에 나타낸 SIZE 필드를 사용하기보다, 필드가 인덱스를 인코딩하거나 크기 표에 저장하기 위해 사용될 수 있다. 즉, 인덱스는 특정 크기가 명령어 블록과 연관될 수 있도록 크기 창 내의 엔트리에 대한 포인터로서 기능할 수 있다.
크기 표에 포함된 크기 엔트리의 수는 구현예마다 다를 수 있다. 더 큰 수의 크기 엔트리는 주어진 프로그램과 연관된 명령어 블록 크기의 비교적 넓은 분포가 있는 경우에 유리한 더 많은 입도를 활성화하기 위해 사용될 수 있지만, 전형적인 구현예에서 오버헤드가 증가한다. 일부 경우에, 표에 포함된 크기들의 수는 전체 명령어 패킹 밀도를 최적화하는 방식으로 명령어 블록 크기의 특정 분포를 커버하고 비동작(no ops)을 최소화하도록 컴파일러에 의해 선택될 수 있다. 예를 들면, 크기 표에 포함된 크기는 프로그램에서 공통적으로 사용되는 블록 명령어 크기를 정합시키도록 선택될 수 있다. 단계 715에서, 인덱스를 사용하여 크기 표로부터 명령어 블록 크기를 검색한다. 명령어 블록은 단계 720에서 그 크기에 기초하여 명령어 창 내의 가용 슬롯에 맵핑된다.
일부 구현예에서, 단계 725에 나타낸 것처럼, 명령어 창은 예를 들면 2개 이상의 다른 크기를 사용하는 2개 이상의 하위 창(sub-window)으로 분할될 수 있다. 분할된 하위 창에서의 이러한 변동은 명령어 블록 크기의 주어진 분포를 또한 수용할 수 있고, 명령어 패킹 밀도를 더욱 증가시킬 수 있다. 상기 분할은 일부 시나리오에서 동적으로 또한 수행될 수 있다.
도 8은 명령어 블록 기반 마이크로아키텍처에 의해 수행될 수 있는 예시적인 방법(800)의 흐름도이다. 단계 805에서, 크기 표가 구현된다. 전술한 바와 같이, 크기 표는 로직, 레지스터, 메모리, 코드 스트림 또는 다른 적당한 구성 중의 하나를 이용하여 구현될 수 있고, 주어진 프로그램에 의해 활용되는 명령어 블록의 분포에서 공통적으로 사용되는 것들에 대응하는 크기를 포함할 수 있다. 단계 810에서, 명령어 블록 헤더가 크기 표의 엔트리를 참조하는 포인터에 대하여 검사된다. 단계 815에서, 표 엔트리에 의해 식별된 크기를 이용하여 명령어 창 내의 명령어 블록의 배치를 결정한다.
단계 820에서, 명령어 블록과 연관된 자원들이 대량 할당된다. 명령어 블록 헤더에서 지정된 제한들(restrictions)은 단계 825에서 명령어 창 내의 명령어 블록을 맵핑할 때 사용된다. 상기 제한은 예를 들면 명령어 블록을 버퍼링하기 위한 명령어 창의 정렬 및 용량에서의 제한을 포함한다. 단계 830에서, 명령어 창 내의 명령어 블록들의 순서가 제어 유닛에 의해 추적되고 블록들은 일부 상황에서 비순차적으로 커미트될 수 있다. 예를 들면, 블록들이 명령어 창 내에서의 그들의 위치에 기초하여 취급되는 명령어 블록들의 원형 버퍼를 사용하기보다, 블록들은 많이 사용하거나 특히 중요한 명령어 블록이 비순차적으로 취급되도록 우선순위화될 수 있고, 이것은 처리 효율을 증가시킬 수 있다.
단계 835에서, 명령어 블록들의 연령이 명시적으로 추적될 수 있고, 명령어 블록들은 일부 경우에 그러한 명시적으로 추적된 연령에 기초하여 커미트될 수 있다. 명령어 블록은 단계 840에서 리프레시된다(즉, 명령어 캐시로부터 명령어 블록을 재인출할 필요 없이 재사용된다).
도 9는 프로세서 코어 내에 배치된 제어 유닛에 의해 수행될 수 있는 예시적인 방법(900)의 흐름도이다. 단계 905에서, 전술한 것과 유사한 방식으로 2개 이상의 다른 크기를 가진 복수의 세그멘트로 명령어 창이 구성된다. 단계 910에서, 블록 명령어 헤더가 내부에 인코딩된 인덱스에 대하여 검사된다. 단계 915에서 상기 인덱스를 이용하여 크기 표에서 검색이 수행되고, 단계 920에서, 명령어 블록이 상기 크기 검색에 기초하여 특정 크기의 블록에 적합한 명령어 창 세그멘트에 배치된다. 단계 925에서, 명령어 블록과 연관된 자원들이 대량 할당을 이용하여 인출된다.
도 10은 프로세서 코어에 배치된 명령어 창 내의 명령어 블록들을 관리하는 예시적인 방법(1000)의 흐름도이다. 단계 1005에서, 명령어 블록이 명령어 캐시로부터 명령어 창에 맵핑된다. 명령어 블록은 하나 이상의 디코딩된 명령어를 포함한다. 명령어 블록 내의 각각의 명령어와 연관된 자원들이 단계 1010에서 할당된다. 자원들은 전형적으로 제어 비트 및 피연산자를 포함하고, 할당은 모든 자원들이 집단으로 획득 또는 인출되는 대량 할당 공정을 이용하여 수행된다.
자원과 명령어를 엄격하게 결합하는 대신에, 명령어 창과 피연산자 버퍼가 디커플링되고, 명령어 창과 피연산자 버퍼는, 단계 1015에 나타낸 것처럼, 자원과 디코딩된 명령어 중의 하나 이상의 포인터를 블록 내에 유지함으로써 독립적으로 동작할 수 있다. 명령어 블록이 단계 1020에서 리프레시된 때(즉, 명령어 캐시로부터 명령어 블록을 재인출할 필요 없이 재사용됨), 자원들은 단계 1025에서 포인터를 최초 제어 상태로 되돌림으로써 재사용될 수 있다.
이러한 디커플링은 특히, 예를 들면, 프로그램이 엄격한 루프에서 실행하고 명령어가 반복적으로 사용될 때 전형적으로 발생하는 재인출 없이 명령어 블록이 리프레시된 때 증가된 프로세서 코어 효율을 제공할 수 있다. 포인터를 통해 제어 상태를 확립함으로써, 자원들은 처리 주기의 추가적인 지출 및 기타의 비용 없이 효과적으로 사전에 검증된다. 이러한 효율 증가는 복수의 프로세서 코어가 대규모 어레이로 구성된 때 또한 배가될 수 있다.
도 11은 명령어 블록 기반 마이크로아키텍처에 의해 수행될 수 있는 예시적인 방법(1100)의 흐름도이다. 단계 1105에서, 명령어 블록은 새로운 명령어 블록이 커미트된 명령어 블록을 교체하는 방식으로 명령어 창에 맵핑된다. 맵핑은 단계 1110에 표시된 바와 같이 명령어 블록의 헤더에서 지정된 각종 제한, 예를 들면 명령어 블록을 버퍼링하기 위한 명령어 창의 용량 및 정렬에서의 제한을 받을 수 있다. 단계 1115에서, 자원들이 새로운 명령어 블록에 대하여 할당되고, 이것은 전형적으로 전술한 바와 같이 대량 할당 공정을 이용하여 구현된다.
단계 1120에서, 명령어 창 내의 명령어 블록의 순서가 제어 유닛에 의해 추적되고 블록들이 일부 상황에서 비순차적으로 커미트될 수 있다. 예를 들면, 블록들이 명령어 창 내에서 그들의 위치에 기초하여 취급되는 명령어 블록의 원형 버퍼를 사용하기보다, 블록들은 많이 사용되거나 특히 중요한 명령어 블록들이 비순차적으로 취급되도록 우선순위화될 수 있고, 이것은 처리 효율을 증가시킬 수 있다.
단계 1125에서, 명령어 창이 피연산자 버퍼로부터 디커플링되어, 예를 들면, 명령어의 블록 및 피연산자의 블록들이 독립적으로(즉, 명령어와 피연산자 간의 엄격한 대응성을 이용하지 않고) 관리되게 한다. 전술한 바와 같이, 디커플링은 명령어 블록이 리프레시된 때 자원들이 사전에 검증되게 함으로써 효율을 증가시킨다.
도 12는 프로세서 코어 내에 배치된 제어 유닛에 의해 수행될 수 있는 예시적인 방법(1200)의 흐름도이다. 단계 1205에서, 명령어 창이 하나 이상의 명령어 블록을 버퍼링하기 위해 유지된다. 단계 1210에서, 명령어 블록 내의 명령어들과 연관된 자원들을 버퍼링하기 위해 하나 이상의 피연산자 버퍼가 유지된다. 전술한 바와 같이, 자원들은 전형적으로 제어 비트와 피연산자를 포함한다. 단계 1215에서, 명령어 및 자원들 중의 포인터를 이용하여 상태가 추적된다.
명령어 블록이 리프레시된 때, 블록 1220에서, 포인터들은 추적된 상태로 되돌아갈 수 있다. 단계 1225에서, 명령어 블록이 커미트한 때, 피연산자 버퍼 내의 제어 비트는 클리어되고 새로운 포인터가 설정된다. 단계 1230에서, 전술한 방법에서와 같이, 명령어 창과 피연산자 버퍼가 디커플링되어 명령어의 블록들 및 피연산자의 블록들이 비대응 기반으로 제어 유닛에 의해 유지된다.
도 13은 프로세서 코어 내에 배치된 명령어 창의 명령어 블록들을 관리하는 예시적인 방법(1300)의 흐름도이다. 단계 1305에서, 명령어 블록은 블록 내의 명령어 및 명령어와 연관된 모든 자원이 즉시(즉, 집단으로) 인출되는 대량 할당 공정을 이용하여 할당된다. 명령어 및 자원들이 더 작은 뭉치로 반복적으로 인출되는 종래의 아키텍처와 비교하면, 여기에서의 대량 할당은 블록 내 모든 명령어들이 동시에 및 일관되게 관리될 수 있게 하고, 이것은 프로세서 코어 동작의 효율성을 개선할 수 있다. 이 개선은 주어진 프로그래밍 구성(예를 들면, 분기를 최소화하는 구성)이 컴파일러로 하여금 비교적 큰 명령어 블록을 발생하게 하는 상황에서 더 현저할 수 있다. 예를 들면, 일부 구현예에서, 명령어 블록은 최대 128개의 명령어를 포함할 수 있다.
명령어 블록의 대량 할당은 예를 들면 프로그램이 엄격한 루프에서 실행하고 명령어가 그들 자신에서 다시 분기할 때 전형적으로 발생하는 재인출 없이 명령어 블록이 재사용되는 리프레시 특징을 통하여 프로세서 코어 효율을 또한 향상시킨다. 이러한 효율 증가는 복수의 프로세서 코어가 대규모 어레이로 구성된 때 또한 배가될 수 있다. 명령어 블록을 리프레시할 때, 명령어들은 적소에 남겨지고 피연산자 버퍼 및 로드/저장 큐 내의 유효 비트만이 클리어된다. 이것은 리프레시된 명령어 블록들의 인출이 전체적으로 바이패스되게 한다.
명령어 블록의 대량 할당은 명령어 및 자원들의 그룹이 적소에 있을 때 추가적인 처리 효율을 또한 활성화한다. 예를 들면, 피연산자 및 명시적 메시지가 블록 내 하나의 명령어로부터 다른 명령어로 보내질 수 있다. 이러한 기능은 종래의 구조에서는 가능하지 않았는데, 그 이유는 하나의 명령어는 아직 할당되지 않은 다른 명령어로 아무것도 보낼 수 없기 때문이다. 상수를 발생하는 명령어는 그들이 리프레시된 후에 유효를 유지하도록 피연산자 버퍼에 값들을 또한 속박할 수 있고, 그래서 그러한 명령어는 명령어 블록이 실행할 때마다 재발생될 필요가 없다.
명령어 블록이 단계 1310에서 명령어 창에 맵핑된 때, 명령어 블록은 단계 1315에서 블록 헤더에서 지정된 정책 또는 제한, 또는 둘 다를 맵핑함으로써 적용될 수 있는 제약(constraints)을 받는다. 일부 경우에, 정책은 주어진 프로그램의 특정 필요조건에 따라 컴파일러에 의해 설정될 수 있다. 지정된 제한은 예를 들면 명령어 블록을 버퍼링하기 위한 명령어 창의 용량의 제한 및 정렬의 제한을 포함할 수 있다.
단계 1320에서, 명령어 창은, 일부 구현예에서, 동일 크기 또는 다른 크기의 하위 창으로 분할될 수 있다. 명령어 블록 크기가 주어진 프로그램에 대하여 가끔 무작위로 또는 불균일하게 분포되기 때문에, 분할된 하위 창에서의 이러한 변동은 명령어 블록 크기의 주어진 분포를 더 효율적으로 수용할 수 있고, 이로써 명령어 창에서 명령어 패킹 밀도를 증가시킨다. 상기 분할은 프로세서 코어에 의해 현재 취급되는 블록 크기들의 분포에 따라서 일부 구현예에서 동적으로 또한 수행될 수 있다.
일부 구현예에서, 명령어 블록 헤더는 인덱스를 인코딩하거나 로직, 레지스터, 메모리 또는 코드 스트림 중의 하나를 이용하여 구현되는 크기 표에 대한 포인터를 포함할 수 있다. 크기 표는 단계 1325에서 명령어 블록 크기가 표로부터 검색될 수 있도록 명령어 블록 크기 엔트리를 포함할 수 있다. 인코딩된 인덱스 및 크기 표를 이용하면 예컨대 분기를 구현할 때 블록이 비교적 소수의 명령어를 포함하는 경우 비동작(no operations)의 발생을 감소시키기 위해 가용 블록 크기로 더 많은 입도를 제공함으로써 명령어 블록 내의 명령어 패킹 밀도를 향상시킬 수 있다.
도 14는 명령어 블록 기반 마이크로아키텍처에 의해 수행될 수 있는 예시적인 방법(1400)의 흐름도이다. 단계 1405에서, 프로세서 코어 내의 제어 유닛은 명령어 블록을 취급하기 위한 정책을 적용한다. 단계 1410에서, 명령어 블록들은 명령어 및 모든 관련 자원들이 즉시 인출되는 전술한 대량 할당 공정을 이용하여 할당된다. 단계 1415에서, 명령어 블록들이 명령어 창에 맵핑되고, 이때 맵핑은 각종 제한, 예를 들면 전술한 바와 같이 명령어 블록의 헤더에서 지정된 명령어 블록을 버퍼링하기 위한 명령어 창의 용량에서의 제한 및 정렬에서의 제한을 받을 수 있다.
단계 1420에서, 제어 유닛에 의해 명령어 창 내의 명령어 블록들의 순서를 추적하는 것을 포함한 정책이 적용될 수 있다. 블록들은 일부 상황에서 예를 들면 블록들이 명령어 창 내에서 그들의 위치에 기초하여 취급되는 명령어 블록의 원형 버퍼를 이용하기보다 비순차적으로 커미트될 수 있다. 단계 1425에서, 많이 사용되거나 특히 중요한 블록들이 비순차적으로 취급되도록 우선순위(우선순위는 일부 시나리오에서 컴파일러에 의해 지정될 수 있음)에 기초하여 블록들을 취급하는 것을 포함한 정책이 적용될 수 있고, 이것은 처리 효율을 더욱 증가시킬 수 있다.
단계 1430에서, 명령어 블록의 연령을 명시적으로 추적하는 것을 포함한 정책이 적용될 수 있고, 명령어 블록은 일부 경우에 상기 명시적으로 추적된 연령에 기초하여 커미트될 수 있다. 단계 1435에서, 명령어 창(또는 창의 세그멘트) 내의 적절한 크기의 슬롯의 가용성에 따라 명령어 블록을 맵핑하는 것을 포함한 정책이 적용될 수 있다. 단계 1440에서, 명령어 블록을 원형 버퍼를 이용하여 명령어 창에 맵핑하는 것을 포함한 정책이 적용될 수 있다.
일부 구현예에서, 정책들의 각종 조합을 이용하여 프로세서 코어 효율을 더욱 향상시킬 수 있다. 예를 들면, 제어 유닛은 주어진 명령어 블록 또는 명령어 블록들의 그룹에 더 최적인 동작을 제공하는 정책을 적용하기 위해 정책들 중에서 동적으로 토글링할 수 있다. 예를 들면, 일부 시나리오에서는 명령어 블록이 연속 방식의 순서대로 취급되는 원형 버퍼링 기술을 사용하는 것이 더 효율적일 수 있다. 다른 시나리오에서는 비순차적 및 연령 기반 취급이 더 최적인 동작을 제공할 수 있다.
도 15는 프로세서 코어 내에 배치된 제어 유닛에 의해 수행될 수 있는 예시적인 방법(1500)의 흐름도이다. 단계 1505에서, 명령어 창이 전술한 것과 유사한 방식으로 2개 이상의 다른 크기를 가진 복수의 세그멘트로 구성된다. 단계 1510에서, 명령어 블록이 인출되고, 단계 1515에서, 명령어 블록과 연관된 모든 자원들이 인출된다.
단계 1520에서, 명령어 블록이 창 내의 명령어 밀도를 최대화하도록 창의 적당한 세그멘트에 배치된다. 예를 들어서 만일 컴파일러가 (예를 들면, 프로그램 분기 등을 구현하기 위해) 낮은 명령어 카운트를 가진 비교적 많은 수의 블록을 포함하는 블록 크기 분포를 생성하면, 명령어 창은 작은 명령어 블록용의 특별한 크기로 된 세그멘트를 가질 수 있다. 유사하게, 만일 비교적 많은 수의 높은 명령어 카운트 블록(예를 들면, 과학적 및 유사한 응용을 위한 것)이 있으면, 세그멘트는 그러한 더 큰 명령어 블록용으로 특별한 크기로 될 수 있다. 따라서, 명령어 창 세그멘트 크기 정하기는 특정 크기 분포에 따라 조정되거나, 또는, 일부 상황에서, 분포가 변할 때 동적으로 조정될 수 있다. 블록 1525에서, 명령어 블록은 전술한 바와 같이 명령어 블록 헤더에서 지정된 제한들을 받을 수 있다.
프로세서 명령어 창에 명령어 블록을 대량 할당하는 본 발명의 각종 예시적인 실시형태가 모든 실시형태의 총망라적인 리스트로서가 아닌 예시 목적으로 여기에서 제시된다. 일 예는 프로세서에 배치된 명령어 창 내의 명령어 블록들을 관리하는 방법을 포함하고, 이 방법은 명령어 블록 내의 하나 이상의 명령어에 대한 자원들이 즉시 인출되도록 명령어 블록을 대량 할당하는 단계 - 상기 자원들은 상기 하나 이상의 명령어와 연관된 제어 비트 및 피연산자를 포함함 - 와; 하나 이상의 명령어를 포함한 명령어 블록 - 이 명령어 블록은 헤더를 포함함 - 을 명령어 캐시로부터 명령어 창에 맵핑하는 단계와; 맵핑을 수행할 때 하나 이상의 제약 - 이 제약은 하나의 맵핑 정책 또는 상기 헤더에서 지정된 제한에 의해 부과됨 - 을 적용하는 단계를 포함한다. 다른 예로서, 상기 맵핑 정책은 연령, 크기, 위치 또는 우선순위 중의 하나에 기초하여 명령어 블록을 취급하는 제어 유닛을 이용하여 구현된다. 다른 예로서, 상기 방법은 명령어 창을 하위 창으로 분할하는 단계를 더 포함하고, 상기 분할된 하위 창은 공통 크기를 공유하거나 다른 크기를 갖는다. 다른 예로서, 상기 분할된 하위 창은 명령어 블록 크기의 분포에 따라 동적으로 크기 정해진다. 다른 예로서, 상기 지정된 제한은 명령어 창의 정렬 제한 또는 명령어 블록 용량 제한 중의 하나를 포함한다. 다른 예로서, 상기 명령어 블록 크기는 로직, 레지스터, 메모리 또는 코드 스트림 중의 하나를 이용하여 표현되는 크기 창에 대한 포인터를 이용하여 상기 헤더에서 표시된다.
다른 예는 명령어 블록 기반 마이크로아키텍처를 포함하고, 이 마이크로아키텍처는 제어 유닛과; 하나 이상의 피연산자 버퍼와; 제어 유닛의 제어를 받게끔 디코딩된 명령어 블록을 저장하도록 구성된 명령어 창을 포함하며, 상기 제어는 명령어 블록을 취급하기 위한 복수의 정책 중 하나 이상을 적용하는 동작과; 명령어 블록 내의 명령어가 메시지 또는 피연산자를 명령어 블록 내의 다른 명령어에 보낼 수 있도록 명령어 블록 내의 모든 명령어에 대하여 자원들을 하나 이상의 피연산자 버퍼에 인출하는 것을 포함한 명령어 블록 대량 할당 동작을 포함한다. 다른 예로서, 상기 자원들은 피연산자 버퍼에 버퍼링된 제어 비트 또는 피연산자 중의 하나를 포함한다. 다른 예로서, 정책은 명령어 블록의 헤더에서 지정된 제한들에 기초하여 명령어 블록을 맵핑하는 구성을 포함하고, 상기 지정된 제한은 명령어 창의 정렬 제한 또는 명령어 블록 용량 제한 중의 하나를 포함한다. 다른 예로서, 정책은 명령어 창 내의 명령어 블록들의 순서를 추적하고 명령어 블록을 비순차적으로 커미트하는 구성을 포함한다. 다른 예로서, 정책은 명령어 창에 현재 맵핑된 명령어 블록의 연령을 명시적으로 추적하고 명시적으로 추적된 연령에 기초하여 명령어 블록을 커미트하는 구성을 포함한다. 다른 예로서, 정책은 명령어 블록에 맞는 명령어 창 내의 슬롯이 이용 가능할 때 명령어 창에 명령어 블록을 맵핑하는 구성을 포함한다. 다른 예로서, 정책은 명령어 블록을 원형 버퍼를 이용하여 명령어 창에 맵핑하는 구성을 포함한다. 다른 예로서, 정책은 우선순위에 기초하여 명령어 블록을 명령어 창에 맵핑하거나 명령어 블록을 커미트하는 구성을 포함한다.
다른 예는 프로세서에 배치되고 명령어 블록 관리 방법을 수행하도록 구성된 제어 유닛을 포함한다. 상기 방법은 명령어 창을 복수의 세그멘트 - 세그멘트는 2개 이상의 다른 크기를 갖는 것임 - 로 구성하는 단계와; 하나 이상의 명령어를 포함한 명령어 블록을 명령어 캐시로부터 인출하는 단계와; 명령어 블록 내의 명령어들과 연관된 모든 자원을 인출하는 단계와; 명령어 창 내의 명령어 밀도가 최대화되도록 명령어 블록을 명령어 창의 세그멘트에 배치하는 단계를 포함한다. 다른 예로서, 상기 제어 유닛은 명령어 창 내의 배치에 대한 지정된 제한에 대하여 명령어 블록의 헤더를 검사하고 상기 지정된 제한에 따라 상기 배치를 수행하는 단계를 더 포함하고, 상기 지정된 제한은 정렬 제한 또는 명령어 블록 용량 제한 중의 하나를 포함한다. 다른 예로서, 상기 제어 유닛은 분할된 명령어 창을 복수의 프로세서 코어에 걸쳐 분포된 논리적 세분화 명령어 창으로서 구성하는 단계를 더 포함한다. 다른 예로서, 상기 제어 유닛은 인칩 네트워크를 통해 운반되는 통신을 이용하여 상기 논리적 세분화 명령어 창 전역에서 상태를 유지하는 단계를 더 포함한다. 다른 예로서, 상기 제어 유닛은 대량 할당으로서 명령어 블록 및 자원의 인출을 수행하는 단계를 더 포함한다. 다른 예로서, 상기 제어 유닛은 상기 헤더에서 인코딩된 명령어 블록 크기에 기초해서 또는 로직, 레지스터, 메모리 또는 코드 스트림 중의 하나를 이용하여 표현된 크기 표에 대하여 상기 헤더 내의 포인터에 의해 표시된 명령어 블록 크기에 기초해서 상기 배치된 명령어 블록에 대하여 선택되는 세그멘트를 선택하는 단계를 더 포함한다.
전술한 주제는 단지 예로서 제공되고 제한하는 것으로 해석되지 않아야 한다. 여기에서 예시하고 설명한 예시적인 실시형태 및 응용에 따르지 않고, 및 첨부된 특허 청구범위에서 규정하는 본 발명의 진정한 정신 및 범위로부터 벗어나지 않고, 여기에서 설명한 주제에 대하여 각종 수정 및 변화가 이루어질 수 있다.
Claims (14)
- 프로세서에 배치된 명령어 창 내의 명령어 블록들을 관리하는 방법에 있어서,
명령어 블록 내의 하나 이상의 명령어에 대한 자원들이 즉시 인출되도록 명령어 블록을 대량 할당하는 단계 - 상기 자원들은 상기 하나 이상의 명령어와 연관된 제어 비트 및 피연산자를 포함함 -;
하나 이상의 명령어를 포함한 명령어 블록 - 이 명령어 블록은 헤더를 포함하는 것임 - 을 명령어 캐시로부터 명령어 창에 맵핑하는 단계; 및
맵핑을 수행할 때 하나 이상의 제약 - 이 제약은 맵핑 정책 중 하나 또는 상기 헤더에서 지정된 제한에 의해 부과됨 - 을 적용하는 단계
를 포함한 명령어 블록 관리 방법. - 제1항에 있어서, 상기 맵핑 정책은 연령, 크기, 위치 또는 우선순위 중의 하나에 기초하여 명령어 블록을 취급하는 제어 유닛을 이용하여 구현되는 것인 명령어 블록 관리 방법.
- 제1항에 있어서, 상기 명령어 창을 하위 창으로 분할하는 단계를 더 포함하고, 상기 분할된 하위 창은 공통 크기를 공유하거나 상이한 크기를 갖는 것인 명령어 블록 관리 방법.
- 제3항에 있어서, 상기 분할된 하위 창은 명령어 블록 크기의 분포에 따라 동적으로 크기 정해지는 것인 명령어 블록 관리 방법.
- 제1항에 있어서, 상기 지정된 제한은 명령어 창의 정렬 제한 또는 명령어 블록 용량 제한 중의 하나를 포함한 것인 명령어 블록 관리 방법.
- 제5항에 있어서, 상기 명령어 블록 크기는 로직, 레지스터, 메모리 또는 코드 스트림 중의 하나를 이용하여 표현되는 크기 표에 대한 포인터를 이용하여 상기 헤더에서 표시되는 것인 명령어 블록 관리 방법.
- 명령어 블록 기반 마이크로아키텍처에 있어서,
제어 유닛;
하나 이상의 피연산자 버퍼;
상기 제어 유닛의 제어를 받게끔 디코딩된 명령어 블록을 저장하도록 구성된 명령어 창
을 포함하고,
상기 제어는,
명령어 블록을 취급하기 위한 복수의 정책 중 하나 이상을 적용하는 동작; 및
명령어 블록 내의 명령어가 메시지 또는 피연산자를 상기 명령어 블록 내의 또 다른 명령어에 보낼 수 있도록 상기 명령어 블록 내의 모든 명령어에 대하여 자원들을 하나 이상의 피연산자 버퍼에 인출하는 것을 포함한 명령어 블록 대량 할당 동작
을 포함한 것인 명령어 블록 기반 마이크로아키텍처. - 제7항에 있어서, 상기 자원들은 피연산자 버퍼에 버퍼링된 제어 비트 또는 피연산자 중의 하나를 포함한 것인 명령어 블록 기반 마이크로아키텍처.
- 제7항에 있어서, 정책은 상기 명령어 블록의 헤더에서 지정된 제한들에 기초하여 상기 명령어 블록을 맵핑하는 구성을 포함하고, 상기 지정된 제한은 상기 명령어 창의 정렬 제한 또는 명령어 블록 용량 제한 중의 하나를 포함한 것인 명령어 블록 기반 마이크로아키텍처.
- 제7항에 있어서, 정책은 상기 명령어 창 내의 상기 명령어 블록들의 순서를 추적하고 명령어 블록을 비순차적으로(out of order) 커미트하는 구성을 포함한 것인 명령어 블록 기반 마이크로아키텍처.
- 제7항에 있어서, 정책은 상기 명령어 창에 현재 맵핑된 명령어 블록의 연령을 명시적으로 추적하고 명시적으로 추적된 연령에 기초하여 명령어 블록을 커미트하는 구성을 포함한 것인 명령어 블록 기반 마이크로아키텍처.
- 제7항에 있어서, 정책은 상기 명령어 블록에 맞는 상기 명령어 창 내의 슬롯이 이용 가능할 때 상기 명령어 창에 명령어 블록을 맵핑하는 구성을 포함한 것인 명령어 블록 기반 마이크로아키텍처.
- 제7항에 있어서, 정책은 명령어 블록을 원형 버퍼를 이용하여 상기 명령어 창에 맵핑하는 구성을 포함한 것인 명령어 블록 기반 마이크로아키텍처.
- 제7항에 있어서, 정책은 우선순위에 기초하여 명령어 블록을 상기 명령어 창에 맵핑하거나 명령어 블록을 커미트하는 구성을 포함한 것인 명령어 블록 기반 마이크로아키텍처.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/752,685 US9720693B2 (en) | 2015-06-26 | 2015-06-26 | Bulk allocation of instruction blocks to a processor instruction window |
US14/752,685 | 2015-06-26 | ||
PCT/US2016/038851 WO2016210028A1 (en) | 2015-06-26 | 2016-06-23 | Bulk allocation of instruction blocks to a processor instruction window |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180021165A true KR20180021165A (ko) | 2018-02-28 |
KR102575940B1 KR102575940B1 (ko) | 2023-09-06 |
Family
ID=56551534
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020187002589A KR102575940B1 (ko) | 2015-06-26 | 2016-06-23 | 프로세서 명령어 창에 대한 명령어 블록의 대량 할당 |
Country Status (15)
Country | Link |
---|---|
US (1) | US9720693B2 (ko) |
EP (1) | EP3314406B1 (ko) |
JP (1) | JP2018518776A (ko) |
KR (1) | KR102575940B1 (ko) |
CN (1) | CN107810482B (ko) |
AU (1) | AU2016281600A1 (ko) |
BR (1) | BR112017024362A2 (ko) |
CA (1) | CA2986269A1 (ko) |
CL (1) | CL2017003318A1 (ko) |
CO (1) | CO2017013277A2 (ko) |
HK (1) | HK1246441A1 (ko) |
IL (1) | IL256170A (ko) |
MX (1) | MX2017016201A (ko) |
PH (1) | PH12017550126A1 (ko) |
WO (1) | WO2016210028A1 (ko) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10191747B2 (en) | 2015-06-26 | 2019-01-29 | Microsoft Technology Licensing, Llc | Locking operand values for groups of instructions executed atomically |
US10346168B2 (en) | 2015-06-26 | 2019-07-09 | Microsoft Technology Licensing, Llc | Decoupled processor instruction window and operand buffer |
US9940136B2 (en) | 2015-06-26 | 2018-04-10 | Microsoft Technology Licensing, Llc | Reuse of decoded instructions |
US11755484B2 (en) | 2015-06-26 | 2023-09-12 | Microsoft Technology Licensing, Llc | Instruction block allocation |
US10409606B2 (en) | 2015-06-26 | 2019-09-10 | Microsoft Technology Licensing, Llc | Verifying branch targets |
US10175988B2 (en) | 2015-06-26 | 2019-01-08 | Microsoft Technology Licensing, Llc | Explicit instruction scheduler state information for a processor |
US10409599B2 (en) | 2015-06-26 | 2019-09-10 | Microsoft Technology Licensing, Llc | Decoding information about a group of instructions including a size of the group of instructions |
US10095519B2 (en) | 2015-09-19 | 2018-10-09 | Microsoft Technology Licensing, Llc | Instruction block address register |
TWI702499B (zh) * | 2018-08-20 | 2020-08-21 | 慧榮科技股份有限公司 | 儲存裝置及快取區定址方法 |
CN110851073B (zh) | 2018-08-20 | 2023-06-02 | 慧荣科技股份有限公司 | 储存装置及巨集指令的执行方法 |
CN110851372B (zh) | 2018-08-20 | 2023-10-31 | 慧荣科技股份有限公司 | 储存装置及快取区定址方法 |
US12050805B2 (en) * | 2022-07-28 | 2024-07-30 | Arm Limited | Control of bulk memory instructions |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013081556A1 (en) * | 2011-12-01 | 2013-06-06 | National University Of Singapore | Polymorphic heterogeneous multi-core architecture |
US20150127928A1 (en) * | 2013-11-07 | 2015-05-07 | Microsoft Corporation | Energy Efficient Multi-Modal Instruction Issue |
Family Cites Families (106)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5333280A (en) | 1990-04-06 | 1994-07-26 | Nec Corporation | Parallel pipelined instruction processing system for very long instruction word |
US5363495A (en) | 1991-08-26 | 1994-11-08 | International Business Machines Corporation | Data processing system with multiple execution units capable of executing instructions out of sequence |
DE69311330T2 (de) | 1992-03-31 | 1997-09-25 | Seiko Epson Corp., Tokio/Tokyo | Befehlsablauffolgeplanung von einem risc-superskalarprozessor |
US6735685B1 (en) | 1992-09-29 | 2004-05-11 | Seiko Epson Corporation | System and method for handling load and/or store operations in a superscalar microprocessor |
US5628021A (en) | 1992-12-31 | 1997-05-06 | Seiko Epson Corporation | System and method for assigning tags to control instruction processing in a superscalar processor |
US5999737A (en) | 1994-03-01 | 1999-12-07 | Digital Equipment Corporation | Link time optimization via dead code elimination, code motion, code partitioning, code grouping, loop analysis with code motion, loop invariant analysis and active variable to register analysis |
US6112019A (en) | 1995-06-12 | 2000-08-29 | Georgia Tech Research Corp. | Distributed instruction queue |
US5790822A (en) | 1996-03-21 | 1998-08-04 | Intel Corporation | Method and apparatus for providing a re-ordered instruction cache in a pipelined microprocessor |
US5920724A (en) | 1996-03-28 | 1999-07-06 | Intel Corporation | Software pipelining a hyperblock loop |
US6286135B1 (en) | 1997-03-26 | 2001-09-04 | Hewlett-Packard Company | Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses |
US5983337A (en) | 1997-06-12 | 1999-11-09 | Advanced Micro Devices, Inc. | Apparatus and method for patching an instruction by providing a substitute instruction or instructions from an external memory responsive to detecting an opcode of the instruction |
US5845103A (en) | 1997-06-13 | 1998-12-01 | Wisconsin Alumni Research Foundation | Computer with dynamic instruction reuse |
US5943501A (en) | 1997-06-27 | 1999-08-24 | Wisconsin Alumni Research Foundation | Multiple processor, distributed memory computer with out-of-order processing |
US6185675B1 (en) | 1997-10-24 | 2001-02-06 | Advanced Micro Devices, Inc. | Basic block oriented trace cache utilizing a basic block sequence buffer to indicate program order of cached basic blocks |
US6164841A (en) | 1998-05-04 | 2000-12-26 | Hewlett-Packard Company | Method, apparatus, and product for dynamic software code translation system |
US6988183B1 (en) | 1998-06-26 | 2006-01-17 | Derek Chi-Lan Wong | Methods for increasing instruction-level parallelism in microprocessors and digital system |
EP0992894A1 (en) | 1998-10-06 | 2000-04-12 | Texas Instruments Inc. | Apparatus and method for loop execution |
US6477683B1 (en) | 1999-02-05 | 2002-11-05 | Tensilica, Inc. | Automated processor generation system for designing a configurable processor and method for the same |
US6523110B1 (en) | 1999-07-23 | 2003-02-18 | International Business Machines Corporation | Decoupled fetch-execute engine with static branch prediction support |
JP2001092662A (ja) | 1999-09-22 | 2001-04-06 | Toshiba Corp | プロセッサコア及びこれを用いたプロセッサ |
EP1221087A1 (en) | 1999-10-01 | 2002-07-10 | Sun Microsystems, Inc. | A method for precise trap handling in case of speculative and out-of-order loads |
EP1102163A3 (en) | 1999-11-15 | 2005-06-29 | Texas Instruments Incorporated | Microprocessor with improved instruction set architecture |
US6779100B1 (en) | 1999-12-17 | 2004-08-17 | Hewlett-Packard Development Company, L.P. | Method and device for address translation for compressed instructions |
US6918032B1 (en) | 2000-07-06 | 2005-07-12 | Intel Corporation | Hardware predication for conditional instruction path branching |
US7032217B2 (en) | 2001-03-26 | 2006-04-18 | Intel Corporation | Method and system for collaborative profiling for continuous detection of profile phase transitions |
US7453899B1 (en) | 2001-05-08 | 2008-11-18 | Lsi Corporation | Field programmable network application specific integrated circuit and a method of operation thereof |
US6965982B2 (en) | 2001-06-29 | 2005-11-15 | International Business Machines Corporation | Multithreaded processor efficiency by pre-fetching instructions for a scheduled thread |
US7353287B2 (en) | 2001-09-26 | 2008-04-01 | Adobe Systems Incorporated | Marked foreign data blocks |
AU2002363142A1 (en) | 2001-10-31 | 2003-05-12 | Doug Burger | A scalable processing architecture |
US7055021B2 (en) | 2002-02-05 | 2006-05-30 | Sun Microsystems, Inc. | Out-of-order processor that reduces mis-speculation using a replay scoreboard |
JP3804941B2 (ja) | 2002-06-28 | 2006-08-02 | 富士通株式会社 | 命令フェッチ制御装置 |
US6934828B2 (en) | 2002-09-17 | 2005-08-23 | Intel Corporation | Decoupling floating point linear address |
US7299458B2 (en) | 2002-10-31 | 2007-11-20 | Src Computers, Inc. | System and method for converting control flow graph representations to control-dataflow graph representations |
US7349968B2 (en) * | 2003-07-31 | 2008-03-25 | International Business Machines Corporation | Method, system and program product for asynchronously processing requests |
CN1842770A (zh) * | 2003-08-28 | 2006-10-04 | 美普思科技有限公司 | 一种在处理器中挂起和释放执行过程中计算线程的整体机制 |
US7207038B2 (en) | 2003-08-29 | 2007-04-17 | Nokia Corporation | Constructing control flows graphs of binary executable programs at post-link time |
US7310722B2 (en) | 2003-12-18 | 2007-12-18 | Nvidia Corporation | Across-thread out of order instruction dispatch in a multithreaded graphics processor |
US8607209B2 (en) | 2004-02-04 | 2013-12-10 | Bluerisc Inc. | Energy-focused compiler-assisted branch prediction |
EP1731998A1 (en) | 2004-03-29 | 2006-12-13 | Kyoto University | Data processing device, data processing program, and recording medium containing the data processing program |
EP1870814B1 (en) * | 2006-06-19 | 2014-08-13 | Texas Instruments France | Method and apparatus for secure demand paging for processor devices |
US8756605B2 (en) | 2004-12-17 | 2014-06-17 | Oracle America, Inc. | Method and apparatus for scheduling multiple threads for execution in a shared microprocessor pipeline |
US7552318B2 (en) | 2004-12-17 | 2009-06-23 | International Business Machines Corporation | Branch lookahead prefetch for microprocessors |
US8151092B2 (en) | 2005-01-12 | 2012-04-03 | International Business Machines Corporation | Control signal memoization in a multiple instruction issue microprocessor |
US7853777B2 (en) | 2005-02-04 | 2010-12-14 | Mips Technologies, Inc. | Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions |
US7380038B2 (en) | 2005-02-04 | 2008-05-27 | Microsoft Corporation | Priority registers for biasing access to shared resources |
US7805574B2 (en) | 2005-02-09 | 2010-09-28 | International Business Machines Corporation | Method and cache system with soft I-MRU member protection scheme during make MRU allocation |
US7152155B2 (en) | 2005-02-18 | 2006-12-19 | Qualcomm Incorporated | System and method of correcting a branch misprediction |
US7673119B2 (en) | 2005-05-13 | 2010-03-02 | Texas Instruments Incorporated | VLIW optional fetch packet header extends instruction set space |
US7779213B2 (en) | 2005-08-29 | 2010-08-17 | The Invention Science Fund I, Inc | Optimization of instruction group execution through hardware resource management policies |
US7490224B2 (en) | 2005-10-07 | 2009-02-10 | International Business Machines Corporation | Time-of-life counter design for handling instruction flushes from a queue |
US7716577B2 (en) | 2005-11-14 | 2010-05-11 | Oracle America, Inc. | Method and apparatus for hardware XML acceleration |
JP4923240B2 (ja) | 2006-01-17 | 2012-04-25 | 国立大学法人東京工業大学 | プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム |
US8266413B2 (en) | 2006-03-14 | 2012-09-11 | The Board Of Trustees Of The University Of Illinois | Processor architecture for multipass processing of instructions downstream of a stalled instruction |
US8010953B2 (en) | 2006-04-04 | 2011-08-30 | International Business Machines Corporation | Method for compiling scalar code for a single instruction multiple data (SIMD) execution engine |
US8032734B2 (en) | 2006-09-06 | 2011-10-04 | Mips Technologies, Inc. | Coprocessor load data queue for interfacing an out-of-order execution unit with an in-order coprocessor |
US7624254B2 (en) | 2007-01-24 | 2009-11-24 | Qualcomm Incorporated | Segmented pipeline flushing for mispredicted branches |
JP4957729B2 (ja) | 2007-01-25 | 2012-06-20 | 日本電気株式会社 | プログラム並列化方法、プログラム並列化装置及びプログラム |
US8291400B1 (en) | 2007-02-07 | 2012-10-16 | Tilera Corporation | Communication scheduling for parallel processing architectures |
US7719532B2 (en) | 2007-02-09 | 2010-05-18 | International Business Machines Corporation | Efficient and flexible data organization for acceleration data structure nodes |
US20080235493A1 (en) * | 2007-03-23 | 2008-09-25 | Qualcomm Incorporated | Instruction communication techniques for multi-processor system |
US20080250227A1 (en) | 2007-04-04 | 2008-10-09 | Linderman Michael D | General Purpose Multiprocessor Programming Apparatus And Method |
JP5084355B2 (ja) * | 2007-06-07 | 2012-11-28 | キヤノン株式会社 | フロー処理実行装置、フロー処理実行方法及びプログラム |
US8180997B2 (en) | 2007-07-05 | 2012-05-15 | Board Of Regents, University Of Texas System | Dynamically composing processor cores to form logical processors |
JP2009026106A (ja) | 2007-07-20 | 2009-02-05 | Oki Electric Ind Co Ltd | 命令コード圧縮方法と命令フェッチ回路 |
US7877586B2 (en) | 2008-02-01 | 2011-01-25 | International Business Machines Corporation | Branch target address cache selectively applying a delayed hit |
US7885967B2 (en) * | 2008-05-30 | 2011-02-08 | Red Hat, Inc. | Management of large dynamic tables |
US8321850B2 (en) | 2008-06-06 | 2012-11-27 | Vmware, Inc. | Sharing and persisting code caches |
EP2335149A1 (en) | 2008-09-08 | 2011-06-22 | Bridgeco, Inc. | Very long instruction word processor with multiple data queues |
US8612698B2 (en) | 2008-10-31 | 2013-12-17 | Intel Corporation | Replacement policy for hot code detection |
US20100146209A1 (en) | 2008-12-05 | 2010-06-10 | Intellectual Ventures Management, Llc | Method and apparatus for combining independent data caches |
US9489207B2 (en) | 2009-04-14 | 2016-11-08 | International Business Machines Corporation | Processor and method for partially flushing a dispatched instruction group including a mispredicted branch |
US20100325395A1 (en) | 2009-06-19 | 2010-12-23 | Doug Burger | Dependence prediction in a memory system |
US8533436B2 (en) | 2009-06-26 | 2013-09-10 | Intel Corporation | Adaptively handling remote atomic execution based upon contention prediction |
US8433885B2 (en) | 2009-09-09 | 2013-04-30 | Board Of Regents Of The University Of Texas System | Method, system and computer-accessible medium for providing a distributed predicate prediction |
US10698859B2 (en) | 2009-09-18 | 2020-06-30 | The Board Of Regents Of The University Of Texas System | Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture |
US20110078424A1 (en) | 2009-09-30 | 2011-03-31 | International Business Machines Corporation | Optimizing program code using branch elimination |
WO2011067896A1 (en) | 2009-12-02 | 2011-06-09 | Mush-A Co., Ltd. | Data processing apparatus, data processing system, packet, recording medium, storage device, and data processing method |
JP5057256B2 (ja) | 2009-12-02 | 2012-10-24 | 株式会社Mush−A | データ処理装置、データ処理システムおよびデータ処理方法 |
CN102117198B (zh) * | 2009-12-31 | 2015-07-15 | 上海芯豪微电子有限公司 | 一种分支处理方法 |
EP2519876A1 (en) | 2009-12-28 | 2012-11-07 | Hyperion Core, Inc. | Optimisation of loops and data flow sections |
GB201001621D0 (en) | 2010-02-01 | 2010-03-17 | Univ Catholique Louvain | A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms |
KR101664108B1 (ko) | 2010-04-13 | 2016-10-11 | 삼성전자주식회사 | 멀티 코어의 동기화를 효율적으로 처리하기 위한 하드웨어 가속 장치 및 방법 |
US8645714B2 (en) * | 2010-05-25 | 2014-02-04 | Via Technologies, Inc. | Branch target address cache for predicting instruction decryption keys in a microprocessor that fetches and decrypts encrypted instructions |
US8555038B2 (en) | 2010-05-28 | 2013-10-08 | Oracle International Corporation | Processor and method providing instruction support for instructions that utilize multiple register windows |
US9021241B2 (en) | 2010-06-18 | 2015-04-28 | The Board Of Regents Of The University Of Texas System | Combined branch target and predicate prediction for instruction blocks |
US20120030451A1 (en) | 2010-07-28 | 2012-02-02 | Broadcom Corporation | Parallel and long adaptive instruction set architecture |
EP2795484A4 (en) * | 2011-12-23 | 2015-11-11 | Univ Arizona State | METHOD OF MICRO-SPECIALIZATION IN DATABASE MANAGEMENT SYSTEMS |
CN102566974B (zh) * | 2012-01-14 | 2014-03-26 | 哈尔滨工程大学 | 基于同时多线程的取指控制方法 |
US9304776B2 (en) | 2012-01-31 | 2016-04-05 | Oracle International Corporation | System and method for mitigating the impact of branch misprediction when exiting spin loops |
WO2013156825A1 (en) | 2012-04-20 | 2013-10-24 | Freescale Semiconductor, Inc. | A computer system and a method for generating an optimized program code |
US8930678B2 (en) | 2012-04-26 | 2015-01-06 | Intel Corporation | Instruction and logic to length decode X86 instructions |
KR101964927B1 (ko) | 2012-07-17 | 2019-04-03 | 삼성전자 주식회사 | 캐싱 프록시 방법 및 장치 |
US8930760B2 (en) | 2012-12-17 | 2015-01-06 | International Business Machines Corporation | Validating cache coherency protocol within a processor |
US9471318B2 (en) | 2013-03-15 | 2016-10-18 | International Business Machines Corporation | System management and instruction counting |
US9891924B2 (en) | 2013-03-15 | 2018-02-13 | Intel Corporation | Method for implementing a reduced size register view data structure in a microprocessor |
US9811342B2 (en) | 2013-03-15 | 2017-11-07 | Intel Corporation | Method for performing dual dispatch of blocks and half blocks |
US9632825B2 (en) | 2013-03-15 | 2017-04-25 | Intel Corporation | Method and apparatus for efficient scheduling for asymmetrical execution units |
US9195606B2 (en) | 2013-03-15 | 2015-11-24 | Intel Corporation | Dead block predictors for cooperative execution in the last level cache |
US20140281622A1 (en) | 2013-03-15 | 2014-09-18 | Mahesh Wagh | Method, apparatus, and system for improving resume times for root ports and root port integrated endpoints |
US9792252B2 (en) | 2013-05-31 | 2017-10-17 | Microsoft Technology Licensing, Llc | Incorporating a spatial array into one or more programmable processor cores |
GB2515076B (en) | 2013-06-13 | 2020-07-15 | Advanced Risc Mach Ltd | A data processing apparatus and method for handling retrieval of instructions from an instruction cache |
US10372527B2 (en) | 2013-07-15 | 2019-08-06 | Intel Corporation | Method of encoding data |
US20150074355A1 (en) * | 2013-09-12 | 2015-03-12 | Lsi Corporation | Efficient caching of file system journals |
US9946548B2 (en) * | 2015-06-26 | 2018-04-17 | Microsoft Technology Licensing, Llc | Age-based management of instruction blocks in a processor instruction window |
US10346168B2 (en) * | 2015-06-26 | 2019-07-09 | Microsoft Technology Licensing, Llc | Decoupled processor instruction window and operand buffer |
US9952867B2 (en) * | 2015-06-26 | 2018-04-24 | Microsoft Technology Licensing, Llc | Mapping instruction blocks based on block size |
-
2015
- 2015-06-26 US US14/752,685 patent/US9720693B2/en active Active
-
2016
- 2016-06-23 AU AU2016281600A patent/AU2016281600A1/en not_active Abandoned
- 2016-06-23 EP EP16744949.5A patent/EP3314406B1/en active Active
- 2016-06-23 BR BR112017024362A patent/BR112017024362A2/pt not_active Application Discontinuation
- 2016-06-23 KR KR1020187002589A patent/KR102575940B1/ko active IP Right Grant
- 2016-06-23 MX MX2017016201A patent/MX2017016201A/es unknown
- 2016-06-23 WO PCT/US2016/038851 patent/WO2016210028A1/en active Application Filing
- 2016-06-23 CN CN201680037471.7A patent/CN107810482B/zh active Active
- 2016-06-23 JP JP2017565984A patent/JP2018518776A/ja active Pending
- 2016-06-23 CA CA2986269A patent/CA2986269A1/en not_active Abandoned
-
2017
- 2017-11-08 PH PH12017550126A patent/PH12017550126A1/en unknown
- 2017-12-07 IL IL256170A patent/IL256170A/en unknown
- 2017-12-21 CL CL2017003318A patent/CL2017003318A1/es unknown
- 2017-12-21 CO CONC2017/0013277A patent/CO2017013277A2/es unknown
-
2018
- 2018-05-07 HK HK18105887.5A patent/HK1246441A1/zh unknown
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013081556A1 (en) * | 2011-12-01 | 2013-06-06 | National University Of Singapore | Polymorphic heterogeneous multi-core architecture |
US20150127928A1 (en) * | 2013-11-07 | 2015-05-07 | Microsoft Corporation | Energy Efficient Multi-Modal Instruction Issue |
Non-Patent Citations (2)
Title |
---|
BURGER. D. et al. Scaling to the End of Silicon with EDGE Architectures. 2004년 * |
SANKARALINGAM. K. et al. TRIPS: A polymorphous architecture for exploiting ILP, TLP, and DLP. 2004년 * |
Also Published As
Publication number | Publication date |
---|---|
CL2017003318A1 (es) | 2018-06-29 |
WO2016210028A1 (en) | 2016-12-29 |
CN107810482A (zh) | 2018-03-16 |
MX2017016201A (es) | 2018-03-01 |
US20160378493A1 (en) | 2016-12-29 |
IL256170A (en) | 2018-02-28 |
EP3314406B1 (en) | 2020-10-14 |
US9720693B2 (en) | 2017-08-01 |
CO2017013277A2 (es) | 2018-01-16 |
JP2018518776A (ja) | 2018-07-12 |
CA2986269A1 (en) | 2016-12-29 |
AU2016281600A1 (en) | 2017-12-07 |
EP3314406A1 (en) | 2018-05-02 |
CN107810482B (zh) | 2021-10-22 |
BR112017024362A2 (pt) | 2018-07-31 |
HK1246441A1 (zh) | 2018-09-07 |
PH12017550126A1 (en) | 2018-02-26 |
KR102575940B1 (ko) | 2023-09-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11048517B2 (en) | Decoupled processor instruction window and operand buffer | |
EP3314402B1 (en) | Age-based management of instruction blocks in a processor instruction window | |
KR102575940B1 (ko) | 프로세서 명령어 창에 대한 명령어 블록의 대량 할당 | |
KR102575938B1 (ko) | 블록 크기에 기초하여 명령어 블록을 명령어 윈도우에 맵핑하기 | |
CN108108188B (zh) | 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段 | |
CN108376097B (zh) | 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段 | |
US9766893B2 (en) | Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines | |
US20170371660A1 (en) | Load-store queue for multiple processor cores | |
US20170371659A1 (en) | Load-store queue for block-based processor | |
US20210042111A1 (en) | Efficient encoding of high fanout communications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |