KR102010312B1 - 디펜던시들을 정리하고 리빌딩하는 시스템 및 방법 - Google Patents

디펜던시들을 정리하고 리빌딩하는 시스템 및 방법 Download PDF

Info

Publication number
KR102010312B1
KR102010312B1 KR1020130160342A KR20130160342A KR102010312B1 KR 102010312 B1 KR102010312 B1 KR 102010312B1 KR 1020130160342 A KR1020130160342 A KR 1020130160342A KR 20130160342 A KR20130160342 A KR 20130160342A KR 102010312 B1 KR102010312 B1 KR 102010312B1
Authority
KR
South Korea
Prior art keywords
entry
counter
entries
value
dependent
Prior art date
Application number
KR1020130160342A
Other languages
English (en)
Other versions
KR20140113304A (ko
Inventor
라비 아이옌가
샌딥 쿠마 두베이
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20140113304A publication Critical patent/KR20140113304A/ko
Application granted granted Critical
Publication of KR102010312B1 publication Critical patent/KR102010312B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification

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)
  • Complex Calculations (AREA)

Abstract

본 발명은 전자 어플리케이션(electronic application)에 있어서 디펜던시들을 정리하고 리빌딩하는 데이터 처리 방법에 관한 것이다. 본 발명의 실시 예에 따른 데이터 처리 방법은 제 2 엔트리를 선택하는 것에 응답하여 제 1 엔트리와 연관된 카운터를 변환하는 단계; 상기 카운터를 임계값과 비교하는 단계; 및 상기 카운터와 상기 임계값과의 비교결과에 응답하여 상기 제 1 엔트리가 선택될 준비가 되었음을 가리키는 단계를 포함하며, 상기 제 1 엔트리는 상기 제 2 엔트리에 종속적이다. 본 발명에 따른 데이터 처리 방법은 향상된 동작 속도를 제공할 수 있다.

Description

