KR102311619B1 - 파이프라인 제어 신호들을 발생시키도록 프로세서를 인에이블링하기 위한 방법 및 장치 - Google Patents
파이프라인 제어 신호들을 발생시키도록 프로세서를 인에이블링하기 위한 방법 및 장치 Download PDFInfo
- Publication number
- KR102311619B1 KR102311619B1 KR1020167024488A KR20167024488A KR102311619B1 KR 102311619 B1 KR102311619 B1 KR 102311619B1 KR 1020167024488 A KR1020167024488 A KR 1020167024488A KR 20167024488 A KR20167024488 A KR 20167024488A KR 102311619 B1 KR102311619 B1 KR 102311619B1
- Authority
- KR
- South Korea
- Prior art keywords
- instructions
- group
- instruction
- processor
- chaining
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 48
- 239000000284 extract Substances 0.000 claims abstract description 5
- 230000015654 memory Effects 0.000 claims description 23
- 230000006870 function Effects 0.000 claims description 3
- 238000005457 optimization Methods 0.000 description 13
- 230000003068 static effect Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 5
- 235000000434 Melocanna baccifera Nutrition 0.000 description 3
- 241001497770 Melocanna baccifera Species 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 230000009191 jumping Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 241000761456 Nops Species 0.000 description 1
- 101100534231 Xenopus laevis src-b gene Proteins 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000000796 flavoring agent Substances 0.000 description 1
- 235000019634 flavors Nutrition 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 108010020615 nociceptin receptor Proteins 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 230000001360 synchronised effect 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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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/3818—Decoding for concurrent execution
- G06F9/3822—Parallel decoding, e.g. parallel decode units
-
- 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
- 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/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
컴퓨터 프로세서의 체이닝 비트 디코더는 명령어 스트림을 수신한다. 체이닝 비트 디코더는 명령어 스트림으로부터 일 그룹의 명령어들을 선택한다. 체이닝 비트 디코더는 체이닝 비트들의 시퀀스를 생성하기 위해 명령어 스트림의 각각의 명령어로부터 지정된 비트를 추출한다. 체이닝 비트 디코더는 체이닝 비트들의 시퀀스를 디코딩한다. 체이닝 비트 디코더는 디코딩된 체이닝 비트들의 시퀀스를 고려하여, 선택된 그룹의 명령어들 간의 제로 또는 그 초과의 명령어 스트림 의존성들을 식별한다. 체이닝 비트 디코더는 명령어들의 시퀀스 그룹 중 식별된 제로 또는 그 초과의 명령어 스트림 의존성들을 고려하여 프로세서의 하나 또는 그 초과의 파이프라인 스테이지들로 하여금 선택된 그룹의 명령어들을 실행하게 하기 위해 제어 신호들을 출력한다.
Description
[0001] 본 출원은 2014년 2월 6일자로 출원된 미국 가특허출원 제 61/936,428호를 우선권으로 주장하는 2014년 11월 12일자로 출원된 미국 실용특허 출원 제14/539,104호를 우선권으로 주장하며, 이들의 개시내용들은 그 전체가 인용에 의해 본원에 포함된다.
[0002] 본 개시내용의 실시예들은 마이크로프로세서 환경에서 명령어들을 프로세싱하기 위한 방법 및 장치에 관한 것이다. 보다 구체적으로, 실시예들은 의존성 정보, 병렬성 정보 및 성능 최적화들이 명령어들의 시퀀스로 인코딩되는 것을 가능하게 하기 위한 방법 및 장치에 관한 것이다. 프로세서는 복잡한 명령어간(inter-instruction) 의존성 체크 하드웨어에 대한 필요성 없이, 파이프라인 제어 신호들을 발생시키기 위해 이 정보를 디코딩 및 이용할 수 있다.
[0003] 순차적 명령어 스트림에서 일 그룹의 프로세서 명령어들 내의 명령어들은, 프로세서 명령어들의 입력 값들이 그룹내 다른 프로세서 명령어들에 의해 발생되지 않는 경우 서로 독립적이라고 한다. 다른 말로, 명령어 스트림의 실행에 대한 결과 출력은, 프로세서 명령어들의 그룹 내 명령어들이 순차적으로 순서대로 또는 병렬로 또는 비순차적(out-of-order) 방식으로 평가되든지 동일하게 유지된다.
[0004] 독립적인 명령어들은 임의의 순서로 평가될 수 있기 때문에, 이들 독립적인 명령어들의 실행시 잠재적 오버랩은 명령어 수준 병렬성(ILP:instruction level parallelism)으로 공지되어 있다. ILP는 프로세서 명령어들이 동시에 평가될 수 있는 정도의 척도(measure)로 정의될 수 있다.
[0005] 명령어 스트림에서 ILP를 제한하는 요인들로는 명령어들 간의 제어 의존성 및 데이터 의존성들이 있다. 현재 프로세서 아키텍처들은, 동적 명령어 스케줄링, 정적 명령어 스케줄링 및 다중 명령어 발행과 같은 마이크로-아키텍처 기술들을 이용함으로써 이들 의존성들의 영향력들을 완화시키는 것을 시도한다. 동적 명령어 스케줄링 기술들은 범용성 프로세서들의 분야에서 널리 사용되어 왔다. 그러나, 실시간 및 전력 제약들로 인해, 임베디드(embedded) 시스템 분야의 프로세서들은 통상적으로 정적 명령어 스케줄링 기술들을 사용했다.
[0006] 파이프라인식(pipelined) 마이크로아키텍처의 명령어들을 평가하는 프로세서들은 통상적으로 동일한 프로세싱 스테이지들을 거쳐 진행된다. 도 1은 전형적인 파이프라인식 프로세서에 의해 사용될 수 있는 일 세트의 명령어 스테이지들을 도시한다. 제 1 명령어 addi는 즉치 값(immediate value) 8과 레지스터 r2의 콘텐츠들의 덧셈(addtion)을 수행한다. 제 1 스테이지(IF)에서, 명령어들은 메모리로부터 페칭 및 디코딩될 수 있다. 제 2 스테이지(RD)에서, 피연산자들이 레지스터 파일로부터 판독될 수 있다. 제 3 스테이지(EX)에서, 덧셈이 수행될 수 있다. 마지막으로, 제 4 스테이지(WB)에서, 결과들이 로케이션 r0에서 레지스터 파일에 다시 기록될 수 있다. 파이프라인 페이즈들(IF, RD, EX 및 WB) 각각은 일반적으로 클록 경계상에서 실행된다. 제 2 명령어 muli는 추가적인 하드웨어를 요구하지 않고도 제 2 클록 사이클에서 시작될 수 있다. 제 2 명령어의 프로세싱은, IF 스테이지에 필요한 자원들이 RD 스테이지에서는 필요하지 않기 때문에, 제 1 명령어와 오버랩될 수 있다. IF, RD, EX, 및 WB 스테이지들은 공유되지만 시간에 있어 시프트될 수 있다.
[0007] 도 2는 도 1의 파이프라인 구현이 갖는 복잡성을 나타낸다. 이 예에서, muli 명령어는 피연산자로서 addi 명령어에 의해 컴퓨팅되는 결과를 요구한다. WB(write-back) 페이즈가 아직 발생되지 않았기 때문에, 프로세스는 스톨링되고(stall) 완료를 위해 실행을 대기해야 한다. muli이 자신의 피연산자들이 이용가능해지기를 대기해야 하는 엠프티 사이클들(empty cycles)은 파이프라인에서 통상적으로 "버블들(bubbles)"이라 불린다.
[0008] 전형적인 범용성 프로세서들은, 복잡한 의존성 체크 하드웨어를 사용하여, 디코딩된 명령어가 파이프라인에서 현재 실행되는 명령어들과 명령어간 의존성들을 갖는지를 동적으로 결정한다. 이 하드웨어는 때로는 연동 하드웨어(interlock hardware)로 알려져 있다. 의존성이 검출되면(또한 해저드(hazard)로 알려짐), 명령어 발행은 종속 명령어가 실행을 완료하고 의존성이 해결될 때까지 스톨링된다. 프로세서가 현재 명령어의 EX 스테이지로부터 다음 명령어의 EX 스테이지로 직접 결과를 포워딩할 수 있다면, 파이프라인에서는 어떠한 버블들도 형성되지 않을 것이라는 것을 주목해야 한다. 이는 바이패싱 또는 때로 결과 포워딩으로 지칭된다.
[0009] 전형적인 임베디드 프로세서들은 노출된 파이프라인들을 사용할 수 있으며, 여기서 프로그래머 또는 컴파일러는 모든 명령어들간 의존성들이 만족되도록, 실행 이전에 명령어들을 스케줄링함으로써 코드가 정확하게 실행되는 것을 보장하는 것을 담당한다. 컴파일 시기에 명령어들을 스케줄링하는 이런 방식은 정적 스케줄링으로 알려져 있다. 어떠한 연동 하드웨어 없이 그리고 정적 스케줄링으로, 레지스터 파일이 판독되기 이전에 적절한 수의 사이클들이 경과되도록, NOP(no operation) 명령어들이 명령어 스트림에 삽입될 필요가 있을 수도 있다.
[0010] 동적 하드웨어 연동들을 갖는 범용성 프로세서들을 지칭하든 가시적 파이프라인들을 갖는 임베디드 프로세서를 지칭하든 간에, 파이프라인식 오버랩핑 명령어 실행은 수직 병렬성(vertical parallelism)으로 지칭될 수 있다.
[0011] 또 다른 타입의 병렬성은 수평 병렬성(horizontal parallelism)으로 지칭될 수 있다. 수평 병렬성으로, 어떠한 의존성들도 없는 경우 다수의 독립적 오퍼레이션들이 동시에 실행될 수 있다. 이는 흔히 디지털 신호 프로세싱 코드 및 고성능 컴퓨팅 프로그램들의 경우에 사실이다.
[0012] 이들 다수의 독립적 오퍼레이션들이 상이한 데이터 엘리먼트들상에서 동일한 오퍼레이션을 수행할 경우, 이 타입의 병렬성은 때로 데이터 수준 병렬성(data level parallelism)으로 지칭된다. 데이터 수준 병렬성을 이용하는 프로세서들은 동일한 오퍼레이션을 수행하는 단일 명령어를 실행할 수 있다. 동일한 오퍼레이션이 다수의 엘리먼트들 상에서 동시에 수행되는 경우, 이는 종종 벡터/ SIMD 오퍼레이션들로 지칭된다. 벡터 오퍼레이션들은 SIMD(single instruction multiple data) 오퍼레이션들의 서브세트이지만, 다수의 클래스들의 알고리즘들이 아니라면, 이들은 동일하다. 대조적으로, 스칼라 프로세서상의 명령어들은 단일 데이터 엘리먼트들상에서 동작한다. 도 3은 벡터/SIMD 프로세서의 간략화된 회로도이다.
[0013] 프로세서들은 단일 클록 사이클에서 동시에 다수의 독립적 명령어들을 발행함으로써 수평 병렬성을 이용할 수 있다. 다중 발행 프로세서들은 2개의 기본 플래버들(flavors): 슈퍼스칼라 프로세서들 및 VLIW 프로세서들로 도입된다. 2개 타입들 간의 기본적인 차이는, 명령어들간 의존성들이 해결되고 명령어들이 실행을 위해 발행되는 방식에 있다.
[0014] 슈퍼스칼라 아키텍처에서, 명령어간 해저드들은 하드웨어에서의 런타임시 동적으로 검출된다. 일단 의존성이 해결되면, 명령어(들)가 동적으로 발행된다. 현재 범용성 프로세서들은 전형적으로 투기적 슈퍼스칼라 프로세서들(speculative superscalar processors)이며, 이는 클록 사이클당 다양한 수의 명령어들을 발행하고, 하드웨어에서 명령어간 해저드 검출을 수행하고, 일단 의존성들이 해결되면 명령어들을 동적으로 발행하고, 비순차적 명령어 실행 이후 순차적 커밋(in-order commit)을 수행하고, 그리고 명령어 스트림의 투기적 실행을 수행하여 제어 의존성들의 영향력들을 완화시킨다.
[0015] 대조적으로, VLIW 및 노출된 파이프라인 아키텍처들은 전형적으로 하나의 큰 명령어로서 포맷되는 고정된 수의 오퍼레이션들을 발행한다. 명령어 스케줄링은 컴파일 시기에 또는 프로그래머에 의해 정적으로 수행된다. 이 접근방식은, 구현이 해저드들에 대해 명확하게 검사하기 위한 하드웨어를 포함하지 않기 때문에, 해저드들 및 스케줄 오퍼레이션들을 식별하기 위해 프로그래머 또는 컴파일러에 의존한다. 임베디드 프로세서들 및 디지털 신호 프로세서들은 전형적으로 VLIW(very long instruction word) 기술들을 사용한다.
[0016] VLIW 접근방식은 명령어 내의 모든 오퍼레이션들을 동시에 실행한다. 개선안(refinement)으로서, 아키텍처들은 병렬성을 명확하게 표시하기 위해 VLIW 명령어 필드 내에 하나 또는 그 초과의 비트들 사용한다. 이는, 병렬성로 발행되기 보다는 직렬로 발행되는 명령어 내의 오퍼레이션들의 실행을 허용한다.
[0017] 샌드브릿지 샌드블라스터 SB3500 마이크로프로세서(2008년 10월, 워싱턴 DC, SDR 포럼(Software Defined Radio Technical Forum '08) 행사에서, M. Moudgill, J. Glossner, S. Agrawal, 및 G. Nacer에 의한 "The Sandblaster 2.0 Architecture and SB3500 Implementation"에 설명됨)는, 자신의 3-오퍼레이션 컴파운드 명령어 번들내에서, 이 명령어 번들 내의 오퍼레이션들이 순차적으로 실행되도록 요구되는지를 표시하기 위해 "직렬 비트"라 불리는 단일 비트를 사용한다. 직렬 비트가 셋팅되면, 번들내에서의 오퍼레이션들은 직렬로 실행된다. 직렬 비트가 셋팅되지 않으면, 오퍼레이션들은 병렬로 실행되어야 한다. 오퍼레이션들 중 하나가 직렬 비트 세트로 성립된 분기(taken branch)이면, 오퍼레이션들의 나머지는 실행되지 않는다.
[0018] 오리지널 텍사스 인스트루먼츠 TI C6201 마이크로프로세서("TMS320C64x/C64x+ DSP CPU and Instruction Set - Reference Guide" 문헌 넘버: SPRU732J, 텍사스 인스트루먼츠, 2010년 7월(이후 "텍사스 인스트루먼츠"))에 설명됨)는 각각의 VLIW 명령어 대해 256-비트들이 페치될 것을 요구한다. 텍사스 인스트루먼츠는 이들 256-비트 명령어들을 페치 패킷들로 지칭한다. 텍사스 인스트루먼츠는, 텍사스 인스트루먼츠가 명령어들로서 지칭하는 개별 32-비트 필드들로 오퍼레이션 필드들을 세분화했다. 이 페치 패킷내에서 이들 오퍼레이션들의 실행은 각각의 "명령어"에서 "p-비트"로 불리는 비트에 의해 부분적으로 제어된다. p-비트는, 명령어가 다른 명령어와 병렬로 실행될 것인지를 결정한다. 명령어 i의 p-비트가 1이면, 명령어 i+l은 명령어 i와 (동일한 사이클에서) 병렬로 실행될 것이다. 명령어 i의 p-비트가 0이면, 명령어 i+l은 명령어 i 이후의 사이클에서 실행된다. VLIW 페치 패킷 내의 p-비트 패턴들은 완전히 병렬로, 완전히 직렬로, 또는 부분적으로 직렬 방식으로 명령어들의 실행을 허용한다.
[0019] 원래 IBM650 컴퓨터에 도입되었던 명령어 체이닝(instruction chaining)은 현재 명령어가 다음 명령어 어드레스를 포함한다는 것을 의미한다(Gerrit A. Blaaw 및 Frederick P. Brooks, Jr., "Computer Architecture: Concepts and Evolution," Addison Wesley, 초판, 1997년 2월(이후 "Blaaw")에 설명됨). 오리지널 TI 설계에서, 실행 패킷이 페치 패킷 경계를 교차하면, 실행 패킷은 NOP들로 패딩되는 현재 패킷으로 다음 페치 패킷에 배치될 것을 요구한다. 이후 버전들은 이 제한을 완화시켰지만, 여전히 총 병렬 길이가 8인 것을 요구한다. 이후 개정안들에서는, 실행 패킷들의 중간에 분기하는 것이 허용되었다; 그러나 하위(lower) 어드레스들에서의 모든 명령어들은 무시되었고, 일부 경우들에서, 이는 잘못된 결과들을 산출할 수 있다. p-비트는 병렬 또는 직렬 명령어 발행을 위해서만 사용되었고, 의존성들을 인코딩하지 않았으며, 임의의 파이프라인 제어들을 발생시키지 않았다.
[0020] "Compiler-controlled dynamic instruction dispatch in pipelined processors"란 명칭의 미국 특허 6,260,189호는, 코드 블록의 파이프라인 의존성 필드에서 코드 블록 내 파이프라인 의존성들을 인코딩하는 기술을 설명한다. 컴파일러 또는 프로그래머는 RAW(Read-After-Write) 해저드들, WAW(Write-After-Write) 해저드들, WAR(Write-After-Read) 해저드들 또는 예측 해저드들과 같은 복수의 명령어들에서의 파이프라인 의존성들을 식별하는 것을 필요로 한다. 이들 명령어들은 코드 블록과 연관된 파이프라인 의존성 필드와 함께 코드 블록에 그룹화되며, 이는 임의의 경우, 코드 블록에서의 파이프라인 의존성들의 타입들을 표시한다. 정해진 코드 블록에서 어떠한 해저드들도 식별되지 않았다면, 그 블록내의 명령어들은 스톨 또는 다른 정정 조치들없이 실행될 수 있다. 정해진 코드 블록에서 하나 또는 초과의 해저드들이 검출되었다면, 프로세서는 파이프라인 의존성 필드에서 특정되는 것과 같은 코드의 정해진 블록에서 실제로 존재하는 해저드들에 대해 요구되었던 이 스톨 또는 다른 정정 조치들만을 구현하여, 통상적 기술들을 이용할 경우 야기될 수 있는 성능 저하들을 방지한다.
[0021] 도 4a 및 도 4b는 2개의 상이한 코드 블록들에 대한 파이프라인 의존성 필드들의 예들을 도시한다. 도 4a에서의 코드 블록은 RAW 의존성을 가지며 파이프라인 의존성 필드는 이를 표시한다. 도 4b에서의 코드 블록은 어떠한 데이터 또는 예측 의존성들도 갖지 않는다.
[0022] 프로세서가 병렬성, 명령어간 의존성들 및 성능 최적화들을 효율적으로 결정하는 것을 가능하게 하는 방법 및 장치를 제공함으로써 본 기술 분야에서 기술적 솔루션이 달성되고 상술된 문제점들이 해결된다. 이 정보는 복잡한 하드웨어를 요구하지 않고도 파이프라인식 프로세서에서 필요한 파이프라인 제어 신호들을 발생시키기 위해 이용될 수 있다. 의존성 정보 및 병렬성 정보는 명령어 스트림의 비트들의 시퀀스로 인코딩되며 인코딩된 비트들은 명령어들의 시퀀스에 걸쳐 분산된다. 명령어들의 시퀀스는 프로세서의 발행 폭(issue width)에 기초하여 그룹화된다. 체이닝 비트(chaining bit)라 불리는 각각의 명령어에서의 단일 비트가 각각의 명령어로부터 배정된다. 비트들의 시퀀스는 의존성 정보 및 병렬성 정보로 인코딩된다.
[0023] 체이닝된 비트들을 디코딩하는 장치가 설명된다. 프로세서 구현에 따라, 프로세서는 병렬로 그리고 체이닝된 명령어들의 그룹들로부터 가능한 많은 명령어들을 감소된 레이턴시로 실행하기 위해 이들 체이닝 비트들을 이용한다. 체이닝 비트들은 명령어들을 완전히 디코딩하지 않고도 명령어간 의존성들 및 그룹간 의존성들 양자 모두를 명확하게 인코딩한다. 이는 파이프라인식 프로세서 아키텍처들에서 명령어간 의존성들을 체크하고 이들을 충족시키는 복잡한 하드웨어 연동들에 대한 필요성을 소거한다.
[0024] 방법 및 장치가 설명되며, 여기서 컴파일러 또는 프로그래머는 병렬성 및 명령어간 의존성들을 식별하며 다수의 명령어들에 걸쳐 분포된 단일 비트의 명령어 포맷을 사용하여 이 정보를 인코딩한다. 이는 명령어 체이닝으로 지칭될 수 있다. 이후 프로세서는 명령어 스트림 내 병렬성 및 명령어간 의존성들을 결정하기 위해 런타임시 이들 비트들을 리어셈블리한다. 이 정보는 복잡한 의존성 체크 하드웨어, 긴 명령어 시퀀스들 또는 복잡한 발행 로직에 대한 필요성없이 명령어간 의존성들을 충족시키기 위해 파이프라인을 스톨링하도록 또는 실행 시간들을 개선시키기 위해 필요한 파이프라인 제어 신호들을 발생시키도록 프로세서에 의해 이용된다. 다른 타입들의 성능 최적화들, 예컨대 바이패스 정보는 체이닝된 비트들로 인코딩될 수 있다. 본 개시내용의 예들은 정적 발행 프로세서가 정적 발행 프로세서의 낮은 전력 및 낮은 하드웨어 복잡성을 유지하면서 동적 발행 프로세서의 성능을 달성하는 것을 가능하게 한다. 본 개시내용의 예들은 단일 클록 사이클로 다수의 명령어들을 발행할 수 있는 프로세서들에 적응시키는 기술의 확장성을 입증한다.
[0025] 본 발명은 첨부된 도면들과 함께 고려되며 하기 제시되는 예들의 상세한 설명으로부터보다 쉽게 이해될 수 있으며 이 도면들에서의 동일한 참조 번호들은 유사한 엘리먼트들을 지칭한다.
[0026] 도 1은 전형적인 파이프라인식 프로세서에 의해 이용될 수 있는 일 세트의 명령어 스테이지들을 도시한다.
[0027] 도 2는 도 1의 파이프라인 구현이 갖는 복잡성을 나타낸다.
[0028] 도 3은 벡터/SIMD 프로세서의 간략화된 회로도이다.
[0029] 도 4a 및 도 4b는 2개의 상이한 코드 블록들에 대한 파이프라인 의존성 필드들의 예들을 도시한다.
[0030] 도 5는 2개의 독립적 명령어들의 예를 도시하며, 명령어들 각각은 정보 체이닝을 위해 예비된 대응하는 비트를 갖는다.
[0031] 도 6은, 본 개시내용의 예들이 동작할 수 있는, 체이닝된 명령어들을 디코딩하기 위한 멀티스레드형 컴퓨터 프로세서 내의 하드웨어 스레드 유닛의 일 예를 도시한다.
[0032] 도 7은, 본 개시내용의 예들이 동작할 수 있는, 명령어 그룹의 명령어들로부터 체이닝 비트들을 추출하고, 추출된 체이닝 비트들을 디코딩하고, 그리고 파이프라인 제어 신호들을 발생시키기 위한 체이닝 비트 디코딩 장치를 도시한다.
[0033] 도 8은, 의존성 정보, 병렬성 정보, 및 성능 최적화들이 명령어들의 시퀀스로 인코딩된 하위(underlying) 명령어를 검사하지 않고도 디코딩되는 것을 가능하게 하는 방법의 예를 예시하는 흐름도이다.
[0034] 도 9는 전형적 싱글-발행 파이프라인식 프로세서에서의 체이닝을 입증하는데 사용되는 사전-최적화(pre-optimized) 코드의 예를 도시한다.
[0035] 도 10은, 가능한 조기에 독립적 명령어들 모두를 이동시킴으로써, 도 9의 루프내에서 명령어들을 재순서화하는 최적화된 어셈블리 언어 코드의 예를 도시한다.
[0036] 도 11은 도 6 및 도 7에서 앞서 논의된 싱글-발행 파이프라인식 프로세서의 의미론에 따라 구성된 체이닝 비트들을 갖는, 도 10의 코드를 도시한다.
[0037] 도 12는 도 11의 명령어 스트림에 대한 명령어 체이닝을 사용하는 도 6 및 도 7의 싱글-발행 프로세서에 대한 실행 스냅샷을 도시한다.
[0038] 도 13은 듀얼-발행 파이프라인식 프로세서에 대한 일 세트의 명령어 체이닝 의미론의 일 예를 도시한다.
[0039] 도 14는 듀얼-발행 파이프라인식 프로세서에 대한 명령어 체이닝의 일 예를 도시한다.
[0040] 도 15는 도 14의 듀얼-발행 명령어 스트림에 대한 실행 스냅샷의 일 예를 도시한다.
[0041] 도 16은 3-발행 프로세서에서 명령어 체이닝에 대한 의미론의 일 예를 도시한다.
[0042] 도 17은 도 9에 도시된 예시적 코드에 대한 3-발행 파이프라인식 프로세서에 대해 구성된 명령어 체인의 일 예를 도시한다.
[0043] 도 18은 도 17의 3-발행 명령어 스트림에 대한 실행 스냅샷의 예를 도시한다.
[0044] 도 19는 4-발행 프로세서에 대한 일 세트의 명령어 체이닝 의미론의 일 예를 도시한다.
[0045] 도 20은 의무적 병렬성(mandatory parallelism)에 대한 필요성을 예시하는 4-발행 프로세서에 대한 사전-최적화 코드의 예를 도시한다.
[0046] 도 21은 4-발행 프로세서에 대해 재-순서화된 최적화 코드의 일 예를 도시한다.
[0047] 도 22는 도 21에 도시된 예시적 코드에 대한 4-발행 파이프라인식 프로세서에 대해 구성된 명령어 체인의 일 예를 도시한다.
[0048] 도 23은 도 22의 4-발행 명령어 스트림에 대한 실행 스냅샷의 일 예를 도시한다.
[0049] 도 24는, 의존성 정보, 병렬성 정보 및 성능 최적화들이 컴파일러를 사용하여 명령어들의 시퀀스로 인코딩되는 것을 가능하게 하기 위한 방법의 예를 예시하는 흐름도이다.
[0050] 도 25는, 머신으로 하여금 본원에 논의되는 방법들 중 임의의 하나 또는 그 초과의 것을 수행하게 하기 위한 일 세트의 명령어들이 실행될 수 있는 예시적 형태의 컴퓨터 시스템 내 머신의 도식 표현을 예시한다.
[0051] 첨부된 도면들은 본 발명의 개념들을 예시하는 것을 목적으로 하며 축적대로가 아닐 수도 있다는 것이 이해될 것이다.
[0026] 도 1은 전형적인 파이프라인식 프로세서에 의해 이용될 수 있는 일 세트의 명령어 스테이지들을 도시한다.
[0027] 도 2는 도 1의 파이프라인 구현이 갖는 복잡성을 나타낸다.
[0028] 도 3은 벡터/SIMD 프로세서의 간략화된 회로도이다.
[0029] 도 4a 및 도 4b는 2개의 상이한 코드 블록들에 대한 파이프라인 의존성 필드들의 예들을 도시한다.
[0030] 도 5는 2개의 독립적 명령어들의 예를 도시하며, 명령어들 각각은 정보 체이닝을 위해 예비된 대응하는 비트를 갖는다.
[0031] 도 6은, 본 개시내용의 예들이 동작할 수 있는, 체이닝된 명령어들을 디코딩하기 위한 멀티스레드형 컴퓨터 프로세서 내의 하드웨어 스레드 유닛의 일 예를 도시한다.
[0032] 도 7은, 본 개시내용의 예들이 동작할 수 있는, 명령어 그룹의 명령어들로부터 체이닝 비트들을 추출하고, 추출된 체이닝 비트들을 디코딩하고, 그리고 파이프라인 제어 신호들을 발생시키기 위한 체이닝 비트 디코딩 장치를 도시한다.
[0033] 도 8은, 의존성 정보, 병렬성 정보, 및 성능 최적화들이 명령어들의 시퀀스로 인코딩된 하위(underlying) 명령어를 검사하지 않고도 디코딩되는 것을 가능하게 하는 방법의 예를 예시하는 흐름도이다.
[0034] 도 9는 전형적 싱글-발행 파이프라인식 프로세서에서의 체이닝을 입증하는데 사용되는 사전-최적화(pre-optimized) 코드의 예를 도시한다.
[0035] 도 10은, 가능한 조기에 독립적 명령어들 모두를 이동시킴으로써, 도 9의 루프내에서 명령어들을 재순서화하는 최적화된 어셈블리 언어 코드의 예를 도시한다.
[0036] 도 11은 도 6 및 도 7에서 앞서 논의된 싱글-발행 파이프라인식 프로세서의 의미론에 따라 구성된 체이닝 비트들을 갖는, 도 10의 코드를 도시한다.
[0037] 도 12는 도 11의 명령어 스트림에 대한 명령어 체이닝을 사용하는 도 6 및 도 7의 싱글-발행 프로세서에 대한 실행 스냅샷을 도시한다.
[0038] 도 13은 듀얼-발행 파이프라인식 프로세서에 대한 일 세트의 명령어 체이닝 의미론의 일 예를 도시한다.
[0039] 도 14는 듀얼-발행 파이프라인식 프로세서에 대한 명령어 체이닝의 일 예를 도시한다.
[0040] 도 15는 도 14의 듀얼-발행 명령어 스트림에 대한 실행 스냅샷의 일 예를 도시한다.
[0041] 도 16은 3-발행 프로세서에서 명령어 체이닝에 대한 의미론의 일 예를 도시한다.
[0042] 도 17은 도 9에 도시된 예시적 코드에 대한 3-발행 파이프라인식 프로세서에 대해 구성된 명령어 체인의 일 예를 도시한다.
[0043] 도 18은 도 17의 3-발행 명령어 스트림에 대한 실행 스냅샷의 예를 도시한다.
[0044] 도 19는 4-발행 프로세서에 대한 일 세트의 명령어 체이닝 의미론의 일 예를 도시한다.
[0045] 도 20은 의무적 병렬성(mandatory parallelism)에 대한 필요성을 예시하는 4-발행 프로세서에 대한 사전-최적화 코드의 예를 도시한다.
[0046] 도 21은 4-발행 프로세서에 대해 재-순서화된 최적화 코드의 일 예를 도시한다.
[0047] 도 22는 도 21에 도시된 예시적 코드에 대한 4-발행 파이프라인식 프로세서에 대해 구성된 명령어 체인의 일 예를 도시한다.
[0048] 도 23은 도 22의 4-발행 명령어 스트림에 대한 실행 스냅샷의 일 예를 도시한다.
[0049] 도 24는, 의존성 정보, 병렬성 정보 및 성능 최적화들이 컴파일러를 사용하여 명령어들의 시퀀스로 인코딩되는 것을 가능하게 하기 위한 방법의 예를 예시하는 흐름도이다.
[0050] 도 25는, 머신으로 하여금 본원에 논의되는 방법들 중 임의의 하나 또는 그 초과의 것을 수행하게 하기 위한 일 세트의 명령어들이 실행될 수 있는 예시적 형태의 컴퓨터 시스템 내 머신의 도식 표현을 예시한다.
[0051] 첨부된 도면들은 본 발명의 개념들을 예시하는 것을 목적으로 하며 축적대로가 아닐 수도 있다는 것이 이해될 것이다.
[0052] 명령어 체이닝은, 프로세서 명령어들의 시퀀스의 병렬성 및 명령어간 의존성들 양자 모두를 표시하기 위해, 명령어 당 하나의 비트(이후, "체이닝 비트(chaining bit)"로 지칭됨)를 이용한다. 본원에서 사용되는 바와 같이, 명령어는 오퍼레이션 및 피연산자 구절과 함께 독립적으로 어드레스가능한 유닛으로 지칭된다(Blaaw, 페이지 128 참조). 다수의 명령어들이 함께 그룹화되어 함께 페치될 수 있는 명령어 그룹을 형성할 수 있다. 런타임시, 프로세서는, 개별 명령어들을 디코딩하지 않고도 효과적으로 명령어 스트림 내 의존성들 및 병렬성을 디코딩하기 위해 명령어 그룹의 명령어들로부터 체이닝 비트들을 리어셈블리한다. 이 정보는 명령어 발행에 대해 필요한 파이프라인 제어 신호들을 발생시키는데 이용될 수 있어, 파이프라인식 프로세서 아키텍처들에서 NOP 명령어들 또는 복잡한 명령어간 의존성 체크 하드웨어에 대한 필요성이 제거된다. 이 프로시저는, 프로그래머들에게 가시적이지 않은 파이프라인 효과들, 예컨대 긴 로드 파이프라인 스톨들, 분기 해상도, 및 다른 긴 레이턴시 오퍼레이션들과 공존할 수 있다. 각각의 명령어는 독립적으로 어셈블리 가능하기 때문에, 명령어 그룹의 중심부로의 점핑이 허용될 수 있다. 그러나, 명령어 그룹의 중심부로의 점핑시, 전체 그룹에 대한 의존성 비트들은 체이닝 비트 디코딩을 위해 재구성될 필요가 있다. 컴파일러가 명령어 의존성들을 분석하고 체이닝 비트들을 발생시키면, 프로그래머는, 임의의 파이프라인 효과들을 효과적으로 인식(see)하지 못하며 해저드들과 관련없이, 머신을 프로그래밍할 수 없다.
[0053] 상이한 프로세서 구현들과 호환가능한 일 세트의 체이닝 비트들을 정의하는 것이 가능할 수 있지만, 대부분의 구현들에 대해, 체이닝 비트들은 구현에 종속될 수 있다: 이들의 의미론은 이들이 프로그램되었던 프로세서상에서만 해석될 수 있다. 일 예에서, 싱글-발행 파이프라인식 프로세서는 하나의 체이닝 비트에 대해 단지 2개의 해석들만을 가질 수 있다. "0" 값은 체이닝 없음(no chaining)을 표시하고 "1" 값은 명령어가 다음 명령어와 체이닝될 수 있음을 표시한다. 따라서, 싱글-발행 파이프라인식 프로세서에서, 체이닝 비트는, 명령어들이 독립적인지 그리고 해저드들을 갖는지 아니면 갖지 않는지 여부만을 표시할 수 있다. 다른 예에서, 체이닝 비트의 로직은 체이닝을 표시하기 위해 "0"으로 해석되고 체이닝 없음을 표시하기 위해 "1"로 해석되도록 반전될 수 있다.
[0054] 도 5는, 2개의 독립적 명령어들(502, 504)의 예(500)를 도시하며, 명령어들(502, 504) 각각은, 정보 체이닝을 위해 예비된 대응 비트(506, 508)를 갖는다. 곱셈(multiply) 명령어(502)의 체이닝 비트(506)는 1로 설정되는데, 이는 덧셈(add) 명령어(504)가 독립적이며, 병렬로 실행될 수 있기 때문이다. 특정 프로세서의 용량들에 기초하여 임의의 수의 비트들이 함께 체이닝될 수 있다.
[0055] 체이닝을 이용함으로써, 의존성들이 명령어들의 시퀀스에 걸쳐 인코딩될 수 있다. 다른 예에서, 3-발행 머신은 8개의 가능한 의존성 타입들을 인코딩하기 위해 3개의 체이닝 비트들(각각의 명령어로부터 하나)을 이용할 수 있다. 이런 의미에서, 체이닝은 명령어들의 그룹들로 확장될 수 있다. 예를 들어, 3개의 명령어들의 체이닝 비트들로부터 디코딩된 "000"은, 현재 그룹내 명령어들 모두가 체이닝되지 않았고 다음 그룹의 명령어들이 현재 그룹의 명령어들과 체이닝되지 않을 수도 있다는 것으로 해석될 수 있다.
[0056] 일 예에서, 다중 발행 프로세서에서, 체이닝 비트들 중 하나가 그룹간 병렬성을 위해 예비되어, 현재 그룹의 명령어 이후의 다음 그룹의 명령어들이 현재 그룹의 명령어들과 함께 임의의 제어 또는 데이터 의존성들을 포함하는지를 표시할 수 있다. 어떠한 의존성들도 없다면, 다음 그룹의 명령어들은 임의의 파이프라인 스톨들 없이 현재 그룹의 명령어들과 동시에 파이프라인 아래로(down) 발행될 수 있다. 명령어 그룹내 다른 체이닝 비트들은 현재 명령어 그룹에서의 명령어들 간의 의존성들 및 병렬성을 표시하는 그룹내(intra-group) 병렬성 정보를 설명할 수 있다.
[0057] 체이닝 비트들은 또한, 레지스터 파일로부터 이를 다시 판독하기 보다는 바이패스 값을 사용하여 프로세서에게 알리는 것과 같은 성능 개선 기술들을 인코딩할 수 있다. 일부 상황들에서, 이는 프로세서에 의해 낭비되는 전력을 감소시킬 수 있다.
[0058] 유리하게, 병렬성 및 의존성들 양자 모두가 일 그룹의 명령어들에 걸쳐 인코딩될 수 있다. 체이닝 비트들은 명령어간 의존성들, 그룹간 의존성들 및 성능 최적화들을 인코딩하기 위해 이용될 수 있으며, 이는 실행 동안, 파이프라인식-프로세서에서 필요한 파이프라인 제어 신호들을 신속하게 발생시키는 것을 도와 복잡한 의존성 체크 하드웨어에 대한 필요성을 없앤다.
[0059] 도 6은, 본 개시내용의 예들이 동작할 수 있는, 체이닝된 명령어들을 디코딩하기 위한 멀티스레드형 컴퓨터 프로세서(600) 내의 하드웨어 스레드 유닛의 일 예를 도시한다. 예에서, 멀티스레드형 프로세서(600)는 복수의 하드웨어 스레드 유닛들(602a-602n)을 포함할 수 있다. 하드웨어 스레드 유닛들(602a-602n) 각각은 프로그램 카운터(PC)(603), 명령어 메모리(604), 명령어 디코더(606)("제어(control)"로 라벨링됨), 레지스터 파일(608), ALU(arithmetic logic unit)들(610a-610n)을 포함하는 하나 또는 그 초과의 파이프라인 실행 유닛들, 및 데이터 메모리(612)를 포함할 수 있다.
[0060] 일 예에서, 명령어들의 "그룹들"은 명령어 메모리(604)로부터 판독 및 디코딩될 수 있고 디코딩된 정보는 데이터 경로의 오퍼레이션들 및 파이프라인들을 제어하는 제어 블록(606)을 나가는 제어 신호들을 발생시키기 위해 이용될 수 있다. 다이렉트 레지스터 레퍼런스들은 레지스터 파일(608)(레지스터들(608)로 라벨링됨)로 송신될 수 있고 레지스터 파일(608) 내에 포함된 데이터는 하나 또는 그 초과의 ALU(arithmetic logic unit)들(610a-610n)(예에서, 명령어 파이프라인들 및 실행 유닛들(미도시)을 포함할 수 있음)로 송신될 수 있다. 데이터 메모리(612)에 저장된 오퍼레이션 결과들이 다시 레지스터 파일(608)에 기록될 수 있다. 프로그램 카운터(PC)(603)가 업데이트될 수 있고, 다음 명령어가 명령어 메모리(604)로부터 페치될 수 있다. 컴퓨터 프로세서(600)의 전체 설명은 인용에 의해 전체가 본원에 포함되는 "www.cise.ufl.edu/~mssz/CompOrg/CDA-proc.html"에서 확인될 수 있다.
[0061] 일 예에서, 멀티스레드형 프로세서(600)의 엘리먼트들(603-612) 중 하나 또는 그 초과의 것이 하드웨어 스레드 유닛들(602a-602n)에 걸쳐 공유될 수 있다는 것이 당업자들에 의해 인식될 것이다. 예를 들어, 엘리먼트들(603-612) 중 하나 또는 그 초과의 것(예를 들어, 하나 또는 그 초과의 ALU(arithmetic logic unit)들(610), 명령어 메모리(I-캐시)(604), 데이터 메모리(612) 등)은, 엘리먼트들(603-612) 중 하나 또는 그 초과의 것이 프로세서 상태를 나타내지 않는 경우 하드웨어 스레드 유닛들(602a-602n) 사이에서 공유될 수 있다. 반대로, 예에서, 프로세서 상태를 나타내는 엘리먼트들(603-612) 중 임의의 것이 하드웨어 스레드 유닛들(602a-602n) 각각에 대해 복제될 필요가 있다.
[0062] 도 7은, 본 개시내용의 예들이 동작할 수 있는, 명령어 그룹(706)의 명령어들(704a-704n)로부터 체이닝 비트(702)를 추출하고, 추출된 체이닝 비트(702)를 디코딩하고, 파이프라인 제어 신호들을 발생시키는 장치(700)의 일 예를 도시한다. 일 예에서, 장치(700)는 도 6에서 제어 블록(606)으로 도시된 다른 제어 신호들로서 파이프라인 스테이지에서 구현될 수 있다. 다른 예에서, 장치(700)는 정보의 디코딩을 단순화시키기 위해 파이프라인 스테이지에서 조기에 구현될 수 있다. 도 7에서, 체이닝 비트 디코더(708)는 추출된 체이닝 비트들(702)로부터 수신되는 인코딩된 체이닝 비트 조합들의 의미론을 디코딩하도록 구성될 수 있으며 명령어 발행 제어기(710)에 대한 적절한 제어들을 발생시키도록 구성될 수 있다. 이를테면, 명령어 발행 제어기(710)는 제어 신호들(714)을 사용하여 명령어 그룹내 명령어들의 (직렬, 병렬 또는 부분적 병렬) 발행을 제어할 수 있으며 또는 명령어 발행 제어기(710)는 제어 신호들(716)을 사용하여 다음 명령어 그룹의 발행을 제어할 수 있다. 명령어 발행 제어기(710) 체이닝 비트 디코더(708)로부터 커맨드들을 수신하도록 구성될 수 있으며, 필요한 경우, 파이프라인식 스테이지들(718a-718n)(예를 들어, 파이프라인 클록들(724a-724n), 파이프라인 스테이지 로직(726a-726n), 및 대응하는 레지스터들(728a-728n)을 포함)에서 명령어 발행을 스톨링시키도록 파이프라인 제어 신호들을 발생시킬 수 있다. 파이프라인 상태 모니터(720)는 파이프라인 스테이지(718)에서 현재 실행되는 명령어들을 모니터링하고 명령어 발행 제어기(710)에 피드백(722)을 제공하여 스톨 이후 명령어 발행을 재시작하도록 구성될 수 있다. VLIW 및 가시적 파이프라인 설계들에서와 달리, 본 개시내용의 예들에서의 중요한 고려사항은, 컴파일러 또는 프로그래머가 임의의 파이프라인 효과들을 볼 수 없도록 파이프라인 제어들이 발생된다는 것이다.
[0063] 도 8은, 의존성 정보, 병렬성 정보, 및 성능 최적화들이 명령어들의 시퀀스로 인코딩된 하위(underlying) 명령어들을 검사하지 않고 디코딩되는 것을 가능하게 하는 방법(800)의 예를 예시하는 흐름도이다. 방법(800)은 도 6의 컴퓨터 프로세서(600)에 의해 수행될 수 있으며, 일 예에서는 도 7의 장치(700)(예를 들어, 회로, 전용 로직, 프로그램가능 로직, 마이크로코드 등)를 포함할 수 있다.
[0064] 도 8에 도시된 것처럼, 블록(805)에서, 컴퓨터 프로세서(600)의 체이닝 비트 디코더(700)는 명령어 스트림을 수신한다. 블록(810)에서, 장치(700)의 체이닝 비트 디코더(708)는 명령어 스트림으로부터 일 그룹의 명령어들(예를 들어, 명령어 그룹(706)의 명령어들(704a-704n))을 선택한다. 블록(815)에서, 체이닝 비트 디코더(708)는 명령어 스트림(704a-704n)의 각각의 명령어(예를 들어, 704a-704n)로부터 지정된 비트(702)를 추출하여 체이닝 비트들(702)의 시퀀스를 생성한다. 블록(820)에서, 체이닝 비트 디코더(708)는 체이닝 비트들(702)의 시퀀스를 디코딩한다. 블록(825)에서, 체이닝 비트 디코더(708)는 디코딩된 체이닝 비트들(702)의 시퀀스를 고려하여, 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(706)의 명령어들(704a-704n)) 중 2 또는 그 초과의 명령어들 간의 제로 또는 그 초과의 의존성들을 식별한다. 예에서, 선택된 그룹의 명령어들(704a-704n) 중 2 또는 그 초과의 명령어들 간에 식별된 의존성은 제어 의존성 또는 데이터 의존성일 수 있다.
[0065] 블록(830)에서, 체이닝 비트 디코더(708)는, 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(706)의 명령어들(704a-704n)) 중 2 또는 그 초과의 명령어들 간의 식별된 제로 또는 그 초과의 의존성들을 고려하여, 하나 또는 그 초과의 파이프라인 스테이지(718)로 하여금, 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(706)의 명령어들(704a-704n))을 실행하게 하기 위해 제어 신호들을 출력한다. 체이닝 비트들(702)의 시퀀스는 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(706)의 명령어들(704a-704n))에 있는 명령어들 어느 것도 디코딩하지 않고 체이닝 비트 디코더(708)에 의해 디코딩될 수 있다.
[0066] 예에서, 디코딩된 체이닝 비트들(702)의 시퀀스에서의 나머지 비트들은, 선택된 그룹의 명령어들(704a-704n)에서의 2 또는 그 초과의 명령어들이 파이프라인 스테이지들(718)에 의해 병렬로 실행될 수 있다는 것을 명령어 발행 제어기(710)에 표시할 수 있다. 다른 예에서, 디코딩된 체이닝 비트들(702)의 시퀀스에서의 나머지 비트들은, 선택된 그룹의 명령어들(704a-704n)에서의 2 또는 그 초과의 명령어들이 파이프라인 스테이지들(718)에 의해 직렬로 실행될 수 있다는 것을 명령어 발행 제어기(710)에 표시할 수 있다. 다른 예에서, 디코딩된 체이닝 비트들(702)의 시퀀스에서의 나머지 비트들은, 선택된 그룹의 명령어들(704a-704n)에서의 2 또는 그 초과의 명령어들이 파이프라인 스테이지들(718)에 의해 병렬로 실행되어야 한다는 것을 명령어 발행 제어기(710)에 표시할 수 있다. 다른 예에서, 디코딩된 체이닝 비트들(702)의 시퀀스에서의 나머지 비트들은, 선택된 그룹의 명령어들이 파이프라인 스테이지들(718)에 의해 부분적으로는 병렬로 그리고 부분적으로는 직렬로 실행될 수 있다는 것을 명령어 발행 제어기(710)에 표시할 수 있다.
[0067] 예에서, 선택된 그룹의 명령어들(704a-704n)에 배치될 명령어들의 수는 프로세서(600)의 발행 폭에 기초할 수 있다.
[0068] 상기 예들에서, 체이닝 비트 디코더(708)는, 체이닝 비트들(702)를 사용하여, 선택된 그룹의 명령어 내의 그룹내 종속들을 식별하도록 구성될 수 있다. 이에 따라, 블록(835)에서, 체이닝 비트 디코더(708)는, 선택된 그룹의 명령어들(704a-704n) 및 연관된 체이닝 비트들(702)을 제 1 그룹의 명령어들 및 제 2 그룹의 명령어들로 나눠 (예를 들어, 그룹들 사이의) 그룹내 의존성들을 식별할 수 있다.
[0069] 블록(840)에서, 체이닝 비트 디코더(708)는 디코딩된 체이닝 비트들(702)의 시퀀스에 기초하여 명령어 스트림으로부터 선택된 제 1 그룹의 명령어들 중의 명령어와 제 2 그룹의 명령어들 중의 명령어 간의 제로 또는 그 초과의 의존성들을 식별할 수 있다. 블록(845)에서, 체이닝 비트 디코더(708)는, 제 1 그룹의 명령어들 중의 명령어와 제 2 그룹의 명령어들 중의 명령어 간의 식별된 제로 또는 그 초과의 의존성들에 기초하여, 하나 또는 그 초과의 파이프라인 스테이지들(718)로 하여금 제 2 그룹의 명령어들을 실행시키게 하기 위해 제어 신호들을 출력할 수 있다. 예에서, 디코딩된 체이닝 비트들(702)의 시퀀스에서의 비트는 제 1 그룹의 명령어들이 제 2 그룹의 명령어들과 병렬로 실행될 수 있다는 것을 표시할 수 있다. 제 1 그룹의 명령어들 중 하나 또는 그 초과의 명령어들과, 제 2 그룹의 명령어들 중 하나 또는 그 초과의 명령어들 간의 식별된 의존성은 제어 의존성들 또는 데이터 의존성들일 수 있다.
[0070] 예에서, 디코딩된 체이닝 비트들(702)의 시퀀스에서의 하나 또는 그 초과의 비트들은 프로세서(600)의 성능을 최적화시키도록 동작가능할 수 있다. 예에서, 디코딩된 체이닝 비트들(702)의 시퀀스는 파이프라인 스테이지들(718)에 대한 파이프라인 제어 신호들로서 기능하도록 동작가능할 수 있다.
[0071] 싱글-발행 파이프라인식 프로세서
[0072] 체이닝의 가강 간단한 케이스로는 싱글-발행 파이프라인식 프로세서가 있으며, 이는 어떠한 명령어간 의존성들도 없는 경우 클록 사이클 당 하나의 명령어를 발행할 수 있다. 전형적인 파이프라인식-프로세서에 대해 도 2에 도시된 것처럼, 명령어간 의존성들이 존재한면, 파이프라인은, 의존성들이 해결될 때까지 스톨링되어야 한다. 체이닝 비트가 "1"로 설정되면, 이는, 다음 명령어가 현재 명령어 체인 내 임의의 명령어들과 어떠한 제어 또는 데이터 의존성들도 갖지 않는다는 표시이다. 따라서, 명령어가 즉시 발행될 수 있다. 체이닝 비트가 "0"으로 설정되면, 이는, 다음 명령어가 현재 명령어 체인 내 적어도 하나의 명령어와 제어 및/또는 데이터 의존성을 갖는다는 표시이다. 따라서, 이 명령어의 실행은, 현재 체인의 모든 명령어들이 실행을 완료하고 파이프라인을 나갈 때까지 시작될 수 없다.
[0073] 도 9는 전형적 싱글-발행 파이프라인식 프로세서에서의 체이닝을 입증하는데 사용되는 사전-최적화(pre-optimized) 코드의 예를 도시한다. 도 9는, 사이즈 NUM의 2개 소스 어레이들(레지스터들 src1 , src2의 포인터들)을 곱하고 목적지 어레이(레지스터 dst의 포인터)에 결과를 저장하는 예시적 루프를 구현하는것에 대해 C 언어 및 어셈블리 언어 양자 모두로 도시한다. 코드는 또한 메모리 로케이션 mac에 곱셈 결과를 누적시킨다.
[0074] 프롤로그(prologue)에서, 코드는 저장-업데이트 명령어(stwu)를 사용하여 (스택 포인터 레지스터 r1에 의해 포인팅되는) 스택상에 공간을 예비하고, 스크래치 레지스터들의 값들을 보관(save)하며, mac의 초기 값을 로딩하며, 카운터 레지스터 cnt의 값을 클리어한다. 루프내에서, 코드는 곱해지고 누산될 필요가 있는 소스 값들을 로딩하며, 곱셈 누산(multiply accumulate)을 수행하며, 곱셈 및 누산 오퍼레이션들로부터의 결과를 보관한다. cmp 명령어는, 비교 값들이 동일할 경우 flg를 0으로 또는 비교가 같지 않을 경우 1로 설정한다. jc 명령어는 flg가 1과 같을 경우 루프로 다시 점핑한다. 에필로그에서, 코드는 스택으로부터 스크래치 레지스터들에 오리지널 값들을 복원하고, 스택상의 예비된 공간을 해제하며, j 명령어를 사용하여 무조건적으로 프로시저를 나간다.
[0075] 도 10은, 코드에서 가능한 조기에 독립적 명령어들 모두를 이동시킴으로써, 도 9의 루프내에서 명령어들을 재순서화하는 최적화된 어셈블리 언어 코드의 예를 도시한다.
[0076] 도 11은 도 6 및 도 7에서 앞서 논의된 싱글-발행 파이프라인식 프로세서의 의미론에 따라 구성된 체이닝 비트들을 갖는, 도 10의 코드를 도시한다. 예를 들어, 명령어 1에 대한 체이닝 비트는 0으로 설정되며, 이는 제 2 명령어가 제 1 명령어에 의해 발생된 레지스터 r1의 값에 의존하기 때문이다. 명령어 2에 대한 체이닝 비트는 1로 설정되며, 이는 명령어 3이 현재 명령어 체인에서의 명령어들과 어떠한 의존성들도 갖지 않고 병렬로 실행될 수 있기 때문이다. 명령 어 8에 대한 체이닝 비트는 0으로 설정되며, 이는 다음 명령어(명령어 9)가, 현재 명령어 체인에 있는 명령어 6과 기록 후 판독(read-after-write) 의존성을 갖기 때문이다.
[0077] 도 12는 도 11의 명령어 스트림에 대한 명령어 체이닝을 사용하는 도 6 및 도 7의 싱글-발행 프로세서에 대한 실행 스냅샷을 도시한다. 의존성이 체이닝 비트들로부터 검출되지 않는다면(체이닝 비트가 0) 하나의 명령어가 각각의 모든 클록 사이클마다 발행될 수 있다. 체이닝 비트가 0일 때마다, 다음 명령어는 발행되지 않고 명령어 발행 파이프라인은 모든 실행 명령어들이 완료될 때까지 n x 사이클들 동안 스톨링된다. 이는 프로세서 파이프라인에서의 연동 하드웨어에 대한 필요성을 없앤다. 현재 명령어 체인으로부터의 명령어들 실행이 완료되면, 새로운 명령어 체인으로부터 스톨링된 명령어가 발행될 수 있다.
[0078] 도 12에서, 스톨 사이클들은 스톨링된 명령어의 클록 사이클 카운트에 부가되어 명령어가 발행되도록 대기했던 사이클들의 수를 표시한다. 예를 들어, 명령어 1은 하나의 클록 사이클에서 발행된다. 명령어 1의 체이닝 비트가 0이기 때문에, 명령어 2는 다음 클록 사이클에서 발행될 수 없다. 파이프라인은 명령어 1이 실행을 완료할 때까지 n 1 클록 사이클들 동안 스톨링된다. 명령어 2는 스톨 이후 하나의 클록 사이클에서 발행되며 이에 따라 명령어 2는 1+n 1 이후 발행된다. 명령어 18에서 jc와 같은 분기 명령어는 파이프라인이 플러싱되게 할 것이다. 이에 따라, 분기가 취해졌는지(명령어 7) 또는 취해지지 않았는지(명령어 19) 여부와 상관없이, 분기 이후의 명령어는 그가 발행될 수 있기 전에 n 5 클록 사이클들 동안 대기해야 할 것이다. 처음에 루프에 진입하는 동안, 명령어 7의 발행에는 단지 하나의 클록 사이클이 소요되는 반면, 재진입 동안, 이는 1+n 5 클록 사이클들이 소요된다.
[0079] 듀얼-발행 파이프라인식 프로세서
[0080] 듀얼-발행 파이프라인식 프로세서는, 어떠한 명령어 의존성들도 없는 경우 각각의 모든 사이클마다 2개의 명령어들(명령어 그룹)을 발행하도록 구성될 수 있다. 명령어 그룹들 간에 의존성이 있는 경우, 파이프라인은, 이 의존성이 해결될 때까지 스톨링된다. 명령어 그룹 내에 의존성이 있다면, 명령어 그룹내 명령어들은 직렬로 발행되는데, 즉 제 1 명령어가 발행되고 제 1 명령어가 실행을 완료하고 파이프라인을 나갈 때까지 제 2 명령어는 스톨링된다.
[0081] 명령어 그룹에서의 각각의 명령어는 체이닝 비트를 갖는다. 이에 따라, 듀얼-발행 프로세서에서, 명령어 그룹당 이용가능한 2개의 체이닝 비트들이 있고 따라서 4개의 시나리오들이 인코딩될 수 있다. 예에서, 하나의 체이닝 비트는 수직 병렬성(그룹간 병렬성)을 표시하는데 사용될 수 있고, 제 2 체이닝 비트는 수평 병렬성(그룹내 병렬성)을 표시하는데 사용될 수 있다.
[0082] 도 13은 듀얼-발행 파이프라인식 프로세서에 대한 일 세트의 명령어 체이닝 의미론의 일 예를 도시한다. 체이닝 비트들 i1 및 i2는, 각각, 명령어 그룹의 제 1 및 제 2 명령들로부터 취해질 수 있다. 체이닝 비트 i1는 그룹내 병렬성 비트이다. 그룹내 병렬성 비트가 1이면, 그룹의 제 2 명령어는 그룹의 제 1 명령어와 병렬로 발행될 수 있다. 그룹내 병렬성 비트가 0이면, 제 2 명령어는 제 1 명령어가 실행을 완료할 때까지 대기해야 한다. 체이닝 비트 i2는 그룹간 병렬성 비트이다. 그룹간 병렬성 비트가 1이면, 다음 실행 그룹은 현재 실행 그룹 뒤 다음 클록 사이클에서 파이프라인에 진입할 수 있다. 그룹간 병렬성 비트가 0이면, 다음 실행 그룹은, 현재 실행 그룹이 실행을 완료할 때까지 대기해야 한다.
[0083] 도 14는 듀얼-발행 파이프라인식 프로세서에 대한 명령어 체이닝의 일 예를 도시한다. 도 14는 듀얼-발행 파이프라인식 프로세서에 대해 가능한 명령어 체인 구성을 표시하기 위해, 도 9에 도시된 예시적 코드를 사용한다. 도 15는 도 14의 듀얼-발행 명령어 스트림에 대한 실행 스냅샷의 일 예를 도시한다. 2개의 명령어들은 체이닝 비트들이 어떠한 의존성들을 표시하지 않는 경우 각각의 모든 클록 사이클마다 발행될 수 있다. 제 1 명령어 그룹에서, 그룹내 병렬성 비트는 그룹의 명령어들 내의 의존성을 표시하기 위해 0으로 설정된다. 이는 명령어 1이 발행되고, 명령어 1이 n 1 사이클들에서의 실행을 완료할 때까지, 명령어 2가 스톨링되게 한다. 제 2 명령어 그룹은 1로 설정된 그룹내 병렬성 비트를 가지며 이에 따라 명령어 3 및 명령어 4는 함께 발행된다. 제 2 명령어 그룹에 대한 그룹간 병렬성 비트는 또한 1로 설정되며 이에 따라 제 3 명령어 그룹은 임의의 파이프라인 스톨들 없이 파이프라인 아래에 발행된다. 제 4 명령어 그룹에 대한 그룹간 병렬성 비트가 0으로 설정되며, 이로써 현재 체인의 모든 명령어들이 실행을 마칠 때까지 제 5 그룹에 대한 명령어 발행이 스톨링된다. 명령어 7에서의 루프로의 재진입은 상이한 수의 스톨 사이클들을 야기시키며, 이는 루프 마지막에서 분기 명령어(명령어 18)가 파이프라인으로 하여금 모든 실행 명령어들을 플러싱하게 할 수 있기 때문이다.
[0084] 3-발행 파이프라인식 프로세서
[0085] 3-발행 파이프라인식 프로세서는, 어떠한 명령어 의존성들도 없는 경우 각각의 모든 사이클마다 3개의 명령어들(명령어 그룹)을 발행할 수 있다. 명령어 그룹들 간에 의존성이 있다면, 파이프라인은 이 의존성이 해결될 때까지 스톨링된다. 명령어 그룹 내에 의존성이 있다면, 명령어 그룹내 명령어들은 체이닝 비트들에 의해 표시된 것처럼 직렬로 또는 부분적으로는 병렬로 발행된다. 명령어 그룹에서의 각각의 명령어는 단일 체이닝 비트를 갖는다. 따라서, 3-발행 프로세서에는, 8개의 의미론 조합들을 산출하는, 명령어 그룹당 이용가능한 3개의 체이닝 비트들이 존재한다. 하나의 체이닝 비트는 (명령어 그룹들에 걸쳐) 수직 병렬성을 표시하는데 사용될 수 있고 다른 2개의 체이닝 비트들은 (명령어 그룹내에서의) 수평 병렬성을 표시하는데 사용될 수 있다.
[0086] 도 16은 3-발행 프로세서에서 명령어 체이닝에 대한 의미론의 일 예를 도시한다. 도 16에 표시된 체이닝 비트 조합들에 대한 명령어 체이닝에 대한 의미론의 예는 수평 병렬성에서의 최대 유연성(flexibility)을 제공한다. 도 16에서의 x 값은 체이닝 비트가 0 또는 1일 수 있다는 것을 표시한다. 체이닝 비트들 i1, i2 및 i3은, 각각, 명령어 그룹의 제 1, 제 2 및 제 3 명령어들로부터 취해질 수 있다. 체이닝 비트들 i1 및 i2는 그룹내 병렬성 비트들이다. i1 또는 i2가 1이면, 그룹에서의 다음 명령어는 그룹에서의 현재 명령어와 병렬로 발행될 수 있다. i1 또는 i2가 0이면, 다음 명령어는 현재 실행중인 명령어들이 실행을 완료할 때까지 대기해야 한다. 체이닝 비트 i3는 그룹간 병렬성 비트이다. i3가 1이면, 다음 실행 그룹은 현재 실행 그룹 뒤 다음 클록 사이클에서 파이프라인에 진입할 수 있다. i3가 0이면, 다음 실행 그룹은 현재 실행 그룹이 실행을 완료할 때까지 대기할 필요가 있다.
[0087] 수평 병렬성에서의 최고(full) 유연성이 필요하지 않는 경우, 2개의 체이닝 비트들이 수직 및 수평 병렬성을 인코딩하는데 충분할 수 있다(3개의 모든 명령어들이 함께 발행되거나 또는 함께 발행되지 않음). 추가 정보를 인코딩하기 위해 제 3 체이닝 비트가 사용될 수 있다.
[0088] 도 17은 도 9에 도시된 예시적 코드에 대한 3-발행 파이프라인식 프로세서에 대해 구성된 명령어 체인의 일 예를 도시한다. 도 18은 도 17의 3-발행 명령어 스트림에 대한 실행 스냅샷의 예를 도시한다. 도 18에 도시된 것처럼, 실행은, 도 16에 설명된 것과 같은 명령어 그룹 내 3 체이닝 비트들의 의미론을 따른다. 명령어 그룹들에 걸친 명령어 발행은, 명령어 12와 명령어 13 간의 경우처럼 그룹간 병렬성 비트(i3)가 0으로 설정되는 경우 스톨링된다. 그룹내 명령어들은 또한, 그룹내 병렬성 비트들(i1, i2)에 기초하여 완전히 병렬로, 부분적으로 병렬로 또는 완전히 순차적인 방식으로 발행된다.
[0089] 4-발행 파이프라인식 프로세서
[0090] 4-발행 파이프라인식 프로세서는 어떠한 명령어 의존성들도 없는 경우 각각의 모든 사이클마다 4개의 명령어들을 발행한다. 명령어 그룹들 간에 의존성이 있다면, 파이프라인은 의존성이 해결될 때까지 스톨링될 수 있다. 명령어 그룹내에 의존성이 있다면, 명령어 그룹내 명령어들은 체이닝 비트들에 의해 표시된 것처럼 직렬로 또는 부분적으로 병렬로 발행될 수 있다.
[0091] 명령어 그룹에서의 각각의 명령어는 단일 체이닝 비트를 갖는다. 따라서, 4-발행 프로세서에서는, 16개의 의미론 조합들을 산출하는, 명령어 그룹당 이용가능한 4개의 체이닝 비트들이 존재한다. 하나의 체이닝 비트는 (명령어 그룹들에 걸쳐) 수직 병렬성을 표시하는데 사용될 수 있고 다른 3개의 체이닝 비트들은 (명령어 그룹내 명령어들을 실행하는) 수평 실행을 위한 다른 가능성들을 표시하는데 사용될 수 있다.
[0092] 도 19는 4-발행 프로세서에 대한 일 세트의 명령어 체이닝 의미론의 일 예를 도시한다. 도 19에서의 x의 값은 체이닝 비트가 0 또는 1일 수 있다는 것을 표시한다. 체이닝 비트들 i1, i2, i3, i4은, 각각, 명령어 그룹의 제 1, 제 2, 제 3 및 제 4 명령어들로부터 취해질 수 있다. 체이닝 비트 i4는 그룹간 병렬성 비트이다. i4가 1이면, 다음 실행 그룹은 현재 실행 그룹 뒤 다음 클록 사이클에서 파이프라인에 진입할 수 있다. i4가 0이면, 다음 실행 그룹은 현재 실행 그룹이 실행을 완료할 때까지 대기해야 한다. 체이닝 비트들 i1, i2 및 i3은 그룹내 병렬성을 표시하는데 사용될 수 있다. 예에서, 체이닝 비트들 i1, i2 및 i3의 일부 조합들은 그룹(001x, 010x, 011x, 100x)의 명령어들 내에서의 가능한 병렬성을 표시하며, 다른 조합들은 그룹(101x, 110x, 111x)의 명령어들 내에서의 의무적 병렬성을 표시한다. 가능한 병렬성은 이용가능한 병렬성을 나타내지만, 프로세서는 이를 사용할 수도 있고 사용하지 않을 수도 있다. 결과들은, 명령어들이 병렬로 실행되든 또는 순차적으로 실행되든지 간에 동일하게 유지된다. 의무적 병렬성은 원하는 결과들을 획득하기 위해 명령어들이 병렬로 실행되어야 함을 표시한다.
[0093] 도 20은 의무적 병렬성에 대한 필요성을 예시하는 4-발행 프로세서에 대한 사전-최적화 코드의 예를 도시한다. 도 20은 사이즈 NUM의 어레이(레지스터 src의 포인터)의 짝수 및 홀수 엘리먼트들을 스왑핑하는(swap) 예시적 루프를 C 언어 및 어셈블리 언어로 도시한다. 예에 도시된 것처럼, C 코드는 스왑핑을 달성하기 위해 변수 tmp_swap를 사용한다. 어셈블리를 위해 변환될 때, tmp_swap는 스왑핑을 위해 사용되는 임시 레지스터가 될 것이다.
[0094] 그러나, 이용될 필요가 있는 레지스터들의 수를 줄이는 것이 목적이라면, 어셈블리 코드는 임시 레지스터를 소거하기 위해 다중-발행 파이프라인식 아키텍처를 레버리징할 수 있다. 2개의 명령어들이 병렬로 발행될 경우, 이들은 그들의 소스 레지스터들의 콘텐츠들을 파이프라인의 레지스터-판독 스테이지에서 판독하기도 하고 또한 결과들을 파이프라인의 나중 재기록(write-back) 스테이지에서 다시 기록하기도 한다. 이에 따라, 스왑 오퍼레이션은, 자신의 소스 레지스터들의 콘텐츠들을 함께 판독하기도 하고 그 다음 파이프라인의 나중 스테이지에서 스왑핑된 값들을 함께 다시 기록하기도 하는 2개의 이동 명령어들을 병렬로 발행함으로써 임시 레지스터 없이 달성될 수 있다. 그러나, 이는 2개의 명령어들이 병렬로 실행될 경우에만 작동할 것이다. 순차적으로 실행될 경우 결과들은 부정확할 것이다.
[0095] 프롤로그에서, 코드는 (스택 포인터 레지스터 r1에 의해 포인팅되는) 스택상에 공간을 예비하고, 스크래치 레지스터들의 값들을 보관(save)하며, 카운터 레지스터 cnt의 값을 클리어한다. 루프내에서, 코드는 스왑핑될 필요가 있는 소스 값들을 로딩하며, 스왑 오퍼레이션을 수행하고, 소스 어레이에 결과를 다시 보관한다. 루프내 2개의 mov 오퍼레이션들은, 이들이 병렬로 실행될 경우에만 레지스터들 12 및 13의 콘텐츠들을 직접 스왑핑한다는 것이 주목된다. cmp 명령어는 비교 값들이 동일하면 flg를 0으로 설정하고 또는 비교가 동일하지 않으면 1로 설정한다. jc 명령어는 flg가 1과 같을 경우 루프로 다시 점핑한다. 에필로그에서, 코드는 스택으로부터 스크래치 레지스터들에 오리지널 값들을 복원하고, 스택상의 예비된 공간을 해제하며, j 명령어를 사용하여 무조건적으로 프로시저를 나간다.
[0096] 도 21은 4-발행 프로세서에 대해 재-순서화된 최적화 코드의 일 예를 도시한다. 도 21은 독립적 명령어들을 원하는 로케이션들로 이동시킴으로써 루프내에서 명령어들의 재순서화가 수행되는 것을 도시한다.
[0097] 도 22는 도 21에 도시된 예시적 코드에 대한 4-발행 파이프라인식 프로세서에 대해 구성된 명령어 체인의 일 예를 도시한다. 앞서 표시된 것처럼, 체이닝 비트 i4는 그룹간 병렬성을 표시한다. 예를 들어, 제 1 명령어 그룹은 0으로 설정된 체이닝 비트 i4를 가지며, 이는 제 2 명령어 그룹이 발행될 수 있기 전에 제 1 명령어 그룹이 실행을 완료할 때까지 제 2 명령어 그룹이 대기할 필요가 있다는 것을 표시한다. 제 3 명령어 그룹은 1로 설정된 체이닝 비트 i4를 가지며, 이는 제 4 명령어 그룹이 명령어 그룹 3과 병렬로 발행될 수 있다는 것을 표시한다. 또한, 루프는 제 1 그룹에 있는 제 4 명령어인 명령어에서 시작된다는 것이 주목된다. 이는 명령어 그룹의 중간부로의 점핑이 허용된다는 것을 표시한다. 제 2 명령어 그룹에 대한 체이닝 비트 조합은 1,1,0,0이다. 체이닝 비트들 i1, i2 및 i3은 1,1,0으로 설정되며, 이의 의미론은, 명령어 그룹의 명령어들 1, 2, 3이 병렬로 발행되어야 한다는 점에서 도 19의 것들과 같다. 이는 명령어 6 및 명령어 7 에 의해 수행되는 스왑 오퍼레이션이 정확하게 달성되는 것을 보장한다. 마지막 명령어 그룹은 완료를 위한 나가기(exit) 명령어 이후 nop 명령어들로 패딩되었다.
[0098] 도 23은 도 22의 4-발행 명령어 스트림에 대한 실행 스냅샷의 일 예를 도시한다. 도 23에서, 실행은 도 19에 설명된 명령어 그룹 내 4 체이닝 비트들의 의미론을 따른다. 명령어 그룹들에 걸쳐 명령어 발행은 그룹간 병렬성 비트(i4)가 0으로 설정되는 경우 스톨링된다. 체이닝 비트들 i1, i2 및 i3에 의해 지시된 대로 그룹 내 명령어들이 실행된다. 명령어들 6 및 7은 원하는 스왑 결과들을 얻기 위해 병렬로 실행된다.
[0099] 일 예에서, 프로그래머는 컴퓨터 프로그램에서 명령어들의 그룹들 간의 의존성들을 식별할 수 있다. 이후 컴퓨터 프로그래머는, 컴파일러가, 식별된 의존성들을 도 6 및 도 7의 컴퓨터 프로세서에서 이용될 수 있는 체이닝 비트들을 사용하는 실행가능한 코드로 인코딩하게 허용하는 프로그래밍 기술들을 이용할 수 있다. 다른 예에서, 프로그래머는 앞서 언급된 의존성들을 직접 식별하는 것이 아니라 도 6 및 도 7의 컴퓨터 프로세서에 의해 실행될 프로그램을 컴파일링할 수 있고, 이 컴퓨터 프로세서에서 컴파일러는 의존성들을 식별하고 체이닝 비트들을 사용하는 실행가능한 코드를 컴파일링한다.
[00100] 도 24는, 의존성 정보, 병렬성 정보 및 성능 최적화들이 컴파일러를 사용하여 명령어들의 시퀀스로 인코딩되는 것을 가능하게 하기 위한 방법(2400)의 예를 예시하는 흐름도이다. 방법(2400)은, 예를 들어, 도 6 및 도 7의 컴퓨터 프로세서에 의해, 아래 도 25에서 설명되는 컴퓨터 프로세서에 의해, 또는 다른 타입들의 컴퓨터 프로세서들에 의해 수행될 수 있으며 하드웨어(예를 들어, 회로, 전용 로직, 프로그램가능한 로직, 마이크로코드 등), 소프트웨어(예를 들어, 프로세싱 디바이스 상에서의 실행 명령들), 또는 이들의 결합을 포함할 수 있다. 일 예에서, 방법(2400)은 도 25의 컴퓨터 프로세서의 컴파일러(2550)에 의해 수행될 수 있다.
[00101] 도 24에 도시된 것처럼, 의존성 정보, 병렬성 정보, 및 성능 최적화들이 명령어들의 시퀀스로 인코딩되는 것이 가능하도록 허용하기 위해, 블록(2405)에서, 프로세서(2502)상에서 실행되는 컴파일러(2550)가 명령어 스트림을 수신한다. 블록(2410)에서, 컴파일러(2550)는 명령어 스트림으로부터 일 그룹의 명령어들을 선택한다.
[00102] 블록(2415)에서, 컴파일러(2550)는 선택된 그룹의 명령어들 간의 제로 또는 그 초과의 명령어 스트림 의존성들을 식별한다. 블록(2420)에서, 컴파일러(2550)는, 인코딩된 체이닝 비트들의 시퀀스를 생성하기 위해, 선택된 그룹의 명령어들 간의 제로 또는 그 초과의 의존성들로 각각의 명령어의 비트를 인코딩한다.
[00103] 일 예에서, 인코딩된 체이닝 비트들의 시퀀스는 선택된 그룹의 명령어들에서 2 또는 그 초과의 명령어들이 병렬로 실행될 수 있다는 것을 표시할 수 있다. 다른 예에서, 인코딩된 체이닝 비트들의 시퀀스는 선택된 그룹의 명령어들에서 2 또는 그 초과의 명령어들이 직렬로 실행되어야 함을 표시할 수 있다. 다른 예에서, 인코딩된 체이닝 비트들의 시퀀스는 선택된 그룹의 명령어들에서 2 또는 그 초과의 명령어들이 병렬로 실행되어야 함을 표시할 수 있다. 다른 예에서, 인코딩된 체이닝 비트들의 시퀀스는 선택된 그룹의 명령어들이 부분적으로는 병렬로 그리고 부분적으로는 직렬로 실행될 수 있다는 것을 표시할 수 있다.
[00104] 예에서, 선택된 그룹의 명령어들에 배치될 컴파일러에 대한 명령어들의 수는, 선택된 그룹의 명령어들이 실행될 프로세서(예를 들어, 프로세서(600))의 발행 폭에 기초할 수 있다.
[00105] 예에서, 컴파일러는 선택된 그룹의 명령어들 내 2 또는 그 초과의 명령어들 간의 의존성을 제어 의존성 또는 데이터 의존성으로서 식별할 수 있다.
[00106] 예에서, 인코딩된 체이닝 비트들의 시퀀스에서의 하나 또는 그 초과의 비트들은 실행가능한 프로그램의 성능을 최적화시키도록 동작가능할 수 있다. 인코딩된 체이닝 비트들의 시퀀스는 파이프라인 제어 신호들로서 기능하도록 동작가능할 수 있다.
[00107] 블록(2425)에서, 컴파일러(2550)는 선택된 그룹의 명령어들을 제 1 그룹의 명령어 및 제 2 그룹의 명령어들로 나눌 수 있다. 블록(2430)에서, 컴파일러(2550)는 제 1 그룹의 명령어들과 제 2 그룹의 명령어들 간의 제로 또는 그 초과의 명령어 스트림 의존성들을 식별할 수 있다. 블록(2435)에서, 컴파일러(2550)는 인코딩된 체이닝 비트들의 시퀀스를 제 1 그룹의 명령어들과 제 2 그룹의 명령어들 간의 제로 또는 그 초과의 명령어 스트림 의존성들로 추가 인코딩할 수 있다. 예에서, 인코딩된 체이닝 비트들의 시퀀스에서의 비트는 제 1 그룹의 명령어들이 제 2 그룹의 명령어들과 병렬로 실행될 수 있다는 것을 표시할 수 있다.
[00108] 도 25는 컴퓨터 시스템(2500)의 예시적 형태의 머신에 대한 도식을 예시하며, 이 컴퓨터 시스템(2500) 내에서는, 머신으로 하여금 본원에서 논의된 방법들 중 임의의 하나 또는 그 초과의 것을 수행하게 하기 위한 일 세트의 명령어들이 실행될 수 있다. 일부 예들에서, 머신은 LAN, 인트라넷, 익스트라넷, 또는 인터넷으로 다른 머신들에 연결(예를 들어, 네트워킹)될 수 있다. 머신은 클라이언트-서버 네트워크 환경에서 서버 머신의 용량으로 동작할 수 있다. 머신은, 퍼스널 컴퓨터(PC), 셋톱 박스(STB), 서버, 네트워크 라우터, 스위치 또는 브릿지, 또는 해당 머신에 의해 취해질 오퍼레이션들을 특정하는 일 세트의 명령어들을 (순차적으로 아니면 이와 달리) 실행할 수 있는 임의의 머신일 수 있다. 추가로, 단지 하나의 머신이 예시되지만, "머신"이란 용어는 또한, 본원에서 논의된 방법들 중 임의의 하나 또는 그 초과의 것을 수행하기 위한 일 세트의(또는 다수의 세트들의) 명령어들을 개별적으로 또는 결합하여 실행하는 머신들에 대한 임의의 집합체를 포함하는 것으로 취해질 수 있다.
[00109] 예시적 컴퓨터 시스템(2500)은 프로세싱 디바이스(프로세서)(2502), 메인 메모리(2504)(예를 들어, ROM(read-only memory), 플래시 메모리, DRAM(dynamic random access memory) 예컨대 동기식 DRAM(SDRAM)), 정적 메모리(2506)(예를 들어, 플래시 메모리, SRAM(static random access memory)), 및 데이터 저장 디바이스(2516)를 포함하며, 이들은 버스(2508)를 통해 서로 통신한다.
[00110] 프로세서(2502)는 하나 또는 그 초과의 범용성 프로세싱 디바이스들, 예컨대 마이크로프로세서, 중앙 처리 장치(central processing unit) 등을 표현한다. 보다 구체적으로, 프로세서(2502)는 CISC(complex instruction set computing) 마이크로프로세서, RISC(reduced instruction set computing) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, 또는 다른 명령어 세트들을 구현하는 프로세서 또는 명령어 세트들의 조합을 구현하는 프로세서들일 수 있다. 프로세서(2502)는 또한, 하나 또는 그 초과의 특수 목적 프로세싱 디바이스들, 예컨대 ASIC(application specific integrated circuit), FPGA(field programmable gate array), DSP(digital signal processor), 네트워크 프로세서 등일 수 있다. 컴파일러(2550)는 본원에서 논의된 오퍼레이션들 및 단계들을 수행하도록 구성된 프로세서(2502)에 의해 실행될 수 있다.
[00111] 컴퓨터 시스템(2500)은 네트워크 인터페이스 디바이스(2522)를 더 포함할 수 있다. 컴퓨터 시스템(2500)은 또한, 비디오 디스플레이 유닛(2510)(예를 들어, LCD(liquid crystal display) 또는 CRT(cathode ray tube)), 영숫자 입력 디바이스(2512)(예를 들어, 키보드), 커서 제어 디바이스(2514)(예를 들어, 마우스), 및 신호 발생 디바이스(2520)(예를 들어, 스피커)를 포함할 수 있다.
[00112] 구동 유닛(2516)은 컴퓨터-판독가능 매체(2524)를 포함할 수 있으며, 컴퓨터-판독가능 매체(2524) 상에는, 본원에 설명된 방법들 또는 기능들 중 임의의 하나 또는 RM 초과의 것을 구현하는 하나 또는 그 초과의 세트들의 명령어들(예를 들어, 컴파일러(2550)에 의해 컴파일링될 명령어들)이 저장된다. 또한 컴파일러(2550)에 의해 컴파일링될 명령어들은, 또한 컴퓨터-판독가능 매체를 구성하는 컴퓨터 시스템(2500), 메인 메모리(2504) 및 프로세서(2502)에 의한 그들의 실행 동안, 완전히 또는 적어도 부분적으로, 메인 메모리(2504) 내에 그리고/또는 프로세서(2502) 내에 상주할 수 있다. 컴파일러(2550)에 의해 컴파일링될 명령어들은 추가로, 네트워크 인터페이스 디바이스(722)를 통해 네트워크(2526) 상에서 송신 또는 수신될 수 있다.
[00113] 컴퓨터-판독가능 저장 매체(2524)는 예에서 단일 매체인 것으로 도시되지만, "컴퓨터-판독가능 저장 매체"란 용어는 하나 또는 그 초과의 세트들의 명령어들을 저장하는 단일의 비일시적 매체 또는 다수의 비일시적 매체(예를 들어, 집중식 또는 분산식 데이터베이스, 및/또는 연관된 캐시들 및 서버들)를 포함하는 것으로 취해져야 한다. "컴퓨터-판독가능 저장 매체"란 용어는 또한, 머신으로 하여금 본 개시내용의 방법들 중 임의의 하나 또는 그 초과의 것을 수행하게 하며 머신에 의한 실행을 위한 일 세트의 명령어들을 저장, 인코딩 또는 전달할 수 있는 임의의 매체를 포함하는 것으로 취해져야 한다. 따라서, "컴퓨터-판독가능 저장 매체"란 용어는, 이로 제한되는 것은 아니지만 고체 상태 메모리들, 광학 매체 및 자기 매체를 포함하는 것으로 취해져야 한다.
[00114] 상기 설명에서, 다수의 상세사항들이 설명되었다. 그러나, 본 개시내용의 예들이 이들 특정 상세사항들 없이 실시될 수 있다는 것이 본 개시내용의 이점을 행하는 기술분야의 당업자들에게 명백할 것이다. 일부 예시들에서, 잘-알려진 구조들 및 디바이스들은 설명의 모호함을 방지하기 위해 상세하게 도시되기 보다는 블록도 형태로 도시된다.
[00115] 상세한 설명의 일부 부분들은, 컴퓨터 메모리 내 데이터 비트들에 대한 오퍼레이션들의 심볼 표현들 및 알고리즘들과 관련하여 제시된다. 이들 알고리즘적 설명들 및 표현들은 이들의 작업 실체를 다른 당업자들에게 가장 효과적으로 전달하기 위해 데이터 프로세싱 기술분야의 당업자들에 의해 사용되는 수단이다. 여기서 그리고 일반적으로 알고리즘은 원하는 결과를 유도하는 단계들의 일관성있는 시퀀스인 것으로 간주된다. 단계들은 물리적 양들의 물리적 조작들을 요구하는 것들이다. 통상, 필수적인 것은 아니지만, 이들 양들은 저장, 전달, 조합, 비교 및 아니면 조작될 수 있는 전기적 또는 자기적 신호들의 형태를 취한다. 이들 신호들을 비트들, 값들, 엘리먼트들, 심볼들, 캐릭터들, 용어들, 숫자 등으로서 지칭하는 것은 주로 일반적 사용의 이유로 때로 편리한 것으로 입증되었다.
[00116] 그러나, 이들 및 유사한 용어들 모두는 적절한 물리적 양들과 연관되는 것이며 이들 양들에 적용되는 단지 편의상 라벨들임을 명심해야 한다. 상기 논의로부터 명백한 것처럼 달리 특정하게 설명되지 않는다면, 설명 전반에 걸쳐, "수신하는", "기록하는", "유지하는" 등과 같은 용어들을 사용하는 논의들은, 컴퓨터 시스템의 레지스터들 및 메모리들 내에서 물리적(예를 들어, 전자식) 양들로 표현되는 데이터를 조작하고 이를 컴퓨터 시스템 메모리들 또는 레지스터들 또는 이러한 다른 정보 저장, 전송 또는 디스플레이 디바이스들 내에서 물리적 양들로 표현되는 유사한 다른 데이터로 변환하는, 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 디바이스의 오퍼레이션들 및 프로세스들을 지칭한다는 것이 인식될 것이다.
[00117] 본 개시내용의 예들은 본원에서 오퍼레이션들을 수행하기 위한 장치에 관한 것이다. 이 장치는 요구되는 목적들을 위해 특정하게 구성될 수 있거나 또는 컴퓨터에 저장된 컴퓨터 프로그램에 의해 선택적으로 활성화되거나 재구성되는 범용성 컴퓨터를 포함할 수 있다. 이러한 컴퓨터 프로그램은, 컴퓨터 판독가능 저장 매체, 예컨대, 이로 제한되는 것은 아니지만, 플로피 디스크들, 광학 디스크들, CD-ROM들, 및 자기-광학 디스크들, ROM(read-only memory)들, RAM(andom access memory)들, EPROM들, EEPROM들, 자기 또는 광학 카드들을 포함하는 임의의 타입의 디스크, 또는 전자 명령어들을 저장하는데 적합한 임의의 타입의 매체에 저장될 수 있다.
[00118] 본원에서 제시되는 알고리즘들 및 디스플레이들은 본질적으로 임의의 특정한 컴퓨터 또는 다른 장치에 관련되지 않는다. 다양한 범용성 시스템들은 본원의 교시들에 따른 프로그램들과 사용될 수 있거나, 이는 요구되는 방법 단계들을 수행하기 위해 보다 특정화된 장치를 구성하는데 편리하다는 것이 입증될 수 있다. 다양한 이들 시스템들에 대한 예시적 구조가 본원의 설명으로부터 드러났다. 추가로, 본 개시내용은 임의의 특정한 프로그래밍 언어를 참조로 설명되지 않았다. 다양한 프로그래밍 언어들이 본원에 설명된 바와 같이 본 개시내용의 교시들을 구현하는데 사용될 수 있다는 것을 인식될 것이다.
[00119] 상기 설명은 예시적인 것이며 제한되지 않은 것으로 의도됨을 이해해야 한다. 많은 다른 예들은 상기 설명을 읽고 이해할 때 당업자에게 명백해질 것이다. 따라서, 본 개시내용의 범주는, 첨부된 청구항들이 수반되는 등가물들의 전체 범주와 함께, 이들 청구항들을 참조로 결정되어야 한다.
Claims (29)
- 프로세서 실행가능한 명령어들을 프로세싱하기 위한 방법으로서,
프로세서에 의해, 명령어 스트림으로부터 일 그룹의 명령어들을 선택하는 단계;
상기 프로세서에 의해, 상기 선택된 그룹의 명령어들의 각각의 명령어로부터 개개의 체이닝 비트(chaining bit)를 추출하는 단계;
상기 프로세서에 의해, 체이닝 비트들의 조합을 형성하기 위해 추출된 체이닝 비트들을 리어셈블리(reassembling)하는 단계 ― 상기 체이닝 비트들의 조합은 상기 선택된 그룹의 명령어들에 대한 복수의 명령어 발행 타입들을 나타내고, 상기 복수의 명령어 발행 타입들은 그룹내(intra-group) 병렬 실행 및 그룹간(inter-group) 병렬 실행을 포함함 ―;
상기 프로세서에 의해, 상기 복수의 명령어 발행 타입들 중 제 1 명령어 발행 타입을 결정하기 위해 상기 체이닝 비트들의 조합을 디코딩하는 단계;
상기 프로세서에 의해, 상기 제 1 명령어 발행 타입에 기초하여, 상기 선택된 그룹의 명령어들 중 어느 것도 완전히 디코딩하는 것 없이 상기 선택된 그룹의 명령어들 간의 제로 또는 그 초과의 명령어 스트림 의존성들(dependencies)을 식별하는 단계; 및
상기 프로세서에 의해, 상기 식별된 제로 또는 그 초과의 명령어 스트림 의존성들에 기초하여 상기 프로세서의 하나 이상의 파이프라인 스테이지들에서 상기 선택된 그룹의 명령어들의 실행을 제어하기 위해 제어 신호들을 출력하는 단계를 포함하는, 프로세서 실행가능한 명령어들을 프로세싱하기 위한 방법. - 제 1 항에 있어서,
상기 체이닝 비트들의 조합은 상기 그룹내 병렬 실행에 대응하는 제 1 비트 및 상기 그룹간 병렬 실행에 대응하는 제 2 비트를 포함하는, 프로세서 실행가능한 명령어들을 프로세싱하기 위한 방법. - 제 1 항에 있어서,
상기 선택된 그룹의 명령어들을 제 1 그룹의 명령어들 및 제 2 그룹의 명령어들로 나누는 단계;
상기 프로세서에 의해, 상기 디코딩된 체이닝 비트들의 조합에 기초하여 상기 제 1 그룹의 명령어들과 상기 제 2 그룹의 명령어들 간의 제로 또는 그 초과의 명령어 스트림 의존성들을 식별하는 단계; 및
상기 프로세서에 의해, 상기 제 1 그룹의 명령어들과 상기 제 2 그룹의 명령어들 간의 식별된 제로 또는 그 초과의 명령어 스트림 의존성들에 기초하여 상기 하나 이상의 파이프라인 스테이지들로 하여금 상기 제 2 그룹의 명령어들을 실행하게 하는 제어 신호들을 출력하는 단계를 더 포함하는, 프로세서 실행가능한 명령어들을 프로세싱하기 위한 방법. - 제 3 항에 있어서,
상기 디코딩된 체이닝 비트들의 조합에서의 비트는 상기 제 1 그룹의 명령어들이 상기 제 2 그룹의 명령어들과 병렬로 실행될 것임을 표시하는, 프로세서 실행가능한 명령어들을 프로세싱하기 위한 방법. - 제 1 항에 있어서,
상기 디코딩된 체이닝 비트들의 조합은 상기 선택된 그룹의 명령어들에서의 2개 이상의 명령어들이 병렬 또는 직렬 중 어느 하나로 실행될 것임을 표시하는, 프로세서 실행가능한 명령어들을 프로세싱하기 위한 방법. - 제 1 항에 있어서,
상기 디코딩된 체이닝 비트들의 조합은 상기 선택된 그룹의 명령어들이 부분적으로는 병렬로 그리고 부분적으로는 직렬로 실행될 것임을 표시하는, 프로세서 실행가능한 명령어들을 프로세싱하기 위한 방법. - 제 1 항에 있어서,
상기 선택된 그룹의 명령어들 내의 다수의 명령어들은 상기 프로세서의 발행 폭(issue width)에 기초하여 선택되는, 프로세서 실행가능한 명령어들을 프로세싱하기 위한 방법. - 제 1 항에 있어서,
상기 선택된 그룹의 명령어들 내의 2개 이상의 명령어들 간의 식별된 명령어 스트림 의존성은 제어 의존성 또는 데이터 의존성인, 프로세서 실행가능한 명령어들을 프로세싱하기 위한 방법. - 제 3 항에 있어서,
상기 제 1 그룹의 명령어들 중 하나 이상의 명령어들과 상기 제 2 그룹의 명령어들 중 하나 이상의 명령어들 간의 식별된 명령어 스트림 의존성은 제어 의존성 또는 데이터 의존성인, 프로세서 실행가능한 명령어들을 프로세싱하기 위한 방법. - 제 1 항에 있어서,
상기 디코딩된 체이닝 비트들의 조합에서의 하나 이상의 비트들은 상기 프로세서의 성능을 최적화시키도록 동작가능한, 프로세서 실행가능한 명령어들을 프로세싱하기 위한 방법. - 제 1 항에 있어서,
상기 디코딩된 체이닝 비트들의 조합은 파이프라인 제어 신호들로서 기능하도록 동작가능한, 프로세서 실행가능한 명령어들을 프로세싱하기 위한 방법. - 프로세서 실행가능한 명령어들을 프로세싱하기 위한 시스템으로서,
메모리; 및
상기 메모리에 커플링된 프로세서를 포함하고,
상기 프로세서는 상기 메모리로의 액세스를 갖는 체이닝 비트 디코더를 포함하고, 상기 체이닝 비트 디코더는,
명령어 스트림으로부터 일 그룹의 명령어들을 선택하고;
상기 선택된 그룹의 명령어들의 각각의 명령어로부터 개개의 체이닝 비트를 추출하고;
체이닝 비트들의 조합을 형성하기 위해 추출된 체이닝 비트들을 리어셈블리하고 ― 상기 체이닝 비트들의 조합은 상기 선택된 그룹의 명령어들에 대한 복수의 명령어 발행 타입들을 나타내고, 상기 복수의 명령어 발행 타입들은 그룹내 병렬 실행 및 그룹간 병렬 실행을 포함함 ―;
상기 복수의 명령어 발행 타입들 중 제 1 명령어 발행 타입을 결정하기 위해 상기 체이닝 비트들의 조합을 디코딩하고;
상기 제 1 명령어 발행 타입에 기초하여, 상기 선택된 그룹의 명령어들 중 어느 것도 완전히 디코딩하는 것 없이 상기 선택된 그룹의 명령어들 간의 제로 또는 그 초과의 명령어 스트림 의존성들을 식별하고; 그리고
상기 식별된 제로 또는 그 초과의 명령어 스트림 의존성들에 기초하여 상기 프로세서의 하나 이상의 파이프라인 스테이지들에서 상기 선택된 그룹의 명령어들의 실행을 제어하기 위해 제어 신호들을 출력하는, 프로세서 실행가능한 명령어들을 프로세싱하기 위한 시스템. - 제 12 항에 있어서,
상기 체이닝 비트 디코더는, 추가로,
상기 선택된 그룹의 명령어들을 제 1 그룹의 명령어들 및 제 2 그룹의 명령어들로 나누고;
상기 디코딩된 체이닝 비트들의 조합에 기초하여 상기 제 1 그룹의 명령어들과 상기 제 2 그룹의 명령어들 간의 제로 또는 그 초과의 명령어 스트림 의존성들을 식별하고; 그리고
상기 제 1 그룹의 명령어들과 상기 제 2 그룹의 명령어들 간의 식별된 제로 또는 그 초과의 명령어 스트림 의존성들에 기초하여 상기 하나 이상의 파이프라인 스테이지들로 하여금 상기 제 2 그룹의 명령어들을 실행하게 하는 제어 신호들을 출력하는, 프로세서 실행가능한 명령어들을 프로세싱하기 위한 시스템. - 코드가 저장된 머신-판독가능 저장 매체로서,
상기 코드는, 실행되는 경우, 제 12 항의 프로세서로 하여금,
상기 프로세서에 의해, 명령어 스트림으로부터 일 그룹의 명령어들을 선택하고;
상기 프로세서에 의해, 상기 선택된 그룹의 명령어들의 각각의 명령어로부터 개개의 체이닝 비트를 추출하고;
상기 프로세서에 의해, 체이닝 비트들의 조합을 형성하기 위해 추출된 체이닝 비트들을 리어셈블리하고 ― 상기 체이닝 비트들의 조합은 상기 선택된 그룹의 명령어들에 대한 복수의 명령어 발행 타입들을 나타내고, 상기 복수의 명령어 발행 타입들은 그룹내 병렬 실행 및 그룹간 병렬 실행을 포함함 ―;
상기 프로세서에 의해, 상기 복수의 명령어 발행 타입들 중 제 1 명령어 발행 타입을 결정하기 위해 상기 체이닝 비트들의 조합을 디코딩하고;
상기 프로세서에 의해, 상기 제 1 명령어 발행 타입에 기초하여, 상기 선택된 그룹의 명령어들 중 어느 것도 완전히 디코딩하는 것 없이 상기 선택된 그룹의 명령어들 간의 제로 또는 그 초과의 명령어 스트림 의존성들을 식별하고; 그리고
상기 프로세서에 의해, 상기 식별된 제로 또는 그 초과의 명령어 스트림 의존성들에 기초하여 상기 프로세서의 하나 이상의 파이프라인 스테이지들에서 상기 선택된 그룹의 명령어들의 실행을 제어하기 위해 제어 신호들을 출력하게 하는, 머신-판독가능 저장 매체. - 제 14 항에 있어서,
상기 체이닝 비트들의 조합은 상기 그룹내 병렬 실행에 대응하는 제 1 비트 및 상기 그룹간 병렬 실행에 대응하는 제 2 비트를 포함하는, 머신-판독가능 저장 매체.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201461936428P | 2014-02-06 | 2014-02-06 | |
US61/936,428 | 2014-02-06 | ||
US14/539,104 | 2014-11-12 | ||
US14/539,104 US9766894B2 (en) | 2014-02-06 | 2014-11-12 | Method and apparatus for enabling a processor to generate pipeline control signals |
PCT/US2015/014064 WO2015119886A1 (en) | 2014-02-06 | 2015-02-02 | Method and apparatus for enabling a processor to generate pipeline control signals |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160110529A KR20160110529A (ko) | 2016-09-21 |
KR102311619B1 true KR102311619B1 (ko) | 2021-10-08 |
Family
ID=53754885
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020167024488A KR102311619B1 (ko) | 2014-02-06 | 2015-02-02 | 파이프라인 제어 신호들을 발생시키도록 프로세서를 인에이블링하기 위한 방법 및 장치 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9766894B2 (ko) |
EP (1) | EP3103302B1 (ko) |
KR (1) | KR102311619B1 (ko) |
CN (1) | CN106465404B (ko) |
WO (1) | WO2015119886A1 (ko) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2514618B (en) * | 2013-05-31 | 2020-11-11 | Advanced Risc Mach Ltd | Data processing systems |
US10802829B2 (en) | 2017-11-30 | 2020-10-13 | International Business Machines Corporation | Scalable dependency matrix with wake-up columns for long latency instructions in an out-of-order processor |
US10942747B2 (en) | 2017-11-30 | 2021-03-09 | International Business Machines Corporation | Head and tail pointer manipulation in a first-in-first-out issue queue |
US10901744B2 (en) | 2017-11-30 | 2021-01-26 | International Business Machines Corporation | Buffered instruction dispatching to an issue queue |
US10929140B2 (en) * | 2017-11-30 | 2021-02-23 | International Business Machines Corporation | Scalable dependency matrix with a single summary bit in an out-of-order processor |
US10564979B2 (en) | 2017-11-30 | 2020-02-18 | International Business Machines Corporation | Coalescing global completion table entries in an out-of-order processor |
US10572264B2 (en) | 2017-11-30 | 2020-02-25 | International Business Machines Corporation | Completing coalesced global completion table entries in an out-of-order processor |
US10922087B2 (en) | 2017-11-30 | 2021-02-16 | International Business Machines Corporation | Block based allocation and deallocation of issue queue entries |
US10564976B2 (en) | 2017-11-30 | 2020-02-18 | International Business Machines Corporation | Scalable dependency matrix with multiple summary bits in an out-of-order processor |
US10884753B2 (en) | 2017-11-30 | 2021-01-05 | International Business Machines Corporation | Issue queue with dynamic shifting between ports |
CN110659069B (zh) * | 2018-06-28 | 2022-08-19 | 赛灵思公司 | 用于执行神经网络计算的指令调度方法及相应计算系统 |
CN111008042B (zh) * | 2019-11-22 | 2022-07-05 | 中国科学院计算技术研究所 | 基于异构流水线的高效通用处理器执行方法及系统 |
WO2021212074A1 (en) | 2020-04-16 | 2021-10-21 | Tom Herbert | Parallelism in serial pipeline processing |
CN113342528B (zh) * | 2021-06-15 | 2024-09-17 | 鹏城实验室 | 指令处理方法及处理器 |
US20230244475A1 (en) * | 2022-01-28 | 2023-08-03 | International Business Machines Corporation | Automatic extract, transform and load accelerator for data platform in distributed computing environment |
CN115629807B (zh) * | 2022-10-31 | 2023-04-14 | 海光信息技术股份有限公司 | 多线程处理器的译码方法、处理器、芯片及电子设备 |
CN116088942A (zh) * | 2022-12-28 | 2023-05-09 | 海光信息技术股份有限公司 | 指令执行方法、装置、芯片和计算机设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070233961A1 (en) * | 2006-03-31 | 2007-10-04 | Banning John P | Multi-portioned instruction memory |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5303356A (en) | 1990-05-04 | 1994-04-12 | International Business Machines Corporation | System for issuing instructions for parallel execution subsequent to branch into a group of member instructions with compoundability in dictation tag |
US5463446A (en) * | 1993-05-20 | 1995-10-31 | Canon Kabushiki Kaisha | Rotary member a process cartridge and an assembling method for rolling members |
US5392393A (en) | 1993-06-04 | 1995-02-21 | Sun Microsystems, Inc. | Architecture for a high performance three dimensional graphics accelerator |
US6138230A (en) | 1993-10-18 | 2000-10-24 | Via-Cyrix, Inc. | Processor with multiple execution pipelines using pipe stage state information to control independent movement of instructions between pipe stages of an execution pipeline |
DE69431998T2 (de) * | 1993-11-05 | 2004-08-05 | Intergraph Hardware Technologies Co., Las Vegas | Superskalare Rechnerarchitektur mit Softwarescheduling |
US5822559A (en) * | 1996-01-02 | 1998-10-13 | Advanced Micro Devices, Inc. | Apparatus and method for aligning variable byte-length instructions to a plurality of issue positions |
US6192384B1 (en) * | 1998-09-14 | 2001-02-20 | The Board Of Trustees Of The Leland Stanford Junior University | System and method for performing compound vector operations |
US6260189B1 (en) | 1998-09-14 | 2001-07-10 | Lucent Technologies Inc. | Compiler-controlled dynamic instruction dispatch in pipelined processors |
US6668317B1 (en) | 1999-08-31 | 2003-12-23 | Intel Corporation | Microengine for parallel processor architecture |
AU2597401A (en) | 1999-12-22 | 2001-07-03 | Ubicom, Inc. | System and method for instruction level multithreading in an embedded processor using zero-time context switching |
US7143268B2 (en) * | 2000-12-29 | 2006-11-28 | Stmicroelectronics, Inc. | Circuit and method for instruction compression and dispersal in wide-issue processors |
US6907520B2 (en) | 2001-01-11 | 2005-06-14 | Sun Microsystems, Inc. | Threshold-based load address prediction and new thread identification in a multithreaded microprocessor |
US6928645B2 (en) | 2001-03-30 | 2005-08-09 | Intel Corporation | Software-based speculative pre-computation and multithreading |
US6842848B2 (en) | 2002-10-11 | 2005-01-11 | Sandbridge Technologies, Inc. | Method and apparatus for token triggered multithreading |
US7610473B2 (en) | 2003-08-28 | 2009-10-27 | Mips Technologies, Inc. | Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor |
US7600221B1 (en) * | 2003-10-06 | 2009-10-06 | Sun Microsystems, Inc. | Methods and apparatus of an architecture supporting execution of instructions in parallel |
US7310722B2 (en) | 2003-12-18 | 2007-12-18 | Nvidia Corporation | Across-thread out of order instruction dispatch in a multithreaded graphics processor |
US8074051B2 (en) | 2004-04-07 | 2011-12-06 | Aspen Acquisition Corporation | Multithreaded processor with multiple concurrent pipelines per thread |
US7543132B1 (en) | 2004-06-30 | 2009-06-02 | Sun Microsystems, Inc. | Optimizing hardware TLB reload performance in a highly-threaded processor with multiple page sizes |
US7487503B2 (en) | 2004-08-12 | 2009-02-03 | International Business Machines Corporation | Scheduling threads in a multiprocessor computer |
US20060130062A1 (en) | 2004-12-14 | 2006-06-15 | International Business Machines Corporation | Scheduling threads in a multi-threaded computer |
US7652922B2 (en) | 2005-09-30 | 2010-01-26 | Mosaid Technologies Incorporated | Multiple independent serial link memory |
CN1988431B (zh) * | 2005-12-21 | 2010-12-08 | 美国博通公司 | 信号处理的方法及系统 |
US8456191B2 (en) | 2006-06-21 | 2013-06-04 | Element Cxi, Llc | Data-driven integrated circuit architecture |
US20080126766A1 (en) | 2006-11-03 | 2008-05-29 | Saurabh Chheda | Securing microprocessors against information leakage and physical tampering |
WO2009022294A2 (en) | 2007-08-14 | 2009-02-19 | Nokia Corporation | Power saving for uplink scheduling grant signaling and decoding |
US8737517B2 (en) * | 2008-03-26 | 2014-05-27 | Qualcomm Incorporated | Scrambling and modulation to constrain the constellation size of ACK/NAK transmission on the data channel |
CN102238599A (zh) * | 2010-05-06 | 2011-11-09 | 中兴通讯股份有限公司 | 远端射频单元管理装置、系统及方法 |
US8499299B1 (en) | 2010-06-29 | 2013-07-30 | Ca, Inc. | Ensuring deterministic thread context switching in virtual machine applications |
CN102495726B (zh) | 2011-11-15 | 2015-05-20 | 无锡德思普科技有限公司 | 机会多线程方法及处理器 |
-
2014
- 2014-11-12 US US14/539,104 patent/US9766894B2/en active Active
-
2015
- 2015-02-02 CN CN201580012420.4A patent/CN106465404B/zh active Active
- 2015-02-02 EP EP15746535.2A patent/EP3103302B1/en active Active
- 2015-02-02 WO PCT/US2015/014064 patent/WO2015119886A1/en active Application Filing
- 2015-02-02 KR KR1020167024488A patent/KR102311619B1/ko active IP Right Grant
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070233961A1 (en) * | 2006-03-31 | 2007-10-04 | Banning John P | Multi-portioned instruction memory |
Also Published As
Publication number | Publication date |
---|---|
WO2015119886A1 (en) | 2015-08-13 |
EP3103302A4 (en) | 2018-01-17 |
KR20160110529A (ko) | 2016-09-21 |
US20150220342A1 (en) | 2015-08-06 |
CN106465404B (zh) | 2019-11-26 |
EP3103302A1 (en) | 2016-12-14 |
CN106465404A (zh) | 2017-02-22 |
EP3103302B1 (en) | 2019-08-07 |
US9766894B2 (en) | 2017-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102311619B1 (ko) | 파이프라인 제어 신호들을 발생시키도록 프로세서를 인에이블링하기 위한 방법 및 장치 | |
CN108027769B (zh) | 使用寄存器访问指令发起指令块执行 | |
US10871967B2 (en) | Register read/write ordering | |
US10409606B2 (en) | Verifying branch targets | |
KR100464406B1 (ko) | 가변길이 vliw 명령어를 위한 디스패치 장치 및 방법 | |
EP2680132B1 (en) | Staged loop instructions | |
US10452399B2 (en) | Broadcast channel architectures for block-based processors | |
EP2430526B1 (en) | Instruction cracking based on machine state | |
US20170083320A1 (en) | Predicated read instructions | |
Hu et al. | Using dynamic binary translation to fuse dependent instructions | |
US20170083341A1 (en) | Segmented instruction block | |
US20160378491A1 (en) | Determination of target location for transfer of processor control | |
JP2018519602A (ja) | 連続ブロックの並列実行を有するブロックベースアーキテクチャ | |
US20170083327A1 (en) | Implicit program order | |
US20170083331A1 (en) | Memory synchronization in block-based processors | |
KR20140131472A (ko) | 상수 저장 레지스터를 구비하는 재구성 가능 프로세서 | |
US11366669B2 (en) | Apparatus for preventing rescheduling of a paused thread based on instruction classification | |
WO2002008893A1 (en) | A microprocessor having an instruction format containing explicit timing information | |
CN108027735B (zh) | 用于操作处理器的装置、方法和计算机可读存储介质 | |
US20180329708A1 (en) | Multi-nullification | |
US9201657B2 (en) | Lower power assembler | |
US10437596B2 (en) | Processor with a full instruction set decoder and a partial instruction set decoder | |
WO2017048645A1 (en) | Multimodal targets in a block-based processor | |
FitzRoy-Dale | The VLIW and EPIC processor architectures |
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 |