디펜던시들을 정리하고 리빌딩하는 시스템 및 방법{SYSTEM AND METHOD TO CLEAR AND REBUILD DEPENDENCIES}
본 발명은 전자 어플리케이션(electronic application)에 있어서 디펜던시들을 정리하고 리빌딩하는 시스템 및 방법에 관한 것으로, 좀더 구체적으로는 스케줄러, 버퍼, 또는 다른 메모리 구조와 같이, 프로세스 내의 디펜던시들을 정리하고 리빌딩하는 시스템 및 방법에 관한 것이다.
현재의 프로세서(processor)는 추론적 명령어들(speculative instructions)로 하여금 종속 명령어들(dependent instructions)을 위하여 디펜던시들을 추측적으로 정리(clear)하는 것을 허용한다. 디펜던시들을 정리하는 것은, 예를 들어, 종속 명령어의 종속 벡터(dependency vector) 내의 추측적 명령어에 대응하는 종속 비트(dependency bit)를 정리함으로써 수행된다.
그러나 명령어의 수행은 단지 추측적인 것일 뿐이므로, 로딩 미스(load miss), 오류(fault), 해저드(hazard)와 같이 많은 경우에 있어서, 추측적 명령어의 수행의 취소를 야기할 수 있다. 이러한 경우에, 종속 명령어들의 종속 벡터들은 정리된 디펜던시들을 되살리기 위하여 반드시 리빌딩(rebuild) 되어야 한다. 불행하게도, 이는 소스 태그들(source tags)을 취소된 목적지 태그들(destination tags)에 맞서 다시 비교하고 종속 비트들을 다시 세팅하는 복잡한 과정을 필요로 한다. 이러한 리빌딩 과정은 프로세서의 자원과 파워의 측면에서 고비용을 요구한다.
본 발명의 목적은 향상된 동작속도를 제공하는 데이터 처리 방법을 제공하는데 있다.
본 발명의 실시 예에 따른 데이터 처리 시스템의 데이터 처리 방법은 제 2 엔트리를 선택하는 것에 응답하여 제 1 엔트리와 연관된 카운터를 변환하는 단계; 상기 카운터를 임계값과 비교하는 단계; 및 상기 카운터와 상기 임계값과의 비교결과에 응답하여 상기 제 1 엔트리가 선택될 준비가 되었음을 가리키는 단계를 포함하며, 상기 제 1 엔트리는 상기 제 2 엔트리에 종속적이다.
실시 예로써, 상기 카운터를 변환하는 단계는 상기 카운터를 감소시키는 것을 포함한다.
실시 예로써, 상기 임계값은 '0'이다.
실시 예로써, 상기 카운터를 상기 제 1 엔트리가 의존하는 목적지들의 넘버로 세팅하는 단계를 포함한다.
실시 예로써, 상기 제 1 엔트리의 종속 벡터에 응답하여 상기 카운터를 로딩하는 단계를 더 포함한다.
실시 예로써, 상기 제 1 엔트리의 상기 종속 벡터에 응답하여 상기 카운터를 로딩하는 단계는 상기 종속 벡터의 비트들에 대한 논리합 연산을 수행하는 단계; 상기 종속 벡터의 비트들에 대한 배타적 논리합 연산을 수행하는 단계; 상기 논리합 연산과 상기 배타적 논리합 연산의 결과에 응답하여 상기 카운터를 로딩하는 단계를 포함한다.
실시 예로써, 상기 제 2 엔트리를 취소하는 것에 응답하여 상기 카운터를 변환하는 단계를 더 포함한다.
실시 예로써, 상기 제 2 엔트리를 취소하는 것에 응답하여 상기 카운터를 변환하는 것은 상기 카운터를 증가시키는 것을 포함한다.
실시 예로써, 상기 카운터는 폭(width)을 가지며, 상기 카운터의 폭은 상기 제 1 엔트리가 의존하는 목적지들의 최대 숫자를 나타내기 위한 최소 비트이다.
실시 예로써, 상기 제 1 엔트리가 선택될 준비가 되었음을 가리키는 단계는 상기 제 1 엔트리와 연관된 종속 벡터의 엔트리들을 정리하지 않고 상기 제 1 엔트리가 선택될 준비가 되었음을 가리키는 것을 포함한다.
본 발명의 실시 예에 따른 데이터 처리 장치는 복수의 엔트리들을 포함하며, 각 엔트리들은 적어도 하나의 카운터를 포함하는 메모리; 및 상기 메모리에 연결된 컨트롤러를 포함하며, 상기 컨트롤러는 상기 복수의 엔트리들의 제 2 엔트리를 선택하는 것에 응답하여 상기 복수의 엔트리들의 제 1 엔트리와 연관된 상기 카운터를 변환하고, 상기 카운터를 임계값과 비교하며, 상기 임계값과 상기 카운터의 비교결과에 응답하여 상기 제 1 엔트리가 선택될 준비가 되었음을 가리키도록 제어하되, 상기 제 1 엔트리는 상기 제 2 엔트리에 종속적이다.
실시 예로써, 상기 컨트롤러는 상기 카운터가 감소되도록 상기 카운터를 변환하는 것을 특징으로 한다.
실시 예로써, 상기 임계값은 '0'이다.
실시 예로써, 상기 컨트롤러는 상기 제 1 엔트리가 의존하는 복수의 엔트리들의 목적지들의 숫자로 상기 카운터를 세트한다.
실시 예로써, 상기 컨트롤러는 상기 제 1 엔트리의 종속 벡터에 응답하여 상기 카운터를 로드한다.
실시 예로써, 상기 컨트롤러는 상기 종속 벡터의 비트들에 대한 논리합 연산을 수행하고, 상기 종속 벡터의 비트들에 대하 배타적 논리합 연산을 수행하며, 상기 논리합 연산과 상기 배타적 논리합 연산의 결과에 응답하여 상기 카운터를 로드한다.
실시 예로써, 상기 컨트롤러는 상기 제 2 엔트리를 취소하는 것에 응답하여 상기 카운터를 변환한다.
실시 예로써, 상기 컨트롤러는 상기 제 2 엔트리를 취소하는 것에 응답하여 상기 카운터를 증가시킨다.
실시 예로써, 상기 카운터는 폭(width)을 가지며, 상기 카운터의 폭은 상기 제 1 엔트리가 의존하는 목적지의 최대 숫자를 나타내기 위한 최소 비트이다.
실시 예로써, 상기 컨트롤러는 상기 제 1 엔트리와 연관된 종속 벡터의 엔트리들을 정리하지 않고 상기 제 1 엔트리가 선택될 준비가 되었음을 가리킨다.
본 발명의 실시 예에 따른 데이터 처리 시스템의 데이터 처리 방법은 제 1 엔트리가 의존하는 다른 엔트리들의 목적지들의 숫자를 가리키도록 상기 제 1 엔트리와 연관된 카운터를 초기화하는 단계; 상기 다른 엔트리들 중 제 2 엔트리를 선택하는 것에 응답하여 제 1 방향으로 상기 카운터를 변환하는 단계; 상기 다른 엔트리들 중 제 3 엔트리를 취소하는 것에 응답하여 상기 제 1 방향과 반대되는 제 2 방향으로 상기 카운터를 변환하는 단계를 포함한다.
실시 예로써, 상기 제 3 엔트리는 상기 제 2 엔트리와 동일한 것을 특징한다.
실시 예로써, 상기 제 2 엔트리는 상기 제 3 엔트리와 다른 것을 특징으로 한다.
실시 예로써, 취소되는 상기 다른 엔트리들의 숫자에 따라 상기 제 2 방향으로 상기 카운터를 변환하는 것을 더 포함한다.
실시 예로써, 상기 카운터를 상기 제 1 방향으로 변환하는 것은 상기 카운터를 감소시키는 것을 포함하고, 상기 카운터를 상기 제 2 방향으로 변환하는 것은 상기 카운터를 증가시키는 것을 포함한다.
실시 예로써, 상기 카운터가 임계값에 도달하는 것에 응답하여 상기 제 1 엔트리가 준비되었음을 가리키는 것을 더 포함한다.
본 발명의 실시 예에 따른 데이터 처리 시스템은 메모리 시스템; 사용자 인터페이스; 및 상기 메모리 시스템 및 상기 사용자 인터페이스에 연결된 프로세서를 포함하며, 상기 프로세서는 각각 적어도 하나의 카운터를 포함하는 복수의 엔트리들을 저장하는 메모리; 및 상기 메모리에 연결된 컨트롤러를 포함하며, 상기 컨트롤러는 상기 복수의 엔트리들 중 제 2 엔트리를 선택하는 것에 응답하여 상기 복수의 엔트리들 중 제 1 엔트리와 연관된 상기 카운터를 변환하고; 상기 카운터를 임계값과 비교하며, 상기 카운터를 상기 임계값과 비교한 결과에 응답하여 상기 제 1 엔트리가 선택될 준비가 되었음을 가리키고, 상기 제 1 엔트리는 상기 제 2 엔트리에 종속적이다.
본 발명의 실시 예에 따른 데이터 처리방법은 향상된 동작속도를 제공할 수 있다.
도 1은 본 발명의 기술적 사상의 실시 예에 따른 엔트리를 설명하기 위한 도면이다.
도 2는 본 발명의 기술적 사상의 다른 실시 예에 따른 엔트리를 설명하는 도면이다.
도 3은 본 발명의 기술적 사상의 실시 예에 따른 엔트리들을 포함하는 메모리를 보여주는 블록 다이어그램이다.
도 4 내지 도 8은 본 발명의 기술적 사상의 실시 예에 따른 도 3의 카운터를 감소시키거나 증가시키는 예들을 설명하기 위한 도면들이다.
도 9는 본 발명의 기술적 사상의 실시 예에 따른 복수의 목적지들을 수반하는 복수의 엔트리들과 복수의 종속 엔트리들의 예들을 포함하는 메모리를 나타내는 도면이다.
도 10은 본 발명의 기술적 사상의 실시 예에 따른 장치를 보여주는 블록도이다.
도 11은 본 발명의 기술적 사상의 실시 예에 따른 명령어 패치의 일 부분을 나타내는 블록도이다.
도 12는 본 발명의 기술적 사상의 실시 예에 따른 프로세서를 포함하는 시스템을 보여주는 블록도이다.
본 발명의 다양한 실시 예들은 프로세서들(processors) 내의 명령어들의 디펜던시들을 정리하고 리빌딩하는 것과 같이, 주로 디펜던시들을 정리하고 리빌딩하는 것에 관한 것이다. 여기에는 스케줄러(scheduler) 내의 프로듀서(producer) 및 종속 명령어들(dependent instructions)을 포함되나, 이에 한정되지는 않는다. 이하의 설명은 본 발명의 기술분야에서 통상의 기술을 가진 자가 본 발명의 기술적 사상을 이용하여 실시할 수 있을 정도로 상세히 설명될 것이다. 본 발명의 실시 예들의 다양한 변형 예 및 그 포괄적인 원칙과 특징들이 이하에서는 또한 보다 자세히 설명될 것이다. 예시적으로, 본 발명의 실시 예들은 구체적 수행 동작에서의 구체적 방법 및 시스템에 대하여 설명할 것이다.
그러나, 방법과 시스템은 이하의 설명 이외의 다른 수행 동작에서도 효과적으로 동작할 수 있다. '예시적인 실시 예', '하나의 실시 예', '다른 실시 예'와 같은 용어들은 복수의 실시 예들 뿐만 아니라 동일하거나 혹은 서로 다른 실시 예들을 지칭할 수 있다. 실시 예들은 특정한 구성요소를 가지는 시스템 및/또는 장치들에 대하여 설명할 수 있다. 그러나, 시스템 및/또는 장치들은 실시 예로 설명된 것보다 많거나 또는 적은 구성요소를 포함할 수 있으며, 구성요소들을 다양한 방식으로 배치하는 것 역시 본 발명의 기술적 사상을 벗어나지 않는 한도 내에서 가능할 것이다. 실시 예들은 특정 단계들을 포함하는 특정 방법을 이용하여 설명될 수 있다. 그러나, 본 발명의 기술적 사상은 실시 예에서 설명될 방법과 다른 단계를 갖거나 추가적인 단계를 갖거나 혹은 다른 순서를 갖는 방법에서도 효과적으로 동작할 수 있다. 따라서, 본 발명은 이하에서 설명될 실시 예에 한정되는 것은 아니며, 실시 예들의 원리와 특징을 포함하는 한도에서 최대한 넓은 범위에 해당할 것이다.
본 발명의 실시 예들은 도시된 특정 형태로 제한되는 것이 아니며 명확성을 기하기 위하여 과장된 것이다. 또한 명세서 전체에 걸쳐서 동일한 참조번호로 표시된 부분들은 동일한 구성요소를 나타낸다. 본 명세서에서 '및/또는'이란표현은 전후에 나열된 구성요소들 중 적어도 하나를 포함하는 의미로 사용된다. 또한, '연결되는/결합되는'이란 표현은 다른 구성요소와 직접적으로 연결되거나 다른 구성요소를 통해 간접적으로 연결되는 것을 포함하는 의미로 사용된다. 본 명세서에서 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다. 또한, 명세서에서 사용되는 '포함한다' 또는 '포함하는'으로 언급된 구성요소, 단계, 동작 및 소자는 하나 이상의 다른 구성요소, 단계, 동작, 소자 및 장치의 존재 또는 추가를 의미한다.
도 1은 본 발명의 기술적 사상의 실시 예에 따른 엔트리(100)를 설명하기 위한 도면이다. 본 실시 에에 있어서, 엔트리(100)는 카운터(112)를 포함한다. 엔트리는, 예를 들어, 스케줄러 또는 다른 버퍼와 같은 메모리 테이블 내에 저장되는 프로듀서(301, 302) 및/또는 종속 엔트리(306)일 수 있다(도 3 참조). 그러나, 엔트리(100)와 카운터(112)는 다양한 방법으로 수행되는 다양한 엔트리들 중 어느 하나일 수 있다. 예를 들어, 엔트리(100)는 다른 유사한 엔트리와 마찬가지로 스케줄러 또는 다른 버퍼와 같은 메모리 내에 저장될 수 있다. 다른 실시 예로, 카운터(112)는 엔트리(100)와 관련이 있는 레지스터일 수 있다. 엔트리(100)는 또한 추가적인 정보(114)를 포함할 것이다. 추가적인 정보(114)는 하나 또는 그 이상의 명령어(instruction), 레지스터들, 종속 벡터 등과 같은 정보들을 포함할 수 있다. 추가적인 정보(114)는 엔트리(100)와 관련된 카운터(112)와 함께 저장될 수도 있으며 함께 저장되지 않을 수도 있다. 예를 들어, 추가적인 정보(114)는 카운터(112)와 분리되어 버퍼 내에 저장될 수 있다.
도 2는 본 발명의 기술적 사상의 다른 실시 예에 따른 엔트리를 설명하는 도면이다. 본 실시 예에 있어서, 엔트리(200)는 카운터(212), 종속 벡터(216) 그리고 추가적인 정보(214)를 포함한다. 엔트리(200)는, 예를 들어, 스케줄러 또는 다른 버퍼와 같은 메모리 테이블에 저장된 종속 엔트리(306)일 수 있다(도 3 참조). 종속 벡터(216)는 엔트리(200)와 영(0) 또는 영(0) 이상의 다른 엔트리들 사이의 관계를 가리킨다. 예를 들어, 종속 벡터(216)는 엔트리(200)와 하나 이상의 다른 엔트리들 사이의 관계를 가리킬 수 있다. 또한 예를 들어, 종속 벡터(216)는 엔트리(200)가 의존하는 다른 엔트리(예를 들어, 도 3의 프로듀서 엔트리들(301, 302))를 가리킬 수 있다. 그러나 다른 실시 예로, 엔트리(200)는 프로듀서 엔트리일 수 있으며 종속 벡터(216)는 엔트리(200)에 의존하는 다른 엔트리들을 가리킬 수도 있다.
종속 벡터(216)는 다양한 방식으로 표현될 수 있다. 예를 들어, 종속 벡터(216)는 일련의 비트들(bits)을 포함할 수 있으며, 그 각각은 특정 엔트리에 대응할 수 있다. 특정 위치(location)의 비트(또는 세트 비트, set bit)는 엔트리(200)가 그 비트에 의하여 나타내어지는 메모리 위치에 저장된 엔트리에 의존하는 것을 가리킬 것이다. 다른 실시 예로, 종속 벡터(216)는 엔트리(200)가 의존하는 레지스터들, 데이터 등과 같은 레퍼런스들을 포함할 수 있다. 종속 벡터를 구현하는 다양한 추가적인 방법들이 본 발명의 통상의 기술자들에게 자명할 것이다.
도 3은 본 발명의 기술적 사상의 실시 예에 따른 엔트리들을 포함하는 메모리를 보여주는 블록 다이어그램이다. 도 3을 참조하면, 본 발명의 실시 예에 따른 메모리(300)는 복수의 엔트리들을 포함한다. 비록 도 3에서는 엔트리들(301, 302, 306)만이 열거되어 있지만, 다른 엔트리들이 메모리(300) 내에 존재할 수 있으며, 이는 간략한 설명을 위하여 생략되었다. 엔트리들(301, 302, 306)은 앞서 설명된 엔트리(200)와 유사할 것이다. 예를 들어, 엔트리들(301, 302)은 프로듀서 엔트리들일 수 있고, 엔트리(306)는 두 개의 프로듀서 엔트리들(301, 302)에 의존하는 종속 엔트리일 수 있다. 메모리 구조(300)는 스케줄러 또는 다른 버퍼일 수 있다. 비록 도시되지는 않았으나, 프로듀서 엔트리들(301, 302)은 필요하지 않을지라도 엔트리(306)와 유사하게 카운터(212) 또는 종속 벡터들(216)을 포함할 수도 있다.
본 실시 예에 있어서, 엔트리(306)는 복수의 다른 엔트리들(301, 302)에 의존 또는 종속하는 종속 엔트리이다. 엔트리(306)는 카운터(312)를 포함하며, 카운터(312)의 값은 엔트리(306)가 의존하는 엔트리들의 총 숫자를 가리키는 바이너리 숫자(binary number)로 로딩될 수 있다. 본 실시 예에 있어서, 카운터(312)는 2(즉, 2진수의 '10')로 세팅 되었으며, 이는 엔트리(306)가 두 개의 다른 엔트리들(301, 302)에 의존함을 가리킨다.
추가적으로, 본 실시 예에 있어서, 종속 벡터(316)는 메모리(300) 내의 잠재적 엔트리들의 숫자와 동일한 복수의 비트들을 포함한다. 각 비트는 엔트리들 중 어느 하나와 대응한다. 세트 비트는 엔트리(306)가 해당 비트에 대응하는 메모리 위치에 위치하는 엔트리에 의존함을 가리킨다. 예를 들어, 본 실시 예에 있어서, 종속 벡터(316)의 값은 110(2진수)으로 세트되어 있다. 만약 메모리(300) 내의 잠재적인 엔트리들의 숫자가 16이라면, 종속 벡터의 폭(width)은 16일 것이다. 따라서, 종속 벡터(316)은 0000000000000110(2진수) 일 것이다. 도 3에서는 간략한 설명을 위하여, 더욱 많은 의미 있는 비트들의 영(0)의 값은 도시되지 않았다. 종속 벡터(316)의 비트들은 1과 2로 세트 되어 있으므로, 이 종속 벡터(316)는 엔트리(306)가 엔트리(301) 및 엔트리(302)에 의존함을 가리킨다. 만약 엔트리(306)가 다른 엔트리들에 의존한다면, 종속 벡터(316)의 상응하는 비트들 또한 세트 될 것이다.
상술한 바와 같이, 카운터(312)의 값은 엔트리(306)가 의존하는 엔트리들의 숫자로 세트 될 수 있다. 예를 들어, 일 실시 예에 있어서, 각 엔트리들(301, 302)은 하나의 목적지(destination)를 가질 수 있다. 따라서, 엔트리(306)가 의존하는 목적지들의 숫자는 엔트리들의 숫자와 동일할 수 있다. 그러나, 다른 실시 예에 있어서, 카운터(312)의 값은 엔트리(306)의 목적지(destination)의 숫자로 세트 될 수 있다. 이하에서 좀더 자세히 설명될 바와 같이, 각 엔트리들(301, 302)은 하나 또는 그 이상의 목적지들을 가질 수 있다. 카운터(312)의 값은 엔트리(306)가 의존하는 특유의 목적지들의 총 숫자로 세트 될 수 있다.
이하에서 좀더 자세히 설명될 바와 같이, 디펜던시들을 정리(clearing)하고 리빌딩(rebuilding)하는 것은 종속 벡터(316)의 비트들을 정리하는 것을 수반하지 않고 카운터(312)를 감소시키거나 증가시킴으로써 수행될 것이다. 비록 몇몇의 실시 예에 있어서, 선택된 엔트리를 위한 종속 벡터(316)의 디펜던시들이 정리된다고 하더라도, 다른 실시 예들의 종속 비트(dependency bit)는 세트 된 채로 유지될 것이다. 즉, 종속 벡터(316)는 디펜던시들을 정리하고 리빌딩 할 때에 수정되지 않아도 된다. 본 발명의 기술적 사상에 따른 일 실시 예에 있어서, 디펜던시를 정리하는 것은 카운터를 감소시킴으로써 간단하게 수행될 수 있으며 디펜던시를 리빌딩하는 것은 카운터를 증가시킴으로써 간단하게 수행될 수 있다. 따라서, 본 발명의 기술적 사상의 실시 예에 따른 디펜던시들을 정리하고 리빌딩하는 시스템 및 방법은 그 구성 또는 동작의 복잡성을 상당부분 낮출 수 있으며 또한 면적과 파워의 관점에서 소모되는 코스트(cost)를 감소시킬 수 있다.
본 실시 예에 있어서, 카운터(312)의 값을 생성할 때, 그 값은 종속 벡터(316) 내의 종속 비트들의 팝-카운트(pop-count)에 의하여 생성된다. 예를 들어, 종속 벡터(316) 내의 세트 비트들의 숫자들(예를 들어, 영(0)들)이 카운트될 것이다. 도 3의 실시 예에서, 종속 벡터(316)의 두 개의 1들은 카운터(306)의 10(2진수)의 카운터 값을 초래한다.
카운터(312)는 엔트리들의 최대 숫자(maximum number)와 동일하거나 그보다 큰 값을 저장하도록 충분한 폭(width)을 갖도록 제공될 수 있다. 예를 들어, 만약 하나의 메모리(300)가 16의 깊이(depth)을 갖고 시스템이 총 4개의 메모리들(300)을 갖도록 구성되며 하나의 엔트리(306)가 4개의 메모리들(300) 중 어느 하나의 메모리로부터의 어느 하나의 엔트리에 의존한다면, 하나의 엔트리가 의존할 수 있는 엔트리들의 최대 숫자는 63이며, 이는 그 자신의 엔트리는 포함하지 않는 값이다. 본 실시 예에 있어서, 6비트 또는 그 이상의 폭을 갖는 카운터(312)가 디펜던시들의 총 최대 숫자를 계산하기에 충분한 폭을 제공하도록 사용될 것이다.
다른 실시 예에 있어서, 카운터(312)는 엔트리(306)가 의존하는 엔트리들의 최대 숫자(maximum number)를 나타내는데 필요한 비트들의 최소 숫자(minimum number)와 동일하거나 큰 폭을 가질 것이다. 예를 들어, 주어진 엔트리가 의존하는 엔트리들의 숫자가 2로 제한된 경우에, 감소된 폭을 가지는 카운터(312)가 사용될 수 잇다. 이러한 경우에, 2비트의 폭의 카운터(312)는 최대 카운트(maximum count)로 2를 저장하여 사용할 수 있다. 즉, 잠재적인 디펜던시들의 숫자와 무관하게, 주어진 엔트리에 대한 디펜던시들의 최대 숫자는 2이며, 2의 폭을 가지는 카운터(312)가 사용될 것이다.
본 발명의 기술적 사상에 따른 다른 실시 예에 있어서, 카운터(316)의 값은 종속 벡터(316)의 값을 카운팅하기 보다는 논리 연산들(logical operations)에 의하여 생성될 수 있다. 최대 2의 디펜던시들을 갖는 실시 예를 이용하여 설명하면, 논리합 연산(OR operation)과 배타적 논리합 연산(exclusive OR operation, XOR operation)이 카운터의 비트들을 생성하기 위하여 사용될 수 있다. 예를 들어, 종속 벡터(316)의 비트들의 배타적 논리합 연산은 하나의 종속 비트가 세트 되는 경우에만 1을 생성할 것이다. 만약 배타적 논리합 연산의 결과가 0이라면, 종속 비트들의 숫자가 0 또는 2인지의 여부를 결정하기 위하여 논리합 연산이 이후 수행될 수 있다. 논리합 연산의 연산 결과 0은 제로(0)의 디펜던시 비트가 세트 되었다는 것을 가리키며, 반면 논리합 연산의 연산 결과 1은 두 개(2)의 비트들이 세트 되었다는 것을 가리킨다. 여기서, 배타적 논리합 연산 결과는 카운터(312)의 최소 유효 비트(least-significant-bit, LSB)를 형성할 것이며, 배타적 논리합 연산의 연산결과와 논리합 연산의 연산결과의 조합(combination)은 카운터(312)의 최대 유효 비트(most-significant-bit, MSB)를 형성할 것이다. 이하의 수학식 1과 수학식 2는 카운터(312)의 MSB와 LSB를 생성하는데 사용되는 함수의 예를 보여주며, 여기서 X는 배타적 논리합 연산(XOR)의 결과를 나타내고 O는 논리합 연산(OR)의 결과를 나타낸다.
Figure 112013117083222-pat00001
Figure 112013117083222-pat00002
비록 상술한 바와 같이 디펜던시들의 최대 숫자가 2인 경우에 카운터의 비트들을 생성하는 논리(logic)의 몇 가지 예들이 설명되었으나, 논리 연산들은 어느 숫자의 디펜던시들에 대한 카운터(312) 값을 생성하도록 사용될 수 있으며, 예를 들어, 디펜던시들의 최대 숫자를 저장하기 위하여 2비트 이상이 필요한 경우에도 사용될 수 있다. 따라서, 종속 비트들의 숫자를 카운트하는 카운터들과 그러한 카운터들에 대응하는 지연(delay)은 감소될 수 있다.
비록 앞서 설명된 종속 벡터(316)가 메모리(300)의 엔트리들을 참조하는 것으로 설명되었으나, 본 발명의 기술적 사상은 이에 한정되지 않으며 종속 벡터(316)는 다른 메모리들, 테이블들, 큐들(queues)을 참조할 수 있으며, 또는 엔트리들, 데이터, 명령어들(instructions), 동작들(operations)을 포함하는 것들 또는 엔트리(306)가 의존하는 것들을 참조할 수도 있다. 더욱이, 비록 앞서 설명된 종속 벡터(316)는 특정 구조를 갖는 것으로 설명되었으나, 종속 벡터(316)는 다양한 구조를 가질 수 있다. 예를 들어, 종속 벡터(316)는 레지스터들, 명령어들, 엔트리들, 데이터, 캐시(caches) 등과 같은 레퍼런스들을 포함할 수 있다. 더욱이, 비록 종속 벡터(316)와 카운터(312)가 엔트리-레벨 입도(entry-level granularity)를 트랙킹(tracking)하는 것으로 설명되었으나, 다양한 레벨의 입도(granularity)가 사용될 수 있다. 예를 들어, 카운터(312)가 엔트리(306)가 의존하는 레지스터들의 숫자를 트랙킹하는 경우에 레지스터-레벨 입도(register-level granularity)가 사용될 수 있다. 하나의 엔트리(301)는 엔트리(306)가 의존하는 복수의 레지스터들에 연관될 수 있다. 따라서, 하나의 엔트리(301)는 1보다 큰 카운터(312) 값의 증가를 초래할 것이다.
본 발명의 기술적 사상에 따라, 종속 벡터(316)의 구조에 무관하게, 종속 벡터(316)는 디펜던시들이 정리되거나 리빌딩됨에 따라 정리되거나 세트되거나 또는 수정될 필요가 없다. 즉, 카운터(312)를 사용하여 해결된 디펜던시들(resolved dependencies) 또는 해결되지 않은 디펜던시들(unresolved dependencies)을 트랙킹하는 것은 종속 벡터(316) 그 자체를 수정하는 것을 대체할 수 있다.
도 4 내지 도 8은 본 발명의 기술적 사상의 실시 예에 따른 도 3의 카운터(312)를 감소시키거나 증가시키는 예들을 설명하기 위한 도면들이다. 도 4를 참조하면, 도 4는 종속 엔트리(306)가 의존하는 엔트리(301)가 추측적으로 선택되고 난 후에 도 3의 메모리를 보여준다. 여기서, '선택된(selecting)' 또는 '선택된(selected)' 등과 같은 용어는 메모리(300)로부터 엔트리를 제거하는 프로세스의 일 부분을 가리킬 수 있다. 예를 들어, 선택(selecting)은 수행을 위하여 엔트리(301)를 고르는 것을 포함할 수 있으며, 엔트리(301)는 스케줄러와 같은 프로세서 파이프라인(processor pipeline) 내의 명령어일 수 있다. 엔트리(301)는 선택(selection)에 응답하여 메모리(300)로부터 즉시 제거될 필요는 없다.
엔트리(301)를 선택하는 것에 응답하여, 카운터(312)는 디펜던시들의 숫자에서 그 감소를 가리키도록 변화된다. 여기서, 카운터(312)는 엔트리(301)를 선택하는 것에 응답하여 하나의 보다 적은 디펜던시들을 가리키도록 감소된다. 그러나, 주의할 것은, 종속 벡터(316)는 변화하지 않는다. 이는 엔트리(301)의 비트가 정리되지 않아 종속 벡터(316)는 바뀌지 않고 유지됨을 나타낸다.
카운터(312)가 변화되고 난 후에, 카운터(312)는 엔트리(306)의 디펜던시들이 정리되었는 지의 여부를 판단하기 위하여 임계값(threshold)과 비교될 것이다. 만약 카운터(312)를 임계값과 비교한 결과가 디펜던시들이 정리되었다는 것을 가리킨다면, 엔트리(306)는 선택될 준비가 되었다는 것을 가리킬 것이다. 예를 들어, 임계값이 0 (zero) 이라면, 이는 0 (zero)의 디펜던시들이 남아있다는 것을 가리킬 것이다. 본 실시 예에서, 도 4의 카운터(312)는 0이 아니기 때문에, 엔트리(306)는 아직 선택될 준비가 되지 않았다. 좀더 구체적으로, 엔트리(306)가 추가적으로 의존하는 엔트리(302)가 아직 선택되지 않았기 때문에, 종속 엔트리(306)은 아직 선택될 준비가 되지 않았다.
도 5를 참조하면, 도 5는 종속 엔트리(306)가 의존하는 제2 엔트리(302)가 선택되고 난 후의 도 4의 메모리를 설명하기 위한 도면이다. 도 4에서 설명된 동작과 유사하게, 카운터(312)는 엔트리(302)의 선택에 응답하여 다시 한번 감소된다. 감소된 카운터(312)의 결과가 본 실시 예의 임계값과 동일한 0(zero)의 값을 나타내기 때문에, 엔트리(306)는 선택될 준비가 된다.
비록 상기의 설명에서는 0의 임계값과 명확하게 비교하는 동작이 수행되었으나, 반드시 명확한 비교 동작이 수행될 필요는 없다. 예를 들어, 카운터(312)는 카운터(312)가 0에 도달할 때 제로 플래그(zero flag)로 세트 될 수 있다. 엔트리(306)는 제로 플래그에 응답하여 선택될 준비가 되었다는 것을 가리킬 것이다.
상술한 바와 같이, 엔트리(306)는 종속 벡터(316)의 엔트리들을 정리하지 않고 선택될 준비가 될 수 있다. 이는, 도 4에서 설명된 초기 상태의 종속 벡터(316)가 도 3 및 도 5의 종속 벡터와 동일하거나 실질적으로 동일한 것을 의미한다. 오직 카운터(312)만이 변화하며, 종속 벡터(316)는 변화하지 않는다.
디펜던시들을 리빌딩(rebuilding)하는 동작이 도 6 내지 도 8을 참조하여 설명될 것이다. 도 6을 참조하면, 도 6은 엔트리(301)가 취소(cancelled)되고 난 후의 도 5의 메모리를 보여준다. 본 실시 예에서, 취소(cancelling)는 엔트리(301)와 관련된 동작이 해당 동작을 완료하기 전에 해당 동작을 중지(stopping) 시키는 것을 포함한다. 예를 들어, 만약 엔트리(301)가 명령어(instruction)이라면, 엔트리(301)는 로딩 미스(load miss), 오류(fault), 해저드(hazard) 등과 같은 다양한 원인으로 취소될 수 있다. 도 6에 도시된 바와 같이, 카운터(312)는 엔트리(306)가 의존하는 엔트리(301)의 취소에 응답하여 변화한다. 여기서, 카운터(312)는 1 만큼 증가되었다.
도 7을 참조하면, 도 7은 다른 엔트리(302)가 취소된 후에 도 5의 메모리를 보여주는 도면이다. 도 6에 도시된 것과 다른 엔트리(302)가 취소되었다고 할 지라도, 카운터(12)는 추측적으로 정리된 디펜던시들 중 어느 하나가 취소되었다는 것을 가리키도록 여전히 1 만큼 증가된다. 따라서, 어느 엔트리가 취소되었는 지의 여부와 무관하게, 어떤 하나의 엔트리가 취소될 때 종속 엔트리(306)의 변화는 실질적으로 동일하다.
본 발명의 기술적 사상에 따른 실시 예에 있어서, 취소된 엔트리의 아이덴티티 정보(identity information)는 기록될 필요가 없다. 다시 말하면, 카운터(312)는 남아있는 디펜던시들의 숫자를 추적할 수 있으며, 특정 디펜던시들이 남아있는 지에 대한 정보를 유지할 필요는 없다. 엔트리(306)가 선택되기 전에 모든 디펜던시들이 정리되어야 하므로, 이러한 방법은 종속 벡터(316)의 비트들을 정리하는 것과 관련된 복잡한 절차들을 수반하지 않고도 엔트리(306)가 선택될 준비가 되었는지의 여부를 판단하는 효과적인 수단을 제공한다.
도 8을 참조하면, 도 8은 프로듀서 엔트리들(301, 302)이 모두 취소되고 한 후의 도 5의 메모리를 나타내는 도면이다. 예를 들어, 엔트리(301)는 도 7과 유사하게 엔트리(302)가 취소되고 난 후에 취소될 수 있으며, 엔트리(302)는 도 6과 유사하게 엔트리(301)가 취소되고 난 후에 취소될 수 있다. 어느 엔트리가 먼저 취소되었는지의 여부와 무관하게, 엔트리(306)가 의존하는 엔트리의 각 취소 동작은 카운터(312) 추가된 카운터 값 만큼 증가되는 것을 초래한다. 본 실시 예에서, 엔트리(306)가 의존하는 두 개의 엔트리들(301, 302)이 모두 취소되었기 때문에, 카운터(312)는 본래의 값인 2로 돌아가도록 증가되었다.
도 8의 메모리(300)는 또한 실질적으로 동시에 취소된 복수의 엔트리들로부터 비롯된 것일 수 있다. 예를 들어 메모리(300)는 도 5에서 설명된 상태일 수 있다. 만약 두 개의 엔트리들(301, 302)이 실질적으로 동시에 취소된다면, 카운터(312)는 이에 응답하여 2만큼 증가될 것이다. 이는 카운터(312)가 취소의 타이밍이나 순서와는 무관하게 취소된 엔트리들의 숫자에 따라 증가됨을 의미한다. 결과적으로, 카운터(312)의 값은 여전히 엔트리(306)의 해결되지 않은 디펜던시들(unresolved dependencies)을 추적할 수 있다.
상술한 바와 같이, 엔트리들은 선택되거나 취소될 수 있다. 본 발명의 기술적 사상의 실시 예에 있어서, 종속 벡터(316)를 리빌딩하는 것은 디펜던시 비트들이 정리됨에 따라 요구되는 것은 아니다. 오히려, 카운터(312)는 엔트리(306)가 의존하는 엔트리들이 선택되거나 취소됨에 따라 감소하거나 증가될 수 있다.
비록 디펜던시들을 추적하는 매커니즘으로써 카운터(312)를 증가시키거나 감소시키는 것이 앞서 상세히 설명되었지만, 카운터(312)를 변화시키는 방향(direction)은 다를 수 있다. 예를 들어, 본 실시 예에 있어서, 카운터(312)는 엔트리들(301, 302)을 위하여 -2와 같은 음의 숫자로 로딩될 수 있으며, 부호화된 숫자로서 카운터(312) 내에 인코딩 될 수 있다. 카운터(312)는 엔트리들이 선택됨에 따라 증가될 것이며, 엔트리들이 취소됨에 따라 감소될 것이다. 일단 카운터(312)가 0의 임계값에 도달하면, 엔트리(306)는 선택될 준비가 되었음을 가리키게 될 수 있다.
또한, 비록 0이 임계값으로 사용되었지만, 다른 값들이 임계값으로 사용될 수 있다. 예를 들어, 일 실시 예에 있어서, 카운터(312)는 초기에 0으로 세트 되고, 임계값은 엔트리(306)의 디펜던시들의 숫자로 세트 될 수 있다. 카운터(312)는 엔트리들이 선택됨에 따라 증가할 수 있으며, 엔트리들이 취소됨에 따라 감소될 수 있다. 예를 들어, 2 개의 디펜던시들을 갖는 앞서 설명된 실시 예에 있어서, 임계값은 2로 설정될 수 있다 일단 카운터(312)의 값이 2에 도달하면, 엔트리(306)는 선택될 준비가 되었음을 가리키게 될 수 있다.
비록 하나의 메모리(300)가 실시 예로 설명되었지만, 복수의 메모리들(300)이 사용될 수도 있다. 더욱이, 복수의 메모리들(300)은 동일한 기능의 일부일 필요도 없다. 예를 들어, 하나 또는 그 이상의 메모리들(300)은 복수 명령어 스케쥴러들(multiple instruction schedulers)의 일부일 수 있으며 반면에 하나 또는 그 이상의 메모리들(300)은 리플레이 큐(replay queue)의 일부일 수 있다. 더욱이, 어떠한 엔트리도 어떠한 메모리들(300)의 엔트리들에 의존할 수 있다. 더욱이, 엔트리를 취소하는 것은 그 엔트리가 그 본래의 메모리(300)로 돌아가도록 하는 결과를 야기하도록 할 필요도 없다. 예를 들어, 스케줄러를 위한 메모리(300)로부터의 명령어는 리플레이 큐를 위한 다른 메모리(300)로 이동할 수 있다.
도 9는 본 발명의 기술적 사상의 실시 예에 따른 복수의 목적지들(destinations)을 수반하는 복수의 엔트리들과 복수의 종속 엔트리들의 예들을 포함하는 메모리(900)를 나타내는 도면이다. 본 실시 예에 있어서, 엔트리(901)는 목적지들(A, B)을 포함한다. 엔트리(902)는 목적지들(C, D, E)을 포함한다.
본 실시 예에 있어서, 종속 벡터들(906, 910, 914)은 목적지들에 대응하는 비트들을 포함한다. 여기서, 최소 유효 비트(LSB)로부터 시작하여, 비트들은 목적지들(A, B, C, D, E)에 대응한다. 다른 목적지들이 존재할 수 있다. 그러나 간략한 설명을 위하여, 오직 A~E의 목적지들만이 도시되어 있다. 다른 실시 예에 있어서, 종속 벡터는 이와는 다른 방식으로 나타내어 질 수도 있다.
엔트리들(904, 908, 912)은 엔트리들(901, 902)에 의존한다. 구체적으로, 엔트리들(904, 908, 912) 각각은 엔트리들(901, 902)의 목적지들에 의존하는 소스를 가지고 있다. 엔트리(904)는 소스들(907-1, 907-2)을 포함한다. 소스(907-1)는 목적지(B)에 의존하며, 반면 소스(907-2)는 목적지(C)에 의존한다. 여기서, 종속 벡터(906)의 00110(2진수)는 엔트리(904)가 목적지들(B, C)에 의존함을 가리킨다. 카운터(905)는 엔트리(904)가 의존하는 목적지들의 숫자를 나타낸다. 여기서, 카운터(905)는 엔트리(904)가 서로 다른 목적지들에 의존함에 따라 10(2진수)로 설정되어 있다.
엔트리(908)는 소스들(911-1, 911-2, 911-3)을 포함한다. 소스들(911-1, 911-2)은 각각 목적지(A)에 의존하며, 반면 소스(911-3)는 목적지(C)에 의존한다. 여기서, 종속 벡터(910)의 00101(2진수)는 엔트리(908)가 목적지들(A, C)에 의존하는 것을 나타낸다. 카운터(909)는 엔트리(908)가 의존하는 목적지들의 숫자로 세트 되어 있다. 여기서, 카운터(909)는 엔트리(908)가 서로 다른 목적지들(A, C)에 의존함에 따라 10(2진수)로 세트 되어 있다. 주의할 점은 엔트리(908)가 세 개의 소스들(911)을 포함한다고 하더라도, 엔트리(908)는 단지 두 개의 목적지들에 의존한다는 것이다.
엔트리(912)는 소스들(915-1, 915-2, 915-3)을 포함한다. 소스(915-1)는 목적지(A)에 의존하고, 소스(915-2)는 목적지(B)에 의존하며, 소스(915-3)는 목적지(C)에 의존한다. 여기서, 종속 벡터(914)의 00111(2진수)는 엔트리(912)가 목적지들(A, B, C)에 의존함을 가리킨다. 카운터(913)는 엔트리(912)가 의존하는 목적지들의 숫자로 세트 되어 있다. 여기서, 카운터(913)는 엔트리(912)가 서로 다른 세 개의 목적지들(A, B, C)에 의존함에 따라 11(2진수)로 세트 되어 있다. 주의할 점은 엔트리(912)가 엔트리들(901, 902)에 의존한다고 하더라도, 카운터(913)는 엔트리(912)가 엔트리(901)의 두 개의 목적지들 및 엔트리(902)의 하나의 목적지에 의존함에 따라 3으로 세트 된다는 것이다.
상술한 바와 같이, 카운터들(905, 909, 913)은 엔트리들(901, 902)을 선택하는 것에 응답하여 변할 수 있다. 예를 들어, 엔트리(901)를 선택하는 것에 응답하여, 카운터(905)는 엔트리(904)가 엔트리(901)로부터 오직 하나의 목적지(B)에 의존함에 따라 1만큼 감소될 것이다. 카운터(909)는 또한 엔트리(908)가 엔트리(901)로부터 오직 하나의 목적지(A)에만 의존함에 따라 비록 복수의 소스들(911-1, 911-2)이 목적지(A)에 의존한다고 할 지라도 1만큼 감소될 것이다. 그러나, 카운터(913)는 엔트리(912)가 엔트리(901)로부터 두 개의 목적지들(A, B)에 의존함에 따라 2만큼 감소될 것이다.
본 실시 예에 있어서, 각 엔트리들(904, 908, 912)은 단지 엔트리(902)의 목적지(C)에 의존한다. 따라서, 카운터들(905, 909, 913)은 엔트리(902)를 선택하는 것에 응답하여 1만큼 감소될 것이다. 그러나 다른 실시 예들에 있어서, 엔트리들(904, 908, 912)은 엔트리(901)과 유사하게 엔트리(902)의 복수의 목적지들에 대응할 수 있으며 대응하는 카운터들은 이에 따라 변화할 수 있다.
비록 엔트리들(901, 902)를 선택하는 것에 응답하여 카운터들(905,909, 913)을 변경하는 것이 설명되었지만, 카운터들(905, 909, 913)은 앞서 설명된 바와 같이 엔트리들(901, 902)를 취소하는 것에 응답하여 변화될 수 있다. 예를 들어, 만약 엔트리(901)가 취소된다면, 카운터들(905, 909, 913)은 각각 1, 1, 2 만큼 증가될 것이다. 더욱이, 비록 카운터를 증가시키고 감소시키는 것이 카운터들(905, 909, 913)을 변화시키는 예로써 사용되었지만, 카운터들(905, 909, 913)은 설명된 것과 다른 방식으로 변화될 수도 있다.
일 실시 예로, 앞서 설명된 소스들과 목적지들은 명령어들의 레지스터들(registers)일 수 있다. 예를 들어, 목적지들(A~E)은 서로 다른 5개의 레지스터들에 대응할 수 있다. 소스들(907, 911, 915)은 다른 레지스터들을 참조할 수 있다. 비록 레지스터들이 소스들 및 목적지들의 예로써 사용되었지만, 다른 기술들이 사용될 수 있다. 예를 들어, 소스들과 목적지들은 메모리 위치들, 룩업 테이들(lookup table)에 대한 태그들, 다른 데이터 저장 위치 등을 참조할 수 있다.
비록 엔트리들(901, 902)이 엔트리들(904, 908, 912)에 비하여 다른 구성요소들을 가지는 것으로 설명되었지만, 추가적인 구성요소들은 간략한 설명을 위하여 설명되지 않았다. 이는, 엔트리들(901, 902) 역시 카운터들, 소스들, 종속 벡터들을 가질 수 있고, 엔트리들(904, 908, 912)는 목적지들을 가질 수 있음을 말한다.
일 실시 예에 있어서, 앞서 설명된 목적지들과 소스들은 명령어의 목적지들(instruction destinations)과 명령어의 소스들(instruction sources)일 수 있다. 예를 들어, 이하에서 설명될 바와 같이, 메모리(900)는 프로세서 또는 시스템의 일부일 수 있으며, 스케줄러 등의 일부일 수 있다. 따라서, 엔트리들은 명령어들과 관련될 수 있으며, 따라서 목적지들과 소스들은 대응하는 명령어들의 목적지들과 소스들일 수 있다.
도 10은 본 발명의 기술적 사상의 실시 예에 따른 장치(1000)를 보여주는 블록도이다. 본 실시 예에 있어서, 메모리(1002)는 앞서 설명된 메모리(300)와 유사하게 복수의 엔트리들을 저장할 수 있다. 따라서, 각 종속 엔트리는 카운터를 포함할 수 있다. 컨트롤러(1004)는 메모리(1002)에 연결될 수 있다. 컨트롤러(1004)는 앞서 설명된 동작들을 수행할 수 있다. 예를 들어, 컨트롤러(1004)는 종속 엔트리가 의존하는 다른 엔트리들이 선택되거나 취소됨에 따라 종속 엔트리와 관련된 카운터를 변화시킬 것이다.
앞서 설명된 바와 같이, 복수의 메모리들이 존재할 수 있다. 따라서, 컨트롤러(1004)는 하나 또는 그 이상의 다른 메모리들(1002)에 연결될 수 있다. 컨트롤러(1004)는 각 메모리(1002)에 대하여 앞서 설명된 바와 같은 동작들을 수행할 수 있다. 다른 실시 예에 있어서, 도시 되지는 않았으나, 각 메모리(1002)는 서로 다른 컨트롤러에 연결될 수 있다.
도 11은 본 발명의 기술적 사상의 실시 예에 따른 명령어 패치(instruction path)의 일 부분을 나타내는 블록도이다. 본 실시 예에 있어서, 디스패처(dispatcher, 1102)에 의하여 수신된 명령어들은 하나 또는 그 이상의 스케줄러(1106)로 보내질 수 있다. 스케줄러들(1106)은 명령어들이 수행 유닛(1108)에 보내졌는지의 여부를 판단할 수 있다. 각 스케줄러(1106)는 앞서 설명된 바와 같이 메모리(300)를 포함한다. 메모리(300)의 엔트리들은 스케줄러(1106) 내에서 대기(waiting)하는 명령어들에 대응할 수 있다.
따라서, 명령어들은 수행 유닛들(1108)에서 수행을 하기 위하여 선택될 수 있다. 명령어들이 선택됨에 따라, 어느 종속 명령어들(dependent instruction)과 관련된 카운터들이 앞서 설명된 것과 유사한 방식으로 변화될 수 있다. 이와 유사하게, 수행 유닛들(1108)에서 명령어들이 취소됨에 따라, 어느 종속 명령어들과 관련된 카운터들은 다시 앞서 설명된 것과 유사한 방식으로 변화될 수 있다. 결과적으로, 명령어가 취소될 때, 어느 종속 명령어들의 종속 벡터들은 대응하는 종속 명령어들의 카운터들이 변화됨에 따라 아직 해결되지 않은 디펜던시들을 반영하기 위하여 리빌딩될 필요가 없으며, 종속 벡터들은 수정되지 않는다.
일 실시 예에 있어서, 시스템은 종속 벡터 내의 종속 명령어의 종속 비트를 정리하는 것에 의존할 필요가 없다. 대신에 시스템은 종속 명령어를 위하여 미리 로딩된 카운터 값(pre-loaded counter value)을 프로듀서의 웨이크업(wakeup)에 응답하여 감소시킬 수 있다. 결과적으로, 프로듀서가 취소되었을 때 디펜던시를 되살리는 것은 카운터를 그 원래의 값으로 되돌림으로써 수행될 수 있다. 이러한 기술의 장점은 종속 벡터를 리빙딩하는 것이 상대적으로 간단하며 비용 소모가 적고 면적과 파워 측면에서 유리하다는 것이다.
시스템은 매트릭스 스케줄러(matrix scheduler)에 기초하는 스케줄러 엔트리 숫자를 사용하는 하나 또는 그 이상의 스케줄러들(1106)을 포함할 수 있다. 매트릭스 스케줄링 스킴(matrix scheduler scheme)에 기초한 스케줄러 엔트리 숫자에 있어서, 종속 벡터는 스케줄러 내의 명령어 당 또는 엔트리 당 저장될 수 있다. 벡터는 스케줄러의 깊이(depth) 만큼의 넓이(width)를 가질 수 있으며 소스 디펜던시(source dependency) 당 비트를 설정함으로써 명령어의 모든 디펜던시들을 캡쳐(capture)할 수 있다. 여기서, 소스들은 프로듀서 명령어들일 수 있다. 세트된 비트의 위치는 소스 데이터의 프로듀서의 엔트리 숫자를 가리킨다. 주의할 점은 명령어의 모든 소스들이 동일한 프로듀서에 의존한다면, 단지 1 비트 세트가 있을 것이라는 것이다. 다시 말하면, 비트들 숫자의 세트는 디펜던시를 갖는 소스들의 숫자보다는 명령어가 의존하는 다른 프로듀서들의 숫자를 가리킨다.
실시 예로 32 엔트리 스케줄러(1106)를 사용하면, 상기 32 엔트리 스케줄러(1106)는 엔트리들을 포함하며 각 엔트리는 하나의 명령어에 대응한다. 각 엔트리는 그 소스들의 디펜던시들을 가리키는 32 비트 종속 벡터를 갖는다. 만약 이러한 32 비트 벡터의 N 번째 비트가 세트 되면, 그것은 하나 또는 그 이상의 소스들이 엔트리(N)의 프로듀서에 대한 디펜던시를 가지는 것을 가리킨다.
각 스케줄러 엔트리는 미리 로딩된 카운터(pre-loaded counter)를 가질 수 있으며 해당 카운터의 값은 명령어가 의존하는 프로듀서들의 총 숫자를 가리킬 수 있다. 이 카운트 값은 종속 벡터내의 32 디펜던시 비트들의 팝-카운트(pop-count)에 의하여 생성될 수 있다. 그러나 하나의 명령어에 속하는 소스들의 숫자는 한자리 수 보다 작을 것이며 따라서 풀 32비트 팝-카운트(full 32 bit pop-count)는 아마도 필요치 않을 것이다. 예를 들어, 만약 명령어가 단지 최대 2개의 소스들을 갖는다면, 종속 벡터 내의 비트들의 최대 숫자 세트는 단지 2일 수 있다. 이러한 경우에, 팝-카운트 대신에 종속 비트들의 배타적 논리합(XOR) 및 종속 비트들의 논리합(OR)을 사용하여 카운트하는 방법이 선택될 수 있다. 만약 배타적 논리합(XOR)이 결과가 1이라면, 이는 단지 1 종속 비트가 세트 되었다는 가리킨다. 만약 배타적 논리합(XOR)의 결과가 0이라면, 이는 2 종속 비트가 있거나 세트된 종속 비트가 없다는 것 중 어느 하나를 가리킨다. 2 비트들 또는 어느 비트들도 선택되지 않았는지의 여부를 결정하기 위하여, 비트들의 논리합(OR)을 할 수도 있다. 만약 그 결과가 1이라면, 이는 2 비트들이 세트 되었다는 것을 가리키고, 결과가 0이라면 이는 세트된 비트가 없다는 것을 가리킨다. 따라서 배타적 논리합(XOR)과 논리합(OR)의 조합은 효과적인 팝-카운트를 제공한다. 또한 모든 32 비트들의 풀 팝-카운트(full pop-count)를 수행하지 않고도 미리 로딩된 카운터 값을 얻는 다양한 방법이 있을 수 있다.
프로듀서가 종속 소스들을 웨이크업 할 때, 종속 비트들을 정리하는 것 대신에 종속 카운터 값이 감소될 것이다. 카운터 값이 0(zero)에 도달할 때, 명령어는 선택될 준비가 될 것이다.
만약 프로듀서가 추측적으로 그것의 종속 소스들을 웨이크업하고 이후 예를 들어 로딩 미스, 오류, 해저드 등과 같은 다양한 이유로 최소된다면, 종속 카운터 값은 1만큼 뒤로 증가될 것이다. 만약 프로듀서들이 실질적으로 거의 동시에 취소된다면, 카운터 값은 취소된 프로듀서들의 숫자와 동일한 값 만큼 증가될 것이다.
일 실시 예에 있어서, 명령어 당 종속 카운터는 소비자 명령어(consumer instruction)이 의존하는 특정 프로듀서 명령어들의 숫자를 추적하는데 사용될 것이다.
다른 실시 예에 있어서, 스케줄러(1106)에 명령어가 할당될 때 종속 카운터 값이 각 명령어를 위하여 세트 될 것이다.
다른 실시 예에 있어서, 종속 명령어를 위한 종속 카운터 값은 프로듀서 명령어가 종속 명령어를 웨이크업 할 때 1 만큼 감소될 것이다.
다른 실시 예에 있어서, 명령어를 위한 모든 디펜던시들이 만날 때, 다시 말하면 종속 명령어의 모든 프로듀서들이 웨이크업을 발생시킬 때, 명령어의 종속 카운터 값은 0이 되고 선택될 준비가 될 것이다.
다른 실시 예에 있어서, 프로듀서 명령어에 의하여 발생한 웨이크업이 추측적이고 프로듀서 명령어가 취소될 때, 종속 명령어의 종속 카운터 값은 1만큼 증가할 것이다.
다른 실시 예에 있어서, 명령어 소스 종속 비트들은 프로듀서 명령어들에 의하여 발생된 웨이크업에 의하여 정리되지 않을 것이다.
다른 실시 예에 있어서, 프로듀서가 취소된 경우의 명령어 종속 비트들(instruction dependency)의 리빌딩은 명령어 종속 비트들이 정리되지 않음에 따라 요구되지 않고, 단지 카운터 값이 리빌딩될 필요가 있다.
비록 다양한 엔트리에 대하여 프로듀서라는 용어가 상기 사용되었으나, 엔트리들은 어느 것도 생산(pruduce)하지 않을 수 있다. 일 실시 예로, 프로듀서 엔트리는 레지스터가 그 동작의 결과를 저장하는 프로듀서 명령어일 수 있다. 종속 엔트리 또는 종속 명령어는 레지스터의 값을 사용할 수 있을 것이다. 다른 실시 예에 있어서, 제 1 엔트리는 제 2 엔트리의 순서에 거의 의존하지 않을 것이다. 즉, 제 1 엔트리는 제 2 엔트리의 출력을 이용하지 않을 것이며, 단지 제 2 엔트리 후에 수행될 필요만이 있을 것이다.
도 12는 본 발명의 기술적 사상의 실시 예에 따른 프로세서를 포함하는 시스템(1200)을 보여주는 블록도이다. 전자 시스템(1200)은 컴퓨터와 같은 다양하고 광범위한 전자기기에 사용될 수 있으며, 또한 휴대 가능한 노트북 컴퓨터, 울트라 모바일 PC(UMPC), 태블릿 PC, 서버, 워크스테이션, 모바일 커뮤니케이션 장치, 위성, 셋 탑 박스(set top box), TV 등에 사용될 수 있다. 예를 들어, 전자 시스템(1200)은 버스(1220)를 이용하여 데이터 통신을 수행하는 메모리 시스템(1212), 프로듀서(1214), 램(1216), 유저 인터페이스(1218)를 포함할 수 있다.
프로세서(1214)는 마이크로프로세서 또는 모바일 프로세서(AP)일 수 있다. 프로세서(1214)는 플로팅 포인트 유닛(floating point unit, FPU), 알고리즘 로직 유닛(ALU), 그래픽 프로세싱 유닛GPU), 그리고 디지털 신호 프로세싱 코어(DSP Core) 또는 이들 사이의 결합을 포함할 수 있는 프로세서 코어(processor core)를 가질 수 있다. 프로세서(1214)는 프로그램을 수행할 수 있으며 전자 시스템(1200)을 제어할 수 있다. 프로세서(1214)는 앞서 설명된 바와 같이 메모리들(300, 900, 1002), 컨트롤러(2004)를 포함할 수 있다.
램(1216)은 프로세서(1214)의 동작 메모리(operating memory)로 사용될 수 있다. 예를 들어, 프로세서(1214) 또는 램(1216)은 앞서 설명된 본 발명의 실시 예에 따른 메모리를 포함할 수 있다. 일 실시 예로, 프로세서(1214)와 램(1216)은 하나의 패키지 바디(package body)에 실장 될 수 있다.
유저 인터페이스(1218)는 데이터를 전자 시스템(1200)에 입력하거나 전자 시스템(1200)으로부터 출력하는데 사용될 수 있다. 메모리 시스템(1212)은 프로세서(1214)를 동작하기 위한 코드들, 프로세서(1214)에 의하여 처리된 데이터, 또는 외부 입력 데이터를 저장할 수 있다. 메모리 시스템(1212)은 메모리 컨트롤러와 메모리를 포함한다.
본 설명에 있어서 전체적으로 언급된 '하나의 실시 예' 또는 '일 실시 예' 등의 용어는 해당 실시 예와 관련된 구체적 특징, 구조, 특성이 본 발명의 적어도 하나의 실시 예에 포함된다는 것을 의미한다.
따라서, 본 설명에서의 '하나의 실시 예' 또는 '일 실시 예'는 동일한 실시 예를 의미하는 것으로 이해될 필요가 없다. 더욱이, 구체적인 특성, 구조, 특징 등은 하나 또는 그 이상의 실시 예들이 결합될 수도 있는 것으로 이해되어야 한다.
비록 본 발명의 실시 예에 따라 구조, 방법, 시스템 등이 설명되었지만 본 발명의 기술적 사상은 이에 한정되지 않으며 다양하게 적용 및 응용될 수 있음이 이해될 것이다. 따라서 본 발명의 기술적 사상의 범위 내에서 다양한 구조, 방법, 시스템을 구현하는 것이 가능함 역시 이해될 것이다. 결국, 본 발명의 기술적 사상에 대한 권리범위는 앞서 설명된 구체적인 실시 예 및 이하의 청구항에 기재된 내용 뿐만 아니라 본 발명의 기술적 사상에 따른 본 발명의 실시 예의 가능한 변형, 응용, 적용 예를 포함함이 이해될 것이다.
instruction: 명령어
producer: 프로듀서
speculative instruction: 추론적 명령어
dependency vector: 종속 벡터
dependency bit: 종속 비트
dependency: 디펜던시
OR operation: 논리합 연산
XOR operation: 배타적 논리합 연산
entry: 엔트리
counter: 카운터
threshold: 임계 값
user interface: 사용자 인터페이스

Claims (27)

  1. 데이터 처리 시스템의 데이터 처리 방법에 있어서,
    제2 엔트리를 선택하는 것에 응답하여 제1 엔트리와 연관된 카운터의 값을 변환하는 단계;
    상기 카운터의 상기 값을 임계값과 비교하는 단계;
    상기 카운터의 상기 값과 상기 임계값을 비교하는 것에 응답하여 상기 제1 엔트리가 선택될 준비가 되었음을 알리는 단계; 및
    상기 제2 엔트리를 취소하는 것에 응답하여 상기 카운터의 상기 값을 변환하는 단계를 포함하고,
    상기 제1 엔트리는 상기 제2 엔트리에 종속적인 데이터 처리 방법.
  2. 제 1 항에 있어서,
    상기 제2 엔트리를 선택하는 것에 응답하여 상기 카운터의 상기 값을 변환하는 단계는 상기 카운터의 상기 값을 감소시키는 것을 포함하는 데이터 처리 방법.
  3. 제 1 항에 있어서,
    상기 임계값은 '0'인 데이터 처리 방법.
  4. 제 1 항에 있어서, 상기 카운터의 상기 값을 상기 제1 엔트리가 의존하는 목적지들의 넘버로 세팅하는 단계를 더 포함하는 데이터 처리 방법.
  5. 제 1 항에 있어서,
    상기 카운터는, 상기 제2 엔트리를 선택하는 것에 응답하여 상기 카운터의 상기 값을 변환하는 단계 전에, 상기 제1 엔트리의 종속 벡터의 팝-카운트에 의하여 생성되는 데이터 처리 방법.
  6. 제 1 항에 있어서,
    상기 제2 엔트리를 선택하는 것에 응답하여 상기 카운터의 상기 값을 변환하는 단계 전에, 상기 제1 엔트리의 종속 벡터의 비트들에 대한 논리합 연산을 수행하고, 상기 종속 벡터의 상기 비트들에 대한 배타적 논리합 연산을 수행하고, 상기 논리합 연산 및 상기 배타적 논리합 연산의 결과들에 응답하여 상기 카운터가 생성되는 데이터 처리 방법.
  7. 제 1 항에 있어서,
    상기 제2 엔트리를 취소하는 것에 응답하여 상기 카운터의 상기 값을 변환하는 단계는 상기 카운터의 상기 값을 증가시키는 것을 포함하는 데이터 처리 방법.
  8. 제 1 항에 있어서,
    상기 카운터는 상기 제1 엔트리가 의존하는 목적지의 최대 숫자를 나타내는 비트들의 최소 개수인 폭(width)을 갖는 데이터 처리 방법.
  9. 제 1 항에 있어서,
    상기 제1 엔트리가 선택될 준비가 되었음을 가리키는 단계는 상기 제1 엔트리와 연관된 종속 벡터의 엔트리들을 정리하는 것 없이 상기 제1 엔트리가 선택될 준비가 되었음을 가리키는 것을 포함하는 데이터 처리 방법.
  10. 복수의 엔트리들을 포함하고, 각 엔트리는 적어도 카운터를 포함하는 메모리; 및
    상기 메모리와 연결된 컨트롤러를 포함하고,
    상기 컨트롤러는:
    상기 복수의 엔트리들 중 제2 엔트리를 선택하는 것에 응답하여 상기 복수의 복수의 엔트리들 중 제1 엔트리와 연관된 상기 카운터의 값을 변환하고;
    상기 카운터의 상기 값을 임계값과 비교하고;
    상기 카운터의 상기 값을 상기 임계값과 비교하는 것에 응답하여 상기 제1 엔트리가 선택될 준비가 되었음을 가리키고;
    상기 제2 엔트리를 취소하는 것에 응답하여 상기 카운터의 상기 값을 변환하도록 구성되고,
    상기 제1 엔트리는 상기 제2 엔트리에 종속적인 데이터 처리 장치.
  11. 제 10 항에 있어서,
    상기 컨트롤러는 상기 복수의 엔트리들 중 제2 엔트리를 선택하는 것에 응답하여 상기 카운터를 감소시킴으로써 상기 카운터의 값을 변환하도록 더 구성된 데이터 처리 장치.
  12. 제 10 항에 있어서,
    상기 임계값은 '0'인 데이터 처리 장치.
  13. 제 10 항에 있어서,
    상기 컨트롤러는 상기 제1 엔트리가 의존하는 상기 복수의 엔트리들의 목적지들의 숫자로 상기 카운터의 상기 값을 세팅하도록 더 구성된 데이터 처리 장치.
  14. 제 10 항에 있어서,
    상기 컨트롤러는 상기 제1 엔트리의 종속 벡터의 팝-카운트에 의하여 상기 카운터를 생성하도록 더 구성된 데이터 처리 장치.
  15. 제 10 항에 있어서,
    상기 컨트롤러는:
    상기 제1 엔트리의 종속 벡터의 비트들에 대한 논리합 연산을 수행하고;
    상기 종속 벡터의 상기 비트들에 대한 배타적 논리합 연산을 수행하고;
    상기 논리합 연산 및 상기 배타적 논리합 연산의 결과들에 응답하여 상기 카운터를 생성하도록 더 구성된 데이터 처리 장치.
  16. 제 14 항에 있어서,
    상기 종속 벡터는 상기 메모리의 각 잠재적 엔트리에 대한 하나의 비트만 포함하는 데이터 처리 장치.
  17. 제 10 항에 있어서,
    상기 컨트롤러는 상기 제2 엔트리를 취소하는 것에 응답하여 상기 카운터의 상기 값을 증가시키도록 더 구성된 데이터 처리 장치.
  18. 제 10 항에 있어서,
    상기 카운터는 상기 제1 엔트리가 의존하는 목적지의 최대 숫자를 나타내는 비트들의 최소 개수인 폭(width)을 갖는 데이터 처리 장치.
  19. 제 10 항에 있어서,
    상기 컨트롤러는 상기 제1 엔트리와 연관된 종속 벡터의 엔트리들을 정리하는 것 없이 상기 제1 엔트리가 선택될 준비가 되었음을 가리키도록 더 구성된 데이터 처리 장치.
  20. 제 10 항에 있어서,
    제2 복수의 엔트리들의 저장하도록 구성된 제2 메모리를 더 포함하고,
    상기 컨트롤러는 상기 제2 엔트리를 취소하는 것에 응답하여 상기 제2 엔트리를 상기 제2 메모리로 이동하도록 더 구성되는 데이터 처리 장치.


  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
KR1020130160342A 2013-03-14 2013-12-20 디펜던시들을 정리하고 리빌딩하는 시스템 및 방법 KR102010312B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/831,434 US9400653B2 (en) 2013-03-14 2013-03-14 System and method to clear and rebuild dependencies
US13/831,434 2013-03-14

Publications (2)

Publication Number Publication Date
KR20140113304A KR20140113304A (ko) 2014-09-24
KR102010312B1 true KR102010312B1 (ko) 2019-08-13

Family

ID=51419103

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130160342A KR102010312B1 (ko) 2013-03-14 2013-12-20 디펜던시들을 정리하고 리빌딩하는 시스템 및 방법

Country Status (5)

Country Link
US (2) US9400653B2 (ko)
JP (2) JP6320801B2 (ko)
KR (1) KR102010312B1 (ko)
CN (1) CN104050215B (ko)
DE (1) DE102014103188A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US10061584B2 (en) 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US10031756B2 (en) 2015-09-19 2018-07-24 Microsoft Technology Licensing, Llc Multi-nullification
US10180840B2 (en) * 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US10185568B2 (en) * 2016-04-22 2019-01-22 Microsoft Technology Licensing, Llc Annotation logic for dynamic instruction lookahead distance determination
US11474821B1 (en) * 2021-05-12 2022-10-18 International Business Machines Corporation Processor dependency-aware instruction execution

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000194556A (ja) 1998-12-23 2000-07-14 Tera Computer Co 命令ルックアヘッドシステムおよびハ―ドウェア
JP2003519833A (ja) 2000-01-03 2003-06-24 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 依存性連鎖の発行および再発行が可能なスケジューラ
US20100318995A1 (en) 2009-06-10 2010-12-16 Microsoft Corporation Thread safe cancellable task groups
WO2012045941A1 (fr) 2010-10-07 2012-04-12 Commissariat A L'energie Atomique Et Aux Energies Alternatives Systeme d'ordonnancement de l'exécution de taches cadence par un temps logique vectoriel

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6065105A (en) 1997-01-08 2000-05-16 Intel Corporation Dependency matrix
US6334182B2 (en) 1998-08-18 2001-12-25 Intel Corp Scheduling operations using a dependency matrix
US6557095B1 (en) 1999-12-27 2003-04-29 Intel Corporation Scheduling operations using a dependency matrix
US6981129B1 (en) 2000-11-02 2005-12-27 Intel Corporation Breaking replay dependency loops in a processor using a rescheduled replay queue
US6877086B1 (en) 2000-11-02 2005-04-05 Intel Corporation Method and apparatus for rescheduling multiple micro-operations in a processor using a replay queue and a counter
US6950927B1 (en) 2001-04-13 2005-09-27 The United States Of America As Represented By The Secretary Of The Navy System and method for instruction-level parallelism in a programmable multiple network processor environment
JP2007029421A (ja) 2005-07-27 2007-02-08 Aruze Corp 遊技機及び遊技システム
US20070043932A1 (en) 2005-08-22 2007-02-22 Intel Corporation Wakeup mechanisms for schedulers
JP5018480B2 (ja) 2005-09-05 2012-09-05 日本電気株式会社 情報処理装置
US8291431B2 (en) 2006-08-29 2012-10-16 Qualcomm Incorporated Dependent instruction thread scheduling
US9946547B2 (en) * 2006-09-29 2018-04-17 Arm Finance Overseas Limited Load/store unit for a processor, and applications thereof
US7979844B2 (en) 2008-10-14 2011-07-12 Edss, Inc. TICC-paradigm to build formally verified parallel software for multi-core chips
US8099582B2 (en) 2009-03-24 2012-01-17 International Business Machines Corporation Tracking deallocated load instructions using a dependence matrix
US8453146B2 (en) 2009-12-23 2013-05-28 Intel Corporation Apportioning a counted value to a task executed on a multi-core processor
JP5548037B2 (ja) 2010-06-11 2014-07-16 パナソニック株式会社 命令発行制御装置及び方法
US20120023314A1 (en) 2010-07-21 2012-01-26 Crum Matthew M Paired execution scheduling of dependent micro-operations

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000194556A (ja) 1998-12-23 2000-07-14 Tera Computer Co 命令ルックアヘッドシステムおよびハ―ドウェア
JP2003519833A (ja) 2000-01-03 2003-06-24 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 依存性連鎖の発行および再発行が可能なスケジューラ
US20100318995A1 (en) 2009-06-10 2010-12-16 Microsoft Corporation Thread safe cancellable task groups
WO2012045941A1 (fr) 2010-10-07 2012-04-12 Commissariat A L'energie Atomique Et Aux Energies Alternatives Systeme d'ordonnancement de l'exécution de taches cadence par un temps logique vectoriel

Also Published As

Publication number Publication date
JP2014179101A (ja) 2014-09-25
JP2018106760A (ja) 2018-07-05
KR20140113304A (ko) 2014-09-24
US9400653B2 (en) 2016-07-26
DE102014103188A1 (de) 2014-09-18
US20140281404A1 (en) 2014-09-18
CN104050215B (zh) 2019-04-09
US10552157B2 (en) 2020-02-04
JP6320801B2 (ja) 2018-05-09
CN104050215A (zh) 2014-09-17
JP6604689B2 (ja) 2019-11-13
US20160321079A1 (en) 2016-11-03

Similar Documents

Publication Publication Date Title
KR102010312B1 (ko) 디펜던시들을 정리하고 리빌딩하는 시스템 및 방법
CN110688157B (zh) 一种计算装置及计算方法
TWI654562B (zh) 藉由演算法匹配、停用特徵或限制效能之回溯相容性
TWI644208B (zh) 藉由對硬體資源之限制實現的向後相容性
US10459727B2 (en) Loop code processor optimizations
KR20080089313A (ko) 곱셈 기능을 수행하기 위한 방법 및 장치
US10552159B2 (en) Power management of branch predictors in a computer processor
US9940139B2 (en) Split-level history buffer in a computer processing unit
US10678542B2 (en) Non-shifting reservation station
KR20150079429A (ko) 캐시 미시들에 대한 프로세서 읽기 후 쓰기 해저드를 다루기 위한 장치 및 그것의 동작 방법
US10592252B2 (en) Efficient instruction processing for sparse data
KR20190092245A (ko) 엣지 특성이 검증된 마이크로 분기 타깃 버퍼를 이용하여 컴퓨터 프로세서의 전력 소모를 감소시키는 시스템 및 방법
WO2017116927A1 (en) Zero cache memory system extension
CN109564510B (zh) 用于在地址生成时间分配加载和存储队列的系统和方法
US20180004516A1 (en) Administering instruction tags in a computer processor
CN104823153A (zh) 引导变化预测器逻辑
US10846095B2 (en) System and method for processing a load micro-operation by allocating an address generation scheduler queue entry without allocating a load queue entry
US20180067745A1 (en) Accelerated execution of execute instruction target
US20190205143A1 (en) System, Apparatus And Method For Controlling Allocations Into A Branch Prediction Circuit Of A Processor

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E90F Notification of reason for final refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant